Name: series-workflowkrfjr Phase: Succeeded StartedAt: 2026-08-26 10:50:12 +0000 UTC FinishedAt: 2026-08-26 15:35:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrfjr[0] Phase: Succeeded StartedAt: 2026-08-26 10:50:12 +0000 UTC FinishedAt: 2026-08-26 11:49:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrfjr[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 10:50:12 +0000 UTC FinishedAt: 2026-08-26 11:49:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_mem_alloc_init", "bpf_mem_alloc_destroy" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX21lbV9hbGxvY19pbml0JiMzNDssCiAgICAmIzM0O2JwZl9tZW1fYWxsb2NfZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBwb2ludGVyIGFyaXRobWV0aWMgYnVnIGluIGBfX2ZyZWVfZmluYWxfcmN1YCBieSB1c2luZyBgY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBicGZfbWVtX2NhY2hlLCByY3UpYCBpbnN0ZWFkIG9mIGByY3VfcmVjbGFpbWAuIFRoaXMgY2F1c2VzIHRoZSBgY2AgcG9pbnRlciB0byBiZSBzaGlmdGVkIGJ5IDE2IGJ5dGVzLCBsZWFkaW5nIHRvIHR5cGUgY29uZnVzaW9uIHdoZXJlIGEgZnVuY3Rpb24gcG9pbnRlciBmcm9tIGBzdHJ1Y3QgcmN1X2hlYWRgIGlzIHJlYWQgYXMgYW4gYGxsaXN0X25vZGVgIHBvaW50ZXIgYW5kIHN1YnNlcXVlbnRseSBkZXJlZmVyZW5jZWQuIFRoaXMgd2lsbCByZXN1bHQgaW4gYW4gaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgaW52YWxpZCBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yJiMzOTtzIFJDVSBmcmVlaW5nIG1lY2hhbmlzbSBieSBpbnRyb2R1Y2luZyBhIHR3by1zdGFnZSBSQ1UgY2FsbGJhY2sgZm9yIGByY3VfdHRyYWNlYC4gSXQgZGVmZXJzIHRoZSBhY3R1YWwgbWVtb3J5IGZyZWVpbmcgdG8gYF9fZnJlZV9maW5hbF9yY3VgIHZpYSBgY2FsbF9yY3VgIGZyb20gYF9fZnJlZV9yY3VgLCBlbnN1cmluZyBib3RoIFJDVSBUYXNrcyBUcmFjZSBhbmQgbm9ybWFsIFJDVSBncmFjZSBwZXJpb2RzIGhhdmUgcGFzc2VkLiBUaGlzIGlzIGEgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3IgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDExODBkYmM0ZDJkMjkxMWIzY2M1ZDk3ZmM2ODY3ZWQ1NDUyMzQzMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDExOjQ4OjM0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbWVtYWxsb2MuYyBiL2tlcm5lbC9icGYvbWVtYWxsb2MuY1xuaW5kZXggZTk2NjJkYjcxOThmZS4uZmIxZTczM2JmYjgyOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvbWVtYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tZW1hbGxvYy5jXG5AQCAtMTEwLDcgJiM0MzsxMTAsOSBAQCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSB7XG4gXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqZnJlZV9ieV9yY3VfdGFpbDtcbiBcdHN0cnVjdCBsbGlzdF9oZWFkIHdhaXRpbmdfZm9yX2dwO1xuIFx0c3RydWN0IGxsaXN0X25vZGUgKndhaXRpbmdfZm9yX2dwX3RhaWw7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKndhaXRpbmdfZm9yX3JlY2xhaW1fZ3A7XG4gXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuJiM0MztcdHN0cnVjdCByY3VfaGVhZCByY3VfcmVjbGFpbTtcbiBcdGF0b21pY190IGNhbGxfcmN1X2luX3Byb2dyZXNzO1xuIFx0c3RydWN0IGxsaXN0X2hlYWQgZnJlZV9sbGlzdF9leHRyYV9yY3U7XG4gXG5AQCAtMjc2LDEyICYjNDM7Mjc4LDI4IEBAIHN0YXRpYyBpbnQgZnJlZV9hbGwoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMsIHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUsIGJvb2wgcGVyXG4gXHRyZXR1cm4gY250O1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgX19mcmVlX2ZpbmFsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSwgcmN1KTtcbiYjNDM7XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlID0gYy1cdTAwM2V3YWl0aW5nX2Zvcl9yZWNsYWltX2dwO1xuJiM0MztcbiYjNDM7XHRjLVx1MDAzZXdhaXRpbmdfZm9yX3JlY2xhaW1fZ3AgPSBOVUxMO1xuJiM0MztcdGZyZWVfYWxsKGMsIGxsbm9kZSwgISFjLVx1MDAzZXBlcmNwdV9zaXplKTtcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNmMtXHUwMDNlY2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzLCAwKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBfX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbiB7XG4gXHRzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSwgcmN1X3R0cmFjZSk7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2Yy1cdTAwM2V3YWl0aW5nX2Zvcl9ncF90dHJhY2UpO1xuIFxuLVx0ZnJlZV9hbGwoYywgbGxpc3RfZGVsX2FsbChcdTAwMjZjLVx1MDAzZXdhaXRpbmdfZm9yX2dwX3R0cmFjZSksICEhYy1cdTAwM2VwZXJjcHVfc2l6ZSk7XG4tXHRhdG9taWNfc2V0KFx1MDAyNmMtXHUwMDNlY2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzLCAwKTtcbiYjNDM7XHRpZiAoIWxsbm9kZSkge1xuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZjLVx1MDAzZWNhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcywgMCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjLVx1MDAzZXdhaXRpbmdfZm9yX3JlY2xhaW1fZ3AgPSBsbG5vZGU7XG4mIzQzO1x0Y2FsbF9yY3UoXHUwMDI2Yy1cdTAwM2VyY3VfcmVjbGFpbSwgX19mcmVlX2ZpbmFsX3JjdSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGVucXVlX3RvX2ZyZWUoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMsIHZvaWQgKm9iailcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMTo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfbWVtX2FsbG9jX2luaXQmIzM0OywKICAgICYjMzQ7YnBmX21lbV9hbGxvY19kZXN0cm95JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgbWVtb3J5IGFsbG9jYXRvciYjMzk7cyBSQ1UgZnJlZWluZyBtZWNoYW5pc20gYnkgaW50cm9kdWNpbmcgYSB0d28tc3RhZ2UgUkNVIGNhbGxiYWNrIGZvciBgcmN1X3R0cmFjZWAuIEl0IGRlZmVycyB0aGUgYWN0dWFsIG1lbW9yeSBmcmVlaW5nIHRvIGBfX2ZyZWVfZmluYWxfcmN1YCB2aWEgYGNhbGxfcmN1YCBmcm9tIGBfX2ZyZWVfcmN1YCwgZW5zdXJpbmcgYm90aCBSQ1UgVGFza3MgVHJhY2UgYW5kIG5vcm1hbCBSQ1UgZ3JhY2UgcGVyaW9kcyBoYXZlIHBhc3NlZC4gVGhpcyBpcyBhIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAxMTgwZGJjNGQyZDI5MTFiM2NjNWQ5N2ZjNjg2N2VkNTQ1MjM0MzEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAxMTo0ODozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbWVtYWxsb2MuYyBiL2tlcm5lbC9icGYvbWVtYWxsb2MuYwppbmRleCBlOTY2MmRiNzE5OGZlLi5mYjFlNzMzYmZiODI5IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL21lbWFsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tZW1hbGxvYy5jCkBAIC0xMTAsNyAmIzQzOzExMCw5IEBAIHN0cnVjdCBicGZfbWVtX2NhY2hlIHsKIAlzdHJ1Y3QgbGxpc3Rfbm9kZSAqZnJlZV9ieV9yY3VfdGFpbDsKIAlzdHJ1Y3QgbGxpc3RfaGVhZCB3YWl0aW5nX2Zvcl9ncDsKIAlzdHJ1Y3QgbGxpc3Rfbm9kZSAqd2FpdGluZ19mb3JfZ3BfdGFpbDsKJiM0MzsJc3RydWN0IGxsaXN0X25vZGUgKndhaXRpbmdfZm9yX3JlY2xhaW1fZ3A7CiAJc3RydWN0IHJjdV9oZWFkIHJjdTsKJiM0MzsJc3RydWN0IHJjdV9oZWFkIHJjdV9yZWNsYWltOwogCWF0b21pY190IGNhbGxfcmN1X2luX3Byb2dyZXNzOwogCXN0cnVjdCBsbGlzdF9oZWFkIGZyZWVfbGxpc3RfZXh0cmFfcmN1OwogCkBAIC0yNzYsMTIgJiM0MzsyNzgsMjggQEAgc3RhdGljIGludCBmcmVlX2FsbChzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSwgYm9vbCBwZXIKIAlyZXR1cm4gY250OwogfQogCiYjNDM7c3RhdGljIHZvaWQgX19mcmVlX2ZpbmFsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSwgcmN1KTsKJiM0MzsJc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSA9IGMtJmd0O3dhaXRpbmdfZm9yX3JlY2xhaW1fZ3A7CiYjNDM7CiYjNDM7CWMtJmd0O3dhaXRpbmdfZm9yX3JlY2xhaW1fZ3AgPSBOVUxMOwomIzQzOwlmcmVlX2FsbChjLCBsbG5vZGUsICEhYy0mZ3Q7cGVyY3B1X3NpemUpOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7Yy0mZ3Q7Y2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzLCAwKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBfX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIHsKIAlzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSwgcmN1X3R0cmFjZSk7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKCZhbXA7Yy0mZ3Q7d2FpdGluZ19mb3JfZ3BfdHRyYWNlKTsKIAotCWZyZWVfYWxsKGMsIGxsaXN0X2RlbF9hbGwoJmFtcDtjLSZndDt3YWl0aW5nX2Zvcl9ncF90dHJhY2UpLCAhIWMtJmd0O3BlcmNwdV9zaXplKTsKLQlhdG9taWNfc2V0KCZhbXA7Yy0mZ3Q7Y2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzLCAwKTsKJiM0MzsJaWYgKCFsbG5vZGUpIHsKJiM0MzsJCWF0b21pY19zZXQoJmFtcDtjLSZndDtjYWxsX3JjdV90dHJhY2VfaW5fcHJvZ3Jlc3MsIDApOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWMtJmd0O3dhaXRpbmdfZm9yX3JlY2xhaW1fZ3AgPSBsbG5vZGU7CiYjNDM7CWNhbGxfcmN1KCZhbXA7Yy0mZ3Q7cmN1X3JlY2xhaW0sIF9fZnJlZV9maW5hbF9yY3UpOwogfQogCiBzdGF0aWMgdm9pZCBlbnF1ZV90b19mcmVlKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCB2b2lkICpvYmopCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NjYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQb3RlbnRpYWw6IEJQRiBNZW1vcnkgQWxsb2NhdG9yIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgbWVzc2luZyB3aXRoIHRoZSBSQ1UgZnJlZWluZyBpbiB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3IsIHNwZWNpZmljYWxseSBga2VybmVsL2JwZi9tZW1hbGxvYy5jYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgYW55IGNvcmUgbWVtb3J5IGFsbG9jYXRvciBjaGFuZ2VzIGFyZSBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLCBzbyBsZXQmIzM5O3MgZGlnIGluLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGFkZGluZyBgd2FpdGluZ19mb3JfcmVjbGFpbV9ncGAgYW5kIGByY3VfcmVjbGFpbWAgdG8gdGhlIGBicGZfbWVtX2NhY2hlYCBzdHJ1Y3QsIHdoaWNoIGlzIGltbWVkaWF0ZWx5IGdyYWJiaW5nIG15IGF0dGVudGlvbi4gVGhleSYjMzk7cmUgZGVmZXJyaW5nIHRoZSBhY3R1YWwgZnJlZWluZyB0byBgX19mcmVlX2ZpbmFsX3JjdWAgdGhyb3VnaCBgY2FsbF9yY3VgLCB3aGljaCBpcyBhIGNsYXNzaWMgUkNVIHBhdHRlcm4uCgpUaGUgbWFpbiBmdW5jdGlvbnMgY2hhbmdlZCBhcmUgYF9fZnJlZV9yY3VgIGFuZCBgX19mcmVlX2ZpbmFsX3JjdWAuIFRoZXkmIzM5O3JlIGJvdGggaW4gdGhlIHNhbWUgZmlsZSwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMZXQgbWUgcXVpY2tseSBjaGVjayBpZiBgX19mcmVlX3JjdWAgaXMgc3RhdGljIOKAkyB5ZXMsIGl0IGlzLiBCdXQsIHdhaXQgYSBtaW51dGUuLi4gYF9fZnJlZV9yY3VgIGlzIGJlaW5nIHVzZWQgYXMgYSBjYWxsYmFjaywgd2hpY2ggbWVhbnMgaXTigJlzIGV4cG9zZWQsIGluIGEgc2Vuc2UsIGFzIGEgZnVuY3Rpb24gcG9pbnRlci4gVGhpcyBhY3R1YWxseSBvcGVucyB1cCB0aGUgYXR0YWNrIHN1cmZhY2UgYSBiaXQgbW9yZSwgZXNwZWNpYWxseSBzaW5jZSBpdCYjMzk7cyBnb2luZyB0aHJvdWdoIGBjYWxsX3JjdV90YXNrc190cmFjZWAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFjY29yZGluZyB0byBteSByZWNvbGxlY3Rpb24uIEJldHRlciBiZSB0aG9yb3VnaCBoZXJlLCBqdXN0IHRvIG1ha2Ugc3VyZSwgbGV0IG1lIGdyZXAgZm9yIGBfX2ZyZWVfcmN1YCB3aXRoaW4gYGtlcm5lbC9icGYvbWVtYWxsb2MuY2AuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdG8gcHJpb3JpdGl6ZSBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2ZyZWVfcmN1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9tZW1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbWVtYWxsb2MuYz0yODE9c3RhdGljIHZvaWQgX19mcmVlX2ZpbmFsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTI5MC1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYzoyOTE6c3RhdGljIHZvaWQgX19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMjkyLXtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9MzE1PXN0YXRpYyB2b2lkIGRvX2NhbGxfcmN1X3R0cmFjZShzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYylcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMzMxLVx0aWYgKHVubGlrZWx5KFJFQURfT05DRShjLVx1MDAzZWRyYWluaW5nKSkpIHtcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzozMzI6XHRcdF9fZnJlZV9yY3UoXHUwMDI2Yy1cdTAwM2VyY3VfdHRyYWNlKTtcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0zMzMtXHRcdHJldHVybjtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMzM4LVx0ICogUkNVIFRhc2tzIFRyYWNlIGdyYWNlIHBlcmlvZCBpbXBsaWVzIFJDVSBncmFjZSBwZXJpb2QsIHNvIHBhc3Ncbmtlcm5lbC9icGYvbWVtYWxsb2MuYzozMzk6XHQgKiBfX2ZyZWVfcmN1IGRpcmVjdGx5IGFzIHRoZSBjYWxsYmFjay5cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0zNDAtXHQgKi9cbmtlcm5lbC9icGYvbWVtYWxsb2MuYzozNDE6XHRjYWxsX3JjdV90YXNrc190cmFjZShcdTAwMjZjLVx1MDAzZXJjdV90dHJhY2UsIF9fZnJlZV9yY3UpO1xua2VybmVsL2JwZi9tZW1hbGxvYy5jLTM0Mi19XG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTcwND1zdGF0aWMgdm9pZCBmcmVlX21lbV9hbGxvYyhzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEpXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTcxMS1cdCAqIGJ1dCByY3VfYmFycmllcl90YXNrc190cmFjZSgpIGFuZCByY3VfYmFycmllcigpIGJlbG93IGFyZSBvbmx5IHVzZWRcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo3MTI6XHQgKiB0byB3YWl0IGZvciB0aGUgcGVuZGluZyBfX2ZyZWVfYnlfcmN1KCksIGFuZCBfX2ZyZWVfcmN1KCkuIFJDVSBUYXNrc1xua2VybmVsL2JwZi9tZW1hbGxvYy5jOjcxMzpcdCAqIFRyYWNlIGdyYWNlIHBlcmlvZCBpbXBsaWVzIFJDVSBncmFjZSBwZXJpb2QsIHNvIGFsbCBfX2ZyZWVfcmN1IGRvbiYjMzk7dFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTcxNC1cdCAqIG5lZWQgZXh0cmEgY2FsbF9yY3UoKSAoYW5kIHRodXMgZXh0cmEgcmN1X2JhcnJpZXIoKSBoZXJlKS5cbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNzE2LVx0cmN1X2JhcnJpZXIoKTsgLyogd2FpdCBmb3IgX19mcmVlX2J5X3JjdSAqL1xua2VybmVsL2JwZi9tZW1hbGxvYy5jOjcxNzpcdHJjdV9iYXJyaWVyX3Rhc2tzX3RyYWNlKCk7IC8qIHdhaXQgZm9yIF9fZnJlZV9yY3UgKi9cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy03MTgtXHRmcmVlX21lbV9hbGxvY19ub19iYXJyaWVyKG1hKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzMwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBNZW1vcnkgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJJiMzOTttIHRoaW5raW5nLCB0aGVzZSBmdW5jdGlvbnMsIGJlaW5nIHN0YXRpYywgdGhleSYjMzk7cmUgbm90IGdvaW5nIHRvIGJlIHBhcnRpY3VsYXJseSBoZWxwZnVsIGFzIGRpcmVjdCBmb2N1cyBzeW1ib2xzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBwcm9jZXNzZXMgd2l0aGluIHRoZSBCUEYgc3lzdGVtLgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gSSYjMzk7dmUgZ290IGBicGZfbWVtX2FsbG9jYCwgYGJwZl9tZW1fZnJlZWAsIGBicGZfbWVtX2NhY2hlX2FsbG9jYCwgYW5kIGBicGZfbWVtX2NhY2hlX2ZyZWVgLiBUaG9zZSBmZWVsIGxpa2UgdGhlIGtleSBmdW5jdGlvbnMgdG8gaW52ZXN0aWdhdGUuCgpJJiMzOTtsbCBkaXZlIGludG8gYGtlcm5lbC9icGYvbWVtYWxsb2MuY2Agbm93LiBUaGUgZ29hbCBpcyB0byBzZWUgd2hpY2ggZnVuY3Rpb25zLCBpZiBhbnksIGFyZSBleHBvcnRlZCBvciAqbm90KiBkZWNsYXJlZCBzdGF0aWMgd2l0aGluIHRoYXQgZmlsZS4gVGhvc2UgYXJlIHRoZSBvbmVzIEkgc2hvdWxkIHBheSBhdHRlbnRpb24gdG8sIGFzIHRoZXkgcmVwcmVzZW50IHRoZSBhY2Nlc3NpYmxlIGludGVyZmFjZXMgdG8gdGhpcyBwYXJ0IG9mIHRoZSBCUEYgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBUaGF0IHNob3VsZCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRoaXMgY29tcG9uZW50IGludGVncmF0ZXMgaW50byB0aGUgd2lkZXIgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152b2lkIGJwZl9tZW1fJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9tZW1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbWVtYWxsb2MuYz03Mjk9c3RhdGljIHZvaWQgZGVzdHJveV9tZW1fYWxsb2Moc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBpbnQgcmN1X2luX3Byb2dyZXNzKVxuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy03NTMtXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NzU0OnZvaWQgYnBmX21lbV9hbGxvY19kZXN0cm95KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSlcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy03NTUte1xuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYz05Njc9dm9pZCBub3RyYWNlIGJwZl9tZW1fY2FjaGVfZnJlZV9yY3Uoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCB2b2lkICpwdHIpXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk4NC0gKi9cbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo5ODU6dm9pZCBicGZfbWVtX2NhY2hlX3Jhd19mcmVlKHZvaWQgKnB0cilcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05ODYte1xuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYz0xMDIwPWludCBicGZfbWVtX2FsbG9jX2NoZWNrX3NpemUoYm9vbCBwZXJjcHUsIHNpemVfdCBzaXplKVxuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0xMDI5LVxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjEwMzA6dm9pZCBicGZfbWVtX2FsbG9jX3NldF9kdG9yKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgdm9pZCAoKmR0b3IpKHZvaWQgKm9iaiwgdm9pZCAqY3R4KSxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0xMDMxLVx0XHRcdCAgICB2b2lkICgqZHRvcl9jdHhfZnJlZSkodm9pZCAqY3R4KSwgdm9pZCAqY3R4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MzEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk1lbW9yeSBNYW5hZ2VtZW50IERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBvciBtaXN1c2UgaXNzdWUgaW4gdGhlIEJQRiBjb2RlLCBhbmQgdGhlIGZpcnN0IHBsYWNlIG15IGJyYWluIG5hdHVyYWxseSBnb2VzIGlzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgdm9pZCBicGZfbWVtX2ZyZWVgIGFuZCBgdm9pZCBicGZfbWVtX2FsbG9jYCBhcmUgYmVpbmcgdXNlZC4gQXJlIHRoZXkgYmVpbmcgY2FsbGVkIHN5bW1ldHJpY2FsbHk/IEFyZSB0aGVyZSBwb3RlbnRpYWwgc2NlbmFyaW9zIHdoZXJlIGEgYmxvY2sgaXMgYWxsb2NhdGVkIGJ1dCBuZXZlciBmcmVlZD8gT3IsIGNvbnZlcnNlbHksIGlzIHNvbWV0aGluZyBiZWluZyBmcmVlZCB0d2ljZT8gVGhlIGRldmlsLCBhcyBhbHdheXMsIGlzIGluIHRoZSBkZXRhaWxzLCBzbyBJIG5lZWQgdG8gY2FyZWZ1bGx5IHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aHMgdGhhdCBpbnZvbHZlIHRoZXNlIGZ1bmN0aW9ucyBhbmQgbG9vayBmb3IgYW55IGFub21hbGllcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXNlIGFyZSBvcGVyYXRpbmcgYXMgZXhwZWN0ZWQsIG9yIHRoYXQgdGhleSBhcmUgb3BlcmF0aW5nIGFzIGRvY3VtZW50ZWQuIExldCYjMzk7cyBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedm9pZCBicGZfbWVtXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbWVtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL21lbWFsbG9jLmM9NzI5PXN0YXRpYyB2b2lkIGRlc3Ryb3lfbWVtX2FsbG9jKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgaW50IHJjdV9pbl9wcm9ncmVzcylcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNzUzLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjc1NDp2b2lkIGJwZl9tZW1fYWxsb2NfZGVzdHJveShzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEpXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNzU1LXtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9OTY3PXZvaWQgbm90cmFjZSBicGZfbWVtX2NhY2hlX2ZyZWVfcmN1KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgdm9pZCAqcHRyKVxuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05ODQtICovXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6OTg1OnZvaWQgYnBmX21lbV9jYWNoZV9yYXdfZnJlZSh2b2lkICpwdHIpXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTg2LXtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9MTAyMD1pbnQgYnBmX21lbV9hbGxvY19jaGVja19zaXplKGJvb2wgcGVyY3B1LCBzaXplX3Qgc2l6ZSlcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTAyOS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYzoxMDMwOnZvaWQgYnBmX21lbV9hbGxvY19zZXRfZHRvcihzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIHZvaWQgKCpkdG9yKSh2b2lkICpvYmosIHZvaWQgKmN0eCksXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTAzMS1cdFx0XHQgICAgdm9pZCAoKmR0b3JfY3R4X2ZyZWUpKHZvaWQgKmN0eCksIHZvaWQgKmN0eClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDQzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGRlYnVnZ2luZyBvciBwZXJmb3JtYW5jZSBhbmFseXNpczoKCioqSW52ZXN0aWdhdGluZyBhIEtlcm5lbCBNZW1vcnkgUmVsZWFzZSBQYXRoKioKCkhtbSwgaG9sZCBvbiBhIHNlY29uZC4gSSBqdXN0IHNhdyB0aGF0IGBicGZfbWVtX2NhY2hlX2ZyZWVfcmN1YCBpcyBtYXJrZWQgYXMgYG5vdHJhY2VgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gSXQgbWVhbnMgdHJhY2luZyB0b29scyBhcmUgZGVsaWJlcmF0ZWx5IHNraXBwaW5nIGl0LCB3aGljaCB1c3VhbGx5IGltcGxpZXMgdGhhdCBpdCYjMzk7cyBhIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHBhdGggdGhhdCB0aGV5IGRvbiYjMzk7dCB3YW50IHRvIGludGVyZmVyZSB3aXRoLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcuIElmIHRyYWNpbmcgaXMgYmVpbmcgc3VwcHJlc3NlZCwgdGhhdCB0ZWxscyBtZSB0aGlzIHJlbGVhc2UgcGF0aCBpcyAqZmFzdCosIGFuZCAqZnJlcXVlbnRseSogY2FsbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uICpiZWZvcmUqIHRoYXQgcG9pbnQuIFNvLCBub3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIHNlZSB3aGF0JiMzOTtzIGNhbGxpbmcgYGJwZl9tZW1fY2FjaGVfZnJlZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGZsb3cgYmVmb3JlIEkgY2FuIHByb3Blcmx5IGV2YWx1YXRlIHRoaXMgYHJjdWAgdmFyaWFudC4gTGV0JiMzOTtzIHNlZSB3aGF0IGBicGZfbWVtX2NhY2hlX2ZyZWVgIGlzIGRvaW5nLCBhbmQgd2hhdCBjb2RlIGlzICphY3R1YWxseSogcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152b2lkIG5vdHJhY2UgYnBmX21lbV8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL21lbWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9tZW1hbGxvYy5jPTkwMT12b2lkIG5vdHJhY2UgKmJwZl9tZW1fYWxsb2Moc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBzaXplX3Qgc2l6ZSlcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTE4LVxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjkxOTp2b2lkIG5vdHJhY2UgYnBmX21lbV9mcmVlKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgdm9pZCAqcHRyKVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTkyMC17XG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTkzNC1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo5MzU6dm9pZCBub3RyYWNlIGJwZl9tZW1fZnJlZV9yY3Uoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCB2b2lkICpwdHIpXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTM2LXtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9OTUxPXZvaWQgbm90cmFjZSAqYnBmX21lbV9jYWNoZV9hbGxvYyhzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEpXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk1OC1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo5NTk6dm9pZCBub3RyYWNlIGJwZl9tZW1fY2FjaGVfZnJlZShzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIHZvaWQgKnB0cilcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05NjAte1xuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05NjYtXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6OTY3OnZvaWQgbm90cmFjZSBicGZfbWVtX2NhY2hlX2ZyZWVfcmN1KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgdm9pZCAqcHRyKVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk2OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MjgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkFzc2Vzc2luZyBCUEYgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb25zKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgQlBGIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uczogYGJwZl9tZW1fZnJlZWAsIGBicGZfbWVtX2ZyZWVfcmN1YCwgYGJwZl9tZW1fY2FjaGVfZnJlZWAsIGFuZCBgYnBmX21lbV9jYWNoZV9mcmVlX3JjdWAuIFRoZXkmIzM5O3JlIGFsbCBtYXJrZWQgYXMgYG5vdHJhY2VgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gSXQgbWVhbnMgdGhleSYjMzk7cmUgKm5vdCogY29uc2lkZXJlZCB0byBiZSBvbiBhIHBhcnRpY3VsYXJseSBob3QgcGF0aCwgd2hpY2ggaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IGFnZ3Jlc3NpdmVseSB3ZSBtaWdodCBvcHRpbWl6ZSBvciBhbmFseXplIHRoZW0uIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBhbmQgaXQgc3VnZ2VzdHMgdGhleSYjMzk7cmUgbGlrZWx5IG5vdCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSXQgbWVhbnMgdGhhdCB0cmFjaW5nIHRoZW0gaXNuJiMzOTt0IGdvaW5nIHRvIGJlIHVzZWZ1bCBpbiBtb3N0IGNhc2VzLgoKQnV0IEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBiaWcgcGljdHVyZS4gQXJlIHRoZXJlICphbnkqIG5vbi1ob3QtcGF0aCBmdW5jdGlvbnMgaW4gdGhhdCBzZXQ/IEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGUgJiMzNDt3b3JrJiMzNDsgaXMgYmVpbmcgZG9uZS4KClRoZW4gSSBzZWUgYGJwZl9tZW1fYWxsb2NfaW5pdGAsIGBicGZfbWVtX2FsbG9jX2Rlc3Ryb3lgLiBUaG9zZSBhcmUgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBkZXN0cnVjdGlvbiBmdW5jdGlvbnMuIFRoZXkmIzM5O3JlIGxpa2VseSBub3QgYXMgcGVyZm9ybWFuY2UtY3JpdGljYWwgYXMgdGhlIGFsbG9jYXRpb24vZnJlZSBjYWxscy4gSG93ZXZlciwgdGhhdCBpc24mIzM5O3QgcmVhbGx5IHRoZSB3aG9sZSBzdG9yeS4gVGhlIGxpZmV0aW1lIG9mIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhlIEJQRiBwcm9ncmFtIG5lZWRzIHRvIGJlIHVuZGVyc3Rvb2QuCgpTbywgSSBuZWVkIHRvIGxvb2sgY2xvc2VyIGF0IHdoYXQgdGhvc2UgZnVuY3Rpb25zICpkbyouIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGR1cmluZyBhbGxvY2F0aW9uLCB3aGF0IGRhdGEgc3RydWN0dXJlcyB0aGV5JiMzOTtyZSBtYW5pcHVsYXRpbmcsIGFuZCB3aGVyZSB0aGUgcG90ZW50aWFsIGNvbnRlbnRpb24gcG9pbnRzIG1pZ2h0IGJlLCBldmVuIGlmIGl0JiMzOTtzIG5vdCBhICYjMzk7aG90IHBhdGgmIzM5OyBpbiB0aGUgY2xhc3NpYyBzZW5zZS4gS25vd2luZyB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aG9zZSBwb2ludHMgY2FuIGJldHRlciBpbmZvcm0gYW55IGZ1dHVyZSBvcHRpbWl6YXRpb25zIG9yIGFuYWx5c2lzIG9mIHRoZXNlIG1lbW9yeSBtYW5hZ2VtZW50IHBpZWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBicGZfbWVtX2FsbG9jX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL21lbWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9tZW1hbGxvYy5jPTQ5OT1zdGF0aWMgdm9pZCBwcmVmaWxsX21lbV9jYWNoZShzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgaW50IGNwdSlcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNTE5LSAqL1xua2VybmVsL2JwZi9tZW1hbGxvYy5jOjUyMDppbnQgYnBmX21lbV9hbGxvY19pbml0KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgaW50IHNpemUsIGJvb2wgcGVyY3B1KVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTUyMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNDAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgTWVtb3J5IEFsbG9jYXRvciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgUkNVIGZyZWVpbmcgbWVjaGFuaXNtIHdpdGhpbiBgYnBmX21lbV9hbGxvY2AuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSByZWQgYWxlcnQsIGVzcGVjaWFsbHkgc2luY2UgdGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIG9uIGBfX2ZyZWVfcmN1YCBhbmQgYF9fZnJlZV9maW5hbF9yY3VgLiBUaGlzIGlzIGEgY29yZSBwYXJ0IG9mIHRoZSBCUEYgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCB3ZSBhbGwga25vdyBob3cgdGhvc2UgY2FuIGJlIHRyaWNreS4gSXQgKmFic29sdXRlbHkqIG5lZWRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4KCk15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGRlc3RydWN0aW9uIGZ1bmN0aW9uczogYGJwZl9tZW1fYWxsb2NfaW5pdGAgYW5kIGBicGZfbWVtX2FsbG9jX2Rlc3Ryb3lgLiBUaGVzZSBhcmUgYWx3YXlzIGdvb2Qgc3RhcnRpbmcgcG9pbnRzIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBsaWZlY3ljbGUuIEFoLCBhbmQgd2FpdCBhIHNlY29uZCwgYGJwZl9tZW1fYWxsb2NfaW5pdGAgaXMgY2FsbGVkIGR1cmluZyBtYXAgY3JlYXRpb24uIFRoYXQmIzM5O3MgYSBnb29kIGNvbm5lY3Rpb24gdG8gcmVtZW1iZXIgYXMgaXQgY291bGQgYWRkIHNvbWUgaW50ZXJlc3RpbmcgZWRnZS1jYXNlcyB0byBiZSBhd2FyZSBvZi4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSByZXF1aXJlZCBmb3IgdGhpcyB0byB3b3JrLgoKQWxzbywgaXQgbG9va3MgbGlrZSB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3IgaXMgY29tcGlsZWQgd2l0aCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgY29uZmlybWluZyB0aGlzIGFzIGEgQlBGLWZvY3VzZWQgYXJlYS4gTm93LCBsZXQmIzM5O3Mgc3RhcnQgcGxhbm5pbmcgdGhlIGZ1enppbmcgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai1cXCRcXChDT05GSUdfQlBGX1NZU0NBTExcXCkuKm1lbWFsbG9jLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTc9b2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSB0cmFtcG9saW5lLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnRmLm8gbWVtYWxsb2MubyBycXNwaW5sb2NrLm8gc3RyZWFtLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTktaWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg3NgoJCQkJCQkJb3V0cHV0OiAxNTcKCQkJCQkJCXRob3VnaHRzOiAxNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIE1lbW9yeSBBbGxvY2F0b3IgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCB0aGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgYWJvdXQgaG93IHRoZSBCUEYgbWVtb3J5IGFsbG9jYXRvciBoYW5kbGVzIGZyZWVpbmcgbWVtb3J5LCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgYHJjdV90dHJhY2VgIGRhdGEgc3RydWN0dXJlLiBJdCYjMzk7cyB1c2luZyB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWcsIGFzIGV4cGVjdGVkLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0aGlzIHR3by1zdGFnZSBSQ1UgZnJlZWluZyBtZWNoYW5pc20uIEluc3RlYWQgb2YgdGhlIHR5cGljYWwgc2luZ2xlIFJDVSBjYWxsYmFjaywgd2UmIzM5O3JlIG5vdyBlbXBsb3lpbmcgYF9fZnJlZV9maW5hbF9yY3VgLiBUaGlzIGlzIHRyaWdnZXJlZCB2aWEgYGNhbGxfcmN1YCBvbiBgYy0mZ3Q7cmN1X3JlY2xhaW1gIGZyb20gYF9fZnJlZV9yY3VgLiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoYXQgdGhpcyBhcHByb2FjaCBndWFyYW50ZWVzIGEgbW9yZSByb2J1c3QgZnJlZWluZyBwcm9jZXNzOyBpdCB3YWl0cyBmb3IgKmJvdGgqIHRoZSBSQ1UgVGFza3MgVHJhY2UgZ3JhY2UgcGVyaW9kICphbmQqIHRoZSByZWd1bGFyIFJDVSBncmFjZSBwZXJpb2QgdG8gY29tcGxldGUgYmVmb3JlIGFjdHVhbGx5IGZyZWVpbmcgdGhlIG1lbW9yeS4gVGhpcyBpcyBzbWFydDsgaXQmIzM5O3MgZGVzaWduZWQgdG8gbWl0aWdhdGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgZW5zdXJlIHRoZSBtZW1vcnkgaXMgdHJ1bHkgc2FmZSB0byByZWNsYWltLCBhdm9pZGluZyBhbnkgc3VidGxlIEJQRi1yZWxhdGVkIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gSXQmIzM5O3MgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIEJQRiBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uCgpHaXZlbiB0aGlzLCBteSBpbnN0aW5jdCBpcyB0byBpbW1lZGlhdGVseSBsYWJlbCB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuIEFueXRpbWUgeW91JiMzOTtyZSB0b3VjaGluZyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLCBlc3BlY2lhbGx5IHdpdGhpbiBhIGNyaXRpY2FsIHN1YnN5c3RlbSBsaWtlIEJQRiwgaXQgd2FycmFudHMgdGhvcm91Z2ggZnV6emluZy4gSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiB0aGUgYGJwZl9tZW1fYWxsb2NfaW5pdGAgYW5kIGBicGZfbWVtX2FsbG9jX2Rlc3Ryb3lgIGZ1bmN0aW9ucy4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgYW5kIGV4aXQgcG9pbnRzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudDsgZnV6emluZyB0aGVtIHdpbGwgZXhwb3NlIGFueSBmbGF3cyB0aGlzIG5ldyBtZWNoYW5pc20gbWlnaHQgaW50cm9kdWNlLiBJdCYjMzk7cyBhbHNvIGltcG9ydGFudCB0byBjb25maXJtIGBCUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX21lbV9hbGxvY19pbml0JiMzNDssCiAgICAmIzM0O2JwZl9tZW1fYWxsb2NfZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3ImIzM5O3MgUkNVIGZyZWVpbmcgbWVjaGFuaXNtIGJ5IGludHJvZHVjaW5nIGEgdHdvLXN0YWdlIFJDVSBjYWxsYmFjayBmb3IgYHJjdV90dHJhY2VgLiBJdCBkZWZlcnMgdGhlIGFjdHVhbCBtZW1vcnkgZnJlZWluZyB0byBgX19mcmVlX2ZpbmFsX3JjdWAgdmlhIGBjYWxsX3JjdWAgZnJvbSBgX19mcmVlX3JjdWAsIGVuc3VyaW5nIGJvdGggUkNVIFRhc2tzIFRyYWNlIGFuZCBub3JtYWwgUkNVIGdyYWNlIHBlcmlvZHMgaGF2ZSBwYXNzZWQuIFRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgbWVtb3J5IGFsbG9jYXRvciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX21lbV9hbGxvY19pbml0JiMzNDssCiAgICAmIzM0O2JwZl9tZW1fYWxsb2NfZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3ImIzM5O3MgUkNVIGZyZWVpbmcgbWVjaGFuaXNtIGJ5IGludHJvZHVjaW5nIGEgdHdvLXN0YWdlIFJDVSBjYWxsYmFjayBmb3IgYHJjdV90dHJhY2VgLiBJdCBkZWZlcnMgdGhlIGFjdHVhbCBtZW1vcnkgZnJlZWluZyB0byBgX19mcmVlX2ZpbmFsX3JjdWAgdmlhIGBjYWxsX3JjdWAgZnJvbSBgX19mcmVlX3JjdWAsIGVuc3VyaW5nIGJvdGggUkNVIFRhc2tzIFRyYWNlIGFuZCBub3JtYWwgUkNVIGdyYWNlIHBlcmlvZHMgaGF2ZSBwYXNzZWQuIFRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgbWVtb3J5IGFsbG9jYXRvciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHBvaW50ZXIgYXJpdGhtZXRpYyBidWcgaW4gYF9fZnJlZV9maW5hbF9yY3VgIGJ5IHVzaW5nIGBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9tZW1fY2FjaGUsIHJjdSlgIGluc3RlYWQgb2YgYHJjdV9yZWNsYWltYC4gVGhpcyBjYXVzZXMgdGhlIGBjYCBwb2ludGVyIHRvIGJlIHNoaWZ0ZWQgYnkgMTYgYnl0ZXMsIGxlYWRpbmcgdG8gdHlwZSBjb25mdXNpb24gd2hlcmUgYSBmdW5jdGlvbiBwb2ludGVyIGZyb20gYHN0cnVjdCByY3VfaGVhZGAgaXMgcmVhZCBhcyBhbiBgbGxpc3Rfbm9kZWAgcG9pbnRlciBhbmQgc3Vic2VxdWVudGx5IGRlcmVmZXJlbmNlZC4gVGhpcyB3aWxsIHJlc3VsdCBpbiBhbiBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBpbnZhbGlkIGFjY2Vzc2VzIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwMTE4MGRiYzRkMmQyOTExYjNjYzVkOTdmYzY4NjdlZDU0NTIzNDMxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMTE6NDg6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21lbWFsbG9jLmMgYi9rZXJuZWwvYnBmL21lbWFsbG9jLmMKaW5kZXggZTk2NjJkYjcxOThmZS4uZmIxZTczM2JmYjgyOSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9tZW1hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvbWVtYWxsb2MuYwpAQCAtMTEwLDcgJiM0MzsxMTAsOSBAQCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSB7CiAJc3RydWN0IGxsaXN0X25vZGUgKmZyZWVfYnlfcmN1X3RhaWw7CiAJc3RydWN0IGxsaXN0X2hlYWQgd2FpdGluZ19mb3JfZ3A7CiAJc3RydWN0IGxsaXN0X25vZGUgKndhaXRpbmdfZm9yX2dwX3RhaWw7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICp3YWl0aW5nX2Zvcl9yZWNsYWltX2dwOwogCXN0cnVjdCByY3VfaGVhZCByY3U7CiYjNDM7CXN0cnVjdCByY3VfaGVhZCByY3VfcmVjbGFpbTsKIAlhdG9taWNfdCBjYWxsX3JjdV9pbl9wcm9ncmVzczsKIAlzdHJ1Y3QgbGxpc3RfaGVhZCBmcmVlX2xsaXN0X2V4dHJhX3JjdTsKIApAQCAtMjc2LDEyICYjNDM7Mjc4LDI4IEBAIHN0YXRpYyBpbnQgZnJlZV9hbGwoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMsIHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUsIGJvb2wgcGVyCiAJcmV0dXJuIGNudDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIF9fZnJlZV9maW5hbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9tZW1fY2FjaGUsIHJjdSk7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUgPSBjLSZndDt3YWl0aW5nX2Zvcl9yZWNsYWltX2dwOwomIzQzOwomIzQzOwljLSZndDt3YWl0aW5nX2Zvcl9yZWNsYWltX2dwID0gTlVMTDsKJiM0MzsJZnJlZV9hbGwoYywgbGxub2RlLCAhIWMtJmd0O3BlcmNwdV9zaXplKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO2MtJmd0O2NhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcywgMCk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgX19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiB7CiAJc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9tZW1fY2FjaGUsIHJjdV90dHJhY2UpOwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlID0gbGxpc3RfZGVsX2FsbCgmYW1wO2MtJmd0O3dhaXRpbmdfZm9yX2dwX3R0cmFjZSk7CiAKLQlmcmVlX2FsbChjLCBsbGlzdF9kZWxfYWxsKCZhbXA7Yy0mZ3Q7d2FpdGluZ19mb3JfZ3BfdHRyYWNlKSwgISFjLSZndDtwZXJjcHVfc2l6ZSk7Ci0JYXRvbWljX3NldCgmYW1wO2MtJmd0O2NhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcywgMCk7CiYjNDM7CWlmICghbGxub2RlKSB7CiYjNDM7CQlhdG9taWNfc2V0KCZhbXA7Yy0mZ3Q7Y2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzLCAwKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwljLSZndDt3YWl0aW5nX2Zvcl9yZWNsYWltX2dwID0gbGxub2RlOwomIzQzOwljYWxsX3JjdSgmYW1wO2MtJmd0O3JjdV9yZWNsYWltLCBfX2ZyZWVfZmluYWxfcmN1KTsKIH0KIAogc3RhdGljIHZvaWQgZW5xdWVfdG9fZnJlZShzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgdm9pZCAqb2JqKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2MwoJCQkJCQkJb3V0cHV0OiAxOTEKCQkJCQkJCXRob3VnaHRzOiAxOTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIGJwZl9tZW1fY2FjaGUgUkNVIERlZmVycmFsIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpbiBga2VybmVsL2JwZi9tZW1hbGxvYy5jYCBpcyBpbnRyb2R1Y2luZyBSQ1UgZGVmZXJyYWwgZm9yIGZyZWVpbmcgYGJwZl9tZW1fY2FjaGVgIG9iamVjdHMuIEl0JiMzOTtzIGFkZGluZyBgcmN1X3JlY2xhaW1gIGFuZCBgd2FpdGluZ19mb3JfcmVjbGFpbV9ncGAgdG8gdGhlIGBicGZfbWVtX2NhY2hlYCBzdHJ1Y3R1cmUgYW5kIHVzaW5nIGBjYWxsX3JjdWAgdG8gZGVsYXkgdGhlIGFjdHVhbCBmcmVlaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGNvbnNpZGVyIGlmIHRoaXMgY291bGQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBidXQgSSYjMzk7dmUgcXVpY2tseSBydWxlZCB0aGF0IG91dCDigJMgaXQmIzM5O3MgYWxsIGFib3V0IGRlbGF5aW5nIGZyZWVzLCBub3QgY3JlYXRpbmcgdW5pbml0aWFsaXplZCBzdGF0ZXMuIElmIHRoZXJlJiMzOTtzIGEgcHJvYmxlbSwgaXQgd2lsbCBiZSBhIHVzZS1hZnRlci1mcmVlIChLQVNBTiB3b3VsZCBjYXRjaCB0aGF0KSBvciBhIG1lbW9yeSBsZWFrIChrbWVtbGVhayB3aWxsIHNwb3QgaXQpLgoKTm93LCBsZXQmIzM5O3Mgem9vbSBpbiBvbiB0aGUgY29kZS4gSSBzZWUgdGhlIG5ldyBmaWVsZHMgaW4gYGJwZl9tZW1fY2FjaGVgIGFuZCB0aGUgY3J1Y2lhbCBjaGFuZ2Ugd2hlcmUgYF9fZnJlZV9yY3VgIG5vdyBkZWZlcnMgdGhlIGZyZWUgYnkgY2FsbGluZyBgY2FsbF9yY3VgIHdpdGggYF9fZnJlZV9maW5hbF9yY3VgLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBsaWVzIGhlcmU6IGBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9tZW1fY2FjaGUsIHJjdSlgIGlzIHVzZWQsIGJ1dCB0aGUgYGhlYWRgIHBhc3NlZCB0byBgY2FsbF9yY3VgIGlzIGAmYW1wO2MtJmd0O3JjdV9yZWNsYWltYC4gVGhhdCYjMzk7cyB0aGUga2V5LgoKVGhpcyBtZWFucyB0aGF0IGBjb250YWluZXJfb2ZgIGlzIHVzaW5nIHRoZSAqd3JvbmcqIFJDVSBoZWFkIChgcmN1YCBpbnN0ZWFkIG9mIGByY3VfcmVjbGFpbWApIHRvIGNhbGN1bGF0ZSB0aGUgY29udGFpbmluZyBgYnBmX21lbV9jYWNoZWAgc3RydWN0dXJlIHBvaW50ZXIuIFRoaXMgaW50cm9kdWNlcyBhIHBvaW50ZXIgYXJpdGhtZXRpYyBlcnJvci4gVGhlIGBjYCBwb2ludGVyIHdpbGwgYmUgY2FsY3VsYXRlZCBpbmNvcnJlY3RseSwgcG9pbnRpbmcgdG8gYW4gb2Zmc2V0IGZyb20gdGhlIGFjdHVhbCBgYnBmX21lbV9jYWNoZWAgc3RydWN0LiBUaGVuLCBhbnkgYWNjZXNzIHRvIGBjLSZndDt3YWl0aW5nX2Zvcl9yZWNsYWltX2dwYCB3aWxsIGJlIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIGlmIHRoZSBvZmZzZXQgbGFuZHMgb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSBzdHJ1Y3QsIG9yIGEgdHlwZSBjb25mdXNpb24gaWYgaXQgZW5kcyB1cCByZWFkaW5nIG90aGVyIGZpZWxkcy4gQm90aCBzY2VuYXJpb3Mgd2lsbCBjYXVzZSBhIGNyYXNoLCBhbmQgYm90aCBhcmUgZWFzaWx5IGRldGVjdGFibGUgYnkgS0FTQU4uCgpJJiMzOTttIHZlcmlmeWluZyB0aGUgb2Zmc2V0cyBpbiB0aGUgc3RydWN0IHRvIGNhbGN1bGF0ZSB0aGUgZXhhY3QgZXJyb3IuIExvb2tpbmcgYXQgdGhlIHN0cnVjdCBsYXlvdXQsIGByY3VgIGNvbWVzIGJlZm9yZSBgcmN1X3JlY2xhaW1gLiBUaGUgYHNoaWZ0YCB3aWxsIGJlIGBvZmZzZXRvZihyY3VfcmVjbGFpbSkgLSBvZmZzZXRvZihyY3UpYCB3aGljaCBpcyBhIHBvc2l0aXZlIG9mZnNldC4gVGhlIGNhbGN1bGF0aW9uIG9mIGBjLSZndDt3YWl0aW5nX2Zvcl9yZWNsYWltX2dwYCB3aWxsIHJlYWQgYGFjdHVhbF9jICYjNDM7IHNoaWZ0ICYjNDM7IG9mZnNldG9mKHdhaXRpbmdfZm9yX3JlY2xhaW1fZ3ApYC4gU2luY2UgYHdhaXRpbmdfZm9yX3JlY2xhaW1fZ3BgIGlzIGltbWVkaWF0ZWx5IGJlZm9yZSBgcmN1YCBpbiB0aGUgc3RydWN0dXJlLCB0aGlzIGlzIGRlZmluaXRlbHkgb3V0IG9mIGJvdW5kcy4gVGhlIG9mZnNldCBpcyAxNiBieXRlcywgYW5kIGB3YWl0aW5nX2Zvcl9yZWNsYWltX2dwYCBpcyBhdCBvZmZzZXQgLTgsIHNvIHdlIGFyZSByZWFkaW5nIDggYnl0ZXMgaW50byB0aGUgYHJjdWAgc3RydWN0LiBUaGUgY29kZSB3aWxsIHJlYWQgdGhlIGBmdW5jYCBmaWVsZCBvZiBgcmN1YCBhcyBgd2FpdGluZ19mb3JfcmVjbGFpbV9ncGAuIFRoZW4gaXQgY2FsbHMgYGZyZWVfYWxsYCwgcGFzc2luZyB0aGlzIHdyb25nIHBvaW50ZXIgYXMgYW4gYGxsaXN0X25vZGVgLiBUaGlzIHdpbGwgcmVzdWx0IGluIGFuIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBhIGNyYXNoIGJlY2F1c2UgdGhlIGBmdW5jYCBmaWVsZCBpcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIGFuZCB0aGUgYGZyZWVfYWxsYCBmdW5jdGlvbiBpdGVyYXRlcyBvdmVyIHRoZSBgbGxpc3Rfbm9kZWAsIHRyeWluZyB0byByZWFkIGEgZnVuY3Rpb24gcG9pbnRlciBhcyBhIGxpbmtlZC1saXN0IG5vZGUuCgpUaGlzIGlzbiYjMzk7dCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBwcm9ibGVtOyBpdCYjMzk7cyBjbGFzc2ljIG1lbW9yeSBjb3JydXB0aW9uL2ludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlIGtlcm5lbCYjMzk7cyBzdGFuZGFyZCBkZWJ1Z2dpbmcgYW5kIEtBU0FOIHNob3VsZCBlYXNpbHkgY2F0Y2ggdGhpcyBraW5kIG9mIGlzc3VlLiBJdCBpcyBhIHBvaW50ZXIgYXJpdGhtZXRpYyBidWcgdGhhdCBsZWFkcyB0byBvdXQtb2YtYm91bmRzIHJlYWRzL2ludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlcmVmb3JlLCB0aGlzIGRvZXNuJiMzOTt0IG5lZWQgS01TQU4gYmVjYXVzZSBpdCYjMzk7cyBjYXVnaHQgYnkgS0FTQU4uIFRoZSByb290IGNhdXNlIGlzIGEgc2ltcGxlIGBjb250YWluZXJfb2ZgIG9mZnNldCBjYWxjdWxhdGlvbiBlcnJvci4gVGhlIGZpeCBpcyB0byB1c2UgYHJjdV9yZWNsYWltYCBpbiB0aGUgYGNvbnRhaW5lcl9vZmAgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHBvaW50ZXIgYXJpdGhtZXRpYyBidWcgaW4gYF9fZnJlZV9maW5hbF9yY3VgIGJ5IHVzaW5nIGBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9tZW1fY2FjaGUsIHJjdSlgIGluc3RlYWQgb2YgYHJjdV9yZWNsYWltYC4gVGhpcyBjYXVzZXMgdGhlIGBjYCBwb2ludGVyIHRvIGJlIHNoaWZ0ZWQgYnkgMTYgYnl0ZXMsIGxlYWRpbmcgdG8gdHlwZSBjb25mdXNpb24gd2hlcmUgYSBmdW5jdGlvbiBwb2ludGVyIGZyb20gYHN0cnVjdCByY3VfaGVhZGAgaXMgcmVhZCBhcyBhbiBgbGxpc3Rfbm9kZWAgcG9pbnRlciBhbmQgc3Vic2VxdWVudGx5IGRlcmVmZXJlbmNlZC4gVGhpcyB3aWxsIHJlc3VsdCBpbiBhbiBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBpbnZhbGlkIGFjY2Vzc2VzIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHBvaW50ZXIgYXJpdGhtZXRpYyBidWcgaW4gYF9fZnJlZV9maW5hbF9yY3VgIGJ5IHVzaW5nIGBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9tZW1fY2FjaGUsIHJjdSlgIGluc3RlYWQgb2YgYHJjdV9yZWNsYWltYC4gVGhpcyBjYXVzZXMgdGhlIGBjYCBwb2ludGVyIHRvIGJlIHNoaWZ0ZWQgYnkgMTYgYnl0ZXMsIGxlYWRpbmcgdG8gdHlwZSBjb25mdXNpb24gd2hlcmUgYSBmdW5jdGlvbiBwb2ludGVyIGZyb20gYHN0cnVjdCByY3VfaGVhZGAgaXMgcmVhZCBhcyBhbiBgbGxpc3Rfbm9kZWAgcG9pbnRlciBhbmQgc3Vic2VxdWVudGx5IGRlcmVmZXJlbmNlZC4gVGhpcyB3aWxsIHJlc3VsdCBpbiBhbiBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBpbnZhbGlkIGFjY2Vzc2VzIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo0ODozNi40NzI2NTU3NzlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDI5OTU0NzM4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9tZW1fYWxsb2NfaW5pdFwiLFxuICAgIFwiYnBmX21lbV9hbGxvY19kZXN0cm95XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcG9pbnRlciBhcml0aG1ldGljIGJ1ZyBpbiBgX19mcmVlX2ZpbmFsX3JjdWAgYnkgdXNpbmcgYGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSwgcmN1KWAgaW5zdGVhZCBvZiBgcmN1X3JlY2xhaW1gLiBUaGlzIGNhdXNlcyB0aGUgYGNgIHBvaW50ZXIgdG8gYmUgc2hpZnRlZCBieSAxNiBieXRlcywgbGVhZGluZyB0byB0eXBlIGNvbmZ1c2lvbiB3aGVyZSBhIGZ1bmN0aW9uIHBvaW50ZXIgZnJvbSBgc3RydWN0IHJjdV9oZWFkYCBpcyByZWFkIGFzIGFuIGBsbGlzdF9ub2RlYCBwb2ludGVyIGFuZCBzdWJzZXF1ZW50bHkgZGVyZWZlcmVuY2VkLiBUaGlzIHdpbGwgcmVzdWx0IGluIGFuIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIGludmFsaWQgYWNjZXNzZXMgYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yJ3MgUkNVIGZyZWVpbmcgbWVjaGFuaXNtIGJ5IGludHJvZHVjaW5nIGEgdHdvLXN0YWdlIFJDVSBjYWxsYmFjayBmb3IgYHJjdV90dHJhY2VgLiBJdCBkZWZlcnMgdGhlIGFjdHVhbCBtZW1vcnkgZnJlZWluZyB0byBgX19mcmVlX2ZpbmFsX3JjdWAgdmlhIGBjYWxsX3JjdWAgZnJvbSBgX19mcmVlX3JjdWAsIGVuc3VyaW5nIGJvdGggUkNVIFRhc2tzIFRyYWNlIGFuZCBub3JtYWwgUkNVIGdyYWNlIHBlcmlvZHMgaGF2ZSBwYXNzZWQuIFRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgbWVtb3J5IGFsbG9jYXRvciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjQ4OjM2LjQ3MjY2MDQyOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4MTU1OTYwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDAxMTgwZGJjNGQyZDI5MTFiM2NjNWQ5N2ZjNjg2N2VkNTQ1MjM0MzFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTE6NDg6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9tZW1hbGxvYy5jIGIva2VybmVsL2JwZi9tZW1hbGxvYy5jXFxuaW5kZXggZTk2NjJkYjcxOThmZS4uZmIxZTczM2JmYjgyOSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL21lbWFsbG9jLmNcXG4rKysgYi9rZXJuZWwvYnBmL21lbWFsbG9jLmNcXG5AQCAtMTEwLDcgKzExMCw5IEBAIHN0cnVjdCBicGZfbWVtX2NhY2hlIHtcXG4gXFx0c3RydWN0IGxsaXN0X25vZGUgKmZyZWVfYnlfcmN1X3RhaWw7XFxuIFxcdHN0cnVjdCBsbGlzdF9oZWFkIHdhaXRpbmdfZm9yX2dwO1xcbiBcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqd2FpdGluZ19mb3JfZ3BfdGFpbDtcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKndhaXRpbmdfZm9yX3JlY2xhaW1fZ3A7XFxuIFxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuK1xcdHN0cnVjdCByY3VfaGVhZCByY3VfcmVjbGFpbTtcXG4gXFx0YXRvbWljX3QgY2FsbF9yY3VfaW5fcHJvZ3Jlc3M7XFxuIFxcdHN0cnVjdCBsbGlzdF9oZWFkIGZyZWVfbGxpc3RfZXh0cmFfcmN1O1xcbiBcXG5AQCAtMjc2LDEyICsyNzgsMjggQEAgc3RhdGljIGludCBmcmVlX2FsbChzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSwgYm9vbCBwZXJcXG4gXFx0cmV0dXJuIGNudDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgX19mcmVlX2ZpbmFsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9tZW1fY2FjaGUgKmMgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9tZW1fY2FjaGUsIHJjdSk7XFxuK1xcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUgPSBjLVxcdTAwM2V3YWl0aW5nX2Zvcl9yZWNsYWltX2dwO1xcbitcXG4rXFx0Yy1cXHUwMDNld2FpdGluZ19mb3JfcmVjbGFpbV9ncCA9IE5VTEw7XFxuK1xcdGZyZWVfYWxsKGMsIGxsbm9kZSwgISFjLVxcdTAwM2VwZXJjcHVfc2l6ZSk7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNmMtXFx1MDAzZWNhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcywgMCk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIF9fZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfbWVtX2NhY2hlICpjID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBicGZfbWVtX2NhY2hlLCByY3VfdHRyYWNlKTtcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNmMtXFx1MDAzZXdhaXRpbmdfZm9yX2dwX3R0cmFjZSk7XFxuIFxcbi1cXHRmcmVlX2FsbChjLCBsbGlzdF9kZWxfYWxsKFxcdTAwMjZjLVxcdTAwM2V3YWl0aW5nX2Zvcl9ncF90dHJhY2UpLCAhIWMtXFx1MDAzZXBlcmNwdV9zaXplKTtcXG4tXFx0YXRvbWljX3NldChcXHUwMDI2Yy1cXHUwMDNlY2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzLCAwKTtcXG4rXFx0aWYgKCFsbG5vZGUpIHtcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2Yy1cXHUwMDNlY2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzLCAwKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRjLVxcdTAwM2V3YWl0aW5nX2Zvcl9yZWNsYWltX2dwID0gbGxub2RlO1xcbitcXHRjYWxsX3JjdShcXHUwMDI2Yy1cXHUwMDNlcmN1X3JlY2xhaW0sIF9fZnJlZV9maW5hbF9yY3UpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBlbnF1ZV90b19mcmVlKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCB2b2lkICpvYmopXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjQ4OjM3Ljk1NTE3NzkyNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ2NjgxMzE2NDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX21lbV9hbGxvY19pbml0XCIsXG4gICAgXCJicGZfbWVtX2FsbG9jX2Rlc3Ryb3lcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3IncyBSQ1UgZnJlZWluZyBtZWNoYW5pc20gYnkgaW50cm9kdWNpbmcgYSB0d28tc3RhZ2UgUkNVIGNhbGxiYWNrIGZvciBgcmN1X3R0cmFjZWAuIEl0IGRlZmVycyB0aGUgYWN0dWFsIG1lbW9yeSBmcmVlaW5nIHRvIGBfX2ZyZWVfZmluYWxfcmN1YCB2aWEgYGNhbGxfcmN1YCBmcm9tIGBfX2ZyZWVfcmN1YCwgZW5zdXJpbmcgYm90aCBSQ1UgVGFza3MgVHJhY2UgYW5kIG5vcm1hbCBSQ1UgZ3JhY2UgcGVyaW9kcyBoYXZlIHBhc3NlZC4gVGhpcyBpcyBhIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDExODBkYmM0ZDJkMjkxMWIzY2M1ZDk3ZmM2ODY3ZWQ1NDUyMzQzMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDExOjQ4OjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9tZW1hbGxvYy5jIGIva2VybmVsL2JwZi9tZW1hbGxvYy5jXG5pbmRleCBlOTY2MmRiNzE5OGZlLi5mYjFlNzMzYmZiODI5IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9tZW1hbGxvYy5jXG4rKysgYi9rZXJuZWwvYnBmL21lbWFsbG9jLmNcbkBAIC0xMTAsNyArMTEwLDkgQEAgc3RydWN0IGJwZl9tZW1fY2FjaGUge1xuIFx0c3RydWN0IGxsaXN0X25vZGUgKmZyZWVfYnlfcmN1X3RhaWw7XG4gXHRzdHJ1Y3QgbGxpc3RfaGVhZCB3YWl0aW5nX2Zvcl9ncDtcbiBcdHN0cnVjdCBsbGlzdF9ub2RlICp3YWl0aW5nX2Zvcl9ncF90YWlsO1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKndhaXRpbmdfZm9yX3JlY2xhaW1fZ3A7XG4gXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuK1x0c3RydWN0IHJjdV9oZWFkIHJjdV9yZWNsYWltO1xuIFx0YXRvbWljX3QgY2FsbF9yY3VfaW5fcHJvZ3Jlc3M7XG4gXHRzdHJ1Y3QgbGxpc3RfaGVhZCBmcmVlX2xsaXN0X2V4dHJhX3JjdTtcbiBcbkBAIC0yNzYsMTIgKzI3OCwyOCBAQCBzdGF0aWMgaW50IGZyZWVfYWxsKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCBzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlLCBib29sIHBlclxuIFx0cmV0dXJuIGNudDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgX19mcmVlX2ZpbmFsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4re1xuK1x0c3RydWN0IGJwZl9tZW1fY2FjaGUgKmMgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9tZW1fY2FjaGUsIHJjdSk7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlID0gYy1cdTAwM2V3YWl0aW5nX2Zvcl9yZWNsYWltX2dwO1xuK1xuK1x0Yy1cdTAwM2V3YWl0aW5nX2Zvcl9yZWNsYWltX2dwID0gTlVMTDtcbitcdGZyZWVfYWxsKGMsIGxsbm9kZSwgISFjLVx1MDAzZXBlcmNwdV9zaXplKTtcbitcdGF0b21pY19zZXQoXHUwMDI2Yy1cdTAwM2VjYWxsX3JjdV90dHJhY2VfaW5fcHJvZ3Jlc3MsIDApO1xuK31cbitcbiBzdGF0aWMgdm9pZCBfX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbiB7XG4gXHRzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSwgcmN1X3R0cmFjZSk7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZjLVx1MDAzZXdhaXRpbmdfZm9yX2dwX3R0cmFjZSk7XG4gXG4tXHRmcmVlX2FsbChjLCBsbGlzdF9kZWxfYWxsKFx1MDAyNmMtXHUwMDNld2FpdGluZ19mb3JfZ3BfdHRyYWNlKSwgISFjLVx1MDAzZXBlcmNwdV9zaXplKTtcbi1cdGF0b21pY19zZXQoXHUwMDI2Yy1cdTAwM2VjYWxsX3JjdV90dHJhY2VfaW5fcHJvZ3Jlc3MsIDApO1xuK1x0aWYgKCFsbG5vZGUpIHtcbitcdFx0YXRvbWljX3NldChcdTAwMjZjLVx1MDAzZWNhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcywgMCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGMtXHUwMDNld2FpdGluZ19mb3JfcmVjbGFpbV9ncCA9IGxsbm9kZTtcbitcdGNhbGxfcmN1KFx1MDAyNmMtXHUwMDNlcmN1X3JlY2xhaW0sIF9fZnJlZV9maW5hbF9yY3UpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBlbnF1ZV90b19mcmVlKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCB2b2lkICpvYmopXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo0ODozNy45NTUxNzk5MjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjgzMzMzNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUG90ZW50aWFsOiBCUEYgTWVtb3J5IEFsbG9jYXRvciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCdzIG1lc3Npbmcgd2l0aCB0aGUgUkNVIGZyZWVpbmcgaW4gdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yLCBzcGVjaWZpY2FsbHkgYGtlcm5lbC9icGYvbWVtYWxsb2MuY2AuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IGFueSBjb3JlIG1lbW9yeSBhbGxvY2F0b3IgY2hhbmdlcyBhcmUgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cywgc28gbGV0J3MgZGlnIGluLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgYWRkaW5nIGB3YWl0aW5nX2Zvcl9yZWNsYWltX2dwYCBhbmQgYHJjdV9yZWNsYWltYCB0byB0aGUgYGJwZl9tZW1fY2FjaGVgIHN0cnVjdCwgd2hpY2ggaXMgaW1tZWRpYXRlbHkgZ3JhYmJpbmcgbXkgYXR0ZW50aW9uLiBUaGV5J3JlIGRlZmVycmluZyB0aGUgYWN0dWFsIGZyZWVpbmcgdG8gYF9fZnJlZV9maW5hbF9yY3VgIHRocm91Z2ggYGNhbGxfcmN1YCwgd2hpY2ggaXMgYSBjbGFzc2ljIFJDVSBwYXR0ZXJuLlxuXG5UaGUgbWFpbiBmdW5jdGlvbnMgY2hhbmdlZCBhcmUgYF9fZnJlZV9yY3VgIGFuZCBgX19mcmVlX2ZpbmFsX3JjdWAuIFRoZXkncmUgYm90aCBpbiB0aGUgc2FtZSBmaWxlLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCBtZSBxdWlja2x5IGNoZWNrIGlmIGBfX2ZyZWVfcmN1YCBpcyBzdGF0aWMg4oCTIHllcywgaXQgaXMuIEJ1dCwgd2FpdCBhIG1pbnV0ZS4uLiBgX19mcmVlX3JjdWAgaXMgYmVpbmcgdXNlZCBhcyBhIGNhbGxiYWNrLCB3aGljaCBtZWFucyBpdOKAmXMgZXhwb3NlZCwgaW4gYSBzZW5zZSwgYXMgYSBmdW5jdGlvbiBwb2ludGVyLiBUaGlzIGFjdHVhbGx5IG9wZW5zIHVwIHRoZSBhdHRhY2sgc3VyZmFjZSBhIGJpdCBtb3JlLCBlc3BlY2lhbGx5IHNpbmNlIGl0J3MgZ29pbmcgdGhyb3VnaCBgY2FsbF9yY3VfdGFza3NfdHJhY2VgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBhY2NvcmRpbmcgdG8gbXkgcmVjb2xsZWN0aW9uLiBCZXR0ZXIgYmUgdGhvcm91Z2ggaGVyZSwganVzdCB0byBtYWtlIHN1cmUsIGxldCBtZSBncmVwIGZvciBgX19mcmVlX3JjdWAgd2l0aGluIGBrZXJuZWwvYnBmL21lbWFsbG9jLmNgLiBUaGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIHByaW9yaXRpemUgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo0ODo0NC4yMzg1MTYwMjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNjg5MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZnJlZV9yY3VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9tZW1hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvbWVtYWxsb2MuYz0yODE9c3RhdGljIHZvaWQgX19mcmVlX2ZpbmFsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMjkwLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzoyOTE6c3RhdGljIHZvaWQgX19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTI5Mi17XFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9MzE1PXN0YXRpYyB2b2lkIGRvX2NhbGxfcmN1X3R0cmFjZShzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYylcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0zMzEtXFx0aWYgKHVubGlrZWx5KFJFQURfT05DRShjLVxcdTAwM2VkcmFpbmluZykpKSB7XFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjMzMjpcXHRcXHRfX2ZyZWVfcmN1KFxcdTAwMjZjLVxcdTAwM2VyY3VfdHRyYWNlKTtcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMzMzLVxcdFxcdHJldHVybjtcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0zMzgtXFx0ICogUkNVIFRhc2tzIFRyYWNlIGdyYWNlIHBlcmlvZCBpbXBsaWVzIFJDVSBncmFjZSBwZXJpb2QsIHNvIHBhc3NcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6MzM5OlxcdCAqIF9fZnJlZV9yY3UgZGlyZWN0bHkgYXMgdGhlIGNhbGxiYWNrLlxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0zNDAtXFx0ICovXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjM0MTpcXHRjYWxsX3JjdV90YXNrc190cmFjZShcXHUwMDI2Yy1cXHUwMDNlcmN1X3R0cmFjZSwgX19mcmVlX3JjdSk7XFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTM0Mi19XFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9NzA0PXN0YXRpYyB2b2lkIGZyZWVfbWVtX2FsbG9jKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSlcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy03MTEtXFx0ICogYnV0IHJjdV9iYXJyaWVyX3Rhc2tzX3RyYWNlKCkgYW5kIHJjdV9iYXJyaWVyKCkgYmVsb3cgYXJlIG9ubHkgdXNlZFxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo3MTI6XFx0ICogdG8gd2FpdCBmb3IgdGhlIHBlbmRpbmcgX19mcmVlX2J5X3JjdSgpLCBhbmQgX19mcmVlX3JjdSgpLiBSQ1UgVGFza3NcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NzEzOlxcdCAqIFRyYWNlIGdyYWNlIHBlcmlvZCBpbXBsaWVzIFJDVSBncmFjZSBwZXJpb2QsIHNvIGFsbCBfX2ZyZWVfcmN1IGRvbid0XFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTcxNC1cXHQgKiBuZWVkIGV4dHJhIGNhbGxfcmN1KCkgKGFuZCB0aHVzIGV4dHJhIHJjdV9iYXJyaWVyKCkgaGVyZSkuXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNzE2LVxcdHJjdV9iYXJyaWVyKCk7IC8qIHdhaXQgZm9yIF9fZnJlZV9ieV9yY3UgKi9cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NzE3OlxcdHJjdV9iYXJyaWVyX3Rhc2tzX3RyYWNlKCk7IC8qIHdhaXQgZm9yIF9fZnJlZV9yY3UgKi9cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNzE4LVxcdGZyZWVfbWVtX2FsbG9jX25vX2JhcnJpZXIobWEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo0ODo0NC4zNDAyMTAwODNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjk4NzA4OTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgTWVtb3J5IEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEknbSB0aGlua2luZywgdGhlc2UgZnVuY3Rpb25zLCBiZWluZyBzdGF0aWMsIHRoZXkncmUgbm90IGdvaW5nIHRvIGJlIHBhcnRpY3VsYXJseSBoZWxwZnVsIGFzIGRpcmVjdCBmb2N1cyBzeW1ib2xzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBwcm9jZXNzZXMgd2l0aGluIHRoZSBCUEYgc3lzdGVtLlxuXG5SaWdodCwgbGV0J3Mgc2VlLi4uIEkndmUgZ290IGBicGZfbWVtX2FsbG9jYCwgYGJwZl9tZW1fZnJlZWAsIGBicGZfbWVtX2NhY2hlX2FsbG9jYCwgYW5kIGBicGZfbWVtX2NhY2hlX2ZyZWVgLiBUaG9zZSBmZWVsIGxpa2UgdGhlIGtleSBmdW5jdGlvbnMgdG8gaW52ZXN0aWdhdGUuXG5cbkknbGwgZGl2ZSBpbnRvIGBrZXJuZWwvYnBmL21lbWFsbG9jLmNgIG5vdy4gVGhlIGdvYWwgaXMgdG8gc2VlIHdoaWNoIGZ1bmN0aW9ucywgaWYgYW55LCBhcmUgZXhwb3J0ZWQgb3IgKm5vdCogZGVjbGFyZWQgc3RhdGljIHdpdGhpbiB0aGF0IGZpbGUuIFRob3NlIGFyZSB0aGUgb25lcyBJIHNob3VsZCBwYXkgYXR0ZW50aW9uIHRvLCBhcyB0aGV5IHJlcHJlc2VudCB0aGUgYWNjZXNzaWJsZSBpbnRlcmZhY2VzIHRvIHRoaXMgcGFydCBvZiB0aGUgQlBGIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhhdCBzaG91bGQgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyB0aGlzIGNvbXBvbmVudCBpbnRlZ3JhdGVzIGludG8gdGhlIHdpZGVyIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzczMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjQ4OjQ5LjYzODkyMjc4OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzM1Njk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBicGZfbWVtX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL21lbWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9tZW1hbGxvYy5jPTcyOT1zdGF0aWMgdm9pZCBkZXN0cm95X21lbV9hbGxvYyhzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCByY3VfaW5fcHJvZ3Jlc3MpXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNzUzLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo3NTQ6dm9pZCBicGZfbWVtX2FsbG9jX2Rlc3Ryb3koc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy03NTUte1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTk2Nz12b2lkIG5vdHJhY2UgYnBmX21lbV9jYWNoZV9mcmVlX3JjdShzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIHZvaWQgKnB0cilcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05ODQtICovXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjk4NTp2b2lkIGJwZl9tZW1fY2FjaGVfcmF3X2ZyZWUodm9pZCAqcHRyKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05ODYte1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTEwMjA9aW50IGJwZl9tZW1fYWxsb2NfY2hlY2tfc2l6ZShib29sIHBlcmNwdSwgc2l6ZV90IHNpemUpXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTAyOS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6MTAzMDp2b2lkIGJwZl9tZW1fYWxsb2Nfc2V0X2R0b3Ioc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCB2b2lkICgqZHRvcikodm9pZCAqb2JqLCB2b2lkICpjdHgpLFxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0xMDMxLVxcdFxcdFxcdCAgICB2b2lkICgqZHRvcl9jdHhfZnJlZSkodm9pZCAqY3R4KSwgdm9pZCAqY3R4KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo0ODo0OS43MjIyODkzMjhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODI0NDQxODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKk1lbW9yeSBNYW5hZ2VtZW50IERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgb3IgbWlzdXNlIGlzc3VlIGluIHRoZSBCUEYgY29kZSwgYW5kIHRoZSBmaXJzdCBwbGFjZSBteSBicmFpbiBuYXR1cmFsbHkgZ29lcyBpcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHZlcmlmeSBob3cgYHZvaWQgYnBmX21lbV9mcmVlYCBhbmQgYHZvaWQgYnBmX21lbV9hbGxvY2AgYXJlIGJlaW5nIHVzZWQuIEFyZSB0aGV5IGJlaW5nIGNhbGxlZCBzeW1tZXRyaWNhbGx5PyBBcmUgdGhlcmUgcG90ZW50aWFsIHNjZW5hcmlvcyB3aGVyZSBhIGJsb2NrIGlzIGFsbG9jYXRlZCBidXQgbmV2ZXIgZnJlZWQ/IE9yLCBjb252ZXJzZWx5LCBpcyBzb21ldGhpbmcgYmVpbmcgZnJlZWQgdHdpY2U/IFRoZSBkZXZpbCwgYXMgYWx3YXlzLCBpcyBpbiB0aGUgZGV0YWlscywgc28gSSBuZWVkIHRvIGNhcmVmdWxseSB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGhzIHRoYXQgaW52b2x2ZSB0aGVzZSBmdW5jdGlvbnMgYW5kIGxvb2sgZm9yIGFueSBhbm9tYWxpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGVzZSBhcmUgb3BlcmF0aW5nIGFzIGV4cGVjdGVkLCBvciB0aGF0IHRoZXkgYXJlIG9wZXJhdGluZyBhcyBkb2N1bWVudGVkLiBMZXQncyBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQzMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjQ4OjU1LjU0NjczNDIwNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDc5MDQxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBicGZfbWVtX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL21lbWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9tZW1hbGxvYy5jPTcyOT1zdGF0aWMgdm9pZCBkZXN0cm95X21lbV9hbGxvYyhzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCByY3VfaW5fcHJvZ3Jlc3MpXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNzUzLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo3NTQ6dm9pZCBicGZfbWVtX2FsbG9jX2Rlc3Ryb3koc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy03NTUte1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTk2Nz12b2lkIG5vdHJhY2UgYnBmX21lbV9jYWNoZV9mcmVlX3JjdShzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIHZvaWQgKnB0cilcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05ODQtICovXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjk4NTp2b2lkIGJwZl9tZW1fY2FjaGVfcmF3X2ZyZWUodm9pZCAqcHRyKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05ODYte1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTEwMjA9aW50IGJwZl9tZW1fYWxsb2NfY2hlY2tfc2l6ZShib29sIHBlcmNwdSwgc2l6ZV90IHNpemUpXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTAyOS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6MTAzMDp2b2lkIGJwZl9tZW1fYWxsb2Nfc2V0X2R0b3Ioc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCB2b2lkICgqZHRvcikodm9pZCAqb2JqLCB2b2lkICpjdHgpLFxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0xMDMxLVxcdFxcdFxcdCAgICB2b2lkICgqZHRvcl9jdHhfZnJlZSkodm9pZCAqY3R4KSwgdm9pZCAqY3R4KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo0ODo1NS42Mjc1Mjk5NDRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTUzMzUzNjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgZGVidWdnaW5nIG9yIHBlcmZvcm1hbmNlIGFuYWx5c2lzOlxuXG4qKkludmVzdGlnYXRpbmcgYSBLZXJuZWwgTWVtb3J5IFJlbGVhc2UgUGF0aCoqXG5cbkhtbSwgaG9sZCBvbiBhIHNlY29uZC4gSSBqdXN0IHNhdyB0aGF0IGBicGZfbWVtX2NhY2hlX2ZyZWVfcmN1YCBpcyBtYXJrZWQgYXMgYG5vdHJhY2VgLiBUaGF0J3MgaW1wb3J0YW50LiBJdCBtZWFucyB0cmFjaW5nIHRvb2xzIGFyZSBkZWxpYmVyYXRlbHkgc2tpcHBpbmcgaXQsIHdoaWNoIHVzdWFsbHkgaW1wbGllcyB0aGF0IGl0J3MgYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBwYXRoIHRoYXQgdGhleSBkb24ndCB3YW50IHRvIGludGVyZmVyZSB3aXRoLiBUaGF0J3MgYSByZWQgZmxhZy4gSWYgdHJhY2luZyBpcyBiZWluZyBzdXBwcmVzc2VkLCB0aGF0IHRlbGxzIG1lIHRoaXMgcmVsZWFzZSBwYXRoIGlzICpmYXN0KiwgYW5kICpmcmVxdWVudGx5KiBjYWxsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiAqYmVmb3JlKiB0aGF0IHBvaW50LiBTbywgbm93LCBsZXQncyBzdGVwIGJhY2sgYW5kIHNlZSB3aGF0J3MgY2FsbGluZyBgYnBmX21lbV9jYWNoZV9mcmVlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgZmxvdyBiZWZvcmUgSSBjYW4gcHJvcGVybHkgZXZhbHVhdGUgdGhpcyBgcmN1YCB2YXJpYW50LiBMZXQncyBzZWUgd2hhdCBgYnBmX21lbV9jYWNoZV9mcmVlYCBpcyBkb2luZywgYW5kIHdoYXQgY29kZSBpcyAqYWN0dWFsbHkqIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NDg6NTkuNTgwODg2OTYxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE3OTA2MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnZvaWQgbm90cmFjZSBicGZfbWVtX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL21lbWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9tZW1hbGxvYy5jPTkwMT12b2lkIG5vdHJhY2UgKmJwZl9tZW1fYWxsb2Moc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05MTgtXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjkxOTp2b2lkIG5vdHJhY2UgYnBmX21lbV9mcmVlKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgdm9pZCAqcHRyKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05MjAte1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTkzNC1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6OTM1OnZvaWQgbm90cmFjZSBicGZfbWVtX2ZyZWVfcmN1KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgdm9pZCAqcHRyKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05MzYte1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTk1MT12b2lkIG5vdHJhY2UgKmJwZl9tZW1fY2FjaGVfYWxsb2Moc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hKVxcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk1OC1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6OTU5OnZvaWQgbm90cmFjZSBicGZfbWVtX2NhY2hlX2ZyZWUoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCB2b2lkICpwdHIpXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk2MC17XFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTY2LVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo5Njc6dm9pZCBub3RyYWNlIGJwZl9tZW1fY2FjaGVfZnJlZV9yY3Uoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCB2b2lkICpwdHIpXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk2OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjQ4OjU5Ljc3MjY4MTY0OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjU4MzQ4NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkFzc2Vzc2luZyBCUEYgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb25zKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIEJQRiBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnM6IGBicGZfbWVtX2ZyZWVgLCBgYnBmX21lbV9mcmVlX3JjdWAsIGBicGZfbWVtX2NhY2hlX2ZyZWVgLCBhbmQgYGJwZl9tZW1fY2FjaGVfZnJlZV9yY3VgLiBUaGV5J3JlIGFsbCBtYXJrZWQgYXMgYG5vdHJhY2VgLiBUaGF0J3MgaW1wb3J0YW50LiBJdCBtZWFucyB0aGV5J3JlICpub3QqIGNvbnNpZGVyZWQgdG8gYmUgb24gYSBwYXJ0aWN1bGFybHkgaG90IHBhdGgsIHdoaWNoIGhhcyBpbXBsaWNhdGlvbnMgZm9yIGhvdyBhZ2dyZXNzaXZlbHkgd2UgbWlnaHQgb3B0aW1pemUgb3IgYW5hbHl6ZSB0aGVtLiBUaGF0J3MgZ29vZCB0byBrbm93LCBhbmQgaXQgc3VnZ2VzdHMgdGhleSdyZSBsaWtlbHkgbm90IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJdCBtZWFucyB0aGF0IHRyYWNpbmcgdGhlbSBpc24ndCBnb2luZyB0byBiZSB1c2VmdWwgaW4gbW9zdCBjYXNlcy5cblxuQnV0IEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBiaWcgcGljdHVyZS4gQXJlIHRoZXJlICphbnkqIG5vbi1ob3QtcGF0aCBmdW5jdGlvbnMgaW4gdGhhdCBzZXQ/IEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZSBcIndvcmtcIiBpcyBiZWluZyBkb25lLlxuXG5UaGVuIEkgc2VlIGBicGZfbWVtX2FsbG9jX2luaXRgLCBgYnBmX21lbV9hbGxvY19kZXN0cm95YC4gVGhvc2UgYXJlIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gZnVuY3Rpb25zLiBUaGV5J3JlIGxpa2VseSBub3QgYXMgcGVyZm9ybWFuY2UtY3JpdGljYWwgYXMgdGhlIGFsbG9jYXRpb24vZnJlZSBjYWxscy4gSG93ZXZlciwgdGhhdCBpc24ndCByZWFsbHkgdGhlIHdob2xlIHN0b3J5LiBUaGUgbGlmZXRpbWUgb2YgbWVtb3J5IGFsbG9jYXRlZCBieSB0aGUgQlBGIHByb2dyYW0gbmVlZHMgdG8gYmUgdW5kZXJzdG9vZC5cblxuU28sIEkgbmVlZCB0byBsb29rIGNsb3NlciBhdCB3aGF0IHRob3NlIGZ1bmN0aW9ucyAqZG8qLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGR1cmluZyBhbGxvY2F0aW9uLCB3aGF0IGRhdGEgc3RydWN0dXJlcyB0aGV5J3JlIG1hbmlwdWxhdGluZywgYW5kIHdoZXJlIHRoZSBwb3RlbnRpYWwgY29udGVudGlvbiBwb2ludHMgbWlnaHQgYmUsIGV2ZW4gaWYgaXQncyBub3QgYSAnaG90IHBhdGgnIGluIHRoZSBjbGFzc2ljIHNlbnNlLiBLbm93aW5nIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhvc2UgcG9pbnRzIGNhbiBiZXR0ZXIgaW5mb3JtIGFueSBmdXR1cmUgb3B0aW1pemF0aW9ucyBvciBhbmFseXNpcyBvZiB0aGVzZSBtZW1vcnkgbWFuYWdlbWVudCBwaWVjZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MjgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo0OTowNi4wMzEwMzM5MjhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDY4MzcxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IGJwZl9tZW1fYWxsb2NfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL21lbWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9tZW1hbGxvYy5jPTQ5OT1zdGF0aWMgdm9pZCBwcmVmaWxsX21lbV9jYWNoZShzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgaW50IGNwdSlcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy01MTktICovXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjUyMDppbnQgYnBmX21lbV9hbGxvY19pbml0KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgaW50IHNpemUsIGJvb2wgcGVyY3B1KVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy01MjEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo0OTowNi4xNzE3MjIyMjZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAwOTI0MTQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBNZW1vcnkgQWxsb2NhdG9yIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIFJDVSBmcmVlaW5nIG1lY2hhbmlzbSB3aXRoaW4gYGJwZl9tZW1fYWxsb2NgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgcmVkIGFsZXJ0LCBlc3BlY2lhbGx5IHNpbmNlIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBvbiBgX19mcmVlX3JjdWAgYW5kIGBfX2ZyZWVfZmluYWxfcmN1YC4gVGhpcyBpcyBhIGNvcmUgcGFydCBvZiB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgd2UgYWxsIGtub3cgaG93IHRob3NlIGNhbiBiZSB0cmlja3kuIEl0ICphYnNvbHV0ZWx5KiBuZWVkcyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uXG5cbk15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGRlc3RydWN0aW9uIGZ1bmN0aW9uczogYGJwZl9tZW1fYWxsb2NfaW5pdGAgYW5kIGBicGZfbWVtX2FsbG9jX2Rlc3Ryb3lgLiBUaGVzZSBhcmUgYWx3YXlzIGdvb2Qgc3RhcnRpbmcgcG9pbnRzIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBsaWZlY3ljbGUuIEFoLCBhbmQgd2FpdCBhIHNlY29uZCwgYGJwZl9tZW1fYWxsb2NfaW5pdGAgaXMgY2FsbGVkIGR1cmluZyBtYXAgY3JlYXRpb24uIFRoYXQncyBhIGdvb2QgY29ubmVjdGlvbiB0byByZW1lbWJlciBhcyBpdCBjb3VsZCBhZGQgc29tZSBpbnRlcmVzdGluZyBlZGdlLWNhc2VzIHRvIGJlIGF3YXJlIG9mLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHJlcXVpcmVkIGZvciB0aGlzIHRvIHdvcmsuXG5cbkFsc28sIGl0IGxvb2tzIGxpa2UgdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yIGlzIGNvbXBpbGVkIHdpdGggYENPTkZJR19CUEZfU1lTQ0FMTGAsIGNvbmZpcm1pbmcgdGhpcyBhcyBhIEJQRi1mb2N1c2VkIGFyZWEuIE5vdywgbGV0J3Mgc3RhcnQgcGxhbm5pbmcgdGhlIGZ1enppbmcgc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNDAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NDk6MTIuMTgwOTY2NjdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNjc5MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9iai1cXFxcJFxcXFwoQ09ORklHX0JQRl9TWVNDQUxMXFxcXCkuKm1lbWFsbG9jLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTE3PW9iai0kKENPTkZJR19CUEZfSklUKSArPSB0cmFtcG9saW5lLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnRmLm8gbWVtYWxsb2MubyBycXNwaW5sb2NrLm8gc3RyZWFtLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE5LWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjQ5OjEyLjI3MTY1MDA0OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjIzMDk3MTIyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgTWVtb3J5IEFsbG9jYXRvciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIHRoaXMgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSBhYm91dCBob3cgdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yIGhhbmRsZXMgZnJlZWluZyBtZW1vcnksIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBgcmN1X3R0cmFjZWAgZGF0YSBzdHJ1Y3R1cmUuIEl0J3MgdXNpbmcgdGhlIGBCUEZfU1lTQ0FMTGAgY29uZmlnLCBhcyBleHBlY3RlZC5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0aGlzIHR3by1zdGFnZSBSQ1UgZnJlZWluZyBtZWNoYW5pc20uIEluc3RlYWQgb2YgdGhlIHR5cGljYWwgc2luZ2xlIFJDVSBjYWxsYmFjaywgd2UncmUgbm93IGVtcGxveWluZyBgX19mcmVlX2ZpbmFsX3JjdWAuIFRoaXMgaXMgdHJpZ2dlcmVkIHZpYSBgY2FsbF9yY3VgIG9uIGBjLVx1MDAzZXJjdV9yZWNsYWltYCBmcm9tIGBfX2ZyZWVfcmN1YC4gVGhlIGNydWNpYWwgcGFydCBpcyB0aGF0IHRoaXMgYXBwcm9hY2ggZ3VhcmFudGVlcyBhIG1vcmUgcm9idXN0IGZyZWVpbmcgcHJvY2VzczsgaXQgd2FpdHMgZm9yICpib3RoKiB0aGUgUkNVIFRhc2tzIFRyYWNlIGdyYWNlIHBlcmlvZCAqYW5kKiB0aGUgcmVndWxhciBSQ1UgZ3JhY2UgcGVyaW9kIHRvIGNvbXBsZXRlIGJlZm9yZSBhY3R1YWxseSBmcmVlaW5nIHRoZSBtZW1vcnkuIFRoaXMgaXMgc21hcnQ7IGl0J3MgZGVzaWduZWQgdG8gbWl0aWdhdGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgZW5zdXJlIHRoZSBtZW1vcnkgaXMgdHJ1bHkgc2FmZSB0byByZWNsYWltLCBhdm9pZGluZyBhbnkgc3VidGxlIEJQRi1yZWxhdGVkIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gSXQncyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgQlBGIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS5cblxuR2l2ZW4gdGhpcywgbXkgaW5zdGluY3QgaXMgdG8gaW1tZWRpYXRlbHkgbGFiZWwgdGhpcyBhcyBgV29ydGhGdXp6aW5nPXRydWVgLiBBbnl0aW1lIHlvdSdyZSB0b3VjaGluZyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLCBlc3BlY2lhbGx5IHdpdGhpbiBhIGNyaXRpY2FsIHN1YnN5c3RlbSBsaWtlIEJQRiwgaXQgd2FycmFudHMgdGhvcm91Z2ggZnV6emluZy4gSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiB0aGUgYGJwZl9tZW1fYWxsb2NfaW5pdGAgYW5kIGBicGZfbWVtX2FsbG9jX2Rlc3Ryb3lgIGZ1bmN0aW9ucy4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgYW5kIGV4aXQgcG9pbnRzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudDsgZnV6emluZyB0aGVtIHdpbGwgZXhwb3NlIGFueSBmbGF3cyB0aGlzIG5ldyBtZWNoYW5pc20gbWlnaHQgaW50cm9kdWNlLiBJdCdzIGFsc28gaW1wb3J0YW50IHRvIGNvbmZpcm0gYEJQRl9TWVNDQUxMYCBpcyBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODc2LCJPdXRwdXRUb2tlbnMiOjE1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo0OToyNC41MDI2MjQ0NjRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM4NjYwNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX21lbV9hbGxvY19pbml0XCIsXG4gICAgXCJicGZfbWVtX2FsbG9jX2Rlc3Ryb3lcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3IncyBSQ1UgZnJlZWluZyBtZWNoYW5pc20gYnkgaW50cm9kdWNpbmcgYSB0d28tc3RhZ2UgUkNVIGNhbGxiYWNrIGZvciBgcmN1X3R0cmFjZWAuIEl0IGRlZmVycyB0aGUgYWN0dWFsIG1lbW9yeSBmcmVlaW5nIHRvIGBfX2ZyZWVfZmluYWxfcmN1YCB2aWEgYGNhbGxfcmN1YCBmcm9tIGBfX2ZyZWVfcmN1YCwgZW5zdXJpbmcgYm90aCBSQ1UgVGFza3MgVHJhY2UgYW5kIG5vcm1hbCBSQ1UgZ3JhY2UgcGVyaW9kcyBoYXZlIHBhc3NlZC4gVGhpcyBpcyBhIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9tZW1fYWxsb2NfaW5pdFwiLFxuICAgIFwiYnBmX21lbV9hbGxvY19kZXN0cm95XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yJ3MgUkNVIGZyZWVpbmcgbWVjaGFuaXNtIGJ5IGludHJvZHVjaW5nIGEgdHdvLXN0YWdlIFJDVSBjYWxsYmFjayBmb3IgYHJjdV90dHJhY2VgLiBJdCBkZWZlcnMgdGhlIGFjdHVhbCBtZW1vcnkgZnJlZWluZyB0byBgX19mcmVlX2ZpbmFsX3JjdWAgdmlhIGBjYWxsX3JjdWAgZnJvbSBgX19mcmVlX3JjdWAsIGVuc3VyaW5nIGJvdGggUkNVIFRhc2tzIFRyYWNlIGFuZCBub3JtYWwgUkNVIGdyYWNlIHBlcmlvZHMgaGF2ZSBwYXNzZWQuIFRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgbWVtb3J5IGFsbG9jYXRvciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjQ5OjI0LjYzNjQ5ODk2MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxMzU2OTI5NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo0OToyNC42MzcyNzQ2OTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjIxMzQ5MTMwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBwb2ludGVyIGFyaXRobWV0aWMgYnVnIGluIGBfX2ZyZWVfZmluYWxfcmN1YCBieSB1c2luZyBgY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBicGZfbWVtX2NhY2hlLCByY3UpYCBpbnN0ZWFkIG9mIGByY3VfcmVjbGFpbWAuIFRoaXMgY2F1c2VzIHRoZSBgY2AgcG9pbnRlciB0byBiZSBzaGlmdGVkIGJ5IDE2IGJ5dGVzLCBsZWFkaW5nIHRvIHR5cGUgY29uZnVzaW9uIHdoZXJlIGEgZnVuY3Rpb24gcG9pbnRlciBmcm9tIGBzdHJ1Y3QgcmN1X2hlYWRgIGlzIHJlYWQgYXMgYW4gYGxsaXN0X25vZGVgIHBvaW50ZXIgYW5kIHN1YnNlcXVlbnRseSBkZXJlZmVyZW5jZWQuIFRoaXMgd2lsbCByZXN1bHQgaW4gYW4gaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgaW52YWxpZCBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMTE4MGRiYzRkMmQyOTExYjNjYzVkOTdmYzY4NjdlZDU0NTIzNDMxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTE6NDg6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21lbWFsbG9jLmMgYi9rZXJuZWwvYnBmL21lbWFsbG9jLmNcbmluZGV4IGU5NjYyZGI3MTk4ZmUuLmZiMWU3MzNiZmI4MjkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL21lbWFsbG9jLmNcbisrKyBiL2tlcm5lbC9icGYvbWVtYWxsb2MuY1xuQEAgLTExMCw3ICsxMTAsOSBAQCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSB7XG4gXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqZnJlZV9ieV9yY3VfdGFpbDtcbiBcdHN0cnVjdCBsbGlzdF9oZWFkIHdhaXRpbmdfZm9yX2dwO1xuIFx0c3RydWN0IGxsaXN0X25vZGUgKndhaXRpbmdfZm9yX2dwX3RhaWw7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqd2FpdGluZ19mb3JfcmVjbGFpbV9ncDtcbiBcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4rXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1X3JlY2xhaW07XG4gXHRhdG9taWNfdCBjYWxsX3JjdV9pbl9wcm9ncmVzcztcbiBcdHN0cnVjdCBsbGlzdF9oZWFkIGZyZWVfbGxpc3RfZXh0cmFfcmN1O1xuIFxuQEAgLTI3NiwxMiArMjc4LDI4IEBAIHN0YXRpYyBpbnQgZnJlZV9hbGwoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMsIHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUsIGJvb2wgcGVyXG4gXHRyZXR1cm4gY250O1xuIH1cbiBcbitzdGF0aWMgdm9pZCBfX2ZyZWVfZmluYWxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbit7XG4rXHRzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSwgcmN1KTtcbitcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUgPSBjLVx1MDAzZXdhaXRpbmdfZm9yX3JlY2xhaW1fZ3A7XG4rXG4rXHRjLVx1MDAzZXdhaXRpbmdfZm9yX3JlY2xhaW1fZ3AgPSBOVUxMO1xuK1x0ZnJlZV9hbGwoYywgbGxub2RlLCAhIWMtXHUwMDNlcGVyY3B1X3NpemUpO1xuK1x0YXRvbWljX3NldChcdTAwMjZjLVx1MDAzZWNhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcywgMCk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIF9fZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuIHtcbiBcdHN0cnVjdCBicGZfbWVtX2NhY2hlICpjID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBicGZfbWVtX2NhY2hlLCByY3VfdHRyYWNlKTtcbitcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNmMtXHUwMDNld2FpdGluZ19mb3JfZ3BfdHRyYWNlKTtcbiBcbi1cdGZyZWVfYWxsKGMsIGxsaXN0X2RlbF9hbGwoXHUwMDI2Yy1cdTAwM2V3YWl0aW5nX2Zvcl9ncF90dHJhY2UpLCAhIWMtXHUwMDNlcGVyY3B1X3NpemUpO1xuLVx0YXRvbWljX3NldChcdTAwMjZjLVx1MDAzZWNhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcywgMCk7XG4rXHRpZiAoIWxsbm9kZSkge1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNmMtXHUwMDNlY2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzLCAwKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0Yy1cdTAwM2V3YWl0aW5nX2Zvcl9yZWNsYWltX2dwID0gbGxub2RlO1xuK1x0Y2FsbF9yY3UoXHUwMDI2Yy1cdTAwM2VyY3VfcmVjbGFpbSwgX19mcmVlX2ZpbmFsX3JjdSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGVucXVlX3RvX2ZyZWUoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMsIHZvaWQgKm9iailcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjQ5OjI0LjYzNzI3NjAxMloiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjEzNDg4MzM0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBicGZfbWVtX2NhY2hlIFJDVSBEZWZlcnJhbCBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGluIGBrZXJuZWwvYnBmL21lbWFsbG9jLmNgIGlzIGludHJvZHVjaW5nIFJDVSBkZWZlcnJhbCBmb3IgZnJlZWluZyBgYnBmX21lbV9jYWNoZWAgb2JqZWN0cy4gSXQncyBhZGRpbmcgYHJjdV9yZWNsYWltYCBhbmQgYHdhaXRpbmdfZm9yX3JlY2xhaW1fZ3BgIHRvIHRoZSBgYnBmX21lbV9jYWNoZWAgc3RydWN0dXJlIGFuZCB1c2luZyBgY2FsbF9yY3VgIHRvIGRlbGF5IHRoZSBhY3R1YWwgZnJlZWluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBjb25zaWRlciBpZiB0aGlzIGNvdWxkIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgYnV0IEkndmUgcXVpY2tseSBydWxlZCB0aGF0IG91dCDigJMgaXQncyBhbGwgYWJvdXQgZGVsYXlpbmcgZnJlZXMsIG5vdCBjcmVhdGluZyB1bmluaXRpYWxpemVkIHN0YXRlcy4gSWYgdGhlcmUncyBhIHByb2JsZW0sIGl0IHdpbGwgYmUgYSB1c2UtYWZ0ZXItZnJlZSAoS0FTQU4gd291bGQgY2F0Y2ggdGhhdCkgb3IgYSBtZW1vcnkgbGVhayAoa21lbWxlYWsgd2lsbCBzcG90IGl0KS5cblxuTm93LCBsZXQncyB6b29tIGluIG9uIHRoZSBjb2RlLiBJIHNlZSB0aGUgbmV3IGZpZWxkcyBpbiBgYnBmX21lbV9jYWNoZWAgYW5kIHRoZSBjcnVjaWFsIGNoYW5nZSB3aGVyZSBgX19mcmVlX3JjdWAgbm93IGRlZmVycyB0aGUgZnJlZSBieSBjYWxsaW5nIGBjYWxsX3JjdWAgd2l0aCBgX19mcmVlX2ZpbmFsX3JjdWAuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGxpZXMgaGVyZTogYGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSwgcmN1KWAgaXMgdXNlZCwgYnV0IHRoZSBgaGVhZGAgcGFzc2VkIHRvIGBjYWxsX3JjdWAgaXMgYFx1MDAyNmMtXHUwMDNlcmN1X3JlY2xhaW1gLiBUaGF0J3MgdGhlIGtleS5cblxuVGhpcyBtZWFucyB0aGF0IGBjb250YWluZXJfb2ZgIGlzIHVzaW5nIHRoZSAqd3JvbmcqIFJDVSBoZWFkIChgcmN1YCBpbnN0ZWFkIG9mIGByY3VfcmVjbGFpbWApIHRvIGNhbGN1bGF0ZSB0aGUgY29udGFpbmluZyBgYnBmX21lbV9jYWNoZWAgc3RydWN0dXJlIHBvaW50ZXIuIFRoaXMgaW50cm9kdWNlcyBhIHBvaW50ZXIgYXJpdGhtZXRpYyBlcnJvci4gVGhlIGBjYCBwb2ludGVyIHdpbGwgYmUgY2FsY3VsYXRlZCBpbmNvcnJlY3RseSwgcG9pbnRpbmcgdG8gYW4gb2Zmc2V0IGZyb20gdGhlIGFjdHVhbCBgYnBmX21lbV9jYWNoZWAgc3RydWN0LiBUaGVuLCBhbnkgYWNjZXNzIHRvIGBjLVx1MDAzZXdhaXRpbmdfZm9yX3JlY2xhaW1fZ3BgIHdpbGwgYmUgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaWYgdGhlIG9mZnNldCBsYW5kcyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIHN0cnVjdCwgb3IgYSB0eXBlIGNvbmZ1c2lvbiBpZiBpdCBlbmRzIHVwIHJlYWRpbmcgb3RoZXIgZmllbGRzLiBCb3RoIHNjZW5hcmlvcyB3aWxsIGNhdXNlIGEgY3Jhc2gsIGFuZCBib3RoIGFyZSBlYXNpbHkgZGV0ZWN0YWJsZSBieSBLQVNBTi5cblxuSSdtIHZlcmlmeWluZyB0aGUgb2Zmc2V0cyBpbiB0aGUgc3RydWN0IHRvIGNhbGN1bGF0ZSB0aGUgZXhhY3QgZXJyb3IuIExvb2tpbmcgYXQgdGhlIHN0cnVjdCBsYXlvdXQsIGByY3VgIGNvbWVzIGJlZm9yZSBgcmN1X3JlY2xhaW1gLiBUaGUgYHNoaWZ0YCB3aWxsIGJlIGBvZmZzZXRvZihyY3VfcmVjbGFpbSkgLSBvZmZzZXRvZihyY3UpYCB3aGljaCBpcyBhIHBvc2l0aXZlIG9mZnNldC4gVGhlIGNhbGN1bGF0aW9uIG9mIGBjLVx1MDAzZXdhaXRpbmdfZm9yX3JlY2xhaW1fZ3BgIHdpbGwgcmVhZCBgYWN0dWFsX2MgKyBzaGlmdCArIG9mZnNldG9mKHdhaXRpbmdfZm9yX3JlY2xhaW1fZ3ApYC4gU2luY2UgYHdhaXRpbmdfZm9yX3JlY2xhaW1fZ3BgIGlzIGltbWVkaWF0ZWx5IGJlZm9yZSBgcmN1YCBpbiB0aGUgc3RydWN0dXJlLCB0aGlzIGlzIGRlZmluaXRlbHkgb3V0IG9mIGJvdW5kcy4gVGhlIG9mZnNldCBpcyAxNiBieXRlcywgYW5kIGB3YWl0aW5nX2Zvcl9yZWNsYWltX2dwYCBpcyBhdCBvZmZzZXQgLTgsIHNvIHdlIGFyZSByZWFkaW5nIDggYnl0ZXMgaW50byB0aGUgYHJjdWAgc3RydWN0LiBUaGUgY29kZSB3aWxsIHJlYWQgdGhlIGBmdW5jYCBmaWVsZCBvZiBgcmN1YCBhcyBgd2FpdGluZ19mb3JfcmVjbGFpbV9ncGAuIFRoZW4gaXQgY2FsbHMgYGZyZWVfYWxsYCwgcGFzc2luZyB0aGlzIHdyb25nIHBvaW50ZXIgYXMgYW4gYGxsaXN0X25vZGVgLiBUaGlzIHdpbGwgcmVzdWx0IGluIGFuIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBhIGNyYXNoIGJlY2F1c2UgdGhlIGBmdW5jYCBmaWVsZCBpcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIGFuZCB0aGUgYGZyZWVfYWxsYCBmdW5jdGlvbiBpdGVyYXRlcyBvdmVyIHRoZSBgbGxpc3Rfbm9kZWAsIHRyeWluZyB0byByZWFkIGEgZnVuY3Rpb24gcG9pbnRlciBhcyBhIGxpbmtlZC1saXN0IG5vZGUuXG5cblRoaXMgaXNuJ3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbTsgaXQncyBjbGFzc2ljIG1lbW9yeSBjb3JydXB0aW9uL2ludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlIGtlcm5lbCdzIHN0YW5kYXJkIGRlYnVnZ2luZyBhbmQgS0FTQU4gc2hvdWxkIGVhc2lseSBjYXRjaCB0aGlzIGtpbmQgb2YgaXNzdWUuIEl0IGlzIGEgcG9pbnRlciBhcml0aG1ldGljIGJ1ZyB0aGF0IGxlYWRzIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMvaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGVyZWZvcmUsIHRoaXMgZG9lc24ndCBuZWVkIEtNU0FOIGJlY2F1c2UgaXQncyBjYXVnaHQgYnkgS0FTQU4uIFRoZSByb290IGNhdXNlIGlzIGEgc2ltcGxlIGBjb250YWluZXJfb2ZgIG9mZnNldCBjYWxjdWxhdGlvbiBlcnJvci4gVGhlIGZpeCBpcyB0byB1c2UgYHJjdV9yZWNsYWltYCBpbiB0aGUgYGNvbnRhaW5lcl9vZmAgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2MywiT3V0cHV0VG9rZW5zIjoxOTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NDk6NDYuNzcyMTYyMjE5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcG9pbnRlciBhcml0aG1ldGljIGJ1ZyBpbiBgX19mcmVlX2ZpbmFsX3JjdWAgYnkgdXNpbmcgYGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSwgcmN1KWAgaW5zdGVhZCBvZiBgcmN1X3JlY2xhaW1gLiBUaGlzIGNhdXNlcyB0aGUgYGNgIHBvaW50ZXIgdG8gYmUgc2hpZnRlZCBieSAxNiBieXRlcywgbGVhZGluZyB0byB0eXBlIGNvbmZ1c2lvbiB3aGVyZSBhIGZ1bmN0aW9uIHBvaW50ZXIgZnJvbSBgc3RydWN0IHJjdV9oZWFkYCBpcyByZWFkIGFzIGFuIGBsbGlzdF9ub2RlYCBwb2ludGVyIGFuZCBzdWJzZXF1ZW50bHkgZGVyZWZlcmVuY2VkLiBUaGlzIHdpbGwgcmVzdWx0IGluIGFuIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIGludmFsaWQgYWNjZXNzZXMgYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHBvaW50ZXIgYXJpdGhtZXRpYyBidWcgaW4gYF9fZnJlZV9maW5hbF9yY3VgIGJ5IHVzaW5nIGBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9tZW1fY2FjaGUsIHJjdSlgIGluc3RlYWQgb2YgYHJjdV9yZWNsYWltYC4gVGhpcyBjYXVzZXMgdGhlIGBjYCBwb2ludGVyIHRvIGJlIHNoaWZ0ZWQgYnkgMTYgYnl0ZXMsIGxlYWRpbmcgdG8gdHlwZSBjb25mdXNpb24gd2hlcmUgYSBmdW5jdGlvbiBwb2ludGVyIGZyb20gYHN0cnVjdCByY3VfaGVhZGAgaXMgcmVhZCBhcyBhbiBgbGxpc3Rfbm9kZWAgcG9pbnRlciBhbmQgc3Vic2VxdWVudGx5IGRlcmVmZXJlbmNlZC4gVGhpcyB3aWxsIHJlc3VsdCBpbiBhbiBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBpbnZhbGlkIGFjY2Vzc2VzIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkrfjr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 10:50:12 +0000 UTC FinishedAt: 2026-08-26 11:49:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_mem_alloc_init", "bpf_mem_alloc_destroy" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX21lbV9hbGxvY19pbml0JiMzNDssCiAgICAmIzM0O2JwZl9tZW1fYWxsb2NfZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBwb2ludGVyIGFyaXRobWV0aWMgYnVnIGluIGBfX2ZyZWVfZmluYWxfcmN1YCBieSB1c2luZyBgY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBicGZfbWVtX2NhY2hlLCByY3UpYCBpbnN0ZWFkIG9mIGByY3VfcmVjbGFpbWAuIFRoaXMgY2F1c2VzIHRoZSBgY2AgcG9pbnRlciB0byBiZSBzaGlmdGVkIGJ5IDE2IGJ5dGVzLCBsZWFkaW5nIHRvIHR5cGUgY29uZnVzaW9uIHdoZXJlIGEgZnVuY3Rpb24gcG9pbnRlciBmcm9tIGBzdHJ1Y3QgcmN1X2hlYWRgIGlzIHJlYWQgYXMgYW4gYGxsaXN0X25vZGVgIHBvaW50ZXIgYW5kIHN1YnNlcXVlbnRseSBkZXJlZmVyZW5jZWQuIFRoaXMgd2lsbCByZXN1bHQgaW4gYW4gaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgaW52YWxpZCBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yJiMzOTtzIFJDVSBmcmVlaW5nIG1lY2hhbmlzbSBieSBpbnRyb2R1Y2luZyBhIHR3by1zdGFnZSBSQ1UgY2FsbGJhY2sgZm9yIGByY3VfdHRyYWNlYC4gSXQgZGVmZXJzIHRoZSBhY3R1YWwgbWVtb3J5IGZyZWVpbmcgdG8gYF9fZnJlZV9maW5hbF9yY3VgIHZpYSBgY2FsbF9yY3VgIGZyb20gYF9fZnJlZV9yY3VgLCBlbnN1cmluZyBib3RoIFJDVSBUYXNrcyBUcmFjZSBhbmQgbm9ybWFsIFJDVSBncmFjZSBwZXJpb2RzIGhhdmUgcGFzc2VkLiBUaGlzIGlzIGEgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3IgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDExODBkYmM0ZDJkMjkxMWIzY2M1ZDk3ZmM2ODY3ZWQ1NDUyMzQzMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDExOjQ4OjM0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbWVtYWxsb2MuYyBiL2tlcm5lbC9icGYvbWVtYWxsb2MuY1xuaW5kZXggZTk2NjJkYjcxOThmZS4uZmIxZTczM2JmYjgyOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvbWVtYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tZW1hbGxvYy5jXG5AQCAtMTEwLDcgJiM0MzsxMTAsOSBAQCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSB7XG4gXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqZnJlZV9ieV9yY3VfdGFpbDtcbiBcdHN0cnVjdCBsbGlzdF9oZWFkIHdhaXRpbmdfZm9yX2dwO1xuIFx0c3RydWN0IGxsaXN0X25vZGUgKndhaXRpbmdfZm9yX2dwX3RhaWw7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKndhaXRpbmdfZm9yX3JlY2xhaW1fZ3A7XG4gXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuJiM0MztcdHN0cnVjdCByY3VfaGVhZCByY3VfcmVjbGFpbTtcbiBcdGF0b21pY190IGNhbGxfcmN1X2luX3Byb2dyZXNzO1xuIFx0c3RydWN0IGxsaXN0X2hlYWQgZnJlZV9sbGlzdF9leHRyYV9yY3U7XG4gXG5AQCAtMjc2LDEyICYjNDM7Mjc4LDI4IEBAIHN0YXRpYyBpbnQgZnJlZV9hbGwoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMsIHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUsIGJvb2wgcGVyXG4gXHRyZXR1cm4gY250O1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgX19mcmVlX2ZpbmFsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSwgcmN1KTtcbiYjNDM7XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlID0gYy1cdTAwM2V3YWl0aW5nX2Zvcl9yZWNsYWltX2dwO1xuJiM0MztcbiYjNDM7XHRjLVx1MDAzZXdhaXRpbmdfZm9yX3JlY2xhaW1fZ3AgPSBOVUxMO1xuJiM0MztcdGZyZWVfYWxsKGMsIGxsbm9kZSwgISFjLVx1MDAzZXBlcmNwdV9zaXplKTtcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNmMtXHUwMDNlY2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzLCAwKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBfX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbiB7XG4gXHRzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSwgcmN1X3R0cmFjZSk7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2Yy1cdTAwM2V3YWl0aW5nX2Zvcl9ncF90dHJhY2UpO1xuIFxuLVx0ZnJlZV9hbGwoYywgbGxpc3RfZGVsX2FsbChcdTAwMjZjLVx1MDAzZXdhaXRpbmdfZm9yX2dwX3R0cmFjZSksICEhYy1cdTAwM2VwZXJjcHVfc2l6ZSk7XG4tXHRhdG9taWNfc2V0KFx1MDAyNmMtXHUwMDNlY2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzLCAwKTtcbiYjNDM7XHRpZiAoIWxsbm9kZSkge1xuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZjLVx1MDAzZWNhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcywgMCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjLVx1MDAzZXdhaXRpbmdfZm9yX3JlY2xhaW1fZ3AgPSBsbG5vZGU7XG4mIzQzO1x0Y2FsbF9yY3UoXHUwMDI2Yy1cdTAwM2VyY3VfcmVjbGFpbSwgX19mcmVlX2ZpbmFsX3JjdSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGVucXVlX3RvX2ZyZWUoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMsIHZvaWQgKm9iailcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMTo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfbWVtX2FsbG9jX2luaXQmIzM0OywKICAgICYjMzQ7YnBmX21lbV9hbGxvY19kZXN0cm95JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgbWVtb3J5IGFsbG9jYXRvciYjMzk7cyBSQ1UgZnJlZWluZyBtZWNoYW5pc20gYnkgaW50cm9kdWNpbmcgYSB0d28tc3RhZ2UgUkNVIGNhbGxiYWNrIGZvciBgcmN1X3R0cmFjZWAuIEl0IGRlZmVycyB0aGUgYWN0dWFsIG1lbW9yeSBmcmVlaW5nIHRvIGBfX2ZyZWVfZmluYWxfcmN1YCB2aWEgYGNhbGxfcmN1YCBmcm9tIGBfX2ZyZWVfcmN1YCwgZW5zdXJpbmcgYm90aCBSQ1UgVGFza3MgVHJhY2UgYW5kIG5vcm1hbCBSQ1UgZ3JhY2UgcGVyaW9kcyBoYXZlIHBhc3NlZC4gVGhpcyBpcyBhIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAxMTgwZGJjNGQyZDI5MTFiM2NjNWQ5N2ZjNjg2N2VkNTQ1MjM0MzEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAxMTo0ODozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbWVtYWxsb2MuYyBiL2tlcm5lbC9icGYvbWVtYWxsb2MuYwppbmRleCBlOTY2MmRiNzE5OGZlLi5mYjFlNzMzYmZiODI5IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL21lbWFsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tZW1hbGxvYy5jCkBAIC0xMTAsNyAmIzQzOzExMCw5IEBAIHN0cnVjdCBicGZfbWVtX2NhY2hlIHsKIAlzdHJ1Y3QgbGxpc3Rfbm9kZSAqZnJlZV9ieV9yY3VfdGFpbDsKIAlzdHJ1Y3QgbGxpc3RfaGVhZCB3YWl0aW5nX2Zvcl9ncDsKIAlzdHJ1Y3QgbGxpc3Rfbm9kZSAqd2FpdGluZ19mb3JfZ3BfdGFpbDsKJiM0MzsJc3RydWN0IGxsaXN0X25vZGUgKndhaXRpbmdfZm9yX3JlY2xhaW1fZ3A7CiAJc3RydWN0IHJjdV9oZWFkIHJjdTsKJiM0MzsJc3RydWN0IHJjdV9oZWFkIHJjdV9yZWNsYWltOwogCWF0b21pY190IGNhbGxfcmN1X2luX3Byb2dyZXNzOwogCXN0cnVjdCBsbGlzdF9oZWFkIGZyZWVfbGxpc3RfZXh0cmFfcmN1OwogCkBAIC0yNzYsMTIgJiM0MzsyNzgsMjggQEAgc3RhdGljIGludCBmcmVlX2FsbChzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSwgYm9vbCBwZXIKIAlyZXR1cm4gY250OwogfQogCiYjNDM7c3RhdGljIHZvaWQgX19mcmVlX2ZpbmFsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSwgcmN1KTsKJiM0MzsJc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSA9IGMtJmd0O3dhaXRpbmdfZm9yX3JlY2xhaW1fZ3A7CiYjNDM7CiYjNDM7CWMtJmd0O3dhaXRpbmdfZm9yX3JlY2xhaW1fZ3AgPSBOVUxMOwomIzQzOwlmcmVlX2FsbChjLCBsbG5vZGUsICEhYy0mZ3Q7cGVyY3B1X3NpemUpOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7Yy0mZ3Q7Y2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzLCAwKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBfX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIHsKIAlzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSwgcmN1X3R0cmFjZSk7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKCZhbXA7Yy0mZ3Q7d2FpdGluZ19mb3JfZ3BfdHRyYWNlKTsKIAotCWZyZWVfYWxsKGMsIGxsaXN0X2RlbF9hbGwoJmFtcDtjLSZndDt3YWl0aW5nX2Zvcl9ncF90dHJhY2UpLCAhIWMtJmd0O3BlcmNwdV9zaXplKTsKLQlhdG9taWNfc2V0KCZhbXA7Yy0mZ3Q7Y2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzLCAwKTsKJiM0MzsJaWYgKCFsbG5vZGUpIHsKJiM0MzsJCWF0b21pY19zZXQoJmFtcDtjLSZndDtjYWxsX3JjdV90dHJhY2VfaW5fcHJvZ3Jlc3MsIDApOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWMtJmd0O3dhaXRpbmdfZm9yX3JlY2xhaW1fZ3AgPSBsbG5vZGU7CiYjNDM7CWNhbGxfcmN1KCZhbXA7Yy0mZ3Q7cmN1X3JlY2xhaW0sIF9fZnJlZV9maW5hbF9yY3UpOwogfQogCiBzdGF0aWMgdm9pZCBlbnF1ZV90b19mcmVlKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCB2b2lkICpvYmopCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NjYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQb3RlbnRpYWw6IEJQRiBNZW1vcnkgQWxsb2NhdG9yIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgbWVzc2luZyB3aXRoIHRoZSBSQ1UgZnJlZWluZyBpbiB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3IsIHNwZWNpZmljYWxseSBga2VybmVsL2JwZi9tZW1hbGxvYy5jYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgYW55IGNvcmUgbWVtb3J5IGFsbG9jYXRvciBjaGFuZ2VzIGFyZSBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLCBzbyBsZXQmIzM5O3MgZGlnIGluLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGFkZGluZyBgd2FpdGluZ19mb3JfcmVjbGFpbV9ncGAgYW5kIGByY3VfcmVjbGFpbWAgdG8gdGhlIGBicGZfbWVtX2NhY2hlYCBzdHJ1Y3QsIHdoaWNoIGlzIGltbWVkaWF0ZWx5IGdyYWJiaW5nIG15IGF0dGVudGlvbi4gVGhleSYjMzk7cmUgZGVmZXJyaW5nIHRoZSBhY3R1YWwgZnJlZWluZyB0byBgX19mcmVlX2ZpbmFsX3JjdWAgdGhyb3VnaCBgY2FsbF9yY3VgLCB3aGljaCBpcyBhIGNsYXNzaWMgUkNVIHBhdHRlcm4uCgpUaGUgbWFpbiBmdW5jdGlvbnMgY2hhbmdlZCBhcmUgYF9fZnJlZV9yY3VgIGFuZCBgX19mcmVlX2ZpbmFsX3JjdWAuIFRoZXkmIzM5O3JlIGJvdGggaW4gdGhlIHNhbWUgZmlsZSwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMZXQgbWUgcXVpY2tseSBjaGVjayBpZiBgX19mcmVlX3JjdWAgaXMgc3RhdGljIOKAkyB5ZXMsIGl0IGlzLiBCdXQsIHdhaXQgYSBtaW51dGUuLi4gYF9fZnJlZV9yY3VgIGlzIGJlaW5nIHVzZWQgYXMgYSBjYWxsYmFjaywgd2hpY2ggbWVhbnMgaXTigJlzIGV4cG9zZWQsIGluIGEgc2Vuc2UsIGFzIGEgZnVuY3Rpb24gcG9pbnRlci4gVGhpcyBhY3R1YWxseSBvcGVucyB1cCB0aGUgYXR0YWNrIHN1cmZhY2UgYSBiaXQgbW9yZSwgZXNwZWNpYWxseSBzaW5jZSBpdCYjMzk7cyBnb2luZyB0aHJvdWdoIGBjYWxsX3JjdV90YXNrc190cmFjZWAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFjY29yZGluZyB0byBteSByZWNvbGxlY3Rpb24uIEJldHRlciBiZSB0aG9yb3VnaCBoZXJlLCBqdXN0IHRvIG1ha2Ugc3VyZSwgbGV0IG1lIGdyZXAgZm9yIGBfX2ZyZWVfcmN1YCB3aXRoaW4gYGtlcm5lbC9icGYvbWVtYWxsb2MuY2AuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdG8gcHJpb3JpdGl6ZSBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2ZyZWVfcmN1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9tZW1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbWVtYWxsb2MuYz0yODE9c3RhdGljIHZvaWQgX19mcmVlX2ZpbmFsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTI5MC1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYzoyOTE6c3RhdGljIHZvaWQgX19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMjkyLXtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9MzE1PXN0YXRpYyB2b2lkIGRvX2NhbGxfcmN1X3R0cmFjZShzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYylcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMzMxLVx0aWYgKHVubGlrZWx5KFJFQURfT05DRShjLVx1MDAzZWRyYWluaW5nKSkpIHtcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzozMzI6XHRcdF9fZnJlZV9yY3UoXHUwMDI2Yy1cdTAwM2VyY3VfdHRyYWNlKTtcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0zMzMtXHRcdHJldHVybjtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMzM4LVx0ICogUkNVIFRhc2tzIFRyYWNlIGdyYWNlIHBlcmlvZCBpbXBsaWVzIFJDVSBncmFjZSBwZXJpb2QsIHNvIHBhc3Ncbmtlcm5lbC9icGYvbWVtYWxsb2MuYzozMzk6XHQgKiBfX2ZyZWVfcmN1IGRpcmVjdGx5IGFzIHRoZSBjYWxsYmFjay5cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0zNDAtXHQgKi9cbmtlcm5lbC9icGYvbWVtYWxsb2MuYzozNDE6XHRjYWxsX3JjdV90YXNrc190cmFjZShcdTAwMjZjLVx1MDAzZXJjdV90dHJhY2UsIF9fZnJlZV9yY3UpO1xua2VybmVsL2JwZi9tZW1hbGxvYy5jLTM0Mi19XG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTcwND1zdGF0aWMgdm9pZCBmcmVlX21lbV9hbGxvYyhzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEpXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTcxMS1cdCAqIGJ1dCByY3VfYmFycmllcl90YXNrc190cmFjZSgpIGFuZCByY3VfYmFycmllcigpIGJlbG93IGFyZSBvbmx5IHVzZWRcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo3MTI6XHQgKiB0byB3YWl0IGZvciB0aGUgcGVuZGluZyBfX2ZyZWVfYnlfcmN1KCksIGFuZCBfX2ZyZWVfcmN1KCkuIFJDVSBUYXNrc1xua2VybmVsL2JwZi9tZW1hbGxvYy5jOjcxMzpcdCAqIFRyYWNlIGdyYWNlIHBlcmlvZCBpbXBsaWVzIFJDVSBncmFjZSBwZXJpb2QsIHNvIGFsbCBfX2ZyZWVfcmN1IGRvbiYjMzk7dFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTcxNC1cdCAqIG5lZWQgZXh0cmEgY2FsbF9yY3UoKSAoYW5kIHRodXMgZXh0cmEgcmN1X2JhcnJpZXIoKSBoZXJlKS5cbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNzE2LVx0cmN1X2JhcnJpZXIoKTsgLyogd2FpdCBmb3IgX19mcmVlX2J5X3JjdSAqL1xua2VybmVsL2JwZi9tZW1hbGxvYy5jOjcxNzpcdHJjdV9iYXJyaWVyX3Rhc2tzX3RyYWNlKCk7IC8qIHdhaXQgZm9yIF9fZnJlZV9yY3UgKi9cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy03MTgtXHRmcmVlX21lbV9hbGxvY19ub19iYXJyaWVyKG1hKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzMwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBNZW1vcnkgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJJiMzOTttIHRoaW5raW5nLCB0aGVzZSBmdW5jdGlvbnMsIGJlaW5nIHN0YXRpYywgdGhleSYjMzk7cmUgbm90IGdvaW5nIHRvIGJlIHBhcnRpY3VsYXJseSBoZWxwZnVsIGFzIGRpcmVjdCBmb2N1cyBzeW1ib2xzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBwcm9jZXNzZXMgd2l0aGluIHRoZSBCUEYgc3lzdGVtLgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gSSYjMzk7dmUgZ290IGBicGZfbWVtX2FsbG9jYCwgYGJwZl9tZW1fZnJlZWAsIGBicGZfbWVtX2NhY2hlX2FsbG9jYCwgYW5kIGBicGZfbWVtX2NhY2hlX2ZyZWVgLiBUaG9zZSBmZWVsIGxpa2UgdGhlIGtleSBmdW5jdGlvbnMgdG8gaW52ZXN0aWdhdGUuCgpJJiMzOTtsbCBkaXZlIGludG8gYGtlcm5lbC9icGYvbWVtYWxsb2MuY2Agbm93LiBUaGUgZ29hbCBpcyB0byBzZWUgd2hpY2ggZnVuY3Rpb25zLCBpZiBhbnksIGFyZSBleHBvcnRlZCBvciAqbm90KiBkZWNsYXJlZCBzdGF0aWMgd2l0aGluIHRoYXQgZmlsZS4gVGhvc2UgYXJlIHRoZSBvbmVzIEkgc2hvdWxkIHBheSBhdHRlbnRpb24gdG8sIGFzIHRoZXkgcmVwcmVzZW50IHRoZSBhY2Nlc3NpYmxlIGludGVyZmFjZXMgdG8gdGhpcyBwYXJ0IG9mIHRoZSBCUEYgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBUaGF0IHNob3VsZCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRoaXMgY29tcG9uZW50IGludGVncmF0ZXMgaW50byB0aGUgd2lkZXIgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152b2lkIGJwZl9tZW1fJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9tZW1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbWVtYWxsb2MuYz03Mjk9c3RhdGljIHZvaWQgZGVzdHJveV9tZW1fYWxsb2Moc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBpbnQgcmN1X2luX3Byb2dyZXNzKVxuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy03NTMtXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NzU0OnZvaWQgYnBmX21lbV9hbGxvY19kZXN0cm95KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSlcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy03NTUte1xuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYz05Njc9dm9pZCBub3RyYWNlIGJwZl9tZW1fY2FjaGVfZnJlZV9yY3Uoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCB2b2lkICpwdHIpXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk4NC0gKi9cbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo5ODU6dm9pZCBicGZfbWVtX2NhY2hlX3Jhd19mcmVlKHZvaWQgKnB0cilcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05ODYte1xuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYz0xMDIwPWludCBicGZfbWVtX2FsbG9jX2NoZWNrX3NpemUoYm9vbCBwZXJjcHUsIHNpemVfdCBzaXplKVxuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0xMDI5LVxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjEwMzA6dm9pZCBicGZfbWVtX2FsbG9jX3NldF9kdG9yKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgdm9pZCAoKmR0b3IpKHZvaWQgKm9iaiwgdm9pZCAqY3R4KSxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0xMDMxLVx0XHRcdCAgICB2b2lkICgqZHRvcl9jdHhfZnJlZSkodm9pZCAqY3R4KSwgdm9pZCAqY3R4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MzEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk1lbW9yeSBNYW5hZ2VtZW50IERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBvciBtaXN1c2UgaXNzdWUgaW4gdGhlIEJQRiBjb2RlLCBhbmQgdGhlIGZpcnN0IHBsYWNlIG15IGJyYWluIG5hdHVyYWxseSBnb2VzIGlzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgdm9pZCBicGZfbWVtX2ZyZWVgIGFuZCBgdm9pZCBicGZfbWVtX2FsbG9jYCBhcmUgYmVpbmcgdXNlZC4gQXJlIHRoZXkgYmVpbmcgY2FsbGVkIHN5bW1ldHJpY2FsbHk/IEFyZSB0aGVyZSBwb3RlbnRpYWwgc2NlbmFyaW9zIHdoZXJlIGEgYmxvY2sgaXMgYWxsb2NhdGVkIGJ1dCBuZXZlciBmcmVlZD8gT3IsIGNvbnZlcnNlbHksIGlzIHNvbWV0aGluZyBiZWluZyBmcmVlZCB0d2ljZT8gVGhlIGRldmlsLCBhcyBhbHdheXMsIGlzIGluIHRoZSBkZXRhaWxzLCBzbyBJIG5lZWQgdG8gY2FyZWZ1bGx5IHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aHMgdGhhdCBpbnZvbHZlIHRoZXNlIGZ1bmN0aW9ucyBhbmQgbG9vayBmb3IgYW55IGFub21hbGllcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXNlIGFyZSBvcGVyYXRpbmcgYXMgZXhwZWN0ZWQsIG9yIHRoYXQgdGhleSBhcmUgb3BlcmF0aW5nIGFzIGRvY3VtZW50ZWQuIExldCYjMzk7cyBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedm9pZCBicGZfbWVtXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbWVtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL21lbWFsbG9jLmM9NzI5PXN0YXRpYyB2b2lkIGRlc3Ryb3lfbWVtX2FsbG9jKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgaW50IHJjdV9pbl9wcm9ncmVzcylcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNzUzLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjc1NDp2b2lkIGJwZl9tZW1fYWxsb2NfZGVzdHJveShzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEpXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNzU1LXtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9OTY3PXZvaWQgbm90cmFjZSBicGZfbWVtX2NhY2hlX2ZyZWVfcmN1KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgdm9pZCAqcHRyKVxuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05ODQtICovXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6OTg1OnZvaWQgYnBmX21lbV9jYWNoZV9yYXdfZnJlZSh2b2lkICpwdHIpXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTg2LXtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9MTAyMD1pbnQgYnBmX21lbV9hbGxvY19jaGVja19zaXplKGJvb2wgcGVyY3B1LCBzaXplX3Qgc2l6ZSlcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTAyOS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYzoxMDMwOnZvaWQgYnBmX21lbV9hbGxvY19zZXRfZHRvcihzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIHZvaWQgKCpkdG9yKSh2b2lkICpvYmosIHZvaWQgKmN0eCksXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTAzMS1cdFx0XHQgICAgdm9pZCAoKmR0b3JfY3R4X2ZyZWUpKHZvaWQgKmN0eCksIHZvaWQgKmN0eClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDQzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGRlYnVnZ2luZyBvciBwZXJmb3JtYW5jZSBhbmFseXNpczoKCioqSW52ZXN0aWdhdGluZyBhIEtlcm5lbCBNZW1vcnkgUmVsZWFzZSBQYXRoKioKCkhtbSwgaG9sZCBvbiBhIHNlY29uZC4gSSBqdXN0IHNhdyB0aGF0IGBicGZfbWVtX2NhY2hlX2ZyZWVfcmN1YCBpcyBtYXJrZWQgYXMgYG5vdHJhY2VgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gSXQgbWVhbnMgdHJhY2luZyB0b29scyBhcmUgZGVsaWJlcmF0ZWx5IHNraXBwaW5nIGl0LCB3aGljaCB1c3VhbGx5IGltcGxpZXMgdGhhdCBpdCYjMzk7cyBhIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHBhdGggdGhhdCB0aGV5IGRvbiYjMzk7dCB3YW50IHRvIGludGVyZmVyZSB3aXRoLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcuIElmIHRyYWNpbmcgaXMgYmVpbmcgc3VwcHJlc3NlZCwgdGhhdCB0ZWxscyBtZSB0aGlzIHJlbGVhc2UgcGF0aCBpcyAqZmFzdCosIGFuZCAqZnJlcXVlbnRseSogY2FsbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uICpiZWZvcmUqIHRoYXQgcG9pbnQuIFNvLCBub3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIHNlZSB3aGF0JiMzOTtzIGNhbGxpbmcgYGJwZl9tZW1fY2FjaGVfZnJlZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGZsb3cgYmVmb3JlIEkgY2FuIHByb3Blcmx5IGV2YWx1YXRlIHRoaXMgYHJjdWAgdmFyaWFudC4gTGV0JiMzOTtzIHNlZSB3aGF0IGBicGZfbWVtX2NhY2hlX2ZyZWVgIGlzIGRvaW5nLCBhbmQgd2hhdCBjb2RlIGlzICphY3R1YWxseSogcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152b2lkIG5vdHJhY2UgYnBmX21lbV8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL21lbWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9tZW1hbGxvYy5jPTkwMT12b2lkIG5vdHJhY2UgKmJwZl9tZW1fYWxsb2Moc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBzaXplX3Qgc2l6ZSlcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTE4LVxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjkxOTp2b2lkIG5vdHJhY2UgYnBmX21lbV9mcmVlKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgdm9pZCAqcHRyKVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTkyMC17XG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTkzNC1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo5MzU6dm9pZCBub3RyYWNlIGJwZl9tZW1fZnJlZV9yY3Uoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCB2b2lkICpwdHIpXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTM2LXtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9OTUxPXZvaWQgbm90cmFjZSAqYnBmX21lbV9jYWNoZV9hbGxvYyhzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEpXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk1OC1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo5NTk6dm9pZCBub3RyYWNlIGJwZl9tZW1fY2FjaGVfZnJlZShzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIHZvaWQgKnB0cilcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05NjAte1xuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05NjYtXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6OTY3OnZvaWQgbm90cmFjZSBicGZfbWVtX2NhY2hlX2ZyZWVfcmN1KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgdm9pZCAqcHRyKVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk2OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MjgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkFzc2Vzc2luZyBCUEYgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb25zKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgQlBGIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uczogYGJwZl9tZW1fZnJlZWAsIGBicGZfbWVtX2ZyZWVfcmN1YCwgYGJwZl9tZW1fY2FjaGVfZnJlZWAsIGFuZCBgYnBmX21lbV9jYWNoZV9mcmVlX3JjdWAuIFRoZXkmIzM5O3JlIGFsbCBtYXJrZWQgYXMgYG5vdHJhY2VgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gSXQgbWVhbnMgdGhleSYjMzk7cmUgKm5vdCogY29uc2lkZXJlZCB0byBiZSBvbiBhIHBhcnRpY3VsYXJseSBob3QgcGF0aCwgd2hpY2ggaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IGFnZ3Jlc3NpdmVseSB3ZSBtaWdodCBvcHRpbWl6ZSBvciBhbmFseXplIHRoZW0uIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBhbmQgaXQgc3VnZ2VzdHMgdGhleSYjMzk7cmUgbGlrZWx5IG5vdCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSXQgbWVhbnMgdGhhdCB0cmFjaW5nIHRoZW0gaXNuJiMzOTt0IGdvaW5nIHRvIGJlIHVzZWZ1bCBpbiBtb3N0IGNhc2VzLgoKQnV0IEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBiaWcgcGljdHVyZS4gQXJlIHRoZXJlICphbnkqIG5vbi1ob3QtcGF0aCBmdW5jdGlvbnMgaW4gdGhhdCBzZXQ/IEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGUgJiMzNDt3b3JrJiMzNDsgaXMgYmVpbmcgZG9uZS4KClRoZW4gSSBzZWUgYGJwZl9tZW1fYWxsb2NfaW5pdGAsIGBicGZfbWVtX2FsbG9jX2Rlc3Ryb3lgLiBUaG9zZSBhcmUgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBkZXN0cnVjdGlvbiBmdW5jdGlvbnMuIFRoZXkmIzM5O3JlIGxpa2VseSBub3QgYXMgcGVyZm9ybWFuY2UtY3JpdGljYWwgYXMgdGhlIGFsbG9jYXRpb24vZnJlZSBjYWxscy4gSG93ZXZlciwgdGhhdCBpc24mIzM5O3QgcmVhbGx5IHRoZSB3aG9sZSBzdG9yeS4gVGhlIGxpZmV0aW1lIG9mIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhlIEJQRiBwcm9ncmFtIG5lZWRzIHRvIGJlIHVuZGVyc3Rvb2QuCgpTbywgSSBuZWVkIHRvIGxvb2sgY2xvc2VyIGF0IHdoYXQgdGhvc2UgZnVuY3Rpb25zICpkbyouIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGR1cmluZyBhbGxvY2F0aW9uLCB3aGF0IGRhdGEgc3RydWN0dXJlcyB0aGV5JiMzOTtyZSBtYW5pcHVsYXRpbmcsIGFuZCB3aGVyZSB0aGUgcG90ZW50aWFsIGNvbnRlbnRpb24gcG9pbnRzIG1pZ2h0IGJlLCBldmVuIGlmIGl0JiMzOTtzIG5vdCBhICYjMzk7aG90IHBhdGgmIzM5OyBpbiB0aGUgY2xhc3NpYyBzZW5zZS4gS25vd2luZyB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aG9zZSBwb2ludHMgY2FuIGJldHRlciBpbmZvcm0gYW55IGZ1dHVyZSBvcHRpbWl6YXRpb25zIG9yIGFuYWx5c2lzIG9mIHRoZXNlIG1lbW9yeSBtYW5hZ2VtZW50IHBpZWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBicGZfbWVtX2FsbG9jX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL21lbWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9tZW1hbGxvYy5jPTQ5OT1zdGF0aWMgdm9pZCBwcmVmaWxsX21lbV9jYWNoZShzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgaW50IGNwdSlcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNTE5LSAqL1xua2VybmVsL2JwZi9tZW1hbGxvYy5jOjUyMDppbnQgYnBmX21lbV9hbGxvY19pbml0KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgaW50IHNpemUsIGJvb2wgcGVyY3B1KVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTUyMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNDAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgTWVtb3J5IEFsbG9jYXRvciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgUkNVIGZyZWVpbmcgbWVjaGFuaXNtIHdpdGhpbiBgYnBmX21lbV9hbGxvY2AuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSByZWQgYWxlcnQsIGVzcGVjaWFsbHkgc2luY2UgdGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIG9uIGBfX2ZyZWVfcmN1YCBhbmQgYF9fZnJlZV9maW5hbF9yY3VgLiBUaGlzIGlzIGEgY29yZSBwYXJ0IG9mIHRoZSBCUEYgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCB3ZSBhbGwga25vdyBob3cgdGhvc2UgY2FuIGJlIHRyaWNreS4gSXQgKmFic29sdXRlbHkqIG5lZWRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4KCk15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGRlc3RydWN0aW9uIGZ1bmN0aW9uczogYGJwZl9tZW1fYWxsb2NfaW5pdGAgYW5kIGBicGZfbWVtX2FsbG9jX2Rlc3Ryb3lgLiBUaGVzZSBhcmUgYWx3YXlzIGdvb2Qgc3RhcnRpbmcgcG9pbnRzIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBsaWZlY3ljbGUuIEFoLCBhbmQgd2FpdCBhIHNlY29uZCwgYGJwZl9tZW1fYWxsb2NfaW5pdGAgaXMgY2FsbGVkIGR1cmluZyBtYXAgY3JlYXRpb24uIFRoYXQmIzM5O3MgYSBnb29kIGNvbm5lY3Rpb24gdG8gcmVtZW1iZXIgYXMgaXQgY291bGQgYWRkIHNvbWUgaW50ZXJlc3RpbmcgZWRnZS1jYXNlcyB0byBiZSBhd2FyZSBvZi4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSByZXF1aXJlZCBmb3IgdGhpcyB0byB3b3JrLgoKQWxzbywgaXQgbG9va3MgbGlrZSB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3IgaXMgY29tcGlsZWQgd2l0aCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgY29uZmlybWluZyB0aGlzIGFzIGEgQlBGLWZvY3VzZWQgYXJlYS4gTm93LCBsZXQmIzM5O3Mgc3RhcnQgcGxhbm5pbmcgdGhlIGZ1enppbmcgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai1cXCRcXChDT05GSUdfQlBGX1NZU0NBTExcXCkuKm1lbWFsbG9jLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTc9b2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSB0cmFtcG9saW5lLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnRmLm8gbWVtYWxsb2MubyBycXNwaW5sb2NrLm8gc3RyZWFtLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTktaWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg3NgoJCQkJCQkJb3V0cHV0OiAxNTcKCQkJCQkJCXRob3VnaHRzOiAxNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIE1lbW9yeSBBbGxvY2F0b3IgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCB0aGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgYWJvdXQgaG93IHRoZSBCUEYgbWVtb3J5IGFsbG9jYXRvciBoYW5kbGVzIGZyZWVpbmcgbWVtb3J5LCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgYHJjdV90dHJhY2VgIGRhdGEgc3RydWN0dXJlLiBJdCYjMzk7cyB1c2luZyB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWcsIGFzIGV4cGVjdGVkLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0aGlzIHR3by1zdGFnZSBSQ1UgZnJlZWluZyBtZWNoYW5pc20uIEluc3RlYWQgb2YgdGhlIHR5cGljYWwgc2luZ2xlIFJDVSBjYWxsYmFjaywgd2UmIzM5O3JlIG5vdyBlbXBsb3lpbmcgYF9fZnJlZV9maW5hbF9yY3VgLiBUaGlzIGlzIHRyaWdnZXJlZCB2aWEgYGNhbGxfcmN1YCBvbiBgYy0mZ3Q7cmN1X3JlY2xhaW1gIGZyb20gYF9fZnJlZV9yY3VgLiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoYXQgdGhpcyBhcHByb2FjaCBndWFyYW50ZWVzIGEgbW9yZSByb2J1c3QgZnJlZWluZyBwcm9jZXNzOyBpdCB3YWl0cyBmb3IgKmJvdGgqIHRoZSBSQ1UgVGFza3MgVHJhY2UgZ3JhY2UgcGVyaW9kICphbmQqIHRoZSByZWd1bGFyIFJDVSBncmFjZSBwZXJpb2QgdG8gY29tcGxldGUgYmVmb3JlIGFjdHVhbGx5IGZyZWVpbmcgdGhlIG1lbW9yeS4gVGhpcyBpcyBzbWFydDsgaXQmIzM5O3MgZGVzaWduZWQgdG8gbWl0aWdhdGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgZW5zdXJlIHRoZSBtZW1vcnkgaXMgdHJ1bHkgc2FmZSB0byByZWNsYWltLCBhdm9pZGluZyBhbnkgc3VidGxlIEJQRi1yZWxhdGVkIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gSXQmIzM5O3MgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIEJQRiBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uCgpHaXZlbiB0aGlzLCBteSBpbnN0aW5jdCBpcyB0byBpbW1lZGlhdGVseSBsYWJlbCB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuIEFueXRpbWUgeW91JiMzOTtyZSB0b3VjaGluZyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLCBlc3BlY2lhbGx5IHdpdGhpbiBhIGNyaXRpY2FsIHN1YnN5c3RlbSBsaWtlIEJQRiwgaXQgd2FycmFudHMgdGhvcm91Z2ggZnV6emluZy4gSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiB0aGUgYGJwZl9tZW1fYWxsb2NfaW5pdGAgYW5kIGBicGZfbWVtX2FsbG9jX2Rlc3Ryb3lgIGZ1bmN0aW9ucy4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgYW5kIGV4aXQgcG9pbnRzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudDsgZnV6emluZyB0aGVtIHdpbGwgZXhwb3NlIGFueSBmbGF3cyB0aGlzIG5ldyBtZWNoYW5pc20gbWlnaHQgaW50cm9kdWNlLiBJdCYjMzk7cyBhbHNvIGltcG9ydGFudCB0byBjb25maXJtIGBCUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX21lbV9hbGxvY19pbml0JiMzNDssCiAgICAmIzM0O2JwZl9tZW1fYWxsb2NfZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3ImIzM5O3MgUkNVIGZyZWVpbmcgbWVjaGFuaXNtIGJ5IGludHJvZHVjaW5nIGEgdHdvLXN0YWdlIFJDVSBjYWxsYmFjayBmb3IgYHJjdV90dHJhY2VgLiBJdCBkZWZlcnMgdGhlIGFjdHVhbCBtZW1vcnkgZnJlZWluZyB0byBgX19mcmVlX2ZpbmFsX3JjdWAgdmlhIGBjYWxsX3JjdWAgZnJvbSBgX19mcmVlX3JjdWAsIGVuc3VyaW5nIGJvdGggUkNVIFRhc2tzIFRyYWNlIGFuZCBub3JtYWwgUkNVIGdyYWNlIHBlcmlvZHMgaGF2ZSBwYXNzZWQuIFRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgbWVtb3J5IGFsbG9jYXRvciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX21lbV9hbGxvY19pbml0JiMzNDssCiAgICAmIzM0O2JwZl9tZW1fYWxsb2NfZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3ImIzM5O3MgUkNVIGZyZWVpbmcgbWVjaGFuaXNtIGJ5IGludHJvZHVjaW5nIGEgdHdvLXN0YWdlIFJDVSBjYWxsYmFjayBmb3IgYHJjdV90dHJhY2VgLiBJdCBkZWZlcnMgdGhlIGFjdHVhbCBtZW1vcnkgZnJlZWluZyB0byBgX19mcmVlX2ZpbmFsX3JjdWAgdmlhIGBjYWxsX3JjdWAgZnJvbSBgX19mcmVlX3JjdWAsIGVuc3VyaW5nIGJvdGggUkNVIFRhc2tzIFRyYWNlIGFuZCBub3JtYWwgUkNVIGdyYWNlIHBlcmlvZHMgaGF2ZSBwYXNzZWQuIFRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgbWVtb3J5IGFsbG9jYXRvciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHBvaW50ZXIgYXJpdGhtZXRpYyBidWcgaW4gYF9fZnJlZV9maW5hbF9yY3VgIGJ5IHVzaW5nIGBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9tZW1fY2FjaGUsIHJjdSlgIGluc3RlYWQgb2YgYHJjdV9yZWNsYWltYC4gVGhpcyBjYXVzZXMgdGhlIGBjYCBwb2ludGVyIHRvIGJlIHNoaWZ0ZWQgYnkgMTYgYnl0ZXMsIGxlYWRpbmcgdG8gdHlwZSBjb25mdXNpb24gd2hlcmUgYSBmdW5jdGlvbiBwb2ludGVyIGZyb20gYHN0cnVjdCByY3VfaGVhZGAgaXMgcmVhZCBhcyBhbiBgbGxpc3Rfbm9kZWAgcG9pbnRlciBhbmQgc3Vic2VxdWVudGx5IGRlcmVmZXJlbmNlZC4gVGhpcyB3aWxsIHJlc3VsdCBpbiBhbiBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBpbnZhbGlkIGFjY2Vzc2VzIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwMTE4MGRiYzRkMmQyOTExYjNjYzVkOTdmYzY4NjdlZDU0NTIzNDMxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMTE6NDg6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21lbWFsbG9jLmMgYi9rZXJuZWwvYnBmL21lbWFsbG9jLmMKaW5kZXggZTk2NjJkYjcxOThmZS4uZmIxZTczM2JmYjgyOSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9tZW1hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvbWVtYWxsb2MuYwpAQCAtMTEwLDcgJiM0MzsxMTAsOSBAQCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSB7CiAJc3RydWN0IGxsaXN0X25vZGUgKmZyZWVfYnlfcmN1X3RhaWw7CiAJc3RydWN0IGxsaXN0X2hlYWQgd2FpdGluZ19mb3JfZ3A7CiAJc3RydWN0IGxsaXN0X25vZGUgKndhaXRpbmdfZm9yX2dwX3RhaWw7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICp3YWl0aW5nX2Zvcl9yZWNsYWltX2dwOwogCXN0cnVjdCByY3VfaGVhZCByY3U7CiYjNDM7CXN0cnVjdCByY3VfaGVhZCByY3VfcmVjbGFpbTsKIAlhdG9taWNfdCBjYWxsX3JjdV9pbl9wcm9ncmVzczsKIAlzdHJ1Y3QgbGxpc3RfaGVhZCBmcmVlX2xsaXN0X2V4dHJhX3JjdTsKIApAQCAtMjc2LDEyICYjNDM7Mjc4LDI4IEBAIHN0YXRpYyBpbnQgZnJlZV9hbGwoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMsIHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUsIGJvb2wgcGVyCiAJcmV0dXJuIGNudDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIF9fZnJlZV9maW5hbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9tZW1fY2FjaGUsIHJjdSk7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUgPSBjLSZndDt3YWl0aW5nX2Zvcl9yZWNsYWltX2dwOwomIzQzOwomIzQzOwljLSZndDt3YWl0aW5nX2Zvcl9yZWNsYWltX2dwID0gTlVMTDsKJiM0MzsJZnJlZV9hbGwoYywgbGxub2RlLCAhIWMtJmd0O3BlcmNwdV9zaXplKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO2MtJmd0O2NhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcywgMCk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgX19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiB7CiAJc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9tZW1fY2FjaGUsIHJjdV90dHJhY2UpOwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlID0gbGxpc3RfZGVsX2FsbCgmYW1wO2MtJmd0O3dhaXRpbmdfZm9yX2dwX3R0cmFjZSk7CiAKLQlmcmVlX2FsbChjLCBsbGlzdF9kZWxfYWxsKCZhbXA7Yy0mZ3Q7d2FpdGluZ19mb3JfZ3BfdHRyYWNlKSwgISFjLSZndDtwZXJjcHVfc2l6ZSk7Ci0JYXRvbWljX3NldCgmYW1wO2MtJmd0O2NhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcywgMCk7CiYjNDM7CWlmICghbGxub2RlKSB7CiYjNDM7CQlhdG9taWNfc2V0KCZhbXA7Yy0mZ3Q7Y2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzLCAwKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwljLSZndDt3YWl0aW5nX2Zvcl9yZWNsYWltX2dwID0gbGxub2RlOwomIzQzOwljYWxsX3JjdSgmYW1wO2MtJmd0O3JjdV9yZWNsYWltLCBfX2ZyZWVfZmluYWxfcmN1KTsKIH0KIAogc3RhdGljIHZvaWQgZW5xdWVfdG9fZnJlZShzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgdm9pZCAqb2JqKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2MwoJCQkJCQkJb3V0cHV0OiAxOTEKCQkJCQkJCXRob3VnaHRzOiAxOTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIGJwZl9tZW1fY2FjaGUgUkNVIERlZmVycmFsIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpbiBga2VybmVsL2JwZi9tZW1hbGxvYy5jYCBpcyBpbnRyb2R1Y2luZyBSQ1UgZGVmZXJyYWwgZm9yIGZyZWVpbmcgYGJwZl9tZW1fY2FjaGVgIG9iamVjdHMuIEl0JiMzOTtzIGFkZGluZyBgcmN1X3JlY2xhaW1gIGFuZCBgd2FpdGluZ19mb3JfcmVjbGFpbV9ncGAgdG8gdGhlIGBicGZfbWVtX2NhY2hlYCBzdHJ1Y3R1cmUgYW5kIHVzaW5nIGBjYWxsX3JjdWAgdG8gZGVsYXkgdGhlIGFjdHVhbCBmcmVlaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGNvbnNpZGVyIGlmIHRoaXMgY291bGQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBidXQgSSYjMzk7dmUgcXVpY2tseSBydWxlZCB0aGF0IG91dCDigJMgaXQmIzM5O3MgYWxsIGFib3V0IGRlbGF5aW5nIGZyZWVzLCBub3QgY3JlYXRpbmcgdW5pbml0aWFsaXplZCBzdGF0ZXMuIElmIHRoZXJlJiMzOTtzIGEgcHJvYmxlbSwgaXQgd2lsbCBiZSBhIHVzZS1hZnRlci1mcmVlIChLQVNBTiB3b3VsZCBjYXRjaCB0aGF0KSBvciBhIG1lbW9yeSBsZWFrIChrbWVtbGVhayB3aWxsIHNwb3QgaXQpLgoKTm93LCBsZXQmIzM5O3Mgem9vbSBpbiBvbiB0aGUgY29kZS4gSSBzZWUgdGhlIG5ldyBmaWVsZHMgaW4gYGJwZl9tZW1fY2FjaGVgIGFuZCB0aGUgY3J1Y2lhbCBjaGFuZ2Ugd2hlcmUgYF9fZnJlZV9yY3VgIG5vdyBkZWZlcnMgdGhlIGZyZWUgYnkgY2FsbGluZyBgY2FsbF9yY3VgIHdpdGggYF9fZnJlZV9maW5hbF9yY3VgLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBsaWVzIGhlcmU6IGBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9tZW1fY2FjaGUsIHJjdSlgIGlzIHVzZWQsIGJ1dCB0aGUgYGhlYWRgIHBhc3NlZCB0byBgY2FsbF9yY3VgIGlzIGAmYW1wO2MtJmd0O3JjdV9yZWNsYWltYC4gVGhhdCYjMzk7cyB0aGUga2V5LgoKVGhpcyBtZWFucyB0aGF0IGBjb250YWluZXJfb2ZgIGlzIHVzaW5nIHRoZSAqd3JvbmcqIFJDVSBoZWFkIChgcmN1YCBpbnN0ZWFkIG9mIGByY3VfcmVjbGFpbWApIHRvIGNhbGN1bGF0ZSB0aGUgY29udGFpbmluZyBgYnBmX21lbV9jYWNoZWAgc3RydWN0dXJlIHBvaW50ZXIuIFRoaXMgaW50cm9kdWNlcyBhIHBvaW50ZXIgYXJpdGhtZXRpYyBlcnJvci4gVGhlIGBjYCBwb2ludGVyIHdpbGwgYmUgY2FsY3VsYXRlZCBpbmNvcnJlY3RseSwgcG9pbnRpbmcgdG8gYW4gb2Zmc2V0IGZyb20gdGhlIGFjdHVhbCBgYnBmX21lbV9jYWNoZWAgc3RydWN0LiBUaGVuLCBhbnkgYWNjZXNzIHRvIGBjLSZndDt3YWl0aW5nX2Zvcl9yZWNsYWltX2dwYCB3aWxsIGJlIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIGlmIHRoZSBvZmZzZXQgbGFuZHMgb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSBzdHJ1Y3QsIG9yIGEgdHlwZSBjb25mdXNpb24gaWYgaXQgZW5kcyB1cCByZWFkaW5nIG90aGVyIGZpZWxkcy4gQm90aCBzY2VuYXJpb3Mgd2lsbCBjYXVzZSBhIGNyYXNoLCBhbmQgYm90aCBhcmUgZWFzaWx5IGRldGVjdGFibGUgYnkgS0FTQU4uCgpJJiMzOTttIHZlcmlmeWluZyB0aGUgb2Zmc2V0cyBpbiB0aGUgc3RydWN0IHRvIGNhbGN1bGF0ZSB0aGUgZXhhY3QgZXJyb3IuIExvb2tpbmcgYXQgdGhlIHN0cnVjdCBsYXlvdXQsIGByY3VgIGNvbWVzIGJlZm9yZSBgcmN1X3JlY2xhaW1gLiBUaGUgYHNoaWZ0YCB3aWxsIGJlIGBvZmZzZXRvZihyY3VfcmVjbGFpbSkgLSBvZmZzZXRvZihyY3UpYCB3aGljaCBpcyBhIHBvc2l0aXZlIG9mZnNldC4gVGhlIGNhbGN1bGF0aW9uIG9mIGBjLSZndDt3YWl0aW5nX2Zvcl9yZWNsYWltX2dwYCB3aWxsIHJlYWQgYGFjdHVhbF9jICYjNDM7IHNoaWZ0ICYjNDM7IG9mZnNldG9mKHdhaXRpbmdfZm9yX3JlY2xhaW1fZ3ApYC4gU2luY2UgYHdhaXRpbmdfZm9yX3JlY2xhaW1fZ3BgIGlzIGltbWVkaWF0ZWx5IGJlZm9yZSBgcmN1YCBpbiB0aGUgc3RydWN0dXJlLCB0aGlzIGlzIGRlZmluaXRlbHkgb3V0IG9mIGJvdW5kcy4gVGhlIG9mZnNldCBpcyAxNiBieXRlcywgYW5kIGB3YWl0aW5nX2Zvcl9yZWNsYWltX2dwYCBpcyBhdCBvZmZzZXQgLTgsIHNvIHdlIGFyZSByZWFkaW5nIDggYnl0ZXMgaW50byB0aGUgYHJjdWAgc3RydWN0LiBUaGUgY29kZSB3aWxsIHJlYWQgdGhlIGBmdW5jYCBmaWVsZCBvZiBgcmN1YCBhcyBgd2FpdGluZ19mb3JfcmVjbGFpbV9ncGAuIFRoZW4gaXQgY2FsbHMgYGZyZWVfYWxsYCwgcGFzc2luZyB0aGlzIHdyb25nIHBvaW50ZXIgYXMgYW4gYGxsaXN0X25vZGVgLiBUaGlzIHdpbGwgcmVzdWx0IGluIGFuIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBhIGNyYXNoIGJlY2F1c2UgdGhlIGBmdW5jYCBmaWVsZCBpcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIGFuZCB0aGUgYGZyZWVfYWxsYCBmdW5jdGlvbiBpdGVyYXRlcyBvdmVyIHRoZSBgbGxpc3Rfbm9kZWAsIHRyeWluZyB0byByZWFkIGEgZnVuY3Rpb24gcG9pbnRlciBhcyBhIGxpbmtlZC1saXN0IG5vZGUuCgpUaGlzIGlzbiYjMzk7dCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBwcm9ibGVtOyBpdCYjMzk7cyBjbGFzc2ljIG1lbW9yeSBjb3JydXB0aW9uL2ludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlIGtlcm5lbCYjMzk7cyBzdGFuZGFyZCBkZWJ1Z2dpbmcgYW5kIEtBU0FOIHNob3VsZCBlYXNpbHkgY2F0Y2ggdGhpcyBraW5kIG9mIGlzc3VlLiBJdCBpcyBhIHBvaW50ZXIgYXJpdGhtZXRpYyBidWcgdGhhdCBsZWFkcyB0byBvdXQtb2YtYm91bmRzIHJlYWRzL2ludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlcmVmb3JlLCB0aGlzIGRvZXNuJiMzOTt0IG5lZWQgS01TQU4gYmVjYXVzZSBpdCYjMzk7cyBjYXVnaHQgYnkgS0FTQU4uIFRoZSByb290IGNhdXNlIGlzIGEgc2ltcGxlIGBjb250YWluZXJfb2ZgIG9mZnNldCBjYWxjdWxhdGlvbiBlcnJvci4gVGhlIGZpeCBpcyB0byB1c2UgYHJjdV9yZWNsYWltYCBpbiB0aGUgYGNvbnRhaW5lcl9vZmAgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHBvaW50ZXIgYXJpdGhtZXRpYyBidWcgaW4gYF9fZnJlZV9maW5hbF9yY3VgIGJ5IHVzaW5nIGBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9tZW1fY2FjaGUsIHJjdSlgIGluc3RlYWQgb2YgYHJjdV9yZWNsYWltYC4gVGhpcyBjYXVzZXMgdGhlIGBjYCBwb2ludGVyIHRvIGJlIHNoaWZ0ZWQgYnkgMTYgYnl0ZXMsIGxlYWRpbmcgdG8gdHlwZSBjb25mdXNpb24gd2hlcmUgYSBmdW5jdGlvbiBwb2ludGVyIGZyb20gYHN0cnVjdCByY3VfaGVhZGAgaXMgcmVhZCBhcyBhbiBgbGxpc3Rfbm9kZWAgcG9pbnRlciBhbmQgc3Vic2VxdWVudGx5IGRlcmVmZXJlbmNlZC4gVGhpcyB3aWxsIHJlc3VsdCBpbiBhbiBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBpbnZhbGlkIGFjY2Vzc2VzIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHBvaW50ZXIgYXJpdGhtZXRpYyBidWcgaW4gYF9fZnJlZV9maW5hbF9yY3VgIGJ5IHVzaW5nIGBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9tZW1fY2FjaGUsIHJjdSlgIGluc3RlYWQgb2YgYHJjdV9yZWNsYWltYC4gVGhpcyBjYXVzZXMgdGhlIGBjYCBwb2ludGVyIHRvIGJlIHNoaWZ0ZWQgYnkgMTYgYnl0ZXMsIGxlYWRpbmcgdG8gdHlwZSBjb25mdXNpb24gd2hlcmUgYSBmdW5jdGlvbiBwb2ludGVyIGZyb20gYHN0cnVjdCByY3VfaGVhZGAgaXMgcmVhZCBhcyBhbiBgbGxpc3Rfbm9kZWAgcG9pbnRlciBhbmQgc3Vic2VxdWVudGx5IGRlcmVmZXJlbmNlZC4gVGhpcyB3aWxsIHJlc3VsdCBpbiBhbiBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBpbnZhbGlkIGFjY2Vzc2VzIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo0ODozNi40NzI2NTU3NzlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDI5OTU0NzM4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9tZW1fYWxsb2NfaW5pdFwiLFxuICAgIFwiYnBmX21lbV9hbGxvY19kZXN0cm95XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcG9pbnRlciBhcml0aG1ldGljIGJ1ZyBpbiBgX19mcmVlX2ZpbmFsX3JjdWAgYnkgdXNpbmcgYGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSwgcmN1KWAgaW5zdGVhZCBvZiBgcmN1X3JlY2xhaW1gLiBUaGlzIGNhdXNlcyB0aGUgYGNgIHBvaW50ZXIgdG8gYmUgc2hpZnRlZCBieSAxNiBieXRlcywgbGVhZGluZyB0byB0eXBlIGNvbmZ1c2lvbiB3aGVyZSBhIGZ1bmN0aW9uIHBvaW50ZXIgZnJvbSBgc3RydWN0IHJjdV9oZWFkYCBpcyByZWFkIGFzIGFuIGBsbGlzdF9ub2RlYCBwb2ludGVyIGFuZCBzdWJzZXF1ZW50bHkgZGVyZWZlcmVuY2VkLiBUaGlzIHdpbGwgcmVzdWx0IGluIGFuIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIGludmFsaWQgYWNjZXNzZXMgYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yJ3MgUkNVIGZyZWVpbmcgbWVjaGFuaXNtIGJ5IGludHJvZHVjaW5nIGEgdHdvLXN0YWdlIFJDVSBjYWxsYmFjayBmb3IgYHJjdV90dHJhY2VgLiBJdCBkZWZlcnMgdGhlIGFjdHVhbCBtZW1vcnkgZnJlZWluZyB0byBgX19mcmVlX2ZpbmFsX3JjdWAgdmlhIGBjYWxsX3JjdWAgZnJvbSBgX19mcmVlX3JjdWAsIGVuc3VyaW5nIGJvdGggUkNVIFRhc2tzIFRyYWNlIGFuZCBub3JtYWwgUkNVIGdyYWNlIHBlcmlvZHMgaGF2ZSBwYXNzZWQuIFRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgbWVtb3J5IGFsbG9jYXRvciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjQ4OjM2LjQ3MjY2MDQyOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4MTU1OTYwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDAxMTgwZGJjNGQyZDI5MTFiM2NjNWQ5N2ZjNjg2N2VkNTQ1MjM0MzFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTE6NDg6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9tZW1hbGxvYy5jIGIva2VybmVsL2JwZi9tZW1hbGxvYy5jXFxuaW5kZXggZTk2NjJkYjcxOThmZS4uZmIxZTczM2JmYjgyOSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL21lbWFsbG9jLmNcXG4rKysgYi9rZXJuZWwvYnBmL21lbWFsbG9jLmNcXG5AQCAtMTEwLDcgKzExMCw5IEBAIHN0cnVjdCBicGZfbWVtX2NhY2hlIHtcXG4gXFx0c3RydWN0IGxsaXN0X25vZGUgKmZyZWVfYnlfcmN1X3RhaWw7XFxuIFxcdHN0cnVjdCBsbGlzdF9oZWFkIHdhaXRpbmdfZm9yX2dwO1xcbiBcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqd2FpdGluZ19mb3JfZ3BfdGFpbDtcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKndhaXRpbmdfZm9yX3JlY2xhaW1fZ3A7XFxuIFxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuK1xcdHN0cnVjdCByY3VfaGVhZCByY3VfcmVjbGFpbTtcXG4gXFx0YXRvbWljX3QgY2FsbF9yY3VfaW5fcHJvZ3Jlc3M7XFxuIFxcdHN0cnVjdCBsbGlzdF9oZWFkIGZyZWVfbGxpc3RfZXh0cmFfcmN1O1xcbiBcXG5AQCAtMjc2LDEyICsyNzgsMjggQEAgc3RhdGljIGludCBmcmVlX2FsbChzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSwgYm9vbCBwZXJcXG4gXFx0cmV0dXJuIGNudDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgX19mcmVlX2ZpbmFsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9tZW1fY2FjaGUgKmMgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9tZW1fY2FjaGUsIHJjdSk7XFxuK1xcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUgPSBjLVxcdTAwM2V3YWl0aW5nX2Zvcl9yZWNsYWltX2dwO1xcbitcXG4rXFx0Yy1cXHUwMDNld2FpdGluZ19mb3JfcmVjbGFpbV9ncCA9IE5VTEw7XFxuK1xcdGZyZWVfYWxsKGMsIGxsbm9kZSwgISFjLVxcdTAwM2VwZXJjcHVfc2l6ZSk7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNmMtXFx1MDAzZWNhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcywgMCk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIF9fZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfbWVtX2NhY2hlICpjID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBicGZfbWVtX2NhY2hlLCByY3VfdHRyYWNlKTtcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNmMtXFx1MDAzZXdhaXRpbmdfZm9yX2dwX3R0cmFjZSk7XFxuIFxcbi1cXHRmcmVlX2FsbChjLCBsbGlzdF9kZWxfYWxsKFxcdTAwMjZjLVxcdTAwM2V3YWl0aW5nX2Zvcl9ncF90dHJhY2UpLCAhIWMtXFx1MDAzZXBlcmNwdV9zaXplKTtcXG4tXFx0YXRvbWljX3NldChcXHUwMDI2Yy1cXHUwMDNlY2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzLCAwKTtcXG4rXFx0aWYgKCFsbG5vZGUpIHtcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2Yy1cXHUwMDNlY2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzLCAwKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRjLVxcdTAwM2V3YWl0aW5nX2Zvcl9yZWNsYWltX2dwID0gbGxub2RlO1xcbitcXHRjYWxsX3JjdShcXHUwMDI2Yy1cXHUwMDNlcmN1X3JlY2xhaW0sIF9fZnJlZV9maW5hbF9yY3UpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBlbnF1ZV90b19mcmVlKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCB2b2lkICpvYmopXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjQ4OjM3Ljk1NTE3NzkyNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ2NjgxMzE2NDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX21lbV9hbGxvY19pbml0XCIsXG4gICAgXCJicGZfbWVtX2FsbG9jX2Rlc3Ryb3lcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3IncyBSQ1UgZnJlZWluZyBtZWNoYW5pc20gYnkgaW50cm9kdWNpbmcgYSB0d28tc3RhZ2UgUkNVIGNhbGxiYWNrIGZvciBgcmN1X3R0cmFjZWAuIEl0IGRlZmVycyB0aGUgYWN0dWFsIG1lbW9yeSBmcmVlaW5nIHRvIGBfX2ZyZWVfZmluYWxfcmN1YCB2aWEgYGNhbGxfcmN1YCBmcm9tIGBfX2ZyZWVfcmN1YCwgZW5zdXJpbmcgYm90aCBSQ1UgVGFza3MgVHJhY2UgYW5kIG5vcm1hbCBSQ1UgZ3JhY2UgcGVyaW9kcyBoYXZlIHBhc3NlZC4gVGhpcyBpcyBhIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDExODBkYmM0ZDJkMjkxMWIzY2M1ZDk3ZmM2ODY3ZWQ1NDUyMzQzMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDExOjQ4OjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9tZW1hbGxvYy5jIGIva2VybmVsL2JwZi9tZW1hbGxvYy5jXG5pbmRleCBlOTY2MmRiNzE5OGZlLi5mYjFlNzMzYmZiODI5IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9tZW1hbGxvYy5jXG4rKysgYi9rZXJuZWwvYnBmL21lbWFsbG9jLmNcbkBAIC0xMTAsNyArMTEwLDkgQEAgc3RydWN0IGJwZl9tZW1fY2FjaGUge1xuIFx0c3RydWN0IGxsaXN0X25vZGUgKmZyZWVfYnlfcmN1X3RhaWw7XG4gXHRzdHJ1Y3QgbGxpc3RfaGVhZCB3YWl0aW5nX2Zvcl9ncDtcbiBcdHN0cnVjdCBsbGlzdF9ub2RlICp3YWl0aW5nX2Zvcl9ncF90YWlsO1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKndhaXRpbmdfZm9yX3JlY2xhaW1fZ3A7XG4gXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuK1x0c3RydWN0IHJjdV9oZWFkIHJjdV9yZWNsYWltO1xuIFx0YXRvbWljX3QgY2FsbF9yY3VfaW5fcHJvZ3Jlc3M7XG4gXHRzdHJ1Y3QgbGxpc3RfaGVhZCBmcmVlX2xsaXN0X2V4dHJhX3JjdTtcbiBcbkBAIC0yNzYsMTIgKzI3OCwyOCBAQCBzdGF0aWMgaW50IGZyZWVfYWxsKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCBzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlLCBib29sIHBlclxuIFx0cmV0dXJuIGNudDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgX19mcmVlX2ZpbmFsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4re1xuK1x0c3RydWN0IGJwZl9tZW1fY2FjaGUgKmMgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9tZW1fY2FjaGUsIHJjdSk7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlID0gYy1cdTAwM2V3YWl0aW5nX2Zvcl9yZWNsYWltX2dwO1xuK1xuK1x0Yy1cdTAwM2V3YWl0aW5nX2Zvcl9yZWNsYWltX2dwID0gTlVMTDtcbitcdGZyZWVfYWxsKGMsIGxsbm9kZSwgISFjLVx1MDAzZXBlcmNwdV9zaXplKTtcbitcdGF0b21pY19zZXQoXHUwMDI2Yy1cdTAwM2VjYWxsX3JjdV90dHJhY2VfaW5fcHJvZ3Jlc3MsIDApO1xuK31cbitcbiBzdGF0aWMgdm9pZCBfX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbiB7XG4gXHRzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSwgcmN1X3R0cmFjZSk7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZjLVx1MDAzZXdhaXRpbmdfZm9yX2dwX3R0cmFjZSk7XG4gXG4tXHRmcmVlX2FsbChjLCBsbGlzdF9kZWxfYWxsKFx1MDAyNmMtXHUwMDNld2FpdGluZ19mb3JfZ3BfdHRyYWNlKSwgISFjLVx1MDAzZXBlcmNwdV9zaXplKTtcbi1cdGF0b21pY19zZXQoXHUwMDI2Yy1cdTAwM2VjYWxsX3JjdV90dHJhY2VfaW5fcHJvZ3Jlc3MsIDApO1xuK1x0aWYgKCFsbG5vZGUpIHtcbitcdFx0YXRvbWljX3NldChcdTAwMjZjLVx1MDAzZWNhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcywgMCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGMtXHUwMDNld2FpdGluZ19mb3JfcmVjbGFpbV9ncCA9IGxsbm9kZTtcbitcdGNhbGxfcmN1KFx1MDAyNmMtXHUwMDNlcmN1X3JlY2xhaW0sIF9fZnJlZV9maW5hbF9yY3UpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBlbnF1ZV90b19mcmVlKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCB2b2lkICpvYmopXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo0ODozNy45NTUxNzk5MjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjgzMzMzNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUG90ZW50aWFsOiBCUEYgTWVtb3J5IEFsbG9jYXRvciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCdzIG1lc3Npbmcgd2l0aCB0aGUgUkNVIGZyZWVpbmcgaW4gdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yLCBzcGVjaWZpY2FsbHkgYGtlcm5lbC9icGYvbWVtYWxsb2MuY2AuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IGFueSBjb3JlIG1lbW9yeSBhbGxvY2F0b3IgY2hhbmdlcyBhcmUgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cywgc28gbGV0J3MgZGlnIGluLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgYWRkaW5nIGB3YWl0aW5nX2Zvcl9yZWNsYWltX2dwYCBhbmQgYHJjdV9yZWNsYWltYCB0byB0aGUgYGJwZl9tZW1fY2FjaGVgIHN0cnVjdCwgd2hpY2ggaXMgaW1tZWRpYXRlbHkgZ3JhYmJpbmcgbXkgYXR0ZW50aW9uLiBUaGV5J3JlIGRlZmVycmluZyB0aGUgYWN0dWFsIGZyZWVpbmcgdG8gYF9fZnJlZV9maW5hbF9yY3VgIHRocm91Z2ggYGNhbGxfcmN1YCwgd2hpY2ggaXMgYSBjbGFzc2ljIFJDVSBwYXR0ZXJuLlxuXG5UaGUgbWFpbiBmdW5jdGlvbnMgY2hhbmdlZCBhcmUgYF9fZnJlZV9yY3VgIGFuZCBgX19mcmVlX2ZpbmFsX3JjdWAuIFRoZXkncmUgYm90aCBpbiB0aGUgc2FtZSBmaWxlLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCBtZSBxdWlja2x5IGNoZWNrIGlmIGBfX2ZyZWVfcmN1YCBpcyBzdGF0aWMg4oCTIHllcywgaXQgaXMuIEJ1dCwgd2FpdCBhIG1pbnV0ZS4uLiBgX19mcmVlX3JjdWAgaXMgYmVpbmcgdXNlZCBhcyBhIGNhbGxiYWNrLCB3aGljaCBtZWFucyBpdOKAmXMgZXhwb3NlZCwgaW4gYSBzZW5zZSwgYXMgYSBmdW5jdGlvbiBwb2ludGVyLiBUaGlzIGFjdHVhbGx5IG9wZW5zIHVwIHRoZSBhdHRhY2sgc3VyZmFjZSBhIGJpdCBtb3JlLCBlc3BlY2lhbGx5IHNpbmNlIGl0J3MgZ29pbmcgdGhyb3VnaCBgY2FsbF9yY3VfdGFza3NfdHJhY2VgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBhY2NvcmRpbmcgdG8gbXkgcmVjb2xsZWN0aW9uLiBCZXR0ZXIgYmUgdGhvcm91Z2ggaGVyZSwganVzdCB0byBtYWtlIHN1cmUsIGxldCBtZSBncmVwIGZvciBgX19mcmVlX3JjdWAgd2l0aGluIGBrZXJuZWwvYnBmL21lbWFsbG9jLmNgLiBUaGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIHByaW9yaXRpemUgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo0ODo0NC4yMzg1MTYwMjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNjg5MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZnJlZV9yY3VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9tZW1hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvbWVtYWxsb2MuYz0yODE9c3RhdGljIHZvaWQgX19mcmVlX2ZpbmFsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMjkwLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzoyOTE6c3RhdGljIHZvaWQgX19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTI5Mi17XFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9MzE1PXN0YXRpYyB2b2lkIGRvX2NhbGxfcmN1X3R0cmFjZShzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYylcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0zMzEtXFx0aWYgKHVubGlrZWx5KFJFQURfT05DRShjLVxcdTAwM2VkcmFpbmluZykpKSB7XFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjMzMjpcXHRcXHRfX2ZyZWVfcmN1KFxcdTAwMjZjLVxcdTAwM2VyY3VfdHRyYWNlKTtcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMzMzLVxcdFxcdHJldHVybjtcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0zMzgtXFx0ICogUkNVIFRhc2tzIFRyYWNlIGdyYWNlIHBlcmlvZCBpbXBsaWVzIFJDVSBncmFjZSBwZXJpb2QsIHNvIHBhc3NcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6MzM5OlxcdCAqIF9fZnJlZV9yY3UgZGlyZWN0bHkgYXMgdGhlIGNhbGxiYWNrLlxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0zNDAtXFx0ICovXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjM0MTpcXHRjYWxsX3JjdV90YXNrc190cmFjZShcXHUwMDI2Yy1cXHUwMDNlcmN1X3R0cmFjZSwgX19mcmVlX3JjdSk7XFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTM0Mi19XFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9NzA0PXN0YXRpYyB2b2lkIGZyZWVfbWVtX2FsbG9jKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSlcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy03MTEtXFx0ICogYnV0IHJjdV9iYXJyaWVyX3Rhc2tzX3RyYWNlKCkgYW5kIHJjdV9iYXJyaWVyKCkgYmVsb3cgYXJlIG9ubHkgdXNlZFxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo3MTI6XFx0ICogdG8gd2FpdCBmb3IgdGhlIHBlbmRpbmcgX19mcmVlX2J5X3JjdSgpLCBhbmQgX19mcmVlX3JjdSgpLiBSQ1UgVGFza3NcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NzEzOlxcdCAqIFRyYWNlIGdyYWNlIHBlcmlvZCBpbXBsaWVzIFJDVSBncmFjZSBwZXJpb2QsIHNvIGFsbCBfX2ZyZWVfcmN1IGRvbid0XFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTcxNC1cXHQgKiBuZWVkIGV4dHJhIGNhbGxfcmN1KCkgKGFuZCB0aHVzIGV4dHJhIHJjdV9iYXJyaWVyKCkgaGVyZSkuXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNzE2LVxcdHJjdV9iYXJyaWVyKCk7IC8qIHdhaXQgZm9yIF9fZnJlZV9ieV9yY3UgKi9cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NzE3OlxcdHJjdV9iYXJyaWVyX3Rhc2tzX3RyYWNlKCk7IC8qIHdhaXQgZm9yIF9fZnJlZV9yY3UgKi9cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNzE4LVxcdGZyZWVfbWVtX2FsbG9jX25vX2JhcnJpZXIobWEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo0ODo0NC4zNDAyMTAwODNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjk4NzA4OTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgTWVtb3J5IEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEknbSB0aGlua2luZywgdGhlc2UgZnVuY3Rpb25zLCBiZWluZyBzdGF0aWMsIHRoZXkncmUgbm90IGdvaW5nIHRvIGJlIHBhcnRpY3VsYXJseSBoZWxwZnVsIGFzIGRpcmVjdCBmb2N1cyBzeW1ib2xzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBwcm9jZXNzZXMgd2l0aGluIHRoZSBCUEYgc3lzdGVtLlxuXG5SaWdodCwgbGV0J3Mgc2VlLi4uIEkndmUgZ290IGBicGZfbWVtX2FsbG9jYCwgYGJwZl9tZW1fZnJlZWAsIGBicGZfbWVtX2NhY2hlX2FsbG9jYCwgYW5kIGBicGZfbWVtX2NhY2hlX2ZyZWVgLiBUaG9zZSBmZWVsIGxpa2UgdGhlIGtleSBmdW5jdGlvbnMgdG8gaW52ZXN0aWdhdGUuXG5cbkknbGwgZGl2ZSBpbnRvIGBrZXJuZWwvYnBmL21lbWFsbG9jLmNgIG5vdy4gVGhlIGdvYWwgaXMgdG8gc2VlIHdoaWNoIGZ1bmN0aW9ucywgaWYgYW55LCBhcmUgZXhwb3J0ZWQgb3IgKm5vdCogZGVjbGFyZWQgc3RhdGljIHdpdGhpbiB0aGF0IGZpbGUuIFRob3NlIGFyZSB0aGUgb25lcyBJIHNob3VsZCBwYXkgYXR0ZW50aW9uIHRvLCBhcyB0aGV5IHJlcHJlc2VudCB0aGUgYWNjZXNzaWJsZSBpbnRlcmZhY2VzIHRvIHRoaXMgcGFydCBvZiB0aGUgQlBGIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhhdCBzaG91bGQgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyB0aGlzIGNvbXBvbmVudCBpbnRlZ3JhdGVzIGludG8gdGhlIHdpZGVyIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzczMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjQ4OjQ5LjYzODkyMjc4OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzM1Njk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBicGZfbWVtX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL21lbWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9tZW1hbGxvYy5jPTcyOT1zdGF0aWMgdm9pZCBkZXN0cm95X21lbV9hbGxvYyhzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCByY3VfaW5fcHJvZ3Jlc3MpXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNzUzLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo3NTQ6dm9pZCBicGZfbWVtX2FsbG9jX2Rlc3Ryb3koc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy03NTUte1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTk2Nz12b2lkIG5vdHJhY2UgYnBmX21lbV9jYWNoZV9mcmVlX3JjdShzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIHZvaWQgKnB0cilcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05ODQtICovXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjk4NTp2b2lkIGJwZl9tZW1fY2FjaGVfcmF3X2ZyZWUodm9pZCAqcHRyKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05ODYte1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTEwMjA9aW50IGJwZl9tZW1fYWxsb2NfY2hlY2tfc2l6ZShib29sIHBlcmNwdSwgc2l6ZV90IHNpemUpXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTAyOS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6MTAzMDp2b2lkIGJwZl9tZW1fYWxsb2Nfc2V0X2R0b3Ioc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCB2b2lkICgqZHRvcikodm9pZCAqb2JqLCB2b2lkICpjdHgpLFxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0xMDMxLVxcdFxcdFxcdCAgICB2b2lkICgqZHRvcl9jdHhfZnJlZSkodm9pZCAqY3R4KSwgdm9pZCAqY3R4KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo0ODo0OS43MjIyODkzMjhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODI0NDQxODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKk1lbW9yeSBNYW5hZ2VtZW50IERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgb3IgbWlzdXNlIGlzc3VlIGluIHRoZSBCUEYgY29kZSwgYW5kIHRoZSBmaXJzdCBwbGFjZSBteSBicmFpbiBuYXR1cmFsbHkgZ29lcyBpcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHZlcmlmeSBob3cgYHZvaWQgYnBmX21lbV9mcmVlYCBhbmQgYHZvaWQgYnBmX21lbV9hbGxvY2AgYXJlIGJlaW5nIHVzZWQuIEFyZSB0aGV5IGJlaW5nIGNhbGxlZCBzeW1tZXRyaWNhbGx5PyBBcmUgdGhlcmUgcG90ZW50aWFsIHNjZW5hcmlvcyB3aGVyZSBhIGJsb2NrIGlzIGFsbG9jYXRlZCBidXQgbmV2ZXIgZnJlZWQ/IE9yLCBjb252ZXJzZWx5LCBpcyBzb21ldGhpbmcgYmVpbmcgZnJlZWQgdHdpY2U/IFRoZSBkZXZpbCwgYXMgYWx3YXlzLCBpcyBpbiB0aGUgZGV0YWlscywgc28gSSBuZWVkIHRvIGNhcmVmdWxseSB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGhzIHRoYXQgaW52b2x2ZSB0aGVzZSBmdW5jdGlvbnMgYW5kIGxvb2sgZm9yIGFueSBhbm9tYWxpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGVzZSBhcmUgb3BlcmF0aW5nIGFzIGV4cGVjdGVkLCBvciB0aGF0IHRoZXkgYXJlIG9wZXJhdGluZyBhcyBkb2N1bWVudGVkLiBMZXQncyBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQzMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjQ4OjU1LjU0NjczNDIwNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDc5MDQxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBicGZfbWVtX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL21lbWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9tZW1hbGxvYy5jPTcyOT1zdGF0aWMgdm9pZCBkZXN0cm95X21lbV9hbGxvYyhzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCByY3VfaW5fcHJvZ3Jlc3MpXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNzUzLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo3NTQ6dm9pZCBicGZfbWVtX2FsbG9jX2Rlc3Ryb3koc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy03NTUte1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTk2Nz12b2lkIG5vdHJhY2UgYnBmX21lbV9jYWNoZV9mcmVlX3JjdShzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIHZvaWQgKnB0cilcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05ODQtICovXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjk4NTp2b2lkIGJwZl9tZW1fY2FjaGVfcmF3X2ZyZWUodm9pZCAqcHRyKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05ODYte1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTEwMjA9aW50IGJwZl9tZW1fYWxsb2NfY2hlY2tfc2l6ZShib29sIHBlcmNwdSwgc2l6ZV90IHNpemUpXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTAyOS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6MTAzMDp2b2lkIGJwZl9tZW1fYWxsb2Nfc2V0X2R0b3Ioc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCB2b2lkICgqZHRvcikodm9pZCAqb2JqLCB2b2lkICpjdHgpLFxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0xMDMxLVxcdFxcdFxcdCAgICB2b2lkICgqZHRvcl9jdHhfZnJlZSkodm9pZCAqY3R4KSwgdm9pZCAqY3R4KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo0ODo1NS42Mjc1Mjk5NDRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTUzMzUzNjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgZGVidWdnaW5nIG9yIHBlcmZvcm1hbmNlIGFuYWx5c2lzOlxuXG4qKkludmVzdGlnYXRpbmcgYSBLZXJuZWwgTWVtb3J5IFJlbGVhc2UgUGF0aCoqXG5cbkhtbSwgaG9sZCBvbiBhIHNlY29uZC4gSSBqdXN0IHNhdyB0aGF0IGBicGZfbWVtX2NhY2hlX2ZyZWVfcmN1YCBpcyBtYXJrZWQgYXMgYG5vdHJhY2VgLiBUaGF0J3MgaW1wb3J0YW50LiBJdCBtZWFucyB0cmFjaW5nIHRvb2xzIGFyZSBkZWxpYmVyYXRlbHkgc2tpcHBpbmcgaXQsIHdoaWNoIHVzdWFsbHkgaW1wbGllcyB0aGF0IGl0J3MgYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBwYXRoIHRoYXQgdGhleSBkb24ndCB3YW50IHRvIGludGVyZmVyZSB3aXRoLiBUaGF0J3MgYSByZWQgZmxhZy4gSWYgdHJhY2luZyBpcyBiZWluZyBzdXBwcmVzc2VkLCB0aGF0IHRlbGxzIG1lIHRoaXMgcmVsZWFzZSBwYXRoIGlzICpmYXN0KiwgYW5kICpmcmVxdWVudGx5KiBjYWxsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiAqYmVmb3JlKiB0aGF0IHBvaW50LiBTbywgbm93LCBsZXQncyBzdGVwIGJhY2sgYW5kIHNlZSB3aGF0J3MgY2FsbGluZyBgYnBmX21lbV9jYWNoZV9mcmVlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgZmxvdyBiZWZvcmUgSSBjYW4gcHJvcGVybHkgZXZhbHVhdGUgdGhpcyBgcmN1YCB2YXJpYW50LiBMZXQncyBzZWUgd2hhdCBgYnBmX21lbV9jYWNoZV9mcmVlYCBpcyBkb2luZywgYW5kIHdoYXQgY29kZSBpcyAqYWN0dWFsbHkqIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NDg6NTkuNTgwODg2OTYxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE3OTA2MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnZvaWQgbm90cmFjZSBicGZfbWVtX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL21lbWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9tZW1hbGxvYy5jPTkwMT12b2lkIG5vdHJhY2UgKmJwZl9tZW1fYWxsb2Moc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05MTgtXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjkxOTp2b2lkIG5vdHJhY2UgYnBmX21lbV9mcmVlKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgdm9pZCAqcHRyKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05MjAte1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTkzNC1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6OTM1OnZvaWQgbm90cmFjZSBicGZfbWVtX2ZyZWVfcmN1KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgdm9pZCAqcHRyKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05MzYte1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTk1MT12b2lkIG5vdHJhY2UgKmJwZl9tZW1fY2FjaGVfYWxsb2Moc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hKVxcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk1OC1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6OTU5OnZvaWQgbm90cmFjZSBicGZfbWVtX2NhY2hlX2ZyZWUoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCB2b2lkICpwdHIpXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk2MC17XFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTY2LVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo5Njc6dm9pZCBub3RyYWNlIGJwZl9tZW1fY2FjaGVfZnJlZV9yY3Uoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCB2b2lkICpwdHIpXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk2OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjQ4OjU5Ljc3MjY4MTY0OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjU4MzQ4NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkFzc2Vzc2luZyBCUEYgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb25zKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIEJQRiBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnM6IGBicGZfbWVtX2ZyZWVgLCBgYnBmX21lbV9mcmVlX3JjdWAsIGBicGZfbWVtX2NhY2hlX2ZyZWVgLCBhbmQgYGJwZl9tZW1fY2FjaGVfZnJlZV9yY3VgLiBUaGV5J3JlIGFsbCBtYXJrZWQgYXMgYG5vdHJhY2VgLiBUaGF0J3MgaW1wb3J0YW50LiBJdCBtZWFucyB0aGV5J3JlICpub3QqIGNvbnNpZGVyZWQgdG8gYmUgb24gYSBwYXJ0aWN1bGFybHkgaG90IHBhdGgsIHdoaWNoIGhhcyBpbXBsaWNhdGlvbnMgZm9yIGhvdyBhZ2dyZXNzaXZlbHkgd2UgbWlnaHQgb3B0aW1pemUgb3IgYW5hbHl6ZSB0aGVtLiBUaGF0J3MgZ29vZCB0byBrbm93LCBhbmQgaXQgc3VnZ2VzdHMgdGhleSdyZSBsaWtlbHkgbm90IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJdCBtZWFucyB0aGF0IHRyYWNpbmcgdGhlbSBpc24ndCBnb2luZyB0byBiZSB1c2VmdWwgaW4gbW9zdCBjYXNlcy5cblxuQnV0IEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBiaWcgcGljdHVyZS4gQXJlIHRoZXJlICphbnkqIG5vbi1ob3QtcGF0aCBmdW5jdGlvbnMgaW4gdGhhdCBzZXQ/IEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZSBcIndvcmtcIiBpcyBiZWluZyBkb25lLlxuXG5UaGVuIEkgc2VlIGBicGZfbWVtX2FsbG9jX2luaXRgLCBgYnBmX21lbV9hbGxvY19kZXN0cm95YC4gVGhvc2UgYXJlIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gZnVuY3Rpb25zLiBUaGV5J3JlIGxpa2VseSBub3QgYXMgcGVyZm9ybWFuY2UtY3JpdGljYWwgYXMgdGhlIGFsbG9jYXRpb24vZnJlZSBjYWxscy4gSG93ZXZlciwgdGhhdCBpc24ndCByZWFsbHkgdGhlIHdob2xlIHN0b3J5LiBUaGUgbGlmZXRpbWUgb2YgbWVtb3J5IGFsbG9jYXRlZCBieSB0aGUgQlBGIHByb2dyYW0gbmVlZHMgdG8gYmUgdW5kZXJzdG9vZC5cblxuU28sIEkgbmVlZCB0byBsb29rIGNsb3NlciBhdCB3aGF0IHRob3NlIGZ1bmN0aW9ucyAqZG8qLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGR1cmluZyBhbGxvY2F0aW9uLCB3aGF0IGRhdGEgc3RydWN0dXJlcyB0aGV5J3JlIG1hbmlwdWxhdGluZywgYW5kIHdoZXJlIHRoZSBwb3RlbnRpYWwgY29udGVudGlvbiBwb2ludHMgbWlnaHQgYmUsIGV2ZW4gaWYgaXQncyBub3QgYSAnaG90IHBhdGgnIGluIHRoZSBjbGFzc2ljIHNlbnNlLiBLbm93aW5nIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhvc2UgcG9pbnRzIGNhbiBiZXR0ZXIgaW5mb3JtIGFueSBmdXR1cmUgb3B0aW1pemF0aW9ucyBvciBhbmFseXNpcyBvZiB0aGVzZSBtZW1vcnkgbWFuYWdlbWVudCBwaWVjZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MjgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo0OTowNi4wMzEwMzM5MjhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDY4MzcxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IGJwZl9tZW1fYWxsb2NfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL21lbWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9tZW1hbGxvYy5jPTQ5OT1zdGF0aWMgdm9pZCBwcmVmaWxsX21lbV9jYWNoZShzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgaW50IGNwdSlcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy01MTktICovXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjUyMDppbnQgYnBmX21lbV9hbGxvY19pbml0KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgaW50IHNpemUsIGJvb2wgcGVyY3B1KVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy01MjEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo0OTowNi4xNzE3MjIyMjZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAwOTI0MTQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBNZW1vcnkgQWxsb2NhdG9yIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIFJDVSBmcmVlaW5nIG1lY2hhbmlzbSB3aXRoaW4gYGJwZl9tZW1fYWxsb2NgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgcmVkIGFsZXJ0LCBlc3BlY2lhbGx5IHNpbmNlIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBvbiBgX19mcmVlX3JjdWAgYW5kIGBfX2ZyZWVfZmluYWxfcmN1YC4gVGhpcyBpcyBhIGNvcmUgcGFydCBvZiB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgd2UgYWxsIGtub3cgaG93IHRob3NlIGNhbiBiZSB0cmlja3kuIEl0ICphYnNvbHV0ZWx5KiBuZWVkcyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uXG5cbk15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGRlc3RydWN0aW9uIGZ1bmN0aW9uczogYGJwZl9tZW1fYWxsb2NfaW5pdGAgYW5kIGBicGZfbWVtX2FsbG9jX2Rlc3Ryb3lgLiBUaGVzZSBhcmUgYWx3YXlzIGdvb2Qgc3RhcnRpbmcgcG9pbnRzIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBsaWZlY3ljbGUuIEFoLCBhbmQgd2FpdCBhIHNlY29uZCwgYGJwZl9tZW1fYWxsb2NfaW5pdGAgaXMgY2FsbGVkIGR1cmluZyBtYXAgY3JlYXRpb24uIFRoYXQncyBhIGdvb2QgY29ubmVjdGlvbiB0byByZW1lbWJlciBhcyBpdCBjb3VsZCBhZGQgc29tZSBpbnRlcmVzdGluZyBlZGdlLWNhc2VzIHRvIGJlIGF3YXJlIG9mLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHJlcXVpcmVkIGZvciB0aGlzIHRvIHdvcmsuXG5cbkFsc28sIGl0IGxvb2tzIGxpa2UgdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yIGlzIGNvbXBpbGVkIHdpdGggYENPTkZJR19CUEZfU1lTQ0FMTGAsIGNvbmZpcm1pbmcgdGhpcyBhcyBhIEJQRi1mb2N1c2VkIGFyZWEuIE5vdywgbGV0J3Mgc3RhcnQgcGxhbm5pbmcgdGhlIGZ1enppbmcgc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNDAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NDk6MTIuMTgwOTY2NjdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNjc5MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9iai1cXFxcJFxcXFwoQ09ORklHX0JQRl9TWVNDQUxMXFxcXCkuKm1lbWFsbG9jLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTE3PW9iai0kKENPTkZJR19CUEZfSklUKSArPSB0cmFtcG9saW5lLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnRmLm8gbWVtYWxsb2MubyBycXNwaW5sb2NrLm8gc3RyZWFtLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE5LWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjQ5OjEyLjI3MTY1MDA0OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjIzMDk3MTIyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgTWVtb3J5IEFsbG9jYXRvciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIHRoaXMgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSBhYm91dCBob3cgdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yIGhhbmRsZXMgZnJlZWluZyBtZW1vcnksIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBgcmN1X3R0cmFjZWAgZGF0YSBzdHJ1Y3R1cmUuIEl0J3MgdXNpbmcgdGhlIGBCUEZfU1lTQ0FMTGAgY29uZmlnLCBhcyBleHBlY3RlZC5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0aGlzIHR3by1zdGFnZSBSQ1UgZnJlZWluZyBtZWNoYW5pc20uIEluc3RlYWQgb2YgdGhlIHR5cGljYWwgc2luZ2xlIFJDVSBjYWxsYmFjaywgd2UncmUgbm93IGVtcGxveWluZyBgX19mcmVlX2ZpbmFsX3JjdWAuIFRoaXMgaXMgdHJpZ2dlcmVkIHZpYSBgY2FsbF9yY3VgIG9uIGBjLVx1MDAzZXJjdV9yZWNsYWltYCBmcm9tIGBfX2ZyZWVfcmN1YC4gVGhlIGNydWNpYWwgcGFydCBpcyB0aGF0IHRoaXMgYXBwcm9hY2ggZ3VhcmFudGVlcyBhIG1vcmUgcm9idXN0IGZyZWVpbmcgcHJvY2VzczsgaXQgd2FpdHMgZm9yICpib3RoKiB0aGUgUkNVIFRhc2tzIFRyYWNlIGdyYWNlIHBlcmlvZCAqYW5kKiB0aGUgcmVndWxhciBSQ1UgZ3JhY2UgcGVyaW9kIHRvIGNvbXBsZXRlIGJlZm9yZSBhY3R1YWxseSBmcmVlaW5nIHRoZSBtZW1vcnkuIFRoaXMgaXMgc21hcnQ7IGl0J3MgZGVzaWduZWQgdG8gbWl0aWdhdGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgZW5zdXJlIHRoZSBtZW1vcnkgaXMgdHJ1bHkgc2FmZSB0byByZWNsYWltLCBhdm9pZGluZyBhbnkgc3VidGxlIEJQRi1yZWxhdGVkIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gSXQncyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgQlBGIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS5cblxuR2l2ZW4gdGhpcywgbXkgaW5zdGluY3QgaXMgdG8gaW1tZWRpYXRlbHkgbGFiZWwgdGhpcyBhcyBgV29ydGhGdXp6aW5nPXRydWVgLiBBbnl0aW1lIHlvdSdyZSB0b3VjaGluZyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLCBlc3BlY2lhbGx5IHdpdGhpbiBhIGNyaXRpY2FsIHN1YnN5c3RlbSBsaWtlIEJQRiwgaXQgd2FycmFudHMgdGhvcm91Z2ggZnV6emluZy4gSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiB0aGUgYGJwZl9tZW1fYWxsb2NfaW5pdGAgYW5kIGBicGZfbWVtX2FsbG9jX2Rlc3Ryb3lgIGZ1bmN0aW9ucy4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgYW5kIGV4aXQgcG9pbnRzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudDsgZnV6emluZyB0aGVtIHdpbGwgZXhwb3NlIGFueSBmbGF3cyB0aGlzIG5ldyBtZWNoYW5pc20gbWlnaHQgaW50cm9kdWNlLiBJdCdzIGFsc28gaW1wb3J0YW50IHRvIGNvbmZpcm0gYEJQRl9TWVNDQUxMYCBpcyBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODc2LCJPdXRwdXRUb2tlbnMiOjE1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo0OToyNC41MDI2MjQ0NjRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM4NjYwNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX21lbV9hbGxvY19pbml0XCIsXG4gICAgXCJicGZfbWVtX2FsbG9jX2Rlc3Ryb3lcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3IncyBSQ1UgZnJlZWluZyBtZWNoYW5pc20gYnkgaW50cm9kdWNpbmcgYSB0d28tc3RhZ2UgUkNVIGNhbGxiYWNrIGZvciBgcmN1X3R0cmFjZWAuIEl0IGRlZmVycyB0aGUgYWN0dWFsIG1lbW9yeSBmcmVlaW5nIHRvIGBfX2ZyZWVfZmluYWxfcmN1YCB2aWEgYGNhbGxfcmN1YCBmcm9tIGBfX2ZyZWVfcmN1YCwgZW5zdXJpbmcgYm90aCBSQ1UgVGFza3MgVHJhY2UgYW5kIG5vcm1hbCBSQ1UgZ3JhY2UgcGVyaW9kcyBoYXZlIHBhc3NlZC4gVGhpcyBpcyBhIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9tZW1fYWxsb2NfaW5pdFwiLFxuICAgIFwiYnBmX21lbV9hbGxvY19kZXN0cm95XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yJ3MgUkNVIGZyZWVpbmcgbWVjaGFuaXNtIGJ5IGludHJvZHVjaW5nIGEgdHdvLXN0YWdlIFJDVSBjYWxsYmFjayBmb3IgYHJjdV90dHJhY2VgLiBJdCBkZWZlcnMgdGhlIGFjdHVhbCBtZW1vcnkgZnJlZWluZyB0byBgX19mcmVlX2ZpbmFsX3JjdWAgdmlhIGBjYWxsX3JjdWAgZnJvbSBgX19mcmVlX3JjdWAsIGVuc3VyaW5nIGJvdGggUkNVIFRhc2tzIFRyYWNlIGFuZCBub3JtYWwgUkNVIGdyYWNlIHBlcmlvZHMgaGF2ZSBwYXNzZWQuIFRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgbWVtb3J5IGFsbG9jYXRvciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjQ5OjI0LjYzNjQ5ODk2MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxMzU2OTI5NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo0OToyNC42MzcyNzQ2OTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjIxMzQ5MTMwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBwb2ludGVyIGFyaXRobWV0aWMgYnVnIGluIGBfX2ZyZWVfZmluYWxfcmN1YCBieSB1c2luZyBgY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBicGZfbWVtX2NhY2hlLCByY3UpYCBpbnN0ZWFkIG9mIGByY3VfcmVjbGFpbWAuIFRoaXMgY2F1c2VzIHRoZSBgY2AgcG9pbnRlciB0byBiZSBzaGlmdGVkIGJ5IDE2IGJ5dGVzLCBsZWFkaW5nIHRvIHR5cGUgY29uZnVzaW9uIHdoZXJlIGEgZnVuY3Rpb24gcG9pbnRlciBmcm9tIGBzdHJ1Y3QgcmN1X2hlYWRgIGlzIHJlYWQgYXMgYW4gYGxsaXN0X25vZGVgIHBvaW50ZXIgYW5kIHN1YnNlcXVlbnRseSBkZXJlZmVyZW5jZWQuIFRoaXMgd2lsbCByZXN1bHQgaW4gYW4gaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgaW52YWxpZCBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMTE4MGRiYzRkMmQyOTExYjNjYzVkOTdmYzY4NjdlZDU0NTIzNDMxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTE6NDg6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21lbWFsbG9jLmMgYi9rZXJuZWwvYnBmL21lbWFsbG9jLmNcbmluZGV4IGU5NjYyZGI3MTk4ZmUuLmZiMWU3MzNiZmI4MjkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL21lbWFsbG9jLmNcbisrKyBiL2tlcm5lbC9icGYvbWVtYWxsb2MuY1xuQEAgLTExMCw3ICsxMTAsOSBAQCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSB7XG4gXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqZnJlZV9ieV9yY3VfdGFpbDtcbiBcdHN0cnVjdCBsbGlzdF9oZWFkIHdhaXRpbmdfZm9yX2dwO1xuIFx0c3RydWN0IGxsaXN0X25vZGUgKndhaXRpbmdfZm9yX2dwX3RhaWw7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqd2FpdGluZ19mb3JfcmVjbGFpbV9ncDtcbiBcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4rXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1X3JlY2xhaW07XG4gXHRhdG9taWNfdCBjYWxsX3JjdV9pbl9wcm9ncmVzcztcbiBcdHN0cnVjdCBsbGlzdF9oZWFkIGZyZWVfbGxpc3RfZXh0cmFfcmN1O1xuIFxuQEAgLTI3NiwxMiArMjc4LDI4IEBAIHN0YXRpYyBpbnQgZnJlZV9hbGwoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMsIHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUsIGJvb2wgcGVyXG4gXHRyZXR1cm4gY250O1xuIH1cbiBcbitzdGF0aWMgdm9pZCBfX2ZyZWVfZmluYWxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbit7XG4rXHRzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSwgcmN1KTtcbitcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUgPSBjLVx1MDAzZXdhaXRpbmdfZm9yX3JlY2xhaW1fZ3A7XG4rXG4rXHRjLVx1MDAzZXdhaXRpbmdfZm9yX3JlY2xhaW1fZ3AgPSBOVUxMO1xuK1x0ZnJlZV9hbGwoYywgbGxub2RlLCAhIWMtXHUwMDNlcGVyY3B1X3NpemUpO1xuK1x0YXRvbWljX3NldChcdTAwMjZjLVx1MDAzZWNhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcywgMCk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIF9fZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuIHtcbiBcdHN0cnVjdCBicGZfbWVtX2NhY2hlICpjID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBicGZfbWVtX2NhY2hlLCByY3VfdHRyYWNlKTtcbitcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNmMtXHUwMDNld2FpdGluZ19mb3JfZ3BfdHRyYWNlKTtcbiBcbi1cdGZyZWVfYWxsKGMsIGxsaXN0X2RlbF9hbGwoXHUwMDI2Yy1cdTAwM2V3YWl0aW5nX2Zvcl9ncF90dHJhY2UpLCAhIWMtXHUwMDNlcGVyY3B1X3NpemUpO1xuLVx0YXRvbWljX3NldChcdTAwMjZjLVx1MDAzZWNhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcywgMCk7XG4rXHRpZiAoIWxsbm9kZSkge1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNmMtXHUwMDNlY2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzLCAwKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0Yy1cdTAwM2V3YWl0aW5nX2Zvcl9yZWNsYWltX2dwID0gbGxub2RlO1xuK1x0Y2FsbF9yY3UoXHUwMDI2Yy1cdTAwM2VyY3VfcmVjbGFpbSwgX19mcmVlX2ZpbmFsX3JjdSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGVucXVlX3RvX2ZyZWUoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMsIHZvaWQgKm9iailcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjQ5OjI0LjYzNzI3NjAxMloiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjEzNDg4MzM0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBicGZfbWVtX2NhY2hlIFJDVSBEZWZlcnJhbCBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGluIGBrZXJuZWwvYnBmL21lbWFsbG9jLmNgIGlzIGludHJvZHVjaW5nIFJDVSBkZWZlcnJhbCBmb3IgZnJlZWluZyBgYnBmX21lbV9jYWNoZWAgb2JqZWN0cy4gSXQncyBhZGRpbmcgYHJjdV9yZWNsYWltYCBhbmQgYHdhaXRpbmdfZm9yX3JlY2xhaW1fZ3BgIHRvIHRoZSBgYnBmX21lbV9jYWNoZWAgc3RydWN0dXJlIGFuZCB1c2luZyBgY2FsbF9yY3VgIHRvIGRlbGF5IHRoZSBhY3R1YWwgZnJlZWluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBjb25zaWRlciBpZiB0aGlzIGNvdWxkIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgYnV0IEkndmUgcXVpY2tseSBydWxlZCB0aGF0IG91dCDigJMgaXQncyBhbGwgYWJvdXQgZGVsYXlpbmcgZnJlZXMsIG5vdCBjcmVhdGluZyB1bmluaXRpYWxpemVkIHN0YXRlcy4gSWYgdGhlcmUncyBhIHByb2JsZW0sIGl0IHdpbGwgYmUgYSB1c2UtYWZ0ZXItZnJlZSAoS0FTQU4gd291bGQgY2F0Y2ggdGhhdCkgb3IgYSBtZW1vcnkgbGVhayAoa21lbWxlYWsgd2lsbCBzcG90IGl0KS5cblxuTm93LCBsZXQncyB6b29tIGluIG9uIHRoZSBjb2RlLiBJIHNlZSB0aGUgbmV3IGZpZWxkcyBpbiBgYnBmX21lbV9jYWNoZWAgYW5kIHRoZSBjcnVjaWFsIGNoYW5nZSB3aGVyZSBgX19mcmVlX3JjdWAgbm93IGRlZmVycyB0aGUgZnJlZSBieSBjYWxsaW5nIGBjYWxsX3JjdWAgd2l0aCBgX19mcmVlX2ZpbmFsX3JjdWAuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGxpZXMgaGVyZTogYGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSwgcmN1KWAgaXMgdXNlZCwgYnV0IHRoZSBgaGVhZGAgcGFzc2VkIHRvIGBjYWxsX3JjdWAgaXMgYFx1MDAyNmMtXHUwMDNlcmN1X3JlY2xhaW1gLiBUaGF0J3MgdGhlIGtleS5cblxuVGhpcyBtZWFucyB0aGF0IGBjb250YWluZXJfb2ZgIGlzIHVzaW5nIHRoZSAqd3JvbmcqIFJDVSBoZWFkIChgcmN1YCBpbnN0ZWFkIG9mIGByY3VfcmVjbGFpbWApIHRvIGNhbGN1bGF0ZSB0aGUgY29udGFpbmluZyBgYnBmX21lbV9jYWNoZWAgc3RydWN0dXJlIHBvaW50ZXIuIFRoaXMgaW50cm9kdWNlcyBhIHBvaW50ZXIgYXJpdGhtZXRpYyBlcnJvci4gVGhlIGBjYCBwb2ludGVyIHdpbGwgYmUgY2FsY3VsYXRlZCBpbmNvcnJlY3RseSwgcG9pbnRpbmcgdG8gYW4gb2Zmc2V0IGZyb20gdGhlIGFjdHVhbCBgYnBmX21lbV9jYWNoZWAgc3RydWN0LiBUaGVuLCBhbnkgYWNjZXNzIHRvIGBjLVx1MDAzZXdhaXRpbmdfZm9yX3JlY2xhaW1fZ3BgIHdpbGwgYmUgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaWYgdGhlIG9mZnNldCBsYW5kcyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIHN0cnVjdCwgb3IgYSB0eXBlIGNvbmZ1c2lvbiBpZiBpdCBlbmRzIHVwIHJlYWRpbmcgb3RoZXIgZmllbGRzLiBCb3RoIHNjZW5hcmlvcyB3aWxsIGNhdXNlIGEgY3Jhc2gsIGFuZCBib3RoIGFyZSBlYXNpbHkgZGV0ZWN0YWJsZSBieSBLQVNBTi5cblxuSSdtIHZlcmlmeWluZyB0aGUgb2Zmc2V0cyBpbiB0aGUgc3RydWN0IHRvIGNhbGN1bGF0ZSB0aGUgZXhhY3QgZXJyb3IuIExvb2tpbmcgYXQgdGhlIHN0cnVjdCBsYXlvdXQsIGByY3VgIGNvbWVzIGJlZm9yZSBgcmN1X3JlY2xhaW1gLiBUaGUgYHNoaWZ0YCB3aWxsIGJlIGBvZmZzZXRvZihyY3VfcmVjbGFpbSkgLSBvZmZzZXRvZihyY3UpYCB3aGljaCBpcyBhIHBvc2l0aXZlIG9mZnNldC4gVGhlIGNhbGN1bGF0aW9uIG9mIGBjLVx1MDAzZXdhaXRpbmdfZm9yX3JlY2xhaW1fZ3BgIHdpbGwgcmVhZCBgYWN0dWFsX2MgKyBzaGlmdCArIG9mZnNldG9mKHdhaXRpbmdfZm9yX3JlY2xhaW1fZ3ApYC4gU2luY2UgYHdhaXRpbmdfZm9yX3JlY2xhaW1fZ3BgIGlzIGltbWVkaWF0ZWx5IGJlZm9yZSBgcmN1YCBpbiB0aGUgc3RydWN0dXJlLCB0aGlzIGlzIGRlZmluaXRlbHkgb3V0IG9mIGJvdW5kcy4gVGhlIG9mZnNldCBpcyAxNiBieXRlcywgYW5kIGB3YWl0aW5nX2Zvcl9yZWNsYWltX2dwYCBpcyBhdCBvZmZzZXQgLTgsIHNvIHdlIGFyZSByZWFkaW5nIDggYnl0ZXMgaW50byB0aGUgYHJjdWAgc3RydWN0LiBUaGUgY29kZSB3aWxsIHJlYWQgdGhlIGBmdW5jYCBmaWVsZCBvZiBgcmN1YCBhcyBgd2FpdGluZ19mb3JfcmVjbGFpbV9ncGAuIFRoZW4gaXQgY2FsbHMgYGZyZWVfYWxsYCwgcGFzc2luZyB0aGlzIHdyb25nIHBvaW50ZXIgYXMgYW4gYGxsaXN0X25vZGVgLiBUaGlzIHdpbGwgcmVzdWx0IGluIGFuIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBhIGNyYXNoIGJlY2F1c2UgdGhlIGBmdW5jYCBmaWVsZCBpcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIGFuZCB0aGUgYGZyZWVfYWxsYCBmdW5jdGlvbiBpdGVyYXRlcyBvdmVyIHRoZSBgbGxpc3Rfbm9kZWAsIHRyeWluZyB0byByZWFkIGEgZnVuY3Rpb24gcG9pbnRlciBhcyBhIGxpbmtlZC1saXN0IG5vZGUuXG5cblRoaXMgaXNuJ3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbTsgaXQncyBjbGFzc2ljIG1lbW9yeSBjb3JydXB0aW9uL2ludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlIGtlcm5lbCdzIHN0YW5kYXJkIGRlYnVnZ2luZyBhbmQgS0FTQU4gc2hvdWxkIGVhc2lseSBjYXRjaCB0aGlzIGtpbmQgb2YgaXNzdWUuIEl0IGlzIGEgcG9pbnRlciBhcml0aG1ldGljIGJ1ZyB0aGF0IGxlYWRzIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMvaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGVyZWZvcmUsIHRoaXMgZG9lc24ndCBuZWVkIEtNU0FOIGJlY2F1c2UgaXQncyBjYXVnaHQgYnkgS0FTQU4uIFRoZSByb290IGNhdXNlIGlzIGEgc2ltcGxlIGBjb250YWluZXJfb2ZgIG9mZnNldCBjYWxjdWxhdGlvbiBlcnJvci4gVGhlIGZpeCBpcyB0byB1c2UgYHJjdV9yZWNsYWltYCBpbiB0aGUgYGNvbnRhaW5lcl9vZmAgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2MywiT3V0cHV0VG9rZW5zIjoxOTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NDk6NDYuNzcyMTYyMjE5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcG9pbnRlciBhcml0aG1ldGljIGJ1ZyBpbiBgX19mcmVlX2ZpbmFsX3JjdWAgYnkgdXNpbmcgYGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSwgcmN1KWAgaW5zdGVhZCBvZiBgcmN1X3JlY2xhaW1gLiBUaGlzIGNhdXNlcyB0aGUgYGNgIHBvaW50ZXIgdG8gYmUgc2hpZnRlZCBieSAxNiBieXRlcywgbGVhZGluZyB0byB0eXBlIGNvbmZ1c2lvbiB3aGVyZSBhIGZ1bmN0aW9uIHBvaW50ZXIgZnJvbSBgc3RydWN0IHJjdV9oZWFkYCBpcyByZWFkIGFzIGFuIGBsbGlzdF9ub2RlYCBwb2ludGVyIGFuZCBzdWJzZXF1ZW50bHkgZGVyZWZlcmVuY2VkLiBUaGlzIHdpbGwgcmVzdWx0IGluIGFuIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIGludmFsaWQgYWNjZXNzZXMgYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHBvaW50ZXIgYXJpdGhtZXRpYyBidWcgaW4gYF9fZnJlZV9maW5hbF9yY3VgIGJ5IHVzaW5nIGBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9tZW1fY2FjaGUsIHJjdSlgIGluc3RlYWQgb2YgYHJjdV9yZWNsYWltYC4gVGhpcyBjYXVzZXMgdGhlIGBjYCBwb2ludGVyIHRvIGJlIHNoaWZ0ZWQgYnkgMTYgYnl0ZXMsIGxlYWRpbmcgdG8gdHlwZSBjb25mdXNpb24gd2hlcmUgYSBmdW5jdGlvbiBwb2ludGVyIGZyb20gYHN0cnVjdCByY3VfaGVhZGAgaXMgcmVhZCBhcyBhbiBgbGxpc3Rfbm9kZWAgcG9pbnRlciBhbmQgc3Vic2VxdWVudGx5IGRlcmVmZXJlbmNlZC4gVGhpcyB3aWxsIHJlc3VsdCBpbiBhbiBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBpbnZhbGlkIGFjY2Vzc2VzIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkrfjr[1] Phase: Succeeded StartedAt: 2026-08-26 11:49:57 +0000 UTC FinishedAt: 2026-08-26 11:49:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrfjr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 11:49:57 +0000 UTC FinishedAt: 2026-08-26 11:49:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrfjr[2] Phase: Succeeded StartedAt: 2026-08-26 11:49:57 +0000 UTC FinishedAt: 2026-08-26 15:35:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-26 11:49:57 +0000 UTC FinishedAt: 2026-08-26 15:35:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-26 11:49:57 +0000 UTC FinishedAt: 2026-08-26 11:50:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-26 11:49:57 +0000 UTC FinishedAt: 2026-08-26 11:50:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowkrfjr/series-workflowkrfjr-convert-artifact-519627689/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-26 11:50:07 +0000 UTC FinishedAt: 2026-08-26 12:07:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-26 11:50:07 +0000 UTC FinishedAt: 2026-08-26 12:07:18 +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:*6a3e0123-b08d-459d-9068-7f1e60254ccd,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-workflowkrfjr/series-workflowkrfjr-convert-artifact-519627689/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": "10d9dee0-7b54-4689-b50d-e15c42cbd045", "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-workflowkrfjr/series-workflowkrfjr-build-action-401558535/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-26 11:50:07 +0000 UTC FinishedAt: 2026-08-26 12:07:08 +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:*6a3e0123-b08d-459d-9068-7f1e60254ccd,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-workflowkrfjr/series-workflowkrfjr-convert-artifact-519627689/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": "10d9dee0-7b54-4689-b50d-e15c42cbd045", "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-workflowkrfjr/series-workflowkrfjr-build-action-401558535/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-26 12:07:18 +0000 UTC FinishedAt: 2026-08-26 12:07:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-26 12:07:18 +0000 UTC FinishedAt: 2026-08-26 12:07:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-26 12:07:18 +0000 UTC FinishedAt: 2026-08-26 12:07:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-26 12:07:18 +0000 UTC FinishedAt: 2026-08-26 12:07:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowkrfjr/series-workflowkrfjr-convert-artifact-3727730236/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-26 12:07:28 +0000 UTC FinishedAt: 2026-08-26 12:09:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-26 12:07:28 +0000 UTC FinishedAt: 2026-08-26 12:09:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*10d9dee0-7b54-4689-b50d-e15c42cbd045,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-workflowkrfjr/series-workflowkrfjr-build-action-401558535/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-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-26 12:09:25 +0000 UTC FinishedAt: 2026-08-26 12:09:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-26 12:09:25 +0000 UTC FinishedAt: 2026-08-26 12:09:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-26 12:09:25 +0000 UTC FinishedAt: 2026-08-26 12:26:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-26 12:09:25 +0000 UTC FinishedAt: 2026-08-26 12:26:24 +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:*6a3e0123-b08d-459d-9068-7f1e60254ccd,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-workflowkrfjr/series-workflowkrfjr-convert-artifact-3727730236/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": "187f4142-010e-469f-b2d4-8ce60c1dd2c5", "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-workflowkrfjr/series-workflowkrfjr-build-action-2921623704/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-26 12:09:25 +0000 UTC FinishedAt: 2026-08-26 12:26:14 +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:*6a3e0123-b08d-459d-9068-7f1e60254ccd,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-workflowkrfjr/series-workflowkrfjr-convert-artifact-3727730236/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": "187f4142-010e-469f-b2d4-8ce60c1dd2c5", "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-workflowkrfjr/series-workflowkrfjr-build-action-2921623704/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-26 12:26:24 +0000 UTC FinishedAt: 2026-08-26 12:26:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-26 12:26:24 +0000 UTC FinishedAt: 2026-08-26 12:26:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-26 12:26:24 +0000 UTC FinishedAt: 2026-08-26 12:28:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-26 12:26:24 +0000 UTC FinishedAt: 2026-08-26 12:28:38 +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:*187f4142-010e-469f-b2d4-8ce60c1dd2c5,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-workflowkrfjr/series-workflowkrfjr-build-action-2921623704/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-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-26 12:28:48 +0000 UTC FinishedAt: 2026-08-26 15:35:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-26 12:28:48 +0000 UTC FinishedAt: 2026-08-26 15:35:19 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*10d9dee0-7b54-4689-b50d-e15c42cbd045,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*187f4142-010e-469f-b2d4-8ce60c1dd2c5,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-workflowkrfjr/series-workflowkrfjr-build-action-401558535/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-workflowkrfjr/series-workflowkrfjr-build-action-2921623704/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-26 12:28:48 +0000 UTC FinishedAt: 2026-08-26 12:28:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-26 12:28:48 +0000 UTC FinishedAt: 2026-08-26 12:28:52 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkrfjr/series-workflowkrfjr-convert-artifact-1814604805/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-26 12:28:48 +0000 UTC FinishedAt: 2026-08-26 12:28:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-26 12:28:48 +0000 UTC FinishedAt: 2026-08-26 12:28:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-26 12:28:48 +0000 UTC FinishedAt: 2026-08-26 12:28:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-26 12:28:58 +0000 UTC FinishedAt: 2026-08-26 15:35:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrfjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cfb01d47-3cc7-43a6-99e6-c4a0c6e6ce89","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-26 12:28:58 +0000 UTC FinishedAt: 2026-08-26 15:35:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*10d9dee0-7b54-4689-b50d-e15c42cbd045,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*187f4142-010e-469f-b2d4-8ce60c1dd2c5,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-workflowkrfjr/series-workflowkrfjr-build-action-401558535/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-workflowkrfjr/series-workflowkrfjr-build-action-2921623704/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-workflowkrfjr/series-workflowkrfjr-convert-artifact-1814604805/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,}