Name: series-workflowzw9s7 Phase: Succeeded StartedAt: 2026-07-29 18:50:33 +0000 UTC FinishedAt: 2026-07-29 22:48:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw9s7[0] Phase: Succeeded StartedAt: 2026-07-29 18:50:33 +0000 UTC FinishedAt: 2026-07-29 18:56:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw9s7[0].run-triage Phase: Succeeded StartedAt: 2026-07-29 18:50:33 +0000 UTC FinishedAt: 2026-07-29 18:56:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "b0a168fb-100e-4c8d-a177-a57b086e1fa4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "hsr_create_tagged_frame", "prp_create_tagged_frame", "hsr_forward_skb" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lJiMzNDssCiAgICAmIzM0O3BycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHNoYXJlZC1tdXRhdGlvbiBpc3N1ZSBpbiBIU1IgYW5kIFBSUCBieSBjbG9uaW5nIHRoZSBza2IgYW5kIG1ha2luZyBpdCBwcml2YXRlIGJlZm9yZSBtb2RpZnlpbmcgaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBIU1IgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgM2EwYWIwNTkzOTUxNzA0ZTI1ZDJiODk1OGRlZDhkY2VjZDM1OWYwNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDE4OjU1OjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuaW5kZXggMDc3NDk4MWE2NWMxNi4uOTc0YjU1ZjI0ODgyMSAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG5AQCAtMzM2LDEyICYjNDM7MzM2LDI0IEBAIHN0cnVjdCBza19idWZmICpoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuIFx0aW50IG1vdmVsZW47XG4gXG4gXHRpZiAoZnJhbWUtXHUwMDNlc2tiX2hzcikge1xuLVx0XHRzdHJ1Y3QgaHNyX2V0aGhkciAqaHNyX2V0aGhkciA9XG4tXHRcdFx0KHN0cnVjdCBoc3JfZXRoaGRyICopc2tiX21hY19oZWFkZXIoZnJhbWUtXHUwMDNlc2tiX2hzcik7XG4mIzQzO1x0XHRzdHJ1Y3QgaHNyX2V0aGhkciAqaHNyX2V0aGhkcjtcbiYjNDM7XG4mIzQzO1x0XHQvKiBUaGUgb3JpZ2luYWwgc2tiIGRhdGEgbWF5IGJlIHNoYXJlZCB3aXRoIGFub3RoZXIgZWdyZXNzXG4mIzQzO1x0XHQgKiBjbG9uZS4gTWFrZSB0aGUgY2xvbmUgZGF0YSBwcml2YXRlIGJlZm9yZSB1cGRhdGluZyB0aGVcbiYjNDM7XHRcdCAqIHBhdGggaWQgc28gdGhlIHVwZGF0ZSBjYW5ub3QgY29ycnVwdCB0aGUgb3RoZXIgY29weS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c2tiID0gc2tiX2Nsb25lKGZyYW1lLVx1MDAzZXNrYl9oc3IsIEdGUF9BVE9NSUMpO1xuJiM0MztcdFx0aWYgKCFza2IpXG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdFx0aWYgKHNrYl9jb3coc2tiLCAwKSkge1xuJiM0MztcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdC8qIHNldCB0aGUgbGFuZSBpZCBwcm9wZXJseSAqL1xuJiM0MztcdFx0aHNyX2V0aGhkciA9IChzdHJ1Y3QgaHNyX2V0aGhkciAqKXNrYl9tYWNfaGVhZGVyKHNrYik7XG4gXHRcdGhzcl9zZXRfcGF0aF9pZChmcmFtZSwgaHNyX2V0aGhkciwgcG9ydCk7XG4tXHRcdHJldHVybiBza2JfY2xvbmUoZnJhbWUtXHUwMDNlc2tiX2hzciwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0XHRyZXR1cm4gc2tiO1xuIFx0fSBlbHNlIGlmIChwb3J0LVx1MDAzZWRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19IU1JfVEFHX0lOUykge1xuIFx0XHRyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLVx1MDAzZXNrYl9zdGQsIEdGUF9BVE9NSUMpO1xuIFx0fVxuQEAgLTM3NywxNSAmIzQzOzM4OSwyOCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG4gXHRpZiAoZnJhbWUtXHUwMDNlc2tiX3BycCkge1xuLVx0XHRzdHJ1Y3QgcHJwX3JjdCAqdHJhaWxlciA9IHNrYl9nZXRfUFJQX3JjdChmcmFtZS1cdTAwM2Vza2JfcHJwKTtcbiYjNDM7XHRcdHN0cnVjdCBwcnBfcmN0ICp0cmFpbGVyO1xuIFxuJiM0MztcdFx0LyogU2FtZSBzaGFyaW5nIGhhemFyZCBhcyBhYm92ZTogcHJpdmF0aXplIHRoZSBjbG9uZSBkYXRhXG4mIzQzO1x0XHQgKiBiZWZvcmUgdXBkYXRpbmcgdGhlIExBTiBpZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c2tiID0gc2tiX2Nsb25lKGZyYW1lLVx1MDAzZXNrYl9wcnAsIEdGUF9BVE9NSUMpO1xuJiM0MztcdFx0aWYgKCFza2IpXG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdFx0aWYgKHNrYl9jb3coc2tiLCAwKSkge1xuJiM0MztcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0dHJhaWxlciA9IHNrYl9nZXRfUFJQX3JjdChza2IpO1xuIFx0XHRpZiAodHJhaWxlcikge1xuIFx0XHRcdHBycF9zZXRfbGFuX2lkKHRyYWlsZXIsIHBvcnQpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdFdBUk5fT05DRSghdHJhaWxlciwgXCYjMzQ7ZXJyb3JlZCBQUlAgc2tiXCYjMzQ7KTtcbiYjNDM7XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHRcdH1cbi1cdFx0cmV0dXJuIHNrYl9jbG9uZShmcmFtZS1cdTAwM2Vza2JfcHJwLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRcdHJldHVybiBza2I7XG4gXHR9IGVsc2UgaWYgKHBvcnQtXHUwMDNlZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX0hTUl9UQUdfSU5TKSB7XG4gXHRcdHJldHVybiBza2JfY2xvbmUoZnJhbWUtXHUwMDNlc2tiX3N0ZCwgR0ZQX0FUT01JQyk7XG4gXHR9XG5AQCAtNDIwLDYgJiM0Mzs0NDUsMjIgQEAgc3RhdGljIHZvaWQgaHNyX2RlbGl2ZXJfbWFzdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gc3RhdGljIGludCBoc3JfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXG4gXHRcdCAgICBzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxuIHtcbiYjNDM7XHQvKiBBbiBpbnRlcmxpbmstYm91bmQgc2tiIGZyb20gZ2V0X3VudGFnZ2VkX2ZyYW1lKCkgY2FuIHN0aWxsIGFsaWFzXG4mIzQzO1x0ICogYW5vdGhlciBsaXZlIGNvbnN1bWVyOiBmb3IgbWFzdGVyLW9yaWdpbmF0ZWQgZnJhbWVzIHRoZSBjbG9uZVxuJiM0MztcdCAqIHNoYXJlcyB0aGUgb3JpZ2luYWwgVFggc2tiICh3aGljaCB0YXBzIG9yIHRoZSBUWCBwYXRoIG1heSBzdGlsbFxuJiM0MztcdCAqIGhvbGQpOyBmb3IgcmluZyBmcmFtZXMgdGhlIG1hc3RlciBhbHNvIGNvbnN1bWVzIHRoZW0gd2hlbiB0aGV5XG4mIzQzO1x0ICogYXJlIGRlc3RpbmVkIHRvIHRoZSBsb2NhbCBub2RlIHdpdGhvdXQgYmVpbmcgZXhjbHVzaXZlIHRvIGl0LlxuJiM0MztcdCAqIFByaXZhdGl6ZSBiZWZvcmUgYW55IGFkZHJlc3MgbXV0YXRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoZnJhbWUtXHUwMDNlcG9ydF9yY3YtXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSIHx8XG4mIzQzO1x0ICAgICAoZnJhbWUtXHUwMDNlaXNfbG9jYWxfZGVzdCBcdTAwMjZcdTAwMjYgIWZyYW1lLVx1MDAzZWlzX2xvY2FsX2V4Y2x1c2l2ZSkpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBza2JfY293KHNrYiwgMCkpIHtcbiYjNDM7XHRcdGZyYW1lLVx1MDAzZXBvcnRfcmN2LVx1MDAzZWRldi1cdTAwM2VzdGF0cy5yeF9kcm9wcGVkJiM0MzsmIzQzOztcbiYjNDM7XHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0cmV0dXJuIE5FVF9YTUlUX0RST1A7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChmcmFtZS1cdTAwM2Vwb3J0X3Jjdi1cdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIpIHtcbiBcdFx0aHNyX2FkZHJfc3Vic3RfZGVzdChmcmFtZS1cdTAwM2Vub2RlX3NyYywgc2tiLCBwb3J0KTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuaW5kZXggMzFmYjkzMjZjZjUzMy4uYWVhZTdmM2Q2ZGQxNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcbkBAIC03LDYgJiM0Mzs3LDcgQEAgVEVTVF9QUk9HUyA6PSBcXFxuIFx0aHNyX3JlZGJveC5zaCBcXFxuIFx0bGlua19mYXVsdHMuc2ggXFxcbiBcdHBycF9waW5nLnNoIFxcXG4mIzQzO1x0aHNyX3NoYXJlZF9tdXRhdGlvbi5zaCBcXFxuICMgZW5kIG9mIFRFU1RfUFJPR1NcbiBcbiBURVNUX0ZJTEVTICYjNDM7PSBoc3JfY29tbW9uLnNoXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3Jfc2hhcmVkX211dGF0aW9uLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3Jfc2hhcmVkX211dGF0aW9uLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjcxMDM1NDFjZDc4Y1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3Jfc2hhcmVkX211dGF0aW9uLnNoXG5AQCAtMCwwICYjNDM7MSwyMTMgQEBcbiYjNDM7IyEvYmluL2Jhc2hcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjXG4mIzQzOyMgVmVyaWZ5IHRoYXQgcGVyLWVncmVzcyBtdXRhdGlvbnMgb2Ygc2hhcmVkIHNrYiBkYXRhIGFyZSBwcml2YXRlOlxuJiM0MzsjXG4mIzQzOyMgRjIgKHBhdGgvTEFOIElEKTogb24gYW4gYWZmZWN0ZWQga2VybmVsIHRoZSBzZWNvbmQgc2xhdmUmIzM5O3MgTEFOLUlEIHdyaXRlXG4mIzQzOyMgbGFuZHMgaW4gdGhlIGZpcnN0IHNsYXZlJiMzOTtzIHN0aWxsLXF1ZXVlZCBjbG9uZTsgd2l0aCBhIG5ldGVtIGRlbGF5IG9uXG4mIzQzOyMgc2xhdmUgQSwgaW5qZWN0ZWQgZnJhbWVzIGxlYXZlIEEgY2FycnlpbmcgQiYjMzk7cyBMQU4gSUQuXG4mIzQzOyNcbiYjNDM7IyBGMSAoUmVkQm94IHNvdXJjZSBNQUMpOiBvbiBhbiBhZmZlY3RlZCBrZXJuZWwgYW4gSFNSLXRhZ2dlZCBtdWx0aWNhc3RcbiYjNDM7IyBmcmFtZSByZWNlaXZlZCBvbiBhIFJlZEJveCBzbGF2ZSBpcyBjbG9uZWQgZm9yIG1hc3RlciBhbmQgaW50ZXJsaW5rLFxuJiM0MzsjIGFuZCB0aGUgaW50ZXJsaW5rJiMzOTtzIFJlZEJveC1NQUMgcmV3cml0ZSBsYW5kcyBpbiB0aGUgbWFzdGVyIGNsb25lJiMzOTtzXG4mIzQzOyMgYnVmZmVyLCBzbyB0aGUgbG9jYWwgc3RhY2sgcmVjZWl2ZXMgdGhlIFJlZEJveCBNQUMgaW5zdGVhZCBvZiB0aGVcbiYjNDM7IyBvcmlnaW5hdGluZyBub2RlJiMzOTtzIE1BQy5cbiYjNDM7XG4mIzQzO2lwdjY9ZmFsc2VcbiYjNDM7XG4mIzQzO3NvdXJjZSAuL2hzcl9jb21tb24uc2hcbiYjNDM7XG4mIzQzO0RVUj01XG4mIzQzO1xuJiM0MztyZXF1aXJlKClcbiYjNDM7e1xuJiM0MztcdGNvbW1hbmQgLXYgXCYjMzQ7JDFcJiMzNDsgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFx1MDAyNlx1MDAyNiByZXR1cm4gMFxuJiM0MztcdGVjaG8gXCYjMzQ7U0tJUDogJDEgbm90IGF2YWlsYWJsZVwmIzM0O1xuJiM0MztcdGV4aXQgJGtzZnRfc2tpcFxuJiM0Mzt9XG4mIzQzO1xuJiM0MztyZXF1aXJlIGlwXG4mIzQzO3JlcXVpcmUgdGNcbiYjNDM7cmVxdWlyZSBweXRob24zXG4mIzQzO1xuJiM0Mzt0cmFwIGNsZWFudXBfYWxsX25zIEVYSVRcbiYjNDM7XG4mIzQzOyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGMjogTEFOLUlEIGlzb2xhdGlvblxuJiM0MzsjIFBSUCBEQU5QIChwcm90byAxKSwgQUZfUEFDS0VUIHByZS10YWdnZWQgaW5qZWN0aW9uLCBuZXRlbSBvbiBzbGF2ZSBBLlxuJiM0MztydW5fZjIoKVxuJiM0Mzt7XG4mIzQzO1x0c2V0dXBfbnMgbnMgMlx1MDAzZS9kZXYvbnVsbCB8fCByZXR1cm4gJGtzZnRfc2tpcFxuJiM0MztcdG5zeCgpIHsgaXAgbmV0bnMgZXhlYyBcJiMzNDskbnNcJiMzNDsgXCYjMzQ7JEBcJiMzNDs7IH1cbiYjNDM7XG4mIzQzO1x0IyBQcm9iZSBzY2hfbmV0ZW0gaW5zaWRlIHRoZSBkaXNwb3NhYmxlIG5hbWVzcGFjZSBvbmx5LlxuJiM0MztcdGlmICEgbnN4IHRjIHFkaXNjIGFkZCBkZXYgbG8gcm9vdCBuZXRlbSBkZWxheSAxbXMgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtTS0lQOiBzY2hfbmV0ZW0gbm90IGF2YWlsYWJsZVwmIzM0O1xuJiM0MztcdFx0cmV0dXJuICRrc2Z0X3NraXBcbiYjNDM7XHRmaVxuJiM0MztcdG5zeCB0YyBxZGlzYyBkZWwgZGV2IGxvIHJvb3QgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcbiYjNDM7XHQjIENhcGFiaWxpdHkgcHJvYmVzIGVuZCBoZXJlOyBzZXR1cCBvciBydW50aW1lIGZhaWx1cmUgYmVsb3cgaXMgRkFJTC5cbiYjNDM7XHRuc3ggaXAgbGluayBhZGQgdkEgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2QXAgfHwgeyBlY2hvIFwmIzM0O0ZBSUw6IHZldGggQVwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XHRuc3ggaXAgbGluayBhZGQgdkIgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2QnAgfHwgeyBlY2hvIFwmIzM0O0ZBSUw6IHZldGggQlwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XHRmb3IgaSBpbiB2QSB2QiB2QXAgdkJwOyBkb1xuJiM0MztcdFx0bnN4IGlwIGxpbmsgc2V0IFwmIzM0OyRpXCYjMzQ7IHVwIHx8IHsgZWNobyBcJiMzNDtGQUlMOiAkaSB1cFwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XHRkb25lXG4mIzQzO1x0bnN4IGlwIGxpbmsgYWRkIG5hbWUgcHJwMCB0eXBlIGhzciBzbGF2ZTEgdkEgc2xhdmUyIHZCIHN1cGVydmlzaW9uIDQ1IHByb3RvIDEgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdGlmIFsgJD8gLW5lIDAgXTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtTS0lQOiBIU1IvUFJQIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBrZXJuZWxcJiMzNDtcbiYjNDM7XHRcdHJldHVybiAka3NmdF9za2lwXG4mIzQzO1x0ZmlcbiYjNDM7XHRuc3ggaXAgbGluayBzZXQgcHJwMCB1cCB8fCB7IGVjaG8gXCYjMzQ7RkFJTDogcHJwMCB1cFwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XHRuc3ggdGMgcWRpc2MgYWRkIGRldiB2QSByb290IG5ldGVtIGRlbGF5IDIwMG1zIHx8IHsgZWNobyBcJiMzNDtGQUlMOiBuZXRlbVwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XG4mIzQzO1x0bnN4IHB5dGhvbjMgL2Rldi9zdGRpbiBcJiMzNDskRFVSXCYjMzQ7IFx1MDAzY1x1MDAzYyYjMzk7UFlGMiYjMzk7XG4mIzQzO2ltcG9ydCBzb2NrZXQsIHN0cnVjdCwgc2VsZWN0LCBzeXMsIHRpbWVcbiYjNDM7XG4mIzQzO2R1ciA9IGludChzeXMuYXJndlsxXSlcbiYjNDM7ZGVmIGxhbmlkKHBrdCk6XG4mIzQzOyAgICBpZiBsZW4ocGt0KSBcdTAwM2MgMjAgb3IgcGt0Wy0yOl0gIT0gYlwmIzM0O1xceDg4XFx4ZmJcJiMzNDs6XG4mIzQzOyAgICAgICAgcmV0dXJuIE5vbmVcbiYjNDM7ICAgIHJldHVybiAocGt0Wy00XSBcdTAwM2VcdTAwM2UgNCkgXHUwMDI2IDB4RlxuJiM0MztcbiYjNDM7U1JDID0gYnl0ZXMuZnJvbWhleChvcGVuKFwmIzM0Oy9zeXMvY2xhc3MvbmV0L3BycDAvYWRkcmVzc1wmIzM0OykucmVhZCgpLnJlcGxhY2UoXCYjMzQ7OlwmIzM0OywgXCYjMzQ7XCYjMzQ7KSlcbiYjNDM7RFNUID0gYnl0ZXMuZnJvbWhleChcJiMzNDswMmFhYmJjY2RkMDFcJiMzNDspXG4mIzQzO1BBWSA9IGJ5dGVzKHJhbmdlKDQ2KSlcbiYjNDM7cmN0MCA9IHN0cnVjdC5wYWNrKFwmIzM0O1x1MDAzZUhcJiMzNDssIDApICYjNDM7IHN0cnVjdC5wYWNrKFwmIzM0O1x1MDAzZUhcJiMzNDssIDUyIFx1MDAyNiAweDBGRkYpICYjNDM7IGJcJiMzNDtcXHg4OFxceGZiXCYjMzQ7XG4mIzQzO2ZyYW1lID0gRFNUICYjNDM7IFNSQyAmIzQzOyBiXCYjMzQ7XFx4MDhcXHgwMFwmIzM0OyAmIzQzOyBQQVkgJiM0MzsgcmN0MFxuJiM0MztcbiYjNDM7dHggPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVyk7IHR4LmJpbmQoKFwmIzM0O3BycDBcJiMzNDssIDApKVxuJiM0MztzQSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXLFxuJiM0MzsgICAgICAgIHNvY2tldC5udG9ocygweDAwMDMpKVxuJiM0MztzQS5iaW5kKChcJiMzNDt2QXBcJiMzNDssIDApKVxuJiM0MztzQiA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXLFxuJiM0MzsgICAgICAgIHNvY2tldC5udG9ocygweDAwMDMpKVxuJiM0MztzQi5iaW5kKChcJiMzNDt2QnBcJiMzNDssIDApKVxuJiM0MztzQS5zZXRibG9ja2luZyhGYWxzZSk7IHNCLnNldGJsb2NraW5nKEZhbHNlKVxuJiM0Mztmb3IgXyBpbiByYW5nZSgyMDApOlxuJiM0MzsgICAgdHguc2VuZChmcmFtZSk7IHRpbWUuc2xlZXAoMC4wMDEpXG4mIzQzO1xuJiM0MzthLCBiID0gW10sIFtdXG4mIzQzO2VuZCA9IHRpbWUudGltZSgpICYjNDM7IGR1clxuJiM0Mzt3aGlsZSB0aW1lLnRpbWUoKSBcdTAwM2MgZW5kOlxuJiM0MzsgICAgciwgXywgXyA9IHNlbGVjdC5zZWxlY3QoW3NBLCBzQl0sIFtdLCBbXSwgMC4zKVxuJiM0MzsgICAgZm9yIHMgaW4gcjpcbiYjNDM7ICAgICAgICBwa3QgPSBzLnJlY3YoNjU1MzUpXG4mIzQzOyAgICAgICAgaWYgKHBrdFs6Nl0gIT0gRFNUIG9yIHBrdFs2OjEyXSAhPSBTUkMgb3IgcGt0WzEyOjE0XSAhPSBiXCYjMzQ7XFx4MDhcXHgwMFwmIzM0O1xuJiM0MzsgICAgICAgICAgICAgICAgb3IgcGt0WzE0OjE0ICYjNDM7IGxlbihQQVkpXSAhPSBQQVkpOlxuJiM0MzsgICAgICAgICAgICBjb250aW51ZVxuJiM0MzsgICAgICAgIGxpZCA9IGxhbmlkKHBrdClcbiYjNDM7ICAgICAgICBpZiBsaWQgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgIChhIGlmIHMgaXMgc0EgZWxzZSBiKS5hcHBlbmQobGlkKVxuJiM0MztcbiYjNDM7cHJpbnQoXCYjMzQ7QS1zaWRlIGNvdW50PSVkIGxhbiBpZHM9JXNcJiMzNDsgJSAobGVuKGEpLCBzb3J0ZWQoc2V0KGEpKSkpXG4mIzQzO3ByaW50KFwmIzM0O0Itc2lkZSBjb3VudD0lZCBsYW4gaWRzPSVzXCYjMzQ7ICUgKGxlbihiKSwgc29ydGVkKHNldChiKSkpKVxuJiM0MztpZiBsZW4oYSkgXHUwMDNjIDE1MCBvciBsZW4oYikgXHUwMDNjIDE1MDpcbiYjNDM7ICAgIHByaW50KFwmIzM0O0ZBSUw6IHRvbyBmZXcgaW5qZWN0ZWQgZnJhbWVzIGNhcHR1cmVkIChBPSVkIEI9JWQsIHNlbnQgMjAwKVwmIzM0OyAlIChsZW4oYSksIGxlbihiKSkpXG4mIzQzOyAgICBzeXMuZXhpdCgxKVxuJiM0MztiYWRfYSA9IFt4IGZvciB4IGluIGEgaWYgKHggXHUwMDI2IDEpICE9IDBdXG4mIzQzO2JhZF9iID0gW3ggZm9yIHggaW4gYiBpZiAoeCBcdTAwMjYgMSkgIT0gMV1cbiYjNDM7aWYgYmFkX2Egb3IgYmFkX2I6XG4mIzQzOyAgICBwcmludChcJiMzNDtGQUlMOiBzaGFyZWQtbXV0YXRpb24gY29ycnVwdGlvbiAtIEE6ICVkLyVkIHdyb25nLWxhbiwgQjogJWQvJWQgd3JvbmctbGFuXCYjMzQ7XG4mIzQzOyAgICAgICAgICAlIChsZW4oYmFkX2EpLCBsZW4oYSksIGxlbihiYWRfYiksIGxlbihiKSkpXG4mIzQzOyAgICBzeXMuZXhpdCgxKVxuJiM0MztwcmludChcJiMzNDtQQVNTOiBwZXItZWdyZXNzIExBTiBJRHMgaXNvbGF0ZWQgKEEgYWxsIGJpdDA9MCwgQiBhbGwgYml0MD0xKVwmIzM0OylcbiYjNDM7c3lzLmV4aXQoMClcbiYjNDM7UFlGMlxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGMTogUmVkQm94IHNvdXJjZS1NQUMgcHJpdmFjeVxuJiM0MzsjIEhTUiBSZWRCb3ggKHByb3RvIDApLCB0YWdnZWQgbXVsdGljYXN0IGZyb20gYSBzbGF2ZTogbWFzdGVyIG11c3Qga2VlcFxuJiM0MzsjIHRoZSBub2RlIE1BQywgaW50ZXJsaW5rIG11c3QgY2FycnkgdGhlIFJlZEJveCBNQUMuXG4mIzQzO3J1bl9mMSgpXG4mIzQzO3tcbiYjNDM7XHRzZXR1cF9ucyBucyAyXHUwMDNlL2Rldi9udWxsIHx8IHJldHVybiAka3NmdF9za2lwXG4mIzQzO1x0bnN4KCkgeyBpcCBuZXRucyBleGVjIFwmIzM0OyRuc1wmIzM0OyBcJiMzNDskQFwmIzM0OzsgfVxuJiM0MztcbiYjNDM7XHRuc3ggaXAgbGluayBhZGQgdkEgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2QXAgfHwgeyBlY2hvIFwmIzM0O0ZBSUw6IHZldGggQVwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XHRuc3ggaXAgbGluayBhZGQgdkIgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2QnAgfHwgeyBlY2hvIFwmIzM0O0ZBSUw6IHZldGggQlwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XHRuc3ggaXAgbGluayBhZGQgdkkgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2SXAgfHwgeyBlY2hvIFwmIzM0O0ZBSUw6IHZldGggSVwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XHRmb3IgaSBpbiB2QSB2QiB2SSB2QXAgdkJwIHZJcDsgZG9cbiYjNDM7XHRcdG5zeCBpcCBsaW5rIHNldCBcJiMzNDskaVwmIzM0OyB1cCB8fCB7IGVjaG8gXCYjMzQ7RkFJTDogJGkgdXBcJiMzNDs7IHJldHVybiAxOyB9XG4mIzQzO1x0ZG9uZVxuJiM0MztcdG5zeCBpcCBsaW5rIGFkZCBuYW1lIGhzcjAgdHlwZSBoc3Igc2xhdmUxIHZBIHNsYXZlMiB2QiBpbnRlcmxpbmsgdkkgXFxcbiYjNDM7XHRcdHN1cGVydmlzaW9uIDQ1IHByb3RvIDAgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdGlmIFsgJD8gLW5lIDAgXTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtTS0lQOiBIU1IgUmVkQm94IG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBrZXJuZWxcJiMzNDtcbiYjNDM7XHRcdHJldHVybiAka3NmdF9za2lwXG4mIzQzO1x0ZmlcbiYjNDM7XHRuc3ggaXAgbGluayBzZXQgaHNyMCB1cCB8fCB7IGVjaG8gXCYjMzQ7RkFJTDogaHNyMCB1cFwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XG4mIzQzO1x0bnN4IHB5dGhvbjMgL2Rldi9zdGRpbiBcdTAwM2NcdTAwM2MmIzM5O1BZRjEmIzM5O1xuJiM0MztpbXBvcnQgc29ja2V0LCBzZWxlY3QsIHN5cywgdGltZVxuJiM0MztcbiYjNDM7Tk9ERSAgPSBieXRlcy5mcm9taGV4KFwmIzM0OzAyMTEyMjMzNDQ1NVwmIzM0OylcbiYjNDM7TUNBU1QgPSBieXRlcy5mcm9taGV4KFwmIzM0OzAxMDA1ZTAwMDAwMVwmIzM0OylcbiYjNDM7UkIgICAgPSBieXRlcy5mcm9taGV4KG9wZW4oXCYjMzQ7L3N5cy9jbGFzcy9uZXQvdkkvYWRkcmVzc1wmIzM0OykucmVhZCgpLnJlcGxhY2UoXCYjMzQ7OlwmIzM0OywgXCYjMzQ7XCYjMzQ7KSlcbiYjNDM7UEFZICAgPSBieXRlcyhyYW5nZSg0NikpXG4mIzQzO1xuJiM0MztkZWYgZnJhbWUoc2VxKTpcbiYjNDM7ICAgIHRhZyA9ICgoMSBcdTAwM2NcdTAwM2MgMTIpIHwgbGVuKFBBWSkpLnRvX2J5dGVzKDIsIFwmIzM0O2JpZ1wmIzM0OykgJiM0Mzsgc2VxLnRvX2J5dGVzKDIsIFwmIzM0O2JpZ1wmIzM0OykgJiM0MzsgYlwmIzM0O1xceDA4XFx4MDBcJiMzNDtcbiYjNDM7ICAgIHJldHVybiBNQ0FTVCAmIzQzOyBOT0RFICYjNDM7IGJcJiMzNDtcXHg4OVxceDJmXCYjMzQ7ICYjNDM7IHRhZyAmIzQzOyBQQVlcbiYjNDM7XG4mIzQzO3R4ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcpOyB0eC5iaW5kKChcJiMzNDt2QXBcJiMzNDssIDApKVxuJiM0MztzbSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXLFxuJiM0MzsgICAgICAgIHNvY2tldC5udG9ocygweDAwMDMpKVxuJiM0MztzbS5iaW5kKChcJiMzNDtoc3IwXCYjMzQ7LCAwKSlcbiYjNDM7c2kgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVyxcbiYjNDM7ICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSlcbiYjNDM7c2kuYmluZCgoXCYjMzQ7dklwXCYjMzQ7LCAwKSlcbiYjNDM7c20uc2V0YmxvY2tpbmcoRmFsc2UpOyBzaS5zZXRibG9ja2luZyhGYWxzZSlcbiYjNDM7XG4mIzQzO2ZvciBpIGluIHJhbmdlKDMpOlxuJiM0MzsgICAgdHguc2VuZChmcmFtZShpICYjNDM7IDEpKTsgdGltZS5zbGVlcCgwLjA1KVxuJiM0MztcbiYjNDM7bV9zcmMgPSBpX3NyYyA9IE5vbmVcbiYjNDM7ZW5kID0gdGltZS50aW1lKCkgJiM0MzsgNFxuJiM0Mzt3aGlsZSB0aW1lLnRpbWUoKSBcdTAwM2MgZW5kIGFuZCAobV9zcmMgaXMgTm9uZSBvciBpX3NyYyBpcyBOb25lKTpcbiYjNDM7ICAgIHIsIF8sIF8gPSBzZWxlY3Quc2VsZWN0KFtzbSwgc2ldLCBbXSwgW10sIDAuMylcbiYjNDM7ICAgIGZvciBzIGluIHI6XG4mIzQzOyAgICAgICAgcGt0ID0gcy5yZWN2KDY1NTM1KVxuJiM0MzsgICAgICAgICMgZXhhY3QgZmxvdzogZHN0LCBwb3N0LXN0cmlwIEV0aGVyVHlwZSwgZXhhY3QgcGF5bG9hZCwgbWluIGxlbmd0aDtcbiYjNDM7ICAgICAgICAjIGhfc291cmNlIGlzIHRoZSBhc3NlcnRlZCB2YWx1ZSBhbmQgbXVzdCBOT1QgYmUgZmlsdGVyZWQgb25cbiYjNDM7ICAgICAgICBpZiAobGVuKHBrdCkgXHUwMDNjIDYwIG9yIHBrdFs6Nl0gIT0gTUNBU1Qgb3IgcGt0WzEyOjE0XSAhPSBiXCYjMzQ7XFx4MDhcXHgwMFwmIzM0O1xuJiM0MzsgICAgICAgICAgICAgICAgb3IgcGt0WzE0OjE0ICYjNDM7IGxlbihQQVkpXSAhPSBQQVkpOlxuJiM0MzsgICAgICAgICAgICBjb250aW51ZVxuJiM0MzsgICAgICAgIGlmIHMgaXMgc20gYW5kIG1fc3JjIGlzIE5vbmU6XG4mIzQzOyAgICAgICAgICAgIG1fc3JjID0gcGt0WzY6MTJdXG4mIzQzOyAgICAgICAgZWxpZiBzIGlzIHNpIGFuZCBpX3NyYyBpcyBOb25lOlxuJiM0MzsgICAgICAgICAgICBpX3NyYyA9IHBrdFs2OjEyXVxuJiM0MztcbiYjNDM7cHJpbnQoXCYjMzQ7bWFzdGVyIGhfc291cmNlICAgID1cJiMzNDssIG1fc3JjLmhleCgpIGlmIG1fc3JjIGVsc2UgTm9uZSlcbiYjNDM7cHJpbnQoXCYjMzQ7bm9kZSBNQUMgICAgICAgICAgID1cJiMzNDssIE5PREUuaGV4KCkpXG4mIzQzO3ByaW50KFwmIzM0O2ludGVybGluayBoX3NvdXJjZSA9XCYjMzQ7LCBpX3NyYy5oZXgoKSBpZiBpX3NyYyBlbHNlIE5vbmUpXG4mIzQzO3ByaW50KFwmIzM0O3JlZGJveCBNQUMgICAgICAgICA9XCYjMzQ7LCBSQi5oZXgoKSlcbiYjNDM7aWYgaV9zcmMgIT0gUkI6XG4mIzQzOyAgICBwcmludChcJiMzNDtGQUlMOiBpbnRlcmxpbmsgZGlkIG5vdCBjYXJyeSB0aGUgUmVkQm94IE1BQ1wmIzM0OylcbiYjNDM7ICAgIHN5cy5leGl0KDEpXG4mIzQzO2lmIG1fc3JjICE9IE5PREU6XG4mIzQzOyAgICBwcmludChcJiMzNDtGQUlMOiBtYXN0ZXIgcmVjZWl2ZWQgJXMgaW5zdGVhZCBvZiB0aGUgbm9kZSBNQUMgXCYjMzQ7XG4mIzQzOyAgICAgICAgICBcJiMzNDsoc2hhcmVkLW11dGF0aW9uIGNvcnJ1cHRpb24pXCYjMzQ7ICUgKG1fc3JjLmhleCgpIGlmIG1fc3JjIGVsc2UgXCYjMzQ7bm90aGluZ1wmIzM0OykpXG4mIzQzOyAgICBzeXMuZXhpdCgxKVxuJiM0MztwcmludChcJiMzNDtQQVNTOiBtYXN0ZXIga2VwdCBub2RlIE1BQywgaW50ZXJsaW5rIGtlcHQgUmVkQm94IE1BQ1wmIzM0OylcbiYjNDM7c3lzLmV4aXQoMClcbiYjNDM7UFlGMVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztyYz0wXG4mIzQzO1xuJiM0MztydW5fZjJcbiYjNDM7cmV0PSQ/XG4mIzQzO1sgXCYjMzQ7JHJldFwmIzM0OyAtZXEgXCYjMzQ7JGtzZnRfc2tpcFwmIzM0OyBdIFx1MDAyNlx1MDAyNiBleGl0IFwmIzM0OyRrc2Z0X3NraXBcJiMzNDtcbiYjNDM7WyBcJiMzNDskcmV0XCYjMzQ7IC1lcSAwIF0gfHwgcmM9MVxuJiM0MztcbiYjNDM7cnVuX2YxXG4mIzQzO3JldD0kP1xuJiM0MztbIFwmIzM0OyRyZXRcJiMzNDsgLWVxIFwmIzM0OyRrc2Z0X3NraXBcJiMzNDsgXSBcdTAwMjZcdTAwMjYgZXhpdCBcJiMzNDska3NmdF9za2lwXCYjMzQ7XG4mIzQzO1sgXCYjMzQ7JHJldFwmIzM0OyAtZXEgMCBdIHx8IHJjPTFcbiYjNDM7XG4mIzQzO2lmIFsgJHJjIC1lcSAwIF07IHRoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O2hzcl9zaGFyZWRfbXV0YXRpb246IHBlci1lZ3Jlc3MgbXV0YXRpb24gaXNvbGF0aW9uIChGMSYjNDM7RjIpIFsgT0sgXVwmIzM0O1xuJiM0MztlbHNlXG4mIzQzO1x0ZWNobyBcJiMzNDtoc3Jfc2hhcmVkX211dGF0aW9uOiBwZXItZWdyZXNzIG11dGF0aW9uIGlzb2xhdGlvbiBbIEZBSUwgXSByYz0kcmNcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7ZmlcbiYjNDM7ZXhpdCAkcmNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxODo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFNSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUmIzM0OywKICAgICYjMzQ7cHJwX2NyZWF0ZV90YWdnZWRfZnJhbWUmIzM0OywKICAgICYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc2hhcmVkLW11dGF0aW9uIGlzc3VlIGluIEhTUiBhbmQgUFJQIGJ5IGNsb25pbmcgdGhlIHNrYiBhbmQgbWFraW5nIGl0IHByaXZhdGUgYmVmb3JlIG1vZGlmeWluZyBpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEhTUiBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYTBhYjA1OTM5NTE3MDRlMjVkMmI4OTU4ZGVkOGRjZWNkMzU5ZjA1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjkgMTg6NTU6NDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmMKaW5kZXggMDc3NDk4MWE2NWMxNi4uOTc0YjU1ZjI0ODgyMSAxMDA2NDQKLS0tIGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuYwpAQCAtMzM2LDEyICYjNDM7MzM2LDI0IEBAIHN0cnVjdCBza19idWZmICpoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLAogCWludCBtb3ZlbGVuOwogCiAJaWYgKGZyYW1lLSZndDtza2JfaHNyKSB7Ci0JCXN0cnVjdCBoc3JfZXRoaGRyICpoc3JfZXRoaGRyID0KLQkJCShzdHJ1Y3QgaHNyX2V0aGhkciAqKXNrYl9tYWNfaGVhZGVyKGZyYW1lLSZndDtza2JfaHNyKTsKJiM0MzsJCXN0cnVjdCBoc3JfZXRoaGRyICpoc3JfZXRoaGRyOwomIzQzOwomIzQzOwkJLyogVGhlIG9yaWdpbmFsIHNrYiBkYXRhIG1heSBiZSBzaGFyZWQgd2l0aCBhbm90aGVyIGVncmVzcwomIzQzOwkJICogY2xvbmUuIE1ha2UgdGhlIGNsb25lIGRhdGEgcHJpdmF0ZSBiZWZvcmUgdXBkYXRpbmcgdGhlCiYjNDM7CQkgKiBwYXRoIGlkIHNvIHRoZSB1cGRhdGUgY2Fubm90IGNvcnJ1cHQgdGhlIG90aGVyIGNvcHkuCiYjNDM7CQkgKi8KJiM0MzsJCXNrYiA9IHNrYl9jbG9uZShmcmFtZS0mZ3Q7c2tiX2hzciwgR0ZQX0FUT01JQyk7CiYjNDM7CQlpZiAoIXNrYikKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCWlmIChza2JfY293KHNrYiwgMCkpIHsKJiM0MzsJCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCX0KIAogCQkvKiBzZXQgdGhlIGxhbmUgaWQgcHJvcGVybHkgKi8KJiM0MzsJCWhzcl9ldGhoZHIgPSAoc3RydWN0IGhzcl9ldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpOwogCQloc3Jfc2V0X3BhdGhfaWQoZnJhbWUsIGhzcl9ldGhoZHIsIHBvcnQpOwotCQlyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLSZndDtza2JfaHNyLCBHRlBfQVRPTUlDKTsKJiM0MzsJCXJldHVybiBza2I7CiAJfSBlbHNlIGlmIChwb3J0LSZndDtkZXYtJmd0O2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfSFdfSFNSX1RBR19JTlMpIHsKIAkJcmV0dXJuIHNrYl9jbG9uZShmcmFtZS0mZ3Q7c2tiX3N0ZCwgR0ZQX0FUT01JQyk7CiAJfQpAQCAtMzc3LDE1ICYjNDM7Mzg5LDI4IEBAIHN0cnVjdCBza19idWZmICpwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLAogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlpZiAoZnJhbWUtJmd0O3NrYl9wcnApIHsKLQkJc3RydWN0IHBycF9yY3QgKnRyYWlsZXIgPSBza2JfZ2V0X1BSUF9yY3QoZnJhbWUtJmd0O3NrYl9wcnApOwomIzQzOwkJc3RydWN0IHBycF9yY3QgKnRyYWlsZXI7CiAKJiM0MzsJCS8qIFNhbWUgc2hhcmluZyBoYXphcmQgYXMgYWJvdmU6IHByaXZhdGl6ZSB0aGUgY2xvbmUgZGF0YQomIzQzOwkJICogYmVmb3JlIHVwZGF0aW5nIHRoZSBMQU4gaWQuCiYjNDM7CQkgKi8KJiM0MzsJCXNrYiA9IHNrYl9jbG9uZShmcmFtZS0mZ3Q7c2tiX3BycCwgR0ZQX0FUT01JQyk7CiYjNDM7CQlpZiAoIXNrYikKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCWlmIChza2JfY293KHNrYiwgMCkpIHsKJiM0MzsJCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXRyYWlsZXIgPSBza2JfZ2V0X1BSUF9yY3Qoc2tiKTsKIAkJaWYgKHRyYWlsZXIpIHsKIAkJCXBycF9zZXRfbGFuX2lkKHRyYWlsZXIsIHBvcnQpOwogCQl9IGVsc2UgewogCQkJV0FSTl9PTkNFKCF0cmFpbGVyLCAmIzM0O2Vycm9yZWQgUFJQIHNrYiYjMzQ7KTsKJiM0MzsJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCXJldHVybiBOVUxMOwogCQl9Ci0JCXJldHVybiBza2JfY2xvbmUoZnJhbWUtJmd0O3NrYl9wcnAsIEdGUF9BVE9NSUMpOwomIzQzOwkJcmV0dXJuIHNrYjsKIAl9IGVsc2UgaWYgKHBvcnQtJmd0O2Rldi0mZ3Q7ZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9IV19IU1JfVEFHX0lOUykgewogCQlyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLSZndDtza2Jfc3RkLCBHRlBfQVRPTUlDKTsKIAl9CkBAIC00MjAsNiAmIzQzOzQ0NSwyMiBAQCBzdGF0aWMgdm9pZCBoc3JfZGVsaXZlcl9tYXN0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIHN0YXRpYyBpbnQgaHNyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0LAogCQkgICAgc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSkKIHsKJiM0MzsJLyogQW4gaW50ZXJsaW5rLWJvdW5kIHNrYiBmcm9tIGdldF91bnRhZ2dlZF9mcmFtZSgpIGNhbiBzdGlsbCBhbGlhcwomIzQzOwkgKiBhbm90aGVyIGxpdmUgY29uc3VtZXI6IGZvciBtYXN0ZXItb3JpZ2luYXRlZCBmcmFtZXMgdGhlIGNsb25lCiYjNDM7CSAqIHNoYXJlcyB0aGUgb3JpZ2luYWwgVFggc2tiICh3aGljaCB0YXBzIG9yIHRoZSBUWCBwYXRoIG1heSBzdGlsbAomIzQzOwkgKiBob2xkKTsgZm9yIHJpbmcgZnJhbWVzIHRoZSBtYXN0ZXIgYWxzbyBjb25zdW1lcyB0aGVtIHdoZW4gdGhleQomIzQzOwkgKiBhcmUgZGVzdGluZWQgdG8gdGhlIGxvY2FsIG5vZGUgd2l0aG91dCBiZWluZyBleGNsdXNpdmUgdG8gaXQuCiYjNDM7CSAqIFByaXZhdGl6ZSBiZWZvcmUgYW55IGFkZHJlc3MgbXV0YXRpb24uCiYjNDM7CSAqLwomIzQzOwlpZiAocG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LICZhbXA7JmFtcDsKJiM0MzsJICAgIChmcmFtZS0mZ3Q7cG9ydF9yY3YtJmd0O3R5cGUgPT0gSFNSX1BUX01BU1RFUiB8fAomIzQzOwkgICAgIChmcmFtZS0mZ3Q7aXNfbG9jYWxfZGVzdCAmYW1wOyZhbXA7ICFmcmFtZS0mZ3Q7aXNfbG9jYWxfZXhjbHVzaXZlKSkgJmFtcDsmYW1wOwomIzQzOwkgICAgc2tiX2Nvdyhza2IsIDApKSB7CiYjNDM7CQlmcmFtZS0mZ3Q7cG9ydF9yY3YtJmd0O2Rldi0mZ3Q7c3RhdHMucnhfZHJvcHBlZCYjNDM7JiM0Mzs7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiBORVRfWE1JVF9EUk9QOwomIzQzOwl9CiYjNDM7CiAJaWYgKGZyYW1lLSZndDtwb3J0X3Jjdi0mZ3Q7dHlwZSA9PSBIU1JfUFRfTUFTVEVSKSB7CiAJCWhzcl9hZGRyX3N1YnN0X2Rlc3QoZnJhbWUtJmd0O25vZGVfc3JjLCBza2IsIHBvcnQpOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZQppbmRleCAzMWZiOTMyNmNmNTMzLi5hZWFlN2YzZDZkZDE0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUKQEAgLTcsNiAmIzQzOzcsNyBAQCBURVNUX1BST0dTIDo9IFwKIAloc3JfcmVkYm94LnNoIFwKIAlsaW5rX2ZhdWx0cy5zaCBcCiAJcHJwX3Bpbmcuc2ggXAomIzQzOwloc3Jfc2hhcmVkX211dGF0aW9uLnNoIFwKICMgZW5kIG9mIFRFU1RfUFJPR1MKIAogVEVTVF9GSUxFUyAmIzQzOz0gaHNyX2NvbW1vbi5zaApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3Jfc2hhcmVkX211dGF0aW9uLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3Jfc2hhcmVkX211dGF0aW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAuLjI3MTAzNTQxY2Q3OGMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9zaGFyZWRfbXV0YXRpb24uc2gKQEAgLTAsMCAmIzQzOzEsMjEzIEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7IwomIzQzOyMgVmVyaWZ5IHRoYXQgcGVyLWVncmVzcyBtdXRhdGlvbnMgb2Ygc2hhcmVkIHNrYiBkYXRhIGFyZSBwcml2YXRlOgomIzQzOyMKJiM0MzsjIEYyIChwYXRoL0xBTiBJRCk6IG9uIGFuIGFmZmVjdGVkIGtlcm5lbCB0aGUgc2Vjb25kIHNsYXZlJiMzOTtzIExBTi1JRCB3cml0ZQomIzQzOyMgbGFuZHMgaW4gdGhlIGZpcnN0IHNsYXZlJiMzOTtzIHN0aWxsLXF1ZXVlZCBjbG9uZTsgd2l0aCBhIG5ldGVtIGRlbGF5IG9uCiYjNDM7IyBzbGF2ZSBBLCBpbmplY3RlZCBmcmFtZXMgbGVhdmUgQSBjYXJyeWluZyBCJiMzOTtzIExBTiBJRC4KJiM0MzsjCiYjNDM7IyBGMSAoUmVkQm94IHNvdXJjZSBNQUMpOiBvbiBhbiBhZmZlY3RlZCBrZXJuZWwgYW4gSFNSLXRhZ2dlZCBtdWx0aWNhc3QKJiM0MzsjIGZyYW1lIHJlY2VpdmVkIG9uIGEgUmVkQm94IHNsYXZlIGlzIGNsb25lZCBmb3IgbWFzdGVyIGFuZCBpbnRlcmxpbmssCiYjNDM7IyBhbmQgdGhlIGludGVybGluayYjMzk7cyBSZWRCb3gtTUFDIHJld3JpdGUgbGFuZHMgaW4gdGhlIG1hc3RlciBjbG9uZSYjMzk7cwomIzQzOyMgYnVmZmVyLCBzbyB0aGUgbG9jYWwgc3RhY2sgcmVjZWl2ZXMgdGhlIFJlZEJveCBNQUMgaW5zdGVhZCBvZiB0aGUKJiM0MzsjIG9yaWdpbmF0aW5nIG5vZGUmIzM5O3MgTUFDLgomIzQzOwomIzQzO2lwdjY9ZmFsc2UKJiM0MzsKJiM0Mztzb3VyY2UgLi9oc3JfY29tbW9uLnNoCiYjNDM7CiYjNDM7RFVSPTUKJiM0MzsKJiM0MztyZXF1aXJlKCkKJiM0Mzt7CiYjNDM7CWNvbW1hbmQgLXYgJiMzNDskMSYjMzQ7ICZndDsvZGV2L251bGwgMiZndDsmYW1wOzEgJmFtcDsmYW1wOyByZXR1cm4gMAomIzQzOwllY2hvICYjMzQ7U0tJUDogJDEgbm90IGF2YWlsYWJsZSYjMzQ7CiYjNDM7CWV4aXQgJGtzZnRfc2tpcAomIzQzO30KJiM0MzsKJiM0MztyZXF1aXJlIGlwCiYjNDM7cmVxdWlyZSB0YwomIzQzO3JlcXVpcmUgcHl0aG9uMwomIzQzOwomIzQzO3RyYXAgY2xlYW51cF9hbGxfbnMgRVhJVAomIzQzOwomIzQzOyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGMjogTEFOLUlEIGlzb2xhdGlvbgomIzQzOyMgUFJQIERBTlAgKHByb3RvIDEpLCBBRl9QQUNLRVQgcHJlLXRhZ2dlZCBpbmplY3Rpb24sIG5ldGVtIG9uIHNsYXZlIEEuCiYjNDM7cnVuX2YyKCkKJiM0Mzt7CiYjNDM7CXNldHVwX25zIG5zIDImZ3Q7L2Rldi9udWxsIHx8IHJldHVybiAka3NmdF9za2lwCiYjNDM7CW5zeCgpIHsgaXAgbmV0bnMgZXhlYyAmIzM0OyRucyYjMzQ7ICYjMzQ7JEAmIzM0OzsgfQomIzQzOwomIzQzOwkjIFByb2JlIHNjaF9uZXRlbSBpbnNpZGUgdGhlIGRpc3Bvc2FibGUgbmFtZXNwYWNlIG9ubHkuCiYjNDM7CWlmICEgbnN4IHRjIHFkaXNjIGFkZCBkZXYgbG8gcm9vdCBuZXRlbSBkZWxheSAxbXMgMiZndDsvZGV2L251bGw7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtTS0lQOiBzY2hfbmV0ZW0gbm90IGF2YWlsYWJsZSYjMzQ7CiYjNDM7CQlyZXR1cm4gJGtzZnRfc2tpcAomIzQzOwlmaQomIzQzOwluc3ggdGMgcWRpc2MgZGVsIGRldiBsbyByb290IDImZ3Q7L2Rldi9udWxsCiYjNDM7CiYjNDM7CSMgQ2FwYWJpbGl0eSBwcm9iZXMgZW5kIGhlcmU7IHNldHVwIG9yIHJ1bnRpbWUgZmFpbHVyZSBiZWxvdyBpcyBGQUlMLgomIzQzOwluc3ggaXAgbGluayBhZGQgdkEgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2QXAgfHwgeyBlY2hvICYjMzQ7RkFJTDogdmV0aCBBJiMzNDs7IHJldHVybiAxOyB9CiYjNDM7CW5zeCBpcCBsaW5rIGFkZCB2QiB0eXBlIHZldGggcGVlciBuYW1lIHZCcCB8fCB7IGVjaG8gJiMzNDtGQUlMOiB2ZXRoIEImIzM0OzsgcmV0dXJuIDE7IH0KJiM0MzsJZm9yIGkgaW4gdkEgdkIgdkFwIHZCcDsgZG8KJiM0MzsJCW5zeCBpcCBsaW5rIHNldCAmIzM0OyRpJiMzNDsgdXAgfHwgeyBlY2hvICYjMzQ7RkFJTDogJGkgdXAmIzM0OzsgcmV0dXJuIDE7IH0KJiM0MzsJZG9uZQomIzQzOwluc3ggaXAgbGluayBhZGQgbmFtZSBwcnAwIHR5cGUgaHNyIHNsYXZlMSB2QSBzbGF2ZTIgdkIgc3VwZXJ2aXNpb24gNDUgcHJvdG8gMSAyJmd0Oy9kZXYvbnVsbAomIzQzOwlpZiBbICQ/IC1uZSAwIF07IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtTS0lQOiBIU1IvUFJQIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBrZXJuZWwmIzM0OwomIzQzOwkJcmV0dXJuICRrc2Z0X3NraXAKJiM0MzsJZmkKJiM0MzsJbnN4IGlwIGxpbmsgc2V0IHBycDAgdXAgfHwgeyBlY2hvICYjMzQ7RkFJTDogcHJwMCB1cCYjMzQ7OyByZXR1cm4gMTsgfQomIzQzOwluc3ggdGMgcWRpc2MgYWRkIGRldiB2QSByb290IG5ldGVtIGRlbGF5IDIwMG1zIHx8IHsgZWNobyAmIzM0O0ZBSUw6IG5ldGVtJiMzNDs7IHJldHVybiAxOyB9CiYjNDM7CiYjNDM7CW5zeCBweXRob24zIC9kZXYvc3RkaW4gJiMzNDskRFVSJiMzNDsgJmx0OyZsdDsmIzM5O1BZRjImIzM5OwomIzQzO2ltcG9ydCBzb2NrZXQsIHN0cnVjdCwgc2VsZWN0LCBzeXMsIHRpbWUKJiM0MzsKJiM0MztkdXIgPSBpbnQoc3lzLmFyZ3ZbMV0pCiYjNDM7ZGVmIGxhbmlkKHBrdCk6CiYjNDM7ICAgIGlmIGxlbihwa3QpICZsdDsgMjAgb3IgcGt0Wy0yOl0gIT0gYiYjMzQ7XHg4OFx4ZmImIzM0OzoKJiM0MzsgICAgICAgIHJldHVybiBOb25lCiYjNDM7ICAgIHJldHVybiAocGt0Wy00XSAmZ3Q7Jmd0OyA0KSAmYW1wOyAweEYKJiM0MzsKJiM0MztTUkMgPSBieXRlcy5mcm9taGV4KG9wZW4oJiMzNDsvc3lzL2NsYXNzL25ldC9wcnAwL2FkZHJlc3MmIzM0OykucmVhZCgpLnJlcGxhY2UoJiMzNDs6JiMzNDssICYjMzQ7JiMzNDspKQomIzQzO0RTVCA9IGJ5dGVzLmZyb21oZXgoJiMzNDswMmFhYmJjY2RkMDEmIzM0OykKJiM0MztQQVkgPSBieXRlcyhyYW5nZSg0NikpCiYjNDM7cmN0MCA9IHN0cnVjdC5wYWNrKCYjMzQ7Jmd0O0gmIzM0OywgMCkgJiM0Mzsgc3RydWN0LnBhY2soJiMzNDsmZ3Q7SCYjMzQ7LCA1MiAmYW1wOyAweDBGRkYpICYjNDM7IGImIzM0O1x4ODhceGZiJiMzNDsKJiM0MztmcmFtZSA9IERTVCAmIzQzOyBTUkMgJiM0MzsgYiYjMzQ7XHgwOFx4MDAmIzM0OyAmIzQzOyBQQVkgJiM0MzsgcmN0MAomIzQzOwomIzQzO3R4ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcpOyB0eC5iaW5kKCgmIzM0O3BycDAmIzM0OywgMCkpCiYjNDM7c0EgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVywKJiM0MzsgICAgICAgIHNvY2tldC5udG9ocygweDAwMDMpKQomIzQzO3NBLmJpbmQoKCYjMzQ7dkFwJiMzNDssIDApKQomIzQzO3NCID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcsCiYjNDM7ICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSkKJiM0MztzQi5iaW5kKCgmIzM0O3ZCcCYjMzQ7LCAwKSkKJiM0MztzQS5zZXRibG9ja2luZyhGYWxzZSk7IHNCLnNldGJsb2NraW5nKEZhbHNlKQomIzQzO2ZvciBfIGluIHJhbmdlKDIwMCk6CiYjNDM7ICAgIHR4LnNlbmQoZnJhbWUpOyB0aW1lLnNsZWVwKDAuMDAxKQomIzQzOwomIzQzO2EsIGIgPSBbXSwgW10KJiM0MztlbmQgPSB0aW1lLnRpbWUoKSAmIzQzOyBkdXIKJiM0Mzt3aGlsZSB0aW1lLnRpbWUoKSAmbHQ7IGVuZDoKJiM0MzsgICAgciwgXywgXyA9IHNlbGVjdC5zZWxlY3QoW3NBLCBzQl0sIFtdLCBbXSwgMC4zKQomIzQzOyAgICBmb3IgcyBpbiByOgomIzQzOyAgICAgICAgcGt0ID0gcy5yZWN2KDY1NTM1KQomIzQzOyAgICAgICAgaWYgKHBrdFs6Nl0gIT0gRFNUIG9yIHBrdFs2OjEyXSAhPSBTUkMgb3IgcGt0WzEyOjE0XSAhPSBiJiMzNDtceDA4XHgwMCYjMzQ7CiYjNDM7ICAgICAgICAgICAgICAgIG9yIHBrdFsxNDoxNCAmIzQzOyBsZW4oUEFZKV0gIT0gUEFZKToKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgbGlkID0gbGFuaWQocGt0KQomIzQzOyAgICAgICAgaWYgbGlkIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIChhIGlmIHMgaXMgc0EgZWxzZSBiKS5hcHBlbmQobGlkKQomIzQzOwomIzQzO3ByaW50KCYjMzQ7QS1zaWRlIGNvdW50PSVkIGxhbiBpZHM9JXMmIzM0OyAlIChsZW4oYSksIHNvcnRlZChzZXQoYSkpKSkKJiM0MztwcmludCgmIzM0O0Itc2lkZSBjb3VudD0lZCBsYW4gaWRzPSVzJiMzNDsgJSAobGVuKGIpLCBzb3J0ZWQoc2V0KGIpKSkpCiYjNDM7aWYgbGVuKGEpICZsdDsgMTUwIG9yIGxlbihiKSAmbHQ7IDE1MDoKJiM0MzsgICAgcHJpbnQoJiMzNDtGQUlMOiB0b28gZmV3IGluamVjdGVkIGZyYW1lcyBjYXB0dXJlZCAoQT0lZCBCPSVkLCBzZW50IDIwMCkmIzM0OyAlIChsZW4oYSksIGxlbihiKSkpCiYjNDM7ICAgIHN5cy5leGl0KDEpCiYjNDM7YmFkX2EgPSBbeCBmb3IgeCBpbiBhIGlmICh4ICZhbXA7IDEpICE9IDBdCiYjNDM7YmFkX2IgPSBbeCBmb3IgeCBpbiBiIGlmICh4ICZhbXA7IDEpICE9IDFdCiYjNDM7aWYgYmFkX2Egb3IgYmFkX2I6CiYjNDM7ICAgIHByaW50KCYjMzQ7RkFJTDogc2hhcmVkLW11dGF0aW9uIGNvcnJ1cHRpb24gLSBBOiAlZC8lZCB3cm9uZy1sYW4sIEI6ICVkLyVkIHdyb25nLWxhbiYjMzQ7CiYjNDM7ICAgICAgICAgICUgKGxlbihiYWRfYSksIGxlbihhKSwgbGVuKGJhZF9iKSwgbGVuKGIpKSkKJiM0MzsgICAgc3lzLmV4aXQoMSkKJiM0MztwcmludCgmIzM0O1BBU1M6IHBlci1lZ3Jlc3MgTEFOIElEcyBpc29sYXRlZCAoQSBhbGwgYml0MD0wLCBCIGFsbCBiaXQwPTEpJiMzNDspCiYjNDM7c3lzLmV4aXQoMCkKJiM0MztQWUYyCiYjNDM7fQomIzQzOwomIzQzOyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEYxOiBSZWRCb3ggc291cmNlLU1BQyBwcml2YWN5CiYjNDM7IyBIU1IgUmVkQm94IChwcm90byAwKSwgdGFnZ2VkIG11bHRpY2FzdCBmcm9tIGEgc2xhdmU6IG1hc3RlciBtdXN0IGtlZXAKJiM0MzsjIHRoZSBub2RlIE1BQywgaW50ZXJsaW5rIG11c3QgY2FycnkgdGhlIFJlZEJveCBNQUMuCiYjNDM7cnVuX2YxKCkKJiM0Mzt7CiYjNDM7CXNldHVwX25zIG5zIDImZ3Q7L2Rldi9udWxsIHx8IHJldHVybiAka3NmdF9za2lwCiYjNDM7CW5zeCgpIHsgaXAgbmV0bnMgZXhlYyAmIzM0OyRucyYjMzQ7ICYjMzQ7JEAmIzM0OzsgfQomIzQzOwomIzQzOwluc3ggaXAgbGluayBhZGQgdkEgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2QXAgfHwgeyBlY2hvICYjMzQ7RkFJTDogdmV0aCBBJiMzNDs7IHJldHVybiAxOyB9CiYjNDM7CW5zeCBpcCBsaW5rIGFkZCB2QiB0eXBlIHZldGggcGVlciBuYW1lIHZCcCB8fCB7IGVjaG8gJiMzNDtGQUlMOiB2ZXRoIEImIzM0OzsgcmV0dXJuIDE7IH0KJiM0MzsJbnN4IGlwIGxpbmsgYWRkIHZJIHR5cGUgdmV0aCBwZWVyIG5hbWUgdklwIHx8IHsgZWNobyAmIzM0O0ZBSUw6IHZldGggSSYjMzQ7OyByZXR1cm4gMTsgfQomIzQzOwlmb3IgaSBpbiB2QSB2QiB2SSB2QXAgdkJwIHZJcDsgZG8KJiM0MzsJCW5zeCBpcCBsaW5rIHNldCAmIzM0OyRpJiMzNDsgdXAgfHwgeyBlY2hvICYjMzQ7RkFJTDogJGkgdXAmIzM0OzsgcmV0dXJuIDE7IH0KJiM0MzsJZG9uZQomIzQzOwluc3ggaXAgbGluayBhZGQgbmFtZSBoc3IwIHR5cGUgaHNyIHNsYXZlMSB2QSBzbGF2ZTIgdkIgaW50ZXJsaW5rIHZJIFwKJiM0MzsJCXN1cGVydmlzaW9uIDQ1IHByb3RvIDAgMiZndDsvZGV2L251bGwKJiM0MzsJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7U0tJUDogSFNSIFJlZEJveCBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMga2VybmVsJiMzNDsKJiM0MzsJCXJldHVybiAka3NmdF9za2lwCiYjNDM7CWZpCiYjNDM7CW5zeCBpcCBsaW5rIHNldCBoc3IwIHVwIHx8IHsgZWNobyAmIzM0O0ZBSUw6IGhzcjAgdXAmIzM0OzsgcmV0dXJuIDE7IH0KJiM0MzsKJiM0MzsJbnN4IHB5dGhvbjMgL2Rldi9zdGRpbiAmbHQ7Jmx0OyYjMzk7UFlGMSYjMzk7CiYjNDM7aW1wb3J0IHNvY2tldCwgc2VsZWN0LCBzeXMsIHRpbWUKJiM0MzsKJiM0MztOT0RFICA9IGJ5dGVzLmZyb21oZXgoJiMzNDswMjExMjIzMzQ0NTUmIzM0OykKJiM0MztNQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJiMzNDswMTAwNWUwMDAwMDEmIzM0OykKJiM0MztSQiAgICA9IGJ5dGVzLmZyb21oZXgob3BlbigmIzM0Oy9zeXMvY2xhc3MvbmV0L3ZJL2FkZHJlc3MmIzM0OykucmVhZCgpLnJlcGxhY2UoJiMzNDs6JiMzNDssICYjMzQ7JiMzNDspKQomIzQzO1BBWSAgID0gYnl0ZXMocmFuZ2UoNDYpKQomIzQzOwomIzQzO2RlZiBmcmFtZShzZXEpOgomIzQzOyAgICB0YWcgPSAoKDEgJmx0OyZsdDsgMTIpIHwgbGVuKFBBWSkpLnRvX2J5dGVzKDIsICYjMzQ7YmlnJiMzNDspICYjNDM7IHNlcS50b19ieXRlcygyLCAmIzM0O2JpZyYjMzQ7KSAmIzQzOyBiJiMzNDtceDA4XHgwMCYjMzQ7CiYjNDM7ICAgIHJldHVybiBNQ0FTVCAmIzQzOyBOT0RFICYjNDM7IGImIzM0O1x4ODlceDJmJiMzNDsgJiM0MzsgdGFnICYjNDM7IFBBWQomIzQzOwomIzQzO3R4ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcpOyB0eC5iaW5kKCgmIzM0O3ZBcCYjMzQ7LCAwKSkKJiM0MztzbSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXLAomIzQzOyAgICAgICAgc29ja2V0Lm50b2hzKDB4MDAwMykpCiYjNDM7c20uYmluZCgoJiMzNDtoc3IwJiMzNDssIDApKQomIzQzO3NpID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcsCiYjNDM7ICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSkKJiM0MztzaS5iaW5kKCgmIzM0O3ZJcCYjMzQ7LCAwKSkKJiM0MztzbS5zZXRibG9ja2luZyhGYWxzZSk7IHNpLnNldGJsb2NraW5nKEZhbHNlKQomIzQzOwomIzQzO2ZvciBpIGluIHJhbmdlKDMpOgomIzQzOyAgICB0eC5zZW5kKGZyYW1lKGkgJiM0MzsgMSkpOyB0aW1lLnNsZWVwKDAuMDUpCiYjNDM7CiYjNDM7bV9zcmMgPSBpX3NyYyA9IE5vbmUKJiM0MztlbmQgPSB0aW1lLnRpbWUoKSAmIzQzOyA0CiYjNDM7d2hpbGUgdGltZS50aW1lKCkgJmx0OyBlbmQgYW5kIChtX3NyYyBpcyBOb25lIG9yIGlfc3JjIGlzIE5vbmUpOgomIzQzOyAgICByLCBfLCBfID0gc2VsZWN0LnNlbGVjdChbc20sIHNpXSwgW10sIFtdLCAwLjMpCiYjNDM7ICAgIGZvciBzIGluIHI6CiYjNDM7ICAgICAgICBwa3QgPSBzLnJlY3YoNjU1MzUpCiYjNDM7ICAgICAgICAjIGV4YWN0IGZsb3c6IGRzdCwgcG9zdC1zdHJpcCBFdGhlclR5cGUsIGV4YWN0IHBheWxvYWQsIG1pbiBsZW5ndGg7CiYjNDM7ICAgICAgICAjIGhfc291cmNlIGlzIHRoZSBhc3NlcnRlZCB2YWx1ZSBhbmQgbXVzdCBOT1QgYmUgZmlsdGVyZWQgb24KJiM0MzsgICAgICAgIGlmIChsZW4ocGt0KSAmbHQ7IDYwIG9yIHBrdFs6Nl0gIT0gTUNBU1Qgb3IgcGt0WzEyOjE0XSAhPSBiJiMzNDtceDA4XHgwMCYjMzQ7CiYjNDM7ICAgICAgICAgICAgICAgIG9yIHBrdFsxNDoxNCAmIzQzOyBsZW4oUEFZKV0gIT0gUEFZKToKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgaWYgcyBpcyBzbSBhbmQgbV9zcmMgaXMgTm9uZToKJiM0MzsgICAgICAgICAgICBtX3NyYyA9IHBrdFs2OjEyXQomIzQzOyAgICAgICAgZWxpZiBzIGlzIHNpIGFuZCBpX3NyYyBpcyBOb25lOgomIzQzOyAgICAgICAgICAgIGlfc3JjID0gcGt0WzY6MTJdCiYjNDM7CiYjNDM7cHJpbnQoJiMzNDttYXN0ZXIgaF9zb3VyY2UgICAgPSYjMzQ7LCBtX3NyYy5oZXgoKSBpZiBtX3NyYyBlbHNlIE5vbmUpCiYjNDM7cHJpbnQoJiMzNDtub2RlIE1BQyAgICAgICAgICAgPSYjMzQ7LCBOT0RFLmhleCgpKQomIzQzO3ByaW50KCYjMzQ7aW50ZXJsaW5rIGhfc291cmNlID0mIzM0OywgaV9zcmMuaGV4KCkgaWYgaV9zcmMgZWxzZSBOb25lKQomIzQzO3ByaW50KCYjMzQ7cmVkYm94IE1BQyAgICAgICAgID0mIzM0OywgUkIuaGV4KCkpCiYjNDM7aWYgaV9zcmMgIT0gUkI6CiYjNDM7ICAgIHByaW50KCYjMzQ7RkFJTDogaW50ZXJsaW5rIGRpZCBub3QgY2FycnkgdGhlIFJlZEJveCBNQUMmIzM0OykKJiM0MzsgICAgc3lzLmV4aXQoMSkKJiM0MztpZiBtX3NyYyAhPSBOT0RFOgomIzQzOyAgICBwcmludCgmIzM0O0ZBSUw6IG1hc3RlciByZWNlaXZlZCAlcyBpbnN0ZWFkIG9mIHRoZSBub2RlIE1BQyAmIzM0OwomIzQzOyAgICAgICAgICAmIzM0OyhzaGFyZWQtbXV0YXRpb24gY29ycnVwdGlvbikmIzM0OyAlIChtX3NyYy5oZXgoKSBpZiBtX3NyYyBlbHNlICYjMzQ7bm90aGluZyYjMzQ7KSkKJiM0MzsgICAgc3lzLmV4aXQoMSkKJiM0MztwcmludCgmIzM0O1BBU1M6IG1hc3RlciBrZXB0IG5vZGUgTUFDLCBpbnRlcmxpbmsga2VwdCBSZWRCb3ggTUFDJiMzNDspCiYjNDM7c3lzLmV4aXQoMCkKJiM0MztQWUYxCiYjNDM7fQomIzQzOwomIzQzO3JjPTAKJiM0MzsKJiM0MztydW5fZjIKJiM0MztyZXQ9JD8KJiM0MztbICYjMzQ7JHJldCYjMzQ7IC1lcSAmIzM0OyRrc2Z0X3NraXAmIzM0OyBdICZhbXA7JmFtcDsgZXhpdCAmIzM0OyRrc2Z0X3NraXAmIzM0OwomIzQzO1sgJiMzNDskcmV0JiMzNDsgLWVxIDAgXSB8fCByYz0xCiYjNDM7CiYjNDM7cnVuX2YxCiYjNDM7cmV0PSQ/CiYjNDM7WyAmIzM0OyRyZXQmIzM0OyAtZXEgJiMzNDska3NmdF9za2lwJiMzNDsgXSAmYW1wOyZhbXA7IGV4aXQgJiMzNDska3NmdF9za2lwJiMzNDsKJiM0MztbICYjMzQ7JHJldCYjMzQ7IC1lcSAwIF0gfHwgcmM9MQomIzQzOwomIzQzO2lmIFsgJHJjIC1lcSAwIF07IHRoZW4KJiM0MzsJZWNobyAmIzM0O2hzcl9zaGFyZWRfbXV0YXRpb246IHBlci1lZ3Jlc3MgbXV0YXRpb24gaXNvbGF0aW9uIChGMSYjNDM7RjIpIFsgT0sgXSYjMzQ7CiYjNDM7ZWxzZQomIzQzOwllY2hvICYjMzQ7aHNyX3NoYXJlZF9tdXRhdGlvbjogcGVyLWVncmVzcyBtdXRhdGlvbiBpc29sYXRpb24gWyBGQUlMIF0gcmM9JHJjJiMzNDsgMSZndDsmYW1wOzIKJiM0MztmaQomIzQzO2V4aXQgJHJjCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MDQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIU1IgUGF0Y2ggYW5kIGl0cyBJbXBsaWNhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2gg4oCTIHNlZW1zIGxpa2UgYSBmaXggZm9yIGEgc2hhcmVkLW11dGF0aW9uIGlzc3VlIGluIEhTUiBhbmQgUFJQLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmV0L2hzci9oc3JfZm9yd2FyZC5jYCBmaWxlLiBJbnRlcmVzdGluZy4gVGhlIHBhdGNoIGlzIGFsc28gYWRkaW5nIGEgbmV3IHRlc3QsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9zaGFyZWRfbXV0YXRpb24uc2hgLCB3aGljaCBzaG91bGQgYmUgaGVscGZ1bCBmb3IgdmFsaWRhdGluZyB0aGUgZml4LgoKVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0sIGFzIEkgdW5kZXJzdGFuZCBpdCwgbGllcyBpbiBob3cgZnJhbWVzIGFyZSBjbG9uZWQgd2hlbiBzZW50IG91dCB0byBtdWx0aXBsZSBlZ3Jlc3MgcG9ydHMuIFRoZSBmaXggaW52b2x2ZXMgdXNpbmcgYHNrYl9jbG9uZWAgYW5kIGBza2JfY293YCBpbiB0aGUgYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCBhbmQgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCBmdW5jdGlvbnMgdG8gZW5zdXJlIHRoYXQgbW9kaWZ5aW5nIHRoZSBwYXRoIElEIG9yIExBTiBJRCBvbiBhIGNsb25lZCBmcmFtZSBkb2VzbiYjMzk7dCBjb3JydXB0IHRoZSBvcmlnaW5hbCBkYXRhLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHNoYXJlZCBkYXRhIGNvcnJ1cHRpb24gaXMgYSBuYXN0eSBidWcuIFRoZSBhZGRpdGlvbiBvZiBhbiBgc2tiX2Nvd2AgY2hlY2sgaW4gYGhzcl94bWl0YCBmb3IgaW50ZXJsaW5rLWJvdW5kIHNrYnMgc2VlbXMgbGlrZSBhIG5lY2Vzc2FyeSBwcmVjYXV0aW9uIHRvIGNhdGNoIGFueXRoaW5nIHRoYXQgbWF5IGhhdmUgYmVlbiBtaXNzZWQuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGFjdHVhbCBjb2RlIGluIGBuZXQvaHNyL2hzcl9mb3J3YXJkLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIEhTUiBsb2dpYyByZXNpZGVzLCBzbyB1bmRlcnN0YW5kaW5nIGl0IHRob3JvdWdobHkgaXMgY3J1Y2lhbC4gR2l2ZW4gdGhhdCBIU1IgaXMgYSBuZXR3b3JrIHByb3RvY29sLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY29kZSBwYXRoIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSB3aXRoaW4gbXkgc3RhbmRhcmQgUUVNVSBzZXR1cC4gU2luY2UgSFNSIGlzIGltcGxlbWVudGVkIGFzIGEgc29mdHdhcmUgbmV0d29yayBkZXZpY2UsIHNpbWlsYXIgdG8gYSBicmlkZ2Ugb3IgVkxBTiwgdGhlbiBJIHdvdWxkIGV4cGVjdCBpdCB0byBiZS4KClRoZSB0ZXN0IHNjcmlwdCBpdHNlbGYgY29uZmlybXMgdGhpcywgdXNpbmcgYGlwIGxpbmsgYWRkIG5hbWUgcHJwMCB0eXBlIGhzciBzbGF2ZTEgdkEgc2xhdmUyIHZCIHN1cGVydmlzaW9uIDQ1IHByb3RvIDFgIHdoaWNoIHN1Z2dlc3RzIHRoYXQgaXQmIzM5O3MgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlLiBUaGlzIGNvbmZpcm1zIG15IHVuZGVyc3RhbmRpbmcuCgpOZXh0LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGhvdyBIU1IgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bGwgc2VhcmNoIGZvciB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIOKAkyBsaWtlbHkgbG9va2luZyBmb3IgJiMzNDtoc3ImIzM0OyBpbiBgbmV0L2hzci9LY29uZmlnYCBvciBhIHNpbWlsYXIgZmlsZS4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbmV0d29yayBzdGFjay4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIGtub3cgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYSBjb21wbGV0ZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIU1ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hzci9LY29uZmlnLTUtXG5uZXQvaHNyL0tjb25maWc6Njpjb25maWcgSFNSXG5uZXQvaHNyL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0hpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kgKEhTUiBcdTAwMjYgUFJQKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyODkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBDT05GSUdfSFNSKioKCk9rYXksIHNvIGBDT05GSUdfSFNSYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuIE15IHRhc2sgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcmFtaWZpY2F0aW9ucy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIGhvdyBpdCYjMzk7cyBhZmZlY3RpbmcgdGhpbmdzLgoKRmlyc3QsIEkgbmVlZCB0byBsb29rIGF0IHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgYXMgYSByZXN1bHQgb2YgZW5hYmxpbmcvZGlzYWJsaW5nIGBDT05GSUdfSFNSYC4gSXQgc2VlbXMgbGlrZSBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBhbmQgYGhzcl94bWl0YCBhcmUgdGhlIGFyZWFzIG9mIGludGVyZXN0LCB0aGUgc3BlY2lmaWMgZGV0YWlscyBvZiB0aGVzZSBmdW5jdGlvbiBjYWxscyBhcmUgdmVyeSBpbXBvcnRhbnQuIE5vdywgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGVpciByb2xlIGFuZCBhY2Nlc3NpYmlsaXR5IEkgaGF2ZSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGludGVybmFsIChzdGF0aWMpIG9yIHZpc2libGUgb3V0c2lkZSB0aGUgbW9kdWxlIChleHBvcnRlZCkuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIHJlcXVpcmUgdG8gZGV0ZXJtaW5lIGhvdyB0aGlzIGNvbmZpZ3VyYXRpb24gY2hhbmdlIGFmZmVjdHMgdGhlIGxhcmdlciBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTg6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9kZXZpY2UuYz02MjE9c3RhdGljIGNvbnN0IHN0cnVjdCBoc3JfcHJvdG9fb3BzIGhzcl9vcHMgPSB7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02MjItXHQuc2VuZF9zdl9mcmFtZSA9IHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lLFxubmV0L2hzci9oc3JfZGV2aWNlLmM6NjIzOlx0LmNyZWF0ZV90YWdnZWRfZnJhbWUgPSBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZSxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTYyNC1cdC5nZXRfdW50YWdnZWRfZnJhbWUgPSBoc3JfZ2V0X3VudGFnZ2VkX2ZyYW1lLFxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz0yODg9c3RhdGljIHN0cnVjdCBza19idWZmICpoc3JfZmlsbF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtMzMwLSAqL1xubmV0L2hzci9oc3JfZm9yd2FyZC5jOjMzMTpzdHJ1Y3Qgc2tfYnVmZiAqaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy0zMzItXHRcdFx0XHRcdHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmg9MTc9c3RydWN0IHNrX2J1ZmYgKnBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMTgtXHRcdFx0XHRcdHN0cnVjdCBoc3JfcG9ydCAqcG9ydCk7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmg6MTk6c3RydWN0IHNrX2J1ZmYgKmhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMjAtXHRcdFx0XHRcdHN0cnVjdCBoc3JfcG9ydCAqcG9ydCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTg6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk3MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyBGdW5jdGlvbiBBdHRyaWJ1dGVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnM6IGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGFuZCBgaHNyX3htaXRgLiBSaWdodCBhd2F5LCB0aGUgY3JpdGljYWwgZGlzdGluY3Rpb24ganVtcHMgb3V0LiBJJiMzOTt2ZSBnb3QgdG8gZGV0ZXJtaW5lIHdoaWNoIG9mIHRoZXNlIGFyZSBzdGF0aWMgYW5kIHdoaWNoIGFyZW4mIzM5O3QuIENsZWFybHksIGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAgaXMgKm5vdCogYSBzdGF0aWMgZnVuY3Rpb24uIEFsc28sIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAgaXMgKmFsc28qIG5vdCBhIHN0YXRpYyBmdW5jdGlvbi4gT24gdGhlIG90aGVyIGhhbmQsIGBoc3JfeG1pdGAgaXMsIGluIGZhY3QsIHN0YXRpYy4gVGhpcyBpcyB0aGUga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLCBhbmQgd2hlcmUgbXkgYW5hbHlzaXMgd2lsbCBsaWtlbHkgZGl2ZXJnZSwgZGVwZW5kaW5nIG9uIHRoZSBsYXJnZXIgY29udGV4dCBvZiB3aGF0IGlzIGJlaW5nIGV4YW1pbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hzcl94bWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2hzci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hzci9oc3JfZm9yd2FyZC5jPTQyND1zdGF0aWMgdm9pZCBoc3JfZGVsaXZlcl9tYXN0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNDQ0LVxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjQ0NTpzdGF0aWMgaW50IGhzcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy00NDYtXHRcdCAgICBzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz01NjA9c3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfZG8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNjIxLVx0XHR9IGVsc2Uge1xubmV0L2hzci9oc3JfZm9yd2FyZC5jOjYyMjpcdFx0XHRpZiAoIWhzcl94bWl0KHNrYiwgcG9ydCwgZnJhbWUpKVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTYyMy1cdFx0XHRcdGlmIChwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0EgfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDg5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIEhTUiBQYWNrZXQgRm9yd2FyZGluZyBQYXRoKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBIU1IgcGFja2V0IHRyYW5zbWlzc2lvbiBwcm9jZXNzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGBoc3JfeG1pdGAuIEkgc2VlIGl0JiMzOTtzIGRlY2xhcmVkIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBTdGF0aWMgbWVhbnMgaXQmIzM5O3MgbGltaXRlZCBpbiBzY29wZSwgbGlrZWx5IGludGVybmFsIHRvIGl0cyBjb21waWxhdGlvbiB1bml0LiBOb3csIGdpdmVuIHRoYXQgYGhzcl94bWl0YCBpcyBiZWluZyBjYWxsZWQgYnkgYGhzcl9mb3J3YXJkX2RvYCwgSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoZSBjYWxsaW5nIGZ1bmN0aW9uJiMzOTtzIHNjb3BlLiBJcyBgaHNyX2ZvcndhcmRfZG9gIGFsc28gc3RhdGljPyBJZiBzbywgdGhpcyBzdWdnZXN0cyBhIHRpZ2h0LCBsb2NhbGl6ZWQgaGFuZGxpbmcgb2YgcGFja2V0IGZvcndhcmRpbmcgd2l0aGluIGEgc3BlY2lmaWMgbW9kdWxlIG9yIGNvbXBvbmVudC4gVGhlIGxpbWl0ZWQgdmlzaWJpbGl0eSBpbXBsaWVzIGEgd2VsbC1kZWZpbmVkIGludGVyYWN0aW9uIHBvaW50LCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gYGhzcl9mb3J3YXJkX2RvYCYjMzk7cyBzdGF0aWMgbmF0dXJlIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBkZWJ1Z2dpbmcgYW5kIG1vZGlmaWNhdGlvbi4gSSYjMzk7bGwgY2hlY2sgaXRzIGRlY2xhcmF0aW9uIG5vdyB0byBjb25maXJtIG15IGh5cG90aGVzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hzcl9mb3J3YXJkX2RvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2hzci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hzci9oc3JfZm9yd2FyZC5jPTQ5Mj1ib29sIGhzcl9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNTU5LSAqL1xubmV0L2hzci9oc3JfZm9yd2FyZC5jOjU2MDpzdGF0aWMgdm9pZCBoc3JfZm9yd2FyZF9kbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTU2MS17XG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jPTc3NT12b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc4My1cdGhzcl9yZWdpc3Rlcl9mcmFtZV9pbihmcmFtZS5ub2RlX3NyYywgcG9ydCwgZnJhbWUuc2VxdWVuY2VfbnIpO1xubmV0L2hzci9oc3JfZm9yd2FyZC5jOjc4NDpcdGhzcl9mb3J3YXJkX2RvKFx1MDAyNmZyYW1lKTtcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03ODUtXHRyY3VfcmVhZF91bmxvY2soKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA0MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYGhzcl9mb3J3YXJkX3NrYmAgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgYGhzcl9mb3J3YXJkX3NrYmAgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhhdCBpdCYjMzk7cyAqbm90KiBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG1vcmUgY2xlYXJseS4gVGhpcyBtZWFucyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB0byBmaWd1cmUgb3V0IHdoeSBpdCYjMzk7cyBzdHJ1Y3R1cmVkIHRoaXMgd2F5LiBJIHdpbGwgc3RhcnQgYnkgY2FyZWZ1bGx5IGV4YW1pbmluZyB0aGUgY29kZSB0byBjaGVjayBleGFjdGx5IHdoYXQgaXQgZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2hzci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hzci9oc3JfZGV2aWNlLmM9MjI0PXN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMzUtXHRcdHNwaW5fbG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYzoyMzY6XHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMzctXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYz0yOTM9c3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jLTM2My1cbm5ldC9oc3IvaHNyX2RldmljZS5jOjM2NDpcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xubmV0L2hzci9oc3JfZGV2aWNlLmMtMzY1LVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jPTM2OT1zdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3Rlcixcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy00MDQtXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo0MDU6XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xubmV0L2hzci9oc3JfZGV2aWNlLmMtNDA2LVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz03MTc9c3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzc0LS8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6Nzc1OnZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NzYte1xuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuaC0xNS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuaDoxNjp2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpO1xubmV0L2hzci9oc3JfZm9yd2FyZC5oLTE3LXN0cnVjdCBza19idWZmICpwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuLS1cbm5ldC9oc3IvaHNyX3NsYXZlLmM9MjQ9c3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4tLVxubmV0L2hzci9oc3Jfc2xhdmUuYy04MC1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbm5ldC9oc3IvaHNyX3NsYXZlLmM6ODE6XHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xubmV0L2hzci9oc3Jfc2xhdmUuYy04Mi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xubmV0L2hzci9oc3Jfc2xhdmUuYy04My1cdH0gZWxzZSB7XG5uZXQvaHNyL2hzcl9zbGF2ZS5jOjg0Olx0XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcbm5ldC9oc3IvaHNyX3NsYXZlLmMtODUtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDU0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBgaHNyX2ZvcndhcmRfc2tiYCBpcyBhIHByZXR0eSBjZW50cmFsIGZ1bmN0aW9uIGhlcmUsIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBBbmQsIHllYWgsIGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAgYW5kIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAgYWxzbyBsb29rIGxpa2UgcHJvbWlzaW5nIGZvY2FsIHBvaW50cy4gVGhlc2UgZnVuY3Rpb25zIGFyZSBsaWtlbHkgaGFuZGxpbmcgdGhlIGNvcmUgZnJhbWUgbWFuaXB1bGF0aW9uLgoKTm93LCBJJiMzOTttIGdvaW5nIHRvIHNoaWZ0IGdlYXJzIHNsaWdodGx5LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBicm9hZGVyIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBCZXNpZGVzIHRoZSBvYnZpb3VzIGBDT05GSUdfSFNSYCwgYXJlIHRoZXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgcmVsYXRlZCBmZWF0dXJlcyB0aGF0IGhhdmUgdGhlaXIgb3duIGNvbmZpZyBvcHRpb25zPyBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2hzci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIElFQyA2MjQzOS0zIEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3lcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIEhTUlxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7SGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFx1MDAyNiBQUlApXCYjMzQ7XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIFRoaXMgZW5hYmxlcyBJRUMgNjI0MzkgZGVmaW5lZCBIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzc1xuICAxMDpcdFx0ICBSZWR1bmRhbmN5IChIU1IpIGFuZCBQYXJhbGxlbCBSZWR1bmRhbmN5IFByb3RvY29sIChQUlApLlxuICAxMTpcdFxuICAxMjpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB5b3VyIExpbnV4IGJveCB3aWxsIGJlIGFibGUgdG8gYWN0IGFzIGFcbiAgMTM6XHRcdCAgREFOSCAoXCYjMzQ7RG91Ymx5IGF0dGFjaGVkIG5vZGUgaW1wbGVtZW50aW5nIEhTUlwmIzM0Oykgb3IgREFOUCAoXCYjMzQ7RG91Ymx5XG4gIDE0Olx0XHQgIGF0dGFjaGVkIG5vZGUgaW1wbGVtZW50aW5nIFBSUFwmIzM0OykuIEZvciB0aGlzIHRvIHdvcmssIHlvdXIgTGludXggYm94XG4gIDE1Olx0XHQgIG5lZWRzIChhdCBsZWFzdCkgdHdvIHBoeXNpY2FsIEV0aGVybmV0IGludGVyZmFjZXMuXG4gIDE2Olx0XG4gIDE3Olx0XHQgIEZvciBEQU5ILCBpdCBtdXN0IGJlIGNvbm5lY3RlZCBhcyBhIG5vZGUgaW4gYSByaW5nIG5ldHdvcmsgdG9nZXRoZXJcbiAgMTg6XHRcdCAgd2l0aCBvdGhlciBIU1IgY2FwYWJsZSBub2Rlcy4gQWxsIEV0aGVybmV0IGZyYW1lcyBzZW50IG92ZXIgdGhlIEhTUlxuICAxOTpcdFx0ICBkZXZpY2Ugd2lsbCBiZSBzZW50IGluIGJvdGggZGlyZWN0aW9ucyBvbiB0aGUgcmluZyAob3ZlciBib3RoIHNsYXZlXG4gIDIwOlx0XHQgIHBvcnRzKSwgZ2l2aW5nIGEgcmVkdW5kYW50LCBpbnN0YW50IGZhaWwtb3ZlciBuZXR3b3JrLiBFYWNoIEhTUiBub2RlXG4gIDIxOlx0XHQgIGluIHRoZSByaW5nIGFjdHMgbGlrZSBhIGJyaWRnZSBmb3IgSFNSIGZyYW1lcywgYnV0IGZpbHRlcnMgZnJhbWVzXG4gIDIyOlx0XHQgIHRoYXQgaGF2ZSBiZWVuIGZvcndhcmRlZCBlYXJsaWVyLlxuICAyMzpcdFxuICAyNDpcdFx0ICBGb3IgREFOUCwgaXQgbXVzdCBiZSBjb25uZWN0ZWQgYXMgYSBub2RlIGNvbm5lY3RpbmcgdG8gdHdvXG4gIDI1Olx0XHQgIHNlcGFyYXRlIG5ldHdvcmtzIG92ZXIgdGhlIHR3byBzbGF2ZSBpbnRlcmZhY2VzLiBMaWtlIEhTUiwgRXRoZXJuZXRcbiAgMjY6XHRcdCAgZnJhbWVzIHNlbnQgb3ZlciB0aGUgUFJQIGRldmljZSB3aWxsIGJlIHNlbnQgdG8gYm90aCBuZXR3b3JrcyBnaXZpbmdcbiAgMjc6XHRcdCAgYSByZWR1bmRhbnQsIGluc3RhbnQgZmFpbC1vdmVyIG5ldHdvcmsuIFVubGlrZSBIU1IsIFBSUCBuZXR3b3Jrc1xuICAyODpcdFx0ICBjYW4gaGF2ZSBTaW5nbHkgQXR0YWNoZWQgTm9kZXMgKFNBTikgc3VjaCBhcyBQQywgcHJpbnRlciwgYnJpZGdlc1xuICAyOTpcdFx0ICBldGMgYW5kIHdpbGwgYmUgYWJsZSB0byBjb21tdW5pY2F0ZSB3aXRoIERBTlAgbm9kZXMuXG4gIDMwOlx0XG4gIDMxOlx0XHQgIFRoaXMgY29kZSBpcyBhIFwmIzM0O2Jlc3QgZWZmb3J0XCYjMzQ7IHRvIGNvbXBseSB3aXRoIHRoZSBIU1Igc3RhbmRhcmQgYXNcbiAgMzI6XHRcdCAgZGVzY3JpYmVkIGluIElFQyA2MjQzOS0zOjIwMTAgKEhTUnYwKSBhbmQgSUVDIDYyNDM5LTM6MjAxMiAoSFNSdjEpLFxuICAzMzpcdFx0ICBhbmQgUFJQIHN0YW5kYXJkIGRlc2NyaWJlZCBpbiBJRUMgNjI0MzktNDoyMDEyIChQUlApLCBidXQgbm9cbiAgMzQ6XHRcdCAgY29tcGxpYW5jeSB0ZXN0cyBoYXZlIGJlZW4gbWFkZS4gVXNlIGlwcm91dGUyIHRvIHNlbGVjdCB0aGUgcHJvdG9jb2xcbiAgMzU6XHRcdCAgeW91IHdvdWxkIGxpa2UgdG8gdXNlLlxuICAzNjpcdFxuICAzNzpcdFx0ICBZb3UgbmVlZCB0byBwZXJmb3JtIGFueSBhbmQgYWxsIG5lY2Vzc2FyeSB0ZXN0cyB5b3Vyc2VsZiBiZWZvcmVcbiAgMzg6XHRcdCAgcmVseWluZyBvbiB0aGlzIGNvZGUgaW4gYSBzYWZldHkgY3JpdGljYWwgc3lzdGVtIVxuICAzOTpcdFxuICA0MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA0MTpcdFxuICA0MjpcdGlmIEhTUlxuICA0MzpcdFxuICA0NDpcdGNvbmZpZyBQUlBfRFVQX0RJU0NBUkRfS1VOSVRfVEVTVFxuICA0NTpcdFx0dHJpc3RhdGUgXCYjMzQ7UFJQIGR1cGxpY2F0ZSBkaXNjYXJkIEtVbml0IHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNDY6XHRcdGRlcGVuZHMgb24gS1VOSVRcbiAgNDc6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDQ4Olx0XHRoZWxwXG4gIDQ5Olx0XHQgIENvdmVycyB0aGUgUFJQIGR1cGxpY2F0ZSBkaXNjYXJkIGFsZ29yaXRobS5cbiAgNTA6XHRcdCAgT25seSB1c2VmdWwgZm9yIGtlcm5lbCBkZXZzIHJ1bm5pbmcgS1VuaXQgdGVzdCBoYXJuZXNzIGFuZCBhcmUgbm90XG4gIDUxOlx0XHQgIGZvciBpbmNsdXNpb24gaW50byBhIHByb2R1Y3Rpb24gYnVpbGQuXG4gIDUyOlx0XG4gIDUzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwgcGxlYXNlIHJlZmVyXG4gIDU0Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0Ly5cbiAgNTU6XHRcbiAgNTY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNTc6XHRcbiAgNTg6XHRlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI0NQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UgaGF2ZSBoZXJlLgoKKipOYXZpZ2F0aW5nIERlcGVuZGVuY2llcyBpbiB0aGUgTmV0d29yayBTdGFjayoqCgpIbW0sIGBDT05GSUdfSFNSYCBkb2VzbiYjMzk7dCBzZWVtIHRvIGhhdmUgYW55IGV4cGxpY2l0IGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIHdpdGhpbiAqdGhpcyogc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlLiBUaGF0JiMzOTtzIGEgbGl0dGxlIHVudXN1YWwuIEl0JiMzOTtzIGluIHRoZSBgbmV0L2hzci9gIGRpcmVjdG9yeSB0aG91Z2gsIHdoaWNoIHVzdWFsbHkgaW1wbGllcyBzb21lIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBicm9hZGVyIG5ldHdvcmsgc3Vic3lzdGVtLiBMZXQgbWUgY2hlY2suLi4gQWgsIHJpZ2h0LCB0aGF0IHBvaW50cyB0byBgTkVUYC4KCk9rYXksIHNvIEkgc3VzcGVjdCBpdCAqaW1wbGljaXRseSogZGVwZW5kcyBvbiBgTkVUYC4gVG8gYmUgY2VydGFpbiwgSSBzaG91bGQgY2hlY2sgdGhlIGBuZXQvTWFrZWZpbGVgIHRvIHNlZSBob3cgdGhlIGBoc3JgIGRpcmVjdG9yeSBhbmQgaXRzIGFzc29jaWF0ZWQgc291cmNlIGZpbGVzIGFyZSBhY3R1YWxseSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgYnVpbGQgcHJvY2Vzcy4gVGhhdCBzaG91bGQgc2hvdyBhbnkgZGlyZWN0IG9yIGluZGlyZWN0IGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hzciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvTWFrZWZpbGU9Njc9b2JqLSQoQ09ORklHX05FVF9OU0gpXHRcdCYjNDM7PSBuc2gvXG5uZXQvTWFrZWZpbGU6Njg6b2JqLSQoQ09ORklHX0hTUilcdFx0JiM0Mzs9IGhzci9cbm5ldC9NYWtlZmlsZS02OS1vYmotJChDT05GSUdfTkVUX1NXSVRDSERFVilcdCYjNDM7PSBzd2l0Y2hkZXYvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTc4CgkJCQkJCQlvdXRwdXQ6IDcyCgkJCQkJCQl0aG91Z2h0czogMjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSFNSIFBhdGNoKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYENPTkZJR19IU1JgIGlzIHRoZSBvbmx5IGNvbmZpZyBvcHRpb24gSSBuZWVkIHRvIGJlIGNvbmNlcm5lZCB3aXRoIGhlcmUuIExldCYjMzk7cyBnbyBvdmVyIHRoZXNlIGNoYW5nZXMgYWdhaW4uIEl0IHNlZW1zIHdlIGhhdmUgYSBwYXRjaCB0aGF0JiMzOTtzIG1vZGlmeWluZyBgbmV0L2hzci9oc3JfZm9yd2FyZC5jYCwgZm9jdXNpbmcgb24gYSBzaGFyZWQtbXV0YXRpb24gaXNzdWUuIFRoZSBmaXggaW52b2x2ZXMgY2xvbmluZyB0aGUgc2tiIGJlZm9yZSBtb2RpZnlpbmcgaXQsIHdoaWNoIG1ha2VzIHNlbnNlIHRvIGVuc3VyZSBpc29sYXRpb24gYW5kIHByZXZlbnQgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMuIFRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEhTUiBsb2dpYy4KCkdpdmVuIHRoYXQgSFNSIGlzIGEgc29mdHdhcmUgbmV0d29yayBkZXZpY2UsIGl0IHNob3VsZCBiZSBlYXNpbHkgcmVhY2hhYmxlIGluIGEgUUVNVSBlbnZpcm9ubWVudCwgd2hpY2ggaXMgZ29vZCBmb3IgdGVzdGluZy4gVGhlIGluY2x1c2lvbiBvZiBhIHNlbGZ0ZXN0LCBgaHNyX3NoYXJlZF9tdXRhdGlvbi5zaGAsIGlzIGEgc29saWQgYWRkaXRpb24uIFRoZSBzY3JpcHQgdXNlcyBgaXAgbGluayBhZGRgIHRvIGNyZWF0ZSBhbiBIU1IgaW50ZXJmYWNlIHdpdGggdGhlIHR5cGljYWwgUFJQIGNvbmZpZ3VyYXRpb24sIHdoaWNoIHRlbGxzIG1lIHRoaXMgY2FuIGJlIGVmZmVjdGl2ZWx5IHRlc3RlZCBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQuIFNwZWNpZmljYWxseSBgcHJwMGAgYHNsYXZlMWAgYHNsYXZlMmAuIE5pY2UsIGdvb2QgdG8gc2VlIHRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgZGVmaW5pbmcgdGhlIHZpcnR1YWwgbmV0d29yayBkZXZpY2UmIzM5O3MgbmF0dXJlLgoKSSYjMzk7bGwgd2FudCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGFuZCBgaHNyX2ZvcndhcmRfc2tiYCB3aXRoaW4gdGhlIGNvZGUuIFRob3NlIGFyZSB0aGUga2V5IHN5bWJvbHMgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgbG9naWMgb2YgdGhlIGZpeC4KCkJlZm9yZSBJIGRpZyBpbnRvIHRoZSBkZXRhaWxzLCBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBuZXQvaHNyL2hzcl9mb3J3YXJkLmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBvdGhlciBwb2ludHMgb2YgcG90ZW50aWFsIGludGVyYWN0aW9uIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qXFxzJiM0MztcXCo/W2EtekEtWl9dW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oc3IvaHNyX2ZvcndhcmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9mb3J3YXJkLmM9NDQ1PXN0YXRpYyBpbnQgaHNyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy00ODMtXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NDg0OmJvb2wgcHJwX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTQ4NS17XG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTQ5MS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo0OTI6Ym9vbCBoc3JfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNDkzLXtcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9NjQ5PXN0YXRpYyB2b2lkIGhhbmRsZV9zdGRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNjcwLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjY3MTppbnQgaHNyX2ZpbGxfZnJhbWVfaW5mbyhfX2JlMTYgcHJvdG8sIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNjcyLVx0XHRcdHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTY5Ny1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo2OTg6aW50IHBycF9maWxsX2ZyYW1lX2luZm8oX19iZTE2IHByb3RvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTY5OS1cdFx0XHRzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz03MTc9c3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzc0LS8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6Nzc1OnZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NzYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc1OQoJCQkJCQkJb3V0cHV0OiAxMTEKCQkJCQkJCXRob3VnaHRzOiA0MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEhTUiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgSFNSIGFuZCBQUlAsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCB3YXkgdG8gYXBwcm9hY2ggZnV6emluZyBpdC4gVGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGZvcndhcmRpbmcgYW4gc2tiIGluIEhTUiBpcyBgaHNyX2ZvcndhcmRfc2tiYCwgc28gdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEga2V5IGZ1bmN0aW9uIHRvIGtlZXAgaW4gbWluZC4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIG1vZGlmeWluZyBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgIGFuZCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgIOKAkyB0aG9zZSBhcmUgY3J1Y2lhbCBiZWNhdXNlIHRoZXkmIzM5O3JlIGRpcmVjdGx5IGltcGFjdGVkLiBMZXQmIzM5O3MgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSYjMzk7dmUgZ290IHRoZSBuYW1lcyByaWdodDogYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYW5kIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAuIFl1cCwgYWxsIGdvb2QuCgpOb3csIGEgcXVpY2sgY2hlY2vigKYgSSBzYXcgYGhzcl94bWl0YCBtZW50aW9uZWQsIGJ1dCB0aGF0JiMzOTtzIHN0YXRpYywgc28gaXTigJlzIG5vdCBpZGVhbCBhcyBhIHRvcC1sZXZlbCBmb2N1cy4gSG93ZXZlciwgYGhzcl9mb3J3YXJkX3NrYmAgZG9lcyBjYWxsIGBoc3JfZm9yd2FyZF9kb2AsIHdoaWNoIGluIHR1cm4gY2FsbHMgYGhzcl94bWl0YCwgbWVhbmluZyBgaHNyX2ZvcndhcmRfc2tiYCBpcyBzdGlsbCBhIHJlbGV2YW50IGZvY2FsIHBvaW50IGFuZCBsaWtlbHkgbW9yZSByZWFjaGFibGUuCgpDaGVja2luZyBmb3IgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLCBpdCYjMzk7cyBqdXN0IGBDT05GSUdfSFNSYC4gU2ltcGxlIGVub3VnaC4KCkFscmlnaHQsIHdoYXQgZWxzZSBoYXZlIHdlIGdvdD8gVGhlIHBhdGNoIG1vZGlmaWVzIGBuZXQvaHNyL2hzcl9mb3J3YXJkLmNgIGFuZCBhZGRzIGEgdGVzdCBjYXNlLCBzbyBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGggZ29vZCB0ZXN0IGNvdmVyYWdlLCB3aGljaCBtYWtlcyBmdXp6aW5nIGl0IGV2ZW4gbW9yZSB2YWx1YWJsZS4gSXQgYWRkcmVzc2VzIGEgc2hhcmVkLW11dGF0aW9uIGlzc3VlIGJ5IGNsb25pbmcgdGhlIHNrYiBiZWZvcmUgbW9kaWZ5aW5nIGl0LCB3aGljaCBpcyB0aGUga2luZCBvZiB2dWxuZXJhYmlsaXR5IGZ1enppbmcgY2FuIHVuY292ZXIuIFRoaXMgY2hhbmdlIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4KClNvLCBoZXJlJiMzOTtzIG15IHBsYW46CgoqKkZvY3VzIFN5bWJvbHM6KioKCiogICBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgCiogICBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgCiogICBgaHNyX2ZvcndhcmRfc2tiYAoKKipFbmFibGUgQ29uZmlnczoqKgoKKiAgIGBDT05GSUdfSFNSYAoKKipSZWFzb25pbmc6KioKClRoZSBwYXRjaCBhZGRyZXNzZXMgYSBzaGFyZWQtbXV0YXRpb24gdnVsbmVyYWJpbGl0eSBieSBjbG9uaW5nIHRoZSBza2IgYmVmb3JlIG1vZGlmaWNhdGlvbiwgZGlyZWN0bHkgaW1wYWN0aW5nIEhTUiBhbmQgUFJQLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBjaGFuZ2Ugd2l0aCB0ZXN0IGNvdmVyYWdlLCBtYWtpbmcgaXQgaWRlYWwgZm9yIGZ1enppbmcuClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFNSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUmIzM0OywKICAgICYjMzQ7cHJwX2NyZWF0ZV90YWdnZWRfZnJhbWUmIzM0OywKICAgICYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc2hhcmVkLW11dGF0aW9uIGlzc3VlIGluIEhTUiBhbmQgUFJQIGJ5IGNsb25pbmcgdGhlIHNrYiBhbmQgbWFraW5nIGl0IHByaXZhdGUgYmVmb3JlIG1vZGlmeWluZyBpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEhTUiBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lJiMzNDssCiAgICAmIzM0O3BycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHNoYXJlZC1tdXRhdGlvbiBpc3N1ZSBpbiBIU1IgYW5kIFBSUCBieSBjbG9uaW5nIHRoZSBza2IgYW5kIG1ha2luZyBpdCBwcml2YXRlIGJlZm9yZSBtb2RpZnlpbmcgaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBIU1IgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NTU6NDcuMjk2OTA3NjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY1MDg4MjYxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIU1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZVwiLFxuICAgIFwicHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVcIixcbiAgICBcImhzcl9mb3J3YXJkX3NrYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgc2hhcmVkLW11dGF0aW9uIGlzc3VlIGluIEhTUiBhbmQgUFJQIGJ5IGNsb25pbmcgdGhlIHNrYiBhbmQgbWFraW5nIGl0IHByaXZhdGUgYmVmb3JlIG1vZGlmeWluZyBpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEhTUiBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjU1OjQ3LjI5NjkxMzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMzA3MDY3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNhMGFiMDU5Mzk1MTcwNGUyNWQyYjg5NThkZWQ4ZGNlY2QzNTlmMDVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMjkgMTg6NTU6NDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXFxuaW5kZXggMDc3NDk4MWE2NWMxNi4uOTc0YjU1ZjI0ODgyMSAxMDA2NDRcXG4tLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcXG4rKysgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcXG5AQCAtMzM2LDEyICszMzYsMjQgQEAgc3RydWN0IHNrX2J1ZmYgKmhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxuIFxcdGludCBtb3ZlbGVuO1xcbiBcXG4gXFx0aWYgKGZyYW1lLVxcdTAwM2Vza2JfaHNyKSB7XFxuLVxcdFxcdHN0cnVjdCBoc3JfZXRoaGRyICpoc3JfZXRoaGRyID1cXG4tXFx0XFx0XFx0KHN0cnVjdCBoc3JfZXRoaGRyICopc2tiX21hY19oZWFkZXIoZnJhbWUtXFx1MDAzZXNrYl9oc3IpO1xcbitcXHRcXHRzdHJ1Y3QgaHNyX2V0aGhkciAqaHNyX2V0aGhkcjtcXG4rXFxuK1xcdFxcdC8qIFRoZSBvcmlnaW5hbCBza2IgZGF0YSBtYXkgYmUgc2hhcmVkIHdpdGggYW5vdGhlciBlZ3Jlc3NcXG4rXFx0XFx0ICogY2xvbmUuIE1ha2UgdGhlIGNsb25lIGRhdGEgcHJpdmF0ZSBiZWZvcmUgdXBkYXRpbmcgdGhlXFxuK1xcdFxcdCAqIHBhdGggaWQgc28gdGhlIHVwZGF0ZSBjYW5ub3QgY29ycnVwdCB0aGUgb3RoZXIgY29weS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNrYiA9IHNrYl9jbG9uZShmcmFtZS1cXHUwMDNlc2tiX2hzciwgR0ZQX0FUT01JQyk7XFxuK1xcdFxcdGlmICghc2tiKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0XFx0aWYgKHNrYl9jb3coc2tiLCAwKSkge1xcbitcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdC8qIHNldCB0aGUgbGFuZSBpZCBwcm9wZXJseSAqL1xcbitcXHRcXHRoc3JfZXRoaGRyID0gKHN0cnVjdCBoc3JfZXRoaGRyICopc2tiX21hY19oZWFkZXIoc2tiKTtcXG4gXFx0XFx0aHNyX3NldF9wYXRoX2lkKGZyYW1lLCBoc3JfZXRoaGRyLCBwb3J0KTtcXG4tXFx0XFx0cmV0dXJuIHNrYl9jbG9uZShmcmFtZS1cXHUwMDNlc2tiX2hzciwgR0ZQX0FUT01JQyk7XFxuK1xcdFxcdHJldHVybiBza2I7XFxuIFxcdH0gZWxzZSBpZiAocG9ydC1cXHUwMDNlZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfSFNSX1RBR19JTlMpIHtcXG4gXFx0XFx0cmV0dXJuIHNrYl9jbG9uZShmcmFtZS1cXHUwMDNlc2tiX3N0ZCwgR0ZQX0FUT01JQyk7XFxuIFxcdH1cXG5AQCAtMzc3LDE1ICszODksMjggQEAgc3RydWN0IHNrX2J1ZmYgKnBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcbiBcXHRpZiAoZnJhbWUtXFx1MDAzZXNrYl9wcnApIHtcXG4tXFx0XFx0c3RydWN0IHBycF9yY3QgKnRyYWlsZXIgPSBza2JfZ2V0X1BSUF9yY3QoZnJhbWUtXFx1MDAzZXNrYl9wcnApO1xcbitcXHRcXHRzdHJ1Y3QgcHJwX3JjdCAqdHJhaWxlcjtcXG4gXFxuK1xcdFxcdC8qIFNhbWUgc2hhcmluZyBoYXphcmQgYXMgYWJvdmU6IHByaXZhdGl6ZSB0aGUgY2xvbmUgZGF0YVxcbitcXHRcXHQgKiBiZWZvcmUgdXBkYXRpbmcgdGhlIExBTiBpZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNrYiA9IHNrYl9jbG9uZShmcmFtZS1cXHUwMDNlc2tiX3BycCwgR0ZQX0FUT01JQyk7XFxuK1xcdFxcdGlmICghc2tiKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0XFx0aWYgKHNrYl9jb3coc2tiLCAwKSkge1xcbitcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHRyYWlsZXIgPSBza2JfZ2V0X1BSUF9yY3Qoc2tiKTtcXG4gXFx0XFx0aWYgKHRyYWlsZXIpIHtcXG4gXFx0XFx0XFx0cHJwX3NldF9sYW5faWQodHJhaWxlciwgcG9ydCk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdFdBUk5fT05DRSghdHJhaWxlciwgXFxcImVycm9yZWQgUFJQIHNrYlxcXCIpO1xcbitcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdFxcdH1cXG4tXFx0XFx0cmV0dXJuIHNrYl9jbG9uZShmcmFtZS1cXHUwMDNlc2tiX3BycCwgR0ZQX0FUT01JQyk7XFxuK1xcdFxcdHJldHVybiBza2I7XFxuIFxcdH0gZWxzZSBpZiAocG9ydC1cXHUwMDNlZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfSFNSX1RBR19JTlMpIHtcXG4gXFx0XFx0cmV0dXJuIHNrYl9jbG9uZShmcmFtZS1cXHUwMDNlc2tiX3N0ZCwgR0ZQX0FUT01JQyk7XFxuIFxcdH1cXG5AQCAtNDIwLDYgKzQ0NSwyMiBAQCBzdGF0aWMgdm9pZCBoc3JfZGVsaXZlcl9tYXN0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gc3RhdGljIGludCBoc3JfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXFxuIFxcdFxcdCAgICBzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxcbiB7XFxuK1xcdC8qIEFuIGludGVybGluay1ib3VuZCBza2IgZnJvbSBnZXRfdW50YWdnZWRfZnJhbWUoKSBjYW4gc3RpbGwgYWxpYXNcXG4rXFx0ICogYW5vdGhlciBsaXZlIGNvbnN1bWVyOiBmb3IgbWFzdGVyLW9yaWdpbmF0ZWQgZnJhbWVzIHRoZSBjbG9uZVxcbitcXHQgKiBzaGFyZXMgdGhlIG9yaWdpbmFsIFRYIHNrYiAod2hpY2ggdGFwcyBvciB0aGUgVFggcGF0aCBtYXkgc3RpbGxcXG4rXFx0ICogaG9sZCk7IGZvciByaW5nIGZyYW1lcyB0aGUgbWFzdGVyIGFsc28gY29uc3VtZXMgdGhlbSB3aGVuIHRoZXlcXG4rXFx0ICogYXJlIGRlc3RpbmVkIHRvIHRoZSBsb2NhbCBub2RlIHdpdGhvdXQgYmVpbmcgZXhjbHVzaXZlIHRvIGl0LlxcbitcXHQgKiBQcml2YXRpemUgYmVmb3JlIGFueSBhZGRyZXNzIG11dGF0aW9uLlxcbitcXHQgKi9cXG4rXFx0aWYgKHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKGZyYW1lLVxcdTAwM2Vwb3J0X3Jjdi1cXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSIHx8XFxuK1xcdCAgICAgKGZyYW1lLVxcdTAwM2Vpc19sb2NhbF9kZXN0IFxcdTAwMjZcXHUwMDI2ICFmcmFtZS1cXHUwMDNlaXNfbG9jYWxfZXhjbHVzaXZlKSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHNrYl9jb3coc2tiLCAwKSkge1xcbitcXHRcXHRmcmFtZS1cXHUwMDNlcG9ydF9yY3YtXFx1MDAzZWRldi1cXHUwMDNlc3RhdHMucnhfZHJvcHBlZCsrO1xcbitcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0cmV0dXJuIE5FVF9YTUlUX0RST1A7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChmcmFtZS1cXHUwMDNlcG9ydF9yY3YtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUikge1xcbiBcXHRcXHRoc3JfYWRkcl9zdWJzdF9kZXN0KGZyYW1lLVxcdTAwM2Vub2RlX3NyYywgc2tiLCBwb3J0KTtcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXFxuaW5kZXggMzFmYjkzMjZjZjUzMy4uYWVhZTdmM2Q2ZGQxNCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxcbkBAIC03LDYgKzcsNyBAQCBURVNUX1BST0dTIDo9IFxcXFxcXG4gXFx0aHNyX3JlZGJveC5zaCBcXFxcXFxuIFxcdGxpbmtfZmF1bHRzLnNoIFxcXFxcXG4gXFx0cHJwX3Bpbmcuc2ggXFxcXFxcbitcXHRoc3Jfc2hhcmVkX211dGF0aW9uLnNoIFxcXFxcXG4gIyBlbmQgb2YgVEVTVF9QUk9HU1xcbiBcXG4gVEVTVF9GSUxFUyArPSBoc3JfY29tbW9uLnNoXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3NoYXJlZF9tdXRhdGlvbi5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3NoYXJlZF9tdXRhdGlvbi5zaFxcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjcxMDM1NDFjZDc4Y1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9zaGFyZWRfbXV0YXRpb24uc2hcXG5AQCAtMCwwICsxLDIxMyBAQFxcbisjIS9iaW4vYmFzaFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNcXG4rIyBWZXJpZnkgdGhhdCBwZXItZWdyZXNzIG11dGF0aW9ucyBvZiBzaGFyZWQgc2tiIGRhdGEgYXJlIHByaXZhdGU6XFxuKyNcXG4rIyBGMiAocGF0aC9MQU4gSUQpOiBvbiBhbiBhZmZlY3RlZCBrZXJuZWwgdGhlIHNlY29uZCBzbGF2ZSdzIExBTi1JRCB3cml0ZVxcbisjIGxhbmRzIGluIHRoZSBmaXJzdCBzbGF2ZSdzIHN0aWxsLXF1ZXVlZCBjbG9uZTsgd2l0aCBhIG5ldGVtIGRlbGF5IG9uXFxuKyMgc2xhdmUgQSwgaW5qZWN0ZWQgZnJhbWVzIGxlYXZlIEEgY2FycnlpbmcgQidzIExBTiBJRC5cXG4rI1xcbisjIEYxIChSZWRCb3ggc291cmNlIE1BQyk6IG9uIGFuIGFmZmVjdGVkIGtlcm5lbCBhbiBIU1ItdGFnZ2VkIG11bHRpY2FzdFxcbisjIGZyYW1lIHJlY2VpdmVkIG9uIGEgUmVkQm94IHNsYXZlIGlzIGNsb25lZCBmb3IgbWFzdGVyIGFuZCBpbnRlcmxpbmssXFxuKyMgYW5kIHRoZSBpbnRlcmxpbmsncyBSZWRCb3gtTUFDIHJld3JpdGUgbGFuZHMgaW4gdGhlIG1hc3RlciBjbG9uZSdzXFxuKyMgYnVmZmVyLCBzbyB0aGUgbG9jYWwgc3RhY2sgcmVjZWl2ZXMgdGhlIFJlZEJveCBNQUMgaW5zdGVhZCBvZiB0aGVcXG4rIyBvcmlnaW5hdGluZyBub2RlJ3MgTUFDLlxcbitcXG4raXB2Nj1mYWxzZVxcbitcXG4rc291cmNlIC4vaHNyX2NvbW1vbi5zaFxcbitcXG4rRFVSPTVcXG4rXFxuK3JlcXVpcmUoKVxcbit7XFxuK1xcdGNvbW1hbmQgLXYgXFxcIiQxXFxcIiBcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjEgXFx1MDAyNlxcdTAwMjYgcmV0dXJuIDBcXG4rXFx0ZWNobyBcXFwiU0tJUDogJDEgbm90IGF2YWlsYWJsZVxcXCJcXG4rXFx0ZXhpdCAka3NmdF9za2lwXFxuK31cXG4rXFxuK3JlcXVpcmUgaXBcXG4rcmVxdWlyZSB0Y1xcbityZXF1aXJlIHB5dGhvbjNcXG4rXFxuK3RyYXAgY2xlYW51cF9hbGxfbnMgRVhJVFxcbitcXG4rIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEYyOiBMQU4tSUQgaXNvbGF0aW9uXFxuKyMgUFJQIERBTlAgKHByb3RvIDEpLCBBRl9QQUNLRVQgcHJlLXRhZ2dlZCBpbmplY3Rpb24sIG5ldGVtIG9uIHNsYXZlIEEuXFxuK3J1bl9mMigpXFxuK3tcXG4rXFx0c2V0dXBfbnMgbnMgMlxcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuICRrc2Z0X3NraXBcXG4rXFx0bnN4KCkgeyBpcCBuZXRucyBleGVjIFxcXCIkbnNcXFwiIFxcXCIkQFxcXCI7IH1cXG4rXFxuK1xcdCMgUHJvYmUgc2NoX25ldGVtIGluc2lkZSB0aGUgZGlzcG9zYWJsZSBuYW1lc3BhY2Ugb25seS5cXG4rXFx0aWYgISBuc3ggdGMgcWRpc2MgYWRkIGRldiBsbyByb290IG5ldGVtIGRlbGF5IDFtcyAyXFx1MDAzZS9kZXYvbnVsbDsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJTS0lQOiBzY2hfbmV0ZW0gbm90IGF2YWlsYWJsZVxcXCJcXG4rXFx0XFx0cmV0dXJuICRrc2Z0X3NraXBcXG4rXFx0ZmlcXG4rXFx0bnN4IHRjIHFkaXNjIGRlbCBkZXYgbG8gcm9vdCAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXG4rXFx0IyBDYXBhYmlsaXR5IHByb2JlcyBlbmQgaGVyZTsgc2V0dXAgb3IgcnVudGltZSBmYWlsdXJlIGJlbG93IGlzIEZBSUwuXFxuK1xcdG5zeCBpcCBsaW5rIGFkZCB2QSB0eXBlIHZldGggcGVlciBuYW1lIHZBcCB8fCB7IGVjaG8gXFxcIkZBSUw6IHZldGggQVxcXCI7IHJldHVybiAxOyB9XFxuK1xcdG5zeCBpcCBsaW5rIGFkZCB2QiB0eXBlIHZldGggcGVlciBuYW1lIHZCcCB8fCB7IGVjaG8gXFxcIkZBSUw6IHZldGggQlxcXCI7IHJldHVybiAxOyB9XFxuK1xcdGZvciBpIGluIHZBIHZCIHZBcCB2QnA7IGRvXFxuK1xcdFxcdG5zeCBpcCBsaW5rIHNldCBcXFwiJGlcXFwiIHVwIHx8IHsgZWNobyBcXFwiRkFJTDogJGkgdXBcXFwiOyByZXR1cm4gMTsgfVxcbitcXHRkb25lXFxuK1xcdG5zeCBpcCBsaW5rIGFkZCBuYW1lIHBycDAgdHlwZSBoc3Igc2xhdmUxIHZBIHNsYXZlMiB2QiBzdXBlcnZpc2lvbiA0NSBwcm90byAxIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdGlmIFsgJD8gLW5lIDAgXTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJTS0lQOiBIU1IvUFJQIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBrZXJuZWxcXFwiXFxuK1xcdFxcdHJldHVybiAka3NmdF9za2lwXFxuK1xcdGZpXFxuK1xcdG5zeCBpcCBsaW5rIHNldCBwcnAwIHVwIHx8IHsgZWNobyBcXFwiRkFJTDogcHJwMCB1cFxcXCI7IHJldHVybiAxOyB9XFxuK1xcdG5zeCB0YyBxZGlzYyBhZGQgZGV2IHZBIHJvb3QgbmV0ZW0gZGVsYXkgMjAwbXMgfHwgeyBlY2hvIFxcXCJGQUlMOiBuZXRlbVxcXCI7IHJldHVybiAxOyB9XFxuK1xcbitcXHRuc3ggcHl0aG9uMyAvZGV2L3N0ZGluIFxcXCIkRFVSXFxcIiBcXHUwMDNjXFx1MDAzYydQWUYyJ1xcbitpbXBvcnQgc29ja2V0LCBzdHJ1Y3QsIHNlbGVjdCwgc3lzLCB0aW1lXFxuK1xcbitkdXIgPSBpbnQoc3lzLmFyZ3ZbMV0pXFxuK2RlZiBsYW5pZChwa3QpOlxcbisgICAgaWYgbGVuKHBrdCkgXFx1MDAzYyAyMCBvciBwa3RbLTI6XSAhPSBiXFxcIlxcXFx4ODhcXFxceGZiXFxcIjpcXG4rICAgICAgICByZXR1cm4gTm9uZVxcbisgICAgcmV0dXJuIChwa3RbLTRdIFxcdTAwM2VcXHUwMDNlIDQpIFxcdTAwMjYgMHhGXFxuK1xcbitTUkMgPSBieXRlcy5mcm9taGV4KG9wZW4oXFxcIi9zeXMvY2xhc3MvbmV0L3BycDAvYWRkcmVzc1xcXCIpLnJlYWQoKS5yZXBsYWNlKFxcXCI6XFxcIiwgXFxcIlxcXCIpKVxcbitEU1QgPSBieXRlcy5mcm9taGV4KFxcXCIwMmFhYmJjY2RkMDFcXFwiKVxcbitQQVkgPSBieXRlcyhyYW5nZSg0NikpXFxuK3JjdDAgPSBzdHJ1Y3QucGFjayhcXFwiXFx1MDAzZUhcXFwiLCAwKSArIHN0cnVjdC5wYWNrKFxcXCJcXHUwMDNlSFxcXCIsIDUyIFxcdTAwMjYgMHgwRkZGKSArIGJcXFwiXFxcXHg4OFxcXFx4ZmJcXFwiXFxuK2ZyYW1lID0gRFNUICsgU1JDICsgYlxcXCJcXFxceDA4XFxcXHgwMFxcXCIgKyBQQVkgKyByY3QwXFxuK1xcbit0eCA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXKTsgdHguYmluZCgoXFxcInBycDBcXFwiLCAwKSlcXG4rc0EgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVyxcXG4rICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSlcXG4rc0EuYmluZCgoXFxcInZBcFxcXCIsIDApKVxcbitzQiA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXLFxcbisgICAgICAgIHNvY2tldC5udG9ocygweDAwMDMpKVxcbitzQi5iaW5kKChcXFwidkJwXFxcIiwgMCkpXFxuK3NBLnNldGJsb2NraW5nKEZhbHNlKTsgc0Iuc2V0YmxvY2tpbmcoRmFsc2UpXFxuK2ZvciBfIGluIHJhbmdlKDIwMCk6XFxuKyAgICB0eC5zZW5kKGZyYW1lKTsgdGltZS5zbGVlcCgwLjAwMSlcXG4rXFxuK2EsIGIgPSBbXSwgW11cXG4rZW5kID0gdGltZS50aW1lKCkgKyBkdXJcXG4rd2hpbGUgdGltZS50aW1lKCkgXFx1MDAzYyBlbmQ6XFxuKyAgICByLCBfLCBfID0gc2VsZWN0LnNlbGVjdChbc0EsIHNCXSwgW10sIFtdLCAwLjMpXFxuKyAgICBmb3IgcyBpbiByOlxcbisgICAgICAgIHBrdCA9IHMucmVjdig2NTUzNSlcXG4rICAgICAgICBpZiAocGt0Wzo2XSAhPSBEU1Qgb3IgcGt0WzY6MTJdICE9IFNSQyBvciBwa3RbMTI6MTRdICE9IGJcXFwiXFxcXHgwOFxcXFx4MDBcXFwiXFxuKyAgICAgICAgICAgICAgICBvciBwa3RbMTQ6MTQgKyBsZW4oUEFZKV0gIT0gUEFZKTpcXG4rICAgICAgICAgICAgY29udGludWVcXG4rICAgICAgICBsaWQgPSBsYW5pZChwa3QpXFxuKyAgICAgICAgaWYgbGlkIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICAoYSBpZiBzIGlzIHNBIGVsc2UgYikuYXBwZW5kKGxpZClcXG4rXFxuK3ByaW50KFxcXCJBLXNpZGUgY291bnQ9JWQgbGFuIGlkcz0lc1xcXCIgJSAobGVuKGEpLCBzb3J0ZWQoc2V0KGEpKSkpXFxuK3ByaW50KFxcXCJCLXNpZGUgY291bnQ9JWQgbGFuIGlkcz0lc1xcXCIgJSAobGVuKGIpLCBzb3J0ZWQoc2V0KGIpKSkpXFxuK2lmIGxlbihhKSBcXHUwMDNjIDE1MCBvciBsZW4oYikgXFx1MDAzYyAxNTA6XFxuKyAgICBwcmludChcXFwiRkFJTDogdG9vIGZldyBpbmplY3RlZCBmcmFtZXMgY2FwdHVyZWQgKEE9JWQgQj0lZCwgc2VudCAyMDApXFxcIiAlIChsZW4oYSksIGxlbihiKSkpXFxuKyAgICBzeXMuZXhpdCgxKVxcbitiYWRfYSA9IFt4IGZvciB4IGluIGEgaWYgKHggXFx1MDAyNiAxKSAhPSAwXVxcbitiYWRfYiA9IFt4IGZvciB4IGluIGIgaWYgKHggXFx1MDAyNiAxKSAhPSAxXVxcbitpZiBiYWRfYSBvciBiYWRfYjpcXG4rICAgIHByaW50KFxcXCJGQUlMOiBzaGFyZWQtbXV0YXRpb24gY29ycnVwdGlvbiAtIEE6ICVkLyVkIHdyb25nLWxhbiwgQjogJWQvJWQgd3JvbmctbGFuXFxcIlxcbisgICAgICAgICAgJSAobGVuKGJhZF9hKSwgbGVuKGEpLCBsZW4oYmFkX2IpLCBsZW4oYikpKVxcbisgICAgc3lzLmV4aXQoMSlcXG4rcHJpbnQoXFxcIlBBU1M6IHBlci1lZ3Jlc3MgTEFOIElEcyBpc29sYXRlZCAoQSBhbGwgYml0MD0wLCBCIGFsbCBiaXQwPTEpXFxcIilcXG4rc3lzLmV4aXQoMClcXG4rUFlGMlxcbit9XFxuK1xcbisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGMTogUmVkQm94IHNvdXJjZS1NQUMgcHJpdmFjeVxcbisjIEhTUiBSZWRCb3ggKHByb3RvIDApLCB0YWdnZWQgbXVsdGljYXN0IGZyb20gYSBzbGF2ZTogbWFzdGVyIG11c3Qga2VlcFxcbisjIHRoZSBub2RlIE1BQywgaW50ZXJsaW5rIG11c3QgY2FycnkgdGhlIFJlZEJveCBNQUMuXFxuK3J1bl9mMSgpXFxuK3tcXG4rXFx0c2V0dXBfbnMgbnMgMlxcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuICRrc2Z0X3NraXBcXG4rXFx0bnN4KCkgeyBpcCBuZXRucyBleGVjIFxcXCIkbnNcXFwiIFxcXCIkQFxcXCI7IH1cXG4rXFxuK1xcdG5zeCBpcCBsaW5rIGFkZCB2QSB0eXBlIHZldGggcGVlciBuYW1lIHZBcCB8fCB7IGVjaG8gXFxcIkZBSUw6IHZldGggQVxcXCI7IHJldHVybiAxOyB9XFxuK1xcdG5zeCBpcCBsaW5rIGFkZCB2QiB0eXBlIHZldGggcGVlciBuYW1lIHZCcCB8fCB7IGVjaG8gXFxcIkZBSUw6IHZldGggQlxcXCI7IHJldHVybiAxOyB9XFxuK1xcdG5zeCBpcCBsaW5rIGFkZCB2SSB0eXBlIHZldGggcGVlciBuYW1lIHZJcCB8fCB7IGVjaG8gXFxcIkZBSUw6IHZldGggSVxcXCI7IHJldHVybiAxOyB9XFxuK1xcdGZvciBpIGluIHZBIHZCIHZJIHZBcCB2QnAgdklwOyBkb1xcbitcXHRcXHRuc3ggaXAgbGluayBzZXQgXFxcIiRpXFxcIiB1cCB8fCB7IGVjaG8gXFxcIkZBSUw6ICRpIHVwXFxcIjsgcmV0dXJuIDE7IH1cXG4rXFx0ZG9uZVxcbitcXHRuc3ggaXAgbGluayBhZGQgbmFtZSBoc3IwIHR5cGUgaHNyIHNsYXZlMSB2QSBzbGF2ZTIgdkIgaW50ZXJsaW5rIHZJIFxcXFxcXG4rXFx0XFx0c3VwZXJ2aXNpb24gNDUgcHJvdG8gMCAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRpZiBbICQ/IC1uZSAwIF07IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiU0tJUDogSFNSIFJlZEJveCBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMga2VybmVsXFxcIlxcbitcXHRcXHRyZXR1cm4gJGtzZnRfc2tpcFxcbitcXHRmaVxcbitcXHRuc3ggaXAgbGluayBzZXQgaHNyMCB1cCB8fCB7IGVjaG8gXFxcIkZBSUw6IGhzcjAgdXBcXFwiOyByZXR1cm4gMTsgfVxcbitcXG4rXFx0bnN4IHB5dGhvbjMgL2Rldi9zdGRpbiBcXHUwMDNjXFx1MDAzYydQWUYxJ1xcbitpbXBvcnQgc29ja2V0LCBzZWxlY3QsIHN5cywgdGltZVxcbitcXG4rTk9ERSAgPSBieXRlcy5mcm9taGV4KFxcXCIwMjExMjIzMzQ0NTVcXFwiKVxcbitNQ0FTVCA9IGJ5dGVzLmZyb21oZXgoXFxcIjAxMDA1ZTAwMDAwMVxcXCIpXFxuK1JCICAgID0gYnl0ZXMuZnJvbWhleChvcGVuKFxcXCIvc3lzL2NsYXNzL25ldC92SS9hZGRyZXNzXFxcIikucmVhZCgpLnJlcGxhY2UoXFxcIjpcXFwiLCBcXFwiXFxcIikpXFxuK1BBWSAgID0gYnl0ZXMocmFuZ2UoNDYpKVxcbitcXG4rZGVmIGZyYW1lKHNlcSk6XFxuKyAgICB0YWcgPSAoKDEgXFx1MDAzY1xcdTAwM2MgMTIpIHwgbGVuKFBBWSkpLnRvX2J5dGVzKDIsIFxcXCJiaWdcXFwiKSArIHNlcS50b19ieXRlcygyLCBcXFwiYmlnXFxcIikgKyBiXFxcIlxcXFx4MDhcXFxceDAwXFxcIlxcbisgICAgcmV0dXJuIE1DQVNUICsgTk9ERSArIGJcXFwiXFxcXHg4OVxcXFx4MmZcXFwiICsgdGFnICsgUEFZXFxuK1xcbit0eCA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXKTsgdHguYmluZCgoXFxcInZBcFxcXCIsIDApKVxcbitzbSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXLFxcbisgICAgICAgIHNvY2tldC5udG9ocygweDAwMDMpKVxcbitzbS5iaW5kKChcXFwiaHNyMFxcXCIsIDApKVxcbitzaSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXLFxcbisgICAgICAgIHNvY2tldC5udG9ocygweDAwMDMpKVxcbitzaS5iaW5kKChcXFwidklwXFxcIiwgMCkpXFxuK3NtLnNldGJsb2NraW5nKEZhbHNlKTsgc2kuc2V0YmxvY2tpbmcoRmFsc2UpXFxuK1xcbitmb3IgaSBpbiByYW5nZSgzKTpcXG4rICAgIHR4LnNlbmQoZnJhbWUoaSArIDEpKTsgdGltZS5zbGVlcCgwLjA1KVxcbitcXG4rbV9zcmMgPSBpX3NyYyA9IE5vbmVcXG4rZW5kID0gdGltZS50aW1lKCkgKyA0XFxuK3doaWxlIHRpbWUudGltZSgpIFxcdTAwM2MgZW5kIGFuZCAobV9zcmMgaXMgTm9uZSBvciBpX3NyYyBpcyBOb25lKTpcXG4rICAgIHIsIF8sIF8gPSBzZWxlY3Quc2VsZWN0KFtzbSwgc2ldLCBbXSwgW10sIDAuMylcXG4rICAgIGZvciBzIGluIHI6XFxuKyAgICAgICAgcGt0ID0gcy5yZWN2KDY1NTM1KVxcbisgICAgICAgICMgZXhhY3QgZmxvdzogZHN0LCBwb3N0LXN0cmlwIEV0aGVyVHlwZSwgZXhhY3QgcGF5bG9hZCwgbWluIGxlbmd0aDtcXG4rICAgICAgICAjIGhfc291cmNlIGlzIHRoZSBhc3NlcnRlZCB2YWx1ZSBhbmQgbXVzdCBOT1QgYmUgZmlsdGVyZWQgb25cXG4rICAgICAgICBpZiAobGVuKHBrdCkgXFx1MDAzYyA2MCBvciBwa3RbOjZdICE9IE1DQVNUIG9yIHBrdFsxMjoxNF0gIT0gYlxcXCJcXFxceDA4XFxcXHgwMFxcXCJcXG4rICAgICAgICAgICAgICAgIG9yIHBrdFsxNDoxNCArIGxlbihQQVkpXSAhPSBQQVkpOlxcbisgICAgICAgICAgICBjb250aW51ZVxcbisgICAgICAgIGlmIHMgaXMgc20gYW5kIG1fc3JjIGlzIE5vbmU6XFxuKyAgICAgICAgICAgIG1fc3JjID0gcGt0WzY6MTJdXFxuKyAgICAgICAgZWxpZiBzIGlzIHNpIGFuZCBpX3NyYyBpcyBOb25lOlxcbisgICAgICAgICAgICBpX3NyYyA9IHBrdFs2OjEyXVxcbitcXG4rcHJpbnQoXFxcIm1hc3RlciBoX3NvdXJjZSAgICA9XFxcIiwgbV9zcmMuaGV4KCkgaWYgbV9zcmMgZWxzZSBOb25lKVxcbitwcmludChcXFwibm9kZSBNQUMgICAgICAgICAgID1cXFwiLCBOT0RFLmhleCgpKVxcbitwcmludChcXFwiaW50ZXJsaW5rIGhfc291cmNlID1cXFwiLCBpX3NyYy5oZXgoKSBpZiBpX3NyYyBlbHNlIE5vbmUpXFxuK3ByaW50KFxcXCJyZWRib3ggTUFDICAgICAgICAgPVxcXCIsIFJCLmhleCgpKVxcbitpZiBpX3NyYyAhPSBSQjpcXG4rICAgIHByaW50KFxcXCJGQUlMOiBpbnRlcmxpbmsgZGlkIG5vdCBjYXJyeSB0aGUgUmVkQm94IE1BQ1xcXCIpXFxuKyAgICBzeXMuZXhpdCgxKVxcbitpZiBtX3NyYyAhPSBOT0RFOlxcbisgICAgcHJpbnQoXFxcIkZBSUw6IG1hc3RlciByZWNlaXZlZCAlcyBpbnN0ZWFkIG9mIHRoZSBub2RlIE1BQyBcXFwiXFxuKyAgICAgICAgICBcXFwiKHNoYXJlZC1tdXRhdGlvbiBjb3JydXB0aW9uKVxcXCIgJSAobV9zcmMuaGV4KCkgaWYgbV9zcmMgZWxzZSBcXFwibm90aGluZ1xcXCIpKVxcbisgICAgc3lzLmV4aXQoMSlcXG4rcHJpbnQoXFxcIlBBU1M6IG1hc3RlciBrZXB0IG5vZGUgTUFDLCBpbnRlcmxpbmsga2VwdCBSZWRCb3ggTUFDXFxcIilcXG4rc3lzLmV4aXQoMClcXG4rUFlGMVxcbit9XFxuK1xcbityYz0wXFxuK1xcbitydW5fZjJcXG4rcmV0PSQ/XFxuK1sgXFxcIiRyZXRcXFwiIC1lcSBcXFwiJGtzZnRfc2tpcFxcXCIgXSBcXHUwMDI2XFx1MDAyNiBleGl0IFxcXCIka3NmdF9za2lwXFxcIlxcbitbIFxcXCIkcmV0XFxcIiAtZXEgMCBdIHx8IHJjPTFcXG4rXFxuK3J1bl9mMVxcbityZXQ9JD9cXG4rWyBcXFwiJHJldFxcXCIgLWVxIFxcXCIka3NmdF9za2lwXFxcIiBdIFxcdTAwMjZcXHUwMDI2IGV4aXQgXFxcIiRrc2Z0X3NraXBcXFwiXFxuK1sgXFxcIiRyZXRcXFwiIC1lcSAwIF0gfHwgcmM9MVxcbitcXG4raWYgWyAkcmMgLWVxIDAgXTsgdGhlblxcbitcXHRlY2hvIFxcXCJoc3Jfc2hhcmVkX211dGF0aW9uOiBwZXItZWdyZXNzIG11dGF0aW9uIGlzb2xhdGlvbiAoRjErRjIpIFsgT0sgXVxcXCJcXG4rZWxzZVxcbitcXHRlY2hvIFxcXCJoc3Jfc2hhcmVkX211dGF0aW9uOiBwZXItZWdyZXNzIG11dGF0aW9uIGlzb2xhdGlvbiBbIEZBSUwgXSByYz0kcmNcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rZmlcXG4rZXhpdCAkcmNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NTU6NDcuOTEwNzk5NTU5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDUwMzY5NzM2OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFNSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVcIixcbiAgICBcInBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lXCIsXG4gICAgXCJoc3JfZm9yd2FyZF9za2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHNoYXJlZC1tdXRhdGlvbiBpc3N1ZSBpbiBIU1IgYW5kIFBSUCBieSBjbG9uaW5nIHRoZSBza2IgYW5kIG1ha2luZyBpdCBwcml2YXRlIGJlZm9yZSBtb2RpZnlpbmcgaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBIU1IgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzYTBhYjA1OTM5NTE3MDRlMjVkMmI4OTU4ZGVkOGRjZWNkMzU5ZjA1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMTg6NTU6NDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbmluZGV4IDA3NzQ5ODFhNjVjMTYuLjk3NGI1NWYyNDg4MjEgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbisrKyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuQEAgLTMzNiwxMiArMzM2LDI0IEBAIHN0cnVjdCBza19idWZmICpoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuIFx0aW50IG1vdmVsZW47XG4gXG4gXHRpZiAoZnJhbWUtXHUwMDNlc2tiX2hzcikge1xuLVx0XHRzdHJ1Y3QgaHNyX2V0aGhkciAqaHNyX2V0aGhkciA9XG4tXHRcdFx0KHN0cnVjdCBoc3JfZXRoaGRyICopc2tiX21hY19oZWFkZXIoZnJhbWUtXHUwMDNlc2tiX2hzcik7XG4rXHRcdHN0cnVjdCBoc3JfZXRoaGRyICpoc3JfZXRoaGRyO1xuK1xuK1x0XHQvKiBUaGUgb3JpZ2luYWwgc2tiIGRhdGEgbWF5IGJlIHNoYXJlZCB3aXRoIGFub3RoZXIgZWdyZXNzXG4rXHRcdCAqIGNsb25lLiBNYWtlIHRoZSBjbG9uZSBkYXRhIHByaXZhdGUgYmVmb3JlIHVwZGF0aW5nIHRoZVxuK1x0XHQgKiBwYXRoIGlkIHNvIHRoZSB1cGRhdGUgY2Fubm90IGNvcnJ1cHQgdGhlIG90aGVyIGNvcHkuXG4rXHRcdCAqL1xuK1x0XHRza2IgPSBza2JfY2xvbmUoZnJhbWUtXHUwMDNlc2tiX2hzciwgR0ZQX0FUT01JQyk7XG4rXHRcdGlmICghc2tiKVxuK1x0XHRcdHJldHVybiBOVUxMO1xuK1x0XHRpZiAoc2tiX2Nvdyhza2IsIDApKSB7XG4rXHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4rXHRcdH1cbiBcbiBcdFx0Lyogc2V0IHRoZSBsYW5lIGlkIHByb3Blcmx5ICovXG4rXHRcdGhzcl9ldGhoZHIgPSAoc3RydWN0IGhzcl9ldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpO1xuIFx0XHRoc3Jfc2V0X3BhdGhfaWQoZnJhbWUsIGhzcl9ldGhoZHIsIHBvcnQpO1xuLVx0XHRyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLVx1MDAzZXNrYl9oc3IsIEdGUF9BVE9NSUMpO1xuK1x0XHRyZXR1cm4gc2tiO1xuIFx0fSBlbHNlIGlmIChwb3J0LVx1MDAzZWRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19IU1JfVEFHX0lOUykge1xuIFx0XHRyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLVx1MDAzZXNrYl9zdGQsIEdGUF9BVE9NSUMpO1xuIFx0fVxuQEAgLTM3NywxNSArMzg5LDI4IEBAIHN0cnVjdCBza19idWZmICpwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbiBcdGlmIChmcmFtZS1cdTAwM2Vza2JfcHJwKSB7XG4tXHRcdHN0cnVjdCBwcnBfcmN0ICp0cmFpbGVyID0gc2tiX2dldF9QUlBfcmN0KGZyYW1lLVx1MDAzZXNrYl9wcnApO1xuK1x0XHRzdHJ1Y3QgcHJwX3JjdCAqdHJhaWxlcjtcbiBcbitcdFx0LyogU2FtZSBzaGFyaW5nIGhhemFyZCBhcyBhYm92ZTogcHJpdmF0aXplIHRoZSBjbG9uZSBkYXRhXG4rXHRcdCAqIGJlZm9yZSB1cGRhdGluZyB0aGUgTEFOIGlkLlxuK1x0XHQgKi9cbitcdFx0c2tiID0gc2tiX2Nsb25lKGZyYW1lLVx1MDAzZXNrYl9wcnAsIEdGUF9BVE9NSUMpO1xuK1x0XHRpZiAoIXNrYilcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcdFx0aWYgKHNrYl9jb3coc2tiLCAwKSkge1xuK1x0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRcdHJldHVybiBOVUxMO1xuK1x0XHR9XG4rXG4rXHRcdHRyYWlsZXIgPSBza2JfZ2V0X1BSUF9yY3Qoc2tiKTtcbiBcdFx0aWYgKHRyYWlsZXIpIHtcbiBcdFx0XHRwcnBfc2V0X2xhbl9pZCh0cmFpbGVyLCBwb3J0KTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRXQVJOX09OQ0UoIXRyYWlsZXIsIFwiZXJyb3JlZCBQUlAgc2tiXCIpO1xuK1x0XHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRcdHJldHVybiBOVUxMO1xuIFx0XHR9XG4tXHRcdHJldHVybiBza2JfY2xvbmUoZnJhbWUtXHUwMDNlc2tiX3BycCwgR0ZQX0FUT01JQyk7XG4rXHRcdHJldHVybiBza2I7XG4gXHR9IGVsc2UgaWYgKHBvcnQtXHUwMDNlZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX0hTUl9UQUdfSU5TKSB7XG4gXHRcdHJldHVybiBza2JfY2xvbmUoZnJhbWUtXHUwMDNlc2tiX3N0ZCwgR0ZQX0FUT01JQyk7XG4gXHR9XG5AQCAtNDIwLDYgKzQ0NSwyMiBAQCBzdGF0aWMgdm9pZCBoc3JfZGVsaXZlcl9tYXN0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBzdGF0aWMgaW50IGhzcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcbiBcdFx0ICAgIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4ge1xuK1x0LyogQW4gaW50ZXJsaW5rLWJvdW5kIHNrYiBmcm9tIGdldF91bnRhZ2dlZF9mcmFtZSgpIGNhbiBzdGlsbCBhbGlhc1xuK1x0ICogYW5vdGhlciBsaXZlIGNvbnN1bWVyOiBmb3IgbWFzdGVyLW9yaWdpbmF0ZWQgZnJhbWVzIHRoZSBjbG9uZVxuK1x0ICogc2hhcmVzIHRoZSBvcmlnaW5hbCBUWCBza2IgKHdoaWNoIHRhcHMgb3IgdGhlIFRYIHBhdGggbWF5IHN0aWxsXG4rXHQgKiBob2xkKTsgZm9yIHJpbmcgZnJhbWVzIHRoZSBtYXN0ZXIgYWxzbyBjb25zdW1lcyB0aGVtIHdoZW4gdGhleVxuK1x0ICogYXJlIGRlc3RpbmVkIHRvIHRoZSBsb2NhbCBub2RlIHdpdGhvdXQgYmVpbmcgZXhjbHVzaXZlIHRvIGl0LlxuK1x0ICogUHJpdmF0aXplIGJlZm9yZSBhbnkgYWRkcmVzcyBtdXRhdGlvbi5cbitcdCAqL1xuK1x0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LIFx1MDAyNlx1MDAyNlxuK1x0ICAgIChmcmFtZS1cdTAwM2Vwb3J0X3Jjdi1cdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIgfHxcbitcdCAgICAgKGZyYW1lLVx1MDAzZWlzX2xvY2FsX2Rlc3QgXHUwMDI2XHUwMDI2ICFmcmFtZS1cdTAwM2Vpc19sb2NhbF9leGNsdXNpdmUpKSBcdTAwMjZcdTAwMjZcbitcdCAgICBza2JfY293KHNrYiwgMCkpIHtcbitcdFx0ZnJhbWUtXHUwMDNlcG9ydF9yY3YtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQrKztcbitcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdHJldHVybiBORVRfWE1JVF9EUk9QO1xuK1x0fVxuK1xuIFx0aWYgKGZyYW1lLVx1MDAzZXBvcnRfcmN2LVx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUikge1xuIFx0XHRoc3JfYWRkcl9zdWJzdF9kZXN0KGZyYW1lLVx1MDAzZW5vZGVfc3JjLCBza2IsIHBvcnQpO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5pbmRleCAzMWZiOTMyNmNmNTMzLi5hZWFlN2YzZDZkZDE0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuQEAgLTcsNiArNyw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdGhzcl9yZWRib3guc2ggXFxcbiBcdGxpbmtfZmF1bHRzLnNoIFxcXG4gXHRwcnBfcGluZy5zaCBcXFxuK1x0aHNyX3NoYXJlZF9tdXRhdGlvbi5zaCBcXFxuICMgZW5kIG9mIFRFU1RfUFJPR1NcbiBcbiBURVNUX0ZJTEVTICs9IGhzcl9jb21tb24uc2hcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9zaGFyZWRfbXV0YXRpb24uc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9zaGFyZWRfbXV0YXRpb24uc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yNzEwMzU0MWNkNzhjXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9zaGFyZWRfbXV0YXRpb24uc2hcbkBAIC0wLDAgKzEsMjEzIEBAXG4rIyEvYmluL2Jhc2hcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI1xuKyMgVmVyaWZ5IHRoYXQgcGVyLWVncmVzcyBtdXRhdGlvbnMgb2Ygc2hhcmVkIHNrYiBkYXRhIGFyZSBwcml2YXRlOlxuKyNcbisjIEYyIChwYXRoL0xBTiBJRCk6IG9uIGFuIGFmZmVjdGVkIGtlcm5lbCB0aGUgc2Vjb25kIHNsYXZlJ3MgTEFOLUlEIHdyaXRlXG4rIyBsYW5kcyBpbiB0aGUgZmlyc3Qgc2xhdmUncyBzdGlsbC1xdWV1ZWQgY2xvbmU7IHdpdGggYSBuZXRlbSBkZWxheSBvblxuKyMgc2xhdmUgQSwgaW5qZWN0ZWQgZnJhbWVzIGxlYXZlIEEgY2FycnlpbmcgQidzIExBTiBJRC5cbisjXG4rIyBGMSAoUmVkQm94IHNvdXJjZSBNQUMpOiBvbiBhbiBhZmZlY3RlZCBrZXJuZWwgYW4gSFNSLXRhZ2dlZCBtdWx0aWNhc3RcbisjIGZyYW1lIHJlY2VpdmVkIG9uIGEgUmVkQm94IHNsYXZlIGlzIGNsb25lZCBmb3IgbWFzdGVyIGFuZCBpbnRlcmxpbmssXG4rIyBhbmQgdGhlIGludGVybGluaydzIFJlZEJveC1NQUMgcmV3cml0ZSBsYW5kcyBpbiB0aGUgbWFzdGVyIGNsb25lJ3NcbisjIGJ1ZmZlciwgc28gdGhlIGxvY2FsIHN0YWNrIHJlY2VpdmVzIHRoZSBSZWRCb3ggTUFDIGluc3RlYWQgb2YgdGhlXG4rIyBvcmlnaW5hdGluZyBub2RlJ3MgTUFDLlxuK1xuK2lwdjY9ZmFsc2Vcbitcbitzb3VyY2UgLi9oc3JfY29tbW9uLnNoXG4rXG4rRFVSPTVcbitcbityZXF1aXJlKClcbit7XG4rXHRjb21tYW5kIC12IFwiJDFcIiBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XHUwMDI2IHJldHVybiAwXG4rXHRlY2hvIFwiU0tJUDogJDEgbm90IGF2YWlsYWJsZVwiXG4rXHRleGl0ICRrc2Z0X3NraXBcbit9XG4rXG4rcmVxdWlyZSBpcFxuK3JlcXVpcmUgdGNcbityZXF1aXJlIHB5dGhvbjNcbitcbit0cmFwIGNsZWFudXBfYWxsX25zIEVYSVRcbitcbisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRjI6IExBTi1JRCBpc29sYXRpb25cbisjIFBSUCBEQU5QIChwcm90byAxKSwgQUZfUEFDS0VUIHByZS10YWdnZWQgaW5qZWN0aW9uLCBuZXRlbSBvbiBzbGF2ZSBBLlxuK3J1bl9mMigpXG4re1xuK1x0c2V0dXBfbnMgbnMgMlx1MDAzZS9kZXYvbnVsbCB8fCByZXR1cm4gJGtzZnRfc2tpcFxuK1x0bnN4KCkgeyBpcCBuZXRucyBleGVjIFwiJG5zXCIgXCIkQFwiOyB9XG4rXG4rXHQjIFByb2JlIHNjaF9uZXRlbSBpbnNpZGUgdGhlIGRpc3Bvc2FibGUgbmFtZXNwYWNlIG9ubHkuXG4rXHRpZiAhIG5zeCB0YyBxZGlzYyBhZGQgZGV2IGxvIHJvb3QgbmV0ZW0gZGVsYXkgMW1zIDJcdTAwM2UvZGV2L251bGw7IHRoZW5cbitcdFx0ZWNobyBcIlNLSVA6IHNjaF9uZXRlbSBub3QgYXZhaWxhYmxlXCJcbitcdFx0cmV0dXJuICRrc2Z0X3NraXBcbitcdGZpXG4rXHRuc3ggdGMgcWRpc2MgZGVsIGRldiBsbyByb290IDJcdTAwM2UvZGV2L251bGxcbitcbitcdCMgQ2FwYWJpbGl0eSBwcm9iZXMgZW5kIGhlcmU7IHNldHVwIG9yIHJ1bnRpbWUgZmFpbHVyZSBiZWxvdyBpcyBGQUlMLlxuK1x0bnN4IGlwIGxpbmsgYWRkIHZBIHR5cGUgdmV0aCBwZWVyIG5hbWUgdkFwIHx8IHsgZWNobyBcIkZBSUw6IHZldGggQVwiOyByZXR1cm4gMTsgfVxuK1x0bnN4IGlwIGxpbmsgYWRkIHZCIHR5cGUgdmV0aCBwZWVyIG5hbWUgdkJwIHx8IHsgZWNobyBcIkZBSUw6IHZldGggQlwiOyByZXR1cm4gMTsgfVxuK1x0Zm9yIGkgaW4gdkEgdkIgdkFwIHZCcDsgZG9cbitcdFx0bnN4IGlwIGxpbmsgc2V0IFwiJGlcIiB1cCB8fCB7IGVjaG8gXCJGQUlMOiAkaSB1cFwiOyByZXR1cm4gMTsgfVxuK1x0ZG9uZVxuK1x0bnN4IGlwIGxpbmsgYWRkIG5hbWUgcHJwMCB0eXBlIGhzciBzbGF2ZTEgdkEgc2xhdmUyIHZCIHN1cGVydmlzaW9uIDQ1IHByb3RvIDEgMlx1MDAzZS9kZXYvbnVsbFxuK1x0aWYgWyAkPyAtbmUgMCBdOyB0aGVuXG4rXHRcdGVjaG8gXCJTS0lQOiBIU1IvUFJQIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBrZXJuZWxcIlxuK1x0XHRyZXR1cm4gJGtzZnRfc2tpcFxuK1x0ZmlcbitcdG5zeCBpcCBsaW5rIHNldCBwcnAwIHVwIHx8IHsgZWNobyBcIkZBSUw6IHBycDAgdXBcIjsgcmV0dXJuIDE7IH1cbitcdG5zeCB0YyBxZGlzYyBhZGQgZGV2IHZBIHJvb3QgbmV0ZW0gZGVsYXkgMjAwbXMgfHwgeyBlY2hvIFwiRkFJTDogbmV0ZW1cIjsgcmV0dXJuIDE7IH1cbitcbitcdG5zeCBweXRob24zIC9kZXYvc3RkaW4gXCIkRFVSXCIgXHUwMDNjXHUwMDNjJ1BZRjInXG4raW1wb3J0IHNvY2tldCwgc3RydWN0LCBzZWxlY3QsIHN5cywgdGltZVxuK1xuK2R1ciA9IGludChzeXMuYXJndlsxXSlcbitkZWYgbGFuaWQocGt0KTpcbisgICAgaWYgbGVuKHBrdCkgXHUwMDNjIDIwIG9yIHBrdFstMjpdICE9IGJcIlxceDg4XFx4ZmJcIjpcbisgICAgICAgIHJldHVybiBOb25lXG4rICAgIHJldHVybiAocGt0Wy00XSBcdTAwM2VcdTAwM2UgNCkgXHUwMDI2IDB4RlxuK1xuK1NSQyA9IGJ5dGVzLmZyb21oZXgob3BlbihcIi9zeXMvY2xhc3MvbmV0L3BycDAvYWRkcmVzc1wiKS5yZWFkKCkucmVwbGFjZShcIjpcIiwgXCJcIikpXG4rRFNUID0gYnl0ZXMuZnJvbWhleChcIjAyYWFiYmNjZGQwMVwiKVxuK1BBWSA9IGJ5dGVzKHJhbmdlKDQ2KSlcbityY3QwID0gc3RydWN0LnBhY2soXCJcdTAwM2VIXCIsIDApICsgc3RydWN0LnBhY2soXCJcdTAwM2VIXCIsIDUyIFx1MDAyNiAweDBGRkYpICsgYlwiXFx4ODhcXHhmYlwiXG4rZnJhbWUgPSBEU1QgKyBTUkMgKyBiXCJcXHgwOFxceDAwXCIgKyBQQVkgKyByY3QwXG4rXG4rdHggPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVyk7IHR4LmJpbmQoKFwicHJwMFwiLCAwKSlcbitzQSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXLFxuKyAgICAgICAgc29ja2V0Lm50b2hzKDB4MDAwMykpXG4rc0EuYmluZCgoXCJ2QXBcIiwgMCkpXG4rc0IgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVyxcbisgICAgICAgIHNvY2tldC5udG9ocygweDAwMDMpKVxuK3NCLmJpbmQoKFwidkJwXCIsIDApKVxuK3NBLnNldGJsb2NraW5nKEZhbHNlKTsgc0Iuc2V0YmxvY2tpbmcoRmFsc2UpXG4rZm9yIF8gaW4gcmFuZ2UoMjAwKTpcbisgICAgdHguc2VuZChmcmFtZSk7IHRpbWUuc2xlZXAoMC4wMDEpXG4rXG4rYSwgYiA9IFtdLCBbXVxuK2VuZCA9IHRpbWUudGltZSgpICsgZHVyXG4rd2hpbGUgdGltZS50aW1lKCkgXHUwMDNjIGVuZDpcbisgICAgciwgXywgXyA9IHNlbGVjdC5zZWxlY3QoW3NBLCBzQl0sIFtdLCBbXSwgMC4zKVxuKyAgICBmb3IgcyBpbiByOlxuKyAgICAgICAgcGt0ID0gcy5yZWN2KDY1NTM1KVxuKyAgICAgICAgaWYgKHBrdFs6Nl0gIT0gRFNUIG9yIHBrdFs2OjEyXSAhPSBTUkMgb3IgcGt0WzEyOjE0XSAhPSBiXCJcXHgwOFxceDAwXCJcbisgICAgICAgICAgICAgICAgb3IgcGt0WzE0OjE0ICsgbGVuKFBBWSldICE9IFBBWSk6XG4rICAgICAgICAgICAgY29udGludWVcbisgICAgICAgIGxpZCA9IGxhbmlkKHBrdClcbisgICAgICAgIGlmIGxpZCBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICAoYSBpZiBzIGlzIHNBIGVsc2UgYikuYXBwZW5kKGxpZClcbitcbitwcmludChcIkEtc2lkZSBjb3VudD0lZCBsYW4gaWRzPSVzXCIgJSAobGVuKGEpLCBzb3J0ZWQoc2V0KGEpKSkpXG4rcHJpbnQoXCJCLXNpZGUgY291bnQ9JWQgbGFuIGlkcz0lc1wiICUgKGxlbihiKSwgc29ydGVkKHNldChiKSkpKVxuK2lmIGxlbihhKSBcdTAwM2MgMTUwIG9yIGxlbihiKSBcdTAwM2MgMTUwOlxuKyAgICBwcmludChcIkZBSUw6IHRvbyBmZXcgaW5qZWN0ZWQgZnJhbWVzIGNhcHR1cmVkIChBPSVkIEI9JWQsIHNlbnQgMjAwKVwiICUgKGxlbihhKSwgbGVuKGIpKSlcbisgICAgc3lzLmV4aXQoMSlcbitiYWRfYSA9IFt4IGZvciB4IGluIGEgaWYgKHggXHUwMDI2IDEpICE9IDBdXG4rYmFkX2IgPSBbeCBmb3IgeCBpbiBiIGlmICh4IFx1MDAyNiAxKSAhPSAxXVxuK2lmIGJhZF9hIG9yIGJhZF9iOlxuKyAgICBwcmludChcIkZBSUw6IHNoYXJlZC1tdXRhdGlvbiBjb3JydXB0aW9uIC0gQTogJWQvJWQgd3JvbmctbGFuLCBCOiAlZC8lZCB3cm9uZy1sYW5cIlxuKyAgICAgICAgICAlIChsZW4oYmFkX2EpLCBsZW4oYSksIGxlbihiYWRfYiksIGxlbihiKSkpXG4rICAgIHN5cy5leGl0KDEpXG4rcHJpbnQoXCJQQVNTOiBwZXItZWdyZXNzIExBTiBJRHMgaXNvbGF0ZWQgKEEgYWxsIGJpdDA9MCwgQiBhbGwgYml0MD0xKVwiKVxuK3N5cy5leGl0KDApXG4rUFlGMlxuK31cbitcbisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGMTogUmVkQm94IHNvdXJjZS1NQUMgcHJpdmFjeVxuKyMgSFNSIFJlZEJveCAocHJvdG8gMCksIHRhZ2dlZCBtdWx0aWNhc3QgZnJvbSBhIHNsYXZlOiBtYXN0ZXIgbXVzdCBrZWVwXG4rIyB0aGUgbm9kZSBNQUMsIGludGVybGluayBtdXN0IGNhcnJ5IHRoZSBSZWRCb3ggTUFDLlxuK3J1bl9mMSgpXG4re1xuK1x0c2V0dXBfbnMgbnMgMlx1MDAzZS9kZXYvbnVsbCB8fCByZXR1cm4gJGtzZnRfc2tpcFxuK1x0bnN4KCkgeyBpcCBuZXRucyBleGVjIFwiJG5zXCIgXCIkQFwiOyB9XG4rXG4rXHRuc3ggaXAgbGluayBhZGQgdkEgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2QXAgfHwgeyBlY2hvIFwiRkFJTDogdmV0aCBBXCI7IHJldHVybiAxOyB9XG4rXHRuc3ggaXAgbGluayBhZGQgdkIgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2QnAgfHwgeyBlY2hvIFwiRkFJTDogdmV0aCBCXCI7IHJldHVybiAxOyB9XG4rXHRuc3ggaXAgbGluayBhZGQgdkkgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2SXAgfHwgeyBlY2hvIFwiRkFJTDogdmV0aCBJXCI7IHJldHVybiAxOyB9XG4rXHRmb3IgaSBpbiB2QSB2QiB2SSB2QXAgdkJwIHZJcDsgZG9cbitcdFx0bnN4IGlwIGxpbmsgc2V0IFwiJGlcIiB1cCB8fCB7IGVjaG8gXCJGQUlMOiAkaSB1cFwiOyByZXR1cm4gMTsgfVxuK1x0ZG9uZVxuK1x0bnN4IGlwIGxpbmsgYWRkIG5hbWUgaHNyMCB0eXBlIGhzciBzbGF2ZTEgdkEgc2xhdmUyIHZCIGludGVybGluayB2SSBcXFxuK1x0XHRzdXBlcnZpc2lvbiA0NSBwcm90byAwIDJcdTAwM2UvZGV2L251bGxcbitcdGlmIFsgJD8gLW5lIDAgXTsgdGhlblxuK1x0XHRlY2hvIFwiU0tJUDogSFNSIFJlZEJveCBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMga2VybmVsXCJcbitcdFx0cmV0dXJuICRrc2Z0X3NraXBcbitcdGZpXG4rXHRuc3ggaXAgbGluayBzZXQgaHNyMCB1cCB8fCB7IGVjaG8gXCJGQUlMOiBoc3IwIHVwXCI7IHJldHVybiAxOyB9XG4rXG4rXHRuc3ggcHl0aG9uMyAvZGV2L3N0ZGluIFx1MDAzY1x1MDAzYydQWUYxJ1xuK2ltcG9ydCBzb2NrZXQsIHNlbGVjdCwgc3lzLCB0aW1lXG4rXG4rTk9ERSAgPSBieXRlcy5mcm9taGV4KFwiMDIxMTIyMzM0NDU1XCIpXG4rTUNBU1QgPSBieXRlcy5mcm9taGV4KFwiMDEwMDVlMDAwMDAxXCIpXG4rUkIgICAgPSBieXRlcy5mcm9taGV4KG9wZW4oXCIvc3lzL2NsYXNzL25ldC92SS9hZGRyZXNzXCIpLnJlYWQoKS5yZXBsYWNlKFwiOlwiLCBcIlwiKSlcbitQQVkgICA9IGJ5dGVzKHJhbmdlKDQ2KSlcbitcbitkZWYgZnJhbWUoc2VxKTpcbisgICAgdGFnID0gKCgxIFx1MDAzY1x1MDAzYyAxMikgfCBsZW4oUEFZKSkudG9fYnl0ZXMoMiwgXCJiaWdcIikgKyBzZXEudG9fYnl0ZXMoMiwgXCJiaWdcIikgKyBiXCJcXHgwOFxceDAwXCJcbisgICAgcmV0dXJuIE1DQVNUICsgTk9ERSArIGJcIlxceDg5XFx4MmZcIiArIHRhZyArIFBBWVxuK1xuK3R4ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcpOyB0eC5iaW5kKChcInZBcFwiLCAwKSlcbitzbSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXLFxuKyAgICAgICAgc29ja2V0Lm50b2hzKDB4MDAwMykpXG4rc20uYmluZCgoXCJoc3IwXCIsIDApKVxuK3NpID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcsXG4rICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSlcbitzaS5iaW5kKChcInZJcFwiLCAwKSlcbitzbS5zZXRibG9ja2luZyhGYWxzZSk7IHNpLnNldGJsb2NraW5nKEZhbHNlKVxuK1xuK2ZvciBpIGluIHJhbmdlKDMpOlxuKyAgICB0eC5zZW5kKGZyYW1lKGkgKyAxKSk7IHRpbWUuc2xlZXAoMC4wNSlcbitcbittX3NyYyA9IGlfc3JjID0gTm9uZVxuK2VuZCA9IHRpbWUudGltZSgpICsgNFxuK3doaWxlIHRpbWUudGltZSgpIFx1MDAzYyBlbmQgYW5kIChtX3NyYyBpcyBOb25lIG9yIGlfc3JjIGlzIE5vbmUpOlxuKyAgICByLCBfLCBfID0gc2VsZWN0LnNlbGVjdChbc20sIHNpXSwgW10sIFtdLCAwLjMpXG4rICAgIGZvciBzIGluIHI6XG4rICAgICAgICBwa3QgPSBzLnJlY3YoNjU1MzUpXG4rICAgICAgICAjIGV4YWN0IGZsb3c6IGRzdCwgcG9zdC1zdHJpcCBFdGhlclR5cGUsIGV4YWN0IHBheWxvYWQsIG1pbiBsZW5ndGg7XG4rICAgICAgICAjIGhfc291cmNlIGlzIHRoZSBhc3NlcnRlZCB2YWx1ZSBhbmQgbXVzdCBOT1QgYmUgZmlsdGVyZWQgb25cbisgICAgICAgIGlmIChsZW4ocGt0KSBcdTAwM2MgNjAgb3IgcGt0Wzo2XSAhPSBNQ0FTVCBvciBwa3RbMTI6MTRdICE9IGJcIlxceDA4XFx4MDBcIlxuKyAgICAgICAgICAgICAgICBvciBwa3RbMTQ6MTQgKyBsZW4oUEFZKV0gIT0gUEFZKTpcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICAgICAgaWYgcyBpcyBzbSBhbmQgbV9zcmMgaXMgTm9uZTpcbisgICAgICAgICAgICBtX3NyYyA9IHBrdFs2OjEyXVxuKyAgICAgICAgZWxpZiBzIGlzIHNpIGFuZCBpX3NyYyBpcyBOb25lOlxuKyAgICAgICAgICAgIGlfc3JjID0gcGt0WzY6MTJdXG4rXG4rcHJpbnQoXCJtYXN0ZXIgaF9zb3VyY2UgICAgPVwiLCBtX3NyYy5oZXgoKSBpZiBtX3NyYyBlbHNlIE5vbmUpXG4rcHJpbnQoXCJub2RlIE1BQyAgICAgICAgICAgPVwiLCBOT0RFLmhleCgpKVxuK3ByaW50KFwiaW50ZXJsaW5rIGhfc291cmNlID1cIiwgaV9zcmMuaGV4KCkgaWYgaV9zcmMgZWxzZSBOb25lKVxuK3ByaW50KFwicmVkYm94IE1BQyAgICAgICAgID1cIiwgUkIuaGV4KCkpXG4raWYgaV9zcmMgIT0gUkI6XG4rICAgIHByaW50KFwiRkFJTDogaW50ZXJsaW5rIGRpZCBub3QgY2FycnkgdGhlIFJlZEJveCBNQUNcIilcbisgICAgc3lzLmV4aXQoMSlcbitpZiBtX3NyYyAhPSBOT0RFOlxuKyAgICBwcmludChcIkZBSUw6IG1hc3RlciByZWNlaXZlZCAlcyBpbnN0ZWFkIG9mIHRoZSBub2RlIE1BQyBcIlxuKyAgICAgICAgICBcIihzaGFyZWQtbXV0YXRpb24gY29ycnVwdGlvbilcIiAlIChtX3NyYy5oZXgoKSBpZiBtX3NyYyBlbHNlIFwibm90aGluZ1wiKSlcbisgICAgc3lzLmV4aXQoMSlcbitwcmludChcIlBBU1M6IG1hc3RlciBrZXB0IG5vZGUgTUFDLCBpbnRlcmxpbmsga2VwdCBSZWRCb3ggTUFDXCIpXG4rc3lzLmV4aXQoMClcbitQWUYxXG4rfVxuK1xuK3JjPTBcbitcbitydW5fZjJcbityZXQ9JD9cbitbIFwiJHJldFwiIC1lcSBcIiRrc2Z0X3NraXBcIiBdIFx1MDAyNlx1MDAyNiBleGl0IFwiJGtzZnRfc2tpcFwiXG4rWyBcIiRyZXRcIiAtZXEgMCBdIHx8IHJjPTFcbitcbitydW5fZjFcbityZXQ9JD9cbitbIFwiJHJldFwiIC1lcSBcIiRrc2Z0X3NraXBcIiBdIFx1MDAyNlx1MDAyNiBleGl0IFwiJGtzZnRfc2tpcFwiXG4rWyBcIiRyZXRcIiAtZXEgMCBdIHx8IHJjPTFcbitcbitpZiBbICRyYyAtZXEgMCBdOyB0aGVuXG4rXHRlY2hvIFwiaHNyX3NoYXJlZF9tdXRhdGlvbjogcGVyLWVncmVzcyBtdXRhdGlvbiBpc29sYXRpb24gKEYxK0YyKSBbIE9LIF1cIlxuK2Vsc2VcbitcdGVjaG8gXCJoc3Jfc2hhcmVkX211dGF0aW9uOiBwZXItZWdyZXNzIG11dGF0aW9uIGlzb2xhdGlvbiBbIEZBSUwgXSByYz0kcmNcIiAxXHUwMDNlXHUwMDI2MlxuK2ZpXG4rZXhpdCAkcmNcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjU1OjQ3LjkxMDgwMTEzOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MTE2Nzg2NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIU1IgUGF0Y2ggYW5kIGl0cyBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBzZWVtcyBsaWtlIGEgZml4IGZvciBhIHNoYXJlZC1tdXRhdGlvbiBpc3N1ZSBpbiBIU1IgYW5kIFBSUCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AgZmlsZS4gSW50ZXJlc3RpbmcuIFRoZSBwYXRjaCBpcyBhbHNvIGFkZGluZyBhIG5ldyB0ZXN0LCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3Jfc2hhcmVkX211dGF0aW9uLnNoYCwgd2hpY2ggc2hvdWxkIGJlIGhlbHBmdWwgZm9yIHZhbGlkYXRpbmcgdGhlIGZpeC5cblxuVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0sIGFzIEkgdW5kZXJzdGFuZCBpdCwgbGllcyBpbiBob3cgZnJhbWVzIGFyZSBjbG9uZWQgd2hlbiBzZW50IG91dCB0byBtdWx0aXBsZSBlZ3Jlc3MgcG9ydHMuIFRoZSBmaXggaW52b2x2ZXMgdXNpbmcgYHNrYl9jbG9uZWAgYW5kIGBza2JfY293YCBpbiB0aGUgYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCBhbmQgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCBmdW5jdGlvbnMgdG8gZW5zdXJlIHRoYXQgbW9kaWZ5aW5nIHRoZSBwYXRoIElEIG9yIExBTiBJRCBvbiBhIGNsb25lZCBmcmFtZSBkb2Vzbid0IGNvcnJ1cHQgdGhlIG9yaWdpbmFsIGRhdGEuIFRoaXMgbWFrZXMgcGVyZmVjdCBzZW5zZTsgc2hhcmVkIGRhdGEgY29ycnVwdGlvbiBpcyBhIG5hc3R5IGJ1Zy4gVGhlIGFkZGl0aW9uIG9mIGFuIGBza2JfY293YCBjaGVjayBpbiBgaHNyX3htaXRgIGZvciBpbnRlcmxpbmstYm91bmQgc2ticyBzZWVtcyBsaWtlIGEgbmVjZXNzYXJ5IHByZWNhdXRpb24gdG8gY2F0Y2ggYW55dGhpbmcgdGhhdCBtYXkgaGF2ZSBiZWVuIG1pc3NlZC5cblxuTm93LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGFjdHVhbCBjb2RlIGluIGBuZXQvaHNyL2hzcl9mb3J3YXJkLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIEhTUiBsb2dpYyByZXNpZGVzLCBzbyB1bmRlcnN0YW5kaW5nIGl0IHRob3JvdWdobHkgaXMgY3J1Y2lhbC4gR2l2ZW4gdGhhdCBIU1IgaXMgYSBuZXR3b3JrIHByb3RvY29sLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY29kZSBwYXRoIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSB3aXRoaW4gbXkgc3RhbmRhcmQgUUVNVSBzZXR1cC4gU2luY2UgSFNSIGlzIGltcGxlbWVudGVkIGFzIGEgc29mdHdhcmUgbmV0d29yayBkZXZpY2UsIHNpbWlsYXIgdG8gYSBicmlkZ2Ugb3IgVkxBTiwgdGhlbiBJIHdvdWxkIGV4cGVjdCBpdCB0byBiZS5cblxuVGhlIHRlc3Qgc2NyaXB0IGl0c2VsZiBjb25maXJtcyB0aGlzLCB1c2luZyBgaXAgbGluayBhZGQgbmFtZSBwcnAwIHR5cGUgaHNyIHNsYXZlMSB2QSBzbGF2ZTIgdkIgc3VwZXJ2aXNpb24gNDUgcHJvdG8gMWAgd2hpY2ggc3VnZ2VzdHMgdGhhdCBpdCdzIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZS4gVGhpcyBjb25maXJtcyBteSB1bmRlcnN0YW5kaW5nLlxuXG5OZXh0LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGhvdyBIU1IgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSdsbCBzZWFyY2ggZm9yIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMg4oCTIGxpa2VseSBsb29raW5nIGZvciBcImhzclwiIGluIGBuZXQvaHNyL0tjb25maWdgIG9yIGEgc2ltaWxhciBmaWxlLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJdCdzIGltcG9ydGFudCB0byBrbm93IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGEgY29tcGxldGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQwNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjU1OjU0LjMyMjQ4MjU0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNzU2MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIU1JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvS2NvbmZpZy01LVxcbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1JcXG5uZXQvaHNyL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFxcdTAwMjYgUFJQKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NTU6NTQuNDA0MjQzNTc5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3MjU1NTIwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBDT05GSUdfSFNSKipcblxuT2theSwgc28gYENPTkZJR19IU1JgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gTXkgdGFzayBpcyB0byB1bmRlcnN0YW5kIGl0cyByYW1pZmljYXRpb25zLiBMZXQncyBkaWcgaW4gYW5kIHNlZSBob3cgaXQncyBhZmZlY3RpbmcgdGhpbmdzLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBhcyBhIHJlc3VsdCBvZiBlbmFibGluZy9kaXNhYmxpbmcgYENPTkZJR19IU1JgLiBJdCBzZWVtcyBsaWtlIGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGFuZCBgaHNyX3htaXRgIGFyZSB0aGUgYXJlYXMgb2YgaW50ZXJlc3QsIHRoZSBzcGVjaWZpYyBkZXRhaWxzIG9mIHRoZXNlIGZ1bmN0aW9uIGNhbGxzIGFyZSB2ZXJ5IGltcG9ydGFudC4gTm93LCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZWlyIHJvbGUgYW5kIGFjY2Vzc2liaWxpdHkgSSBoYXZlIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW50ZXJuYWwgKHN0YXRpYykgb3IgdmlzaWJsZSBvdXRzaWRlIHRoZSBtb2R1bGUgKGV4cG9ydGVkKS4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgcmVxdWlyZSB0byBkZXRlcm1pbmUgaG93IHRoaXMgY29uZmlndXJhdGlvbiBjaGFuZ2UgYWZmZWN0cyB0aGUgbGFyZ2VyIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI4OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjU1OjU4LjE3NjgwOTU0OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUzMzg5OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9oc3JfZGV2aWNlLmM9NjIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaHNyX3Byb3RvX29wcyBoc3Jfb3BzID0ge1xcbm5ldC9oc3IvaHNyX2RldmljZS5jLTYyMi1cXHQuc2VuZF9zdl9mcmFtZSA9IHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lLFxcbm5ldC9oc3IvaHNyX2RldmljZS5jOjYyMzpcXHQuY3JlYXRlX3RhZ2dlZF9mcmFtZSA9IGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lLFxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTYyNC1cXHQuZ2V0X3VudGFnZ2VkX2ZyYW1lID0gaHNyX2dldF91bnRhZ2dlZF9mcmFtZSxcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz0yODg9c3RhdGljIHN0cnVjdCBza19idWZmICpoc3JfZmlsbF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy0zMzAtICovXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjMzMTpzdHJ1Y3Qgc2tfYnVmZiAqaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtMzMyLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaD0xNz1zdHJ1Y3Qgc2tfYnVmZiAqcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMTgtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGhzcl9wb3J0ICpwb3J0KTtcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmg6MTk6c3RydWN0IHNrX2J1ZmYgKmhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxubmV0L2hzci9oc3JfZm9yd2FyZC5oLTIwLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBoc3JfcG9ydCAqcG9ydCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjU1OjU4LjMxMjE1Nzc4NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzU0ODk3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBGdW5jdGlvbiBBdHRyaWJ1dGVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBhbmQgYGhzcl94bWl0YC4gUmlnaHQgYXdheSwgdGhlIGNyaXRpY2FsIGRpc3RpbmN0aW9uIGp1bXBzIG91dC4gSSd2ZSBnb3QgdG8gZGV0ZXJtaW5lIHdoaWNoIG9mIHRoZXNlIGFyZSBzdGF0aWMgYW5kIHdoaWNoIGFyZW4ndC4gQ2xlYXJseSwgYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCBpcyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbi4gQWxzbywgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCBpcyAqYWxzbyogbm90IGEgc3RhdGljIGZ1bmN0aW9uLiBPbiB0aGUgb3RoZXIgaGFuZCwgYGhzcl94bWl0YCBpcywgaW4gZmFjdCwgc3RhdGljLiBUaGlzIGlzIHRoZSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24sIGFuZCB3aGVyZSBteSBhbmFseXNpcyB3aWxsIGxpa2VseSBkaXZlcmdlLCBkZXBlbmRpbmcgb24gdGhlIGxhcmdlciBjb250ZXh0IG9mIHdoYXQgaXMgYmVpbmcgZXhhbWluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NzIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxODo1NjowMS40ODc2NTA2MDdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MzczNDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhzcl94bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvaHNyX2ZvcndhcmQuYz00MjQ9c3RhdGljIHZvaWQgaHNyX2RlbGl2ZXJfbWFzdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNDQ0LVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo0NDU6c3RhdGljIGludCBoc3JfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTQ0Ni1cXHRcXHQgICAgc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz01NjA9c3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfZG8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy02MjEtXFx0XFx0fSBlbHNlIHtcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NjIyOlxcdFxcdFxcdGlmICghaHNyX3htaXQoc2tiLCBwb3J0LCBmcmFtZSkpXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTYyMy1cXHRcXHRcXHRcXHRpZiAocG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQSB8fFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxODo1NjowMS42MDMwMzIwMDVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODE4NDU0Nzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgSFNSIFBhY2tldCBGb3J3YXJkaW5nIFBhdGgqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBIU1IgcGFja2V0IHRyYW5zbWlzc2lvbiBwcm9jZXNzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGBoc3JfeG1pdGAuIEkgc2VlIGl0J3MgZGVjbGFyZWQgYHN0YXRpY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIFN0YXRpYyBtZWFucyBpdCdzIGxpbWl0ZWQgaW4gc2NvcGUsIGxpa2VseSBpbnRlcm5hbCB0byBpdHMgY29tcGlsYXRpb24gdW5pdC4gTm93LCBnaXZlbiB0aGF0IGBoc3JfeG1pdGAgaXMgYmVpbmcgY2FsbGVkIGJ5IGBoc3JfZm9yd2FyZF9kb2AsIEknbSBjdXJpb3VzIGFib3V0IHRoZSBjYWxsaW5nIGZ1bmN0aW9uJ3Mgc2NvcGUuIElzIGBoc3JfZm9yd2FyZF9kb2AgYWxzbyBzdGF0aWM/IElmIHNvLCB0aGlzIHN1Z2dlc3RzIGEgdGlnaHQsIGxvY2FsaXplZCBoYW5kbGluZyBvZiBwYWNrZXQgZm9yd2FyZGluZyB3aXRoaW4gYSBzcGVjaWZpYyBtb2R1bGUgb3IgY29tcG9uZW50LiBUaGUgbGltaXRlZCB2aXNpYmlsaXR5IGltcGxpZXMgYSB3ZWxsLWRlZmluZWQgaW50ZXJhY3Rpb24gcG9pbnQsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSBgaHNyX2ZvcndhcmRfZG9gJ3Mgc3RhdGljIG5hdHVyZSB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgZGVidWdnaW5nIGFuZCBtb2RpZmljYXRpb24uIEknbGwgY2hlY2sgaXRzIGRlY2xhcmF0aW9uIG5vdyB0byBjb25maXJtIG15IGh5cG90aGVzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0ODksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxODo1NjowNS40MjE0ODkzNTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MTg3Nzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhzcl9mb3J3YXJkX2RvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvaHNyX2ZvcndhcmQuYz00OTI9Ym9vbCBoc3JfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNTU5LSAqL1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo1NjA6c3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfZG8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNTYxLXtcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz03NzU9dm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc4My1cXHRoc3JfcmVnaXN0ZXJfZnJhbWVfaW4oZnJhbWUubm9kZV9zcmMsIHBvcnQsIGZyYW1lLnNlcXVlbmNlX25yKTtcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6Nzg0OlxcdGhzcl9mb3J3YXJkX2RvKFxcdTAwMjZmcmFtZSk7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc4NS1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NTY6MDUuNTA1NjgyMzUyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MzY5MzMxNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGhzcl9mb3J3YXJkX3NrYmAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGBoc3JfZm9yd2FyZF9za2JgIGZ1bmN0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlIGlzIHRoYXQgaXQncyAqbm90KiBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG1vcmUgY2xlYXJseS4gVGhpcyBtZWFucyBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIGZpZ3VyZSBvdXQgd2h5IGl0J3Mgc3RydWN0dXJlZCB0aGlzIHdheS4gSSB3aWxsIHN0YXJ0IGJ5IGNhcmVmdWxseSBleGFtaW5pbmcgdGhlIGNvZGUgdG8gY2hlY2sgZXhhY3RseSB3aGF0IGl0IGRvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwNDEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxODo1NjowOC4yNDI2MTk5ODFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjQ2NTk0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoc3JfZm9yd2FyZF9za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9oc3JfZGV2aWNlLmM9MjI0PXN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTIzNS1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxubmV0L2hzci9oc3JfZGV2aWNlLmM6MjM2OlxcdFxcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XFxubmV0L2hzci9oc3JfZGV2aWNlLmMtMjM3LVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmM9MjkzPXN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTM2My1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzozNjQ6XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxubmV0L2hzci9oc3JfZGV2aWNlLmMtMzY1LVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmM9MzY5PXN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNDA0LVxcbm5ldC9oc3IvaHNyX2RldmljZS5jOjQwNTpcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xcbm5ldC9oc3IvaHNyX2RldmljZS5jLTQwNi1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz03MTc9c3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NzQtLyogTXVzdCBiZSBjYWxsZWQgaG9sZGluZyByY3UgcmVhZCBsb2NrIChiZWNhdXNlIG9mIHRoZSBwb3J0IHBhcmFtZXRlcikgKi9cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6Nzc1OnZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzc2LXtcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaC0xNS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmg6MTY6dm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KTtcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMTctc3RydWN0IHNrX2J1ZmYgKnBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxuLS1cXG5uZXQvaHNyL2hzcl9zbGF2ZS5jPTI0PXN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGhzcl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxcbi0tXFxubmV0L2hzci9oc3Jfc2xhdmUuYy04MC1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxubmV0L2hzci9oc3Jfc2xhdmUuYzo4MTpcXHRcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTgyLVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbm5ldC9oc3IvaHNyX3NsYXZlLmMtODMtXFx0fSBlbHNlIHtcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jOjg0OlxcdFxcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xcbm5ldC9oc3IvaHNyX3NsYXZlLmMtODUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxODo1NjowOC42ODkwOTE0NDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxNTE5NzY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgYGhzcl9mb3J3YXJkX3NrYmAgaXMgYSBwcmV0dHkgY2VudHJhbCBmdW5jdGlvbiBoZXJlLCBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gQW5kLCB5ZWFoLCBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgIGFuZCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgIGFsc28gbG9vayBsaWtlIHByb21pc2luZyBmb2NhbCBwb2ludHMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IGhhbmRsaW5nIHRoZSBjb3JlIGZyYW1lIG1hbmlwdWxhdGlvbi5cblxuTm93LCBJJ20gZ29pbmcgdG8gc2hpZnQgZ2VhcnMgc2xpZ2h0bHkuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gQmVzaWRlcyB0aGUgb2J2aW91cyBgQ09ORklHX0hTUmAsIGFyZSB0aGVyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIHJlbGF0ZWQgZmVhdHVyZXMgdGhhdCBoYXZlIHRoZWlyIG93biBjb25maWcgb3B0aW9ucz8gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA1NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjU2OjEyLjAwNDI5MjI2MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2hzci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBJRUMgNjI0MzktMyBIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5XFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBIU1JcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5IChIU1IgXFx1MDAyNiBQUlApXFxcIlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBUaGlzIGVuYWJsZXMgSUVDIDYyNDM5IGRlZmluZWQgSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3NcXG4gIDEwOlxcdFxcdCAgUmVkdW5kYW5jeSAoSFNSKSBhbmQgUGFyYWxsZWwgUmVkdW5kYW5jeSBQcm90b2NvbCAoUFJQKS5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB5b3VyIExpbnV4IGJveCB3aWxsIGJlIGFibGUgdG8gYWN0IGFzIGFcXG4gIDEzOlxcdFxcdCAgREFOSCAoXFxcIkRvdWJseSBhdHRhY2hlZCBub2RlIGltcGxlbWVudGluZyBIU1JcXFwiKSBvciBEQU5QIChcXFwiRG91Ymx5XFxuICAxNDpcXHRcXHQgIGF0dGFjaGVkIG5vZGUgaW1wbGVtZW50aW5nIFBSUFxcXCIpLiBGb3IgdGhpcyB0byB3b3JrLCB5b3VyIExpbnV4IGJveFxcbiAgMTU6XFx0XFx0ICBuZWVkcyAoYXQgbGVhc3QpIHR3byBwaHlzaWNhbCBFdGhlcm5ldCBpbnRlcmZhY2VzLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIEZvciBEQU5ILCBpdCBtdXN0IGJlIGNvbm5lY3RlZCBhcyBhIG5vZGUgaW4gYSByaW5nIG5ldHdvcmsgdG9nZXRoZXJcXG4gIDE4OlxcdFxcdCAgd2l0aCBvdGhlciBIU1IgY2FwYWJsZSBub2Rlcy4gQWxsIEV0aGVybmV0IGZyYW1lcyBzZW50IG92ZXIgdGhlIEhTUlxcbiAgMTk6XFx0XFx0ICBkZXZpY2Ugd2lsbCBiZSBzZW50IGluIGJvdGggZGlyZWN0aW9ucyBvbiB0aGUgcmluZyAob3ZlciBib3RoIHNsYXZlXFxuICAyMDpcXHRcXHQgIHBvcnRzKSwgZ2l2aW5nIGEgcmVkdW5kYW50LCBpbnN0YW50IGZhaWwtb3ZlciBuZXR3b3JrLiBFYWNoIEhTUiBub2RlXFxuICAyMTpcXHRcXHQgIGluIHRoZSByaW5nIGFjdHMgbGlrZSBhIGJyaWRnZSBmb3IgSFNSIGZyYW1lcywgYnV0IGZpbHRlcnMgZnJhbWVzXFxuICAyMjpcXHRcXHQgIHRoYXQgaGF2ZSBiZWVuIGZvcndhcmRlZCBlYXJsaWVyLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIEZvciBEQU5QLCBpdCBtdXN0IGJlIGNvbm5lY3RlZCBhcyBhIG5vZGUgY29ubmVjdGluZyB0byB0d29cXG4gIDI1OlxcdFxcdCAgc2VwYXJhdGUgbmV0d29ya3Mgb3ZlciB0aGUgdHdvIHNsYXZlIGludGVyZmFjZXMuIExpa2UgSFNSLCBFdGhlcm5ldFxcbiAgMjY6XFx0XFx0ICBmcmFtZXMgc2VudCBvdmVyIHRoZSBQUlAgZGV2aWNlIHdpbGwgYmUgc2VudCB0byBib3RoIG5ldHdvcmtzIGdpdmluZ1xcbiAgMjc6XFx0XFx0ICBhIHJlZHVuZGFudCwgaW5zdGFudCBmYWlsLW92ZXIgbmV0d29yay4gVW5saWtlIEhTUiwgUFJQIG5ldHdvcmtzXFxuICAyODpcXHRcXHQgIGNhbiBoYXZlIFNpbmdseSBBdHRhY2hlZCBOb2RlcyAoU0FOKSBzdWNoIGFzIFBDLCBwcmludGVyLCBicmlkZ2VzXFxuICAyOTpcXHRcXHQgIGV0YyBhbmQgd2lsbCBiZSBhYmxlIHRvIGNvbW11bmljYXRlIHdpdGggREFOUCBub2Rlcy5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0XFx0ICBUaGlzIGNvZGUgaXMgYSBcXFwiYmVzdCBlZmZvcnRcXFwiIHRvIGNvbXBseSB3aXRoIHRoZSBIU1Igc3RhbmRhcmQgYXNcXG4gIDMyOlxcdFxcdCAgZGVzY3JpYmVkIGluIElFQyA2MjQzOS0zOjIwMTAgKEhTUnYwKSBhbmQgSUVDIDYyNDM5LTM6MjAxMiAoSFNSdjEpLFxcbiAgMzM6XFx0XFx0ICBhbmQgUFJQIHN0YW5kYXJkIGRlc2NyaWJlZCBpbiBJRUMgNjI0MzktNDoyMDEyIChQUlApLCBidXQgbm9cXG4gIDM0OlxcdFxcdCAgY29tcGxpYW5jeSB0ZXN0cyBoYXZlIGJlZW4gbWFkZS4gVXNlIGlwcm91dGUyIHRvIHNlbGVjdCB0aGUgcHJvdG9jb2xcXG4gIDM1OlxcdFxcdCAgeW91IHdvdWxkIGxpa2UgdG8gdXNlLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgIFlvdSBuZWVkIHRvIHBlcmZvcm0gYW55IGFuZCBhbGwgbmVjZXNzYXJ5IHRlc3RzIHlvdXJzZWxmIGJlZm9yZVxcbiAgMzg6XFx0XFx0ICByZWx5aW5nIG9uIHRoaXMgY29kZSBpbiBhIHNhZmV0eSBjcml0aWNhbCBzeXN0ZW0hXFxuICAzOTpcXHRcXG4gIDQwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0aWYgSFNSXFxuICA0MzpcXHRcXG4gIDQ0OlxcdGNvbmZpZyBQUlBfRFVQX0RJU0NBUkRfS1VOSVRfVEVTVFxcbiAgNDU6XFx0XFx0dHJpc3RhdGUgXFxcIlBSUCBkdXBsaWNhdGUgZGlzY2FyZCBLVW5pdCB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNDY6XFx0XFx0ZGVwZW5kcyBvbiBLVU5JVFxcbiAgNDc6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDQ4OlxcdFxcdGhlbHBcXG4gIDQ5OlxcdFxcdCAgQ292ZXJzIHRoZSBQUlAgZHVwbGljYXRlIGRpc2NhcmQgYWxnb3JpdGhtLlxcbiAgNTA6XFx0XFx0ICBPbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldnMgcnVubmluZyBLVW5pdCB0ZXN0IGhhcm5lc3MgYW5kIGFyZSBub3RcXG4gIDUxOlxcdFxcdCAgZm9yIGluY2x1c2lvbiBpbnRvIGEgcHJvZHVjdGlvbiBidWlsZC5cXG4gIDUyOlxcdFxcbiAgNTM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsIHBsZWFzZSByZWZlclxcbiAgNTQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbiBpbiBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC8uXFxuICA1NTpcXHRcXG4gIDU2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDU3OlxcdFxcbiAgNTg6XFx0ZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NTY6MTIuMDA0NDIyNzkyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MzY4NjY5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSB3aGF0IHdlIGhhdmUgaGVyZS5cblxuKipOYXZpZ2F0aW5nIERlcGVuZGVuY2llcyBpbiB0aGUgTmV0d29yayBTdGFjayoqXG5cbkhtbSwgYENPTkZJR19IU1JgIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGFueSBleHBsaWNpdCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyB3aXRoaW4gKnRoaXMqIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZS4gVGhhdCdzIGEgbGl0dGxlIHVudXN1YWwuIEl0J3MgaW4gdGhlIGBuZXQvaHNyL2AgZGlyZWN0b3J5IHRob3VnaCwgd2hpY2ggdXN1YWxseSBpbXBsaWVzIHNvbWUgcmVsYXRpb25zaGlwIHdpdGggdGhlIGJyb2FkZXIgbmV0d29yayBzdWJzeXN0ZW0uIExldCBtZSBjaGVjay4uLiBBaCwgcmlnaHQsIHRoYXQgcG9pbnRzIHRvIGBORVRgLlxuXG5Pa2F5LCBzbyBJIHN1c3BlY3QgaXQgKmltcGxpY2l0bHkqIGRlcGVuZHMgb24gYE5FVGAuIFRvIGJlIGNlcnRhaW4sIEkgc2hvdWxkIGNoZWNrIHRoZSBgbmV0L01ha2VmaWxlYCB0byBzZWUgaG93IHRoZSBgaHNyYCBkaXJlY3RvcnkgYW5kIGl0cyBhc3NvY2lhdGVkIHNvdXJjZSBmaWxlcyBhcmUgYWN0dWFsbHkgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGJ1aWxkIHByb2Nlc3MuIFRoYXQgc2hvdWxkIHNob3cgYW55IGRpcmVjdCBvciBpbmRpcmVjdCBkZXBlbmRlbmNpZXMuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNDUsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjU2OjE1LjU0MTI5MjM4NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA2NzY1OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhzclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L01ha2VmaWxlPTY3PW9iai0kKENPTkZJR19ORVRfTlNIKVxcdFxcdCs9IG5zaC9cXG5uZXQvTWFrZWZpbGU6Njg6b2JqLSQoQ09ORklHX0hTUilcXHRcXHQrPSBoc3IvXFxubmV0L01ha2VmaWxlLTY5LW9iai0kKENPTkZJR19ORVRfU1dJVENIREVWKVxcdCs9IHN3aXRjaGRldi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NTY6MTUuOTQ4MDYzNTU4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwOTg0NzQ3NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIU1IgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBDT05GSUdfSFNSYCBpcyB0aGUgb25seSBjb25maWcgb3B0aW9uIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aCBoZXJlLiBMZXQncyBnbyBvdmVyIHRoZXNlIGNoYW5nZXMgYWdhaW4uIEl0IHNlZW1zIHdlIGhhdmUgYSBwYXRjaCB0aGF0J3MgbW9kaWZ5aW5nIGBuZXQvaHNyL2hzcl9mb3J3YXJkLmNgLCBmb2N1c2luZyBvbiBhIHNoYXJlZC1tdXRhdGlvbiBpc3N1ZS4gVGhlIGZpeCBpbnZvbHZlcyBjbG9uaW5nIHRoZSBza2IgYmVmb3JlIG1vZGlmeWluZyBpdCwgd2hpY2ggbWFrZXMgc2Vuc2UgdG8gZW5zdXJlIGlzb2xhdGlvbiBhbmQgcHJldmVudCB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cy4gVGhpcyBpcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSFNSIGxvZ2ljLlxuXG5HaXZlbiB0aGF0IEhTUiBpcyBhIHNvZnR3YXJlIG5ldHdvcmsgZGV2aWNlLCBpdCBzaG91bGQgYmUgZWFzaWx5IHJlYWNoYWJsZSBpbiBhIFFFTVUgZW52aXJvbm1lbnQsIHdoaWNoIGlzIGdvb2QgZm9yIHRlc3RpbmcuIFRoZSBpbmNsdXNpb24gb2YgYSBzZWxmdGVzdCwgYGhzcl9zaGFyZWRfbXV0YXRpb24uc2hgLCBpcyBhIHNvbGlkIGFkZGl0aW9uLiBUaGUgc2NyaXB0IHVzZXMgYGlwIGxpbmsgYWRkYCB0byBjcmVhdGUgYW4gSFNSIGludGVyZmFjZSB3aXRoIHRoZSB0eXBpY2FsIFBSUCBjb25maWd1cmF0aW9uLCB3aGljaCB0ZWxscyBtZSB0aGlzIGNhbiBiZSBlZmZlY3RpdmVseSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LiBTcGVjaWZpY2FsbHkgYHBycDBgIGBzbGF2ZTFgIGBzbGF2ZTJgLiBOaWNlLCBnb29kIHRvIHNlZSB0aGV5J3JlIGV4cGxpY2l0bHkgZGVmaW5pbmcgdGhlIHZpcnR1YWwgbmV0d29yayBkZXZpY2UncyBuYXR1cmUuXG5cbkknbGwgd2FudCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGFuZCBgaHNyX2ZvcndhcmRfc2tiYCB3aXRoaW4gdGhlIGNvZGUuIFRob3NlIGFyZSB0aGUga2V5IHN5bWJvbHMgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgbG9naWMgb2YgdGhlIGZpeC5cblxuQmVmb3JlIEkgZGlnIGludG8gdGhlIGRldGFpbHMsIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBvaW50cyBvZiBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gdGhhdCBtaWdodCBiZSByZWxldmFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NzgsIk91dHB1dFRva2VucyI6NzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NTY6MjUuMDQ2NTQ5OTQ5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTY2MDg5MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxccytcXFxcKj9bYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9oc3JfZm9yd2FyZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvaHNyX2ZvcndhcmQuYz00NDU9c3RhdGljIGludCBoc3JfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNDgzLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo0ODQ6Ym9vbCBwcnBfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTQ4NS17XFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNDkxLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo0OTI6Ym9vbCBoc3JfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTQ5My17XFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9NjQ5PXN0YXRpYyB2b2lkIGhhbmRsZV9zdGRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy02NzAtXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjY3MTppbnQgaHNyX2ZpbGxfZnJhbWVfaW5mbyhfX2JlMTYgcHJvdG8sIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTY3Mi1cXHRcXHRcXHRzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTY5Ny1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6Njk4OmludCBwcnBfZmlsbF9mcmFtZV9pbmZvKF9fYmUxNiBwcm90bywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNjk5LVxcdFxcdFxcdHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9NzE3PXN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzc0LS8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjc3NTp2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc3Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjU2OjI1LjI0MzE2NjU2NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDc0NDI5NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBIU1IgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGZvciBIU1IgYW5kIFBSUCwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHdheSB0byBhcHByb2FjaCBmdXp6aW5nIGl0LiBUaGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgZm9yd2FyZGluZyBhbiBza2IgaW4gSFNSIGlzIGBoc3JfZm9yd2FyZF9za2JgLCBzbyB0aGF0J3MgZGVmaW5pdGVseSBhIGtleSBmdW5jdGlvbiB0byBrZWVwIGluIG1pbmQuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCBhbmQgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCDigJMgdGhvc2UgYXJlIGNydWNpYWwgYmVjYXVzZSB0aGV5J3JlIGRpcmVjdGx5IGltcGFjdGVkLiBMZXQncyBtYWtlIGFic29sdXRlbHkgc3VyZSBJJ3ZlIGdvdCB0aGUgbmFtZXMgcmlnaHQ6IGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGFuZCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgLiBZdXAsIGFsbCBnb29kLlxuXG5Ob3csIGEgcXVpY2sgY2hlY2vigKYgSSBzYXcgYGhzcl94bWl0YCBtZW50aW9uZWQsIGJ1dCB0aGF0J3Mgc3RhdGljLCBzbyBpdOKAmXMgbm90IGlkZWFsIGFzIGEgdG9wLWxldmVsIGZvY3VzLiBIb3dldmVyLCBgaHNyX2ZvcndhcmRfc2tiYCBkb2VzIGNhbGwgYGhzcl9mb3J3YXJkX2RvYCwgd2hpY2ggaW4gdHVybiBjYWxscyBgaHNyX3htaXRgLCBtZWFuaW5nIGBoc3JfZm9yd2FyZF9za2JgIGlzIHN0aWxsIGEgcmVsZXZhbnQgZm9jYWwgcG9pbnQgYW5kIGxpa2VseSBtb3JlIHJlYWNoYWJsZS5cblxuQ2hlY2tpbmcgZm9yIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcywgaXQncyBqdXN0IGBDT05GSUdfSFNSYC4gU2ltcGxlIGVub3VnaC5cblxuQWxyaWdodCwgd2hhdCBlbHNlIGhhdmUgd2UgZ290PyBUaGUgcGF0Y2ggbW9kaWZpZXMgYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AgYW5kIGFkZHMgYSB0ZXN0IGNhc2UsIHNvIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoIGdvb2QgdGVzdCBjb3ZlcmFnZSwgd2hpY2ggbWFrZXMgZnV6emluZyBpdCBldmVuIG1vcmUgdmFsdWFibGUuIEl0IGFkZHJlc3NlcyBhIHNoYXJlZC1tdXRhdGlvbiBpc3N1ZSBieSBjbG9uaW5nIHRoZSBza2IgYmVmb3JlIG1vZGlmeWluZyBpdCwgd2hpY2ggaXMgdGhlIGtpbmQgb2YgdnVsbmVyYWJpbGl0eSBmdXp6aW5nIGNhbiB1bmNvdmVyLiBUaGlzIGNoYW5nZSBpcyBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG5cblNvLCBoZXJlJ3MgbXkgcGxhbjpcblxuKipGb2N1cyBTeW1ib2xzOioqXG5cbiogICBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgXG4qICAgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYFxuKiAgIGBoc3JfZm9yd2FyZF9za2JgXG5cbioqRW5hYmxlIENvbmZpZ3M6KipcblxuKiAgIGBDT05GSUdfSFNSYFxuXG4qKlJlYXNvbmluZzoqKlxuXG5UaGUgcGF0Y2ggYWRkcmVzc2VzIGEgc2hhcmVkLW11dGF0aW9uIHZ1bG5lcmFiaWxpdHkgYnkgY2xvbmluZyB0aGUgc2tiIGJlZm9yZSBtb2RpZmljYXRpb24sIGRpcmVjdGx5IGltcGFjdGluZyBIU1IgYW5kIFBSUC4gSXQncyBhIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBjaGFuZ2Ugd2l0aCB0ZXN0IGNvdmVyYWdlLCBtYWtpbmcgaXQgaWRlYWwgZm9yIGZ1enppbmcuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NTksIk91dHB1dFRva2VucyI6MTExLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjU2OjMyLjcxNzU5OTM3N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDE2OTQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFNSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVcIixcbiAgICBcInBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lXCIsXG4gICAgXCJoc3JfZm9yd2FyZF9za2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHNoYXJlZC1tdXRhdGlvbiBpc3N1ZSBpbiBIU1IgYW5kIFBSUCBieSBjbG9uaW5nIHRoZSBza2IgYW5kIG1ha2luZyBpdCBwcml2YXRlIGJlZm9yZSBtb2RpZnlpbmcgaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBIU1IgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhTUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lXCIsXG4gICAgXCJwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZVwiLFxuICAgIFwiaHNyX2ZvcndhcmRfc2tiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzaGFyZWQtbXV0YXRpb24gaXNzdWUgaW4gSFNSIGFuZCBQUlAgYnkgY2xvbmluZyB0aGUgc2tiIGFuZCBtYWtpbmcgaXQgcHJpdmF0ZSBiZWZvcmUgbW9kaWZ5aW5nIGl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgSFNSIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzw9s7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-29 18:50:33 +0000 UTC FinishedAt: 2026-07-29 18:56:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "b0a168fb-100e-4c8d-a177-a57b086e1fa4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "hsr_create_tagged_frame", "prp_create_tagged_frame", "hsr_forward_skb" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lJiMzNDssCiAgICAmIzM0O3BycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHNoYXJlZC1tdXRhdGlvbiBpc3N1ZSBpbiBIU1IgYW5kIFBSUCBieSBjbG9uaW5nIHRoZSBza2IgYW5kIG1ha2luZyBpdCBwcml2YXRlIGJlZm9yZSBtb2RpZnlpbmcgaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBIU1IgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgM2EwYWIwNTkzOTUxNzA0ZTI1ZDJiODk1OGRlZDhkY2VjZDM1OWYwNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDE4OjU1OjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuaW5kZXggMDc3NDk4MWE2NWMxNi4uOTc0YjU1ZjI0ODgyMSAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG5AQCAtMzM2LDEyICYjNDM7MzM2LDI0IEBAIHN0cnVjdCBza19idWZmICpoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuIFx0aW50IG1vdmVsZW47XG4gXG4gXHRpZiAoZnJhbWUtXHUwMDNlc2tiX2hzcikge1xuLVx0XHRzdHJ1Y3QgaHNyX2V0aGhkciAqaHNyX2V0aGhkciA9XG4tXHRcdFx0KHN0cnVjdCBoc3JfZXRoaGRyICopc2tiX21hY19oZWFkZXIoZnJhbWUtXHUwMDNlc2tiX2hzcik7XG4mIzQzO1x0XHRzdHJ1Y3QgaHNyX2V0aGhkciAqaHNyX2V0aGhkcjtcbiYjNDM7XG4mIzQzO1x0XHQvKiBUaGUgb3JpZ2luYWwgc2tiIGRhdGEgbWF5IGJlIHNoYXJlZCB3aXRoIGFub3RoZXIgZWdyZXNzXG4mIzQzO1x0XHQgKiBjbG9uZS4gTWFrZSB0aGUgY2xvbmUgZGF0YSBwcml2YXRlIGJlZm9yZSB1cGRhdGluZyB0aGVcbiYjNDM7XHRcdCAqIHBhdGggaWQgc28gdGhlIHVwZGF0ZSBjYW5ub3QgY29ycnVwdCB0aGUgb3RoZXIgY29weS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c2tiID0gc2tiX2Nsb25lKGZyYW1lLVx1MDAzZXNrYl9oc3IsIEdGUF9BVE9NSUMpO1xuJiM0MztcdFx0aWYgKCFza2IpXG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdFx0aWYgKHNrYl9jb3coc2tiLCAwKSkge1xuJiM0MztcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdC8qIHNldCB0aGUgbGFuZSBpZCBwcm9wZXJseSAqL1xuJiM0MztcdFx0aHNyX2V0aGhkciA9IChzdHJ1Y3QgaHNyX2V0aGhkciAqKXNrYl9tYWNfaGVhZGVyKHNrYik7XG4gXHRcdGhzcl9zZXRfcGF0aF9pZChmcmFtZSwgaHNyX2V0aGhkciwgcG9ydCk7XG4tXHRcdHJldHVybiBza2JfY2xvbmUoZnJhbWUtXHUwMDNlc2tiX2hzciwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0XHRyZXR1cm4gc2tiO1xuIFx0fSBlbHNlIGlmIChwb3J0LVx1MDAzZWRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19IU1JfVEFHX0lOUykge1xuIFx0XHRyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLVx1MDAzZXNrYl9zdGQsIEdGUF9BVE9NSUMpO1xuIFx0fVxuQEAgLTM3NywxNSAmIzQzOzM4OSwyOCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG4gXHRpZiAoZnJhbWUtXHUwMDNlc2tiX3BycCkge1xuLVx0XHRzdHJ1Y3QgcHJwX3JjdCAqdHJhaWxlciA9IHNrYl9nZXRfUFJQX3JjdChmcmFtZS1cdTAwM2Vza2JfcHJwKTtcbiYjNDM7XHRcdHN0cnVjdCBwcnBfcmN0ICp0cmFpbGVyO1xuIFxuJiM0MztcdFx0LyogU2FtZSBzaGFyaW5nIGhhemFyZCBhcyBhYm92ZTogcHJpdmF0aXplIHRoZSBjbG9uZSBkYXRhXG4mIzQzO1x0XHQgKiBiZWZvcmUgdXBkYXRpbmcgdGhlIExBTiBpZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c2tiID0gc2tiX2Nsb25lKGZyYW1lLVx1MDAzZXNrYl9wcnAsIEdGUF9BVE9NSUMpO1xuJiM0MztcdFx0aWYgKCFza2IpXG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdFx0aWYgKHNrYl9jb3coc2tiLCAwKSkge1xuJiM0MztcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0dHJhaWxlciA9IHNrYl9nZXRfUFJQX3JjdChza2IpO1xuIFx0XHRpZiAodHJhaWxlcikge1xuIFx0XHRcdHBycF9zZXRfbGFuX2lkKHRyYWlsZXIsIHBvcnQpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdFdBUk5fT05DRSghdHJhaWxlciwgXCYjMzQ7ZXJyb3JlZCBQUlAgc2tiXCYjMzQ7KTtcbiYjNDM7XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHRcdH1cbi1cdFx0cmV0dXJuIHNrYl9jbG9uZShmcmFtZS1cdTAwM2Vza2JfcHJwLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRcdHJldHVybiBza2I7XG4gXHR9IGVsc2UgaWYgKHBvcnQtXHUwMDNlZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX0hTUl9UQUdfSU5TKSB7XG4gXHRcdHJldHVybiBza2JfY2xvbmUoZnJhbWUtXHUwMDNlc2tiX3N0ZCwgR0ZQX0FUT01JQyk7XG4gXHR9XG5AQCAtNDIwLDYgJiM0Mzs0NDUsMjIgQEAgc3RhdGljIHZvaWQgaHNyX2RlbGl2ZXJfbWFzdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gc3RhdGljIGludCBoc3JfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXG4gXHRcdCAgICBzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxuIHtcbiYjNDM7XHQvKiBBbiBpbnRlcmxpbmstYm91bmQgc2tiIGZyb20gZ2V0X3VudGFnZ2VkX2ZyYW1lKCkgY2FuIHN0aWxsIGFsaWFzXG4mIzQzO1x0ICogYW5vdGhlciBsaXZlIGNvbnN1bWVyOiBmb3IgbWFzdGVyLW9yaWdpbmF0ZWQgZnJhbWVzIHRoZSBjbG9uZVxuJiM0MztcdCAqIHNoYXJlcyB0aGUgb3JpZ2luYWwgVFggc2tiICh3aGljaCB0YXBzIG9yIHRoZSBUWCBwYXRoIG1heSBzdGlsbFxuJiM0MztcdCAqIGhvbGQpOyBmb3IgcmluZyBmcmFtZXMgdGhlIG1hc3RlciBhbHNvIGNvbnN1bWVzIHRoZW0gd2hlbiB0aGV5XG4mIzQzO1x0ICogYXJlIGRlc3RpbmVkIHRvIHRoZSBsb2NhbCBub2RlIHdpdGhvdXQgYmVpbmcgZXhjbHVzaXZlIHRvIGl0LlxuJiM0MztcdCAqIFByaXZhdGl6ZSBiZWZvcmUgYW55IGFkZHJlc3MgbXV0YXRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoZnJhbWUtXHUwMDNlcG9ydF9yY3YtXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSIHx8XG4mIzQzO1x0ICAgICAoZnJhbWUtXHUwMDNlaXNfbG9jYWxfZGVzdCBcdTAwMjZcdTAwMjYgIWZyYW1lLVx1MDAzZWlzX2xvY2FsX2V4Y2x1c2l2ZSkpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBza2JfY293KHNrYiwgMCkpIHtcbiYjNDM7XHRcdGZyYW1lLVx1MDAzZXBvcnRfcmN2LVx1MDAzZWRldi1cdTAwM2VzdGF0cy5yeF9kcm9wcGVkJiM0MzsmIzQzOztcbiYjNDM7XHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0cmV0dXJuIE5FVF9YTUlUX0RST1A7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChmcmFtZS1cdTAwM2Vwb3J0X3Jjdi1cdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIpIHtcbiBcdFx0aHNyX2FkZHJfc3Vic3RfZGVzdChmcmFtZS1cdTAwM2Vub2RlX3NyYywgc2tiLCBwb3J0KTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuaW5kZXggMzFmYjkzMjZjZjUzMy4uYWVhZTdmM2Q2ZGQxNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcbkBAIC03LDYgJiM0Mzs3LDcgQEAgVEVTVF9QUk9HUyA6PSBcXFxuIFx0aHNyX3JlZGJveC5zaCBcXFxuIFx0bGlua19mYXVsdHMuc2ggXFxcbiBcdHBycF9waW5nLnNoIFxcXG4mIzQzO1x0aHNyX3NoYXJlZF9tdXRhdGlvbi5zaCBcXFxuICMgZW5kIG9mIFRFU1RfUFJPR1NcbiBcbiBURVNUX0ZJTEVTICYjNDM7PSBoc3JfY29tbW9uLnNoXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3Jfc2hhcmVkX211dGF0aW9uLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3Jfc2hhcmVkX211dGF0aW9uLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjcxMDM1NDFjZDc4Y1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3Jfc2hhcmVkX211dGF0aW9uLnNoXG5AQCAtMCwwICYjNDM7MSwyMTMgQEBcbiYjNDM7IyEvYmluL2Jhc2hcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjXG4mIzQzOyMgVmVyaWZ5IHRoYXQgcGVyLWVncmVzcyBtdXRhdGlvbnMgb2Ygc2hhcmVkIHNrYiBkYXRhIGFyZSBwcml2YXRlOlxuJiM0MzsjXG4mIzQzOyMgRjIgKHBhdGgvTEFOIElEKTogb24gYW4gYWZmZWN0ZWQga2VybmVsIHRoZSBzZWNvbmQgc2xhdmUmIzM5O3MgTEFOLUlEIHdyaXRlXG4mIzQzOyMgbGFuZHMgaW4gdGhlIGZpcnN0IHNsYXZlJiMzOTtzIHN0aWxsLXF1ZXVlZCBjbG9uZTsgd2l0aCBhIG5ldGVtIGRlbGF5IG9uXG4mIzQzOyMgc2xhdmUgQSwgaW5qZWN0ZWQgZnJhbWVzIGxlYXZlIEEgY2FycnlpbmcgQiYjMzk7cyBMQU4gSUQuXG4mIzQzOyNcbiYjNDM7IyBGMSAoUmVkQm94IHNvdXJjZSBNQUMpOiBvbiBhbiBhZmZlY3RlZCBrZXJuZWwgYW4gSFNSLXRhZ2dlZCBtdWx0aWNhc3RcbiYjNDM7IyBmcmFtZSByZWNlaXZlZCBvbiBhIFJlZEJveCBzbGF2ZSBpcyBjbG9uZWQgZm9yIG1hc3RlciBhbmQgaW50ZXJsaW5rLFxuJiM0MzsjIGFuZCB0aGUgaW50ZXJsaW5rJiMzOTtzIFJlZEJveC1NQUMgcmV3cml0ZSBsYW5kcyBpbiB0aGUgbWFzdGVyIGNsb25lJiMzOTtzXG4mIzQzOyMgYnVmZmVyLCBzbyB0aGUgbG9jYWwgc3RhY2sgcmVjZWl2ZXMgdGhlIFJlZEJveCBNQUMgaW5zdGVhZCBvZiB0aGVcbiYjNDM7IyBvcmlnaW5hdGluZyBub2RlJiMzOTtzIE1BQy5cbiYjNDM7XG4mIzQzO2lwdjY9ZmFsc2VcbiYjNDM7XG4mIzQzO3NvdXJjZSAuL2hzcl9jb21tb24uc2hcbiYjNDM7XG4mIzQzO0RVUj01XG4mIzQzO1xuJiM0MztyZXF1aXJlKClcbiYjNDM7e1xuJiM0MztcdGNvbW1hbmQgLXYgXCYjMzQ7JDFcJiMzNDsgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFx1MDAyNlx1MDAyNiByZXR1cm4gMFxuJiM0MztcdGVjaG8gXCYjMzQ7U0tJUDogJDEgbm90IGF2YWlsYWJsZVwmIzM0O1xuJiM0MztcdGV4aXQgJGtzZnRfc2tpcFxuJiM0Mzt9XG4mIzQzO1xuJiM0MztyZXF1aXJlIGlwXG4mIzQzO3JlcXVpcmUgdGNcbiYjNDM7cmVxdWlyZSBweXRob24zXG4mIzQzO1xuJiM0Mzt0cmFwIGNsZWFudXBfYWxsX25zIEVYSVRcbiYjNDM7XG4mIzQzOyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGMjogTEFOLUlEIGlzb2xhdGlvblxuJiM0MzsjIFBSUCBEQU5QIChwcm90byAxKSwgQUZfUEFDS0VUIHByZS10YWdnZWQgaW5qZWN0aW9uLCBuZXRlbSBvbiBzbGF2ZSBBLlxuJiM0MztydW5fZjIoKVxuJiM0Mzt7XG4mIzQzO1x0c2V0dXBfbnMgbnMgMlx1MDAzZS9kZXYvbnVsbCB8fCByZXR1cm4gJGtzZnRfc2tpcFxuJiM0MztcdG5zeCgpIHsgaXAgbmV0bnMgZXhlYyBcJiMzNDskbnNcJiMzNDsgXCYjMzQ7JEBcJiMzNDs7IH1cbiYjNDM7XG4mIzQzO1x0IyBQcm9iZSBzY2hfbmV0ZW0gaW5zaWRlIHRoZSBkaXNwb3NhYmxlIG5hbWVzcGFjZSBvbmx5LlxuJiM0MztcdGlmICEgbnN4IHRjIHFkaXNjIGFkZCBkZXYgbG8gcm9vdCBuZXRlbSBkZWxheSAxbXMgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtTS0lQOiBzY2hfbmV0ZW0gbm90IGF2YWlsYWJsZVwmIzM0O1xuJiM0MztcdFx0cmV0dXJuICRrc2Z0X3NraXBcbiYjNDM7XHRmaVxuJiM0MztcdG5zeCB0YyBxZGlzYyBkZWwgZGV2IGxvIHJvb3QgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcbiYjNDM7XHQjIENhcGFiaWxpdHkgcHJvYmVzIGVuZCBoZXJlOyBzZXR1cCBvciBydW50aW1lIGZhaWx1cmUgYmVsb3cgaXMgRkFJTC5cbiYjNDM7XHRuc3ggaXAgbGluayBhZGQgdkEgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2QXAgfHwgeyBlY2hvIFwmIzM0O0ZBSUw6IHZldGggQVwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XHRuc3ggaXAgbGluayBhZGQgdkIgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2QnAgfHwgeyBlY2hvIFwmIzM0O0ZBSUw6IHZldGggQlwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XHRmb3IgaSBpbiB2QSB2QiB2QXAgdkJwOyBkb1xuJiM0MztcdFx0bnN4IGlwIGxpbmsgc2V0IFwmIzM0OyRpXCYjMzQ7IHVwIHx8IHsgZWNobyBcJiMzNDtGQUlMOiAkaSB1cFwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XHRkb25lXG4mIzQzO1x0bnN4IGlwIGxpbmsgYWRkIG5hbWUgcHJwMCB0eXBlIGhzciBzbGF2ZTEgdkEgc2xhdmUyIHZCIHN1cGVydmlzaW9uIDQ1IHByb3RvIDEgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdGlmIFsgJD8gLW5lIDAgXTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtTS0lQOiBIU1IvUFJQIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBrZXJuZWxcJiMzNDtcbiYjNDM7XHRcdHJldHVybiAka3NmdF9za2lwXG4mIzQzO1x0ZmlcbiYjNDM7XHRuc3ggaXAgbGluayBzZXQgcHJwMCB1cCB8fCB7IGVjaG8gXCYjMzQ7RkFJTDogcHJwMCB1cFwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XHRuc3ggdGMgcWRpc2MgYWRkIGRldiB2QSByb290IG5ldGVtIGRlbGF5IDIwMG1zIHx8IHsgZWNobyBcJiMzNDtGQUlMOiBuZXRlbVwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XG4mIzQzO1x0bnN4IHB5dGhvbjMgL2Rldi9zdGRpbiBcJiMzNDskRFVSXCYjMzQ7IFx1MDAzY1x1MDAzYyYjMzk7UFlGMiYjMzk7XG4mIzQzO2ltcG9ydCBzb2NrZXQsIHN0cnVjdCwgc2VsZWN0LCBzeXMsIHRpbWVcbiYjNDM7XG4mIzQzO2R1ciA9IGludChzeXMuYXJndlsxXSlcbiYjNDM7ZGVmIGxhbmlkKHBrdCk6XG4mIzQzOyAgICBpZiBsZW4ocGt0KSBcdTAwM2MgMjAgb3IgcGt0Wy0yOl0gIT0gYlwmIzM0O1xceDg4XFx4ZmJcJiMzNDs6XG4mIzQzOyAgICAgICAgcmV0dXJuIE5vbmVcbiYjNDM7ICAgIHJldHVybiAocGt0Wy00XSBcdTAwM2VcdTAwM2UgNCkgXHUwMDI2IDB4RlxuJiM0MztcbiYjNDM7U1JDID0gYnl0ZXMuZnJvbWhleChvcGVuKFwmIzM0Oy9zeXMvY2xhc3MvbmV0L3BycDAvYWRkcmVzc1wmIzM0OykucmVhZCgpLnJlcGxhY2UoXCYjMzQ7OlwmIzM0OywgXCYjMzQ7XCYjMzQ7KSlcbiYjNDM7RFNUID0gYnl0ZXMuZnJvbWhleChcJiMzNDswMmFhYmJjY2RkMDFcJiMzNDspXG4mIzQzO1BBWSA9IGJ5dGVzKHJhbmdlKDQ2KSlcbiYjNDM7cmN0MCA9IHN0cnVjdC5wYWNrKFwmIzM0O1x1MDAzZUhcJiMzNDssIDApICYjNDM7IHN0cnVjdC5wYWNrKFwmIzM0O1x1MDAzZUhcJiMzNDssIDUyIFx1MDAyNiAweDBGRkYpICYjNDM7IGJcJiMzNDtcXHg4OFxceGZiXCYjMzQ7XG4mIzQzO2ZyYW1lID0gRFNUICYjNDM7IFNSQyAmIzQzOyBiXCYjMzQ7XFx4MDhcXHgwMFwmIzM0OyAmIzQzOyBQQVkgJiM0MzsgcmN0MFxuJiM0MztcbiYjNDM7dHggPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVyk7IHR4LmJpbmQoKFwmIzM0O3BycDBcJiMzNDssIDApKVxuJiM0MztzQSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXLFxuJiM0MzsgICAgICAgIHNvY2tldC5udG9ocygweDAwMDMpKVxuJiM0MztzQS5iaW5kKChcJiMzNDt2QXBcJiMzNDssIDApKVxuJiM0MztzQiA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXLFxuJiM0MzsgICAgICAgIHNvY2tldC5udG9ocygweDAwMDMpKVxuJiM0MztzQi5iaW5kKChcJiMzNDt2QnBcJiMzNDssIDApKVxuJiM0MztzQS5zZXRibG9ja2luZyhGYWxzZSk7IHNCLnNldGJsb2NraW5nKEZhbHNlKVxuJiM0Mztmb3IgXyBpbiByYW5nZSgyMDApOlxuJiM0MzsgICAgdHguc2VuZChmcmFtZSk7IHRpbWUuc2xlZXAoMC4wMDEpXG4mIzQzO1xuJiM0MzthLCBiID0gW10sIFtdXG4mIzQzO2VuZCA9IHRpbWUudGltZSgpICYjNDM7IGR1clxuJiM0Mzt3aGlsZSB0aW1lLnRpbWUoKSBcdTAwM2MgZW5kOlxuJiM0MzsgICAgciwgXywgXyA9IHNlbGVjdC5zZWxlY3QoW3NBLCBzQl0sIFtdLCBbXSwgMC4zKVxuJiM0MzsgICAgZm9yIHMgaW4gcjpcbiYjNDM7ICAgICAgICBwa3QgPSBzLnJlY3YoNjU1MzUpXG4mIzQzOyAgICAgICAgaWYgKHBrdFs6Nl0gIT0gRFNUIG9yIHBrdFs2OjEyXSAhPSBTUkMgb3IgcGt0WzEyOjE0XSAhPSBiXCYjMzQ7XFx4MDhcXHgwMFwmIzM0O1xuJiM0MzsgICAgICAgICAgICAgICAgb3IgcGt0WzE0OjE0ICYjNDM7IGxlbihQQVkpXSAhPSBQQVkpOlxuJiM0MzsgICAgICAgICAgICBjb250aW51ZVxuJiM0MzsgICAgICAgIGxpZCA9IGxhbmlkKHBrdClcbiYjNDM7ICAgICAgICBpZiBsaWQgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgIChhIGlmIHMgaXMgc0EgZWxzZSBiKS5hcHBlbmQobGlkKVxuJiM0MztcbiYjNDM7cHJpbnQoXCYjMzQ7QS1zaWRlIGNvdW50PSVkIGxhbiBpZHM9JXNcJiMzNDsgJSAobGVuKGEpLCBzb3J0ZWQoc2V0KGEpKSkpXG4mIzQzO3ByaW50KFwmIzM0O0Itc2lkZSBjb3VudD0lZCBsYW4gaWRzPSVzXCYjMzQ7ICUgKGxlbihiKSwgc29ydGVkKHNldChiKSkpKVxuJiM0MztpZiBsZW4oYSkgXHUwMDNjIDE1MCBvciBsZW4oYikgXHUwMDNjIDE1MDpcbiYjNDM7ICAgIHByaW50KFwmIzM0O0ZBSUw6IHRvbyBmZXcgaW5qZWN0ZWQgZnJhbWVzIGNhcHR1cmVkIChBPSVkIEI9JWQsIHNlbnQgMjAwKVwmIzM0OyAlIChsZW4oYSksIGxlbihiKSkpXG4mIzQzOyAgICBzeXMuZXhpdCgxKVxuJiM0MztiYWRfYSA9IFt4IGZvciB4IGluIGEgaWYgKHggXHUwMDI2IDEpICE9IDBdXG4mIzQzO2JhZF9iID0gW3ggZm9yIHggaW4gYiBpZiAoeCBcdTAwMjYgMSkgIT0gMV1cbiYjNDM7aWYgYmFkX2Egb3IgYmFkX2I6XG4mIzQzOyAgICBwcmludChcJiMzNDtGQUlMOiBzaGFyZWQtbXV0YXRpb24gY29ycnVwdGlvbiAtIEE6ICVkLyVkIHdyb25nLWxhbiwgQjogJWQvJWQgd3JvbmctbGFuXCYjMzQ7XG4mIzQzOyAgICAgICAgICAlIChsZW4oYmFkX2EpLCBsZW4oYSksIGxlbihiYWRfYiksIGxlbihiKSkpXG4mIzQzOyAgICBzeXMuZXhpdCgxKVxuJiM0MztwcmludChcJiMzNDtQQVNTOiBwZXItZWdyZXNzIExBTiBJRHMgaXNvbGF0ZWQgKEEgYWxsIGJpdDA9MCwgQiBhbGwgYml0MD0xKVwmIzM0OylcbiYjNDM7c3lzLmV4aXQoMClcbiYjNDM7UFlGMlxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGMTogUmVkQm94IHNvdXJjZS1NQUMgcHJpdmFjeVxuJiM0MzsjIEhTUiBSZWRCb3ggKHByb3RvIDApLCB0YWdnZWQgbXVsdGljYXN0IGZyb20gYSBzbGF2ZTogbWFzdGVyIG11c3Qga2VlcFxuJiM0MzsjIHRoZSBub2RlIE1BQywgaW50ZXJsaW5rIG11c3QgY2FycnkgdGhlIFJlZEJveCBNQUMuXG4mIzQzO3J1bl9mMSgpXG4mIzQzO3tcbiYjNDM7XHRzZXR1cF9ucyBucyAyXHUwMDNlL2Rldi9udWxsIHx8IHJldHVybiAka3NmdF9za2lwXG4mIzQzO1x0bnN4KCkgeyBpcCBuZXRucyBleGVjIFwmIzM0OyRuc1wmIzM0OyBcJiMzNDskQFwmIzM0OzsgfVxuJiM0MztcbiYjNDM7XHRuc3ggaXAgbGluayBhZGQgdkEgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2QXAgfHwgeyBlY2hvIFwmIzM0O0ZBSUw6IHZldGggQVwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XHRuc3ggaXAgbGluayBhZGQgdkIgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2QnAgfHwgeyBlY2hvIFwmIzM0O0ZBSUw6IHZldGggQlwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XHRuc3ggaXAgbGluayBhZGQgdkkgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2SXAgfHwgeyBlY2hvIFwmIzM0O0ZBSUw6IHZldGggSVwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XHRmb3IgaSBpbiB2QSB2QiB2SSB2QXAgdkJwIHZJcDsgZG9cbiYjNDM7XHRcdG5zeCBpcCBsaW5rIHNldCBcJiMzNDskaVwmIzM0OyB1cCB8fCB7IGVjaG8gXCYjMzQ7RkFJTDogJGkgdXBcJiMzNDs7IHJldHVybiAxOyB9XG4mIzQzO1x0ZG9uZVxuJiM0MztcdG5zeCBpcCBsaW5rIGFkZCBuYW1lIGhzcjAgdHlwZSBoc3Igc2xhdmUxIHZBIHNsYXZlMiB2QiBpbnRlcmxpbmsgdkkgXFxcbiYjNDM7XHRcdHN1cGVydmlzaW9uIDQ1IHByb3RvIDAgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdGlmIFsgJD8gLW5lIDAgXTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtTS0lQOiBIU1IgUmVkQm94IG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBrZXJuZWxcJiMzNDtcbiYjNDM7XHRcdHJldHVybiAka3NmdF9za2lwXG4mIzQzO1x0ZmlcbiYjNDM7XHRuc3ggaXAgbGluayBzZXQgaHNyMCB1cCB8fCB7IGVjaG8gXCYjMzQ7RkFJTDogaHNyMCB1cFwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XG4mIzQzO1x0bnN4IHB5dGhvbjMgL2Rldi9zdGRpbiBcdTAwM2NcdTAwM2MmIzM5O1BZRjEmIzM5O1xuJiM0MztpbXBvcnQgc29ja2V0LCBzZWxlY3QsIHN5cywgdGltZVxuJiM0MztcbiYjNDM7Tk9ERSAgPSBieXRlcy5mcm9taGV4KFwmIzM0OzAyMTEyMjMzNDQ1NVwmIzM0OylcbiYjNDM7TUNBU1QgPSBieXRlcy5mcm9taGV4KFwmIzM0OzAxMDA1ZTAwMDAwMVwmIzM0OylcbiYjNDM7UkIgICAgPSBieXRlcy5mcm9taGV4KG9wZW4oXCYjMzQ7L3N5cy9jbGFzcy9uZXQvdkkvYWRkcmVzc1wmIzM0OykucmVhZCgpLnJlcGxhY2UoXCYjMzQ7OlwmIzM0OywgXCYjMzQ7XCYjMzQ7KSlcbiYjNDM7UEFZICAgPSBieXRlcyhyYW5nZSg0NikpXG4mIzQzO1xuJiM0MztkZWYgZnJhbWUoc2VxKTpcbiYjNDM7ICAgIHRhZyA9ICgoMSBcdTAwM2NcdTAwM2MgMTIpIHwgbGVuKFBBWSkpLnRvX2J5dGVzKDIsIFwmIzM0O2JpZ1wmIzM0OykgJiM0Mzsgc2VxLnRvX2J5dGVzKDIsIFwmIzM0O2JpZ1wmIzM0OykgJiM0MzsgYlwmIzM0O1xceDA4XFx4MDBcJiMzNDtcbiYjNDM7ICAgIHJldHVybiBNQ0FTVCAmIzQzOyBOT0RFICYjNDM7IGJcJiMzNDtcXHg4OVxceDJmXCYjMzQ7ICYjNDM7IHRhZyAmIzQzOyBQQVlcbiYjNDM7XG4mIzQzO3R4ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcpOyB0eC5iaW5kKChcJiMzNDt2QXBcJiMzNDssIDApKVxuJiM0MztzbSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXLFxuJiM0MzsgICAgICAgIHNvY2tldC5udG9ocygweDAwMDMpKVxuJiM0MztzbS5iaW5kKChcJiMzNDtoc3IwXCYjMzQ7LCAwKSlcbiYjNDM7c2kgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVyxcbiYjNDM7ICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSlcbiYjNDM7c2kuYmluZCgoXCYjMzQ7dklwXCYjMzQ7LCAwKSlcbiYjNDM7c20uc2V0YmxvY2tpbmcoRmFsc2UpOyBzaS5zZXRibG9ja2luZyhGYWxzZSlcbiYjNDM7XG4mIzQzO2ZvciBpIGluIHJhbmdlKDMpOlxuJiM0MzsgICAgdHguc2VuZChmcmFtZShpICYjNDM7IDEpKTsgdGltZS5zbGVlcCgwLjA1KVxuJiM0MztcbiYjNDM7bV9zcmMgPSBpX3NyYyA9IE5vbmVcbiYjNDM7ZW5kID0gdGltZS50aW1lKCkgJiM0MzsgNFxuJiM0Mzt3aGlsZSB0aW1lLnRpbWUoKSBcdTAwM2MgZW5kIGFuZCAobV9zcmMgaXMgTm9uZSBvciBpX3NyYyBpcyBOb25lKTpcbiYjNDM7ICAgIHIsIF8sIF8gPSBzZWxlY3Quc2VsZWN0KFtzbSwgc2ldLCBbXSwgW10sIDAuMylcbiYjNDM7ICAgIGZvciBzIGluIHI6XG4mIzQzOyAgICAgICAgcGt0ID0gcy5yZWN2KDY1NTM1KVxuJiM0MzsgICAgICAgICMgZXhhY3QgZmxvdzogZHN0LCBwb3N0LXN0cmlwIEV0aGVyVHlwZSwgZXhhY3QgcGF5bG9hZCwgbWluIGxlbmd0aDtcbiYjNDM7ICAgICAgICAjIGhfc291cmNlIGlzIHRoZSBhc3NlcnRlZCB2YWx1ZSBhbmQgbXVzdCBOT1QgYmUgZmlsdGVyZWQgb25cbiYjNDM7ICAgICAgICBpZiAobGVuKHBrdCkgXHUwMDNjIDYwIG9yIHBrdFs6Nl0gIT0gTUNBU1Qgb3IgcGt0WzEyOjE0XSAhPSBiXCYjMzQ7XFx4MDhcXHgwMFwmIzM0O1xuJiM0MzsgICAgICAgICAgICAgICAgb3IgcGt0WzE0OjE0ICYjNDM7IGxlbihQQVkpXSAhPSBQQVkpOlxuJiM0MzsgICAgICAgICAgICBjb250aW51ZVxuJiM0MzsgICAgICAgIGlmIHMgaXMgc20gYW5kIG1fc3JjIGlzIE5vbmU6XG4mIzQzOyAgICAgICAgICAgIG1fc3JjID0gcGt0WzY6MTJdXG4mIzQzOyAgICAgICAgZWxpZiBzIGlzIHNpIGFuZCBpX3NyYyBpcyBOb25lOlxuJiM0MzsgICAgICAgICAgICBpX3NyYyA9IHBrdFs2OjEyXVxuJiM0MztcbiYjNDM7cHJpbnQoXCYjMzQ7bWFzdGVyIGhfc291cmNlICAgID1cJiMzNDssIG1fc3JjLmhleCgpIGlmIG1fc3JjIGVsc2UgTm9uZSlcbiYjNDM7cHJpbnQoXCYjMzQ7bm9kZSBNQUMgICAgICAgICAgID1cJiMzNDssIE5PREUuaGV4KCkpXG4mIzQzO3ByaW50KFwmIzM0O2ludGVybGluayBoX3NvdXJjZSA9XCYjMzQ7LCBpX3NyYy5oZXgoKSBpZiBpX3NyYyBlbHNlIE5vbmUpXG4mIzQzO3ByaW50KFwmIzM0O3JlZGJveCBNQUMgICAgICAgICA9XCYjMzQ7LCBSQi5oZXgoKSlcbiYjNDM7aWYgaV9zcmMgIT0gUkI6XG4mIzQzOyAgICBwcmludChcJiMzNDtGQUlMOiBpbnRlcmxpbmsgZGlkIG5vdCBjYXJyeSB0aGUgUmVkQm94IE1BQ1wmIzM0OylcbiYjNDM7ICAgIHN5cy5leGl0KDEpXG4mIzQzO2lmIG1fc3JjICE9IE5PREU6XG4mIzQzOyAgICBwcmludChcJiMzNDtGQUlMOiBtYXN0ZXIgcmVjZWl2ZWQgJXMgaW5zdGVhZCBvZiB0aGUgbm9kZSBNQUMgXCYjMzQ7XG4mIzQzOyAgICAgICAgICBcJiMzNDsoc2hhcmVkLW11dGF0aW9uIGNvcnJ1cHRpb24pXCYjMzQ7ICUgKG1fc3JjLmhleCgpIGlmIG1fc3JjIGVsc2UgXCYjMzQ7bm90aGluZ1wmIzM0OykpXG4mIzQzOyAgICBzeXMuZXhpdCgxKVxuJiM0MztwcmludChcJiMzNDtQQVNTOiBtYXN0ZXIga2VwdCBub2RlIE1BQywgaW50ZXJsaW5rIGtlcHQgUmVkQm94IE1BQ1wmIzM0OylcbiYjNDM7c3lzLmV4aXQoMClcbiYjNDM7UFlGMVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztyYz0wXG4mIzQzO1xuJiM0MztydW5fZjJcbiYjNDM7cmV0PSQ/XG4mIzQzO1sgXCYjMzQ7JHJldFwmIzM0OyAtZXEgXCYjMzQ7JGtzZnRfc2tpcFwmIzM0OyBdIFx1MDAyNlx1MDAyNiBleGl0IFwmIzM0OyRrc2Z0X3NraXBcJiMzNDtcbiYjNDM7WyBcJiMzNDskcmV0XCYjMzQ7IC1lcSAwIF0gfHwgcmM9MVxuJiM0MztcbiYjNDM7cnVuX2YxXG4mIzQzO3JldD0kP1xuJiM0MztbIFwmIzM0OyRyZXRcJiMzNDsgLWVxIFwmIzM0OyRrc2Z0X3NraXBcJiMzNDsgXSBcdTAwMjZcdTAwMjYgZXhpdCBcJiMzNDska3NmdF9za2lwXCYjMzQ7XG4mIzQzO1sgXCYjMzQ7JHJldFwmIzM0OyAtZXEgMCBdIHx8IHJjPTFcbiYjNDM7XG4mIzQzO2lmIFsgJHJjIC1lcSAwIF07IHRoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O2hzcl9zaGFyZWRfbXV0YXRpb246IHBlci1lZ3Jlc3MgbXV0YXRpb24gaXNvbGF0aW9uIChGMSYjNDM7RjIpIFsgT0sgXVwmIzM0O1xuJiM0MztlbHNlXG4mIzQzO1x0ZWNobyBcJiMzNDtoc3Jfc2hhcmVkX211dGF0aW9uOiBwZXItZWdyZXNzIG11dGF0aW9uIGlzb2xhdGlvbiBbIEZBSUwgXSByYz0kcmNcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7ZmlcbiYjNDM7ZXhpdCAkcmNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxODo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFNSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUmIzM0OywKICAgICYjMzQ7cHJwX2NyZWF0ZV90YWdnZWRfZnJhbWUmIzM0OywKICAgICYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc2hhcmVkLW11dGF0aW9uIGlzc3VlIGluIEhTUiBhbmQgUFJQIGJ5IGNsb25pbmcgdGhlIHNrYiBhbmQgbWFraW5nIGl0IHByaXZhdGUgYmVmb3JlIG1vZGlmeWluZyBpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEhTUiBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYTBhYjA1OTM5NTE3MDRlMjVkMmI4OTU4ZGVkOGRjZWNkMzU5ZjA1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjkgMTg6NTU6NDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmMKaW5kZXggMDc3NDk4MWE2NWMxNi4uOTc0YjU1ZjI0ODgyMSAxMDA2NDQKLS0tIGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuYwpAQCAtMzM2LDEyICYjNDM7MzM2LDI0IEBAIHN0cnVjdCBza19idWZmICpoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLAogCWludCBtb3ZlbGVuOwogCiAJaWYgKGZyYW1lLSZndDtza2JfaHNyKSB7Ci0JCXN0cnVjdCBoc3JfZXRoaGRyICpoc3JfZXRoaGRyID0KLQkJCShzdHJ1Y3QgaHNyX2V0aGhkciAqKXNrYl9tYWNfaGVhZGVyKGZyYW1lLSZndDtza2JfaHNyKTsKJiM0MzsJCXN0cnVjdCBoc3JfZXRoaGRyICpoc3JfZXRoaGRyOwomIzQzOwomIzQzOwkJLyogVGhlIG9yaWdpbmFsIHNrYiBkYXRhIG1heSBiZSBzaGFyZWQgd2l0aCBhbm90aGVyIGVncmVzcwomIzQzOwkJICogY2xvbmUuIE1ha2UgdGhlIGNsb25lIGRhdGEgcHJpdmF0ZSBiZWZvcmUgdXBkYXRpbmcgdGhlCiYjNDM7CQkgKiBwYXRoIGlkIHNvIHRoZSB1cGRhdGUgY2Fubm90IGNvcnJ1cHQgdGhlIG90aGVyIGNvcHkuCiYjNDM7CQkgKi8KJiM0MzsJCXNrYiA9IHNrYl9jbG9uZShmcmFtZS0mZ3Q7c2tiX2hzciwgR0ZQX0FUT01JQyk7CiYjNDM7CQlpZiAoIXNrYikKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCWlmIChza2JfY293KHNrYiwgMCkpIHsKJiM0MzsJCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCX0KIAogCQkvKiBzZXQgdGhlIGxhbmUgaWQgcHJvcGVybHkgKi8KJiM0MzsJCWhzcl9ldGhoZHIgPSAoc3RydWN0IGhzcl9ldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpOwogCQloc3Jfc2V0X3BhdGhfaWQoZnJhbWUsIGhzcl9ldGhoZHIsIHBvcnQpOwotCQlyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLSZndDtza2JfaHNyLCBHRlBfQVRPTUlDKTsKJiM0MzsJCXJldHVybiBza2I7CiAJfSBlbHNlIGlmIChwb3J0LSZndDtkZXYtJmd0O2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfSFdfSFNSX1RBR19JTlMpIHsKIAkJcmV0dXJuIHNrYl9jbG9uZShmcmFtZS0mZ3Q7c2tiX3N0ZCwgR0ZQX0FUT01JQyk7CiAJfQpAQCAtMzc3LDE1ICYjNDM7Mzg5LDI4IEBAIHN0cnVjdCBza19idWZmICpwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLAogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlpZiAoZnJhbWUtJmd0O3NrYl9wcnApIHsKLQkJc3RydWN0IHBycF9yY3QgKnRyYWlsZXIgPSBza2JfZ2V0X1BSUF9yY3QoZnJhbWUtJmd0O3NrYl9wcnApOwomIzQzOwkJc3RydWN0IHBycF9yY3QgKnRyYWlsZXI7CiAKJiM0MzsJCS8qIFNhbWUgc2hhcmluZyBoYXphcmQgYXMgYWJvdmU6IHByaXZhdGl6ZSB0aGUgY2xvbmUgZGF0YQomIzQzOwkJICogYmVmb3JlIHVwZGF0aW5nIHRoZSBMQU4gaWQuCiYjNDM7CQkgKi8KJiM0MzsJCXNrYiA9IHNrYl9jbG9uZShmcmFtZS0mZ3Q7c2tiX3BycCwgR0ZQX0FUT01JQyk7CiYjNDM7CQlpZiAoIXNrYikKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCWlmIChza2JfY293KHNrYiwgMCkpIHsKJiM0MzsJCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXRyYWlsZXIgPSBza2JfZ2V0X1BSUF9yY3Qoc2tiKTsKIAkJaWYgKHRyYWlsZXIpIHsKIAkJCXBycF9zZXRfbGFuX2lkKHRyYWlsZXIsIHBvcnQpOwogCQl9IGVsc2UgewogCQkJV0FSTl9PTkNFKCF0cmFpbGVyLCAmIzM0O2Vycm9yZWQgUFJQIHNrYiYjMzQ7KTsKJiM0MzsJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCXJldHVybiBOVUxMOwogCQl9Ci0JCXJldHVybiBza2JfY2xvbmUoZnJhbWUtJmd0O3NrYl9wcnAsIEdGUF9BVE9NSUMpOwomIzQzOwkJcmV0dXJuIHNrYjsKIAl9IGVsc2UgaWYgKHBvcnQtJmd0O2Rldi0mZ3Q7ZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9IV19IU1JfVEFHX0lOUykgewogCQlyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLSZndDtza2Jfc3RkLCBHRlBfQVRPTUlDKTsKIAl9CkBAIC00MjAsNiAmIzQzOzQ0NSwyMiBAQCBzdGF0aWMgdm9pZCBoc3JfZGVsaXZlcl9tYXN0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIHN0YXRpYyBpbnQgaHNyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0LAogCQkgICAgc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSkKIHsKJiM0MzsJLyogQW4gaW50ZXJsaW5rLWJvdW5kIHNrYiBmcm9tIGdldF91bnRhZ2dlZF9mcmFtZSgpIGNhbiBzdGlsbCBhbGlhcwomIzQzOwkgKiBhbm90aGVyIGxpdmUgY29uc3VtZXI6IGZvciBtYXN0ZXItb3JpZ2luYXRlZCBmcmFtZXMgdGhlIGNsb25lCiYjNDM7CSAqIHNoYXJlcyB0aGUgb3JpZ2luYWwgVFggc2tiICh3aGljaCB0YXBzIG9yIHRoZSBUWCBwYXRoIG1heSBzdGlsbAomIzQzOwkgKiBob2xkKTsgZm9yIHJpbmcgZnJhbWVzIHRoZSBtYXN0ZXIgYWxzbyBjb25zdW1lcyB0aGVtIHdoZW4gdGhleQomIzQzOwkgKiBhcmUgZGVzdGluZWQgdG8gdGhlIGxvY2FsIG5vZGUgd2l0aG91dCBiZWluZyBleGNsdXNpdmUgdG8gaXQuCiYjNDM7CSAqIFByaXZhdGl6ZSBiZWZvcmUgYW55IGFkZHJlc3MgbXV0YXRpb24uCiYjNDM7CSAqLwomIzQzOwlpZiAocG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LICZhbXA7JmFtcDsKJiM0MzsJICAgIChmcmFtZS0mZ3Q7cG9ydF9yY3YtJmd0O3R5cGUgPT0gSFNSX1BUX01BU1RFUiB8fAomIzQzOwkgICAgIChmcmFtZS0mZ3Q7aXNfbG9jYWxfZGVzdCAmYW1wOyZhbXA7ICFmcmFtZS0mZ3Q7aXNfbG9jYWxfZXhjbHVzaXZlKSkgJmFtcDsmYW1wOwomIzQzOwkgICAgc2tiX2Nvdyhza2IsIDApKSB7CiYjNDM7CQlmcmFtZS0mZ3Q7cG9ydF9yY3YtJmd0O2Rldi0mZ3Q7c3RhdHMucnhfZHJvcHBlZCYjNDM7JiM0Mzs7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiBORVRfWE1JVF9EUk9QOwomIzQzOwl9CiYjNDM7CiAJaWYgKGZyYW1lLSZndDtwb3J0X3Jjdi0mZ3Q7dHlwZSA9PSBIU1JfUFRfTUFTVEVSKSB7CiAJCWhzcl9hZGRyX3N1YnN0X2Rlc3QoZnJhbWUtJmd0O25vZGVfc3JjLCBza2IsIHBvcnQpOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZQppbmRleCAzMWZiOTMyNmNmNTMzLi5hZWFlN2YzZDZkZDE0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUKQEAgLTcsNiAmIzQzOzcsNyBAQCBURVNUX1BST0dTIDo9IFwKIAloc3JfcmVkYm94LnNoIFwKIAlsaW5rX2ZhdWx0cy5zaCBcCiAJcHJwX3Bpbmcuc2ggXAomIzQzOwloc3Jfc2hhcmVkX211dGF0aW9uLnNoIFwKICMgZW5kIG9mIFRFU1RfUFJPR1MKIAogVEVTVF9GSUxFUyAmIzQzOz0gaHNyX2NvbW1vbi5zaApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3Jfc2hhcmVkX211dGF0aW9uLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3Jfc2hhcmVkX211dGF0aW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAuLjI3MTAzNTQxY2Q3OGMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9zaGFyZWRfbXV0YXRpb24uc2gKQEAgLTAsMCAmIzQzOzEsMjEzIEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7IwomIzQzOyMgVmVyaWZ5IHRoYXQgcGVyLWVncmVzcyBtdXRhdGlvbnMgb2Ygc2hhcmVkIHNrYiBkYXRhIGFyZSBwcml2YXRlOgomIzQzOyMKJiM0MzsjIEYyIChwYXRoL0xBTiBJRCk6IG9uIGFuIGFmZmVjdGVkIGtlcm5lbCB0aGUgc2Vjb25kIHNsYXZlJiMzOTtzIExBTi1JRCB3cml0ZQomIzQzOyMgbGFuZHMgaW4gdGhlIGZpcnN0IHNsYXZlJiMzOTtzIHN0aWxsLXF1ZXVlZCBjbG9uZTsgd2l0aCBhIG5ldGVtIGRlbGF5IG9uCiYjNDM7IyBzbGF2ZSBBLCBpbmplY3RlZCBmcmFtZXMgbGVhdmUgQSBjYXJyeWluZyBCJiMzOTtzIExBTiBJRC4KJiM0MzsjCiYjNDM7IyBGMSAoUmVkQm94IHNvdXJjZSBNQUMpOiBvbiBhbiBhZmZlY3RlZCBrZXJuZWwgYW4gSFNSLXRhZ2dlZCBtdWx0aWNhc3QKJiM0MzsjIGZyYW1lIHJlY2VpdmVkIG9uIGEgUmVkQm94IHNsYXZlIGlzIGNsb25lZCBmb3IgbWFzdGVyIGFuZCBpbnRlcmxpbmssCiYjNDM7IyBhbmQgdGhlIGludGVybGluayYjMzk7cyBSZWRCb3gtTUFDIHJld3JpdGUgbGFuZHMgaW4gdGhlIG1hc3RlciBjbG9uZSYjMzk7cwomIzQzOyMgYnVmZmVyLCBzbyB0aGUgbG9jYWwgc3RhY2sgcmVjZWl2ZXMgdGhlIFJlZEJveCBNQUMgaW5zdGVhZCBvZiB0aGUKJiM0MzsjIG9yaWdpbmF0aW5nIG5vZGUmIzM5O3MgTUFDLgomIzQzOwomIzQzO2lwdjY9ZmFsc2UKJiM0MzsKJiM0Mztzb3VyY2UgLi9oc3JfY29tbW9uLnNoCiYjNDM7CiYjNDM7RFVSPTUKJiM0MzsKJiM0MztyZXF1aXJlKCkKJiM0Mzt7CiYjNDM7CWNvbW1hbmQgLXYgJiMzNDskMSYjMzQ7ICZndDsvZGV2L251bGwgMiZndDsmYW1wOzEgJmFtcDsmYW1wOyByZXR1cm4gMAomIzQzOwllY2hvICYjMzQ7U0tJUDogJDEgbm90IGF2YWlsYWJsZSYjMzQ7CiYjNDM7CWV4aXQgJGtzZnRfc2tpcAomIzQzO30KJiM0MzsKJiM0MztyZXF1aXJlIGlwCiYjNDM7cmVxdWlyZSB0YwomIzQzO3JlcXVpcmUgcHl0aG9uMwomIzQzOwomIzQzO3RyYXAgY2xlYW51cF9hbGxfbnMgRVhJVAomIzQzOwomIzQzOyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGMjogTEFOLUlEIGlzb2xhdGlvbgomIzQzOyMgUFJQIERBTlAgKHByb3RvIDEpLCBBRl9QQUNLRVQgcHJlLXRhZ2dlZCBpbmplY3Rpb24sIG5ldGVtIG9uIHNsYXZlIEEuCiYjNDM7cnVuX2YyKCkKJiM0Mzt7CiYjNDM7CXNldHVwX25zIG5zIDImZ3Q7L2Rldi9udWxsIHx8IHJldHVybiAka3NmdF9za2lwCiYjNDM7CW5zeCgpIHsgaXAgbmV0bnMgZXhlYyAmIzM0OyRucyYjMzQ7ICYjMzQ7JEAmIzM0OzsgfQomIzQzOwomIzQzOwkjIFByb2JlIHNjaF9uZXRlbSBpbnNpZGUgdGhlIGRpc3Bvc2FibGUgbmFtZXNwYWNlIG9ubHkuCiYjNDM7CWlmICEgbnN4IHRjIHFkaXNjIGFkZCBkZXYgbG8gcm9vdCBuZXRlbSBkZWxheSAxbXMgMiZndDsvZGV2L251bGw7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtTS0lQOiBzY2hfbmV0ZW0gbm90IGF2YWlsYWJsZSYjMzQ7CiYjNDM7CQlyZXR1cm4gJGtzZnRfc2tpcAomIzQzOwlmaQomIzQzOwluc3ggdGMgcWRpc2MgZGVsIGRldiBsbyByb290IDImZ3Q7L2Rldi9udWxsCiYjNDM7CiYjNDM7CSMgQ2FwYWJpbGl0eSBwcm9iZXMgZW5kIGhlcmU7IHNldHVwIG9yIHJ1bnRpbWUgZmFpbHVyZSBiZWxvdyBpcyBGQUlMLgomIzQzOwluc3ggaXAgbGluayBhZGQgdkEgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2QXAgfHwgeyBlY2hvICYjMzQ7RkFJTDogdmV0aCBBJiMzNDs7IHJldHVybiAxOyB9CiYjNDM7CW5zeCBpcCBsaW5rIGFkZCB2QiB0eXBlIHZldGggcGVlciBuYW1lIHZCcCB8fCB7IGVjaG8gJiMzNDtGQUlMOiB2ZXRoIEImIzM0OzsgcmV0dXJuIDE7IH0KJiM0MzsJZm9yIGkgaW4gdkEgdkIgdkFwIHZCcDsgZG8KJiM0MzsJCW5zeCBpcCBsaW5rIHNldCAmIzM0OyRpJiMzNDsgdXAgfHwgeyBlY2hvICYjMzQ7RkFJTDogJGkgdXAmIzM0OzsgcmV0dXJuIDE7IH0KJiM0MzsJZG9uZQomIzQzOwluc3ggaXAgbGluayBhZGQgbmFtZSBwcnAwIHR5cGUgaHNyIHNsYXZlMSB2QSBzbGF2ZTIgdkIgc3VwZXJ2aXNpb24gNDUgcHJvdG8gMSAyJmd0Oy9kZXYvbnVsbAomIzQzOwlpZiBbICQ/IC1uZSAwIF07IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtTS0lQOiBIU1IvUFJQIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBrZXJuZWwmIzM0OwomIzQzOwkJcmV0dXJuICRrc2Z0X3NraXAKJiM0MzsJZmkKJiM0MzsJbnN4IGlwIGxpbmsgc2V0IHBycDAgdXAgfHwgeyBlY2hvICYjMzQ7RkFJTDogcHJwMCB1cCYjMzQ7OyByZXR1cm4gMTsgfQomIzQzOwluc3ggdGMgcWRpc2MgYWRkIGRldiB2QSByb290IG5ldGVtIGRlbGF5IDIwMG1zIHx8IHsgZWNobyAmIzM0O0ZBSUw6IG5ldGVtJiMzNDs7IHJldHVybiAxOyB9CiYjNDM7CiYjNDM7CW5zeCBweXRob24zIC9kZXYvc3RkaW4gJiMzNDskRFVSJiMzNDsgJmx0OyZsdDsmIzM5O1BZRjImIzM5OwomIzQzO2ltcG9ydCBzb2NrZXQsIHN0cnVjdCwgc2VsZWN0LCBzeXMsIHRpbWUKJiM0MzsKJiM0MztkdXIgPSBpbnQoc3lzLmFyZ3ZbMV0pCiYjNDM7ZGVmIGxhbmlkKHBrdCk6CiYjNDM7ICAgIGlmIGxlbihwa3QpICZsdDsgMjAgb3IgcGt0Wy0yOl0gIT0gYiYjMzQ7XHg4OFx4ZmImIzM0OzoKJiM0MzsgICAgICAgIHJldHVybiBOb25lCiYjNDM7ICAgIHJldHVybiAocGt0Wy00XSAmZ3Q7Jmd0OyA0KSAmYW1wOyAweEYKJiM0MzsKJiM0MztTUkMgPSBieXRlcy5mcm9taGV4KG9wZW4oJiMzNDsvc3lzL2NsYXNzL25ldC9wcnAwL2FkZHJlc3MmIzM0OykucmVhZCgpLnJlcGxhY2UoJiMzNDs6JiMzNDssICYjMzQ7JiMzNDspKQomIzQzO0RTVCA9IGJ5dGVzLmZyb21oZXgoJiMzNDswMmFhYmJjY2RkMDEmIzM0OykKJiM0MztQQVkgPSBieXRlcyhyYW5nZSg0NikpCiYjNDM7cmN0MCA9IHN0cnVjdC5wYWNrKCYjMzQ7Jmd0O0gmIzM0OywgMCkgJiM0Mzsgc3RydWN0LnBhY2soJiMzNDsmZ3Q7SCYjMzQ7LCA1MiAmYW1wOyAweDBGRkYpICYjNDM7IGImIzM0O1x4ODhceGZiJiMzNDsKJiM0MztmcmFtZSA9IERTVCAmIzQzOyBTUkMgJiM0MzsgYiYjMzQ7XHgwOFx4MDAmIzM0OyAmIzQzOyBQQVkgJiM0MzsgcmN0MAomIzQzOwomIzQzO3R4ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcpOyB0eC5iaW5kKCgmIzM0O3BycDAmIzM0OywgMCkpCiYjNDM7c0EgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVywKJiM0MzsgICAgICAgIHNvY2tldC5udG9ocygweDAwMDMpKQomIzQzO3NBLmJpbmQoKCYjMzQ7dkFwJiMzNDssIDApKQomIzQzO3NCID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcsCiYjNDM7ICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSkKJiM0MztzQi5iaW5kKCgmIzM0O3ZCcCYjMzQ7LCAwKSkKJiM0MztzQS5zZXRibG9ja2luZyhGYWxzZSk7IHNCLnNldGJsb2NraW5nKEZhbHNlKQomIzQzO2ZvciBfIGluIHJhbmdlKDIwMCk6CiYjNDM7ICAgIHR4LnNlbmQoZnJhbWUpOyB0aW1lLnNsZWVwKDAuMDAxKQomIzQzOwomIzQzO2EsIGIgPSBbXSwgW10KJiM0MztlbmQgPSB0aW1lLnRpbWUoKSAmIzQzOyBkdXIKJiM0Mzt3aGlsZSB0aW1lLnRpbWUoKSAmbHQ7IGVuZDoKJiM0MzsgICAgciwgXywgXyA9IHNlbGVjdC5zZWxlY3QoW3NBLCBzQl0sIFtdLCBbXSwgMC4zKQomIzQzOyAgICBmb3IgcyBpbiByOgomIzQzOyAgICAgICAgcGt0ID0gcy5yZWN2KDY1NTM1KQomIzQzOyAgICAgICAgaWYgKHBrdFs6Nl0gIT0gRFNUIG9yIHBrdFs2OjEyXSAhPSBTUkMgb3IgcGt0WzEyOjE0XSAhPSBiJiMzNDtceDA4XHgwMCYjMzQ7CiYjNDM7ICAgICAgICAgICAgICAgIG9yIHBrdFsxNDoxNCAmIzQzOyBsZW4oUEFZKV0gIT0gUEFZKToKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgbGlkID0gbGFuaWQocGt0KQomIzQzOyAgICAgICAgaWYgbGlkIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIChhIGlmIHMgaXMgc0EgZWxzZSBiKS5hcHBlbmQobGlkKQomIzQzOwomIzQzO3ByaW50KCYjMzQ7QS1zaWRlIGNvdW50PSVkIGxhbiBpZHM9JXMmIzM0OyAlIChsZW4oYSksIHNvcnRlZChzZXQoYSkpKSkKJiM0MztwcmludCgmIzM0O0Itc2lkZSBjb3VudD0lZCBsYW4gaWRzPSVzJiMzNDsgJSAobGVuKGIpLCBzb3J0ZWQoc2V0KGIpKSkpCiYjNDM7aWYgbGVuKGEpICZsdDsgMTUwIG9yIGxlbihiKSAmbHQ7IDE1MDoKJiM0MzsgICAgcHJpbnQoJiMzNDtGQUlMOiB0b28gZmV3IGluamVjdGVkIGZyYW1lcyBjYXB0dXJlZCAoQT0lZCBCPSVkLCBzZW50IDIwMCkmIzM0OyAlIChsZW4oYSksIGxlbihiKSkpCiYjNDM7ICAgIHN5cy5leGl0KDEpCiYjNDM7YmFkX2EgPSBbeCBmb3IgeCBpbiBhIGlmICh4ICZhbXA7IDEpICE9IDBdCiYjNDM7YmFkX2IgPSBbeCBmb3IgeCBpbiBiIGlmICh4ICZhbXA7IDEpICE9IDFdCiYjNDM7aWYgYmFkX2Egb3IgYmFkX2I6CiYjNDM7ICAgIHByaW50KCYjMzQ7RkFJTDogc2hhcmVkLW11dGF0aW9uIGNvcnJ1cHRpb24gLSBBOiAlZC8lZCB3cm9uZy1sYW4sIEI6ICVkLyVkIHdyb25nLWxhbiYjMzQ7CiYjNDM7ICAgICAgICAgICUgKGxlbihiYWRfYSksIGxlbihhKSwgbGVuKGJhZF9iKSwgbGVuKGIpKSkKJiM0MzsgICAgc3lzLmV4aXQoMSkKJiM0MztwcmludCgmIzM0O1BBU1M6IHBlci1lZ3Jlc3MgTEFOIElEcyBpc29sYXRlZCAoQSBhbGwgYml0MD0wLCBCIGFsbCBiaXQwPTEpJiMzNDspCiYjNDM7c3lzLmV4aXQoMCkKJiM0MztQWUYyCiYjNDM7fQomIzQzOwomIzQzOyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEYxOiBSZWRCb3ggc291cmNlLU1BQyBwcml2YWN5CiYjNDM7IyBIU1IgUmVkQm94IChwcm90byAwKSwgdGFnZ2VkIG11bHRpY2FzdCBmcm9tIGEgc2xhdmU6IG1hc3RlciBtdXN0IGtlZXAKJiM0MzsjIHRoZSBub2RlIE1BQywgaW50ZXJsaW5rIG11c3QgY2FycnkgdGhlIFJlZEJveCBNQUMuCiYjNDM7cnVuX2YxKCkKJiM0Mzt7CiYjNDM7CXNldHVwX25zIG5zIDImZ3Q7L2Rldi9udWxsIHx8IHJldHVybiAka3NmdF9za2lwCiYjNDM7CW5zeCgpIHsgaXAgbmV0bnMgZXhlYyAmIzM0OyRucyYjMzQ7ICYjMzQ7JEAmIzM0OzsgfQomIzQzOwomIzQzOwluc3ggaXAgbGluayBhZGQgdkEgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2QXAgfHwgeyBlY2hvICYjMzQ7RkFJTDogdmV0aCBBJiMzNDs7IHJldHVybiAxOyB9CiYjNDM7CW5zeCBpcCBsaW5rIGFkZCB2QiB0eXBlIHZldGggcGVlciBuYW1lIHZCcCB8fCB7IGVjaG8gJiMzNDtGQUlMOiB2ZXRoIEImIzM0OzsgcmV0dXJuIDE7IH0KJiM0MzsJbnN4IGlwIGxpbmsgYWRkIHZJIHR5cGUgdmV0aCBwZWVyIG5hbWUgdklwIHx8IHsgZWNobyAmIzM0O0ZBSUw6IHZldGggSSYjMzQ7OyByZXR1cm4gMTsgfQomIzQzOwlmb3IgaSBpbiB2QSB2QiB2SSB2QXAgdkJwIHZJcDsgZG8KJiM0MzsJCW5zeCBpcCBsaW5rIHNldCAmIzM0OyRpJiMzNDsgdXAgfHwgeyBlY2hvICYjMzQ7RkFJTDogJGkgdXAmIzM0OzsgcmV0dXJuIDE7IH0KJiM0MzsJZG9uZQomIzQzOwluc3ggaXAgbGluayBhZGQgbmFtZSBoc3IwIHR5cGUgaHNyIHNsYXZlMSB2QSBzbGF2ZTIgdkIgaW50ZXJsaW5rIHZJIFwKJiM0MzsJCXN1cGVydmlzaW9uIDQ1IHByb3RvIDAgMiZndDsvZGV2L251bGwKJiM0MzsJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7U0tJUDogSFNSIFJlZEJveCBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMga2VybmVsJiMzNDsKJiM0MzsJCXJldHVybiAka3NmdF9za2lwCiYjNDM7CWZpCiYjNDM7CW5zeCBpcCBsaW5rIHNldCBoc3IwIHVwIHx8IHsgZWNobyAmIzM0O0ZBSUw6IGhzcjAgdXAmIzM0OzsgcmV0dXJuIDE7IH0KJiM0MzsKJiM0MzsJbnN4IHB5dGhvbjMgL2Rldi9zdGRpbiAmbHQ7Jmx0OyYjMzk7UFlGMSYjMzk7CiYjNDM7aW1wb3J0IHNvY2tldCwgc2VsZWN0LCBzeXMsIHRpbWUKJiM0MzsKJiM0MztOT0RFICA9IGJ5dGVzLmZyb21oZXgoJiMzNDswMjExMjIzMzQ0NTUmIzM0OykKJiM0MztNQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJiMzNDswMTAwNWUwMDAwMDEmIzM0OykKJiM0MztSQiAgICA9IGJ5dGVzLmZyb21oZXgob3BlbigmIzM0Oy9zeXMvY2xhc3MvbmV0L3ZJL2FkZHJlc3MmIzM0OykucmVhZCgpLnJlcGxhY2UoJiMzNDs6JiMzNDssICYjMzQ7JiMzNDspKQomIzQzO1BBWSAgID0gYnl0ZXMocmFuZ2UoNDYpKQomIzQzOwomIzQzO2RlZiBmcmFtZShzZXEpOgomIzQzOyAgICB0YWcgPSAoKDEgJmx0OyZsdDsgMTIpIHwgbGVuKFBBWSkpLnRvX2J5dGVzKDIsICYjMzQ7YmlnJiMzNDspICYjNDM7IHNlcS50b19ieXRlcygyLCAmIzM0O2JpZyYjMzQ7KSAmIzQzOyBiJiMzNDtceDA4XHgwMCYjMzQ7CiYjNDM7ICAgIHJldHVybiBNQ0FTVCAmIzQzOyBOT0RFICYjNDM7IGImIzM0O1x4ODlceDJmJiMzNDsgJiM0MzsgdGFnICYjNDM7IFBBWQomIzQzOwomIzQzO3R4ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcpOyB0eC5iaW5kKCgmIzM0O3ZBcCYjMzQ7LCAwKSkKJiM0MztzbSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXLAomIzQzOyAgICAgICAgc29ja2V0Lm50b2hzKDB4MDAwMykpCiYjNDM7c20uYmluZCgoJiMzNDtoc3IwJiMzNDssIDApKQomIzQzO3NpID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcsCiYjNDM7ICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSkKJiM0MztzaS5iaW5kKCgmIzM0O3ZJcCYjMzQ7LCAwKSkKJiM0MztzbS5zZXRibG9ja2luZyhGYWxzZSk7IHNpLnNldGJsb2NraW5nKEZhbHNlKQomIzQzOwomIzQzO2ZvciBpIGluIHJhbmdlKDMpOgomIzQzOyAgICB0eC5zZW5kKGZyYW1lKGkgJiM0MzsgMSkpOyB0aW1lLnNsZWVwKDAuMDUpCiYjNDM7CiYjNDM7bV9zcmMgPSBpX3NyYyA9IE5vbmUKJiM0MztlbmQgPSB0aW1lLnRpbWUoKSAmIzQzOyA0CiYjNDM7d2hpbGUgdGltZS50aW1lKCkgJmx0OyBlbmQgYW5kIChtX3NyYyBpcyBOb25lIG9yIGlfc3JjIGlzIE5vbmUpOgomIzQzOyAgICByLCBfLCBfID0gc2VsZWN0LnNlbGVjdChbc20sIHNpXSwgW10sIFtdLCAwLjMpCiYjNDM7ICAgIGZvciBzIGluIHI6CiYjNDM7ICAgICAgICBwa3QgPSBzLnJlY3YoNjU1MzUpCiYjNDM7ICAgICAgICAjIGV4YWN0IGZsb3c6IGRzdCwgcG9zdC1zdHJpcCBFdGhlclR5cGUsIGV4YWN0IHBheWxvYWQsIG1pbiBsZW5ndGg7CiYjNDM7ICAgICAgICAjIGhfc291cmNlIGlzIHRoZSBhc3NlcnRlZCB2YWx1ZSBhbmQgbXVzdCBOT1QgYmUgZmlsdGVyZWQgb24KJiM0MzsgICAgICAgIGlmIChsZW4ocGt0KSAmbHQ7IDYwIG9yIHBrdFs6Nl0gIT0gTUNBU1Qgb3IgcGt0WzEyOjE0XSAhPSBiJiMzNDtceDA4XHgwMCYjMzQ7CiYjNDM7ICAgICAgICAgICAgICAgIG9yIHBrdFsxNDoxNCAmIzQzOyBsZW4oUEFZKV0gIT0gUEFZKToKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgaWYgcyBpcyBzbSBhbmQgbV9zcmMgaXMgTm9uZToKJiM0MzsgICAgICAgICAgICBtX3NyYyA9IHBrdFs2OjEyXQomIzQzOyAgICAgICAgZWxpZiBzIGlzIHNpIGFuZCBpX3NyYyBpcyBOb25lOgomIzQzOyAgICAgICAgICAgIGlfc3JjID0gcGt0WzY6MTJdCiYjNDM7CiYjNDM7cHJpbnQoJiMzNDttYXN0ZXIgaF9zb3VyY2UgICAgPSYjMzQ7LCBtX3NyYy5oZXgoKSBpZiBtX3NyYyBlbHNlIE5vbmUpCiYjNDM7cHJpbnQoJiMzNDtub2RlIE1BQyAgICAgICAgICAgPSYjMzQ7LCBOT0RFLmhleCgpKQomIzQzO3ByaW50KCYjMzQ7aW50ZXJsaW5rIGhfc291cmNlID0mIzM0OywgaV9zcmMuaGV4KCkgaWYgaV9zcmMgZWxzZSBOb25lKQomIzQzO3ByaW50KCYjMzQ7cmVkYm94IE1BQyAgICAgICAgID0mIzM0OywgUkIuaGV4KCkpCiYjNDM7aWYgaV9zcmMgIT0gUkI6CiYjNDM7ICAgIHByaW50KCYjMzQ7RkFJTDogaW50ZXJsaW5rIGRpZCBub3QgY2FycnkgdGhlIFJlZEJveCBNQUMmIzM0OykKJiM0MzsgICAgc3lzLmV4aXQoMSkKJiM0MztpZiBtX3NyYyAhPSBOT0RFOgomIzQzOyAgICBwcmludCgmIzM0O0ZBSUw6IG1hc3RlciByZWNlaXZlZCAlcyBpbnN0ZWFkIG9mIHRoZSBub2RlIE1BQyAmIzM0OwomIzQzOyAgICAgICAgICAmIzM0OyhzaGFyZWQtbXV0YXRpb24gY29ycnVwdGlvbikmIzM0OyAlIChtX3NyYy5oZXgoKSBpZiBtX3NyYyBlbHNlICYjMzQ7bm90aGluZyYjMzQ7KSkKJiM0MzsgICAgc3lzLmV4aXQoMSkKJiM0MztwcmludCgmIzM0O1BBU1M6IG1hc3RlciBrZXB0IG5vZGUgTUFDLCBpbnRlcmxpbmsga2VwdCBSZWRCb3ggTUFDJiMzNDspCiYjNDM7c3lzLmV4aXQoMCkKJiM0MztQWUYxCiYjNDM7fQomIzQzOwomIzQzO3JjPTAKJiM0MzsKJiM0MztydW5fZjIKJiM0MztyZXQ9JD8KJiM0MztbICYjMzQ7JHJldCYjMzQ7IC1lcSAmIzM0OyRrc2Z0X3NraXAmIzM0OyBdICZhbXA7JmFtcDsgZXhpdCAmIzM0OyRrc2Z0X3NraXAmIzM0OwomIzQzO1sgJiMzNDskcmV0JiMzNDsgLWVxIDAgXSB8fCByYz0xCiYjNDM7CiYjNDM7cnVuX2YxCiYjNDM7cmV0PSQ/CiYjNDM7WyAmIzM0OyRyZXQmIzM0OyAtZXEgJiMzNDska3NmdF9za2lwJiMzNDsgXSAmYW1wOyZhbXA7IGV4aXQgJiMzNDska3NmdF9za2lwJiMzNDsKJiM0MztbICYjMzQ7JHJldCYjMzQ7IC1lcSAwIF0gfHwgcmM9MQomIzQzOwomIzQzO2lmIFsgJHJjIC1lcSAwIF07IHRoZW4KJiM0MzsJZWNobyAmIzM0O2hzcl9zaGFyZWRfbXV0YXRpb246IHBlci1lZ3Jlc3MgbXV0YXRpb24gaXNvbGF0aW9uIChGMSYjNDM7RjIpIFsgT0sgXSYjMzQ7CiYjNDM7ZWxzZQomIzQzOwllY2hvICYjMzQ7aHNyX3NoYXJlZF9tdXRhdGlvbjogcGVyLWVncmVzcyBtdXRhdGlvbiBpc29sYXRpb24gWyBGQUlMIF0gcmM9JHJjJiMzNDsgMSZndDsmYW1wOzIKJiM0MztmaQomIzQzO2V4aXQgJHJjCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MDQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIU1IgUGF0Y2ggYW5kIGl0cyBJbXBsaWNhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2gg4oCTIHNlZW1zIGxpa2UgYSBmaXggZm9yIGEgc2hhcmVkLW11dGF0aW9uIGlzc3VlIGluIEhTUiBhbmQgUFJQLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmV0L2hzci9oc3JfZm9yd2FyZC5jYCBmaWxlLiBJbnRlcmVzdGluZy4gVGhlIHBhdGNoIGlzIGFsc28gYWRkaW5nIGEgbmV3IHRlc3QsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9zaGFyZWRfbXV0YXRpb24uc2hgLCB3aGljaCBzaG91bGQgYmUgaGVscGZ1bCBmb3IgdmFsaWRhdGluZyB0aGUgZml4LgoKVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0sIGFzIEkgdW5kZXJzdGFuZCBpdCwgbGllcyBpbiBob3cgZnJhbWVzIGFyZSBjbG9uZWQgd2hlbiBzZW50IG91dCB0byBtdWx0aXBsZSBlZ3Jlc3MgcG9ydHMuIFRoZSBmaXggaW52b2x2ZXMgdXNpbmcgYHNrYl9jbG9uZWAgYW5kIGBza2JfY293YCBpbiB0aGUgYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCBhbmQgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCBmdW5jdGlvbnMgdG8gZW5zdXJlIHRoYXQgbW9kaWZ5aW5nIHRoZSBwYXRoIElEIG9yIExBTiBJRCBvbiBhIGNsb25lZCBmcmFtZSBkb2VzbiYjMzk7dCBjb3JydXB0IHRoZSBvcmlnaW5hbCBkYXRhLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHNoYXJlZCBkYXRhIGNvcnJ1cHRpb24gaXMgYSBuYXN0eSBidWcuIFRoZSBhZGRpdGlvbiBvZiBhbiBgc2tiX2Nvd2AgY2hlY2sgaW4gYGhzcl94bWl0YCBmb3IgaW50ZXJsaW5rLWJvdW5kIHNrYnMgc2VlbXMgbGlrZSBhIG5lY2Vzc2FyeSBwcmVjYXV0aW9uIHRvIGNhdGNoIGFueXRoaW5nIHRoYXQgbWF5IGhhdmUgYmVlbiBtaXNzZWQuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGFjdHVhbCBjb2RlIGluIGBuZXQvaHNyL2hzcl9mb3J3YXJkLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIEhTUiBsb2dpYyByZXNpZGVzLCBzbyB1bmRlcnN0YW5kaW5nIGl0IHRob3JvdWdobHkgaXMgY3J1Y2lhbC4gR2l2ZW4gdGhhdCBIU1IgaXMgYSBuZXR3b3JrIHByb3RvY29sLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY29kZSBwYXRoIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSB3aXRoaW4gbXkgc3RhbmRhcmQgUUVNVSBzZXR1cC4gU2luY2UgSFNSIGlzIGltcGxlbWVudGVkIGFzIGEgc29mdHdhcmUgbmV0d29yayBkZXZpY2UsIHNpbWlsYXIgdG8gYSBicmlkZ2Ugb3IgVkxBTiwgdGhlbiBJIHdvdWxkIGV4cGVjdCBpdCB0byBiZS4KClRoZSB0ZXN0IHNjcmlwdCBpdHNlbGYgY29uZmlybXMgdGhpcywgdXNpbmcgYGlwIGxpbmsgYWRkIG5hbWUgcHJwMCB0eXBlIGhzciBzbGF2ZTEgdkEgc2xhdmUyIHZCIHN1cGVydmlzaW9uIDQ1IHByb3RvIDFgIHdoaWNoIHN1Z2dlc3RzIHRoYXQgaXQmIzM5O3MgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlLiBUaGlzIGNvbmZpcm1zIG15IHVuZGVyc3RhbmRpbmcuCgpOZXh0LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGhvdyBIU1IgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bGwgc2VhcmNoIGZvciB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIOKAkyBsaWtlbHkgbG9va2luZyBmb3IgJiMzNDtoc3ImIzM0OyBpbiBgbmV0L2hzci9LY29uZmlnYCBvciBhIHNpbWlsYXIgZmlsZS4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbmV0d29yayBzdGFjay4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIGtub3cgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYSBjb21wbGV0ZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIU1ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hzci9LY29uZmlnLTUtXG5uZXQvaHNyL0tjb25maWc6Njpjb25maWcgSFNSXG5uZXQvaHNyL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0hpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kgKEhTUiBcdTAwMjYgUFJQKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyODkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBDT05GSUdfSFNSKioKCk9rYXksIHNvIGBDT05GSUdfSFNSYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuIE15IHRhc2sgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcmFtaWZpY2F0aW9ucy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIGhvdyBpdCYjMzk7cyBhZmZlY3RpbmcgdGhpbmdzLgoKRmlyc3QsIEkgbmVlZCB0byBsb29rIGF0IHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgYXMgYSByZXN1bHQgb2YgZW5hYmxpbmcvZGlzYWJsaW5nIGBDT05GSUdfSFNSYC4gSXQgc2VlbXMgbGlrZSBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBhbmQgYGhzcl94bWl0YCBhcmUgdGhlIGFyZWFzIG9mIGludGVyZXN0LCB0aGUgc3BlY2lmaWMgZGV0YWlscyBvZiB0aGVzZSBmdW5jdGlvbiBjYWxscyBhcmUgdmVyeSBpbXBvcnRhbnQuIE5vdywgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGVpciByb2xlIGFuZCBhY2Nlc3NpYmlsaXR5IEkgaGF2ZSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGludGVybmFsIChzdGF0aWMpIG9yIHZpc2libGUgb3V0c2lkZSB0aGUgbW9kdWxlIChleHBvcnRlZCkuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIHJlcXVpcmUgdG8gZGV0ZXJtaW5lIGhvdyB0aGlzIGNvbmZpZ3VyYXRpb24gY2hhbmdlIGFmZmVjdHMgdGhlIGxhcmdlciBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTg6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9kZXZpY2UuYz02MjE9c3RhdGljIGNvbnN0IHN0cnVjdCBoc3JfcHJvdG9fb3BzIGhzcl9vcHMgPSB7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02MjItXHQuc2VuZF9zdl9mcmFtZSA9IHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lLFxubmV0L2hzci9oc3JfZGV2aWNlLmM6NjIzOlx0LmNyZWF0ZV90YWdnZWRfZnJhbWUgPSBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZSxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTYyNC1cdC5nZXRfdW50YWdnZWRfZnJhbWUgPSBoc3JfZ2V0X3VudGFnZ2VkX2ZyYW1lLFxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz0yODg9c3RhdGljIHN0cnVjdCBza19idWZmICpoc3JfZmlsbF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtMzMwLSAqL1xubmV0L2hzci9oc3JfZm9yd2FyZC5jOjMzMTpzdHJ1Y3Qgc2tfYnVmZiAqaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy0zMzItXHRcdFx0XHRcdHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmg9MTc9c3RydWN0IHNrX2J1ZmYgKnBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMTgtXHRcdFx0XHRcdHN0cnVjdCBoc3JfcG9ydCAqcG9ydCk7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmg6MTk6c3RydWN0IHNrX2J1ZmYgKmhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMjAtXHRcdFx0XHRcdHN0cnVjdCBoc3JfcG9ydCAqcG9ydCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTg6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk3MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyBGdW5jdGlvbiBBdHRyaWJ1dGVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnM6IGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGFuZCBgaHNyX3htaXRgLiBSaWdodCBhd2F5LCB0aGUgY3JpdGljYWwgZGlzdGluY3Rpb24ganVtcHMgb3V0LiBJJiMzOTt2ZSBnb3QgdG8gZGV0ZXJtaW5lIHdoaWNoIG9mIHRoZXNlIGFyZSBzdGF0aWMgYW5kIHdoaWNoIGFyZW4mIzM5O3QuIENsZWFybHksIGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAgaXMgKm5vdCogYSBzdGF0aWMgZnVuY3Rpb24uIEFsc28sIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAgaXMgKmFsc28qIG5vdCBhIHN0YXRpYyBmdW5jdGlvbi4gT24gdGhlIG90aGVyIGhhbmQsIGBoc3JfeG1pdGAgaXMsIGluIGZhY3QsIHN0YXRpYy4gVGhpcyBpcyB0aGUga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLCBhbmQgd2hlcmUgbXkgYW5hbHlzaXMgd2lsbCBsaWtlbHkgZGl2ZXJnZSwgZGVwZW5kaW5nIG9uIHRoZSBsYXJnZXIgY29udGV4dCBvZiB3aGF0IGlzIGJlaW5nIGV4YW1pbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hzcl94bWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2hzci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hzci9oc3JfZm9yd2FyZC5jPTQyND1zdGF0aWMgdm9pZCBoc3JfZGVsaXZlcl9tYXN0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNDQ0LVxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjQ0NTpzdGF0aWMgaW50IGhzcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy00NDYtXHRcdCAgICBzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz01NjA9c3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfZG8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNjIxLVx0XHR9IGVsc2Uge1xubmV0L2hzci9oc3JfZm9yd2FyZC5jOjYyMjpcdFx0XHRpZiAoIWhzcl94bWl0KHNrYiwgcG9ydCwgZnJhbWUpKVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTYyMy1cdFx0XHRcdGlmIChwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0EgfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDg5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIEhTUiBQYWNrZXQgRm9yd2FyZGluZyBQYXRoKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBIU1IgcGFja2V0IHRyYW5zbWlzc2lvbiBwcm9jZXNzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGBoc3JfeG1pdGAuIEkgc2VlIGl0JiMzOTtzIGRlY2xhcmVkIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBTdGF0aWMgbWVhbnMgaXQmIzM5O3MgbGltaXRlZCBpbiBzY29wZSwgbGlrZWx5IGludGVybmFsIHRvIGl0cyBjb21waWxhdGlvbiB1bml0LiBOb3csIGdpdmVuIHRoYXQgYGhzcl94bWl0YCBpcyBiZWluZyBjYWxsZWQgYnkgYGhzcl9mb3J3YXJkX2RvYCwgSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoZSBjYWxsaW5nIGZ1bmN0aW9uJiMzOTtzIHNjb3BlLiBJcyBgaHNyX2ZvcndhcmRfZG9gIGFsc28gc3RhdGljPyBJZiBzbywgdGhpcyBzdWdnZXN0cyBhIHRpZ2h0LCBsb2NhbGl6ZWQgaGFuZGxpbmcgb2YgcGFja2V0IGZvcndhcmRpbmcgd2l0aGluIGEgc3BlY2lmaWMgbW9kdWxlIG9yIGNvbXBvbmVudC4gVGhlIGxpbWl0ZWQgdmlzaWJpbGl0eSBpbXBsaWVzIGEgd2VsbC1kZWZpbmVkIGludGVyYWN0aW9uIHBvaW50LCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gYGhzcl9mb3J3YXJkX2RvYCYjMzk7cyBzdGF0aWMgbmF0dXJlIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBkZWJ1Z2dpbmcgYW5kIG1vZGlmaWNhdGlvbi4gSSYjMzk7bGwgY2hlY2sgaXRzIGRlY2xhcmF0aW9uIG5vdyB0byBjb25maXJtIG15IGh5cG90aGVzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hzcl9mb3J3YXJkX2RvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2hzci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hzci9oc3JfZm9yd2FyZC5jPTQ5Mj1ib29sIGhzcl9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNTU5LSAqL1xubmV0L2hzci9oc3JfZm9yd2FyZC5jOjU2MDpzdGF0aWMgdm9pZCBoc3JfZm9yd2FyZF9kbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTU2MS17XG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jPTc3NT12b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc4My1cdGhzcl9yZWdpc3Rlcl9mcmFtZV9pbihmcmFtZS5ub2RlX3NyYywgcG9ydCwgZnJhbWUuc2VxdWVuY2VfbnIpO1xubmV0L2hzci9oc3JfZm9yd2FyZC5jOjc4NDpcdGhzcl9mb3J3YXJkX2RvKFx1MDAyNmZyYW1lKTtcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03ODUtXHRyY3VfcmVhZF91bmxvY2soKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA0MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYGhzcl9mb3J3YXJkX3NrYmAgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgYGhzcl9mb3J3YXJkX3NrYmAgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhhdCBpdCYjMzk7cyAqbm90KiBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG1vcmUgY2xlYXJseS4gVGhpcyBtZWFucyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB0byBmaWd1cmUgb3V0IHdoeSBpdCYjMzk7cyBzdHJ1Y3R1cmVkIHRoaXMgd2F5LiBJIHdpbGwgc3RhcnQgYnkgY2FyZWZ1bGx5IGV4YW1pbmluZyB0aGUgY29kZSB0byBjaGVjayBleGFjdGx5IHdoYXQgaXQgZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2hzci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hzci9oc3JfZGV2aWNlLmM9MjI0PXN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMzUtXHRcdHNwaW5fbG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYzoyMzY6XHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMzctXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYz0yOTM9c3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jLTM2My1cbm5ldC9oc3IvaHNyX2RldmljZS5jOjM2NDpcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xubmV0L2hzci9oc3JfZGV2aWNlLmMtMzY1LVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jPTM2OT1zdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3Rlcixcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy00MDQtXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo0MDU6XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xubmV0L2hzci9oc3JfZGV2aWNlLmMtNDA2LVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz03MTc9c3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzc0LS8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6Nzc1OnZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NzYte1xuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuaC0xNS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuaDoxNjp2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpO1xubmV0L2hzci9oc3JfZm9yd2FyZC5oLTE3LXN0cnVjdCBza19idWZmICpwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuLS1cbm5ldC9oc3IvaHNyX3NsYXZlLmM9MjQ9c3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4tLVxubmV0L2hzci9oc3Jfc2xhdmUuYy04MC1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbm5ldC9oc3IvaHNyX3NsYXZlLmM6ODE6XHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xubmV0L2hzci9oc3Jfc2xhdmUuYy04Mi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xubmV0L2hzci9oc3Jfc2xhdmUuYy04My1cdH0gZWxzZSB7XG5uZXQvaHNyL2hzcl9zbGF2ZS5jOjg0Olx0XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcbm5ldC9oc3IvaHNyX3NsYXZlLmMtODUtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDU0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBgaHNyX2ZvcndhcmRfc2tiYCBpcyBhIHByZXR0eSBjZW50cmFsIGZ1bmN0aW9uIGhlcmUsIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBBbmQsIHllYWgsIGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAgYW5kIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAgYWxzbyBsb29rIGxpa2UgcHJvbWlzaW5nIGZvY2FsIHBvaW50cy4gVGhlc2UgZnVuY3Rpb25zIGFyZSBsaWtlbHkgaGFuZGxpbmcgdGhlIGNvcmUgZnJhbWUgbWFuaXB1bGF0aW9uLgoKTm93LCBJJiMzOTttIGdvaW5nIHRvIHNoaWZ0IGdlYXJzIHNsaWdodGx5LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBicm9hZGVyIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBCZXNpZGVzIHRoZSBvYnZpb3VzIGBDT05GSUdfSFNSYCwgYXJlIHRoZXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgcmVsYXRlZCBmZWF0dXJlcyB0aGF0IGhhdmUgdGhlaXIgb3duIGNvbmZpZyBvcHRpb25zPyBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2hzci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIElFQyA2MjQzOS0zIEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3lcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIEhTUlxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7SGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFx1MDAyNiBQUlApXCYjMzQ7XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIFRoaXMgZW5hYmxlcyBJRUMgNjI0MzkgZGVmaW5lZCBIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzc1xuICAxMDpcdFx0ICBSZWR1bmRhbmN5IChIU1IpIGFuZCBQYXJhbGxlbCBSZWR1bmRhbmN5IFByb3RvY29sIChQUlApLlxuICAxMTpcdFxuICAxMjpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB5b3VyIExpbnV4IGJveCB3aWxsIGJlIGFibGUgdG8gYWN0IGFzIGFcbiAgMTM6XHRcdCAgREFOSCAoXCYjMzQ7RG91Ymx5IGF0dGFjaGVkIG5vZGUgaW1wbGVtZW50aW5nIEhTUlwmIzM0Oykgb3IgREFOUCAoXCYjMzQ7RG91Ymx5XG4gIDE0Olx0XHQgIGF0dGFjaGVkIG5vZGUgaW1wbGVtZW50aW5nIFBSUFwmIzM0OykuIEZvciB0aGlzIHRvIHdvcmssIHlvdXIgTGludXggYm94XG4gIDE1Olx0XHQgIG5lZWRzIChhdCBsZWFzdCkgdHdvIHBoeXNpY2FsIEV0aGVybmV0IGludGVyZmFjZXMuXG4gIDE2Olx0XG4gIDE3Olx0XHQgIEZvciBEQU5ILCBpdCBtdXN0IGJlIGNvbm5lY3RlZCBhcyBhIG5vZGUgaW4gYSByaW5nIG5ldHdvcmsgdG9nZXRoZXJcbiAgMTg6XHRcdCAgd2l0aCBvdGhlciBIU1IgY2FwYWJsZSBub2Rlcy4gQWxsIEV0aGVybmV0IGZyYW1lcyBzZW50IG92ZXIgdGhlIEhTUlxuICAxOTpcdFx0ICBkZXZpY2Ugd2lsbCBiZSBzZW50IGluIGJvdGggZGlyZWN0aW9ucyBvbiB0aGUgcmluZyAob3ZlciBib3RoIHNsYXZlXG4gIDIwOlx0XHQgIHBvcnRzKSwgZ2l2aW5nIGEgcmVkdW5kYW50LCBpbnN0YW50IGZhaWwtb3ZlciBuZXR3b3JrLiBFYWNoIEhTUiBub2RlXG4gIDIxOlx0XHQgIGluIHRoZSByaW5nIGFjdHMgbGlrZSBhIGJyaWRnZSBmb3IgSFNSIGZyYW1lcywgYnV0IGZpbHRlcnMgZnJhbWVzXG4gIDIyOlx0XHQgIHRoYXQgaGF2ZSBiZWVuIGZvcndhcmRlZCBlYXJsaWVyLlxuICAyMzpcdFxuICAyNDpcdFx0ICBGb3IgREFOUCwgaXQgbXVzdCBiZSBjb25uZWN0ZWQgYXMgYSBub2RlIGNvbm5lY3RpbmcgdG8gdHdvXG4gIDI1Olx0XHQgIHNlcGFyYXRlIG5ldHdvcmtzIG92ZXIgdGhlIHR3byBzbGF2ZSBpbnRlcmZhY2VzLiBMaWtlIEhTUiwgRXRoZXJuZXRcbiAgMjY6XHRcdCAgZnJhbWVzIHNlbnQgb3ZlciB0aGUgUFJQIGRldmljZSB3aWxsIGJlIHNlbnQgdG8gYm90aCBuZXR3b3JrcyBnaXZpbmdcbiAgMjc6XHRcdCAgYSByZWR1bmRhbnQsIGluc3RhbnQgZmFpbC1vdmVyIG5ldHdvcmsuIFVubGlrZSBIU1IsIFBSUCBuZXR3b3Jrc1xuICAyODpcdFx0ICBjYW4gaGF2ZSBTaW5nbHkgQXR0YWNoZWQgTm9kZXMgKFNBTikgc3VjaCBhcyBQQywgcHJpbnRlciwgYnJpZGdlc1xuICAyOTpcdFx0ICBldGMgYW5kIHdpbGwgYmUgYWJsZSB0byBjb21tdW5pY2F0ZSB3aXRoIERBTlAgbm9kZXMuXG4gIDMwOlx0XG4gIDMxOlx0XHQgIFRoaXMgY29kZSBpcyBhIFwmIzM0O2Jlc3QgZWZmb3J0XCYjMzQ7IHRvIGNvbXBseSB3aXRoIHRoZSBIU1Igc3RhbmRhcmQgYXNcbiAgMzI6XHRcdCAgZGVzY3JpYmVkIGluIElFQyA2MjQzOS0zOjIwMTAgKEhTUnYwKSBhbmQgSUVDIDYyNDM5LTM6MjAxMiAoSFNSdjEpLFxuICAzMzpcdFx0ICBhbmQgUFJQIHN0YW5kYXJkIGRlc2NyaWJlZCBpbiBJRUMgNjI0MzktNDoyMDEyIChQUlApLCBidXQgbm9cbiAgMzQ6XHRcdCAgY29tcGxpYW5jeSB0ZXN0cyBoYXZlIGJlZW4gbWFkZS4gVXNlIGlwcm91dGUyIHRvIHNlbGVjdCB0aGUgcHJvdG9jb2xcbiAgMzU6XHRcdCAgeW91IHdvdWxkIGxpa2UgdG8gdXNlLlxuICAzNjpcdFxuICAzNzpcdFx0ICBZb3UgbmVlZCB0byBwZXJmb3JtIGFueSBhbmQgYWxsIG5lY2Vzc2FyeSB0ZXN0cyB5b3Vyc2VsZiBiZWZvcmVcbiAgMzg6XHRcdCAgcmVseWluZyBvbiB0aGlzIGNvZGUgaW4gYSBzYWZldHkgY3JpdGljYWwgc3lzdGVtIVxuICAzOTpcdFxuICA0MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA0MTpcdFxuICA0MjpcdGlmIEhTUlxuICA0MzpcdFxuICA0NDpcdGNvbmZpZyBQUlBfRFVQX0RJU0NBUkRfS1VOSVRfVEVTVFxuICA0NTpcdFx0dHJpc3RhdGUgXCYjMzQ7UFJQIGR1cGxpY2F0ZSBkaXNjYXJkIEtVbml0IHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNDY6XHRcdGRlcGVuZHMgb24gS1VOSVRcbiAgNDc6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDQ4Olx0XHRoZWxwXG4gIDQ5Olx0XHQgIENvdmVycyB0aGUgUFJQIGR1cGxpY2F0ZSBkaXNjYXJkIGFsZ29yaXRobS5cbiAgNTA6XHRcdCAgT25seSB1c2VmdWwgZm9yIGtlcm5lbCBkZXZzIHJ1bm5pbmcgS1VuaXQgdGVzdCBoYXJuZXNzIGFuZCBhcmUgbm90XG4gIDUxOlx0XHQgIGZvciBpbmNsdXNpb24gaW50byBhIHByb2R1Y3Rpb24gYnVpbGQuXG4gIDUyOlx0XG4gIDUzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwgcGxlYXNlIHJlZmVyXG4gIDU0Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0Ly5cbiAgNTU6XHRcbiAgNTY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNTc6XHRcbiAgNTg6XHRlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI0NQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UgaGF2ZSBoZXJlLgoKKipOYXZpZ2F0aW5nIERlcGVuZGVuY2llcyBpbiB0aGUgTmV0d29yayBTdGFjayoqCgpIbW0sIGBDT05GSUdfSFNSYCBkb2VzbiYjMzk7dCBzZWVtIHRvIGhhdmUgYW55IGV4cGxpY2l0IGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIHdpdGhpbiAqdGhpcyogc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlLiBUaGF0JiMzOTtzIGEgbGl0dGxlIHVudXN1YWwuIEl0JiMzOTtzIGluIHRoZSBgbmV0L2hzci9gIGRpcmVjdG9yeSB0aG91Z2gsIHdoaWNoIHVzdWFsbHkgaW1wbGllcyBzb21lIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBicm9hZGVyIG5ldHdvcmsgc3Vic3lzdGVtLiBMZXQgbWUgY2hlY2suLi4gQWgsIHJpZ2h0LCB0aGF0IHBvaW50cyB0byBgTkVUYC4KCk9rYXksIHNvIEkgc3VzcGVjdCBpdCAqaW1wbGljaXRseSogZGVwZW5kcyBvbiBgTkVUYC4gVG8gYmUgY2VydGFpbiwgSSBzaG91bGQgY2hlY2sgdGhlIGBuZXQvTWFrZWZpbGVgIHRvIHNlZSBob3cgdGhlIGBoc3JgIGRpcmVjdG9yeSBhbmQgaXRzIGFzc29jaWF0ZWQgc291cmNlIGZpbGVzIGFyZSBhY3R1YWxseSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgYnVpbGQgcHJvY2Vzcy4gVGhhdCBzaG91bGQgc2hvdyBhbnkgZGlyZWN0IG9yIGluZGlyZWN0IGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hzciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvTWFrZWZpbGU9Njc9b2JqLSQoQ09ORklHX05FVF9OU0gpXHRcdCYjNDM7PSBuc2gvXG5uZXQvTWFrZWZpbGU6Njg6b2JqLSQoQ09ORklHX0hTUilcdFx0JiM0Mzs9IGhzci9cbm5ldC9NYWtlZmlsZS02OS1vYmotJChDT05GSUdfTkVUX1NXSVRDSERFVilcdCYjNDM7PSBzd2l0Y2hkZXYvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTc4CgkJCQkJCQlvdXRwdXQ6IDcyCgkJCQkJCQl0aG91Z2h0czogMjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSFNSIFBhdGNoKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYENPTkZJR19IU1JgIGlzIHRoZSBvbmx5IGNvbmZpZyBvcHRpb24gSSBuZWVkIHRvIGJlIGNvbmNlcm5lZCB3aXRoIGhlcmUuIExldCYjMzk7cyBnbyBvdmVyIHRoZXNlIGNoYW5nZXMgYWdhaW4uIEl0IHNlZW1zIHdlIGhhdmUgYSBwYXRjaCB0aGF0JiMzOTtzIG1vZGlmeWluZyBgbmV0L2hzci9oc3JfZm9yd2FyZC5jYCwgZm9jdXNpbmcgb24gYSBzaGFyZWQtbXV0YXRpb24gaXNzdWUuIFRoZSBmaXggaW52b2x2ZXMgY2xvbmluZyB0aGUgc2tiIGJlZm9yZSBtb2RpZnlpbmcgaXQsIHdoaWNoIG1ha2VzIHNlbnNlIHRvIGVuc3VyZSBpc29sYXRpb24gYW5kIHByZXZlbnQgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMuIFRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEhTUiBsb2dpYy4KCkdpdmVuIHRoYXQgSFNSIGlzIGEgc29mdHdhcmUgbmV0d29yayBkZXZpY2UsIGl0IHNob3VsZCBiZSBlYXNpbHkgcmVhY2hhYmxlIGluIGEgUUVNVSBlbnZpcm9ubWVudCwgd2hpY2ggaXMgZ29vZCBmb3IgdGVzdGluZy4gVGhlIGluY2x1c2lvbiBvZiBhIHNlbGZ0ZXN0LCBgaHNyX3NoYXJlZF9tdXRhdGlvbi5zaGAsIGlzIGEgc29saWQgYWRkaXRpb24uIFRoZSBzY3JpcHQgdXNlcyBgaXAgbGluayBhZGRgIHRvIGNyZWF0ZSBhbiBIU1IgaW50ZXJmYWNlIHdpdGggdGhlIHR5cGljYWwgUFJQIGNvbmZpZ3VyYXRpb24sIHdoaWNoIHRlbGxzIG1lIHRoaXMgY2FuIGJlIGVmZmVjdGl2ZWx5IHRlc3RlZCBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQuIFNwZWNpZmljYWxseSBgcHJwMGAgYHNsYXZlMWAgYHNsYXZlMmAuIE5pY2UsIGdvb2QgdG8gc2VlIHRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgZGVmaW5pbmcgdGhlIHZpcnR1YWwgbmV0d29yayBkZXZpY2UmIzM5O3MgbmF0dXJlLgoKSSYjMzk7bGwgd2FudCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGFuZCBgaHNyX2ZvcndhcmRfc2tiYCB3aXRoaW4gdGhlIGNvZGUuIFRob3NlIGFyZSB0aGUga2V5IHN5bWJvbHMgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgbG9naWMgb2YgdGhlIGZpeC4KCkJlZm9yZSBJIGRpZyBpbnRvIHRoZSBkZXRhaWxzLCBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBuZXQvaHNyL2hzcl9mb3J3YXJkLmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBvdGhlciBwb2ludHMgb2YgcG90ZW50aWFsIGludGVyYWN0aW9uIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qXFxzJiM0MztcXCo/W2EtekEtWl9dW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oc3IvaHNyX2ZvcndhcmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9mb3J3YXJkLmM9NDQ1PXN0YXRpYyBpbnQgaHNyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy00ODMtXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NDg0OmJvb2wgcHJwX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTQ4NS17XG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTQ5MS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo0OTI6Ym9vbCBoc3JfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNDkzLXtcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9NjQ5PXN0YXRpYyB2b2lkIGhhbmRsZV9zdGRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNjcwLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjY3MTppbnQgaHNyX2ZpbGxfZnJhbWVfaW5mbyhfX2JlMTYgcHJvdG8sIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNjcyLVx0XHRcdHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTY5Ny1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo2OTg6aW50IHBycF9maWxsX2ZyYW1lX2luZm8oX19iZTE2IHByb3RvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTY5OS1cdFx0XHRzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz03MTc9c3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzc0LS8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6Nzc1OnZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NzYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc1OQoJCQkJCQkJb3V0cHV0OiAxMTEKCQkJCQkJCXRob3VnaHRzOiA0MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEhTUiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgSFNSIGFuZCBQUlAsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCB3YXkgdG8gYXBwcm9hY2ggZnV6emluZyBpdC4gVGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGZvcndhcmRpbmcgYW4gc2tiIGluIEhTUiBpcyBgaHNyX2ZvcndhcmRfc2tiYCwgc28gdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEga2V5IGZ1bmN0aW9uIHRvIGtlZXAgaW4gbWluZC4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIG1vZGlmeWluZyBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgIGFuZCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgIOKAkyB0aG9zZSBhcmUgY3J1Y2lhbCBiZWNhdXNlIHRoZXkmIzM5O3JlIGRpcmVjdGx5IGltcGFjdGVkLiBMZXQmIzM5O3MgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSYjMzk7dmUgZ290IHRoZSBuYW1lcyByaWdodDogYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYW5kIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAuIFl1cCwgYWxsIGdvb2QuCgpOb3csIGEgcXVpY2sgY2hlY2vigKYgSSBzYXcgYGhzcl94bWl0YCBtZW50aW9uZWQsIGJ1dCB0aGF0JiMzOTtzIHN0YXRpYywgc28gaXTigJlzIG5vdCBpZGVhbCBhcyBhIHRvcC1sZXZlbCBmb2N1cy4gSG93ZXZlciwgYGhzcl9mb3J3YXJkX3NrYmAgZG9lcyBjYWxsIGBoc3JfZm9yd2FyZF9kb2AsIHdoaWNoIGluIHR1cm4gY2FsbHMgYGhzcl94bWl0YCwgbWVhbmluZyBgaHNyX2ZvcndhcmRfc2tiYCBpcyBzdGlsbCBhIHJlbGV2YW50IGZvY2FsIHBvaW50IGFuZCBsaWtlbHkgbW9yZSByZWFjaGFibGUuCgpDaGVja2luZyBmb3IgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLCBpdCYjMzk7cyBqdXN0IGBDT05GSUdfSFNSYC4gU2ltcGxlIGVub3VnaC4KCkFscmlnaHQsIHdoYXQgZWxzZSBoYXZlIHdlIGdvdD8gVGhlIHBhdGNoIG1vZGlmaWVzIGBuZXQvaHNyL2hzcl9mb3J3YXJkLmNgIGFuZCBhZGRzIGEgdGVzdCBjYXNlLCBzbyBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGggZ29vZCB0ZXN0IGNvdmVyYWdlLCB3aGljaCBtYWtlcyBmdXp6aW5nIGl0IGV2ZW4gbW9yZSB2YWx1YWJsZS4gSXQgYWRkcmVzc2VzIGEgc2hhcmVkLW11dGF0aW9uIGlzc3VlIGJ5IGNsb25pbmcgdGhlIHNrYiBiZWZvcmUgbW9kaWZ5aW5nIGl0LCB3aGljaCBpcyB0aGUga2luZCBvZiB2dWxuZXJhYmlsaXR5IGZ1enppbmcgY2FuIHVuY292ZXIuIFRoaXMgY2hhbmdlIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4KClNvLCBoZXJlJiMzOTtzIG15IHBsYW46CgoqKkZvY3VzIFN5bWJvbHM6KioKCiogICBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgCiogICBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgCiogICBgaHNyX2ZvcndhcmRfc2tiYAoKKipFbmFibGUgQ29uZmlnczoqKgoKKiAgIGBDT05GSUdfSFNSYAoKKipSZWFzb25pbmc6KioKClRoZSBwYXRjaCBhZGRyZXNzZXMgYSBzaGFyZWQtbXV0YXRpb24gdnVsbmVyYWJpbGl0eSBieSBjbG9uaW5nIHRoZSBza2IgYmVmb3JlIG1vZGlmaWNhdGlvbiwgZGlyZWN0bHkgaW1wYWN0aW5nIEhTUiBhbmQgUFJQLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBjaGFuZ2Ugd2l0aCB0ZXN0IGNvdmVyYWdlLCBtYWtpbmcgaXQgaWRlYWwgZm9yIGZ1enppbmcuClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFNSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUmIzM0OywKICAgICYjMzQ7cHJwX2NyZWF0ZV90YWdnZWRfZnJhbWUmIzM0OywKICAgICYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc2hhcmVkLW11dGF0aW9uIGlzc3VlIGluIEhTUiBhbmQgUFJQIGJ5IGNsb25pbmcgdGhlIHNrYiBhbmQgbWFraW5nIGl0IHByaXZhdGUgYmVmb3JlIG1vZGlmeWluZyBpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEhTUiBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lJiMzNDssCiAgICAmIzM0O3BycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHNoYXJlZC1tdXRhdGlvbiBpc3N1ZSBpbiBIU1IgYW5kIFBSUCBieSBjbG9uaW5nIHRoZSBza2IgYW5kIG1ha2luZyBpdCBwcml2YXRlIGJlZm9yZSBtb2RpZnlpbmcgaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBIU1IgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NTU6NDcuMjk2OTA3NjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY1MDg4MjYxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIU1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZVwiLFxuICAgIFwicHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVcIixcbiAgICBcImhzcl9mb3J3YXJkX3NrYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgc2hhcmVkLW11dGF0aW9uIGlzc3VlIGluIEhTUiBhbmQgUFJQIGJ5IGNsb25pbmcgdGhlIHNrYiBhbmQgbWFraW5nIGl0IHByaXZhdGUgYmVmb3JlIG1vZGlmeWluZyBpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEhTUiBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjU1OjQ3LjI5NjkxMzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMzA3MDY3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNhMGFiMDU5Mzk1MTcwNGUyNWQyYjg5NThkZWQ4ZGNlY2QzNTlmMDVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMjkgMTg6NTU6NDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXFxuaW5kZXggMDc3NDk4MWE2NWMxNi4uOTc0YjU1ZjI0ODgyMSAxMDA2NDRcXG4tLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcXG4rKysgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcXG5AQCAtMzM2LDEyICszMzYsMjQgQEAgc3RydWN0IHNrX2J1ZmYgKmhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxuIFxcdGludCBtb3ZlbGVuO1xcbiBcXG4gXFx0aWYgKGZyYW1lLVxcdTAwM2Vza2JfaHNyKSB7XFxuLVxcdFxcdHN0cnVjdCBoc3JfZXRoaGRyICpoc3JfZXRoaGRyID1cXG4tXFx0XFx0XFx0KHN0cnVjdCBoc3JfZXRoaGRyICopc2tiX21hY19oZWFkZXIoZnJhbWUtXFx1MDAzZXNrYl9oc3IpO1xcbitcXHRcXHRzdHJ1Y3QgaHNyX2V0aGhkciAqaHNyX2V0aGhkcjtcXG4rXFxuK1xcdFxcdC8qIFRoZSBvcmlnaW5hbCBza2IgZGF0YSBtYXkgYmUgc2hhcmVkIHdpdGggYW5vdGhlciBlZ3Jlc3NcXG4rXFx0XFx0ICogY2xvbmUuIE1ha2UgdGhlIGNsb25lIGRhdGEgcHJpdmF0ZSBiZWZvcmUgdXBkYXRpbmcgdGhlXFxuK1xcdFxcdCAqIHBhdGggaWQgc28gdGhlIHVwZGF0ZSBjYW5ub3QgY29ycnVwdCB0aGUgb3RoZXIgY29weS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNrYiA9IHNrYl9jbG9uZShmcmFtZS1cXHUwMDNlc2tiX2hzciwgR0ZQX0FUT01JQyk7XFxuK1xcdFxcdGlmICghc2tiKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0XFx0aWYgKHNrYl9jb3coc2tiLCAwKSkge1xcbitcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdC8qIHNldCB0aGUgbGFuZSBpZCBwcm9wZXJseSAqL1xcbitcXHRcXHRoc3JfZXRoaGRyID0gKHN0cnVjdCBoc3JfZXRoaGRyICopc2tiX21hY19oZWFkZXIoc2tiKTtcXG4gXFx0XFx0aHNyX3NldF9wYXRoX2lkKGZyYW1lLCBoc3JfZXRoaGRyLCBwb3J0KTtcXG4tXFx0XFx0cmV0dXJuIHNrYl9jbG9uZShmcmFtZS1cXHUwMDNlc2tiX2hzciwgR0ZQX0FUT01JQyk7XFxuK1xcdFxcdHJldHVybiBza2I7XFxuIFxcdH0gZWxzZSBpZiAocG9ydC1cXHUwMDNlZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfSFNSX1RBR19JTlMpIHtcXG4gXFx0XFx0cmV0dXJuIHNrYl9jbG9uZShmcmFtZS1cXHUwMDNlc2tiX3N0ZCwgR0ZQX0FUT01JQyk7XFxuIFxcdH1cXG5AQCAtMzc3LDE1ICszODksMjggQEAgc3RydWN0IHNrX2J1ZmYgKnBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcbiBcXHRpZiAoZnJhbWUtXFx1MDAzZXNrYl9wcnApIHtcXG4tXFx0XFx0c3RydWN0IHBycF9yY3QgKnRyYWlsZXIgPSBza2JfZ2V0X1BSUF9yY3QoZnJhbWUtXFx1MDAzZXNrYl9wcnApO1xcbitcXHRcXHRzdHJ1Y3QgcHJwX3JjdCAqdHJhaWxlcjtcXG4gXFxuK1xcdFxcdC8qIFNhbWUgc2hhcmluZyBoYXphcmQgYXMgYWJvdmU6IHByaXZhdGl6ZSB0aGUgY2xvbmUgZGF0YVxcbitcXHRcXHQgKiBiZWZvcmUgdXBkYXRpbmcgdGhlIExBTiBpZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNrYiA9IHNrYl9jbG9uZShmcmFtZS1cXHUwMDNlc2tiX3BycCwgR0ZQX0FUT01JQyk7XFxuK1xcdFxcdGlmICghc2tiKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0XFx0aWYgKHNrYl9jb3coc2tiLCAwKSkge1xcbitcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHRyYWlsZXIgPSBza2JfZ2V0X1BSUF9yY3Qoc2tiKTtcXG4gXFx0XFx0aWYgKHRyYWlsZXIpIHtcXG4gXFx0XFx0XFx0cHJwX3NldF9sYW5faWQodHJhaWxlciwgcG9ydCk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdFdBUk5fT05DRSghdHJhaWxlciwgXFxcImVycm9yZWQgUFJQIHNrYlxcXCIpO1xcbitcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdFxcdH1cXG4tXFx0XFx0cmV0dXJuIHNrYl9jbG9uZShmcmFtZS1cXHUwMDNlc2tiX3BycCwgR0ZQX0FUT01JQyk7XFxuK1xcdFxcdHJldHVybiBza2I7XFxuIFxcdH0gZWxzZSBpZiAocG9ydC1cXHUwMDNlZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfSFNSX1RBR19JTlMpIHtcXG4gXFx0XFx0cmV0dXJuIHNrYl9jbG9uZShmcmFtZS1cXHUwMDNlc2tiX3N0ZCwgR0ZQX0FUT01JQyk7XFxuIFxcdH1cXG5AQCAtNDIwLDYgKzQ0NSwyMiBAQCBzdGF0aWMgdm9pZCBoc3JfZGVsaXZlcl9tYXN0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gc3RhdGljIGludCBoc3JfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXFxuIFxcdFxcdCAgICBzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxcbiB7XFxuK1xcdC8qIEFuIGludGVybGluay1ib3VuZCBza2IgZnJvbSBnZXRfdW50YWdnZWRfZnJhbWUoKSBjYW4gc3RpbGwgYWxpYXNcXG4rXFx0ICogYW5vdGhlciBsaXZlIGNvbnN1bWVyOiBmb3IgbWFzdGVyLW9yaWdpbmF0ZWQgZnJhbWVzIHRoZSBjbG9uZVxcbitcXHQgKiBzaGFyZXMgdGhlIG9yaWdpbmFsIFRYIHNrYiAod2hpY2ggdGFwcyBvciB0aGUgVFggcGF0aCBtYXkgc3RpbGxcXG4rXFx0ICogaG9sZCk7IGZvciByaW5nIGZyYW1lcyB0aGUgbWFzdGVyIGFsc28gY29uc3VtZXMgdGhlbSB3aGVuIHRoZXlcXG4rXFx0ICogYXJlIGRlc3RpbmVkIHRvIHRoZSBsb2NhbCBub2RlIHdpdGhvdXQgYmVpbmcgZXhjbHVzaXZlIHRvIGl0LlxcbitcXHQgKiBQcml2YXRpemUgYmVmb3JlIGFueSBhZGRyZXNzIG11dGF0aW9uLlxcbitcXHQgKi9cXG4rXFx0aWYgKHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKGZyYW1lLVxcdTAwM2Vwb3J0X3Jjdi1cXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSIHx8XFxuK1xcdCAgICAgKGZyYW1lLVxcdTAwM2Vpc19sb2NhbF9kZXN0IFxcdTAwMjZcXHUwMDI2ICFmcmFtZS1cXHUwMDNlaXNfbG9jYWxfZXhjbHVzaXZlKSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHNrYl9jb3coc2tiLCAwKSkge1xcbitcXHRcXHRmcmFtZS1cXHUwMDNlcG9ydF9yY3YtXFx1MDAzZWRldi1cXHUwMDNlc3RhdHMucnhfZHJvcHBlZCsrO1xcbitcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0cmV0dXJuIE5FVF9YTUlUX0RST1A7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChmcmFtZS1cXHUwMDNlcG9ydF9yY3YtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUikge1xcbiBcXHRcXHRoc3JfYWRkcl9zdWJzdF9kZXN0KGZyYW1lLVxcdTAwM2Vub2RlX3NyYywgc2tiLCBwb3J0KTtcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXFxuaW5kZXggMzFmYjkzMjZjZjUzMy4uYWVhZTdmM2Q2ZGQxNCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxcbkBAIC03LDYgKzcsNyBAQCBURVNUX1BST0dTIDo9IFxcXFxcXG4gXFx0aHNyX3JlZGJveC5zaCBcXFxcXFxuIFxcdGxpbmtfZmF1bHRzLnNoIFxcXFxcXG4gXFx0cHJwX3Bpbmcuc2ggXFxcXFxcbitcXHRoc3Jfc2hhcmVkX211dGF0aW9uLnNoIFxcXFxcXG4gIyBlbmQgb2YgVEVTVF9QUk9HU1xcbiBcXG4gVEVTVF9GSUxFUyArPSBoc3JfY29tbW9uLnNoXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3NoYXJlZF9tdXRhdGlvbi5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3NoYXJlZF9tdXRhdGlvbi5zaFxcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjcxMDM1NDFjZDc4Y1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9zaGFyZWRfbXV0YXRpb24uc2hcXG5AQCAtMCwwICsxLDIxMyBAQFxcbisjIS9iaW4vYmFzaFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNcXG4rIyBWZXJpZnkgdGhhdCBwZXItZWdyZXNzIG11dGF0aW9ucyBvZiBzaGFyZWQgc2tiIGRhdGEgYXJlIHByaXZhdGU6XFxuKyNcXG4rIyBGMiAocGF0aC9MQU4gSUQpOiBvbiBhbiBhZmZlY3RlZCBrZXJuZWwgdGhlIHNlY29uZCBzbGF2ZSdzIExBTi1JRCB3cml0ZVxcbisjIGxhbmRzIGluIHRoZSBmaXJzdCBzbGF2ZSdzIHN0aWxsLXF1ZXVlZCBjbG9uZTsgd2l0aCBhIG5ldGVtIGRlbGF5IG9uXFxuKyMgc2xhdmUgQSwgaW5qZWN0ZWQgZnJhbWVzIGxlYXZlIEEgY2FycnlpbmcgQidzIExBTiBJRC5cXG4rI1xcbisjIEYxIChSZWRCb3ggc291cmNlIE1BQyk6IG9uIGFuIGFmZmVjdGVkIGtlcm5lbCBhbiBIU1ItdGFnZ2VkIG11bHRpY2FzdFxcbisjIGZyYW1lIHJlY2VpdmVkIG9uIGEgUmVkQm94IHNsYXZlIGlzIGNsb25lZCBmb3IgbWFzdGVyIGFuZCBpbnRlcmxpbmssXFxuKyMgYW5kIHRoZSBpbnRlcmxpbmsncyBSZWRCb3gtTUFDIHJld3JpdGUgbGFuZHMgaW4gdGhlIG1hc3RlciBjbG9uZSdzXFxuKyMgYnVmZmVyLCBzbyB0aGUgbG9jYWwgc3RhY2sgcmVjZWl2ZXMgdGhlIFJlZEJveCBNQUMgaW5zdGVhZCBvZiB0aGVcXG4rIyBvcmlnaW5hdGluZyBub2RlJ3MgTUFDLlxcbitcXG4raXB2Nj1mYWxzZVxcbitcXG4rc291cmNlIC4vaHNyX2NvbW1vbi5zaFxcbitcXG4rRFVSPTVcXG4rXFxuK3JlcXVpcmUoKVxcbit7XFxuK1xcdGNvbW1hbmQgLXYgXFxcIiQxXFxcIiBcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjEgXFx1MDAyNlxcdTAwMjYgcmV0dXJuIDBcXG4rXFx0ZWNobyBcXFwiU0tJUDogJDEgbm90IGF2YWlsYWJsZVxcXCJcXG4rXFx0ZXhpdCAka3NmdF9za2lwXFxuK31cXG4rXFxuK3JlcXVpcmUgaXBcXG4rcmVxdWlyZSB0Y1xcbityZXF1aXJlIHB5dGhvbjNcXG4rXFxuK3RyYXAgY2xlYW51cF9hbGxfbnMgRVhJVFxcbitcXG4rIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEYyOiBMQU4tSUQgaXNvbGF0aW9uXFxuKyMgUFJQIERBTlAgKHByb3RvIDEpLCBBRl9QQUNLRVQgcHJlLXRhZ2dlZCBpbmplY3Rpb24sIG5ldGVtIG9uIHNsYXZlIEEuXFxuK3J1bl9mMigpXFxuK3tcXG4rXFx0c2V0dXBfbnMgbnMgMlxcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuICRrc2Z0X3NraXBcXG4rXFx0bnN4KCkgeyBpcCBuZXRucyBleGVjIFxcXCIkbnNcXFwiIFxcXCIkQFxcXCI7IH1cXG4rXFxuK1xcdCMgUHJvYmUgc2NoX25ldGVtIGluc2lkZSB0aGUgZGlzcG9zYWJsZSBuYW1lc3BhY2Ugb25seS5cXG4rXFx0aWYgISBuc3ggdGMgcWRpc2MgYWRkIGRldiBsbyByb290IG5ldGVtIGRlbGF5IDFtcyAyXFx1MDAzZS9kZXYvbnVsbDsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJTS0lQOiBzY2hfbmV0ZW0gbm90IGF2YWlsYWJsZVxcXCJcXG4rXFx0XFx0cmV0dXJuICRrc2Z0X3NraXBcXG4rXFx0ZmlcXG4rXFx0bnN4IHRjIHFkaXNjIGRlbCBkZXYgbG8gcm9vdCAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXG4rXFx0IyBDYXBhYmlsaXR5IHByb2JlcyBlbmQgaGVyZTsgc2V0dXAgb3IgcnVudGltZSBmYWlsdXJlIGJlbG93IGlzIEZBSUwuXFxuK1xcdG5zeCBpcCBsaW5rIGFkZCB2QSB0eXBlIHZldGggcGVlciBuYW1lIHZBcCB8fCB7IGVjaG8gXFxcIkZBSUw6IHZldGggQVxcXCI7IHJldHVybiAxOyB9XFxuK1xcdG5zeCBpcCBsaW5rIGFkZCB2QiB0eXBlIHZldGggcGVlciBuYW1lIHZCcCB8fCB7IGVjaG8gXFxcIkZBSUw6IHZldGggQlxcXCI7IHJldHVybiAxOyB9XFxuK1xcdGZvciBpIGluIHZBIHZCIHZBcCB2QnA7IGRvXFxuK1xcdFxcdG5zeCBpcCBsaW5rIHNldCBcXFwiJGlcXFwiIHVwIHx8IHsgZWNobyBcXFwiRkFJTDogJGkgdXBcXFwiOyByZXR1cm4gMTsgfVxcbitcXHRkb25lXFxuK1xcdG5zeCBpcCBsaW5rIGFkZCBuYW1lIHBycDAgdHlwZSBoc3Igc2xhdmUxIHZBIHNsYXZlMiB2QiBzdXBlcnZpc2lvbiA0NSBwcm90byAxIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdGlmIFsgJD8gLW5lIDAgXTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJTS0lQOiBIU1IvUFJQIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBrZXJuZWxcXFwiXFxuK1xcdFxcdHJldHVybiAka3NmdF9za2lwXFxuK1xcdGZpXFxuK1xcdG5zeCBpcCBsaW5rIHNldCBwcnAwIHVwIHx8IHsgZWNobyBcXFwiRkFJTDogcHJwMCB1cFxcXCI7IHJldHVybiAxOyB9XFxuK1xcdG5zeCB0YyBxZGlzYyBhZGQgZGV2IHZBIHJvb3QgbmV0ZW0gZGVsYXkgMjAwbXMgfHwgeyBlY2hvIFxcXCJGQUlMOiBuZXRlbVxcXCI7IHJldHVybiAxOyB9XFxuK1xcbitcXHRuc3ggcHl0aG9uMyAvZGV2L3N0ZGluIFxcXCIkRFVSXFxcIiBcXHUwMDNjXFx1MDAzYydQWUYyJ1xcbitpbXBvcnQgc29ja2V0LCBzdHJ1Y3QsIHNlbGVjdCwgc3lzLCB0aW1lXFxuK1xcbitkdXIgPSBpbnQoc3lzLmFyZ3ZbMV0pXFxuK2RlZiBsYW5pZChwa3QpOlxcbisgICAgaWYgbGVuKHBrdCkgXFx1MDAzYyAyMCBvciBwa3RbLTI6XSAhPSBiXFxcIlxcXFx4ODhcXFxceGZiXFxcIjpcXG4rICAgICAgICByZXR1cm4gTm9uZVxcbisgICAgcmV0dXJuIChwa3RbLTRdIFxcdTAwM2VcXHUwMDNlIDQpIFxcdTAwMjYgMHhGXFxuK1xcbitTUkMgPSBieXRlcy5mcm9taGV4KG9wZW4oXFxcIi9zeXMvY2xhc3MvbmV0L3BycDAvYWRkcmVzc1xcXCIpLnJlYWQoKS5yZXBsYWNlKFxcXCI6XFxcIiwgXFxcIlxcXCIpKVxcbitEU1QgPSBieXRlcy5mcm9taGV4KFxcXCIwMmFhYmJjY2RkMDFcXFwiKVxcbitQQVkgPSBieXRlcyhyYW5nZSg0NikpXFxuK3JjdDAgPSBzdHJ1Y3QucGFjayhcXFwiXFx1MDAzZUhcXFwiLCAwKSArIHN0cnVjdC5wYWNrKFxcXCJcXHUwMDNlSFxcXCIsIDUyIFxcdTAwMjYgMHgwRkZGKSArIGJcXFwiXFxcXHg4OFxcXFx4ZmJcXFwiXFxuK2ZyYW1lID0gRFNUICsgU1JDICsgYlxcXCJcXFxceDA4XFxcXHgwMFxcXCIgKyBQQVkgKyByY3QwXFxuK1xcbit0eCA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXKTsgdHguYmluZCgoXFxcInBycDBcXFwiLCAwKSlcXG4rc0EgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVyxcXG4rICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSlcXG4rc0EuYmluZCgoXFxcInZBcFxcXCIsIDApKVxcbitzQiA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXLFxcbisgICAgICAgIHNvY2tldC5udG9ocygweDAwMDMpKVxcbitzQi5iaW5kKChcXFwidkJwXFxcIiwgMCkpXFxuK3NBLnNldGJsb2NraW5nKEZhbHNlKTsgc0Iuc2V0YmxvY2tpbmcoRmFsc2UpXFxuK2ZvciBfIGluIHJhbmdlKDIwMCk6XFxuKyAgICB0eC5zZW5kKGZyYW1lKTsgdGltZS5zbGVlcCgwLjAwMSlcXG4rXFxuK2EsIGIgPSBbXSwgW11cXG4rZW5kID0gdGltZS50aW1lKCkgKyBkdXJcXG4rd2hpbGUgdGltZS50aW1lKCkgXFx1MDAzYyBlbmQ6XFxuKyAgICByLCBfLCBfID0gc2VsZWN0LnNlbGVjdChbc0EsIHNCXSwgW10sIFtdLCAwLjMpXFxuKyAgICBmb3IgcyBpbiByOlxcbisgICAgICAgIHBrdCA9IHMucmVjdig2NTUzNSlcXG4rICAgICAgICBpZiAocGt0Wzo2XSAhPSBEU1Qgb3IgcGt0WzY6MTJdICE9IFNSQyBvciBwa3RbMTI6MTRdICE9IGJcXFwiXFxcXHgwOFxcXFx4MDBcXFwiXFxuKyAgICAgICAgICAgICAgICBvciBwa3RbMTQ6MTQgKyBsZW4oUEFZKV0gIT0gUEFZKTpcXG4rICAgICAgICAgICAgY29udGludWVcXG4rICAgICAgICBsaWQgPSBsYW5pZChwa3QpXFxuKyAgICAgICAgaWYgbGlkIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICAoYSBpZiBzIGlzIHNBIGVsc2UgYikuYXBwZW5kKGxpZClcXG4rXFxuK3ByaW50KFxcXCJBLXNpZGUgY291bnQ9JWQgbGFuIGlkcz0lc1xcXCIgJSAobGVuKGEpLCBzb3J0ZWQoc2V0KGEpKSkpXFxuK3ByaW50KFxcXCJCLXNpZGUgY291bnQ9JWQgbGFuIGlkcz0lc1xcXCIgJSAobGVuKGIpLCBzb3J0ZWQoc2V0KGIpKSkpXFxuK2lmIGxlbihhKSBcXHUwMDNjIDE1MCBvciBsZW4oYikgXFx1MDAzYyAxNTA6XFxuKyAgICBwcmludChcXFwiRkFJTDogdG9vIGZldyBpbmplY3RlZCBmcmFtZXMgY2FwdHVyZWQgKEE9JWQgQj0lZCwgc2VudCAyMDApXFxcIiAlIChsZW4oYSksIGxlbihiKSkpXFxuKyAgICBzeXMuZXhpdCgxKVxcbitiYWRfYSA9IFt4IGZvciB4IGluIGEgaWYgKHggXFx1MDAyNiAxKSAhPSAwXVxcbitiYWRfYiA9IFt4IGZvciB4IGluIGIgaWYgKHggXFx1MDAyNiAxKSAhPSAxXVxcbitpZiBiYWRfYSBvciBiYWRfYjpcXG4rICAgIHByaW50KFxcXCJGQUlMOiBzaGFyZWQtbXV0YXRpb24gY29ycnVwdGlvbiAtIEE6ICVkLyVkIHdyb25nLWxhbiwgQjogJWQvJWQgd3JvbmctbGFuXFxcIlxcbisgICAgICAgICAgJSAobGVuKGJhZF9hKSwgbGVuKGEpLCBsZW4oYmFkX2IpLCBsZW4oYikpKVxcbisgICAgc3lzLmV4aXQoMSlcXG4rcHJpbnQoXFxcIlBBU1M6IHBlci1lZ3Jlc3MgTEFOIElEcyBpc29sYXRlZCAoQSBhbGwgYml0MD0wLCBCIGFsbCBiaXQwPTEpXFxcIilcXG4rc3lzLmV4aXQoMClcXG4rUFlGMlxcbit9XFxuK1xcbisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGMTogUmVkQm94IHNvdXJjZS1NQUMgcHJpdmFjeVxcbisjIEhTUiBSZWRCb3ggKHByb3RvIDApLCB0YWdnZWQgbXVsdGljYXN0IGZyb20gYSBzbGF2ZTogbWFzdGVyIG11c3Qga2VlcFxcbisjIHRoZSBub2RlIE1BQywgaW50ZXJsaW5rIG11c3QgY2FycnkgdGhlIFJlZEJveCBNQUMuXFxuK3J1bl9mMSgpXFxuK3tcXG4rXFx0c2V0dXBfbnMgbnMgMlxcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuICRrc2Z0X3NraXBcXG4rXFx0bnN4KCkgeyBpcCBuZXRucyBleGVjIFxcXCIkbnNcXFwiIFxcXCIkQFxcXCI7IH1cXG4rXFxuK1xcdG5zeCBpcCBsaW5rIGFkZCB2QSB0eXBlIHZldGggcGVlciBuYW1lIHZBcCB8fCB7IGVjaG8gXFxcIkZBSUw6IHZldGggQVxcXCI7IHJldHVybiAxOyB9XFxuK1xcdG5zeCBpcCBsaW5rIGFkZCB2QiB0eXBlIHZldGggcGVlciBuYW1lIHZCcCB8fCB7IGVjaG8gXFxcIkZBSUw6IHZldGggQlxcXCI7IHJldHVybiAxOyB9XFxuK1xcdG5zeCBpcCBsaW5rIGFkZCB2SSB0eXBlIHZldGggcGVlciBuYW1lIHZJcCB8fCB7IGVjaG8gXFxcIkZBSUw6IHZldGggSVxcXCI7IHJldHVybiAxOyB9XFxuK1xcdGZvciBpIGluIHZBIHZCIHZJIHZBcCB2QnAgdklwOyBkb1xcbitcXHRcXHRuc3ggaXAgbGluayBzZXQgXFxcIiRpXFxcIiB1cCB8fCB7IGVjaG8gXFxcIkZBSUw6ICRpIHVwXFxcIjsgcmV0dXJuIDE7IH1cXG4rXFx0ZG9uZVxcbitcXHRuc3ggaXAgbGluayBhZGQgbmFtZSBoc3IwIHR5cGUgaHNyIHNsYXZlMSB2QSBzbGF2ZTIgdkIgaW50ZXJsaW5rIHZJIFxcXFxcXG4rXFx0XFx0c3VwZXJ2aXNpb24gNDUgcHJvdG8gMCAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRpZiBbICQ/IC1uZSAwIF07IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiU0tJUDogSFNSIFJlZEJveCBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMga2VybmVsXFxcIlxcbitcXHRcXHRyZXR1cm4gJGtzZnRfc2tpcFxcbitcXHRmaVxcbitcXHRuc3ggaXAgbGluayBzZXQgaHNyMCB1cCB8fCB7IGVjaG8gXFxcIkZBSUw6IGhzcjAgdXBcXFwiOyByZXR1cm4gMTsgfVxcbitcXG4rXFx0bnN4IHB5dGhvbjMgL2Rldi9zdGRpbiBcXHUwMDNjXFx1MDAzYydQWUYxJ1xcbitpbXBvcnQgc29ja2V0LCBzZWxlY3QsIHN5cywgdGltZVxcbitcXG4rTk9ERSAgPSBieXRlcy5mcm9taGV4KFxcXCIwMjExMjIzMzQ0NTVcXFwiKVxcbitNQ0FTVCA9IGJ5dGVzLmZyb21oZXgoXFxcIjAxMDA1ZTAwMDAwMVxcXCIpXFxuK1JCICAgID0gYnl0ZXMuZnJvbWhleChvcGVuKFxcXCIvc3lzL2NsYXNzL25ldC92SS9hZGRyZXNzXFxcIikucmVhZCgpLnJlcGxhY2UoXFxcIjpcXFwiLCBcXFwiXFxcIikpXFxuK1BBWSAgID0gYnl0ZXMocmFuZ2UoNDYpKVxcbitcXG4rZGVmIGZyYW1lKHNlcSk6XFxuKyAgICB0YWcgPSAoKDEgXFx1MDAzY1xcdTAwM2MgMTIpIHwgbGVuKFBBWSkpLnRvX2J5dGVzKDIsIFxcXCJiaWdcXFwiKSArIHNlcS50b19ieXRlcygyLCBcXFwiYmlnXFxcIikgKyBiXFxcIlxcXFx4MDhcXFxceDAwXFxcIlxcbisgICAgcmV0dXJuIE1DQVNUICsgTk9ERSArIGJcXFwiXFxcXHg4OVxcXFx4MmZcXFwiICsgdGFnICsgUEFZXFxuK1xcbit0eCA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXKTsgdHguYmluZCgoXFxcInZBcFxcXCIsIDApKVxcbitzbSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXLFxcbisgICAgICAgIHNvY2tldC5udG9ocygweDAwMDMpKVxcbitzbS5iaW5kKChcXFwiaHNyMFxcXCIsIDApKVxcbitzaSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXLFxcbisgICAgICAgIHNvY2tldC5udG9ocygweDAwMDMpKVxcbitzaS5iaW5kKChcXFwidklwXFxcIiwgMCkpXFxuK3NtLnNldGJsb2NraW5nKEZhbHNlKTsgc2kuc2V0YmxvY2tpbmcoRmFsc2UpXFxuK1xcbitmb3IgaSBpbiByYW5nZSgzKTpcXG4rICAgIHR4LnNlbmQoZnJhbWUoaSArIDEpKTsgdGltZS5zbGVlcCgwLjA1KVxcbitcXG4rbV9zcmMgPSBpX3NyYyA9IE5vbmVcXG4rZW5kID0gdGltZS50aW1lKCkgKyA0XFxuK3doaWxlIHRpbWUudGltZSgpIFxcdTAwM2MgZW5kIGFuZCAobV9zcmMgaXMgTm9uZSBvciBpX3NyYyBpcyBOb25lKTpcXG4rICAgIHIsIF8sIF8gPSBzZWxlY3Quc2VsZWN0KFtzbSwgc2ldLCBbXSwgW10sIDAuMylcXG4rICAgIGZvciBzIGluIHI6XFxuKyAgICAgICAgcGt0ID0gcy5yZWN2KDY1NTM1KVxcbisgICAgICAgICMgZXhhY3QgZmxvdzogZHN0LCBwb3N0LXN0cmlwIEV0aGVyVHlwZSwgZXhhY3QgcGF5bG9hZCwgbWluIGxlbmd0aDtcXG4rICAgICAgICAjIGhfc291cmNlIGlzIHRoZSBhc3NlcnRlZCB2YWx1ZSBhbmQgbXVzdCBOT1QgYmUgZmlsdGVyZWQgb25cXG4rICAgICAgICBpZiAobGVuKHBrdCkgXFx1MDAzYyA2MCBvciBwa3RbOjZdICE9IE1DQVNUIG9yIHBrdFsxMjoxNF0gIT0gYlxcXCJcXFxceDA4XFxcXHgwMFxcXCJcXG4rICAgICAgICAgICAgICAgIG9yIHBrdFsxNDoxNCArIGxlbihQQVkpXSAhPSBQQVkpOlxcbisgICAgICAgICAgICBjb250aW51ZVxcbisgICAgICAgIGlmIHMgaXMgc20gYW5kIG1fc3JjIGlzIE5vbmU6XFxuKyAgICAgICAgICAgIG1fc3JjID0gcGt0WzY6MTJdXFxuKyAgICAgICAgZWxpZiBzIGlzIHNpIGFuZCBpX3NyYyBpcyBOb25lOlxcbisgICAgICAgICAgICBpX3NyYyA9IHBrdFs2OjEyXVxcbitcXG4rcHJpbnQoXFxcIm1hc3RlciBoX3NvdXJjZSAgICA9XFxcIiwgbV9zcmMuaGV4KCkgaWYgbV9zcmMgZWxzZSBOb25lKVxcbitwcmludChcXFwibm9kZSBNQUMgICAgICAgICAgID1cXFwiLCBOT0RFLmhleCgpKVxcbitwcmludChcXFwiaW50ZXJsaW5rIGhfc291cmNlID1cXFwiLCBpX3NyYy5oZXgoKSBpZiBpX3NyYyBlbHNlIE5vbmUpXFxuK3ByaW50KFxcXCJyZWRib3ggTUFDICAgICAgICAgPVxcXCIsIFJCLmhleCgpKVxcbitpZiBpX3NyYyAhPSBSQjpcXG4rICAgIHByaW50KFxcXCJGQUlMOiBpbnRlcmxpbmsgZGlkIG5vdCBjYXJyeSB0aGUgUmVkQm94IE1BQ1xcXCIpXFxuKyAgICBzeXMuZXhpdCgxKVxcbitpZiBtX3NyYyAhPSBOT0RFOlxcbisgICAgcHJpbnQoXFxcIkZBSUw6IG1hc3RlciByZWNlaXZlZCAlcyBpbnN0ZWFkIG9mIHRoZSBub2RlIE1BQyBcXFwiXFxuKyAgICAgICAgICBcXFwiKHNoYXJlZC1tdXRhdGlvbiBjb3JydXB0aW9uKVxcXCIgJSAobV9zcmMuaGV4KCkgaWYgbV9zcmMgZWxzZSBcXFwibm90aGluZ1xcXCIpKVxcbisgICAgc3lzLmV4aXQoMSlcXG4rcHJpbnQoXFxcIlBBU1M6IG1hc3RlciBrZXB0IG5vZGUgTUFDLCBpbnRlcmxpbmsga2VwdCBSZWRCb3ggTUFDXFxcIilcXG4rc3lzLmV4aXQoMClcXG4rUFlGMVxcbit9XFxuK1xcbityYz0wXFxuK1xcbitydW5fZjJcXG4rcmV0PSQ/XFxuK1sgXFxcIiRyZXRcXFwiIC1lcSBcXFwiJGtzZnRfc2tpcFxcXCIgXSBcXHUwMDI2XFx1MDAyNiBleGl0IFxcXCIka3NmdF9za2lwXFxcIlxcbitbIFxcXCIkcmV0XFxcIiAtZXEgMCBdIHx8IHJjPTFcXG4rXFxuK3J1bl9mMVxcbityZXQ9JD9cXG4rWyBcXFwiJHJldFxcXCIgLWVxIFxcXCIka3NmdF9za2lwXFxcIiBdIFxcdTAwMjZcXHUwMDI2IGV4aXQgXFxcIiRrc2Z0X3NraXBcXFwiXFxuK1sgXFxcIiRyZXRcXFwiIC1lcSAwIF0gfHwgcmM9MVxcbitcXG4raWYgWyAkcmMgLWVxIDAgXTsgdGhlblxcbitcXHRlY2hvIFxcXCJoc3Jfc2hhcmVkX211dGF0aW9uOiBwZXItZWdyZXNzIG11dGF0aW9uIGlzb2xhdGlvbiAoRjErRjIpIFsgT0sgXVxcXCJcXG4rZWxzZVxcbitcXHRlY2hvIFxcXCJoc3Jfc2hhcmVkX211dGF0aW9uOiBwZXItZWdyZXNzIG11dGF0aW9uIGlzb2xhdGlvbiBbIEZBSUwgXSByYz0kcmNcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rZmlcXG4rZXhpdCAkcmNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NTU6NDcuOTEwNzk5NTU5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDUwMzY5NzM2OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFNSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVcIixcbiAgICBcInBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lXCIsXG4gICAgXCJoc3JfZm9yd2FyZF9za2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHNoYXJlZC1tdXRhdGlvbiBpc3N1ZSBpbiBIU1IgYW5kIFBSUCBieSBjbG9uaW5nIHRoZSBza2IgYW5kIG1ha2luZyBpdCBwcml2YXRlIGJlZm9yZSBtb2RpZnlpbmcgaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBIU1IgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzYTBhYjA1OTM5NTE3MDRlMjVkMmI4OTU4ZGVkOGRjZWNkMzU5ZjA1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMTg6NTU6NDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbmluZGV4IDA3NzQ5ODFhNjVjMTYuLjk3NGI1NWYyNDg4MjEgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbisrKyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuQEAgLTMzNiwxMiArMzM2LDI0IEBAIHN0cnVjdCBza19idWZmICpoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuIFx0aW50IG1vdmVsZW47XG4gXG4gXHRpZiAoZnJhbWUtXHUwMDNlc2tiX2hzcikge1xuLVx0XHRzdHJ1Y3QgaHNyX2V0aGhkciAqaHNyX2V0aGhkciA9XG4tXHRcdFx0KHN0cnVjdCBoc3JfZXRoaGRyICopc2tiX21hY19oZWFkZXIoZnJhbWUtXHUwMDNlc2tiX2hzcik7XG4rXHRcdHN0cnVjdCBoc3JfZXRoaGRyICpoc3JfZXRoaGRyO1xuK1xuK1x0XHQvKiBUaGUgb3JpZ2luYWwgc2tiIGRhdGEgbWF5IGJlIHNoYXJlZCB3aXRoIGFub3RoZXIgZWdyZXNzXG4rXHRcdCAqIGNsb25lLiBNYWtlIHRoZSBjbG9uZSBkYXRhIHByaXZhdGUgYmVmb3JlIHVwZGF0aW5nIHRoZVxuK1x0XHQgKiBwYXRoIGlkIHNvIHRoZSB1cGRhdGUgY2Fubm90IGNvcnJ1cHQgdGhlIG90aGVyIGNvcHkuXG4rXHRcdCAqL1xuK1x0XHRza2IgPSBza2JfY2xvbmUoZnJhbWUtXHUwMDNlc2tiX2hzciwgR0ZQX0FUT01JQyk7XG4rXHRcdGlmICghc2tiKVxuK1x0XHRcdHJldHVybiBOVUxMO1xuK1x0XHRpZiAoc2tiX2Nvdyhza2IsIDApKSB7XG4rXHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4rXHRcdH1cbiBcbiBcdFx0Lyogc2V0IHRoZSBsYW5lIGlkIHByb3Blcmx5ICovXG4rXHRcdGhzcl9ldGhoZHIgPSAoc3RydWN0IGhzcl9ldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpO1xuIFx0XHRoc3Jfc2V0X3BhdGhfaWQoZnJhbWUsIGhzcl9ldGhoZHIsIHBvcnQpO1xuLVx0XHRyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLVx1MDAzZXNrYl9oc3IsIEdGUF9BVE9NSUMpO1xuK1x0XHRyZXR1cm4gc2tiO1xuIFx0fSBlbHNlIGlmIChwb3J0LVx1MDAzZWRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19IU1JfVEFHX0lOUykge1xuIFx0XHRyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLVx1MDAzZXNrYl9zdGQsIEdGUF9BVE9NSUMpO1xuIFx0fVxuQEAgLTM3NywxNSArMzg5LDI4IEBAIHN0cnVjdCBza19idWZmICpwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbiBcdGlmIChmcmFtZS1cdTAwM2Vza2JfcHJwKSB7XG4tXHRcdHN0cnVjdCBwcnBfcmN0ICp0cmFpbGVyID0gc2tiX2dldF9QUlBfcmN0KGZyYW1lLVx1MDAzZXNrYl9wcnApO1xuK1x0XHRzdHJ1Y3QgcHJwX3JjdCAqdHJhaWxlcjtcbiBcbitcdFx0LyogU2FtZSBzaGFyaW5nIGhhemFyZCBhcyBhYm92ZTogcHJpdmF0aXplIHRoZSBjbG9uZSBkYXRhXG4rXHRcdCAqIGJlZm9yZSB1cGRhdGluZyB0aGUgTEFOIGlkLlxuK1x0XHQgKi9cbitcdFx0c2tiID0gc2tiX2Nsb25lKGZyYW1lLVx1MDAzZXNrYl9wcnAsIEdGUF9BVE9NSUMpO1xuK1x0XHRpZiAoIXNrYilcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcdFx0aWYgKHNrYl9jb3coc2tiLCAwKSkge1xuK1x0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRcdHJldHVybiBOVUxMO1xuK1x0XHR9XG4rXG4rXHRcdHRyYWlsZXIgPSBza2JfZ2V0X1BSUF9yY3Qoc2tiKTtcbiBcdFx0aWYgKHRyYWlsZXIpIHtcbiBcdFx0XHRwcnBfc2V0X2xhbl9pZCh0cmFpbGVyLCBwb3J0KTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRXQVJOX09OQ0UoIXRyYWlsZXIsIFwiZXJyb3JlZCBQUlAgc2tiXCIpO1xuK1x0XHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRcdHJldHVybiBOVUxMO1xuIFx0XHR9XG4tXHRcdHJldHVybiBza2JfY2xvbmUoZnJhbWUtXHUwMDNlc2tiX3BycCwgR0ZQX0FUT01JQyk7XG4rXHRcdHJldHVybiBza2I7XG4gXHR9IGVsc2UgaWYgKHBvcnQtXHUwMDNlZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX0hTUl9UQUdfSU5TKSB7XG4gXHRcdHJldHVybiBza2JfY2xvbmUoZnJhbWUtXHUwMDNlc2tiX3N0ZCwgR0ZQX0FUT01JQyk7XG4gXHR9XG5AQCAtNDIwLDYgKzQ0NSwyMiBAQCBzdGF0aWMgdm9pZCBoc3JfZGVsaXZlcl9tYXN0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBzdGF0aWMgaW50IGhzcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcbiBcdFx0ICAgIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4ge1xuK1x0LyogQW4gaW50ZXJsaW5rLWJvdW5kIHNrYiBmcm9tIGdldF91bnRhZ2dlZF9mcmFtZSgpIGNhbiBzdGlsbCBhbGlhc1xuK1x0ICogYW5vdGhlciBsaXZlIGNvbnN1bWVyOiBmb3IgbWFzdGVyLW9yaWdpbmF0ZWQgZnJhbWVzIHRoZSBjbG9uZVxuK1x0ICogc2hhcmVzIHRoZSBvcmlnaW5hbCBUWCBza2IgKHdoaWNoIHRhcHMgb3IgdGhlIFRYIHBhdGggbWF5IHN0aWxsXG4rXHQgKiBob2xkKTsgZm9yIHJpbmcgZnJhbWVzIHRoZSBtYXN0ZXIgYWxzbyBjb25zdW1lcyB0aGVtIHdoZW4gdGhleVxuK1x0ICogYXJlIGRlc3RpbmVkIHRvIHRoZSBsb2NhbCBub2RlIHdpdGhvdXQgYmVpbmcgZXhjbHVzaXZlIHRvIGl0LlxuK1x0ICogUHJpdmF0aXplIGJlZm9yZSBhbnkgYWRkcmVzcyBtdXRhdGlvbi5cbitcdCAqL1xuK1x0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LIFx1MDAyNlx1MDAyNlxuK1x0ICAgIChmcmFtZS1cdTAwM2Vwb3J0X3Jjdi1cdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIgfHxcbitcdCAgICAgKGZyYW1lLVx1MDAzZWlzX2xvY2FsX2Rlc3QgXHUwMDI2XHUwMDI2ICFmcmFtZS1cdTAwM2Vpc19sb2NhbF9leGNsdXNpdmUpKSBcdTAwMjZcdTAwMjZcbitcdCAgICBza2JfY293KHNrYiwgMCkpIHtcbitcdFx0ZnJhbWUtXHUwMDNlcG9ydF9yY3YtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQrKztcbitcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdHJldHVybiBORVRfWE1JVF9EUk9QO1xuK1x0fVxuK1xuIFx0aWYgKGZyYW1lLVx1MDAzZXBvcnRfcmN2LVx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUikge1xuIFx0XHRoc3JfYWRkcl9zdWJzdF9kZXN0KGZyYW1lLVx1MDAzZW5vZGVfc3JjLCBza2IsIHBvcnQpO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5pbmRleCAzMWZiOTMyNmNmNTMzLi5hZWFlN2YzZDZkZDE0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuQEAgLTcsNiArNyw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdGhzcl9yZWRib3guc2ggXFxcbiBcdGxpbmtfZmF1bHRzLnNoIFxcXG4gXHRwcnBfcGluZy5zaCBcXFxuK1x0aHNyX3NoYXJlZF9tdXRhdGlvbi5zaCBcXFxuICMgZW5kIG9mIFRFU1RfUFJPR1NcbiBcbiBURVNUX0ZJTEVTICs9IGhzcl9jb21tb24uc2hcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9zaGFyZWRfbXV0YXRpb24uc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9zaGFyZWRfbXV0YXRpb24uc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yNzEwMzU0MWNkNzhjXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9zaGFyZWRfbXV0YXRpb24uc2hcbkBAIC0wLDAgKzEsMjEzIEBAXG4rIyEvYmluL2Jhc2hcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI1xuKyMgVmVyaWZ5IHRoYXQgcGVyLWVncmVzcyBtdXRhdGlvbnMgb2Ygc2hhcmVkIHNrYiBkYXRhIGFyZSBwcml2YXRlOlxuKyNcbisjIEYyIChwYXRoL0xBTiBJRCk6IG9uIGFuIGFmZmVjdGVkIGtlcm5lbCB0aGUgc2Vjb25kIHNsYXZlJ3MgTEFOLUlEIHdyaXRlXG4rIyBsYW5kcyBpbiB0aGUgZmlyc3Qgc2xhdmUncyBzdGlsbC1xdWV1ZWQgY2xvbmU7IHdpdGggYSBuZXRlbSBkZWxheSBvblxuKyMgc2xhdmUgQSwgaW5qZWN0ZWQgZnJhbWVzIGxlYXZlIEEgY2FycnlpbmcgQidzIExBTiBJRC5cbisjXG4rIyBGMSAoUmVkQm94IHNvdXJjZSBNQUMpOiBvbiBhbiBhZmZlY3RlZCBrZXJuZWwgYW4gSFNSLXRhZ2dlZCBtdWx0aWNhc3RcbisjIGZyYW1lIHJlY2VpdmVkIG9uIGEgUmVkQm94IHNsYXZlIGlzIGNsb25lZCBmb3IgbWFzdGVyIGFuZCBpbnRlcmxpbmssXG4rIyBhbmQgdGhlIGludGVybGluaydzIFJlZEJveC1NQUMgcmV3cml0ZSBsYW5kcyBpbiB0aGUgbWFzdGVyIGNsb25lJ3NcbisjIGJ1ZmZlciwgc28gdGhlIGxvY2FsIHN0YWNrIHJlY2VpdmVzIHRoZSBSZWRCb3ggTUFDIGluc3RlYWQgb2YgdGhlXG4rIyBvcmlnaW5hdGluZyBub2RlJ3MgTUFDLlxuK1xuK2lwdjY9ZmFsc2Vcbitcbitzb3VyY2UgLi9oc3JfY29tbW9uLnNoXG4rXG4rRFVSPTVcbitcbityZXF1aXJlKClcbit7XG4rXHRjb21tYW5kIC12IFwiJDFcIiBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XHUwMDI2IHJldHVybiAwXG4rXHRlY2hvIFwiU0tJUDogJDEgbm90IGF2YWlsYWJsZVwiXG4rXHRleGl0ICRrc2Z0X3NraXBcbit9XG4rXG4rcmVxdWlyZSBpcFxuK3JlcXVpcmUgdGNcbityZXF1aXJlIHB5dGhvbjNcbitcbit0cmFwIGNsZWFudXBfYWxsX25zIEVYSVRcbitcbisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRjI6IExBTi1JRCBpc29sYXRpb25cbisjIFBSUCBEQU5QIChwcm90byAxKSwgQUZfUEFDS0VUIHByZS10YWdnZWQgaW5qZWN0aW9uLCBuZXRlbSBvbiBzbGF2ZSBBLlxuK3J1bl9mMigpXG4re1xuK1x0c2V0dXBfbnMgbnMgMlx1MDAzZS9kZXYvbnVsbCB8fCByZXR1cm4gJGtzZnRfc2tpcFxuK1x0bnN4KCkgeyBpcCBuZXRucyBleGVjIFwiJG5zXCIgXCIkQFwiOyB9XG4rXG4rXHQjIFByb2JlIHNjaF9uZXRlbSBpbnNpZGUgdGhlIGRpc3Bvc2FibGUgbmFtZXNwYWNlIG9ubHkuXG4rXHRpZiAhIG5zeCB0YyBxZGlzYyBhZGQgZGV2IGxvIHJvb3QgbmV0ZW0gZGVsYXkgMW1zIDJcdTAwM2UvZGV2L251bGw7IHRoZW5cbitcdFx0ZWNobyBcIlNLSVA6IHNjaF9uZXRlbSBub3QgYXZhaWxhYmxlXCJcbitcdFx0cmV0dXJuICRrc2Z0X3NraXBcbitcdGZpXG4rXHRuc3ggdGMgcWRpc2MgZGVsIGRldiBsbyByb290IDJcdTAwM2UvZGV2L251bGxcbitcbitcdCMgQ2FwYWJpbGl0eSBwcm9iZXMgZW5kIGhlcmU7IHNldHVwIG9yIHJ1bnRpbWUgZmFpbHVyZSBiZWxvdyBpcyBGQUlMLlxuK1x0bnN4IGlwIGxpbmsgYWRkIHZBIHR5cGUgdmV0aCBwZWVyIG5hbWUgdkFwIHx8IHsgZWNobyBcIkZBSUw6IHZldGggQVwiOyByZXR1cm4gMTsgfVxuK1x0bnN4IGlwIGxpbmsgYWRkIHZCIHR5cGUgdmV0aCBwZWVyIG5hbWUgdkJwIHx8IHsgZWNobyBcIkZBSUw6IHZldGggQlwiOyByZXR1cm4gMTsgfVxuK1x0Zm9yIGkgaW4gdkEgdkIgdkFwIHZCcDsgZG9cbitcdFx0bnN4IGlwIGxpbmsgc2V0IFwiJGlcIiB1cCB8fCB7IGVjaG8gXCJGQUlMOiAkaSB1cFwiOyByZXR1cm4gMTsgfVxuK1x0ZG9uZVxuK1x0bnN4IGlwIGxpbmsgYWRkIG5hbWUgcHJwMCB0eXBlIGhzciBzbGF2ZTEgdkEgc2xhdmUyIHZCIHN1cGVydmlzaW9uIDQ1IHByb3RvIDEgMlx1MDAzZS9kZXYvbnVsbFxuK1x0aWYgWyAkPyAtbmUgMCBdOyB0aGVuXG4rXHRcdGVjaG8gXCJTS0lQOiBIU1IvUFJQIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBrZXJuZWxcIlxuK1x0XHRyZXR1cm4gJGtzZnRfc2tpcFxuK1x0ZmlcbitcdG5zeCBpcCBsaW5rIHNldCBwcnAwIHVwIHx8IHsgZWNobyBcIkZBSUw6IHBycDAgdXBcIjsgcmV0dXJuIDE7IH1cbitcdG5zeCB0YyBxZGlzYyBhZGQgZGV2IHZBIHJvb3QgbmV0ZW0gZGVsYXkgMjAwbXMgfHwgeyBlY2hvIFwiRkFJTDogbmV0ZW1cIjsgcmV0dXJuIDE7IH1cbitcbitcdG5zeCBweXRob24zIC9kZXYvc3RkaW4gXCIkRFVSXCIgXHUwMDNjXHUwMDNjJ1BZRjInXG4raW1wb3J0IHNvY2tldCwgc3RydWN0LCBzZWxlY3QsIHN5cywgdGltZVxuK1xuK2R1ciA9IGludChzeXMuYXJndlsxXSlcbitkZWYgbGFuaWQocGt0KTpcbisgICAgaWYgbGVuKHBrdCkgXHUwMDNjIDIwIG9yIHBrdFstMjpdICE9IGJcIlxceDg4XFx4ZmJcIjpcbisgICAgICAgIHJldHVybiBOb25lXG4rICAgIHJldHVybiAocGt0Wy00XSBcdTAwM2VcdTAwM2UgNCkgXHUwMDI2IDB4RlxuK1xuK1NSQyA9IGJ5dGVzLmZyb21oZXgob3BlbihcIi9zeXMvY2xhc3MvbmV0L3BycDAvYWRkcmVzc1wiKS5yZWFkKCkucmVwbGFjZShcIjpcIiwgXCJcIikpXG4rRFNUID0gYnl0ZXMuZnJvbWhleChcIjAyYWFiYmNjZGQwMVwiKVxuK1BBWSA9IGJ5dGVzKHJhbmdlKDQ2KSlcbityY3QwID0gc3RydWN0LnBhY2soXCJcdTAwM2VIXCIsIDApICsgc3RydWN0LnBhY2soXCJcdTAwM2VIXCIsIDUyIFx1MDAyNiAweDBGRkYpICsgYlwiXFx4ODhcXHhmYlwiXG4rZnJhbWUgPSBEU1QgKyBTUkMgKyBiXCJcXHgwOFxceDAwXCIgKyBQQVkgKyByY3QwXG4rXG4rdHggPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVyk7IHR4LmJpbmQoKFwicHJwMFwiLCAwKSlcbitzQSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXLFxuKyAgICAgICAgc29ja2V0Lm50b2hzKDB4MDAwMykpXG4rc0EuYmluZCgoXCJ2QXBcIiwgMCkpXG4rc0IgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVyxcbisgICAgICAgIHNvY2tldC5udG9ocygweDAwMDMpKVxuK3NCLmJpbmQoKFwidkJwXCIsIDApKVxuK3NBLnNldGJsb2NraW5nKEZhbHNlKTsgc0Iuc2V0YmxvY2tpbmcoRmFsc2UpXG4rZm9yIF8gaW4gcmFuZ2UoMjAwKTpcbisgICAgdHguc2VuZChmcmFtZSk7IHRpbWUuc2xlZXAoMC4wMDEpXG4rXG4rYSwgYiA9IFtdLCBbXVxuK2VuZCA9IHRpbWUudGltZSgpICsgZHVyXG4rd2hpbGUgdGltZS50aW1lKCkgXHUwMDNjIGVuZDpcbisgICAgciwgXywgXyA9IHNlbGVjdC5zZWxlY3QoW3NBLCBzQl0sIFtdLCBbXSwgMC4zKVxuKyAgICBmb3IgcyBpbiByOlxuKyAgICAgICAgcGt0ID0gcy5yZWN2KDY1NTM1KVxuKyAgICAgICAgaWYgKHBrdFs6Nl0gIT0gRFNUIG9yIHBrdFs2OjEyXSAhPSBTUkMgb3IgcGt0WzEyOjE0XSAhPSBiXCJcXHgwOFxceDAwXCJcbisgICAgICAgICAgICAgICAgb3IgcGt0WzE0OjE0ICsgbGVuKFBBWSldICE9IFBBWSk6XG4rICAgICAgICAgICAgY29udGludWVcbisgICAgICAgIGxpZCA9IGxhbmlkKHBrdClcbisgICAgICAgIGlmIGxpZCBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICAoYSBpZiBzIGlzIHNBIGVsc2UgYikuYXBwZW5kKGxpZClcbitcbitwcmludChcIkEtc2lkZSBjb3VudD0lZCBsYW4gaWRzPSVzXCIgJSAobGVuKGEpLCBzb3J0ZWQoc2V0KGEpKSkpXG4rcHJpbnQoXCJCLXNpZGUgY291bnQ9JWQgbGFuIGlkcz0lc1wiICUgKGxlbihiKSwgc29ydGVkKHNldChiKSkpKVxuK2lmIGxlbihhKSBcdTAwM2MgMTUwIG9yIGxlbihiKSBcdTAwM2MgMTUwOlxuKyAgICBwcmludChcIkZBSUw6IHRvbyBmZXcgaW5qZWN0ZWQgZnJhbWVzIGNhcHR1cmVkIChBPSVkIEI9JWQsIHNlbnQgMjAwKVwiICUgKGxlbihhKSwgbGVuKGIpKSlcbisgICAgc3lzLmV4aXQoMSlcbitiYWRfYSA9IFt4IGZvciB4IGluIGEgaWYgKHggXHUwMDI2IDEpICE9IDBdXG4rYmFkX2IgPSBbeCBmb3IgeCBpbiBiIGlmICh4IFx1MDAyNiAxKSAhPSAxXVxuK2lmIGJhZF9hIG9yIGJhZF9iOlxuKyAgICBwcmludChcIkZBSUw6IHNoYXJlZC1tdXRhdGlvbiBjb3JydXB0aW9uIC0gQTogJWQvJWQgd3JvbmctbGFuLCBCOiAlZC8lZCB3cm9uZy1sYW5cIlxuKyAgICAgICAgICAlIChsZW4oYmFkX2EpLCBsZW4oYSksIGxlbihiYWRfYiksIGxlbihiKSkpXG4rICAgIHN5cy5leGl0KDEpXG4rcHJpbnQoXCJQQVNTOiBwZXItZWdyZXNzIExBTiBJRHMgaXNvbGF0ZWQgKEEgYWxsIGJpdDA9MCwgQiBhbGwgYml0MD0xKVwiKVxuK3N5cy5leGl0KDApXG4rUFlGMlxuK31cbitcbisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGMTogUmVkQm94IHNvdXJjZS1NQUMgcHJpdmFjeVxuKyMgSFNSIFJlZEJveCAocHJvdG8gMCksIHRhZ2dlZCBtdWx0aWNhc3QgZnJvbSBhIHNsYXZlOiBtYXN0ZXIgbXVzdCBrZWVwXG4rIyB0aGUgbm9kZSBNQUMsIGludGVybGluayBtdXN0IGNhcnJ5IHRoZSBSZWRCb3ggTUFDLlxuK3J1bl9mMSgpXG4re1xuK1x0c2V0dXBfbnMgbnMgMlx1MDAzZS9kZXYvbnVsbCB8fCByZXR1cm4gJGtzZnRfc2tpcFxuK1x0bnN4KCkgeyBpcCBuZXRucyBleGVjIFwiJG5zXCIgXCIkQFwiOyB9XG4rXG4rXHRuc3ggaXAgbGluayBhZGQgdkEgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2QXAgfHwgeyBlY2hvIFwiRkFJTDogdmV0aCBBXCI7IHJldHVybiAxOyB9XG4rXHRuc3ggaXAgbGluayBhZGQgdkIgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2QnAgfHwgeyBlY2hvIFwiRkFJTDogdmV0aCBCXCI7IHJldHVybiAxOyB9XG4rXHRuc3ggaXAgbGluayBhZGQgdkkgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2SXAgfHwgeyBlY2hvIFwiRkFJTDogdmV0aCBJXCI7IHJldHVybiAxOyB9XG4rXHRmb3IgaSBpbiB2QSB2QiB2SSB2QXAgdkJwIHZJcDsgZG9cbitcdFx0bnN4IGlwIGxpbmsgc2V0IFwiJGlcIiB1cCB8fCB7IGVjaG8gXCJGQUlMOiAkaSB1cFwiOyByZXR1cm4gMTsgfVxuK1x0ZG9uZVxuK1x0bnN4IGlwIGxpbmsgYWRkIG5hbWUgaHNyMCB0eXBlIGhzciBzbGF2ZTEgdkEgc2xhdmUyIHZCIGludGVybGluayB2SSBcXFxuK1x0XHRzdXBlcnZpc2lvbiA0NSBwcm90byAwIDJcdTAwM2UvZGV2L251bGxcbitcdGlmIFsgJD8gLW5lIDAgXTsgdGhlblxuK1x0XHRlY2hvIFwiU0tJUDogSFNSIFJlZEJveCBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMga2VybmVsXCJcbitcdFx0cmV0dXJuICRrc2Z0X3NraXBcbitcdGZpXG4rXHRuc3ggaXAgbGluayBzZXQgaHNyMCB1cCB8fCB7IGVjaG8gXCJGQUlMOiBoc3IwIHVwXCI7IHJldHVybiAxOyB9XG4rXG4rXHRuc3ggcHl0aG9uMyAvZGV2L3N0ZGluIFx1MDAzY1x1MDAzYydQWUYxJ1xuK2ltcG9ydCBzb2NrZXQsIHNlbGVjdCwgc3lzLCB0aW1lXG4rXG4rTk9ERSAgPSBieXRlcy5mcm9taGV4KFwiMDIxMTIyMzM0NDU1XCIpXG4rTUNBU1QgPSBieXRlcy5mcm9taGV4KFwiMDEwMDVlMDAwMDAxXCIpXG4rUkIgICAgPSBieXRlcy5mcm9taGV4KG9wZW4oXCIvc3lzL2NsYXNzL25ldC92SS9hZGRyZXNzXCIpLnJlYWQoKS5yZXBsYWNlKFwiOlwiLCBcIlwiKSlcbitQQVkgICA9IGJ5dGVzKHJhbmdlKDQ2KSlcbitcbitkZWYgZnJhbWUoc2VxKTpcbisgICAgdGFnID0gKCgxIFx1MDAzY1x1MDAzYyAxMikgfCBsZW4oUEFZKSkudG9fYnl0ZXMoMiwgXCJiaWdcIikgKyBzZXEudG9fYnl0ZXMoMiwgXCJiaWdcIikgKyBiXCJcXHgwOFxceDAwXCJcbisgICAgcmV0dXJuIE1DQVNUICsgTk9ERSArIGJcIlxceDg5XFx4MmZcIiArIHRhZyArIFBBWVxuK1xuK3R4ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcpOyB0eC5iaW5kKChcInZBcFwiLCAwKSlcbitzbSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXLFxuKyAgICAgICAgc29ja2V0Lm50b2hzKDB4MDAwMykpXG4rc20uYmluZCgoXCJoc3IwXCIsIDApKVxuK3NpID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcsXG4rICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSlcbitzaS5iaW5kKChcInZJcFwiLCAwKSlcbitzbS5zZXRibG9ja2luZyhGYWxzZSk7IHNpLnNldGJsb2NraW5nKEZhbHNlKVxuK1xuK2ZvciBpIGluIHJhbmdlKDMpOlxuKyAgICB0eC5zZW5kKGZyYW1lKGkgKyAxKSk7IHRpbWUuc2xlZXAoMC4wNSlcbitcbittX3NyYyA9IGlfc3JjID0gTm9uZVxuK2VuZCA9IHRpbWUudGltZSgpICsgNFxuK3doaWxlIHRpbWUudGltZSgpIFx1MDAzYyBlbmQgYW5kIChtX3NyYyBpcyBOb25lIG9yIGlfc3JjIGlzIE5vbmUpOlxuKyAgICByLCBfLCBfID0gc2VsZWN0LnNlbGVjdChbc20sIHNpXSwgW10sIFtdLCAwLjMpXG4rICAgIGZvciBzIGluIHI6XG4rICAgICAgICBwa3QgPSBzLnJlY3YoNjU1MzUpXG4rICAgICAgICAjIGV4YWN0IGZsb3c6IGRzdCwgcG9zdC1zdHJpcCBFdGhlclR5cGUsIGV4YWN0IHBheWxvYWQsIG1pbiBsZW5ndGg7XG4rICAgICAgICAjIGhfc291cmNlIGlzIHRoZSBhc3NlcnRlZCB2YWx1ZSBhbmQgbXVzdCBOT1QgYmUgZmlsdGVyZWQgb25cbisgICAgICAgIGlmIChsZW4ocGt0KSBcdTAwM2MgNjAgb3IgcGt0Wzo2XSAhPSBNQ0FTVCBvciBwa3RbMTI6MTRdICE9IGJcIlxceDA4XFx4MDBcIlxuKyAgICAgICAgICAgICAgICBvciBwa3RbMTQ6MTQgKyBsZW4oUEFZKV0gIT0gUEFZKTpcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICAgICAgaWYgcyBpcyBzbSBhbmQgbV9zcmMgaXMgTm9uZTpcbisgICAgICAgICAgICBtX3NyYyA9IHBrdFs2OjEyXVxuKyAgICAgICAgZWxpZiBzIGlzIHNpIGFuZCBpX3NyYyBpcyBOb25lOlxuKyAgICAgICAgICAgIGlfc3JjID0gcGt0WzY6MTJdXG4rXG4rcHJpbnQoXCJtYXN0ZXIgaF9zb3VyY2UgICAgPVwiLCBtX3NyYy5oZXgoKSBpZiBtX3NyYyBlbHNlIE5vbmUpXG4rcHJpbnQoXCJub2RlIE1BQyAgICAgICAgICAgPVwiLCBOT0RFLmhleCgpKVxuK3ByaW50KFwiaW50ZXJsaW5rIGhfc291cmNlID1cIiwgaV9zcmMuaGV4KCkgaWYgaV9zcmMgZWxzZSBOb25lKVxuK3ByaW50KFwicmVkYm94IE1BQyAgICAgICAgID1cIiwgUkIuaGV4KCkpXG4raWYgaV9zcmMgIT0gUkI6XG4rICAgIHByaW50KFwiRkFJTDogaW50ZXJsaW5rIGRpZCBub3QgY2FycnkgdGhlIFJlZEJveCBNQUNcIilcbisgICAgc3lzLmV4aXQoMSlcbitpZiBtX3NyYyAhPSBOT0RFOlxuKyAgICBwcmludChcIkZBSUw6IG1hc3RlciByZWNlaXZlZCAlcyBpbnN0ZWFkIG9mIHRoZSBub2RlIE1BQyBcIlxuKyAgICAgICAgICBcIihzaGFyZWQtbXV0YXRpb24gY29ycnVwdGlvbilcIiAlIChtX3NyYy5oZXgoKSBpZiBtX3NyYyBlbHNlIFwibm90aGluZ1wiKSlcbisgICAgc3lzLmV4aXQoMSlcbitwcmludChcIlBBU1M6IG1hc3RlciBrZXB0IG5vZGUgTUFDLCBpbnRlcmxpbmsga2VwdCBSZWRCb3ggTUFDXCIpXG4rc3lzLmV4aXQoMClcbitQWUYxXG4rfVxuK1xuK3JjPTBcbitcbitydW5fZjJcbityZXQ9JD9cbitbIFwiJHJldFwiIC1lcSBcIiRrc2Z0X3NraXBcIiBdIFx1MDAyNlx1MDAyNiBleGl0IFwiJGtzZnRfc2tpcFwiXG4rWyBcIiRyZXRcIiAtZXEgMCBdIHx8IHJjPTFcbitcbitydW5fZjFcbityZXQ9JD9cbitbIFwiJHJldFwiIC1lcSBcIiRrc2Z0X3NraXBcIiBdIFx1MDAyNlx1MDAyNiBleGl0IFwiJGtzZnRfc2tpcFwiXG4rWyBcIiRyZXRcIiAtZXEgMCBdIHx8IHJjPTFcbitcbitpZiBbICRyYyAtZXEgMCBdOyB0aGVuXG4rXHRlY2hvIFwiaHNyX3NoYXJlZF9tdXRhdGlvbjogcGVyLWVncmVzcyBtdXRhdGlvbiBpc29sYXRpb24gKEYxK0YyKSBbIE9LIF1cIlxuK2Vsc2VcbitcdGVjaG8gXCJoc3Jfc2hhcmVkX211dGF0aW9uOiBwZXItZWdyZXNzIG11dGF0aW9uIGlzb2xhdGlvbiBbIEZBSUwgXSByYz0kcmNcIiAxXHUwMDNlXHUwMDI2MlxuK2ZpXG4rZXhpdCAkcmNcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjU1OjQ3LjkxMDgwMTEzOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MTE2Nzg2NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIU1IgUGF0Y2ggYW5kIGl0cyBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBzZWVtcyBsaWtlIGEgZml4IGZvciBhIHNoYXJlZC1tdXRhdGlvbiBpc3N1ZSBpbiBIU1IgYW5kIFBSUCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AgZmlsZS4gSW50ZXJlc3RpbmcuIFRoZSBwYXRjaCBpcyBhbHNvIGFkZGluZyBhIG5ldyB0ZXN0LCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3Jfc2hhcmVkX211dGF0aW9uLnNoYCwgd2hpY2ggc2hvdWxkIGJlIGhlbHBmdWwgZm9yIHZhbGlkYXRpbmcgdGhlIGZpeC5cblxuVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0sIGFzIEkgdW5kZXJzdGFuZCBpdCwgbGllcyBpbiBob3cgZnJhbWVzIGFyZSBjbG9uZWQgd2hlbiBzZW50IG91dCB0byBtdWx0aXBsZSBlZ3Jlc3MgcG9ydHMuIFRoZSBmaXggaW52b2x2ZXMgdXNpbmcgYHNrYl9jbG9uZWAgYW5kIGBza2JfY293YCBpbiB0aGUgYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCBhbmQgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCBmdW5jdGlvbnMgdG8gZW5zdXJlIHRoYXQgbW9kaWZ5aW5nIHRoZSBwYXRoIElEIG9yIExBTiBJRCBvbiBhIGNsb25lZCBmcmFtZSBkb2Vzbid0IGNvcnJ1cHQgdGhlIG9yaWdpbmFsIGRhdGEuIFRoaXMgbWFrZXMgcGVyZmVjdCBzZW5zZTsgc2hhcmVkIGRhdGEgY29ycnVwdGlvbiBpcyBhIG5hc3R5IGJ1Zy4gVGhlIGFkZGl0aW9uIG9mIGFuIGBza2JfY293YCBjaGVjayBpbiBgaHNyX3htaXRgIGZvciBpbnRlcmxpbmstYm91bmQgc2ticyBzZWVtcyBsaWtlIGEgbmVjZXNzYXJ5IHByZWNhdXRpb24gdG8gY2F0Y2ggYW55dGhpbmcgdGhhdCBtYXkgaGF2ZSBiZWVuIG1pc3NlZC5cblxuTm93LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGFjdHVhbCBjb2RlIGluIGBuZXQvaHNyL2hzcl9mb3J3YXJkLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIEhTUiBsb2dpYyByZXNpZGVzLCBzbyB1bmRlcnN0YW5kaW5nIGl0IHRob3JvdWdobHkgaXMgY3J1Y2lhbC4gR2l2ZW4gdGhhdCBIU1IgaXMgYSBuZXR3b3JrIHByb3RvY29sLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY29kZSBwYXRoIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSB3aXRoaW4gbXkgc3RhbmRhcmQgUUVNVSBzZXR1cC4gU2luY2UgSFNSIGlzIGltcGxlbWVudGVkIGFzIGEgc29mdHdhcmUgbmV0d29yayBkZXZpY2UsIHNpbWlsYXIgdG8gYSBicmlkZ2Ugb3IgVkxBTiwgdGhlbiBJIHdvdWxkIGV4cGVjdCBpdCB0byBiZS5cblxuVGhlIHRlc3Qgc2NyaXB0IGl0c2VsZiBjb25maXJtcyB0aGlzLCB1c2luZyBgaXAgbGluayBhZGQgbmFtZSBwcnAwIHR5cGUgaHNyIHNsYXZlMSB2QSBzbGF2ZTIgdkIgc3VwZXJ2aXNpb24gNDUgcHJvdG8gMWAgd2hpY2ggc3VnZ2VzdHMgdGhhdCBpdCdzIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZS4gVGhpcyBjb25maXJtcyBteSB1bmRlcnN0YW5kaW5nLlxuXG5OZXh0LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGhvdyBIU1IgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSdsbCBzZWFyY2ggZm9yIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMg4oCTIGxpa2VseSBsb29raW5nIGZvciBcImhzclwiIGluIGBuZXQvaHNyL0tjb25maWdgIG9yIGEgc2ltaWxhciBmaWxlLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJdCdzIGltcG9ydGFudCB0byBrbm93IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGEgY29tcGxldGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQwNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjU1OjU0LjMyMjQ4MjU0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNzU2MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIU1JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvS2NvbmZpZy01LVxcbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1JcXG5uZXQvaHNyL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFxcdTAwMjYgUFJQKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NTU6NTQuNDA0MjQzNTc5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3MjU1NTIwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBDT05GSUdfSFNSKipcblxuT2theSwgc28gYENPTkZJR19IU1JgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gTXkgdGFzayBpcyB0byB1bmRlcnN0YW5kIGl0cyByYW1pZmljYXRpb25zLiBMZXQncyBkaWcgaW4gYW5kIHNlZSBob3cgaXQncyBhZmZlY3RpbmcgdGhpbmdzLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBhcyBhIHJlc3VsdCBvZiBlbmFibGluZy9kaXNhYmxpbmcgYENPTkZJR19IU1JgLiBJdCBzZWVtcyBsaWtlIGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGFuZCBgaHNyX3htaXRgIGFyZSB0aGUgYXJlYXMgb2YgaW50ZXJlc3QsIHRoZSBzcGVjaWZpYyBkZXRhaWxzIG9mIHRoZXNlIGZ1bmN0aW9uIGNhbGxzIGFyZSB2ZXJ5IGltcG9ydGFudC4gTm93LCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZWlyIHJvbGUgYW5kIGFjY2Vzc2liaWxpdHkgSSBoYXZlIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW50ZXJuYWwgKHN0YXRpYykgb3IgdmlzaWJsZSBvdXRzaWRlIHRoZSBtb2R1bGUgKGV4cG9ydGVkKS4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgcmVxdWlyZSB0byBkZXRlcm1pbmUgaG93IHRoaXMgY29uZmlndXJhdGlvbiBjaGFuZ2UgYWZmZWN0cyB0aGUgbGFyZ2VyIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI4OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjU1OjU4LjE3NjgwOTU0OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUzMzg5OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9oc3JfZGV2aWNlLmM9NjIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaHNyX3Byb3RvX29wcyBoc3Jfb3BzID0ge1xcbm5ldC9oc3IvaHNyX2RldmljZS5jLTYyMi1cXHQuc2VuZF9zdl9mcmFtZSA9IHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lLFxcbm5ldC9oc3IvaHNyX2RldmljZS5jOjYyMzpcXHQuY3JlYXRlX3RhZ2dlZF9mcmFtZSA9IGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lLFxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTYyNC1cXHQuZ2V0X3VudGFnZ2VkX2ZyYW1lID0gaHNyX2dldF91bnRhZ2dlZF9mcmFtZSxcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz0yODg9c3RhdGljIHN0cnVjdCBza19idWZmICpoc3JfZmlsbF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy0zMzAtICovXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjMzMTpzdHJ1Y3Qgc2tfYnVmZiAqaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtMzMyLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaD0xNz1zdHJ1Y3Qgc2tfYnVmZiAqcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMTgtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGhzcl9wb3J0ICpwb3J0KTtcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmg6MTk6c3RydWN0IHNrX2J1ZmYgKmhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxubmV0L2hzci9oc3JfZm9yd2FyZC5oLTIwLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBoc3JfcG9ydCAqcG9ydCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjU1OjU4LjMxMjE1Nzc4NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzU0ODk3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBGdW5jdGlvbiBBdHRyaWJ1dGVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBhbmQgYGhzcl94bWl0YC4gUmlnaHQgYXdheSwgdGhlIGNyaXRpY2FsIGRpc3RpbmN0aW9uIGp1bXBzIG91dC4gSSd2ZSBnb3QgdG8gZGV0ZXJtaW5lIHdoaWNoIG9mIHRoZXNlIGFyZSBzdGF0aWMgYW5kIHdoaWNoIGFyZW4ndC4gQ2xlYXJseSwgYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCBpcyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbi4gQWxzbywgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCBpcyAqYWxzbyogbm90IGEgc3RhdGljIGZ1bmN0aW9uLiBPbiB0aGUgb3RoZXIgaGFuZCwgYGhzcl94bWl0YCBpcywgaW4gZmFjdCwgc3RhdGljLiBUaGlzIGlzIHRoZSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24sIGFuZCB3aGVyZSBteSBhbmFseXNpcyB3aWxsIGxpa2VseSBkaXZlcmdlLCBkZXBlbmRpbmcgb24gdGhlIGxhcmdlciBjb250ZXh0IG9mIHdoYXQgaXMgYmVpbmcgZXhhbWluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NzIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxODo1NjowMS40ODc2NTA2MDdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MzczNDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhzcl94bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvaHNyX2ZvcndhcmQuYz00MjQ9c3RhdGljIHZvaWQgaHNyX2RlbGl2ZXJfbWFzdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNDQ0LVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo0NDU6c3RhdGljIGludCBoc3JfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTQ0Ni1cXHRcXHQgICAgc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz01NjA9c3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfZG8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy02MjEtXFx0XFx0fSBlbHNlIHtcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NjIyOlxcdFxcdFxcdGlmICghaHNyX3htaXQoc2tiLCBwb3J0LCBmcmFtZSkpXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTYyMy1cXHRcXHRcXHRcXHRpZiAocG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQSB8fFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxODo1NjowMS42MDMwMzIwMDVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODE4NDU0Nzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgSFNSIFBhY2tldCBGb3J3YXJkaW5nIFBhdGgqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBIU1IgcGFja2V0IHRyYW5zbWlzc2lvbiBwcm9jZXNzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGBoc3JfeG1pdGAuIEkgc2VlIGl0J3MgZGVjbGFyZWQgYHN0YXRpY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIFN0YXRpYyBtZWFucyBpdCdzIGxpbWl0ZWQgaW4gc2NvcGUsIGxpa2VseSBpbnRlcm5hbCB0byBpdHMgY29tcGlsYXRpb24gdW5pdC4gTm93LCBnaXZlbiB0aGF0IGBoc3JfeG1pdGAgaXMgYmVpbmcgY2FsbGVkIGJ5IGBoc3JfZm9yd2FyZF9kb2AsIEknbSBjdXJpb3VzIGFib3V0IHRoZSBjYWxsaW5nIGZ1bmN0aW9uJ3Mgc2NvcGUuIElzIGBoc3JfZm9yd2FyZF9kb2AgYWxzbyBzdGF0aWM/IElmIHNvLCB0aGlzIHN1Z2dlc3RzIGEgdGlnaHQsIGxvY2FsaXplZCBoYW5kbGluZyBvZiBwYWNrZXQgZm9yd2FyZGluZyB3aXRoaW4gYSBzcGVjaWZpYyBtb2R1bGUgb3IgY29tcG9uZW50LiBUaGUgbGltaXRlZCB2aXNpYmlsaXR5IGltcGxpZXMgYSB3ZWxsLWRlZmluZWQgaW50ZXJhY3Rpb24gcG9pbnQsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSBgaHNyX2ZvcndhcmRfZG9gJ3Mgc3RhdGljIG5hdHVyZSB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgZGVidWdnaW5nIGFuZCBtb2RpZmljYXRpb24uIEknbGwgY2hlY2sgaXRzIGRlY2xhcmF0aW9uIG5vdyB0byBjb25maXJtIG15IGh5cG90aGVzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0ODksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxODo1NjowNS40MjE0ODkzNTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MTg3Nzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhzcl9mb3J3YXJkX2RvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvaHNyX2ZvcndhcmQuYz00OTI9Ym9vbCBoc3JfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNTU5LSAqL1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo1NjA6c3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfZG8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNTYxLXtcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz03NzU9dm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc4My1cXHRoc3JfcmVnaXN0ZXJfZnJhbWVfaW4oZnJhbWUubm9kZV9zcmMsIHBvcnQsIGZyYW1lLnNlcXVlbmNlX25yKTtcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6Nzg0OlxcdGhzcl9mb3J3YXJkX2RvKFxcdTAwMjZmcmFtZSk7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc4NS1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NTY6MDUuNTA1NjgyMzUyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MzY5MzMxNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGhzcl9mb3J3YXJkX3NrYmAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGBoc3JfZm9yd2FyZF9za2JgIGZ1bmN0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlIGlzIHRoYXQgaXQncyAqbm90KiBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG1vcmUgY2xlYXJseS4gVGhpcyBtZWFucyBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIGZpZ3VyZSBvdXQgd2h5IGl0J3Mgc3RydWN0dXJlZCB0aGlzIHdheS4gSSB3aWxsIHN0YXJ0IGJ5IGNhcmVmdWxseSBleGFtaW5pbmcgdGhlIGNvZGUgdG8gY2hlY2sgZXhhY3RseSB3aGF0IGl0IGRvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwNDEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxODo1NjowOC4yNDI2MTk5ODFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjQ2NTk0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoc3JfZm9yd2FyZF9za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9oc3JfZGV2aWNlLmM9MjI0PXN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTIzNS1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxubmV0L2hzci9oc3JfZGV2aWNlLmM6MjM2OlxcdFxcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XFxubmV0L2hzci9oc3JfZGV2aWNlLmMtMjM3LVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmM9MjkzPXN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTM2My1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzozNjQ6XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxubmV0L2hzci9oc3JfZGV2aWNlLmMtMzY1LVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmM9MzY5PXN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNDA0LVxcbm5ldC9oc3IvaHNyX2RldmljZS5jOjQwNTpcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xcbm5ldC9oc3IvaHNyX2RldmljZS5jLTQwNi1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz03MTc9c3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NzQtLyogTXVzdCBiZSBjYWxsZWQgaG9sZGluZyByY3UgcmVhZCBsb2NrIChiZWNhdXNlIG9mIHRoZSBwb3J0IHBhcmFtZXRlcikgKi9cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6Nzc1OnZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzc2LXtcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaC0xNS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmg6MTY6dm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KTtcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMTctc3RydWN0IHNrX2J1ZmYgKnBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxuLS1cXG5uZXQvaHNyL2hzcl9zbGF2ZS5jPTI0PXN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGhzcl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxcbi0tXFxubmV0L2hzci9oc3Jfc2xhdmUuYy04MC1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxubmV0L2hzci9oc3Jfc2xhdmUuYzo4MTpcXHRcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTgyLVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbm5ldC9oc3IvaHNyX3NsYXZlLmMtODMtXFx0fSBlbHNlIHtcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jOjg0OlxcdFxcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xcbm5ldC9oc3IvaHNyX3NsYXZlLmMtODUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxODo1NjowOC42ODkwOTE0NDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxNTE5NzY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgYGhzcl9mb3J3YXJkX3NrYmAgaXMgYSBwcmV0dHkgY2VudHJhbCBmdW5jdGlvbiBoZXJlLCBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gQW5kLCB5ZWFoLCBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgIGFuZCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgIGFsc28gbG9vayBsaWtlIHByb21pc2luZyBmb2NhbCBwb2ludHMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IGhhbmRsaW5nIHRoZSBjb3JlIGZyYW1lIG1hbmlwdWxhdGlvbi5cblxuTm93LCBJJ20gZ29pbmcgdG8gc2hpZnQgZ2VhcnMgc2xpZ2h0bHkuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gQmVzaWRlcyB0aGUgb2J2aW91cyBgQ09ORklHX0hTUmAsIGFyZSB0aGVyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIHJlbGF0ZWQgZmVhdHVyZXMgdGhhdCBoYXZlIHRoZWlyIG93biBjb25maWcgb3B0aW9ucz8gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA1NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjU2OjEyLjAwNDI5MjI2MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2hzci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBJRUMgNjI0MzktMyBIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5XFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBIU1JcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5IChIU1IgXFx1MDAyNiBQUlApXFxcIlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBUaGlzIGVuYWJsZXMgSUVDIDYyNDM5IGRlZmluZWQgSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3NcXG4gIDEwOlxcdFxcdCAgUmVkdW5kYW5jeSAoSFNSKSBhbmQgUGFyYWxsZWwgUmVkdW5kYW5jeSBQcm90b2NvbCAoUFJQKS5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB5b3VyIExpbnV4IGJveCB3aWxsIGJlIGFibGUgdG8gYWN0IGFzIGFcXG4gIDEzOlxcdFxcdCAgREFOSCAoXFxcIkRvdWJseSBhdHRhY2hlZCBub2RlIGltcGxlbWVudGluZyBIU1JcXFwiKSBvciBEQU5QIChcXFwiRG91Ymx5XFxuICAxNDpcXHRcXHQgIGF0dGFjaGVkIG5vZGUgaW1wbGVtZW50aW5nIFBSUFxcXCIpLiBGb3IgdGhpcyB0byB3b3JrLCB5b3VyIExpbnV4IGJveFxcbiAgMTU6XFx0XFx0ICBuZWVkcyAoYXQgbGVhc3QpIHR3byBwaHlzaWNhbCBFdGhlcm5ldCBpbnRlcmZhY2VzLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIEZvciBEQU5ILCBpdCBtdXN0IGJlIGNvbm5lY3RlZCBhcyBhIG5vZGUgaW4gYSByaW5nIG5ldHdvcmsgdG9nZXRoZXJcXG4gIDE4OlxcdFxcdCAgd2l0aCBvdGhlciBIU1IgY2FwYWJsZSBub2Rlcy4gQWxsIEV0aGVybmV0IGZyYW1lcyBzZW50IG92ZXIgdGhlIEhTUlxcbiAgMTk6XFx0XFx0ICBkZXZpY2Ugd2lsbCBiZSBzZW50IGluIGJvdGggZGlyZWN0aW9ucyBvbiB0aGUgcmluZyAob3ZlciBib3RoIHNsYXZlXFxuICAyMDpcXHRcXHQgIHBvcnRzKSwgZ2l2aW5nIGEgcmVkdW5kYW50LCBpbnN0YW50IGZhaWwtb3ZlciBuZXR3b3JrLiBFYWNoIEhTUiBub2RlXFxuICAyMTpcXHRcXHQgIGluIHRoZSByaW5nIGFjdHMgbGlrZSBhIGJyaWRnZSBmb3IgSFNSIGZyYW1lcywgYnV0IGZpbHRlcnMgZnJhbWVzXFxuICAyMjpcXHRcXHQgIHRoYXQgaGF2ZSBiZWVuIGZvcndhcmRlZCBlYXJsaWVyLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIEZvciBEQU5QLCBpdCBtdXN0IGJlIGNvbm5lY3RlZCBhcyBhIG5vZGUgY29ubmVjdGluZyB0byB0d29cXG4gIDI1OlxcdFxcdCAgc2VwYXJhdGUgbmV0d29ya3Mgb3ZlciB0aGUgdHdvIHNsYXZlIGludGVyZmFjZXMuIExpa2UgSFNSLCBFdGhlcm5ldFxcbiAgMjY6XFx0XFx0ICBmcmFtZXMgc2VudCBvdmVyIHRoZSBQUlAgZGV2aWNlIHdpbGwgYmUgc2VudCB0byBib3RoIG5ldHdvcmtzIGdpdmluZ1xcbiAgMjc6XFx0XFx0ICBhIHJlZHVuZGFudCwgaW5zdGFudCBmYWlsLW92ZXIgbmV0d29yay4gVW5saWtlIEhTUiwgUFJQIG5ldHdvcmtzXFxuICAyODpcXHRcXHQgIGNhbiBoYXZlIFNpbmdseSBBdHRhY2hlZCBOb2RlcyAoU0FOKSBzdWNoIGFzIFBDLCBwcmludGVyLCBicmlkZ2VzXFxuICAyOTpcXHRcXHQgIGV0YyBhbmQgd2lsbCBiZSBhYmxlIHRvIGNvbW11bmljYXRlIHdpdGggREFOUCBub2Rlcy5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0XFx0ICBUaGlzIGNvZGUgaXMgYSBcXFwiYmVzdCBlZmZvcnRcXFwiIHRvIGNvbXBseSB3aXRoIHRoZSBIU1Igc3RhbmRhcmQgYXNcXG4gIDMyOlxcdFxcdCAgZGVzY3JpYmVkIGluIElFQyA2MjQzOS0zOjIwMTAgKEhTUnYwKSBhbmQgSUVDIDYyNDM5LTM6MjAxMiAoSFNSdjEpLFxcbiAgMzM6XFx0XFx0ICBhbmQgUFJQIHN0YW5kYXJkIGRlc2NyaWJlZCBpbiBJRUMgNjI0MzktNDoyMDEyIChQUlApLCBidXQgbm9cXG4gIDM0OlxcdFxcdCAgY29tcGxpYW5jeSB0ZXN0cyBoYXZlIGJlZW4gbWFkZS4gVXNlIGlwcm91dGUyIHRvIHNlbGVjdCB0aGUgcHJvdG9jb2xcXG4gIDM1OlxcdFxcdCAgeW91IHdvdWxkIGxpa2UgdG8gdXNlLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgIFlvdSBuZWVkIHRvIHBlcmZvcm0gYW55IGFuZCBhbGwgbmVjZXNzYXJ5IHRlc3RzIHlvdXJzZWxmIGJlZm9yZVxcbiAgMzg6XFx0XFx0ICByZWx5aW5nIG9uIHRoaXMgY29kZSBpbiBhIHNhZmV0eSBjcml0aWNhbCBzeXN0ZW0hXFxuICAzOTpcXHRcXG4gIDQwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0aWYgSFNSXFxuICA0MzpcXHRcXG4gIDQ0OlxcdGNvbmZpZyBQUlBfRFVQX0RJU0NBUkRfS1VOSVRfVEVTVFxcbiAgNDU6XFx0XFx0dHJpc3RhdGUgXFxcIlBSUCBkdXBsaWNhdGUgZGlzY2FyZCBLVW5pdCB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNDY6XFx0XFx0ZGVwZW5kcyBvbiBLVU5JVFxcbiAgNDc6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDQ4OlxcdFxcdGhlbHBcXG4gIDQ5OlxcdFxcdCAgQ292ZXJzIHRoZSBQUlAgZHVwbGljYXRlIGRpc2NhcmQgYWxnb3JpdGhtLlxcbiAgNTA6XFx0XFx0ICBPbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldnMgcnVubmluZyBLVW5pdCB0ZXN0IGhhcm5lc3MgYW5kIGFyZSBub3RcXG4gIDUxOlxcdFxcdCAgZm9yIGluY2x1c2lvbiBpbnRvIGEgcHJvZHVjdGlvbiBidWlsZC5cXG4gIDUyOlxcdFxcbiAgNTM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsIHBsZWFzZSByZWZlclxcbiAgNTQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbiBpbiBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC8uXFxuICA1NTpcXHRcXG4gIDU2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDU3OlxcdFxcbiAgNTg6XFx0ZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NTY6MTIuMDA0NDIyNzkyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MzY4NjY5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSB3aGF0IHdlIGhhdmUgaGVyZS5cblxuKipOYXZpZ2F0aW5nIERlcGVuZGVuY2llcyBpbiB0aGUgTmV0d29yayBTdGFjayoqXG5cbkhtbSwgYENPTkZJR19IU1JgIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGFueSBleHBsaWNpdCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyB3aXRoaW4gKnRoaXMqIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZS4gVGhhdCdzIGEgbGl0dGxlIHVudXN1YWwuIEl0J3MgaW4gdGhlIGBuZXQvaHNyL2AgZGlyZWN0b3J5IHRob3VnaCwgd2hpY2ggdXN1YWxseSBpbXBsaWVzIHNvbWUgcmVsYXRpb25zaGlwIHdpdGggdGhlIGJyb2FkZXIgbmV0d29yayBzdWJzeXN0ZW0uIExldCBtZSBjaGVjay4uLiBBaCwgcmlnaHQsIHRoYXQgcG9pbnRzIHRvIGBORVRgLlxuXG5Pa2F5LCBzbyBJIHN1c3BlY3QgaXQgKmltcGxpY2l0bHkqIGRlcGVuZHMgb24gYE5FVGAuIFRvIGJlIGNlcnRhaW4sIEkgc2hvdWxkIGNoZWNrIHRoZSBgbmV0L01ha2VmaWxlYCB0byBzZWUgaG93IHRoZSBgaHNyYCBkaXJlY3RvcnkgYW5kIGl0cyBhc3NvY2lhdGVkIHNvdXJjZSBmaWxlcyBhcmUgYWN0dWFsbHkgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGJ1aWxkIHByb2Nlc3MuIFRoYXQgc2hvdWxkIHNob3cgYW55IGRpcmVjdCBvciBpbmRpcmVjdCBkZXBlbmRlbmNpZXMuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNDUsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjU2OjE1LjU0MTI5MjM4NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA2NzY1OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhzclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L01ha2VmaWxlPTY3PW9iai0kKENPTkZJR19ORVRfTlNIKVxcdFxcdCs9IG5zaC9cXG5uZXQvTWFrZWZpbGU6Njg6b2JqLSQoQ09ORklHX0hTUilcXHRcXHQrPSBoc3IvXFxubmV0L01ha2VmaWxlLTY5LW9iai0kKENPTkZJR19ORVRfU1dJVENIREVWKVxcdCs9IHN3aXRjaGRldi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NTY6MTUuOTQ4MDYzNTU4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwOTg0NzQ3NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIU1IgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBDT05GSUdfSFNSYCBpcyB0aGUgb25seSBjb25maWcgb3B0aW9uIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aCBoZXJlLiBMZXQncyBnbyBvdmVyIHRoZXNlIGNoYW5nZXMgYWdhaW4uIEl0IHNlZW1zIHdlIGhhdmUgYSBwYXRjaCB0aGF0J3MgbW9kaWZ5aW5nIGBuZXQvaHNyL2hzcl9mb3J3YXJkLmNgLCBmb2N1c2luZyBvbiBhIHNoYXJlZC1tdXRhdGlvbiBpc3N1ZS4gVGhlIGZpeCBpbnZvbHZlcyBjbG9uaW5nIHRoZSBza2IgYmVmb3JlIG1vZGlmeWluZyBpdCwgd2hpY2ggbWFrZXMgc2Vuc2UgdG8gZW5zdXJlIGlzb2xhdGlvbiBhbmQgcHJldmVudCB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cy4gVGhpcyBpcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSFNSIGxvZ2ljLlxuXG5HaXZlbiB0aGF0IEhTUiBpcyBhIHNvZnR3YXJlIG5ldHdvcmsgZGV2aWNlLCBpdCBzaG91bGQgYmUgZWFzaWx5IHJlYWNoYWJsZSBpbiBhIFFFTVUgZW52aXJvbm1lbnQsIHdoaWNoIGlzIGdvb2QgZm9yIHRlc3RpbmcuIFRoZSBpbmNsdXNpb24gb2YgYSBzZWxmdGVzdCwgYGhzcl9zaGFyZWRfbXV0YXRpb24uc2hgLCBpcyBhIHNvbGlkIGFkZGl0aW9uLiBUaGUgc2NyaXB0IHVzZXMgYGlwIGxpbmsgYWRkYCB0byBjcmVhdGUgYW4gSFNSIGludGVyZmFjZSB3aXRoIHRoZSB0eXBpY2FsIFBSUCBjb25maWd1cmF0aW9uLCB3aGljaCB0ZWxscyBtZSB0aGlzIGNhbiBiZSBlZmZlY3RpdmVseSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LiBTcGVjaWZpY2FsbHkgYHBycDBgIGBzbGF2ZTFgIGBzbGF2ZTJgLiBOaWNlLCBnb29kIHRvIHNlZSB0aGV5J3JlIGV4cGxpY2l0bHkgZGVmaW5pbmcgdGhlIHZpcnR1YWwgbmV0d29yayBkZXZpY2UncyBuYXR1cmUuXG5cbkknbGwgd2FudCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGFuZCBgaHNyX2ZvcndhcmRfc2tiYCB3aXRoaW4gdGhlIGNvZGUuIFRob3NlIGFyZSB0aGUga2V5IHN5bWJvbHMgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgbG9naWMgb2YgdGhlIGZpeC5cblxuQmVmb3JlIEkgZGlnIGludG8gdGhlIGRldGFpbHMsIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBvaW50cyBvZiBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gdGhhdCBtaWdodCBiZSByZWxldmFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NzgsIk91dHB1dFRva2VucyI6NzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NTY6MjUuMDQ2NTQ5OTQ5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTY2MDg5MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxccytcXFxcKj9bYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9oc3JfZm9yd2FyZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvaHNyX2ZvcndhcmQuYz00NDU9c3RhdGljIGludCBoc3JfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNDgzLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo0ODQ6Ym9vbCBwcnBfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTQ4NS17XFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNDkxLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo0OTI6Ym9vbCBoc3JfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTQ5My17XFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9NjQ5PXN0YXRpYyB2b2lkIGhhbmRsZV9zdGRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy02NzAtXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjY3MTppbnQgaHNyX2ZpbGxfZnJhbWVfaW5mbyhfX2JlMTYgcHJvdG8sIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTY3Mi1cXHRcXHRcXHRzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTY5Ny1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6Njk4OmludCBwcnBfZmlsbF9mcmFtZV9pbmZvKF9fYmUxNiBwcm90bywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNjk5LVxcdFxcdFxcdHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9NzE3PXN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzc0LS8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjc3NTp2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc3Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjU2OjI1LjI0MzE2NjU2NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDc0NDI5NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBIU1IgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGZvciBIU1IgYW5kIFBSUCwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHdheSB0byBhcHByb2FjaCBmdXp6aW5nIGl0LiBUaGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgZm9yd2FyZGluZyBhbiBza2IgaW4gSFNSIGlzIGBoc3JfZm9yd2FyZF9za2JgLCBzbyB0aGF0J3MgZGVmaW5pdGVseSBhIGtleSBmdW5jdGlvbiB0byBrZWVwIGluIG1pbmQuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCBhbmQgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCDigJMgdGhvc2UgYXJlIGNydWNpYWwgYmVjYXVzZSB0aGV5J3JlIGRpcmVjdGx5IGltcGFjdGVkLiBMZXQncyBtYWtlIGFic29sdXRlbHkgc3VyZSBJJ3ZlIGdvdCB0aGUgbmFtZXMgcmlnaHQ6IGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGFuZCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgLiBZdXAsIGFsbCBnb29kLlxuXG5Ob3csIGEgcXVpY2sgY2hlY2vigKYgSSBzYXcgYGhzcl94bWl0YCBtZW50aW9uZWQsIGJ1dCB0aGF0J3Mgc3RhdGljLCBzbyBpdOKAmXMgbm90IGlkZWFsIGFzIGEgdG9wLWxldmVsIGZvY3VzLiBIb3dldmVyLCBgaHNyX2ZvcndhcmRfc2tiYCBkb2VzIGNhbGwgYGhzcl9mb3J3YXJkX2RvYCwgd2hpY2ggaW4gdHVybiBjYWxscyBgaHNyX3htaXRgLCBtZWFuaW5nIGBoc3JfZm9yd2FyZF9za2JgIGlzIHN0aWxsIGEgcmVsZXZhbnQgZm9jYWwgcG9pbnQgYW5kIGxpa2VseSBtb3JlIHJlYWNoYWJsZS5cblxuQ2hlY2tpbmcgZm9yIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcywgaXQncyBqdXN0IGBDT05GSUdfSFNSYC4gU2ltcGxlIGVub3VnaC5cblxuQWxyaWdodCwgd2hhdCBlbHNlIGhhdmUgd2UgZ290PyBUaGUgcGF0Y2ggbW9kaWZpZXMgYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AgYW5kIGFkZHMgYSB0ZXN0IGNhc2UsIHNvIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoIGdvb2QgdGVzdCBjb3ZlcmFnZSwgd2hpY2ggbWFrZXMgZnV6emluZyBpdCBldmVuIG1vcmUgdmFsdWFibGUuIEl0IGFkZHJlc3NlcyBhIHNoYXJlZC1tdXRhdGlvbiBpc3N1ZSBieSBjbG9uaW5nIHRoZSBza2IgYmVmb3JlIG1vZGlmeWluZyBpdCwgd2hpY2ggaXMgdGhlIGtpbmQgb2YgdnVsbmVyYWJpbGl0eSBmdXp6aW5nIGNhbiB1bmNvdmVyLiBUaGlzIGNoYW5nZSBpcyBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG5cblNvLCBoZXJlJ3MgbXkgcGxhbjpcblxuKipGb2N1cyBTeW1ib2xzOioqXG5cbiogICBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgXG4qICAgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYFxuKiAgIGBoc3JfZm9yd2FyZF9za2JgXG5cbioqRW5hYmxlIENvbmZpZ3M6KipcblxuKiAgIGBDT05GSUdfSFNSYFxuXG4qKlJlYXNvbmluZzoqKlxuXG5UaGUgcGF0Y2ggYWRkcmVzc2VzIGEgc2hhcmVkLW11dGF0aW9uIHZ1bG5lcmFiaWxpdHkgYnkgY2xvbmluZyB0aGUgc2tiIGJlZm9yZSBtb2RpZmljYXRpb24sIGRpcmVjdGx5IGltcGFjdGluZyBIU1IgYW5kIFBSUC4gSXQncyBhIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBjaGFuZ2Ugd2l0aCB0ZXN0IGNvdmVyYWdlLCBtYWtpbmcgaXQgaWRlYWwgZm9yIGZ1enppbmcuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NTksIk91dHB1dFRva2VucyI6MTExLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjU2OjMyLjcxNzU5OTM3N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDE2OTQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFNSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVcIixcbiAgICBcInBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lXCIsXG4gICAgXCJoc3JfZm9yd2FyZF9za2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHNoYXJlZC1tdXRhdGlvbiBpc3N1ZSBpbiBIU1IgYW5kIFBSUCBieSBjbG9uaW5nIHRoZSBza2IgYW5kIG1ha2luZyBpdCBwcml2YXRlIGJlZm9yZSBtb2RpZnlpbmcgaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBIU1IgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhTUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lXCIsXG4gICAgXCJwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZVwiLFxuICAgIFwiaHNyX2ZvcndhcmRfc2tiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzaGFyZWQtbXV0YXRpb24gaXNzdWUgaW4gSFNSIGFuZCBQUlAgYnkgY2xvbmluZyB0aGUgc2tiIGFuZCBtYWtpbmcgaXQgcHJpdmF0ZSBiZWZvcmUgbW9kaWZ5aW5nIGl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgSFNSIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzw9s7[1] Phase: Succeeded StartedAt: 2026-07-29 18:56:44 +0000 UTC FinishedAt: 2026-07-29 18:56:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw9s7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-29 18:56:44 +0000 UTC FinishedAt: 2026-07-29 18:56:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw9s7[2] Phase: Succeeded StartedAt: 2026-07-29 18:56:44 +0000 UTC FinishedAt: 2026-07-29 22:48:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-29 18:56:44 +0000 UTC FinishedAt: 2026-07-29 22:48:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-29 18:56:44 +0000 UTC FinishedAt: 2026-07-29 18:57:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-29 18:56:44 +0000 UTC FinishedAt: 2026-07-29 18:57:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzw9s7/series-workflowzw9s7-convert-artifact-2468132655/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-29 18:57:07 +0000 UTC FinishedAt: 2026-07-29 19:18:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-29 18:57:07 +0000 UTC FinishedAt: 2026-07-29 19:18:30 +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:*2c9d15ec-c690-449d-9162-ee551d50d2a7,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-workflowzw9s7/series-workflowzw9s7-convert-artifact-2468132655/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": "5182eb46-dc3a-4f64-80e9-183f7b3fd322", "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-workflowzw9s7/series-workflowzw9s7-build-action-894057717/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-29 18:57:07 +0000 UTC FinishedAt: 2026-07-29 19:18:20 +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:*2c9d15ec-c690-449d-9162-ee551d50d2a7,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-workflowzw9s7/series-workflowzw9s7-convert-artifact-2468132655/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": "5182eb46-dc3a-4f64-80e9-183f7b3fd322", "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-workflowzw9s7/series-workflowzw9s7-build-action-894057717/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-29 19:18:30 +0000 UTC FinishedAt: 2026-07-29 19:18:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-29 19:18:30 +0000 UTC FinishedAt: 2026-07-29 19:18:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-29 19:18:30 +0000 UTC FinishedAt: 2026-07-29 19:18:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-29 19:18:30 +0000 UTC FinishedAt: 2026-07-29 19:18:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzw9s7/series-workflowzw9s7-convert-artifact-1682241150/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-29 19:18:40 +0000 UTC FinishedAt: 2026-07-29 19:20:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-29 19:18:40 +0000 UTC FinishedAt: 2026-07-29 19:20:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5182eb46-dc3a-4f64-80e9-183f7b3fd322,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-workflowzw9s7/series-workflowzw9s7-build-action-894057717/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-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-29 19:20:31 +0000 UTC FinishedAt: 2026-07-29 19:20:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-29 19:20:31 +0000 UTC FinishedAt: 2026-07-29 19:20:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-29 19:20:31 +0000 UTC FinishedAt: 2026-07-29 19:43:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-29 19:20:31 +0000 UTC FinishedAt: 2026-07-29 19:43:19 +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:*2c9d15ec-c690-449d-9162-ee551d50d2a7,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-workflowzw9s7/series-workflowzw9s7-convert-artifact-1682241150/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": "c7a1bba7-5e21-48d0-9e56-da902eb9af59", "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-workflowzw9s7/series-workflowzw9s7-build-action-482067154/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-29 19:20:31 +0000 UTC FinishedAt: 2026-07-29 19:43:09 +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:*2c9d15ec-c690-449d-9162-ee551d50d2a7,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-workflowzw9s7/series-workflowzw9s7-convert-artifact-1682241150/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": "c7a1bba7-5e21-48d0-9e56-da902eb9af59", "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-workflowzw9s7/series-workflowzw9s7-build-action-482067154/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-29 19:43:19 +0000 UTC FinishedAt: 2026-07-29 19:43:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-29 19:43:19 +0000 UTC FinishedAt: 2026-07-29 19:43:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-29 19:43:19 +0000 UTC FinishedAt: 2026-07-29 19:45:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-29 19:43:19 +0000 UTC FinishedAt: 2026-07-29 19:45:00 +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:*c7a1bba7-5e21-48d0-9e56-da902eb9af59,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-workflowzw9s7/series-workflowzw9s7-build-action-482067154/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-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-29 19:45:10 +0000 UTC FinishedAt: 2026-07-29 22:48:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-29 19:45:10 +0000 UTC FinishedAt: 2026-07-29 22:48:38 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"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:*5182eb46-dc3a-4f64-80e9-183f7b3fd322,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c7a1bba7-5e21-48d0-9e56-da902eb9af59,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-workflowzw9s7/series-workflowzw9s7-build-action-894057717/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-workflowzw9s7/series-workflowzw9s7-build-action-482067154/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-29 19:45:10 +0000 UTC FinishedAt: 2026-07-29 19:45:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-29 19:45:10 +0000 UTC FinishedAt: 2026-07-29 19:45:17 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"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-workflowzw9s7/series-workflowzw9s7-convert-artifact-72937603/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-29 19:45:10 +0000 UTC FinishedAt: 2026-07-29 19:45:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-29 19:45:10 +0000 UTC FinishedAt: 2026-07-29 19:45:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-29 19:45:10 +0000 UTC FinishedAt: 2026-07-29 19:45:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-29 19:45:20 +0000 UTC FinishedAt: 2026-07-29 22:48:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw9s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"b0a168fb-100e-4c8d-a177-a57b086e1fa4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-29 19:45:20 +0000 UTC FinishedAt: 2026-07-29 22:48:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5182eb46-dc3a-4f64-80e9-183f7b3fd322,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c7a1bba7-5e21-48d0-9e56-da902eb9af59,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-workflowzw9s7/series-workflowzw9s7-build-action-894057717/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-workflowzw9s7/series-workflowzw9s7-build-action-482067154/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-workflowzw9s7/series-workflowzw9s7-convert-artifact-72937603/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,}