Name: series-workflowr5tt2 Phase: Succeeded StartedAt: 2026-09-06 10:46:04 +0000 UTC FinishedAt: 2026-09-06 15:19:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5tt2[0] Phase: Succeeded StartedAt: 2026-09-06 10:46:04 +0000 UTC FinishedAt: 2026-09-06 11:31:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5tt2[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 10:46:04 +0000 UTC FinishedAt: 2026-09-06 11:31:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IEEE802154", "MAC802154", "IEEE802154_DRIVERS", "IEEE802154_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IEEE802154", "MAC802154", "IEEE802154_DRIVERS", "IEEE802154_HWSIM" ], "series_id": "c8152edf-04a3-45a5-8c2e-50dbeace0b73" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ieee802154_subif_frame", "mac802154_rx_beacon_worker", "mac802154_rx_mac_cmd_worker", "ieee802154_rx" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OywKICAgICYjMzQ7TUFDODAyMTU0JiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtJRUVFODAyMTU0X0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjE1NF9zdWJpZl9mcmFtZSYjMzQ7LAogICAgJiMzNDttYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlciYjMzQ7LAogICAgJiMzNDttYWM4MDIxNTRfcnhfbWFjX2NtZF93b3JrZXImIzM0OywKICAgICYjMzQ7aWVlZTgwMjE1NF9yeCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lKClgIGluIGBuZXQvbWFjODAyMTU0L3J4LmNgIHRvIGFzc2lnbiBgbWFjX3BrdC1cdTAwM2Vza2IgPSBza2JgIGRpcmVjdGx5IGluc3RlYWQgb2YgY2FsbGluZyBgc2tiX2dldChza2IpYC4gVGhpcyBhdm9pZHMgdGFraW5nIGFuIGV4dHJhIHJlZmNvdW50IHdoZW4gdHJhbnNmZXJyaW5nIG93bmVyc2hpcCBvZiB0aGUgc2tiIHRvIHRoZSBhc3luY2hyb25vdXMgYmVhY29uL01BQyBjb21tYW5kIHByb2Nlc3Npbmcgd29ya2VycywgZml4aW5nIGFuIHNrYiByZWZlcmVuY2UgY291bnQgLyBtZW1vcnkgbGVhay5cblxuVGhlIGNoYW5nZXMgZG8gbm90IGFsbG9jYXRlIG9yIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGV4cG9zZSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBgbWFjX3BrdGAgaXMgYWxyZWFkeSBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKClgLiBSZWZlcmVuY2UgY291bnRpbmcgYW5kIG1lbW9yeSBsaWZlY3ljbGUgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMsIHdpdGggbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBkZXRlY3RhYmxlIG9ubHkgYnkgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNrX2J1ZmYgcmVmZXJlbmNlIGNvdW50IGhhbmRsaW5nIGluIGllZWU4MDIxNTRfc3ViaWZfZnJhbWUoKSBieSByZW1vdmluZyBza2JfZ2V0KCkgY2FsbHMgd2hlbiBlbnF1ZXVpbmcgYmVhY29uIGFuZCBNQUMgY29tbWFuZCBwYWNrZXRzIHRvIGFzeW5jaHJvbm91cyB3b3JrZXIgcXVldWVzLiBUaGlzIHJlYWNoYWJsZSBuZXR3b3JraW5nIHBhdGggY2FuIGJlIHRlc3RlZCB2aWEgbWFjODAyMTU0X2h3c2ltIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIHZlcmlmeSBza2IgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBjb3JyZWN0bmVzcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM0MjU5NjhiYzRjZjUzOTIyYTVjNjkzNjc5N2FkMzY1Y2VjZDMwMjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDExOjI5OjUzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxNTQvcnguYyBiL25ldC9tYWM4MDIxNTQvcnguY1xuaW5kZXggMTliNTM4MmU4NWE4NC4uYWQ2MDJkMjIyZTg2MSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxNTQvcnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjE1NC9yeC5jXG5AQCAtMjg3LDcgJiM0MzsyODcsNyBAQCBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTU0X3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0aWYgKCFtYWNfcGt0KVxuIFx0XHRcdGdvdG8gZmFpbDtcbiBcbi1cdFx0bWFjX3BrdC1cdTAwM2Vza2IgPSBza2JfZ2V0KHNrYik7XG4mIzQzO1x0XHRtYWNfcGt0LVx1MDAzZXNrYiA9IHNrYjtcbiBcdFx0bWFjX3BrdC1cdTAwM2VzZGF0YSA9IHNkYXRhO1xuIFx0XHRtYWNfcGt0LVx1MDAzZXBhZ2UgPSBzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VzY2FuX3BhZ2U7XG4gXHRcdG1hY19wa3QtXHUwMDNlY2hhbm5lbCA9IHNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZXNjYW5fY2hhbm5lbDtcbkBAIC0zMDQsNyAmIzQzOzMwNCw3IEBAIGllZWU4MDIxNTRfc3ViaWZfZnJhbWUoc3RydWN0IGllZWU4MDIxNTRfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRpZiAoIW1hY19wa3QpXG4gXHRcdFx0Z290byBmYWlsO1xuIFxuLVx0XHRtYWNfcGt0LVx1MDAzZXNrYiA9IHNrYl9nZXQoc2tiKTtcbiYjNDM7XHRcdG1hY19wa3QtXHUwMDNlc2tiID0gc2tiO1xuIFx0XHRtYWNfcGt0LVx1MDAzZXNkYXRhID0gc2RhdGE7XG4gXHRcdG5ldGRldl9ob2xkKHNkYXRhLVx1MDAzZWRldiwgXHUwMDI2bWFjX3BrdC1cdTAwM2VkZXZfdHJhY2tlciwgR0ZQX0FUT01JQyk7XG4gXHRcdHNwaW5fbG9jayhcdTAwMjZzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VyeF9sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJRUVFODAyMTU0JiMzNDssCiAgICAmIzM0O01BQzgwMjE1NCYjMzQ7LAogICAgJiMzNDtJRUVFODAyMTU0X0RSSVZFUlMmIzM0OywKICAgICYjMzQ7SUVFRTgwMjE1NF9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2llZWU4MDIxNTRfc3ViaWZfZnJhbWUmIzM0OywKICAgICYjMzQ7bWFjODAyMTU0X3J4X2JlYWNvbl93b3JrZXImIzM0OywKICAgICYjMzQ7bWFjODAyMTU0X3J4X21hY19jbWRfd29ya2VyJiMzNDssCiAgICAmIzM0O2llZWU4MDIxNTRfcngmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2tfYnVmZiByZWZlcmVuY2UgY291bnQgaGFuZGxpbmcgaW4gaWVlZTgwMjE1NF9zdWJpZl9mcmFtZSgpIGJ5IHJlbW92aW5nIHNrYl9nZXQoKSBjYWxscyB3aGVuIGVucXVldWluZyBiZWFjb24gYW5kIE1BQyBjb21tYW5kIHBhY2tldHMgdG8gYXN5bmNocm9ub3VzIHdvcmtlciBxdWV1ZXMuIFRoaXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgcGF0aCBjYW4gYmUgdGVzdGVkIHZpYSBtYWM4MDIxNTRfaHdzaW0gYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gdmVyaWZ5IHNrYiBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGNvcnJlY3RuZXNzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzQyNTk2OGJjNGNmNTM5MjJhNWM2OTM2Nzk3YWQzNjVjZWNkMzAyNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTE6Mjk6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTU0L3J4LmMgYi9uZXQvbWFjODAyMTU0L3J4LmMKaW5kZXggMTliNTM4MmU4NWE4NC4uYWQ2MDJkMjIyZTg2MSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjE1NC9yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxNTQvcnguYwpAQCAtMjg3LDcgJiM0MzsyODcsNyBAQCBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTU0X3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJaWYgKCFtYWNfcGt0KQogCQkJZ290byBmYWlsOwogCi0JCW1hY19wa3QtJmd0O3NrYiA9IHNrYl9nZXQoc2tiKTsKJiM0MzsJCW1hY19wa3QtJmd0O3NrYiA9IHNrYjsKIAkJbWFjX3BrdC0mZ3Q7c2RhdGEgPSBzZGF0YTsKIAkJbWFjX3BrdC0mZ3Q7cGFnZSA9IHNkYXRhLSZndDtsb2NhbC0mZ3Q7c2Nhbl9wYWdlOwogCQltYWNfcGt0LSZndDtjaGFubmVsID0gc2RhdGEtJmd0O2xvY2FsLSZndDtzY2FuX2NoYW5uZWw7CkBAIC0zMDQsNyAmIzQzOzMwNCw3IEBAIGllZWU4MDIxNTRfc3ViaWZfZnJhbWUoc3RydWN0IGllZWU4MDIxNTRfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQlpZiAoIW1hY19wa3QpCiAJCQlnb3RvIGZhaWw7CiAKLQkJbWFjX3BrdC0mZ3Q7c2tiID0gc2tiX2dldChza2IpOwomIzQzOwkJbWFjX3BrdC0mZ3Q7c2tiID0gc2tiOwogCQltYWNfcGt0LSZndDtzZGF0YSA9IHNkYXRhOwogCQluZXRkZXZfaG9sZChzZGF0YS0mZ3Q7ZGV2LCAmYW1wO21hY19wa3QtJmd0O2Rldl90cmFja2VyLCBHRlBfQVRPTUlDKTsKIAkJc3Bpbl9sb2NrKCZhbXA7c2RhdGEtJmd0O2xvY2FsLSZndDtyeF9sb2NrKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA2MAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQ1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIG1hYzgwMjE1NCBSWCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoaXMgZGlmZiBwcmVzZW50ZWQgdG8gbWUuIEl0JiMzOTtzIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2Ugd2l0aGluIHRoZSBgbmV0L21hYzgwMjE1NC9yeC5jYCBmaWxlLiBUaGUgaW5kZXggbGluZXMgaW5kaWNhdGUgYSB2ZXJzaW9uZWQgY2hhbmdlLCBzbyB0aGlzIGlzIGxpa2VseSBhIHRhcmdldGVkIGJ1ZyBmaXggb3Igb3B0aW1pemF0aW9uLiBJIHNlZSBhIGNvdXBsZSBvZiBpbnN0YW5jZXMgb2Ygd2hhdCBsb29rcyBsaWtlIGEgcG90ZW50aWFsIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZS4gSXQgc2VlbXMgd2UmIzM5O3JlIG1vdmluZyBmcm9tIGEgYHNrYl9nZXQoc2tiKWAgY2FsbCB0byBqdXN0IHVzaW5nIGBza2JgIGRpcmVjdGx5IHdoZW4gYXNzaWduaW5nIHRvIGBtYWNfcGt0LSZndDtza2JgLiBUaGlzIGxpa2VseSBoYXMgdG8gZG8gd2l0aCBzb21lIHNoYXJlZCBtZW1vcnkgaGFuZGxpbmcgYW5kIGVuc3VyaW5nIHRoZSBtZW1vcnkgaXNuJiMzOTt0IGR1cGxpY2F0ZWQuIFRoZSBgbmV0ZGV2X2hvbGRgIGNhbGwgYW5kIHNwaW5sb2NrIHVzYWdlIGZ1cnRoZXIgc3VnZ2VzdCB0aGlzIG1pZ2h0IHJlbGF0ZSB0byBzaGFyZWQgc3RhdGUgb3IgcmVzb3VyY2UgYWNjZXNzLCB3aGljaCBpcyBzb21ldGhpbmcgSSYjMzk7bGwga2VlcCBpbiBtaW5kIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2l0aCBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBhbHRlcmF0aW9uIHdhcyBjaG9zZW4gYW5kIGlmIGl0IGludHJvZHVjZXMgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3IuIEkmIzM5O20ga2VlbiB0byBldmFsdWF0ZSB0aGUgb3ZlcmFsbCBpbXBsaWNhdGlvbnMgZm9yIHBhY2tldCBoYW5kbGluZyBhbmQgcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTU0L3J4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI2MDpcdFx0ZGVmYXVsdDpcbiAyNjE6XHRcdFx0cHJfZGVidWcoXCYjMzQ7aW52YWxpZCBkZXN0IG1vZGVcXG5cJiMzNDspO1xuIDI2MjpcdFx0XHRnb3RvIGZhaWw7XG4gMjYzOlx0XHR9XG4gMjY0Olx0XG4gMjY1Olx0XHRza2ItXHUwMDNlZGV2ID0gc2RhdGEtXHUwMDNlZGV2O1xuIDI2NjpcdFxuIDI2NzpcdFx0LyogVE9ETyB0aGlzIHNob3VsZCBiZSBtb3ZlZCBhZnRlciBuZXRpZl9yZWNlaXZlX3NrYiBjYWxsLCBvdGhlcndpc2VcbiAyNjg6XHRcdCAqIHdpcmVzaGFyayB3aWxsIHNob3cgYSBtYWMgaGVhZGVyIHdpdGggc2VjdXJpdHkgZmllbGRzIGFuZCB0aGVcbiAyNjk6XHRcdCAqIHBheWxvYWQgaXMgYWxyZWFkeSBkZWNyeXB0ZWQuXG4gMjcwOlx0XHQgKi9cbiAyNzE6XHRcdHJjID0gbWFjODAyMTU0X2xsc2VjX2RlY3J5cHQoXHUwMDI2c2RhdGEtXHUwMDNlc2VjLCBza2IpO1xuIDI3MjpcdFx0aWYgKHJjKSB7XG4gMjczOlx0XHRcdHByX2RlYnVnKFwmIzM0O2RlY3J5cHRpb24gZmFpbGVkOiAlaVxcblwmIzM0OywgcmMpO1xuIDI3NDpcdFx0XHRnb3RvIGZhaWw7XG4gMjc1Olx0XHR9XG4gMjc2Olx0XG4gMjc3Olx0XHRzZGF0YS1cdTAwM2VkZXYtXHUwMDNlc3RhdHMucnhfcGFja2V0cyYjNDM7JiM0Mzs7XG4gMjc4Olx0XHRzZGF0YS1cdTAwM2VkZXYtXHUwMDNlc3RhdHMucnhfYnl0ZXMgJiM0Mzs9IHNrYi1cdTAwM2VsZW47XG4gMjc5Olx0XG4gMjgwOlx0XHRzd2l0Y2ggKG1hY19jYihza2IpLVx1MDAzZXR5cGUpIHtcbiAyODE6XHRcdGNhc2UgSUVFRTgwMjE1NF9GQ19UWVBFX0JFQUNPTjpcbiAyODI6XHRcdFx0ZGV2X2RiZyhcdTAwMjZzZGF0YS1cdTAwM2VkZXYtXHUwMDNlZGV2LCBcJiMzNDtCRUFDT04gcmVjZWl2ZWRcXG5cJiMzNDspO1xuIDI4MzpcdFx0XHRpZiAoIW1hYzgwMjE1NF9pc19zY2FubmluZyhzZGF0YS1cdTAwM2Vsb2NhbCkpXG4gMjg0Olx0XHRcdFx0Z290byBmYWlsO1xuIDI4NTpcdFxuIDI4NjpcdFx0XHRtYWNfcGt0ID0ga3phbGxvY19vYmooKm1hY19wa3QsIEdGUF9BVE9NSUMpO1xuIDI4NzpcdFx0XHRpZiAoIW1hY19wa3QpXG4gMjg4Olx0XHRcdFx0Z290byBmYWlsO1xuIDI4OTpcdFxuIDI5MDpcdFx0XHRtYWNfcGt0LVx1MDAzZXNrYiA9IHNrYjtcbiAyOTE6XHRcdFx0bWFjX3BrdC1cdTAwM2VzZGF0YSA9IHNkYXRhO1xuIDI5MjpcdFx0XHRtYWNfcGt0LVx1MDAzZXBhZ2UgPSBzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VzY2FuX3BhZ2U7XG4gMjkzOlx0XHRcdG1hY19wa3QtXHUwMDNlY2hhbm5lbCA9IHNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZXNjYW5fY2hhbm5lbDtcbiAyOTQ6XHRcdFx0bmV0ZGV2X2hvbGQoc2RhdGEtXHUwMDNlZGV2LCBcdTAwMjZtYWNfcGt0LVx1MDAzZWRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcbiAyOTU6XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNnNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZXJ4X2xvY2spO1xuIDI5NjpcdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNm1hY19wa3QtXHUwMDNlbm9kZSwgXHUwMDI2c2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlcnhfYmVhY29uX2xpc3QpO1xuIDI5NzpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VyeF9sb2NrKTtcbiAyOTg6XHRcdFx0cXVldWVfd29yayhzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VtYWNfd3EsIFx1MDAyNnNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZXJ4X2JlYWNvbl93b3JrKTtcbiAyOTk6XHRcdFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xuIDMwMDpcdFxuIDMwMTpcdFx0Y2FzZSBJRUVFODAyMTU0X0ZDX1RZUEVfTUFDX0NNRDpcbiAzMDI6XHRcdFx0ZGV2X2RiZyhcdTAwMjZzZGF0YS1cdTAwM2VkZXYtXHUwMDNlZGV2LCBcJiMzNDtNQUMgQ09NTUFORCByZWNlaXZlZFxcblwmIzM0Oyk7XG4gMzAzOlx0XHRcdG1hY19wa3QgPSBremFsbG9jX29iaigqbWFjX3BrdCwgR0ZQX0FUT01JQyk7XG4gMzA0Olx0XHRcdGlmICghbWFjX3BrdClcbiAzMDU6XHRcdFx0XHRnb3RvIGZhaWw7XG4gMzA2Olx0XG4gMzA3Olx0XHRcdG1hY19wa3QtXHUwMDNlc2tiID0gc2tiO1xuIDMwODpcdFx0XHRtYWNfcGt0LVx1MDAzZXNkYXRhID0gc2RhdGE7XG4gMzA5Olx0XHRcdG5ldGRldl9ob2xkKHNkYXRhLVx1MDAzZWRldiwgXHUwMDI2bWFjX3BrdC1cdTAwM2VkZXZfdHJhY2tlciwgR0ZQX0FUT01JQyk7XG4gMzEwOlx0XHRcdHNwaW5fbG9jayhcdTAwMjZzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VyeF9sb2NrKTtcbiAzMTE6XHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZtYWNfcGt0LVx1MDAzZW5vZGUsIFx1MDAyNnNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZXJ4X21hY19jbWRfbGlzdCk7XG4gMzEyOlx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZXJ4X2xvY2spO1xuIDMxMzpcdFx0XHRxdWV1ZV93b3JrKHNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZW1hY193cSwgXHUwMDI2c2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlcnhfbWFjX2NtZF93b3JrKTtcbiAzMTQ6XHRcdFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xuIDMxNTpcdFxuIDMxNjpcdFx0Y2FzZSBJRUVFODAyMTU0X0ZDX1RZUEVfQUNLOlxuIDMxNzpcdFx0XHRnb3RvIGZhaWw7XG4gMzE4Olx0XG4gMzE5Olx0XHRjYXNlIElFRUU4MDIxNTRfRkNfVFlQRV9EQVRBOlxuIDMyMDpcdFx0XHRyZXR1cm4gaWVlZTgwMjE1NF9kZWxpdmVyX3NrYihza2IpO1xuIDMyMTpcdFx0ZGVmYXVsdDpcbiAzMjI6XHRcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcJiMzNDtpZWVlODAyMTU0OiBiYWQgZnJhbWUgcmVjZWl2ZWQgXCYjMzQ7XG4gMzIzOlx0XHRcdFx0XHQgICAgXCYjMzQ7KHR5cGUgPSAlZClcXG5cJiMzNDssIG1hY19jYihza2IpLVx1MDAzZXR5cGUpO1xuIDMyNDpcdFx0XHRnb3RvIGZhaWw7XG4gMzI1Olx0XHR9XG4gMzI2Olx0XG4gMzI3Olx0ZmFpbDpcbiAzMjg6XHRcdGtmcmVlX3NrYihza2IpO1xuIDMyOTpcdFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xuIDMzMDpcdH1cbiAzMzE6XHRcbiAzMzI6XHRzdGF0aWMgdm9pZFxuIDMzMzpcdGllZWU4MDIxNTRfcHJpbnRfYWRkcihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyICphZGRyKVxuIDMzNDpcdHtcbiAzMzU6XHRcdGlmIChhZGRyLVx1MDAzZW1vZGUgPT0gSUVFRTgwMjE1NF9BRERSX05PTkUpIHtcbiAzMzY6XHRcdFx0cHJfZGVidWcoXCYjMzQ7JXMgbm90IHByZXNlbnRcXG5cJiMzNDssIG5hbWUpO1xuIDMzNzpcdFx0XHRyZXR1cm47XG4gMzM4Olx0XHR9XG4gMzM5Olx0XG4gMzQwOlx0XHRwcl9kZWJ1ZyhcJiMzNDslcyBQQU4gSUQ6ICUwNHhcXG5cJiMzNDssIG5hbWUsIGxlMTZfdG9fY3B1KGFkZHItXHUwMDNlcGFuX2lkKSk7XG4gMzQxOlx0XHRpZiAoYWRkci1cdTAwM2Vtb2RlID09IElFRUU4MDIxNTRfQUREUl9TSE9SVCkge1xuIDM0MjpcdFx0XHRwcl9kZWJ1ZyhcJiMzNDslcyBpcyBzaG9ydDogJTA0eFxcblwmIzM0OywgbmFtZSxcbiAzNDM6XHRcdFx0XHQgbGUxNl90b19jcHUoYWRkci1cdTAwM2VzaG9ydF9hZGRyKSk7XG4gMzQ0Olx0XHR9IGVsc2Uge1xuIDM0NTpcdFx0XHR1NjQgaHcgPSBzd2FiNjQoKF9fZm9yY2UgdTY0KWFkZHItXHUwMDNlZXh0ZW5kZWRfYWRkcik7XG4gMzQ2Olx0XG4gMzQ3Olx0XHRcdHByX2RlYnVnKFwmIzM0OyVzIGlzIGhhcmR3YXJlOiAlOHBoQ1xcblwmIzM0OywgbmFtZSwgXHUwMDI2aHcpO1xuIDM0ODpcdFx0fVxuIDM0OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzMyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBNQUM4MDIxNTQgUmVjZWl2ZSBQYXRoKioKCkFscmlnaHQsIHRpbWUgdG8gdW5kZXJzdGFuZCB0aGUgcmVjZWl2ZSBwcm9jZXNzIGZvciBtYWM4MDIxNTQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGNvbnRleHQgb2YgYGllZWU4MDIxNTRfc3ViaWZfZnJhbWVgLCB0aGF0JiMzOTtzIHRoZSBrZXkgZW50cnkgcG9pbnQuIFRoYXQgbGlrZWx5IGhhcyBhbGwgdGhlIHNwZWNpZmljcyBvZiB0aGUgaGFyZHdhcmUgYWJzdHJhY3Rpb24gYW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoZSBzdWJpbnRlcmZhY2UgbGV2ZWwuIFRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJ4oCZbGwgc3RhcnQgYnkgdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggZnJvbSB0aGUgYHJ4LmNgIGZpbGUuIEkmIzM5O2xsIHJlYWQgYmFja3dhcmRzIGluIHRoYXQgZmlsZSwgbG9va2luZyBmb3IgdGhlIGluaXRpYWwgY2FsbCwgYW5kIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9uIGNhbGxzIGFuZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIExldCYjMzk7cyBzZWUgaG93IHRoZSBNQUMgbGF5ZXIgcmVjZWl2ZXMgdGhlIGluY29taW5nIGZyYW1lcyBhbmQgcGFzc2VzIHRoZW0gdXAgdGhlIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjE1NC9yeC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdC8qXG4gICAzOlx0ICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgU2llbWVucyBBR1xuICAgNDpcdCAqXG4gICA1Olx0ICogV3JpdHRlbiBieTpcbiAgIDY6XHQgKiBQYXZlbCBTbW9sZW5za2l5IFx1MDAzY3BhdmVsLnNtb2xlbnNraXlAZ21haWwuY29tXHUwMDNlXG4gICA3Olx0ICogTWF4aW0gR29yYmFjaHlvdiBcdTAwM2NtYXhpbS5nb3JiYWNoZXZAc2llbWVucy5jb21cdTAwM2VcbiAgIDg6XHQgKiBEbWl0cnkgRXJlbWluLVNvbGVuaWtvdiBcdTAwM2NkYmFyeXNoa292QGdtYWlsLmNvbVx1MDAzZVxuICAgOTpcdCAqIEFsZXhhbmRlciBTbWlybm92IFx1MDAzY2FsZXguYmx1ZXNtYW4uc21pcm5vdkBnbWFpbC5jb21cdTAwM2VcbiAgMTA6XHQgKi9cbiAgMTE6XHRcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9jcmMtY2NpdHQuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4gIDE3Olx0XG4gIDE4Olx0I2luY2x1ZGUgXHUwMDNjbmV0L21hYzgwMjE1NC5oXHUwMDNlXG4gIDE5Olx0I2luY2x1ZGUgXHUwMDNjbmV0L2llZWU4MDIxNTRfbmV0ZGV2LmhcdTAwM2VcbiAgMjA6XHQjaW5jbHVkZSBcdTAwM2NuZXQvbmw4MDIxNTQuaFx1MDAzZVxuICAyMTpcdFxuICAyMjpcdCNpbmNsdWRlIFwmIzM0O2llZWU4MDIxNTRfaS5oXCYjMzQ7XG4gIDIzOlx0XG4gIDI0Olx0c3RhdGljIGludCBpZWVlODAyMTU0X2RlbGl2ZXJfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4gIDI1Olx0e1xuICAyNjpcdFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZO1xuICAyNzpcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSUVFRTgwMjE1NCk7XG4gIDI4Olx0XG4gIDI5Olx0XHRyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTtcbiAgMzA6XHR9XG4gIDMxOlx0XG4gIDMyOlx0dm9pZCBtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gIDMzOlx0e1xuICAzNDpcdFx0c3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsID1cbiAgMzU6XHRcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsLCByeF9iZWFjb25fd29yayk7XG4gIDM2Olx0XHRzdHJ1Y3QgY2ZnODAyMTU0X21hY19wa3QgKm1hY19wa3Q7XG4gIDM3Olx0XG4gIDM4Olx0XHRmb3IgKDs7KSB7XG4gIDM5Olx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VyeF9sb2NrKTtcbiAgNDA6XHRcdFx0bWFjX3BrdCA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcdTAwMjZsb2NhbC1cdTAwM2VyeF9iZWFjb25fbGlzdCxcbiAgNDE6XHRcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgY2ZnODAyMTU0X21hY19wa3QsIG5vZGUpO1xuICA0MjpcdFx0XHRpZiAobWFjX3BrdClcbiAgNDM6XHRcdFx0XHRsaXN0X2RlbChcdTAwMjZtYWNfcGt0LVx1MDAzZW5vZGUpO1xuICA0NDpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VyeF9sb2NrKTtcbiAgNDU6XHRcdFx0aWYgKCFtYWNfcGt0KVxuICA0NjpcdFx0XHRcdGJyZWFrO1xuICA0NzpcdFxuICA0ODpcdFx0XHRtYWM4MDIxNTRfcHJvY2Vzc19iZWFjb24obG9jYWwsIG1hY19wa3QtXHUwMDNlc2tiLFxuICA0OTpcdFx0XHRcdFx0XHQgbWFjX3BrdC1cdTAwM2VwYWdlLCBtYWNfcGt0LVx1MDAzZWNoYW5uZWwpO1xuICA1MDpcdFxuICA1MTpcdFx0XHRuZXRkZXZfcHV0KG1hY19wa3QtXHUwMDNlc2RhdGEtXHUwMDNlZGV2LCBcdTAwMjZtYWNfcGt0LVx1MDAzZWRldl90cmFja2VyKTtcbiAgNTI6XHRcdFx0a2ZyZWVfc2tiKG1hY19wa3QtXHUwMDNlc2tiKTtcbiAgNTM6XHRcdFx0a2ZyZWUobWFjX3BrdCk7XG4gIDU0Olx0XHR9XG4gIDU1Olx0fVxuICA1NjpcdFxuICA1NzpcdHN0YXRpYyBib29sIG1hYzgwMjE1NF9zaG91bGRfYW5zd2VyX2JlYWNvbl9yZXEoc3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsKVxuICA1ODpcdHtcbiAgNTk6XHRcdHN0cnVjdCBjZmc4MDIxNTRfYmVhY29uX3JlcXVlc3QgKmJlYWNvbl9yZXE7XG4gIDYwOlx0XHR1bnNpZ25lZCBpbnQgaW50ZXJ2YWw7XG4gIDYxOlx0XG4gIDYyOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gIDYzOlx0XHRiZWFjb25fcmVxID0gcmN1X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWJlYWNvbl9yZXEpO1xuICA2NDpcdFx0aWYgKCFiZWFjb25fcmVxKSB7XG4gIDY1Olx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuICA2NjpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gIDY3Olx0XHR9XG4gIDY4Olx0XG4gIDY5Olx0XHRpbnRlcnZhbCA9IGJlYWNvbl9yZXEtXHUwMDNlaW50ZXJ2YWw7XG4gIDcwOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAgNzE6XHRcbiAgNzI6XHRcdGlmICghbWFjODAyMTU0X2lzX2JlYWNvbmluZyhsb2NhbCkpXG4gIDczOlx0XHRcdHJldHVybiBmYWxzZTtcbiAgNzQ6XHRcbiAgNzU6XHRcdHJldHVybiBpbnRlcnZhbCA9PSBJRUVFODAyMTU0X0FDVElWRV9TQ0FOX0RVUkFUSU9OO1xuICA3NjpcdH1cbiAgNzc6XHRcbiAgNzg6XHRzdGF0aWMgdm9pZCBtYWM4MDIxNTRfcnhfbWFjX2NtZChzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwsXG4gIDc5Olx0XHRcdFx0XHQgc3RydWN0IGNmZzgwMjE1NF9tYWNfcGt0ICptYWNfcGt0KVxuICA4MDpcdHtcbiAgODE6XHRcdHU4IG1hY19jbWQ7XG4gIDgyOlx0XHRpbnQgcmM7XG4gIDgzOlx0XG4gIDg0Olx0XHRyYyA9IGllZWU4MDIxNTRfZ2V0X21hY19jbWQobWFjX3BrdC1cdTAwM2Vza2IsIFx1MDAyNm1hY19jbWQpO1xuICA4NTpcdFx0aWYgKHJjKVxuICA4NjpcdFx0XHRyZXR1cm47XG4gIDg3Olx0XG4gIDg4Olx0XHRzd2l0Y2ggKG1hY19jbWQpIHtcbiAgODk6XHRcdGNhc2UgSUVFRTgwMjE1NF9DTURfQkVBQ09OX1JFUTpcbiAgOTA6XHRcdFx0ZGV2X2RiZyhcdTAwMjZtYWNfcGt0LVx1MDAzZXNkYXRhLVx1MDAzZWRldi1cdTAwM2VkZXYsIFwmIzM0O3Byb2Nlc3NpbmcgQkVBQ09OIFJFUVxcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk3NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIEJlYWNvbiBhbmQgTUFDIENvbW1hbmQgUHJvY2Vzc2luZyBpbiB0aGUgODAyLjE1LjQgU3RhY2sqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgYmVhY29uIGFuZCBNQUMgY29tbWFuZCByZWNlcHRpb24gYXJlIGhhbmRsZWQgaW4gdGhlIDgwMi4xNS40IGRyaXZlci4gRmlyc3QsIGBtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlcmAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIHRoZSBwcm9jZXNzaW5nIG9mIGJlYWNvbiBmcmFtZXMuIEZyb20gdGhlIGNvZGUgc25pcHBldCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgY2FsbHMgYG1hYzgwMjE1NF9wcm9jZXNzX2JlYWNvbmAsIHBhc3NlcyB0aGUgcmVsZXZhbnQgcGFja2V0IGRhdGEg4oCTIHRoZSBgc2tiYCwgcGFnZSwgYW5kIGNoYW5uZWwg4oCTIGFuZCBnZXRzIHRvIHdvcmsuIEZvbGxvd2luZyB0aGF0LCBpdCBuZWF0bHkgY2xlYW5zIHVwIHRoZSBtZW1vcnk6IEl0IHJlbGVhc2VzIHRoZSBuZXR3b3JrIGRldmljZSByZWZlcmVuY2Ugd2l0aCBgbmV0ZGV2X3B1dGAsIGZyZWVzIHRoZSBgc2tiYCB3aXRoIGBrZnJlZV9za2JgLCBhbmQgZmluYWxseSBmcmVlcyB0aGUgYWxsb2NhdGVkIGBtYWNfcGt0YCBpdHNlbGYuIFRoaXMgc2hvd3MgYSB3ZWxsLWRlZmluZWQgcHJvY2VzcyB0byBtZSwgZW5zdXJpbmcgcHJvcGVyIHJlc291cmNlIG1hbmFnZW1lbnQgYWZ0ZXIgcHJvY2Vzc2luZy4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IE1BQyBjb21tYW5kcyBhcmUgaGFuZGxlZCwgc28gSSYjMzk7bGwgbmVlZCB0byB0dXJuIG15IGF0dGVudGlvbiB0byB0aGUgYG1hYzgwMjE1NF9yeF9tYWNfY21kX3dvcmtlcmAgZnVuY3Rpb24uIEkgd2lsbCBuZWVkIHRvIGNvbnN1bHQgdGhlIGNvZGUgZnJvbSBsaW5lcyA5MCB0byAyMDAgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjE1NC9yeC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5MTpcdFx0XHRpZiAoIW1hYzgwMjE1NF9zaG91bGRfYW5zd2VyX2JlYWNvbl9yZXEobG9jYWwpKVxuICA5MjpcdFx0XHRcdGJyZWFrO1xuICA5MzpcdFxuICA5NDpcdFx0XHRxdWV1ZV9kZWxheWVkX3dvcmsobG9jYWwtXHUwMDNlbWFjX3dxLCBcdTAwMjZsb2NhbC1cdTAwM2ViZWFjb25fd29yaywgMCk7XG4gIDk1Olx0XHRcdGJyZWFrO1xuICA5NjpcdFxuICA5NzpcdFx0Y2FzZSBJRUVFODAyMTU0X0NNRF9BU1NPQ0lBVElPTl9SRVNQOlxuICA5ODpcdFx0XHRkZXZfZGJnKFx1MDAyNm1hY19wa3QtXHUwMDNlc2RhdGEtXHUwMDNlZGV2LVx1MDAzZWRldiwgXCYjMzQ7cHJvY2Vzc2luZyBBU1NPQyBSRVNQXFxuXCYjMzQ7KTtcbiAgOTk6XHRcdFx0aWYgKCFtYWM4MDIxNTRfaXNfYXNzb2NpYXRpbmcobG9jYWwpKVxuIDEwMDpcdFx0XHRcdGJyZWFrO1xuIDEwMTpcdFxuIDEwMjpcdFx0XHRtYWM4MDIxNTRfcHJvY2Vzc19hc3NvY2lhdGlvbl9yZXNwKG1hY19wa3QtXHUwMDNlc2RhdGEsIG1hY19wa3QtXHUwMDNlc2tiKTtcbiAxMDM6XHRcdFx0YnJlYWs7XG4gMTA0Olx0XG4gMTA1Olx0XHRjYXNlIElFRUU4MDIxNTRfQ01EX0FTU09DSUFUSU9OX1JFUTpcbiAxMDY6XHRcdFx0ZGV2X2RiZyhcdTAwMjZtYWNfcGt0LVx1MDAzZXNkYXRhLVx1MDAzZWRldi1cdTAwM2VkZXYsIFwmIzM0O3Byb2Nlc3NpbmcgQVNTT0MgUkVRXFxuXCYjMzQ7KTtcbiAxMDc6XHRcdFx0aWYgKG1hY19wa3QtXHUwMDNlc2RhdGEtXHUwMDNld3Bhbl9kZXYuaWZ0eXBlICE9IE5MODAyMTU0X0lGVFlQRV9DT09SRClcbiAxMDg6XHRcdFx0XHRicmVhaztcbiAxMDk6XHRcbiAxMTA6XHRcdFx0bWFjODAyMTU0X3Byb2Nlc3NfYXNzb2NpYXRpb25fcmVxKG1hY19wa3QtXHUwMDNlc2RhdGEsIG1hY19wa3QtXHUwMDNlc2tiKTtcbiAxMTE6XHRcdFx0YnJlYWs7XG4gMTEyOlx0XG4gMTEzOlx0XHRjYXNlIElFRUU4MDIxNTRfQ01EX0RJU0FTU09DSUFUSU9OX05PVElGWTpcbiAxMTQ6XHRcdFx0ZGV2X2RiZyhcdTAwMjZtYWNfcGt0LVx1MDAzZXNkYXRhLVx1MDAzZWRldi1cdTAwM2VkZXYsIFwmIzM0O3Byb2Nlc3NpbmcgRElTQVNTT0MgTk9USUZcXG5cJiMzNDspO1xuIDExNTpcdFx0XHRpZiAobWFjX3BrdC1cdTAwM2VzZGF0YS1cdTAwM2V3cGFuX2Rldi5pZnR5cGUgIT0gTkw4MDIxNTRfSUZUWVBFX0NPT1JEKVxuIDExNjpcdFx0XHRcdGJyZWFrO1xuIDExNzpcdFxuIDExODpcdFx0XHRtYWM4MDIxNTRfcHJvY2Vzc19kaXNhc3NvY2lhdGlvbl9ub3RpZihtYWNfcGt0LVx1MDAzZXNkYXRhLCBtYWNfcGt0LVx1MDAzZXNrYik7XG4gMTE5Olx0XHRcdGJyZWFrO1xuIDEyMDpcdFxuIDEyMTpcdFx0ZGVmYXVsdDpcbiAxMjI6XHRcdFx0YnJlYWs7XG4gMTIzOlx0XHR9XG4gMTI0Olx0fVxuIDEyNTpcdFxuIDEyNjpcdHZvaWQgbWFjODAyMTU0X3J4X21hY19jbWRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiAxMjc6XHR7XG4gMTI4Olx0XHRzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwgPVxuIDEyOTpcdFx0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxNTRfbG9jYWwsIHJ4X21hY19jbWRfd29yayk7XG4gMTMwOlx0XHRzdHJ1Y3QgY2ZnODAyMTU0X21hY19wa3QgKm1hY19wa3Q7XG4gMTMxOlx0XG4gMTMyOlx0XHRmb3IgKDs7KSB7XG4gMTMzOlx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VyeF9sb2NrKTtcbiAxMzQ6XHRcdFx0bWFjX3BrdCA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcdTAwMjZsb2NhbC1cdTAwM2VyeF9tYWNfY21kX2xpc3QsXG4gMTM1Olx0XHRcdFx0XHRcdFx0ICAgc3RydWN0IGNmZzgwMjE1NF9tYWNfcGt0LCBub2RlKTtcbiAxMzY6XHRcdFx0aWYgKG1hY19wa3QpXG4gMTM3Olx0XHRcdFx0bGlzdF9kZWwoXHUwMDI2bWFjX3BrdC1cdTAwM2Vub2RlKTtcbiAxMzg6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlcnhfbG9jayk7XG4gMTM5Olx0XHRcdGlmICghbWFjX3BrdClcbiAxNDA6XHRcdFx0XHRicmVhaztcbiAxNDE6XHRcbiAxNDI6XHRcdFx0LyogQSBzdG9wcGVkIGludGVyZmFjZSBjYW5ub3QgdHJhbnNtaXQ7IHNraXBwaW5nIGF2b2lkcyBhXG4gMTQzOlx0XHRcdCAqIG5lZWRsZXNzIGFzc29jaWF0aW9uIHJlc3BvbnNlIChhbmQgdGhlICFuZXRpZl9ydW5uaW5nKClcbiAxNDQ6XHRcdFx0ICogd2FybmluZyBpdCB3b3VsZCB0cmlwKSBkdXJpbmcgdGVhcmRvd24uIFRoZSBiZWFjb24gd29ya2VyXG4gMTQ1Olx0XHRcdCAqIG5lZWRzIG5vIHN1Y2ggY2hlY2sgYXMgaXQgbmV2ZXIgdHJhbnNtaXRzLlxuIDE0NjpcdFx0XHQgKi9cbiAxNDc6XHRcdFx0aWYgKGllZWU4MDIxNTRfc2RhdGFfcnVubmluZyhtYWNfcGt0LVx1MDAzZXNkYXRhKSlcbiAxNDg6XHRcdFx0XHRtYWM4MDIxNTRfcnhfbWFjX2NtZChsb2NhbCwgbWFjX3BrdCk7XG4gMTQ5Olx0XG4gMTUwOlx0XHRcdG5ldGRldl9wdXQobWFjX3BrdC1cdTAwM2VzZGF0YS1cdTAwM2VkZXYsIFx1MDAyNm1hY19wa3QtXHUwMDNlZGV2X3RyYWNrZXIpO1xuIDE1MTpcdFx0XHRrZnJlZV9za2IobWFjX3BrdC1cdTAwM2Vza2IpO1xuIDE1MjpcdFx0XHRrZnJlZShtYWNfcGt0KTtcbiAxNTM6XHRcdH1cbiAxNTQ6XHR9XG4gMTU1Olx0XG4gMTU2Olx0LyoqXG4gMTU3Olx0ICogbWFjODAyMTU0X2ZsdXNoX2xpc3QgLSBmcmVlIHF1ZXVlZCBSWCBmcmFtZXMgb24gQGxpc3RcbiAxNTg6XHQgKiBAbGlzdDogcnhfYmVhY29uX2xpc3Qgb3IgcnhfbWFjX2NtZF9saXN0XG4gMTU5Olx0ICogQHNkYXRhOiBvbmx5IGZyZWUgZnJhbWVzIHJlY2VpdmVkIG9uIHRoaXMgaW50ZXJmYWNlLCBvciAlTlVMTCBmb3IgYWxsXG4gMTYwOlx0ICpcbiAxNjE6XHQgKiBFYWNoIGZyYW1lIHBpbnMgdGhlIG5ldF9kZXZpY2UgaXQgd2FzIHJlY2VpdmVkIG9uICh2aWEgbmV0ZGV2X2hvbGQoKSksXG4gMTYyOlx0ICogc28gcmVsZWFzZSB0aGF0IHJlZmVyZW5jZSBhcyB0aGUgZnJhbWUgaXMgZHJvcHBlZC4gQ2FsbGVyIG11c3QgaG9sZFxuIDE2MzpcdCAqIGxvY2FsLVx1MDAzZXJ4X2xvY2suXG4gMTY0Olx0ICovXG4gMTY1Olx0dm9pZCBtYWM4MDIxNTRfZmx1c2hfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuIDE2NjpcdFx0XHRcdCAgc3RydWN0IGllZWU4MDIxNTRfc3ViX2lmX2RhdGEgKnNkYXRhKVxuIDE2NzpcdHtcbiAxNjg6XHRcdHN0cnVjdCBjZmc4MDIxNTRfbWFjX3BrdCAqbWFjX3BrdCwgKnRtcDtcbiAxNjk6XHRcbiAxNzA6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtYWNfcGt0LCB0bXAsIGxpc3QsIG5vZGUpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODM3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSUVFRSA4MDIuMTUuNCBGcmFtZSBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdoYXQgaGFwcGVucyB3aGVuIHRoZSBmcmFtZSB0eXBlIGlzIGVpdGhlciBhIGJlYWNvbiBvciBhIE1BQyBjb21tYW5kLiBUaGUgY29kZSBzbmlwcGV0IG1lbnRpb25zIGFuIGludGVyZXN0aW5nIGJlaGF2aW9yOiBpdCBhcHBlYXJzIHRoYXQgYHNrYl9nZXQoc2tiKWAgd2FzIHByZXZpb3VzbHkgdXNlZCB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gVGhlIGZ1bmN0aW9uIHJldHVybmVkIGBORVRfUlhfU1VDQ0VTU2AgdW5kZXIgdGhlc2UgY29uZGl0aW9ucywgd2l0aG91dCBmcmVlaW5nIHRoZSBTS0IuIE5vdywgdGhhdCYjMzk7cyBhIHJlZCBmbGFnLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpczogd2hvIGFjdHVhbGx5IG93bnMgdGhlIFNLQiwgdGhlIHBhY2tldCBidWZmZXIsIGFmdGVyIHRoaXMgcG9pbnQ/IFRoZSBvcmlnaW5hbCBjYWxsZXIgbGlrZWx5IGRvZXNuJiMzOTt0IGFueSBtb3JlLCBzbyBzb21lb25lIGVsc2UgaGFzIHRvIGZyZWUgaXQuIFRoZSBjb2RlIHNlZW1zIHRvIGFzc3VtZSB0aGF0LgoKVGhlIGZhY3QgdGhhdCBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZWAgb25seSBmcmVlcyB0aGUgU0tCIGluIHRoZSBgZmFpbDpgIHBhdGggaXMgYSBjbHVlLiBUaGlzIGRpc2NyZXBhbmN5IGlzIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgYW5kIGlkZW50aWZ5IGFsbCB0aGUgY2FsbGVycyBvZiBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZWAgdG8gdW5kZXJzdGFuZCB0aGUgb3duZXJzaGlwIGFuZCB0aGUgZXhwZWN0ZWQgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuIFRoYXQmIzM5O3MgdGhlIGtleSB0byBmaWd1cmluZyBvdXQgaWYgdGhpcyBpcyBjb3JyZWN0IGFuZCBlbnN1cmluZyB0aGF0IHRoZSBTS0IgaXMgcHJvcGVybHkgcmVsZWFzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2llZWU4MDIxNTRfc3ViaWZfZnJhbWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjE1NC9yeC5jPTIwMT1zdGF0aWMgaW50XG5uZXQvbWFjODAyMTU0L3J4LmM6MjAyOmllZWU4MDIxNTRfc3ViaWZfZnJhbWUoc3RydWN0IGllZWU4MDIxNTRfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjE1NC9yeC5jLTIwMy1cdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTU0X2hkciAqaGRyKVxuLS1cbm5ldC9tYWM4MDIxNTQvcnguYz00MTE9X19pZWVlODAyMTU0X3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxNTQvcnguYy00NDEtXHRcdFx0c2tiMi1cdTAwM2VkZXYgPSBzZGF0YS1cdTAwM2VkZXY7XG5uZXQvbWFjODAyMTU0L3J4LmM6NDQyOlx0XHRcdGllZWU4MDIxNTRfc3ViaWZfZnJhbWUoc2RhdGEsIHNrYjIsIFx1MDAyNmhkcik7XG5uZXQvbWFjODAyMTU0L3J4LmMtNDQzLVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1OTMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIE1BQyBMYXllciBSZWNlaXZlIFBhdGgqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHJlY2VpdmUgcGF0aCB3aXRoaW4gdGhlIE1BQyA4MDIuMTUuNCBsYXllciwgc3BlY2lmaWNhbGx5IGluIGBuZXQvbWFjODAyMTU0L3J4LmNgLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgbG9naWMgYXJvdW5kIGxpbmUgNDExLiBJIGhhdmUgYSBodW5jaCBhYm91dCBhIHBvdGVudGlhbCBpc3N1ZSByZWxhdGVkIHRvIFtpbnNlcnQgeW91ciBmaWVsZCYjMzk7cyByZWxldmFudCB0ZWNobmljYWwgYXNwZWN0IGhlcmUgLSBlLmcuLCBmcmFtZSBmaWx0ZXJpbmcsIGFkZHJlc3MgbWF0Y2hpbmcsIEFDSyBwcm9jZXNzaW5nLCBldGMuXS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY3J1Y2lhbCBjb2RlIHJlc3BvbnNpYmxlIGZvciBbZGVzY3JpYmUgdGhlIGNvZGUmIzM5O3MgZXhwZWN0ZWQgZnVuY3Rpb25dLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBzcGVjaWZpYyBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIHRoYXQgdGFrZSBwbGFjZSBhZnRlciBhIHZhbGlkIDgwMi4xNS40IGZyYW1lIGlzIHJlY2VpdmVkIGF0IHRoZSBwaHlzaWNhbCBsYXllciwgaW5jbHVkaW5nIHRoaW5ncyBsaWtlIGNoZWNraW5nIGZyYW1lIHZhbGlkaXR5LCBmaWx0ZXJpbmcgYnkgYWRkcmVzc2luZyBvciBNQUMgY29tbWFuZHMsIGRldGVybWluaW5nIHdoaWNoIHVwcGVyIGxheWVyIGVudGl0eSBnZXRzIHRoZSBmcmFtZSwgYW5kIGhhbmRsaW5nIGFueSBhc3NvY2lhdGVkIGFja25vd2xlZGdlbWVudHMuIEkgd2FudCB0byBzZWUgaWYgdGhlIGltcGxlbWVudGF0aW9uIHRha2VzIFtyZWxldmFudCB0ZWNobmljYWwgZGV0YWlsLCBzdWNoIGFzIGludGVycnVwdCBoYW5kbGluZywgY29udGV4dCBzd2l0Y2hpbmcsIHF1ZXVlaW5nLCBETUEgY29uZmlndXJhdGlvbiwgZXRjLl0gaW50byBhY2NvdW50LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBbc3BlY2lmaWMgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBvciBmdW5jdGlvbnNdIGFyZSB1c2VkIGhlcmUgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgY29kZSB3b3JrcyBhbmQgc2VlIGlmIG15IGh1bmNoIGFib3V0IHRoZSBwcm9ibGVtIGhvbGRzIHVwLiBJIGJldCB0aGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBiaXQgaGFwcGVucyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTU0L3J4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQxMDpcdHN0YXRpYyB2b2lkXG4gNDExOlx0X19pZWVlODAyMTU0X3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsLFxuIDQxMjpcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4gNDEzOlx0e1xuIDQxNDpcdFx0aW50IHJldDtcbiA0MTU6XHRcdHN0cnVjdCBpZWVlODAyMTU0X3N1Yl9pZl9kYXRhICpzZGF0YTtcbiA0MTY6XHRcdHN0cnVjdCBpZWVlODAyMTU0X2hkciBoZHI7XG4gNDE3Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjtcbiA0MTg6XHRcbiA0MTk6XHRcdHJldCA9IGllZWU4MDIxNTRfcGFyc2VfZnJhbWVfc3RhcnQoc2tiLCBcdTAwMjZoZHIpO1xuIDQyMDpcdFx0aWYgKHJldCkge1xuIDQyMTpcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtnb3QgaW52YWxpZCBmcmFtZVxcblwmIzM0Oyk7XG4gNDIyOlx0XHRcdHJldHVybjtcbiA0MjM6XHRcdH1cbiA0MjQ6XHRcbiA0MjU6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG4gNDI2Olx0XHRcdGlmIChzZGF0YS1cdTAwM2V3cGFuX2Rldi5pZnR5cGUgPT0gTkw4MDIxNTRfSUZUWVBFX01PTklUT1IpXG4gNDI3Olx0XHRcdFx0Y29udGludWU7XG4gNDI4Olx0XG4gNDI5Olx0XHRcdGlmICghaWVlZTgwMjE1NF9zZGF0YV9ydW5uaW5nKHNkYXRhKSlcbiA0MzA6XHRcdFx0XHRjb250aW51ZTtcbiA0MzE6XHRcbiA0MzI6XHRcdFx0LyogRG8gbm90IGRlbGl2ZXIgcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2VzIGV4cGVjdGluZ1xuIDQzMzpcdFx0XHQgKiBBQUNLPTEgaWYgdGhlIGFkZHJlc3MgZmlsdGVycyB3aGVyZSBkaXNhYmxlZC5cbiA0MzQ6XHRcdFx0ICovXG4gNDM1Olx0XHRcdGlmIChsb2NhbC1cdTAwM2Vody5waHktXHUwMDNlZmlsdGVyaW5nIFx1MDAzYyBJRUVFODAyMTU0X0ZJTFRFUklOR180X0ZSQU1FX0ZJRUxEUyBcdTAwMjZcdTAwMjZcbiA0MzY6XHRcdFx0ICAgIHNkYXRhLVx1MDAzZXJlcXVpcmVkX2ZpbHRlcmluZyA9PSBJRUVFODAyMTU0X0ZJTFRFUklOR180X0ZSQU1FX0ZJRUxEUylcbiA0Mzc6XHRcdFx0XHRjb250aW51ZTtcbiA0Mzg6XHRcbiA0Mzk6XHRcdFx0c2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xuIDQ0MDpcdFx0XHRpZiAoc2tiMikge1xuIDQ0MTpcdFx0XHRcdHNrYjItXHUwMDNlZGV2ID0gc2RhdGEtXHUwMDNlZGV2O1xuIDQ0MjpcdFx0XHRcdGllZWU4MDIxNTRfc3ViaWZfZnJhbWUoc2RhdGEsIHNrYjIsIFx1MDAyNmhkcik7XG4gNDQzOlx0XHRcdH1cbiA0NDQ6XHRcdH1cbiA0NDU6XHR9XG4gNDQ2Olx0XG4gNDQ3Olx0c3RhdGljIHZvaWRcbiA0NDg6XHRpZWVlODAyMTU0X21vbml0b3JzX3J4KHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA0NDk6XHR7XG4gNDUwOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjtcbiA0NTE6XHRcdHN0cnVjdCBpZWVlODAyMTU0X3N1Yl9pZl9kYXRhICpzZGF0YTtcbiA0NTI6XHRcbiA0NTM6XHRcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4gNDU0Olx0XHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XG4gNDU1Olx0XHRza2ItXHUwMDNlcGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUO1xuIDQ1NjpcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSUVFRTgwMjE1NCk7XG4gNDU3Olx0XG4gNDU4Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xuIDQ1OTpcdFx0XHRpZiAoc2RhdGEtXHUwMDNld3Bhbl9kZXYuaWZ0eXBlICE9IE5MODAyMTU0X0lGVFlQRV9NT05JVE9SKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgzMAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgU0tCIFJlZmNvdW50IExlYWsgaW4gSUVFRSA4MDIuMTUuNCBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBfX2llZWU4MDIxNTRfcnhfaGFuZGxlX3BhY2tldGAgZnVuY3Rpb24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBpdCYjMzk7cyBjbG9uaW5nIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgdG8gYHNrYjJgLCBpbmNyZWFzaW5nIGl0cyByZWZlcmVuY2UgY291bnQgdG8gMSwgYW5kIHRoZW4gcGFzc2luZyBpdCB0byBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZWAuIFRoaXMgaXMgc3RhbmRhcmQsIGJ1dCB0aGUgZm9sbG93aW5nIGxvZ2ljIGluIGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lYCBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nIGFuZCBjb25jZXJuaW5nLgoKSWYgdGhlcmUmIzM5O3MgYSBmYWlsdXJlIGluIGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lYCwgdGhlIGBza2JgIGlzIGZyZWVkLiBUaGF0JiMzOTtzIGV4cGVjdGVkLiBIb3dldmVyLCB3aGVuIGl0JiMzOTtzIGEgREFUQSBmcmFtZSwgaXQmIzM5O3MgcGFzc2VkIGRpcmVjdGx5IHRvIGBuZXRpZl9yZWNlaXZlX3NrYmAgdmlhIGBpZWVlODAyMTU0X2RlbGl2ZXJfc2tiYCwgYW5kIHRoYXQmIzM5O3MgYWxzbyBmaW5lLCB3aGljaCBpcyB0aGUgZXhwZWN0ZWQgaGFwcHkgcGF0aC4gVGhlIHBvdGVudGlhbCBpc3N1ZSBhcmlzZXMgd2l0aCBCRUFDT04gb3IgTUFDX0NNRCBmcmFtZXMuIFByZXZpb3VzbHksIGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lYCB3b3VsZCBjYWxsIGBza2JfZ2V0KHNrYilgIGJlZm9yZSByZXR1cm5pbmcgYE5FVF9SWF9TVUNDRVNTYC4gVGhpcyBtZWFudCBgc2tiMmAgKHRoZSBjbG9uZWQgYnVmZmVyKSBub3cgaGFkIGEgcmVmY291bnQgb2YgMiEgVGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhhdCBvbmx5IGEgc2luZ2xlIGBrZnJlZV9za2JgIHdhcyBwZXJmb3JtZWQgbGF0ZXIgaW4gdGhlIGBtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlcmAgb3IgYG1hYzgwMjE1NF9yeF9tYWNfY21kX3dvcmtlcmAuIFRoaXMgcmVwcmVzZW50cyBhIGNsZWFyIFNLQiBtZW1vcnkgbGVhayBiZWNhdXNlIG9uZSBvZiB0aGUgcmVmZXJlbmNlcyB3YXMgbmV2ZXIgcmVsZWFzZWQsIGxlYWRpbmcgdG8gYW4gaW5jcmVhc2luZyBtZW1vcnkgZm9vdHByaW50LgoKVGhlIGZpeCwgbG9naWNhbGx5LCBpcyBzdHJhaWdodGZvcndhcmQuIFJlbW92aW5nIHRoYXQgYHNrYl9nZXQoc2tiKWAgY2FsbCBlbnN1cmVzIHRoYXQgdGhlIGBtYWNfcGt0YCBjb25zdW1lcyB0aGUgY2FsbGVyJiMzOTtzIHJlZmVyZW5jZSB0byBgc2tiYCBhbmQgYXZvaWRzIHRoZSByZWZjb3VudCBtaXNtYXRjaC4gQnkgbm90IHRha2luZyBhbiBhZGRpdGlvbmFsIHJlZmVyZW5jZSwgd2UgZW5zdXJlIHRoYXQgdGhlIGJ1ZmZlciBpcyBmcmVlZCB3aGVuIGl0JiMzOTtzIG5vIGxvbmdlciBuZWVkZWQgaW4gc3Vic2VxdWVudCBwcm9jZXNzaW5nLgoKTm93LCBteSBuZXh0IHRob3VnaHQgaXMgYWJvdXQgcmVhY2hhYmlsaXR5IGFuZCBmdXp6YWJpbGl0eS4gSSBuZWVkIHRvIGFzc2VzcyB3aGV0aGVyIGFuZCBob3cgYG1hYzgwMjE1NGAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHN1Y2ggYXMgdGhvc2UgdXNlZCBieSBRRU1VIG9yIHN5emthbGxlci4gVGhlIHF1ZXN0aW9uIGJvaWxzIGRvd24gdG8gd2hldGhlciBJRUVFIDgwMi4xNS40IGFuZCBgbWFjODAyMTU0YCBhcmUgZW11bGF0ZWQgb3IgdXRpbGl6ZWQgd2l0aGluIHRoZXNlIGVudmlyb25tZW50cy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHNwZWNpZmljIGFyZWFzOiBgZHJpdmVycy9uZXQvaWVlZTgwMjE1NGAsIGBuZXQvbWFjODAyMTU0YCwgYW5kIGFueSB2aXJ0dWFsIGRldmljZXMgbGlrZSBgZmFrZWxiYCwgYG1hYzgwMjE1NF9od3NpbWAsIG9yIGBubDgwMjE1NGAuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhlIGRyaXZlcuKAmXMgb3BlcmF0aW9uIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudCBpcyBlc3NlbnRpYWwgdG8gZXN0YWJsaXNoIHRoZSByaXNrIHByb2ZpbGUgb2YgdGhpcyBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFjODAyMTU0X2h3c2ltJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZz0xMTQ9Y29uZmlnIElFRUU4MDIxNTRfSFdTSU1cbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMTIyLVx0ICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gVG8gZG8gc28gc2F5IE0gaGVyZS5cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzoxMjM6XHQgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgJiMzOTttYWM4MDIxNTRfaHdzaW0mIzM5Oy5cbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX0lFRUU4MDIxNTRfTUNSMjBBKSAmIzQzOz0gbWNyMjBhLm9cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX0lFRUU4MDIxNTRfSFdTSU0pICYjNDM7PSBtYWM4MDIxNTRfaHdzaW0ub1xuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvZmFrZWxiLmM9MjQ0PXN0YXRpYyBfX2luaXQgaW50IGZha2VsYl9pbml0X21vZHVsZSh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvZmFrZWxiLmMtMjQ4LVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9mYWtlbGIuYzoyNDk6XHRwcl93YXJuKFwmIzM0O2Zha2VsYiBkcml2ZXIgaXMgbWFya2VkIGFzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgbWFjODAyMTU0X2h3c2ltIVxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L2Zha2VsYi5jLTI1MC1cbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jLTI0LSNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYzoyNTojaW5jbHVkZSBcJiMzNDttYWM4MDIxNTRfaHdzaW0uaFwmIzM0O1xuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYy0yNi1cbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jPTEwNTI9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWFjODAyMTU0aHdzaW1fZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmMtMTA1NS1cdC5kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jOjEwNTY6XHRcdFx0Lm5hbWUgPSBcJiMzNDttYWM4MDIxNTRfaHdzaW1cJiMzNDssXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jLTEwNTctXHR9LFxuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmM9MTA2MD1zdGF0aWMgX19pbml0IGludCBod3NpbV9pbml0X21vZHVsZSh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmMtMTA2Ny1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmM6MTA2ODpcdG1hYzgwMjE1NGh3c2ltX2RldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoXCYjMzQ7bWFjODAyMTU0X2h3c2ltXCYjMzQ7LFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYy0xMDY5LVx0XHRcdFx0XHRcdFx0ICAgICAtMSwgTlVMTCwgMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzM0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBtYWM4MDIxNTRfaHdzaW0gRnV6emluZyoqCgpPa2F5LCBzbyBgbWFjODAyMTU0X2h3c2ltYC4gVGhhdCYjMzk7cyB0aGUgc2ltdWxhdGVkIDgwMi4xNS40IHJhZGlvIGhhcmR3YXJlIGRyaXZlciBpbiBMaW51eC4gSSBrbm93IHRoaXMsIGl0JiMzOTtzIHByZXR0eSB3ZWxsLWVzdGFibGlzaGVkIG5vdy4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgaG93IGl0JiMzOTtzIGJlaW5nIGFwcHJvYWNoZWQ6IG5ldGxpbmsgYW5kIHN5c2ZzIGZvciBjb250cm9sLCBhbmQgc3BlY2lmaWNhbGx5LCB0aGF0IGBzeXprYWxsZXJgIGlzIHB1dHRpbmcgaXQgdGhyb3VnaCBpdHMgcGFjZXMgd2l0aCBzb21lIGhlYXZ5IGZ1enppbmcuIFRoZSBrZXkgcG9pbnRzIGFyZSB0aGUgdXNlIG9mIGBod3NpbWAsIGNvdXBsZWQgd2l0aCByYXcgc29ja2V0cywgYGFmX2llZWU4MDIxNTRgLCBhbmQgYG5sODAyMTU0YC4gSXQgbWFrZXMgc2Vuc2U7IGhpdHRpbmcgaXQgZnJvbSB0aGVzZSBkaWZmZXJlbnQgYW5nbGVzIHByb3ZpZGVzIGEgbW9yZSB0aG9yb3VnaCB0ZXN0aW5nIHN0cmF0ZWd5LiBJdCYjMzk7cyB0aW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnLCBpdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQzgwMjE1NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxNTQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjE1NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbWFjODAyMTU0L0tjb25maWc6Mjpjb25maWcgTUFDODAyMTU0XG5uZXQvbWFjODAyMTU0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTUuNCBTb2Z0IE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjE1NClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNTgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlIGZvciBtYWM4MDIxNTQ6CgoqKkRpdmluZyBpbnRvIHRoZSA4MDIuMTUuNCBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBtYWM4MDIxNTQgS2NvbmZpZyBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgSUVFRSA4MDIuMTUuNCBNQUMgbGF5ZXIgd2l0aGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgc3R1ZmYgaGVyZTogdGhpbmdzIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBkcml2ZXIsIG9wdGlvbnMgZm9yIGRpZmZlcmVudCBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbnMsIG1heWJlIHNvbWUgY2hvaWNlcyByZWxhdGVkIHRvIHNwZWNpZmljIFBIWXMgKGxpa2UgdGhlIHJhZGlvIHVzZWQpLCBkZWZpbml0ZWx5IHRoaW5ncyBsaWtlIGRhdGEgcmF0ZSBzZWxlY3Rpb24sIGFuZCBwb3RlbnRpYWxseSBjb25maWd1cmF0aW9uIGZvciB2YXJpb3VzIHNlY3VyaXR5IGZlYXR1cmVzIGlmIHN1cHBvcnRlZC4KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcywgdG9vLiBXaGF0IG90aGVyIHN1YnN5c3RlbXMgZG9lcyB0aGlzIHJlbHkgb24/IEFyZSB0aGVyZSBhbnkgcHJlcmVxdWlzaXRlcyBJIG5lZWQgdG8gZW5zdXJlIGFyZSBlbmFibGVkPyBUaGlzIGlzIGNydWNpYWwgZm9yIGNvcnJlY3RseSBjb21waWxpbmcgYW5kIGNvbmZpZ3VyaW5nIGEgc3lzdGVtIHRoYXQgdXNlcyA4MDIuMTUuNC4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBoaWVyYXJjaHkgb2Ygb3B0aW9ucyDigJMgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIgYW5kIGlmIHRoZXJlIGFyZSBhbnkgY29uZmxpY3RpbmcgY2hvaWNlcy4gQW55IG1lbnRpb24gb2YgbXVsdGktUEFOIHN1cHBvcnQgb3IgbWVzaCBuZXR3b3JraW5nIGNhcGFiaWxpdGllcyB3aWxsIGFsc28gYmUgZ29vZCB0byB0YWtlIGEgbG9vayBhdC4KCkkgbmVlZCB0byBzZWUgaWYgaXQgcHJvdmlkZXMgc3VwcG9ydCBmb3IgZGlmZmVyZW50IHN0YW5kYXJkIHJldmlzaW9ucywgZS5nLiA4MDIuMTUuNC0yMDAzIG9yIDgwMi4xNS40LTIwMjAuIEkmIzM5O2xsIGJlIHJlYWxseSBrZWVuIHRvIGRpc2NvdmVyIGlmIHRoZXJlJiMzOTtzIGFueSBtZWNoYW5pc20gZm9yIHNlbGVjdGluZyB0aGUgdW5kZXJseWluZyBkYXRhIGxpbmsgbGF5ZXIgcHJvdG9jb2wsIG9yIGlmIHRoYXQgaXMgc29tZWhvdyBiYWtlZCBpbi4KVGhpcyBmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdG8gdGFpbG9yIHRoaXMgc3BlY2lmaWMgTUFDIGxheWVyIGZvciBvdXIgbmVlZHMuIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGdyYW51bGFyaXR5IG9mIHRoZSBjb250cm9scyBhbmQgd2hhdCBoYXJkd2FyZSBhbmQgUEhZIG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTU0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTUFDODAyMTU0XG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjE1LjQgU29mdCBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxNTQpXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElFRUU4MDIxNTRcbiAgIDU6XHRcdHNlbGVjdCBDUkNfQ0NJVFRcbiAgIDY6XHRcdHNlbGVjdCBDUllQVE9cbiAgIDc6XHRcdHNlbGVjdCBDUllQVE9fQVVUSEVOQ1xuICAgODpcdFx0c2VsZWN0IENSWVBUT19DQ01cbiAgIDk6XHRcdHNlbGVjdCBDUllQVE9fQ1RSXG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPX0FFU1xuICAxMTpcdFx0aGVscFxuICAxMjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBoYXJkd2FyZSBpbmRlcGVuZGVudCBJRUVFIDgwMi4xNS40XG4gIDEzOlx0XHQgIG5ldHdvcmtpbmcgc3RhY2sgZm9yIFNvZnRNQUMgZGV2aWNlcyAodGhlIG9uZXMgaW1wbGVtZW50aW5nXG4gIDE0Olx0XHQgIG9ubHkgUEhZIGxldmVsIG9mIElFRUUgODAyLjE1LjQgc3RhbmRhcmQpLlxuICAxNTpcdFxuICAxNjpcdFx0ICBOb3RlOiB0aGlzIGltcGxlbWVudGF0aW9uIGlzIG5laXRoZXIgY2VydGlmaWVkLCBub3IgZmVhdHVyZVxuICAxNzpcdFx0ICBjb21wbGV0ZSEgQ29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGltcGxlbWVudGF0aW9ucyBoYXNuJiMzOTt0XG4gIDE4Olx0XHQgIGJlZW4gdGVzdGVkIHlldCFcbiAgMTk6XHRcbiAgMjA6XHRcdCAgSWYgeW91IHBsYW4gdG8gdXNlIEhhcmRNQUMgSUVFRSA4MDIuMTUuNCBkZXZpY2VzLCB5b3UgY2FuXG4gIDIxOlx0XHQgIHNheSBOIGhlcmUuIEFsdGVybmF0aXZlbHkgeW91IGNhbiBzYXkgTSB0byBjb21waWxlIGl0IGFzXG4gIDIyOlx0XHQgIG1vZHVsZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5MjMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyB0aGUgSUVFRSA4MDIuMTUuNCBIYXJkd2FyZSBTaW11bGF0aW9uIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgY29uZmlndXJpbmcgc29tZXRoaW5nLCBhbmQgdGhlIElFRUUgODAyLjE1LjQgaGFyZHdhcmUgc2ltdWxhdGlvbiBpcyB0aGUgdGFyZ2V0LiBOYXR1cmFsbHksIEkgd2FudCB0byBjb25maXJtIHRoYXQgd2UmIzM5O3JlIGNvdmVyaW5nIGFsbCBvdXIgYmFzZXMuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIGxvb2sgZm9yIHRoYXQgY29uZmlndXJhdGlvbiB3b3VsZCBiZSBpbiB0aGUgZHJpdmVyIHNvdXJjZSB0cmVlLCBzcGVjaWZpY2FsbHkgdW5kZXIgYGRyaXZlcnMvbmV0L2llZWU4MDIxNTQvYC4gQW5kIHRoZW4sIHdpdGhpbiAqdGhhdCogZGlyZWN0b3J5LCB0aGUgYEtjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIHN0YW5kYXJkIHBsYWNlIGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIHRvIGRlZmluZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYElFRUU4MDIxNTRfSFdTSU1gIGlzIGRlZmluZWQgYW5kIGNvcnJlY3RseSBoYW5kbGVkIHRoZXJlLiBXZSBtaWdodCBhbHNvIG5lZWQgdG8gY2hlY2sgaXRzIGRlcGVuZGVuY2llcywgaXRzIGhlbHAgdGV4dCwgYW5kIGFueXRoaW5nIGVsc2UgcmVsZXZhbnQgdG8gaXRzIGJlaGF2aW9yLiBTbywgbGV0JiMzOTtzIHRha2UgYSBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTEwOlx0XG4gMTExOlx0XHQgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBUbyBkbyBzbywgc2F5IE0gaGVyZS5cbiAxMTI6XHRcdCAgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCAmIzM5O21jcjIwYSYjMzk7LlxuIDExMzpcdFxuIDExNDpcdGNvbmZpZyBJRUVFODAyMTU0X0hXU0lNXG4gMTE1Olx0XHRkZXBlbmRzIG9uIElFRUU4MDIxNTRfRFJJVkVSUyBcdTAwMjZcdTAwMjYgTUFDODAyMTU0XG4gMTE2Olx0XHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxNTRcJiMzNDtcbiAxMTc6XHRcdGhlbHBcbiAxMTg6XHRcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdFxuIDExOTpcdFx0ICBJRUVFIDgwMi4xNS40IG5ldHdvcmtpbmcgc3RhY2sgKG1hYzgwMjE1NCkgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBub3RcbiAxMjA6XHRcdCAgbmVlZGVkIGZvciBub3JtYWwgd3BhbiB1c2FnZSBhbmQgaXMgb25seSBmb3IgdGVzdGluZy5cbiAxMjE6XHRcbiAxMjI6XHRcdCAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIFRvIGRvIHNvIHNheSBNIGhlcmUuXG4gMTIzOlx0XHQgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgJiMzOTttYWM4MDIxNTRfaHdzaW0mIzM5Oy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0ODQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyB0aGUgSUVFRSA4MDIuMTUuNCBDb25maWd1cmF0aW9uKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdC4gTGV0JiMzOTtzIGRpdmUgcmlnaHQgaW50byB0aGUgYG5ldC9pZWVlODAyMTU0L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgdGhlIGNvbmZpZ3VyYWJsZSBvcHRpb25zIGZvciB0aGUgSUVFRSA4MDIuMTUuNCBzdGFjayB3aXRoaW4gdGhlIGJ1aWxkIHN5c3RlbS4gVGhpcyBpcyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIGZpbGUsIHNvIGl0IHdpbGwgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnRzIGZvciB1bmRlcnN0YW5kaW5nIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkLCBkaXNhYmxlZCwgYW5kIGhvdyBldmVyeXRoaW5nIGlzIHN0cnVjdHVyZWQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHRvcC1sZXZlbCBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBhbnkgaW1wb3J0YW50IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzIHRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kIGJlZm9yZSBJIGdvIGFueSBkZWVwZXIuIEkgd2FudCB0byBidWlsZCBhIHF1aWNrIG1lbnRhbCBtb2RlbCBvZiB0aGUgY29uZmlndXJhYmxlIG1vZHVsZXMgYmVmb3JlIHByb2NlZWRpbmcgdG8gdGhlIG5leHQgZGlhZ25vc3RpYyBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pZWVlODAyMTU0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51Y29uZmlnIElFRUU4MDIxNTRcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0lFRUUgU3RkIDgwMi4xNS40IExvdy1SYXRlIFdpcmVsZXNzIFBlcnNvbmFsIEFyZWEgTmV0d29ya3Mgc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0aGVscFxuICAgNTpcdFx0ICBJRUVFIFN0ZCA4MDIuMTUuNCBkZWZpbmVzIGEgbG93IGRhdGEgcmF0ZSwgbG93IHBvd2VyIGFuZCBsb3dcbiAgIDY6XHRcdCAgY29tcGxleGl0eSBzaG9ydCByYW5nZSB3aXJlbGVzcyBwZXJzb25hbCBhcmVhIG5ldHdvcmtzLiBJdCB3YXNcbiAgIDc6XHRcdCAgZGVzaWduZWQgdG8gb3JnYW5pc2UgbmV0d29ya3Mgb2Ygc2Vuc29ycywgc3dpdGNoZXMsIGV0YyBhdXRvbWF0aW9uXG4gICA4Olx0XHQgIGRldmljZXMuIE1heGltdW0gYWxsb3dlZCBkYXRhIHJhdGUgaXMgMjUwIGtiL3MgYW5kIHR5cGljYWwgcGVyc29uYWxcbiAgIDk6XHRcdCAgb3BlcmF0aW5nIHNwYWNlIGFyb3VuZCAxMG0uXG4gIDEwOlx0XG4gIDExOlx0XHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBMUi1XUEFOIHN1cHBvcnQgaW50byB0aGUga2VybmVsIG9yIHNheSBNIHRvXG4gIDEyOlx0XHQgIGNvbXBpbGUgaXQgYXMgbW9kdWxlcy5cbiAgMTM6XHRcbiAgMTQ6XHRpZiBJRUVFODAyMTU0XG4gIDE1Olx0XG4gIDE2Olx0Y29uZmlnIElFRUU4MDIxNTRfTkw4MDIxNTRfRVhQRVJJTUVOVEFMXG4gIDE3Olx0XHRib29sIFwmIzM0O0lFRUUgODAyLjE1LjQgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydFwmIzM0O1xuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBBZGRzIGV4cGVyaW1lbnRhbCBuZXRsaW5rIHN1cHBvcnQgZm9yIG5sODAyMTU0LlxuICAyMDpcdFxuICAyMTpcdGNvbmZpZyBJRUVFODAyMTU0X1NPQ0tFVFxuICAyMjpcdFx0dHJpc3RhdGUgXCYjMzQ7SUVFRSA4MDIuMTUuNCBzb2NrZXQgaW50ZXJmYWNlXCYjMzQ7XG4gIDIzOlx0XHRkZWZhdWx0IHlcbiAgMjQ6XHRcdGhlbHBcbiAgMjU6XHRcdCAgU29ja2V0IGludGVyZmFjZSBmb3IgSUVFRSA4MDIuMTUuNC4gQ29udGFpbnMgREdSQU0gc29ja2V0cyBpbnRlcmZhY2VcbiAgMjY6XHRcdCAgZm9yIDgwMi4xNS40IGRhdGFmcmFtZXMuIEFsc28gUkFXIHNvY2tldCBpbnRlcmZhY2UgdG8gYnVpbGQgTUFDXG4gIDI3Olx0XHQgIGhlYWRlciBmcm9tIHVzZXJzcGFjZS5cbiAgMjg6XHRcbiAgMjk6XHRzb3VyY2UgXCYjMzQ7bmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9LY29uZmlnXCYjMzQ7XG4gIDMwOlx0XG4gIDMxOlx0ZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyMjgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgTUFDODAyMTU0IHJlY2VpdmUgcGF0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhvc2UgUlggZnVuY3Rpb25zIGFyZSB0cmlnZ2VyZWQuIE15IGluaXRpYWwgYXBwcm9hY2ggd2lsbCBiZSB0byBleGFtaW5lIHRoZSBjb2RlIGRpcmVjdGx5IGFuZCBzZWFyY2ggZm9yIHRoZSBrZXkgZW50cnkgcG9pbnRzLiBTbywgSSYjMzk7bGwgc3RhcnQgd2l0aCBhIGBncmVwYCBmb3IgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gSSYjMzk7bSBmb2N1c2luZyBvbiBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZWAsIGBpZWVlODAyMTU0X3J4X2lycXNhZmVgLCBhbmQgYW55IG90aGVyIG9idmlvdXMgZW50cnkgcG9pbnRzIHdpdGhpbiBgbmV0L21hYzgwMjE1NC9yeC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgbGF5IG9mIHRoZSBsYW5kLCByaWdodD8gVGhpcyB3aWxsIGdpdmUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGZ1bmN0aW9uIGNhbGwgaGllcmFyY2h5IGluIHRoZSByZWNlaXZlIHBhdGgsIGZyb20gdGhlIGhhcmR3YXJlIGludGVycnVwdCB0byB0aGUgcHJvY2Vzc2luZyBvZiB0aGUgcmVjZWl2ZWQgZnJhbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2llZWU4MDIxNTRfcngmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTU0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmg9MTkzPWV4dGVybiBzdHJ1Y3QgaWVlZTgwMjE1NF9tbG1lX29wcyBtYWM4MDIxNTRfbWxtZV93cGFuO1xubmV0L21hYzgwMjE1NC9pZWVlODAyMTU0X2kuaC0xOTQtXG5uZXQvbWFjODAyMTU0L2llZWU4MDIxNTRfaS5oOjE5NTp2b2lkIGllZWU4MDIxNTRfcngoc3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmgtMTk2LXZvaWQgaWVlZTgwMjE1NF94bWl0X3N5bmNfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4tLVxubmV0L21hYzgwMjE1NC9tYWluLmM9MjM9c3RhdGljIHZvaWQgaWVlZTgwMjE1NF90YXNrbGV0X2hhbmRsZXIoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KVxuLS1cbm5ldC9tYWM4MDIxNTQvbWFpbi5jLTM0LVx0XHRcdHNrYi1cdTAwM2Vwa3RfdHlwZSA9IDA7XG5uZXQvbWFjODAyMTU0L21haW4uYzozNTpcdFx0XHRpZWVlODAyMTU0X3J4KGxvY2FsLCBza2IpO1xubmV0L21hYzgwMjE1NC9tYWluLmMtMzYtXHRcdFx0YnJlYWs7XG4tLVxubmV0L21hYzgwMjE1NC9yeC5jPTQxMD1zdGF0aWMgdm9pZFxubmV0L21hYzgwMjE1NC9yeC5jOjQxMTpfX2llZWU4MDIxNTRfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwsXG5uZXQvbWFjODAyMTU0L3J4LmMtNDEyLVx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21hYzgwMjE1NC9yeC5jPTQ0OD1pZWVlODAyMTU0X21vbml0b3JzX3J4KHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbWFjODAyMTU0L3J4LmMtNDc1LVxubmV0L21hYzgwMjE1NC9yeC5jOjQ3Njp2b2lkIGllZWU4MDIxNTRfcngoc3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L21hYzgwMjE1NC9yeC5jLTQ3Ny17XG4tLVxubmV0L21hYzgwMjE1NC9yeC5jLTUwNi1cbm5ldC9tYWM4MDIxNTQvcnguYzo1MDc6XHRfX2llZWU4MDIxNTRfcnhfaGFuZGxlX3BhY2tldChsb2NhbCwgc2tiKTtcbm5ldC9tYWM4MDIxNTQvcnguYy01MDgtXG4tLVxubmV0L21hYzgwMjE1NC9yeC5jPTUxNT12b2lkXG5uZXQvbWFjODAyMTU0L3J4LmM6NTE2OmllZWU4MDIxNTRfcnhfaXJxc2FmZShzdHJ1Y3QgaWVlZTgwMjE1NF9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IsIHU4IGxxaSlcbm5ldC9tYWM4MDIxNTQvcnguYy01MTcte1xuLS1cbm5ldC9tYWM4MDIxNTQvcnguYy01MjUtfVxubmV0L21hYzgwMjE1NC9yeC5jOjUyNjpFWFBPUlRfU1lNQk9MKGllZWU4MDIxNTRfcnhfaXJxc2FmZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzQyCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbWFjODAyMTU0IFJYIFBhdGgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHRoZSBtb2RpZmljYXRpb25zIGluIGBuZXQvbWFjODAyMTU0L3J4LmNgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gbG9va2luZyBhdCBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZSgpYCBiZWNhdXNlIHRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkLiBOb3csIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3csIEkgbmVlZCB0byBtYXAgb3V0IHRoZSBjYWxsIGNoYWluIGFuZCB0aGUgcmVsZXZhbnQgd29ya2VycyBoYW5kbGluZyB0aGVzZSBmcmFtZXMuIFNvLCBJIHNlZSBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZWAgaXRzZWxmLCBhbmQgaXQgbG9va3MgbGlrZSBpdCBpbnRlcmFjdHMgd2l0aCBgbWFjODAyMTU0X3J4X2JlYWNvbl93b3JrZXJgLCBgbWFjODAyMTU0X3J4X21hY19jbWRfd29ya2VyYCwgYGllZWU4MDIxNTRfcnhgLCBhbmQgYGllZWU4MDIxNTRfcnhfaXJxc2FmZWAuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIHRoZSBkYXRhIGZsb3cuIEJlZm9yZSBkaWdnaW5nIGRlZXBlciBpbnRvIGFueSBzcGVjaWZpYyBjYWxsIHBhdGgsIEkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IHRoYXQgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgZWxzZSByZWxldmFudCBpbiB0aGUgYG5ldC9tYWM4MDIxNTQvcnguY2AgZmlsZSBpdHNlbGYuIFRoZW4sIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IHdoYXQgYWxsIHRoZSBzeW1ib2xzIGFyZSBpbiB0aGF0IGZpbGUsIGp1c3QgYXMgYSBnZW5lcmFsIHNhbml0eSBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVowLTlfXSYjNDM7LipcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTU0L3J4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjE1NC9yeC5jLTIzLVxubmV0L21hYzgwMjE1NC9yeC5jOjI0OnN0YXRpYyBpbnQgaWVlZTgwMjE1NF9kZWxpdmVyX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L21hYzgwMjE1NC9yeC5jLTI1LXtcbi0tXG5uZXQvbWFjODAyMTU0L3J4LmMtMzEtXG5uZXQvbWFjODAyMTU0L3J4LmM6MzI6dm9pZCBtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQvbWFjODAyMTU0L3J4LmMtMzMte1xuLS1cbm5ldC9tYWM4MDIxNTQvcnguYy01Ni1cbm5ldC9tYWM4MDIxNTQvcnguYzo1NzpzdGF0aWMgYm9vbCBtYWM4MDIxNTRfc2hvdWxkX2Fuc3dlcl9iZWFjb25fcmVxKHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbClcbm5ldC9tYWM4MDIxNTQvcnguYy01OC17XG4tLVxubmV0L21hYzgwMjE1NC9yeC5jLTc3LVxubmV0L21hYzgwMjE1NC9yeC5jOjc4OnN0YXRpYyB2b2lkIG1hYzgwMjE1NF9yeF9tYWNfY21kKHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCxcbm5ldC9tYWM4MDIxNTQvcnguYy03OS1cdFx0XHRcdCBzdHJ1Y3QgY2ZnODAyMTU0X21hY19wa3QgKm1hY19wa3QpXG4tLVxubmV0L21hYzgwMjE1NC9yeC5jLTEyNS1cbm5ldC9tYWM4MDIxNTQvcnguYzoxMjY6dm9pZCBtYWM4MDIxNTRfcnhfbWFjX2NtZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L21hYzgwMjE1NC9yeC5jLTEyNy17XG4tLVxubmV0L21hYzgwMjE1NC9yeC5jLTE2NC0gKi9cbm5ldC9tYWM4MDIxNTQvcnguYzoxNjU6dm9pZCBtYWM4MDIxNTRfZmx1c2hfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxubmV0L21hYzgwMjE1NC9yeC5jLTE2Ni1cdFx0XHQgIHN0cnVjdCBpZWVlODAyMTU0X3N1Yl9pZl9kYXRhICpzZGF0YSlcbi0tXG5uZXQvbWFjODAyMTU0L3J4LmMtMTkxLSAqL1xubmV0L21hYzgwMjE1NC9yeC5jOjE5Mjp2b2lkIG1hYzgwMjE1NF9mbHVzaF9xdWV1ZWRfcGt0cyhzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwsXG5uZXQvbWFjODAyMTU0L3J4LmMtMTkzLVx0XHRcdFx0IHN0cnVjdCBpZWVlODAyMTU0X3N1Yl9pZl9kYXRhICpzZGF0YSlcbi0tXG5uZXQvbWFjODAyMTU0L3J4LmM9MjAxPXN0YXRpYyBpbnRcbm5ldC9tYWM4MDIxNTQvcnguYzoyMDI6aWVlZTgwMjE1NF9zdWJpZl9mcmFtZShzdHJ1Y3QgaWVlZTgwMjE1NF9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTU0L3J4LmMtMjAzLVx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGllZWU4MDIxNTRfaGRyICpoZHIpXG4tLVxubmV0L21hYzgwMjE1NC9yeC5jPTMzMj1zdGF0aWMgdm9pZFxubmV0L21hYzgwMjE1NC9yeC5jOjMzMzppZWVlODAyMTU0X3ByaW50X2FkZHIoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGllZWU4MDIxNTRfYWRkciAqYWRkcilcbm5ldC9tYWM4MDIxNTQvcnguYy0zMzQte1xuLS1cbm5ldC9tYWM4MDIxNTQvcnguYz0zNTE9c3RhdGljIGludFxubmV0L21hYzgwMjE1NC9yeC5jOjM1MjppZWVlODAyMTU0X3BhcnNlX2ZyYW1lX3N0YXJ0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZWVlODAyMTU0X2hkciAqaGRyKVxubmV0L21hYzgwMjE1NC9yeC5jLTM1My17XG4tLVxubmV0L21hYzgwMjE1NC9yeC5jPTQxMD1zdGF0aWMgdm9pZFxubmV0L21hYzgwMjE1NC9yeC5jOjQxMTpfX2llZWU4MDIxNTRfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwsXG5uZXQvbWFjODAyMTU0L3J4LmMtNDEyLVx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21hYzgwMjE1NC9yeC5jPTQ0Nz1zdGF0aWMgdm9pZFxubmV0L21hYzgwMjE1NC9yeC5jOjQ0ODppZWVlODAyMTU0X21vbml0b3JzX3J4KHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9tYWM4MDIxNTQvcnguYy00NDkte1xuLS1cbm5ldC9tYWM4MDIxNTQvcnguYy00NzUtXG5uZXQvbWFjODAyMTU0L3J4LmM6NDc2OnZvaWQgaWVlZTgwMjE1NF9yeChzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvbWFjODAyMTU0L3J4LmMtNDc3LXtcbi0tXG5uZXQvbWFjODAyMTU0L3J4LmM9NTE1PXZvaWRcbm5ldC9tYWM4MDIxNTQvcnguYzo1MTY6aWVlZTgwMjE1NF9yeF9pcnFzYWZlKHN0cnVjdCBpZWVlODAyMTU0X2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggbHFpKVxubmV0L21hYzgwMjE1NC9yeC5jLTUxNy17XG4tLVxubmV0L21hYzgwMjE1NC9yeC5jLTUyNS19XG5uZXQvbWFjODAyMTU0L3J4LmM6NTI2OkVYUE9SVF9TWU1CT0woaWVlZTgwMjE1NF9yeF9pcnFzYWZlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyNjgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFuYWx5c2lzOiBJRUVFIDgwMi4xNS40IENvZGUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGlzIHRoaXMgZXZlbiB3b3J0aCBmdXp6aW5nPyBMZXQmIzM5O3MgY2hlY2sgdGhlIGNyaXRlcmlhLiBZZXMsIG1vZGlmeWluZyBgbmV0L21hYzgwMjE1NC9yeC5jYCB3aXRoaW4gYGllZWU4MDIxNTRfc3ViaWZfZnJhbWVgICpkZWZpbml0ZWx5KiB0b3VjaGVzIHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlLiBHb29kLiBTZWNvbmQsIGFyZSB3ZSB0YWxraW5nIGFib3V0IHNvbWV0aGluZyBhY2Nlc3NpYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gWWVwLCBgbWFjODAyMTU0YCBpcyBzaW11bGF0ZWQgdGhyb3VnaCBgbWFjODAyMTU0X2h3c2ltYCBvciByYXcgcGFja2V0IGluamVjdGlvbiB2aWEgc29ja2V0cyBvciB2aXJ0dWFsIGRldmljZXMuIEVhc3kgdG8gdGVzdC4gQ3J1Y2lhbGx5LCB0aGUgY29kZSBpcyBjaGFuZ2luZyBtZW1vcnkgcmVmZXJlbmNlIGNvdW50aW5nLCBzcGVjaWZpY2FsbHkgcmVtb3ZpbmcgYHNrYl9nZXQoc2tiKWAgdG8gdHJhbnNmZXIgb3duZXJzaGlwLiBUaGlzIGZpeGVzIGEgbWVtb3J5IGxlYWsgb3IgYXZvaWRzIHVzZS1hZnRlci1mcmVlL2xlYWsgaXNzdWVzLiBTbywgZnV6emluZyBpcyBjcml0aWNhbCBoZXJlIHRvIGZsdXNoIG91dCBhbnkgcG90ZW50aWFsIGRvdWJsZSBmcmVlcyBvciBVQUZzIHRoYXQgbWlnaHQgZXhpc3QgZHVlIHRvIHRoZSBvd25lcnNoaXAgY2hhbmdlLiBCYXNlZCBvbiBhbGwgdGhhdCwgYFdvcnRoRnV6emluZyA9IHRydWVgLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgY29tcGlsaW5nIGFuZCB0ZXN0aW5nIHRoaXMuIExvb2tpbmcgYXQgYG5ldC9tYWM4MDIxNTQvS2NvbmZpZ2AsIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHdlIG5lZWQgYElFRUU4MDIxNTRgLCBgTUFDODAyMTU0YCwgYW5kIGVpdGhlciBgSUVFRTgwMjE1NF9IV1NJTWAgb3IgYElFRUU4MDIxNTRfU09DS0VUYC4KCkZpbmFsbHksIHdlIHNob3VsZCB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcy4gYE1BQzgwMjE1NGAgbmVlZHMgYElFRUU4MDIxNTRgLCBhbmQgYElFRUU4MDIxNTRfSFdTSU1gIGRlcGVuZHMgb24gYElFRUU4MDIxNTRfRFJJVkVSUyAmYW1wOyZhbXA7IE1BQzgwMjE1NGAuIFdlIHNob3VsZCBjaGVjayBgSUVFRTgwMjE1NF9EUklWRVJTYCBpbiBgZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnYC4gV2Ugbm93IGtub3cgZXZlcnl0aGluZyB3ZSBuZWVkIHRvIHJ1biBvdXIgZnV6emluZyBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0bWVudWNvbmZpZyBJRUVFODAyMTU0X0RSSVZFUlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0lFRUUgODAyLjE1LjQgZHJpdmVyc1wmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBORVRERVZJQ0VTIFx1MDAyNlx1MDAyNiBJRUVFODAyMTU0XG4gICA1Olx0XHRkZWZhdWx0IHlcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgU2F5IFkgaGVyZSB0byBnZXQgdG8gc2VlIG9wdGlvbnMgZm9yIElFRUUgODAyLjE1LjQgTG93LVJhdGVcbiAgIDg6XHRcdCAgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3JrIGRldmljZSBkcml2ZXJzLiBUaGlzIG9wdGlvbiBhbG9uZVxuICAgOTpcdFx0ICBkb2VzIG5vdCBhZGQgYW55IGtlcm5lbCBjb2RlLlxuICAxMDpcdFxuICAxMTpcdFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kXG4gIDEyOlx0XHQgIGRpc2FibGVkLlxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBJRUVFODAyMTU0X0ZBS0VMQlxuICAxNTpcdFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXHUwMDI2XHUwMDI2IE1BQzgwMjE1NFxuICAxNjpcdFx0dHJpc3RhdGUgXCYjMzQ7SUVFRSA4MDIuMTUuNCBsb29wYmFjayBkcml2ZXJcJiMzNDtcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIGZha2UgZHJpdmVyIHRoYXQgY2FuIGVtdWxhdGUgYSBuZXRcbiAgMTk6XHRcdCAgb2Ygc2V2ZXJhbCBpbnRlcmNvbm5lY3RlZCByYWRpbyBkZXZpY2VzLlxuICAyMDpcdFxuICAyMTpcdFx0ICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gVG8gZG8gc28gc2F5IE0gaGVyZS5cbiAgMjI6XHRcdCAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCAmIzM5O2Zha2VsYiYjMzk7LlxuICAyMzpcdFxuICAyNDpcdGNvbmZpZyBJRUVFODAyMTU0X0FUODZSRjIzMFxuICAyNTpcdFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXHUwMDI2XHUwMDI2IE1BQzgwMjE1NFxuICAyNjpcdFx0dHJpc3RhdGUgXCYjMzQ7QVQ4NlJGMjMwLzIzMS8yMzMvMjEyIHRyYW5zY2VpdmVyIGRyaXZlclwmIzM0O1xuICAyNzpcdFx0ZGVwZW5kcyBvbiBTUElcbiAgMjg6XHRcdHNlbGVjdCBSRUdNQVBfU1BJXG4gIDI5Olx0XHRoZWxwXG4gIDMwOlx0XHQgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBhdDg2cmYyMzAvMjMxLzIzMy8yMTIgU1BJIDgwMi4xNS40IHdpcmVsZXNzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NjAzCgkJCQkJCQlvdXRwdXQ6IDIxOAoJCQkJCQkJdGhvdWdodHM6IDQ0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IGZvciBGdXp6aW5nIHRoaXMgSUVFRSA4MDIuMTUuNCBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZDogYElFRUU4MDIxNTRgLCBgTUFDODAyMTU0YCwgYW5kIGBJRUVFODAyMTU0X0hXU0lNYC4gIFRoZXNlIGFyZSBjcnVjaWFsIGJlY2F1c2UgdGhleSBkaXJlY3RseSBlbmFibGUgdGhlIDgwMi4xNS40IGxheWVyIGFuZCBoYXJkd2FyZSBzaW11bGF0aW9uLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHRlc3RpbmcuCgpOb3csIHRoZSBjb3JlIG9mIHRoaXMgYXNzZXNzbWVudCBpcyB0aGUgZm9jdXMuIEkmIzM5O3ZlIGlkZW50aWZpZWQga2V5IHN5bWJvbHM6IGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lYCwgYG1hYzgwMjE1NF9yeF9iZWFjb25fd29ya2VyYCwgYG1hYzgwMjE1NF9yeF9tYWNfY21kX3dvcmtlcmAsIGFuZCBgaWVlZTgwMjE1NF9yeGAuICBJIHdhbnQgdG8gcXVpY2tseSBjb25maXJtIHRoZXNlIGFyZSBzcGVjaWZpYyBhbmQgbm90IGdlbmVyYWwtcHVycG9zZSBmdW5jdGlvbnMgdGhhdCBhcmUgd2lkZWx5IHVzZWQgZWxzZXdoZXJlLiBCYXNlZCBvbiBhIHF1aWNrIHJldmlldywgaXQgY29uZmlybXMgdGhleSBhcmUgYWxsIGRpcmVjdGx5IHRpZWQgdG8gdGhlIDgwMi4xNS40IGFuZCBtYWM4MDIxNTQgbGF5ZXJzLiBHb29kLCB0aGlzIHNvbGlkaWZpZXMgdGhlIHNjb3BlIG9mIG91ciBmb2N1cy4KClRpbWUgdG8gcHJlcGFyZSB0aGUgZmluYWwgcmVhc29uaW5nLiBUaGUgYWltIGlzIHRvIHZlcmlmeSB3aGV0aGVyIG91ciBwYXRjaCBpcyAmIzM0O3dvcnRoIGZ1enppbmcmIzM0Oy4KCjEuICAqKldvcnRoRnV6emluZyoqOiAqVHJ1ZSouIFRoZSBtb2RpZmljYXRpb25zIGhlcmUgYXJlIGRlYWxpbmcgd2l0aCByZWZlcmVuY2UgY291bnRpbmcgb2YgcmVjZWl2ZWQgYHNrX2J1ZmZzYCBpbiBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZWAuIFRoaXMgaXMgY3JpdGljYWwuCjIuICAqKkZvY3VzU3ltYm9scyoqOiAgQXMgYWxyZWFkeSBjb25maXJtZWQsIHRoZXNlIGFyZSBzcGVjaWZpYy4KMy4gICoqRW5hYmxlQ29uZmlncyoqOiAgQXMgc3RhdGVkLCB3ZSBoYXZlIHRvIGVuYWJsZSBJRUVFIDgwMi4xNS40IGFuZCB0aGUgaGFyZHdhcmUgc2ltdWxhdGlvbiB0byB0ZXN0IHRoZSBmdWxsIGNvZGUgcGF0aC4KNC4gICoqUmVhc29uaW5nKio6IFRoZSBjaGFuZ2UgaXMgdG8gYGllZWU4MDIxNTRfc3ViaWZfZnJhbWVgLCBhbmQgaXQgYWZmZWN0cyBob3cgcmVjZWl2ZWQgcGFja2V0cyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGJ5IHJlbW92aW5nIHJlZHVuZGFudCBgc2tiX2dldGAgY2FsbHMgd2hlbiBxdWV1aW5nIGJlYWNvbiBhbmQgTUFDIGNvbW1hbmQgcGFja2V0cy4gVGhpcyBpcyBpbXBvcnRhbnQgc2luY2UgaXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbWFjODAyMTU0XF9od3NpbSBvciBzb2NrZXQtYmFzZWQgZnJhbWUgdHJhbnNtaXNzaW9uIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIHZlcmlmeSBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50IGludmFyaWFudHMuCgpTbywgaW4gc3VtbWFyeSwgYmFzZWQgb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9uIG1vZGlmaWNhdGlvbnMsIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cywgYW5kIHRoZSBmdXp6aW5nIHRhcmdldCBiZWluZyByZWZlcmVuY2UgY291bnRpbmcsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgaW5kZWVkIHdvcnRoIGZ1enppbmcuICBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OywKICAgICYjMzQ7TUFDODAyMTU0JiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtJRUVFODAyMTU0X0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjE1NF9zdWJpZl9mcmFtZSYjMzQ7LAogICAgJiMzNDttYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlciYjMzQ7LAogICAgJiMzNDttYWM4MDIxNTRfcnhfbWFjX2NtZF93b3JrZXImIzM0OywKICAgICYjMzQ7aWVlZTgwMjE1NF9yeCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBza19idWZmIHJlZmVyZW5jZSBjb3VudCBoYW5kbGluZyBpbiBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lKCkgYnkgcmVtb3Zpbmcgc2tiX2dldCgpIGNhbGxzIHdoZW4gZW5xdWV1aW5nIGJlYWNvbiBhbmQgTUFDIGNvbW1hbmQgcGFja2V0cyB0byBhc3luY2hyb25vdXMgd29ya2VyIHF1ZXVlcy4gVGhpcyByZWFjaGFibGUgbmV0d29ya2luZyBwYXRoIGNhbiBiZSB0ZXN0ZWQgdmlhIG1hYzgwMjE1NF9od3NpbSBhbmQgaXMgd29ydGggZnV6emluZyB0byB2ZXJpZnkgc2tiIGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgY29ycmVjdG5lc3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OywKICAgICYjMzQ7TUFDODAyMTU0JiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtJRUVFODAyMTU0X0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjE1NF9zdWJpZl9mcmFtZSYjMzQ7LAogICAgJiMzNDttYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlciYjMzQ7LAogICAgJiMzNDttYWM4MDIxNTRfcnhfbWFjX2NtZF93b3JrZXImIzM0OywKICAgICYjMzQ7aWVlZTgwMjE1NF9yeCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBza19idWZmIHJlZmVyZW5jZSBjb3VudCBoYW5kbGluZyBpbiBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lKCkgYnkgcmVtb3Zpbmcgc2tiX2dldCgpIGNhbGxzIHdoZW4gZW5xdWV1aW5nIGJlYWNvbiBhbmQgTUFDIGNvbW1hbmQgcGFja2V0cyB0byBhc3luY2hyb25vdXMgd29ya2VyIHF1ZXVlcy4gVGhpcyByZWFjaGFibGUgbmV0d29ya2luZyBwYXRoIGNhbiBiZSB0ZXN0ZWQgdmlhIG1hYzgwMjE1NF9od3NpbSBhbmQgaXMgd29ydGggZnV6emluZyB0byB2ZXJpZnkgc2tiIGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgY29ycmVjdG5lc3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZSgpYCBpbiBgbmV0L21hYzgwMjE1NC9yeC5jYCB0byBhc3NpZ24gYG1hY19wa3QtXHUwMDNlc2tiID0gc2tiYCBkaXJlY3RseSBpbnN0ZWFkIG9mIGNhbGxpbmcgYHNrYl9nZXQoc2tiKWAuIFRoaXMgYXZvaWRzIHRha2luZyBhbiBleHRyYSByZWZjb3VudCB3aGVuIHRyYW5zZmVycmluZyBvd25lcnNoaXAgb2YgdGhlIHNrYiB0byB0aGUgYXN5bmNocm9ub3VzIGJlYWNvbi9NQUMgY29tbWFuZCBwcm9jZXNzaW5nIHdvcmtlcnMsIGZpeGluZyBhbiBza2IgcmVmZXJlbmNlIGNvdW50IC8gbWVtb3J5IGxlYWsuXG5cblRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBwYWRkaW5nLCBvciBleHBvc2Uga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS4gYG1hY19wa3RgIGlzIGFscmVhZHkgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iaigpYC4gUmVmZXJlbmNlIGNvdW50aW5nIGFuZCBtZW1vcnkgbGlmZWN5Y2xlIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLCB3aXRoIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgZGV0ZWN0YWJsZSBvbmx5IGJ5IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzQyNTk2OGJjNGNmNTM5MjJhNWM2OTM2Nzk3YWQzNjVjZWNkMzAyNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTE6Mjk6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTU0L3J4LmMgYi9uZXQvbWFjODAyMTU0L3J4LmMKaW5kZXggMTliNTM4MmU4NWE4NC4uYWQ2MDJkMjIyZTg2MSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjE1NC9yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxNTQvcnguYwpAQCAtMjg3LDcgJiM0MzsyODcsNyBAQCBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTU0X3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJaWYgKCFtYWNfcGt0KQogCQkJZ290byBmYWlsOwogCi0JCW1hY19wa3QtJmd0O3NrYiA9IHNrYl9nZXQoc2tiKTsKJiM0MzsJCW1hY19wa3QtJmd0O3NrYiA9IHNrYjsKIAkJbWFjX3BrdC0mZ3Q7c2RhdGEgPSBzZGF0YTsKIAkJbWFjX3BrdC0mZ3Q7cGFnZSA9IHNkYXRhLSZndDtsb2NhbC0mZ3Q7c2Nhbl9wYWdlOwogCQltYWNfcGt0LSZndDtjaGFubmVsID0gc2RhdGEtJmd0O2xvY2FsLSZndDtzY2FuX2NoYW5uZWw7CkBAIC0zMDQsNyAmIzQzOzMwNCw3IEBAIGllZWU4MDIxNTRfc3ViaWZfZnJhbWUoc3RydWN0IGllZWU4MDIxNTRfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQlpZiAoIW1hY19wa3QpCiAJCQlnb3RvIGZhaWw7CiAKLQkJbWFjX3BrdC0mZ3Q7c2tiID0gc2tiX2dldChza2IpOwomIzQzOwkJbWFjX3BrdC0mZ3Q7c2tiID0gc2tiOwogCQltYWNfcGt0LSZndDtzZGF0YSA9IHNkYXRhOwogCQluZXRkZXZfaG9sZChzZGF0YS0mZ3Q7ZGV2LCAmYW1wO21hY19wa3QtJmd0O2Rldl90cmFja2VyLCBHRlBfQVRPTUlDKTsKIAkJc3Bpbl9sb2NrKCZhbXA7c2RhdGEtJmd0O2xvY2FsLSZndDtyeF9sb2NrKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhpbmdzOgoKKipBbmFseXppbmcgdGhlIE1BQzgwMjE1NCBSZWNlaXZlIFBhdGgqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGUgcmVjZWl2ZXIgc2lkZSBvZiB0aGUgODAyLjE1LjQgTUFDIGxheWVyLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCB0aGF0IGRpZmYuIFNlZWluZyB0aGUgY2hhbmdlcyBkaXJlY3RseSB3aWxsIGdpdmUgbWUgYSBnb29kIGluaXRpYWwgc2Vuc2Ugb2YgdGhlIG1vZGlmaWNhdGlvbnMgdGhhdCBoYXZlIGJlZW4gbWFkZSwgYW5kIHdoeS4gVGhlbiwgSSBuZWVkIHRvIHpvb20gb3V0IGEgYml0IGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJJiMzOTtsbCByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvbWFjODAyMTU0L3J4LmNgIOKAkyB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbnMgYXJvdW5kIHRoZSBjaGFuZ2UgaXMgY3J1Y2lhbCB0byBncmFzcCB0aGUgaW1wbGljYXRpb25zLiBFc3NlbnRpYWxseSwgSSYjMzk7bSBjYWxsaW5nIGZvciBgcmVhZC1maWxlYCBvbiBgbmV0L21hYzgwMjE1NC9yeC5jYC4gSSBuZWVkIHRoYXQgZnVsbCBjb250ZXh0IGluIGZyb250IG9mIG1lIHRvIG1ha2UgYSBwcm9wZXIgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTU0L3J4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTA6XHRcdFx0ICAgIG1hY19jYihza2IpLVx1MDAzZWRlc3QucGFuX2lkICE9IGNwdV90b19sZTE2KElFRUU4MDIxNTRfUEFOSURfQlJPQURDQVNUKSlcbiAyNTE6XHRcdFx0XHRza2ItXHUwMDNlcGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUO1xuIDI1MjpcdFx0XHRlbHNlIGlmIChtYWNfY2Ioc2tiKS1cdTAwM2VkZXN0LnNob3J0X2FkZHIgPT0gc3Nob3J0KVxuIDI1MzpcdFx0XHRcdHNrYi1cdTAwM2Vwa3RfdHlwZSA9IFBBQ0tFVF9IT1NUO1xuIDI1NDpcdFx0XHRlbHNlIGlmIChtYWNfY2Ioc2tiKS1cdTAwM2VkZXN0LnNob3J0X2FkZHIgPT1cbiAyNTU6XHRcdFx0XHQgIGNwdV90b19sZTE2KElFRUU4MDIxNTRfQUREUl9CUk9BRENBU1QpKVxuIDI1NjpcdFx0XHRcdHNrYi1cdTAwM2Vwa3RfdHlwZSA9IFBBQ0tFVF9CUk9BRENBU1Q7XG4gMjU3Olx0XHRcdGVsc2VcbiAyNTg6XHRcdFx0XHRza2ItXHUwMDNlcGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUO1xuIDI1OTpcdFx0XHRicmVhaztcbiAyNjA6XHRcdGRlZmF1bHQ6XG4gMjYxOlx0XHRcdHByX2RlYnVnKFwmIzM0O2ludmFsaWQgZGVzdCBtb2RlXFxuXCYjMzQ7KTtcbiAyNjI6XHRcdFx0Z290byBmYWlsO1xuIDI2MzpcdFx0fVxuIDI2NDpcdFxuIDI2NTpcdFx0c2tiLVx1MDAzZWRldiA9IHNkYXRhLVx1MDAzZWRldjtcbiAyNjY6XHRcbiAyNjc6XHRcdC8qIFRPRE8gdGhpcyBzaG91bGQgYmUgbW92ZWQgYWZ0ZXIgbmV0aWZfcmVjZWl2ZV9za2IgY2FsbCwgb3RoZXJ3aXNlXG4gMjY4Olx0XHQgKiB3aXJlc2hhcmsgd2lsbCBzaG93IGEgbWFjIGhlYWRlciB3aXRoIHNlY3VyaXR5IGZpZWxkcyBhbmQgdGhlXG4gMjY5Olx0XHQgKiBwYXlsb2FkIGlzIGFscmVhZHkgZGVjcnlwdGVkLlxuIDI3MDpcdFx0ICovXG4gMjcxOlx0XHRyYyA9IG1hYzgwMjE1NF9sbHNlY19kZWNyeXB0KFx1MDAyNnNkYXRhLVx1MDAzZXNlYywgc2tiKTtcbiAyNzI6XHRcdGlmIChyYykge1xuIDI3MzpcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtkZWNyeXB0aW9uIGZhaWxlZDogJWlcXG5cJiMzNDssIHJjKTtcbiAyNzQ6XHRcdFx0Z290byBmYWlsO1xuIDI3NTpcdFx0fVxuIDI3NjpcdFxuIDI3NzpcdFx0c2RhdGEtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnJ4X3BhY2tldHMmIzQzOyYjNDM7O1xuIDI3ODpcdFx0c2RhdGEtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnJ4X2J5dGVzICYjNDM7PSBza2ItXHUwMDNlbGVuO1xuIDI3OTpcdFxuIDI4MDpcdFx0c3dpdGNoIChtYWNfY2Ioc2tiKS1cdTAwM2V0eXBlKSB7XG4gMjgxOlx0XHRjYXNlIElFRUU4MDIxNTRfRkNfVFlQRV9CRUFDT046XG4gMjgyOlx0XHRcdGRldl9kYmcoXHUwMDI2c2RhdGEtXHUwMDNlZGV2LVx1MDAzZWRldiwgXCYjMzQ7QkVBQ09OIHJlY2VpdmVkXFxuXCYjMzQ7KTtcbiAyODM6XHRcdFx0aWYgKCFtYWM4MDIxNTRfaXNfc2Nhbm5pbmcoc2RhdGEtXHUwMDNlbG9jYWwpKVxuIDI4NDpcdFx0XHRcdGdvdG8gZmFpbDtcbiAyODU6XHRcbiAyODY6XHRcdFx0bWFjX3BrdCA9IGt6YWxsb2Nfb2JqKCptYWNfcGt0LCBHRlBfQVRPTUlDKTtcbiAyODc6XHRcdFx0aWYgKCFtYWNfcGt0KVxuIDI4ODpcdFx0XHRcdGdvdG8gZmFpbDtcbiAyODk6XHRcbiAyOTA6XHRcdFx0bWFjX3BrdC1cdTAwM2Vza2IgPSBza2I7XG4gMjkxOlx0XHRcdG1hY19wa3QtXHUwMDNlc2RhdGEgPSBzZGF0YTtcbiAyOTI6XHRcdFx0bWFjX3BrdC1cdTAwM2VwYWdlID0gc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlc2Nhbl9wYWdlO1xuIDI5MzpcdFx0XHRtYWNfcGt0LVx1MDAzZWNoYW5uZWwgPSBzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VzY2FuX2NoYW5uZWw7XG4gMjk0Olx0XHRcdG5ldGRldl9ob2xkKHNkYXRhLVx1MDAzZWRldiwgXHUwMDI2bWFjX3BrdC1cdTAwM2VkZXZfdHJhY2tlciwgR0ZQX0FUT01JQyk7XG4gMjk1Olx0XHRcdHNwaW5fbG9jayhcdTAwMjZzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VyeF9sb2NrKTtcbiAyOTY6XHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZtYWNfcGt0LVx1MDAzZW5vZGUsIFx1MDAyNnNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZXJ4X2JlYWNvbl9saXN0KTtcbiAyOTc6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlcnhfbG9jayk7XG4gMjk4Olx0XHRcdHF1ZXVlX3dvcmsoc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlbWFjX3dxLCBcdTAwMjZzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VyeF9iZWFjb25fd29yayk7XG4gMjk5Olx0XHRcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcbiAzMDA6XHRcbiAzMDE6XHRcdGNhc2UgSUVFRTgwMjE1NF9GQ19UWVBFX01BQ19DTUQ6XG4gMzAyOlx0XHRcdGRldl9kYmcoXHUwMDI2c2RhdGEtXHUwMDNlZGV2LVx1MDAzZWRldiwgXCYjMzQ7TUFDIENPTU1BTkQgcmVjZWl2ZWRcXG5cJiMzNDspO1xuIDMwMzpcdFx0XHRtYWNfcGt0ID0ga3phbGxvY19vYmooKm1hY19wa3QsIEdGUF9BVE9NSUMpO1xuIDMwNDpcdFx0XHRpZiAoIW1hY19wa3QpXG4gMzA1Olx0XHRcdFx0Z290byBmYWlsO1xuIDMwNjpcdFxuIDMwNzpcdFx0XHRtYWNfcGt0LVx1MDAzZXNrYiA9IHNrYjtcbiAzMDg6XHRcdFx0bWFjX3BrdC1cdTAwM2VzZGF0YSA9IHNkYXRhO1xuIDMwOTpcdFx0XHRuZXRkZXZfaG9sZChzZGF0YS1cdTAwM2VkZXYsIFx1MDAyNm1hY19wa3QtXHUwMDNlZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuIDMxMDpcdFx0XHRzcGluX2xvY2soXHUwMDI2c2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlcnhfbG9jayk7XG4gMzExOlx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2bWFjX3BrdC1cdTAwM2Vub2RlLCBcdTAwMjZzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VyeF9tYWNfY21kX2xpc3QpO1xuIDMxMjpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VyeF9sb2NrKTtcbiAzMTM6XHRcdFx0cXVldWVfd29yayhzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VtYWNfd3EsIFx1MDAyNnNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZXJ4X21hY19jbWRfd29yayk7XG4gMzE0Olx0XHRcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcbiAzMTU6XHRcbiAzMTY6XHRcdGNhc2UgSUVFRTgwMjE1NF9GQ19UWVBFX0FDSzpcbiAzMTc6XHRcdFx0Z290byBmYWlsO1xuIDMxODpcdFxuIDMxOTpcdFx0Y2FzZSBJRUVFODAyMTU0X0ZDX1RZUEVfREFUQTpcbiAzMjA6XHRcdFx0cmV0dXJuIGllZWU4MDIxNTRfZGVsaXZlcl9za2Ioc2tiKTtcbiAzMjE6XHRcdGRlZmF1bHQ6XG4gMzIyOlx0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7aWVlZTgwMjE1NDogYmFkIGZyYW1lIHJlY2VpdmVkIFwmIzM0O1xuIDMyMzpcdFx0XHRcdFx0ICAgIFwmIzM0Oyh0eXBlID0gJWQpXFxuXCYjMzQ7LCBtYWNfY2Ioc2tiKS1cdTAwM2V0eXBlKTtcbiAzMjQ6XHRcdFx0Z290byBmYWlsO1xuIDMyNTpcdFx0fVxuIDMyNjpcdFxuIDMyNzpcdGZhaWw6XG4gMzI4Olx0XHRrZnJlZV9za2Ioc2tiKTtcbiAzMjk6XHRcdHJldHVybiBORVRfUlhfRFJPUDtcbiAzMzA6XHR9XG4gMzMxOlx0XG4gMzMyOlx0c3RhdGljIHZvaWRcbiAzMzM6XHRpZWVlODAyMTU0X3ByaW50X2FkZHIoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGllZWU4MDIxNTRfYWRkciAqYWRkcilcbiAzMzQ6XHR7XG4gMzM1Olx0XHRpZiAoYWRkci1cdTAwM2Vtb2RlID09IElFRUU4MDIxNTRfQUREUl9OT05FKSB7XG4gMzM2Olx0XHRcdHByX2RlYnVnKFwmIzM0OyVzIG5vdCBwcmVzZW50XFxuXCYjMzQ7LCBuYW1lKTtcbiAzMzc6XHRcdFx0cmV0dXJuO1xuIDMzODpcdFx0fVxuIDMzOTpcdFxuIDM0MDpcdFx0cHJfZGVidWcoXCYjMzQ7JXMgUEFOIElEOiAlMDR4XFxuXCYjMzQ7LCBuYW1lLCBsZTE2X3RvX2NwdShhZGRyLVx1MDAzZXBhbl9pZCkpO1xuIDM0MTpcdFx0aWYgKGFkZHItXHUwMDNlbW9kZSA9PSBJRUVFODAyMTU0X0FERFJfU0hPUlQpIHtcbiAzNDI6XHRcdFx0cHJfZGVidWcoXCYjMzQ7JXMgaXMgc2hvcnQ6ICUwNHhcXG5cJiMzNDssIG5hbWUsXG4gMzQzOlx0XHRcdFx0IGxlMTZfdG9fY3B1KGFkZHItXHUwMDNlc2hvcnRfYWRkcikpO1xuIDM0NDpcdFx0fSBlbHNlIHtcbiAzNDU6XHRcdFx0dTY0IGh3ID0gc3dhYjY0KChfX2ZvcmNlIHU2NClhZGRyLVx1MDAzZWV4dGVuZGVkX2FkZHIpO1xuIDM0NjpcdFxuIDM0NzpcdFx0XHRwcl9kZWJ1ZyhcJiMzNDslcyBpcyBoYXJkd2FyZTogJThwaENcXG5cJiMzNDssIG5hbWUsIFx1MDAyNmh3KTtcbiAzNDg6XHRcdH1cbiAzNDk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMTYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb2RlIEJlZm9yZSB0aGUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICpiZWZvcmUqIHN0YXRlIG9mIHRoaXMgYGllZWU4MDIxNTRfc3ViaWZfZnJhbWVgIGZ1bmN0aW9uLiBJJiMzOTttIGZvY3VzaW5nIG9uIGEgc3BlY2lmaWMgc2VxdWVuY2Ugd2hlcmUgYSBgbWFjX3BrdGAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYC4gSWYgdGhhdCBzdWNjZWVkcywgdGhlIGNvZGUgdGhlbiBkb2VzIGBtYWNfcGt0LSZndDtza2IgPSBza2JfZ2V0KHNrYik7YCBhbmQgcmV0dXJucyBgTkVUX1JYX1NVQ0NFU1NgLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoZXJlIGlzIHRoZSBvcmlnaW5hbCBgc2tiYCBiZWluZyBoYW5kbGVkPyBJcyB0aGUgcmVzcG9uc2liaWxpdHkgdG8gZnJlZSB0aGUgYHNrYmAgd2l0aCB0aGUgY2FsbGVyIG9yIHdpdGhpbiBhIHdvcmtxdWV1ZT8gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYHNrYmAgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSB3ZXJlIGFueSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMuIFNvLCBJIG5lZWQgdG8gc2VlIHdoZXJlIGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lYCBpcyBjYWxsZWQgZnJvbSwgYW5kIHRoZW4gaG93IHRoZSBgbWFjX3BrdGAgdGhhdCYjMzk7cyBjcmVhdGVkIGhlcmUgaXMgdXNlZCBpbnNpZGUgb2YgdGhlIHdvcmtxdWV1ZS4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCBwcm9ibGVtIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTU0X3N1YmlmX2ZyYW1lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxNTQvcnguYz0yMDE9c3RhdGljIGludFxubmV0L21hYzgwMjE1NC9yeC5jOjIwMjppZWVlODAyMTU0X3N1YmlmX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTU0X3N1Yl9pZl9kYXRhICpzZGF0YSxcbm5ldC9tYWM4MDIxNTQvcnguYy0yMDMtXHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjE1NF9oZHIgKmhkcilcbi0tXG5uZXQvbWFjODAyMTU0L3J4LmM9NDExPV9faWVlZTgwMjE1NF9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbWFjODAyMTU0L3J4LmMtNDQxLVx0XHRcdHNrYjItXHUwMDNlZGV2ID0gc2RhdGEtXHUwMDNlZGV2O1xubmV0L21hYzgwMjE1NC9yeC5jOjQ0MjpcdFx0XHRpZWVlODAyMTU0X3N1YmlmX2ZyYW1lKHNkYXRhLCBza2IyLCBcdTAwMjZoZHIpO1xubmV0L21hYzgwMjE1NC9yeC5jLTQ0My1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTgzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhlc2UgaXRlbXM6CgoqKkRpdmluZyBpbnRvIHRoZSBSZWNlcHRpb24gV29ya3F1ZXVlcyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSBgcnhfYmVhY29uX3dvcmtgIGFuZCBgcnhfbWFjX2NtZF93b3JrYCB3b3JrcXVldWVzLiBUaGVzZSBhcmUgbGlrZWx5IGhhbmRsaW5nIHRoZSBpbmNvbWluZyBiZWFjb24gYW5kIE1BQyBjb21tYW5kIGZyYW1lcywgc28gdGhleSYjMzk7cmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSByZWNlaXZlciBwcm9jZXNzZXMgaXRzIGludGVyYWN0aW9ucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGZsb3cgb2YgZGF0YSwgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kIGhvdyB0aGVzZSB0YXNrcyBhcmUgc2NoZWR1bGVkIGFuZCBwcmlvcml0aXplZCB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMgYWJvdXQgdGhlIGxvZ2ljIGluIHRoZXNlIHNwZWNpZmljIHdvcmtxdWV1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J4X2JlYWNvbl93b3JrfHJ4X21hY19jbWRfd29yayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTU0L2llZWU4MDIxNTRfaS5oPTMxPXN0cnVjdCBpZWVlODAyMTU0X2xvY2FsIHtcbi0tXG5uZXQvbWFjODAyMTU0L2llZWU4MDIxNTRfaS5oLTczLVx0c3RydWN0IGxpc3RfaGVhZCByeF9iZWFjb25fbGlzdDtcbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmg6NzQ6XHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcnhfYmVhY29uX3dvcms7XG5uZXQvbWFjODAyMTU0L2llZWU4MDIxNTRfaS5oLTc1LVx0c3RydWN0IGxpc3RfaGVhZCByeF9tYWNfY21kX2xpc3Q7XG5uZXQvbWFjODAyMTU0L2llZWU4MDIxNTRfaS5oOjc2Olx0c3RydWN0IHdvcmtfc3RydWN0IHJ4X21hY19jbWRfd29yaztcbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmgtNzctXHQvKiBTZXJpYWxpemVzIHJ4X2JlYWNvbl9saXN0IGFuZCByeF9tYWNfY21kX2xpc3QgYWdhaW5zdCB0aGUgUlhcbi0tXG5uZXQvbWFjODAyMTU0L2llZWU4MDIxNTRfaS5oPTI5MD1pbnQgbWFjODAyMTU0X3Byb2Nlc3NfYmVhY29uKHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbWFjODAyMTU0L2llZWU4MDIxNTRfaS5oLTI5Mi1cdFx0XHQgICAgIHU4IHBhZ2UsIHU4IGNoYW5uZWwpO1xubmV0L21hYzgwMjE1NC9pZWVlODAyMTU0X2kuaDoyOTM6dm9pZCBtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xubmV0L21hYzgwMjE1NC9pZWVlODAyMTU0X2kuaC0yOTQtXG4tLVxubmV0L21hYzgwMjE1NC9pZWVlODAyMTU0X2kuaD0zMDY9c3RhdGljIGlubGluZSBib29sIG1hYzgwMjE1NF9pc19iZWFjb25pbmcoc3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsKVxuLS1cbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmgtMzEwLVxubmV0L21hYzgwMjE1NC9pZWVlODAyMTU0X2kuaDozMTE6dm9pZCBtYWM4MDIxNTRfcnhfbWFjX2NtZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmgtMzEyLXZvaWQgbWFjODAyMTU0X2ZsdXNoX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5uZXQvbWFjODAyMTU0L21haW4uYz00Nz1pZWVlODAyMTU0X2FsbG9jX2h3KHNpemVfdCBwcml2X2RhdGFfbGVuLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjE1NF9vcHMgKm9wcylcbi0tXG5uZXQvbWFjODAyMTU0L21haW4uYy0xMDItXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZsb2NhbC1cdTAwM2VzY2FuX3dvcmssIG1hYzgwMjE1NF9zY2FuX3dvcmtlcik7XG5uZXQvbWFjODAyMTU0L21haW4uYzoxMDM6XHRJTklUX1dPUksoXHUwMDI2bG9jYWwtXHUwMDNlcnhfYmVhY29uX3dvcmssIG1hYzgwMjE1NF9yeF9iZWFjb25fd29ya2VyKTtcbm5ldC9tYWM4MDIxNTQvbWFpbi5jLTEwNC1cdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNmxvY2FsLVx1MDAzZWJlYWNvbl93b3JrLCBtYWM4MDIxNTRfYmVhY29uX3dvcmtlcik7XG5uZXQvbWFjODAyMTU0L21haW4uYzoxMDU6XHRJTklUX1dPUksoXHUwMDI2bG9jYWwtXHUwMDNlcnhfbWFjX2NtZF93b3JrLCBtYWM4MDIxNTRfcnhfbWFjX2NtZF93b3JrZXIpO1xubmV0L21hYzgwMjE1NC9tYWluLmMtMTA2LVxuLS1cbm5ldC9tYWM4MDIxNTQvcnguYz0yND1zdGF0aWMgaW50IGllZWU4MDIxNTRfZGVsaXZlcl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbWFjODAyMTU0L3J4LmMtMzEtXG5uZXQvbWFjODAyMTU0L3J4LmM6MzI6dm9pZCBtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQvbWFjODAyMTU0L3J4LmMtMzMte1xubmV0L21hYzgwMjE1NC9yeC5jLTM0LVx0c3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsID1cbm5ldC9tYWM4MDIxNTQvcnguYzozNTpcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsLCByeF9iZWFjb25fd29yayk7XG5uZXQvbWFjODAyMTU0L3J4LmMtMzYtXHRzdHJ1Y3QgY2ZnODAyMTU0X21hY19wa3QgKm1hY19wa3Q7XG4tLVxubmV0L21hYzgwMjE1NC9yeC5jPTc4PXN0YXRpYyB2b2lkIG1hYzgwMjE1NF9yeF9tYWNfY21kKHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbWFjODAyMTU0L3J4LmMtMTI1LVxubmV0L21hYzgwMjE1NC9yeC5jOjEyNjp2b2lkIG1hYzgwMjE1NF9yeF9tYWNfY21kX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQvbWFjODAyMTU0L3J4LmMtMTI3LXtcbm5ldC9tYWM4MDIxNTQvcnguYy0xMjgtXHRzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwgPVxubmV0L21hYzgwMjE1NC9yeC5jOjEyOTpcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsLCByeF9tYWNfY21kX3dvcmspO1xubmV0L21hYzgwMjE1NC9yeC5jLTEzMC1cdHN0cnVjdCBjZmc4MDIxNTRfbWFjX3BrdCAqbWFjX3BrdDtcbi0tXG5uZXQvbWFjODAyMTU0L3J4LmM9MjAyPWllZWU4MDIxNTRfc3ViaWZfZnJhbWUoc3RydWN0IGllZWU4MDIxNTRfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxNTQvcnguYy0yOTctXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZXJ4X2xvY2spO1xubmV0L21hYzgwMjE1NC9yeC5jOjI5ODpcdFx0cXVldWVfd29yayhzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VtYWNfd3EsIFx1MDAyNnNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZXJ4X2JlYWNvbl93b3JrKTtcbm5ldC9tYWM4MDIxNTQvcnguYy0yOTktXHRcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcbi0tXG5uZXQvbWFjODAyMTU0L3J4LmMtMzEyLVx0XHRzcGluX3VubG9jayhcdTAwMjZzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VyeF9sb2NrKTtcbm5ldC9tYWM4MDIxNTQvcnguYzozMTM6XHRcdHF1ZXVlX3dvcmsoc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlbWFjX3dxLCBcdTAwMjZzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VyeF9tYWNfY21kX3dvcmspO1xubmV0L21hYzgwMjE1NC9yeC5jLTMxNC1cdFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODE1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRoaW5nczoKCioqQW5hbHl6aW5nIE1BQyA4MDIuMTUuNCBSZWNlaXZlIE1lY2hhbmlzbXMqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgaGVhcnQgb2YgdGhlIDgwMi4xNS40IE1BQyBsYXllciwgc3BlY2lmaWNhbGx5IHRoZSByZWNlaXZlIHBhdGguIEkgbmVlZCB0byB0YWtlIGEgY2xvc2UgbG9vayBhdCB0aHJlZSBrZXkgY29tcG9uZW50czogYG1hYzgwMjE1NF9yeF9iZWFjb25fd29ya2VyYCwgYG1hYzgwMjE1NF9yeF9tYWNfY21kX3dvcmtlcmAsIGFuZCBgbWFjODAyMTU0X2ZsdXNoX2xpc3RgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgYmVhY29ucyBhcmUgaGFuZGxlZCwgaG93IE1BQyBjb21tYW5kcyBhcmUgcHJvY2Vzc2VkLCBhbmQgaG93IHJlY2VpdmVkIGRhdGEgbGlzdHMgYXJlIG1hbmFnZWQsIHByb2JhYmx5IGZvciBmbHVzaGluZyBvbGQgb3IgaW52YWxpZCBlbnRyaWVzLiBUaGVzZSB0aHJlZSBmdW5jdGlvbnMgd2lsbCBwcm9iYWJseSBiZSB0aGUga2V5cyB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgTUFDIGxheWVyIHJlY2VpdmVzIGFuZCBwcm9jZXNzZXMgaXRzIGRhdGEuIEkgd2lsbCBiZSBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZXNlIHRocmVlIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTU0L3J4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0fVxuICAzMTpcdFxuICAzMjpcdHZvaWQgbWFjODAyMTU0X3J4X2JlYWNvbl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuICAzMzpcdHtcbiAgMzQ6XHRcdHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCA9XG4gIDM1Olx0XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCwgcnhfYmVhY29uX3dvcmspO1xuICAzNjpcdFx0c3RydWN0IGNmZzgwMjE1NF9tYWNfcGt0ICptYWNfcGt0O1xuICAzNzpcdFxuICAzODpcdFx0Zm9yICg7Oykge1xuICAzOTpcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlcnhfbG9jayk7XG4gIDQwOlx0XHRcdG1hY19wa3QgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoXHUwMDI2bG9jYWwtXHUwMDNlcnhfYmVhY29uX2xpc3QsXG4gIDQxOlx0XHRcdFx0XHRcdFx0ICAgc3RydWN0IGNmZzgwMjE1NF9tYWNfcGt0LCBub2RlKTtcbiAgNDI6XHRcdFx0aWYgKG1hY19wa3QpXG4gIDQzOlx0XHRcdFx0bGlzdF9kZWwoXHUwMDI2bWFjX3BrdC1cdTAwM2Vub2RlKTtcbiAgNDQ6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlcnhfbG9jayk7XG4gIDQ1Olx0XHRcdGlmICghbWFjX3BrdClcbiAgNDY6XHRcdFx0XHRicmVhaztcbiAgNDc6XHRcbiAgNDg6XHRcdFx0bWFjODAyMTU0X3Byb2Nlc3NfYmVhY29uKGxvY2FsLCBtYWNfcGt0LVx1MDAzZXNrYixcbiAgNDk6XHRcdFx0XHRcdFx0IG1hY19wa3QtXHUwMDNlcGFnZSwgbWFjX3BrdC1cdTAwM2VjaGFubmVsKTtcbiAgNTA6XHRcbiAgNTE6XHRcdFx0bmV0ZGV2X3B1dChtYWNfcGt0LVx1MDAzZXNkYXRhLVx1MDAzZWRldiwgXHUwMDI2bWFjX3BrdC1cdTAwM2VkZXZfdHJhY2tlcik7XG4gIDUyOlx0XHRcdGtmcmVlX3NrYihtYWNfcGt0LVx1MDAzZXNrYik7XG4gIDUzOlx0XHRcdGtmcmVlKG1hY19wa3QpO1xuICA1NDpcdFx0fVxuICA1NTpcdH1cbiAgNTY6XHRcbiAgNTc6XHRzdGF0aWMgYm9vbCBtYWM4MDIxNTRfc2hvdWxkX2Fuc3dlcl9iZWFjb25fcmVxKHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbClcbiAgNTg6XHR7XG4gIDU5Olx0XHRzdHJ1Y3QgY2ZnODAyMTU0X2JlYWNvbl9yZXF1ZXN0ICpiZWFjb25fcmVxO1xuICA2MDpcdFx0dW5zaWduZWQgaW50IGludGVydmFsO1xuICA2MTpcdFxuICA2MjpcdFx0cmN1X3JlYWRfbG9jaygpO1xuICA2MzpcdFx0YmVhY29uX3JlcSA9IHJjdV9kZXJlZmVyZW5jZShsb2NhbC1cdTAwM2ViZWFjb25fcmVxKTtcbiAgNjQ6XHRcdGlmICghYmVhY29uX3JlcSkge1xuICA2NTpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAgNjY6XHRcdFx0cmV0dXJuIGZhbHNlO1xuICA2NzpcdFx0fVxuICA2ODpcdFxuICA2OTpcdFx0aW50ZXJ2YWwgPSBiZWFjb25fcmVxLVx1MDAzZWludGVydmFsO1xuICA3MDpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gIDcxOlx0XG4gIDcyOlx0XHRpZiAoIW1hYzgwMjE1NF9pc19iZWFjb25pbmcobG9jYWwpKVxuICA3MzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gIDc0Olx0XG4gIDc1Olx0XHRyZXR1cm4gaW50ZXJ2YWwgPT0gSUVFRTgwMjE1NF9BQ1RJVkVfU0NBTl9EVVJBVElPTjtcbiAgNzY6XHR9XG4gIDc3Olx0XG4gIDc4Olx0c3RhdGljIHZvaWQgbWFjODAyMTU0X3J4X21hY19jbWQoc3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsLFxuICA3OTpcdFx0XHRcdFx0IHN0cnVjdCBjZmc4MDIxNTRfbWFjX3BrdCAqbWFjX3BrdClcbiAgODA6XHR7XG4gIDgxOlx0XHR1OCBtYWNfY21kO1xuICA4MjpcdFx0aW50IHJjO1xuICA4MzpcdFxuICA4NDpcdFx0cmMgPSBpZWVlODAyMTU0X2dldF9tYWNfY21kKG1hY19wa3QtXHUwMDNlc2tiLCBcdTAwMjZtYWNfY21kKTtcbiAgODU6XHRcdGlmIChyYylcbiAgODY6XHRcdFx0cmV0dXJuO1xuICA4NzpcdFxuICA4ODpcdFx0c3dpdGNoIChtYWNfY21kKSB7XG4gIDg5Olx0XHRjYXNlIElFRUU4MDIxNTRfQ01EX0JFQUNPTl9SRVE6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NzAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIE1BQyBDb21tYW5kIFdvcmtlcioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGUgcmVjZWl2ZSBwYXRoLCBhbmQgd2UmIzM5O3ZlIGFscmVhZHkgc2NvcGVkIG91dCBhIGZldyBhcmVhcy4gTGV0JiMzOTtzIG5vdCBnZXQgdHVubmVsIHZpc2lvbiwgdGhvdWdoLiBCZWZvcmUgd2UgbW92ZSBvbiwgSSBuZWVkIHRvIGNoZWNrIG91dCBgbWFjODAyMTU0X3J4X21hY19jbWRfd29ya2VyYC4gSXQmIzM5O3MgYSBrZXkgcGFydCBvZiB0aGUgTUFDIGxheWVyJiMzOTtzIHJlY2VpdmUgcHJvY2Vzc2luZy4gSSBoYXZlIGEgaHVuY2ggdGhhdCBzb21ldGhpbmcgY3JpdGljYWwgdG8gb3VyIGRlYnVnZ2luZyBlZmZvcnRzIG1heSByZXNpZGUgdGhlcmUuIFRoaXMgY291bGQgYmUgd2hlcmUgb3VyIHByb2JsZW0gbGllcywgb3IgZXZlbiB3aGVyZSBhIGNydWNpYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1hbGZ1bmN0aW9uIGlzIGJlaW5nIHByb2Nlc3NlZC4gSXQmIzM5O3MgdG9vIGltcG9ydGFudCB0byBza2lwIG92ZXIuIEdvdHRhIGJlIHRob3JvdWdoLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIGBtYWM4MDIxNTRfcnhfbWFjX2NtZF93b3JrZXJgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxNTQvcnguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTI1Olx0XG4gMTI2Olx0dm9pZCBtYWM4MDIxNTRfcnhfbWFjX2NtZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIDEyNzpcdHtcbiAxMjg6XHRcdHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCA9XG4gMTI5Olx0XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCwgcnhfbWFjX2NtZF93b3JrKTtcbiAxMzA6XHRcdHN0cnVjdCBjZmc4MDIxNTRfbWFjX3BrdCAqbWFjX3BrdDtcbiAxMzE6XHRcbiAxMzI6XHRcdGZvciAoOzspIHtcbiAxMzM6XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X2xvY2spO1xuIDEzNDpcdFx0XHRtYWNfcGt0ID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X21hY19jbWRfbGlzdCxcbiAxMzU6XHRcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgY2ZnODAyMTU0X21hY19wa3QsIG5vZGUpO1xuIDEzNjpcdFx0XHRpZiAobWFjX3BrdClcbiAxMzc6XHRcdFx0XHRsaXN0X2RlbChcdTAwMjZtYWNfcGt0LVx1MDAzZW5vZGUpO1xuIDEzODpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VyeF9sb2NrKTtcbiAxMzk6XHRcdFx0aWYgKCFtYWNfcGt0KVxuIDE0MDpcdFx0XHRcdGJyZWFrO1xuIDE0MTpcdFxuIDE0MjpcdFx0XHQvKiBBIHN0b3BwZWQgaW50ZXJmYWNlIGNhbm5vdCB0cmFuc21pdDsgc2tpcHBpbmcgYXZvaWRzIGFcbiAxNDM6XHRcdFx0ICogbmVlZGxlc3MgYXNzb2NpYXRpb24gcmVzcG9uc2UgKGFuZCB0aGUgIW5ldGlmX3J1bm5pbmcoKVxuIDE0NDpcdFx0XHQgKiB3YXJuaW5nIGl0IHdvdWxkIHRyaXApIGR1cmluZyB0ZWFyZG93bi4gVGhlIGJlYWNvbiB3b3JrZXJcbiAxNDU6XHRcdFx0ICogbmVlZHMgbm8gc3VjaCBjaGVjayBhcyBpdCBuZXZlciB0cmFuc21pdHMuXG4gMTQ2Olx0XHRcdCAqL1xuIDE0NzpcdFx0XHRpZiAoaWVlZTgwMjE1NF9zZGF0YV9ydW5uaW5nKG1hY19wa3QtXHUwMDNlc2RhdGEpKVxuIDE0ODpcdFx0XHRcdG1hYzgwMjE1NF9yeF9tYWNfY21kKGxvY2FsLCBtYWNfcGt0KTtcbiAxNDk6XHRcbiAxNTA6XHRcdFx0bmV0ZGV2X3B1dChtYWNfcGt0LVx1MDAzZXNkYXRhLVx1MDAzZWRldiwgXHUwMDI2bWFjX3BrdC1cdTAwM2VkZXZfdHJhY2tlcik7XG4gMTUxOlx0XHRcdGtmcmVlX3NrYihtYWNfcGt0LVx1MDAzZXNrYik7XG4gMTUyOlx0XHRcdGtmcmVlKG1hY19wa3QpO1xuIDE1MzpcdFx0fVxuIDE1NDpcdH1cbiAxNTU6XHRcbiAxNTY6XHQvKipcbiAxNTc6XHQgKiBtYWM4MDIxNTRfZmx1c2hfbGlzdCAtIGZyZWUgcXVldWVkIFJYIGZyYW1lcyBvbiBAbGlzdFxuIDE1ODpcdCAqIEBsaXN0OiByeF9iZWFjb25fbGlzdCBvciByeF9tYWNfY21kX2xpc3RcbiAxNTk6XHQgKiBAc2RhdGE6IG9ubHkgZnJlZSBmcmFtZXMgcmVjZWl2ZWQgb24gdGhpcyBpbnRlcmZhY2UsIG9yICVOVUxMIGZvciBhbGxcbiAxNjA6XHQgKlxuIDE2MTpcdCAqIEVhY2ggZnJhbWUgcGlucyB0aGUgbmV0X2RldmljZSBpdCB3YXMgcmVjZWl2ZWQgb24gKHZpYSBuZXRkZXZfaG9sZCgpKSxcbiAxNjI6XHQgKiBzbyByZWxlYXNlIHRoYXQgcmVmZXJlbmNlIGFzIHRoZSBmcmFtZSBpcyBkcm9wcGVkLiBDYWxsZXIgbXVzdCBob2xkXG4gMTYzOlx0ICogbG9jYWwtXHUwMDNlcnhfbG9jay5cbiAxNjQ6XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkwNQoJCQkJCQkJb3V0cHV0OiAyMTAKCQkJCQkJCXRob3VnaHRzOiA3MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IExlYWsgRml4IGFuZCBLTVNBTiBJbXBsaWNhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvbWFjODAyMTU0L3J4LmNgLiAgQmFzaWNhbGx5LCBpdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXg6IGluIGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lYCwgd2hlbiBhIGBtYWNfcGt0YCBpcyBxdWV1ZWQsIHdlJiMzOTtyZSBjaGFuZ2luZyBob3cgd2UgaGFuZGxlIHRoZSBgc2tiYC4gUHJldmlvdXNseSwgd2Ugd2VyZSBkb2luZyBgbWFjX3BrdC0mZ3Q7c2tiID0gc2tiX2dldChza2IpO2AgYW5kIHJldHVybmluZyBgTkVUX1JYX1NVQ0NFU1NgIHdpdGhvdXQgZHJvcHBpbmcgdGhlIG9yaWdpbmFsIGBza2JgIHJlZmVyZW5jZS4gVGhpcyBtZWFudCB0aGUgYHNrYmAgcmVmY291bnQgd2FzIGJ1bXBlZCwgYnV0IG5ldmVyIGRlY3JlbWVudGVkIGluIHRoaXMgcGF0aCwgbGVhZGluZyB0byBhIGNsYXNzaWMgbWVtb3J5IGxlYWsuIFRoZSB3b3JrZXIgd291bGQgZXZlbnR1YWxseSBmcmVlIGl0IG9uY2UsIGJ1dCB0aGUgcmVmY291bnQgd291bGQgYmUgd3JvbmcuCgpUaGUgcGF0Y2gmIzM5O3Mgc29sdXRpb24gaXMgc2ltcGxlIGFuZCBlbGVnYW50OiByZXBsYWNlIHRoYXQgd2l0aCBgbWFjX3BrdC0mZ3Q7c2tiID0gc2tiO2AuICBUaGlzIHRyYW5zZmVycyAqb3duZXJzaGlwKiBvZiB0aGUgYHNrYmAgdG8gYG1hY19wa3RgIGltbWVkaWF0ZWx5LCBmaXhpbmcgdGhlIGxlYWsuIE5vIG1vcmUgdW5uZWNlc3NhcnkgcmVmY291bnQgaW5jcmVtZW50cy4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBJJiMzOTt2ZSBydW4gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OgoKMS4gICoqVXNlci1zcGFjZSBleHBvc3VyZToqKiBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG1pZ2h0IGxlYWsgaW5mby4gYG1hY19wa3RgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAsIHdoaWNoIGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbi4gVGhpcyBpcyBnb29kLgoyLiAgKipVbmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGFyZSBiZWluZyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIHdpdGggdGhpcyBjaGFuZ2UuCjMuICAqKkJ1ZmZlciBoYW5kbGluZzoqKiBObyBjaGFuZ2VzIHRvIGJ1ZmZlciBsZW5ndGhzLCBib3VuZHMgY2hlY2tzLCBvciBsb2dpYyB0aGF0IHdvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzLgo0LiAgKipCdWcgdHlwZToqKiBUaGlzIGlzIHN0cmljdGx5IGEgcmVmZXJlbmNlIGNvdW50IGxlYWsuICBJZiBzb21ldGhpbmcgZWxzZSB3YXMgYnJva2VuLCB0aGVyZSAqbWlnaHQqIGJlIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlLCBidXQgS0FTQU4gYW5kIGttZW1sZWFrIGFyZSBhbHJlYWR5IHBlcmZlY3RseSBzdWl0ZWQgdG8gY2F0Y2ggdGhvc2UuCgpTbywgd2hlcmUgZG9lcyBLTVNBTiBmaXQgaW4/IFdlIHVzZSBLTVNBTiBmb3IgZmluZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mbyBsZWFrcywgbm90IHJlZmVyZW5jZSBjb3VudCBlcnJvcnMuIFRoaXMgcGF0Y2ggKm9ubHkqIGFkZHJlc3NlcyByZWZlcmVuY2UgY291bnRpbmcuICBUaGUgY2hhbmdlIGF2b2lkcyB0YWtpbmcgYW4gKmV4dHJhKiByZWZjb3VudCwgYW5kIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgZXhwb3NlZCB0byB1c2VyLXNwYWNlIGFzIHBhcnQgb2YgdGhpcy4gU3RhbmRhcmQgbWVtb3J5IGRlYnVnZ2luZyB0b29scyBsaWtlIEtBU0FOLCBrbWVtbGVhaywgZXRjLiwgYXJlIHN1ZmZpY2llbnQgZm9yIGRldGVjdGluZyB0aGUgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgdHlwZSBvZiBtZW1vcnkgbWFuYWdlbWVudC4KClNvLCBpbiBzdW1tYXJ5OgoKKiAgICoqQ29udGV4dDoqKiBQYXRjaCBtb2RpZmllcyBgbmV0L21hYzgwMjE1NC9yeC5jYCBieSByZW1vdmluZyB0aGUgYHNrYl9nZXRgIGNhbGwgd2hlbiBlbnF1ZXVpbmcgYmVhY29uIGFuZCBNQUMgY29tbWFuZCBwYWNrZXRzLgoqICAgKipJbXBhY3Q6KiogRml4ZXMgYSBtZW1vcnkgbGVhayBjYXVzZWQgYnkgYW4gdW5uZWNlc3NhcnkgcmVmZXJlbmNlIGNvdW50IG9uIHRoZSBgc2tiYC4KKiAgICoqS01TQU4gQXBwbGljYWJpbGl0eToqKiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zIG9yIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBmaWVsZHMuCiogICAqKktBU0FOL0dlbmVyYWwgU2FuaXRpemVyczoqKiBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgbWVtb3J5IGRlYnVnZ2luZyB0b29scyBhcmUgc3VmZmljaWVudCBmb3IgaGFuZGxpbmcgdGhlIHJlZmNvdW50IHJlbGF0ZWQgaXNzdWVzLgoKSSYjMzk7bSBjb25maWRlbnQgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAgaGVyZS4gIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZSgpYCBpbiBgbmV0L21hYzgwMjE1NC9yeC5jYCB0byBhc3NpZ24gYG1hY19wa3QtXHUwMDNlc2tiID0gc2tiYCBkaXJlY3RseSBpbnN0ZWFkIG9mIGNhbGxpbmcgYHNrYl9nZXQoc2tiKWAuIFRoaXMgYXZvaWRzIHRha2luZyBhbiBleHRyYSByZWZjb3VudCB3aGVuIHRyYW5zZmVycmluZyBvd25lcnNoaXAgb2YgdGhlIHNrYiB0byB0aGUgYXN5bmNocm9ub3VzIGJlYWNvbi9NQUMgY29tbWFuZCBwcm9jZXNzaW5nIHdvcmtlcnMsIGZpeGluZyBhbiBza2IgcmVmZXJlbmNlIGNvdW50IC8gbWVtb3J5IGxlYWsuXG5cblRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBwYWRkaW5nLCBvciBleHBvc2Uga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS4gYG1hY19wa3RgIGlzIGFscmVhZHkgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iaigpYC4gUmVmZXJlbmNlIGNvdW50aW5nIGFuZCBtZW1vcnkgbGlmZWN5Y2xlIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLCB3aXRoIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgZGV0ZWN0YWJsZSBvbmx5IGJ5IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGllZWU4MDIxNTRfc3ViaWZfZnJhbWUoKWAgaW4gYG5ldC9tYWM4MDIxNTQvcnguY2AgdG8gYXNzaWduIGBtYWNfcGt0LVx1MDAzZXNrYiA9IHNrYmAgZGlyZWN0bHkgaW5zdGVhZCBvZiBjYWxsaW5nIGBza2JfZ2V0KHNrYilgLiBUaGlzIGF2b2lkcyB0YWtpbmcgYW4gZXh0cmEgcmVmY291bnQgd2hlbiB0cmFuc2ZlcnJpbmcgb3duZXJzaGlwIG9mIHRoZSBza2IgdG8gdGhlIGFzeW5jaHJvbm91cyBiZWFjb24vTUFDIGNvbW1hbmQgcHJvY2Vzc2luZyB3b3JrZXJzLCBmaXhpbmcgYW4gc2tiIHJlZmVyZW5jZSBjb3VudCAvIG1lbW9yeSBsZWFrLlxuXG5UaGUgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZXhwb3NlIGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIGBtYWNfcGt0YCBpcyBhbHJlYWR5IGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmooKWAuIFJlZmVyZW5jZSBjb3VudGluZyBhbmQgbWVtb3J5IGxpZmVjeWNsZSBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBsZWFrIGRldGVjdG9ycywgd2l0aCBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGRldGVjdGFibGUgb25seSBieSBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6Mjk6NTUuMjM3Nzg2NjgxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkwNTU5MTc0ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSUVFRTgwMjE1NFwiLFxuICAgIFwiTUFDODAyMTU0XCIsXG4gICAgXCJJRUVFODAyMTU0X0RSSVZFUlNcIixcbiAgICBcIklFRUU4MDIxNTRfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTU0X3N1YmlmX2ZyYW1lXCIsXG4gICAgXCJtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlclwiLFxuICAgIFwibWFjODAyMTU0X3J4X21hY19jbWRfd29ya2VyXCIsXG4gICAgXCJpZWVlODAyMTU0X3J4XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZSgpYCBpbiBgbmV0L21hYzgwMjE1NC9yeC5jYCB0byBhc3NpZ24gYG1hY19wa3QtXFx1MDAzZXNrYiA9IHNrYmAgZGlyZWN0bHkgaW5zdGVhZCBvZiBjYWxsaW5nIGBza2JfZ2V0KHNrYilgLiBUaGlzIGF2b2lkcyB0YWtpbmcgYW4gZXh0cmEgcmVmY291bnQgd2hlbiB0cmFuc2ZlcnJpbmcgb3duZXJzaGlwIG9mIHRoZSBza2IgdG8gdGhlIGFzeW5jaHJvbm91cyBiZWFjb24vTUFDIGNvbW1hbmQgcHJvY2Vzc2luZyB3b3JrZXJzLCBmaXhpbmcgYW4gc2tiIHJlZmVyZW5jZSBjb3VudCAvIG1lbW9yeSBsZWFrLlxcblxcblRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBwYWRkaW5nLCBvciBleHBvc2Uga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS4gYG1hY19wa3RgIGlzIGFscmVhZHkgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iaigpYC4gUmVmZXJlbmNlIGNvdW50aW5nIGFuZCBtZW1vcnkgbGlmZWN5Y2xlIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLCB3aXRoIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgZGV0ZWN0YWJsZSBvbmx5IGJ5IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNrX2J1ZmYgcmVmZXJlbmNlIGNvdW50IGhhbmRsaW5nIGluIGllZWU4MDIxNTRfc3ViaWZfZnJhbWUoKSBieSByZW1vdmluZyBza2JfZ2V0KCkgY2FsbHMgd2hlbiBlbnF1ZXVpbmcgYmVhY29uIGFuZCBNQUMgY29tbWFuZCBwYWNrZXRzIHRvIGFzeW5jaHJvbm91cyB3b3JrZXIgcXVldWVzLiBUaGlzIHJlYWNoYWJsZSBuZXR3b3JraW5nIHBhdGggY2FuIGJlIHRlc3RlZCB2aWEgbWFjODAyMTU0X2h3c2ltIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIHZlcmlmeSBza2IgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBjb3JyZWN0bmVzcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6Mjk6NTUuMjM3NzkwOTIxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAyMDg3MDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzQyNTk2OGJjNGNmNTM5MjJhNWM2OTM2Nzk3YWQzNjVjZWNkMzAyNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCA2IDExOjI5OjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxNTQvcnguYyBiL25ldC9tYWM4MDIxNTQvcnguY1xcbmluZGV4IDE5YjUzODJlODVhODQuLmFkNjAyZDIyMmU4NjEgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjE1NC9yeC5jXFxuKysrIGIvbmV0L21hYzgwMjE1NC9yeC5jXFxuQEAgLTI4Nyw3ICsyODcsNyBAQCBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTU0X3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0aWYgKCFtYWNfcGt0KVxcbiBcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIFxcbi1cXHRcXHRtYWNfcGt0LVxcdTAwM2Vza2IgPSBza2JfZ2V0KHNrYik7XFxuK1xcdFxcdG1hY19wa3QtXFx1MDAzZXNrYiA9IHNrYjtcXG4gXFx0XFx0bWFjX3BrdC1cXHUwMDNlc2RhdGEgPSBzZGF0YTtcXG4gXFx0XFx0bWFjX3BrdC1cXHUwMDNlcGFnZSA9IHNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlc2Nhbl9wYWdlO1xcbiBcXHRcXHRtYWNfcGt0LVxcdTAwM2VjaGFubmVsID0gc2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VzY2FuX2NoYW5uZWw7XFxuQEAgLTMwNCw3ICszMDQsNyBAQCBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTU0X3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0aWYgKCFtYWNfcGt0KVxcbiBcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIFxcbi1cXHRcXHRtYWNfcGt0LVxcdTAwM2Vza2IgPSBza2JfZ2V0KHNrYik7XFxuK1xcdFxcdG1hY19wa3QtXFx1MDAzZXNrYiA9IHNrYjtcXG4gXFx0XFx0bWFjX3BrdC1cXHUwMDNlc2RhdGEgPSBzZGF0YTtcXG4gXFx0XFx0bmV0ZGV2X2hvbGQoc2RhdGEtXFx1MDAzZWRldiwgXFx1MDAyNm1hY19wa3QtXFx1MDAzZWRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4gXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZXJ4X2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMToyOTo1Ni42NDA1MTQ4OTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUzMzY3OTkzNzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklFRUU4MDIxNTRcIixcbiAgICBcIk1BQzgwMjE1NFwiLFxuICAgIFwiSUVFRTgwMjE1NF9EUklWRVJTXCIsXG4gICAgXCJJRUVFODAyMTU0X0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWVlZTgwMjE1NF9zdWJpZl9mcmFtZVwiLFxuICAgIFwibWFjODAyMTU0X3J4X2JlYWNvbl93b3JrZXJcIixcbiAgICBcIm1hYzgwMjE1NF9yeF9tYWNfY21kX3dvcmtlclwiLFxuICAgIFwiaWVlZTgwMjE1NF9yeFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNrX2J1ZmYgcmVmZXJlbmNlIGNvdW50IGhhbmRsaW5nIGluIGllZWU4MDIxNTRfc3ViaWZfZnJhbWUoKSBieSByZW1vdmluZyBza2JfZ2V0KCkgY2FsbHMgd2hlbiBlbnF1ZXVpbmcgYmVhY29uIGFuZCBNQUMgY29tbWFuZCBwYWNrZXRzIHRvIGFzeW5jaHJvbm91cyB3b3JrZXIgcXVldWVzLiBUaGlzIHJlYWNoYWJsZSBuZXR3b3JraW5nIHBhdGggY2FuIGJlIHRlc3RlZCB2aWEgbWFjODAyMTU0X2h3c2ltIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIHZlcmlmeSBza2IgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBjb3JyZWN0bmVzcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNDI1OTY4YmM0Y2Y1MzkyMmE1YzY5MzY3OTdhZDM2NWNlY2QzMDI0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAxMToyOTo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxNTQvcnguYyBiL25ldC9tYWM4MDIxNTQvcnguY1xuaW5kZXggMTliNTM4MmU4NWE4NC4uYWQ2MDJkMjIyZTg2MSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxNTQvcnguY1xuKysrIGIvbmV0L21hYzgwMjE1NC9yeC5jXG5AQCAtMjg3LDcgKzI4Nyw3IEBAIGllZWU4MDIxNTRfc3ViaWZfZnJhbWUoc3RydWN0IGllZWU4MDIxNTRfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRpZiAoIW1hY19wa3QpXG4gXHRcdFx0Z290byBmYWlsO1xuIFxuLVx0XHRtYWNfcGt0LVx1MDAzZXNrYiA9IHNrYl9nZXQoc2tiKTtcbitcdFx0bWFjX3BrdC1cdTAwM2Vza2IgPSBza2I7XG4gXHRcdG1hY19wa3QtXHUwMDNlc2RhdGEgPSBzZGF0YTtcbiBcdFx0bWFjX3BrdC1cdTAwM2VwYWdlID0gc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlc2Nhbl9wYWdlO1xuIFx0XHRtYWNfcGt0LVx1MDAzZWNoYW5uZWwgPSBzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VzY2FuX2NoYW5uZWw7XG5AQCAtMzA0LDcgKzMwNCw3IEBAIGllZWU4MDIxNTRfc3ViaWZfZnJhbWUoc3RydWN0IGllZWU4MDIxNTRfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRpZiAoIW1hY19wa3QpXG4gXHRcdFx0Z290byBmYWlsO1xuIFxuLVx0XHRtYWNfcGt0LVx1MDAzZXNrYiA9IHNrYl9nZXQoc2tiKTtcbitcdFx0bWFjX3BrdC1cdTAwM2Vza2IgPSBza2I7XG4gXHRcdG1hY19wa3QtXHUwMDNlc2RhdGEgPSBzZGF0YTtcbiBcdFx0bmV0ZGV2X2hvbGQoc2RhdGEtXHUwMDNlZGV2LCBcdTAwMjZtYWNfcGt0LVx1MDAzZWRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcbiBcdFx0c3Bpbl9sb2NrKFx1MDAyNnNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZXJ4X2xvY2spO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6Mjk6NTYuNjQwNTE2Mzc1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA1MDc3ODY1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBtYWM4MDIxNTQgUlggUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGlzIGRpZmYgcHJlc2VudGVkIHRvIG1lLiBJdCdzIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2Ugd2l0aGluIHRoZSBgbmV0L21hYzgwMjE1NC9yeC5jYCBmaWxlLiBUaGUgaW5kZXggbGluZXMgaW5kaWNhdGUgYSB2ZXJzaW9uZWQgY2hhbmdlLCBzbyB0aGlzIGlzIGxpa2VseSBhIHRhcmdldGVkIGJ1ZyBmaXggb3Igb3B0aW1pemF0aW9uLiBJIHNlZSBhIGNvdXBsZSBvZiBpbnN0YW5jZXMgb2Ygd2hhdCBsb29rcyBsaWtlIGEgcG90ZW50aWFsIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZS4gSXQgc2VlbXMgd2UncmUgbW92aW5nIGZyb20gYSBgc2tiX2dldChza2IpYCBjYWxsIHRvIGp1c3QgdXNpbmcgYHNrYmAgZGlyZWN0bHkgd2hlbiBhc3NpZ25pbmcgdG8gYG1hY19wa3QtXHUwMDNlc2tiYC4gVGhpcyBsaWtlbHkgaGFzIHRvIGRvIHdpdGggc29tZSBzaGFyZWQgbWVtb3J5IGhhbmRsaW5nIGFuZCBlbnN1cmluZyB0aGUgbWVtb3J5IGlzbid0IGR1cGxpY2F0ZWQuIFRoZSBgbmV0ZGV2X2hvbGRgIGNhbGwgYW5kIHNwaW5sb2NrIHVzYWdlIGZ1cnRoZXIgc3VnZ2VzdCB0aGlzIG1pZ2h0IHJlbGF0ZSB0byBzaGFyZWQgc3RhdGUgb3IgcmVzb3VyY2UgYWNjZXNzLCB3aGljaCBpcyBzb21ldGhpbmcgSSdsbCBrZWVwIGluIG1pbmQgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpdGggYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgYWx0ZXJhdGlvbiB3YXMgY2hvc2VuIGFuZCBpZiBpdCBpbnRyb2R1Y2VzIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yLiBJJ20ga2VlbiB0byBldmFsdWF0ZSB0aGUgb3ZlcmFsbCBpbXBsaWNhdGlvbnMgZm9yIHBhY2tldCBoYW5kbGluZyBhbmQgcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNjAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMDowNy4xNDgzMDU4NzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTU0L3J4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjYwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjYwOlxcdFxcdGRlZmF1bHQ6XFxuIDI2MTpcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiaW52YWxpZCBkZXN0IG1vZGVcXFxcblxcXCIpO1xcbiAyNjI6XFx0XFx0XFx0Z290byBmYWlsO1xcbiAyNjM6XFx0XFx0fVxcbiAyNjQ6XFx0XFxuIDI2NTpcXHRcXHRza2ItXFx1MDAzZWRldiA9IHNkYXRhLVxcdTAwM2VkZXY7XFxuIDI2NjpcXHRcXG4gMjY3OlxcdFxcdC8qIFRPRE8gdGhpcyBzaG91bGQgYmUgbW92ZWQgYWZ0ZXIgbmV0aWZfcmVjZWl2ZV9za2IgY2FsbCwgb3RoZXJ3aXNlXFxuIDI2ODpcXHRcXHQgKiB3aXJlc2hhcmsgd2lsbCBzaG93IGEgbWFjIGhlYWRlciB3aXRoIHNlY3VyaXR5IGZpZWxkcyBhbmQgdGhlXFxuIDI2OTpcXHRcXHQgKiBwYXlsb2FkIGlzIGFscmVhZHkgZGVjcnlwdGVkLlxcbiAyNzA6XFx0XFx0ICovXFxuIDI3MTpcXHRcXHRyYyA9IG1hYzgwMjE1NF9sbHNlY19kZWNyeXB0KFxcdTAwMjZzZGF0YS1cXHUwMDNlc2VjLCBza2IpO1xcbiAyNzI6XFx0XFx0aWYgKHJjKSB7XFxuIDI3MzpcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiZGVjcnlwdGlvbiBmYWlsZWQ6ICVpXFxcXG5cXFwiLCByYyk7XFxuIDI3NDpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIDI3NTpcXHRcXHR9XFxuIDI3NjpcXHRcXG4gMjc3OlxcdFxcdHNkYXRhLVxcdTAwM2VkZXYtXFx1MDAzZXN0YXRzLnJ4X3BhY2tldHMrKztcXG4gMjc4OlxcdFxcdHNkYXRhLVxcdTAwM2VkZXYtXFx1MDAzZXN0YXRzLnJ4X2J5dGVzICs9IHNrYi1cXHUwMDNlbGVuO1xcbiAyNzk6XFx0XFxuIDI4MDpcXHRcXHRzd2l0Y2ggKG1hY19jYihza2IpLVxcdTAwM2V0eXBlKSB7XFxuIDI4MTpcXHRcXHRjYXNlIElFRUU4MDIxNTRfRkNfVFlQRV9CRUFDT046XFxuIDI4MjpcXHRcXHRcXHRkZXZfZGJnKFxcdTAwMjZzZGF0YS1cXHUwMDNlZGV2LVxcdTAwM2VkZXYsIFxcXCJCRUFDT04gcmVjZWl2ZWRcXFxcblxcXCIpO1xcbiAyODM6XFx0XFx0XFx0aWYgKCFtYWM4MDIxNTRfaXNfc2Nhbm5pbmcoc2RhdGEtXFx1MDAzZWxvY2FsKSlcXG4gMjg0OlxcdFxcdFxcdFxcdGdvdG8gZmFpbDtcXG4gMjg1OlxcdFxcbiAyODY6XFx0XFx0XFx0bWFjX3BrdCA9IGt6YWxsb2Nfb2JqKCptYWNfcGt0LCBHRlBfQVRPTUlDKTtcXG4gMjg3OlxcdFxcdFxcdGlmICghbWFjX3BrdClcXG4gMjg4OlxcdFxcdFxcdFxcdGdvdG8gZmFpbDtcXG4gMjg5OlxcdFxcbiAyOTA6XFx0XFx0XFx0bWFjX3BrdC1cXHUwMDNlc2tiID0gc2tiO1xcbiAyOTE6XFx0XFx0XFx0bWFjX3BrdC1cXHUwMDNlc2RhdGEgPSBzZGF0YTtcXG4gMjkyOlxcdFxcdFxcdG1hY19wa3QtXFx1MDAzZXBhZ2UgPSBzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZXNjYW5fcGFnZTtcXG4gMjkzOlxcdFxcdFxcdG1hY19wa3QtXFx1MDAzZWNoYW5uZWwgPSBzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZXNjYW5fY2hhbm5lbDtcXG4gMjk0OlxcdFxcdFxcdG5ldGRldl9ob2xkKHNkYXRhLVxcdTAwM2VkZXYsIFxcdTAwMjZtYWNfcGt0LVxcdTAwM2VkZXZfdHJhY2tlciwgR0ZQX0FUT01JQyk7XFxuIDI5NTpcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNnNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlcnhfbG9jayk7XFxuIDI5NjpcXHRcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZtYWNfcGt0LVxcdTAwM2Vub2RlLCBcXHUwMDI2c2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VyeF9iZWFjb25fbGlzdCk7XFxuIDI5NzpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VyeF9sb2NrKTtcXG4gMjk4OlxcdFxcdFxcdHF1ZXVlX3dvcmsoc2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VtYWNfd3EsIFxcdTAwMjZzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZXJ4X2JlYWNvbl93b3JrKTtcXG4gMjk5OlxcdFxcdFxcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcXG4gMzAwOlxcdFxcbiAzMDE6XFx0XFx0Y2FzZSBJRUVFODAyMTU0X0ZDX1RZUEVfTUFDX0NNRDpcXG4gMzAyOlxcdFxcdFxcdGRldl9kYmcoXFx1MDAyNnNkYXRhLVxcdTAwM2VkZXYtXFx1MDAzZWRldiwgXFxcIk1BQyBDT01NQU5EIHJlY2VpdmVkXFxcXG5cXFwiKTtcXG4gMzAzOlxcdFxcdFxcdG1hY19wa3QgPSBremFsbG9jX29iaigqbWFjX3BrdCwgR0ZQX0FUT01JQyk7XFxuIDMwNDpcXHRcXHRcXHRpZiAoIW1hY19wa3QpXFxuIDMwNTpcXHRcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIDMwNjpcXHRcXG4gMzA3OlxcdFxcdFxcdG1hY19wa3QtXFx1MDAzZXNrYiA9IHNrYjtcXG4gMzA4OlxcdFxcdFxcdG1hY19wa3QtXFx1MDAzZXNkYXRhID0gc2RhdGE7XFxuIDMwOTpcXHRcXHRcXHRuZXRkZXZfaG9sZChzZGF0YS1cXHUwMDNlZGV2LCBcXHUwMDI2bWFjX3BrdC1cXHUwMDNlZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xcbiAzMTA6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZXJ4X2xvY2spO1xcbiAzMTE6XFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2bWFjX3BrdC1cXHUwMDNlbm9kZSwgXFx1MDAyNnNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlcnhfbWFjX2NtZF9saXN0KTtcXG4gMzEyOlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZXJ4X2xvY2spO1xcbiAzMTM6XFx0XFx0XFx0cXVldWVfd29yayhzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZW1hY193cSwgXFx1MDAyNnNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlcnhfbWFjX2NtZF93b3JrKTtcXG4gMzE0OlxcdFxcdFxcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcXG4gMzE1OlxcdFxcbiAzMTY6XFx0XFx0Y2FzZSBJRUVFODAyMTU0X0ZDX1RZUEVfQUNLOlxcbiAzMTc6XFx0XFx0XFx0Z290byBmYWlsO1xcbiAzMTg6XFx0XFxuIDMxOTpcXHRcXHRjYXNlIElFRUU4MDIxNTRfRkNfVFlQRV9EQVRBOlxcbiAzMjA6XFx0XFx0XFx0cmV0dXJuIGllZWU4MDIxNTRfZGVsaXZlcl9za2Ioc2tiKTtcXG4gMzIxOlxcdFxcdGRlZmF1bHQ6XFxuIDMyMjpcXHRcXHRcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCJpZWVlODAyMTU0OiBiYWQgZnJhbWUgcmVjZWl2ZWQgXFxcIlxcbiAzMjM6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCIodHlwZSA9ICVkKVxcXFxuXFxcIiwgbWFjX2NiKHNrYiktXFx1MDAzZXR5cGUpO1xcbiAzMjQ6XFx0XFx0XFx0Z290byBmYWlsO1xcbiAzMjU6XFx0XFx0fVxcbiAzMjY6XFx0XFxuIDMyNzpcXHRmYWlsOlxcbiAzMjg6XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDMyOTpcXHRcXHRyZXR1cm4gTkVUX1JYX0RST1A7XFxuIDMzMDpcXHR9XFxuIDMzMTpcXHRcXG4gMzMyOlxcdHN0YXRpYyB2b2lkXFxuIDMzMzpcXHRpZWVlODAyMTU0X3ByaW50X2FkZHIoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGllZWU4MDIxNTRfYWRkciAqYWRkcilcXG4gMzM0OlxcdHtcXG4gMzM1OlxcdFxcdGlmIChhZGRyLVxcdTAwM2Vtb2RlID09IElFRUU4MDIxNTRfQUREUl9OT05FKSB7XFxuIDMzNjpcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiJXMgbm90IHByZXNlbnRcXFxcblxcXCIsIG5hbWUpO1xcbiAzMzc6XFx0XFx0XFx0cmV0dXJuO1xcbiAzMzg6XFx0XFx0fVxcbiAzMzk6XFx0XFxuIDM0MDpcXHRcXHRwcl9kZWJ1ZyhcXFwiJXMgUEFOIElEOiAlMDR4XFxcXG5cXFwiLCBuYW1lLCBsZTE2X3RvX2NwdShhZGRyLVxcdTAwM2VwYW5faWQpKTtcXG4gMzQxOlxcdFxcdGlmIChhZGRyLVxcdTAwM2Vtb2RlID09IElFRUU4MDIxNTRfQUREUl9TSE9SVCkge1xcbiAzNDI6XFx0XFx0XFx0cHJfZGVidWcoXFxcIiVzIGlzIHNob3J0OiAlMDR4XFxcXG5cXFwiLCBuYW1lLFxcbiAzNDM6XFx0XFx0XFx0XFx0IGxlMTZfdG9fY3B1KGFkZHItXFx1MDAzZXNob3J0X2FkZHIpKTtcXG4gMzQ0OlxcdFxcdH0gZWxzZSB7XFxuIDM0NTpcXHRcXHRcXHR1NjQgaHcgPSBzd2FiNjQoKF9fZm9yY2UgdTY0KWFkZHItXFx1MDAzZWV4dGVuZGVkX2FkZHIpO1xcbiAzNDY6XFx0XFxuIDM0NzpcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiJXMgaXMgaGFyZHdhcmU6ICU4cGhDXFxcXG5cXFwiLCBuYW1lLCBcXHUwMDI2aHcpO1xcbiAzNDg6XFx0XFx0fVxcbiAzNDk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMDowNy4xNDgzODYzMDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDM0MTU5Nzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTUFDODAyMTU0IFJlY2VpdmUgUGF0aCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gdW5kZXJzdGFuZCB0aGUgcmVjZWl2ZSBwcm9jZXNzIGZvciBtYWM4MDIxNTQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGNvbnRleHQgb2YgYGllZWU4MDIxNTRfc3ViaWZfZnJhbWVgLCB0aGF0J3MgdGhlIGtleSBlbnRyeSBwb2ludC4gVGhhdCBsaWtlbHkgaGFzIGFsbCB0aGUgc3BlY2lmaWNzIG9mIHRoZSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBhbmQgd2hhdCdzIGhhcHBlbmluZyBhdCB0aGUgc3ViaW50ZXJmYWNlIGxldmVsLiBUbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSeKAmWxsIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIGZyb20gdGhlIGByeC5jYCBmaWxlLiBJJ2xsIHJlYWQgYmFja3dhcmRzIGluIHRoYXQgZmlsZSwgbG9va2luZyBmb3IgdGhlIGluaXRpYWwgY2FsbCwgYW5kIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9uIGNhbGxzIGFuZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIExldCdzIHNlZSBob3cgdGhlIE1BQyBsYXllciByZWNlaXZlcyB0aGUgaW5jb21pbmcgZnJhbWVzIGFuZCBwYXNzZXMgdGhlbSB1cCB0aGUgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMzIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjMwOjA5LjU4MjU0ODcyMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxNTQvcnguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMiBTaWVtZW5zIEFHXFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogV3JpdHRlbiBieTpcXG4gICA2OlxcdCAqIFBhdmVsIFNtb2xlbnNraXkgXFx1MDAzY3BhdmVsLnNtb2xlbnNraXlAZ21haWwuY29tXFx1MDAzZVxcbiAgIDc6XFx0ICogTWF4aW0gR29yYmFjaHlvdiBcXHUwMDNjbWF4aW0uZ29yYmFjaGV2QHNpZW1lbnMuY29tXFx1MDAzZVxcbiAgIDg6XFx0ICogRG1pdHJ5IEVyZW1pbi1Tb2xlbmlrb3YgXFx1MDAzY2RiYXJ5c2hrb3ZAZ21haWwuY29tXFx1MDAzZVxcbiAgIDk6XFx0ICogQWxleGFuZGVyIFNtaXJub3YgXFx1MDAzY2FsZXguYmx1ZXNtYW4uc21pcm5vdkBnbWFpbC5jb21cXHUwMDNlXFxuICAxMDpcXHQgKi9cXG4gIDExOlxcdFxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbiAgMTU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NyYy1jY2l0dC5oXFx1MDAzZVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXFx1MDAzZVxcbiAgMTc6XFx0XFxuICAxODpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L21hYzgwMjE1NC5oXFx1MDAzZVxcbiAgMTk6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9pZWVlODAyMTU0X25ldGRldi5oXFx1MDAzZVxcbiAgMjA6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9ubDgwMjE1NC5oXFx1MDAzZVxcbiAgMjE6XFx0XFxuICAyMjpcXHQjaW5jbHVkZSBcXFwiaWVlZTgwMjE1NF9pLmhcXFwiXFxuICAyMzpcXHRcXG4gIDI0OlxcdHN0YXRpYyBpbnQgaWVlZTgwMjE1NF9kZWxpdmVyX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAgMjU6XFx0e1xcbiAgMjY6XFx0XFx0c2tiLVxcdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTtcXG4gIDI3OlxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JRUVFODAyMTU0KTtcXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0cmV0dXJuIG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7XFxuICAzMDpcXHR9XFxuICAzMTpcXHRcXG4gIDMyOlxcdHZvaWQgbWFjODAyMTU0X3J4X2JlYWNvbl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiAgMzM6XFx0e1xcbiAgMzQ6XFx0XFx0c3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsID1cXG4gIDM1OlxcdFxcdFxcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCwgcnhfYmVhY29uX3dvcmspO1xcbiAgMzY6XFx0XFx0c3RydWN0IGNmZzgwMjE1NF9tYWNfcGt0ICptYWNfcGt0O1xcbiAgMzc6XFx0XFxuICAzODpcXHRcXHRmb3IgKDs7KSB7XFxuICAzOTpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9sb2NrKTtcXG4gIDQwOlxcdFxcdFxcdG1hY19wa3QgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9iZWFjb25fbGlzdCxcXG4gIDQxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBjZmc4MDIxNTRfbWFjX3BrdCwgbm9kZSk7XFxuICA0MjpcXHRcXHRcXHRpZiAobWFjX3BrdClcXG4gIDQzOlxcdFxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZtYWNfcGt0LVxcdTAwM2Vub2RlKTtcXG4gIDQ0OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZsb2NhbC1cXHUwMDNlcnhfbG9jayk7XFxuICA0NTpcXHRcXHRcXHRpZiAoIW1hY19wa3QpXFxuICA0NjpcXHRcXHRcXHRcXHRicmVhaztcXG4gIDQ3OlxcdFxcbiAgNDg6XFx0XFx0XFx0bWFjODAyMTU0X3Byb2Nlc3NfYmVhY29uKGxvY2FsLCBtYWNfcGt0LVxcdTAwM2Vza2IsXFxuICA0OTpcXHRcXHRcXHRcXHRcXHRcXHQgbWFjX3BrdC1cXHUwMDNlcGFnZSwgbWFjX3BrdC1cXHUwMDNlY2hhbm5lbCk7XFxuICA1MDpcXHRcXG4gIDUxOlxcdFxcdFxcdG5ldGRldl9wdXQobWFjX3BrdC1cXHUwMDNlc2RhdGEtXFx1MDAzZWRldiwgXFx1MDAyNm1hY19wa3QtXFx1MDAzZWRldl90cmFja2VyKTtcXG4gIDUyOlxcdFxcdFxcdGtmcmVlX3NrYihtYWNfcGt0LVxcdTAwM2Vza2IpO1xcbiAgNTM6XFx0XFx0XFx0a2ZyZWUobWFjX3BrdCk7XFxuICA1NDpcXHRcXHR9XFxuICA1NTpcXHR9XFxuICA1NjpcXHRcXG4gIDU3OlxcdHN0YXRpYyBib29sIG1hYzgwMjE1NF9zaG91bGRfYW5zd2VyX2JlYWNvbl9yZXEoc3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsKVxcbiAgNTg6XFx0e1xcbiAgNTk6XFx0XFx0c3RydWN0IGNmZzgwMjE1NF9iZWFjb25fcmVxdWVzdCAqYmVhY29uX3JlcTtcXG4gIDYwOlxcdFxcdHVuc2lnbmVkIGludCBpbnRlcnZhbDtcXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAgNjM6XFx0XFx0YmVhY29uX3JlcSA9IHJjdV9kZXJlZmVyZW5jZShsb2NhbC1cXHUwMDNlYmVhY29uX3JlcSk7XFxuICA2NDpcXHRcXHRpZiAoIWJlYWNvbl9yZXEpIHtcXG4gIDY1OlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAgNjY6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgNjc6XFx0XFx0fVxcbiAgNjg6XFx0XFxuICA2OTpcXHRcXHRpbnRlcnZhbCA9IGJlYWNvbl9yZXEtXFx1MDAzZWludGVydmFsO1xcbiAgNzA6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdGlmICghbWFjODAyMTU0X2lzX2JlYWNvbmluZyhsb2NhbCkpXFxuICA3MzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuICA3NDpcXHRcXG4gIDc1OlxcdFxcdHJldHVybiBpbnRlcnZhbCA9PSBJRUVFODAyMTU0X0FDVElWRV9TQ0FOX0RVUkFUSU9OO1xcbiAgNzY6XFx0fVxcbiAgNzc6XFx0XFxuICA3ODpcXHRzdGF0aWMgdm9pZCBtYWM4MDIxNTRfcnhfbWFjX2NtZChzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwsXFxuICA3OTpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGNmZzgwMjE1NF9tYWNfcGt0ICptYWNfcGt0KVxcbiAgODA6XFx0e1xcbiAgODE6XFx0XFx0dTggbWFjX2NtZDtcXG4gIDgyOlxcdFxcdGludCByYztcXG4gIDgzOlxcdFxcbiAgODQ6XFx0XFx0cmMgPSBpZWVlODAyMTU0X2dldF9tYWNfY21kKG1hY19wa3QtXFx1MDAzZXNrYiwgXFx1MDAyNm1hY19jbWQpO1xcbiAgODU6XFx0XFx0aWYgKHJjKVxcbiAgODY6XFx0XFx0XFx0cmV0dXJuO1xcbiAgODc6XFx0XFxuICA4ODpcXHRcXHRzd2l0Y2ggKG1hY19jbWQpIHtcXG4gIDg5OlxcdFxcdGNhc2UgSUVFRTgwMjE1NF9DTURfQkVBQ09OX1JFUTpcXG4gIDkwOlxcdFxcdFxcdGRldl9kYmcoXFx1MDAyNm1hY19wa3QtXFx1MDAzZXNkYXRhLVxcdTAwM2VkZXYtXFx1MDAzZWRldiwgXFxcInByb2Nlc3NpbmcgQkVBQ09OIFJFUVxcXFxuXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjMwOjA5LjU4MjYzMTIyMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MTM3MTkyMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgQmVhY29uIGFuZCBNQUMgQ29tbWFuZCBQcm9jZXNzaW5nIGluIHRoZSA4MDIuMTUuNCBTdGFjayoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgYmVhY29uIGFuZCBNQUMgY29tbWFuZCByZWNlcHRpb24gYXJlIGhhbmRsZWQgaW4gdGhlIDgwMi4xNS40IGRyaXZlci4gRmlyc3QsIGBtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlcmAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyByZXNwb25zaWJsZSBmb3IgdGhlIHByb2Nlc3Npbmcgb2YgYmVhY29uIGZyYW1lcy4gRnJvbSB0aGUgY29kZSBzbmlwcGV0LCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGl0IGNhbGxzIGBtYWM4MDIxNTRfcHJvY2Vzc19iZWFjb25gLCBwYXNzZXMgdGhlIHJlbGV2YW50IHBhY2tldCBkYXRhIOKAkyB0aGUgYHNrYmAsIHBhZ2UsIGFuZCBjaGFubmVsIOKAkyBhbmQgZ2V0cyB0byB3b3JrLiBGb2xsb3dpbmcgdGhhdCwgaXQgbmVhdGx5IGNsZWFucyB1cCB0aGUgbWVtb3J5OiBJdCByZWxlYXNlcyB0aGUgbmV0d29yayBkZXZpY2UgcmVmZXJlbmNlIHdpdGggYG5ldGRldl9wdXRgLCBmcmVlcyB0aGUgYHNrYmAgd2l0aCBga2ZyZWVfc2tiYCwgYW5kIGZpbmFsbHkgZnJlZXMgdGhlIGFsbG9jYXRlZCBgbWFjX3BrdGAgaXRzZWxmLiBUaGlzIHNob3dzIGEgd2VsbC1kZWZpbmVkIHByb2Nlc3MgdG8gbWUsIGVuc3VyaW5nIHByb3BlciByZXNvdXJjZSBtYW5hZ2VtZW50IGFmdGVyIHByb2Nlc3NpbmcuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IE1BQyBjb21tYW5kcyBhcmUgaGFuZGxlZCwgc28gSSdsbCBuZWVkIHRvIHR1cm4gbXkgYXR0ZW50aW9uIHRvIHRoZSBgbWFjODAyMTU0X3J4X21hY19jbWRfd29ya2VyYCBmdW5jdGlvbi4gSSB3aWxsIG5lZWQgdG8gY29uc3VsdCB0aGUgY29kZSBmcm9tIGxpbmVzIDkwIHRvIDIwMCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NzcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMDoxMS45OTYzNTI1MjRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTU0L3J4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTE6XFx0XFx0XFx0aWYgKCFtYWM4MDIxNTRfc2hvdWxkX2Fuc3dlcl9iZWFjb25fcmVxKGxvY2FsKSlcXG4gIDkyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAgOTM6XFx0XFxuICA5NDpcXHRcXHRcXHRxdWV1ZV9kZWxheWVkX3dvcmsobG9jYWwtXFx1MDAzZW1hY193cSwgXFx1MDAyNmxvY2FsLVxcdTAwM2ViZWFjb25fd29yaywgMCk7XFxuICA5NTpcXHRcXHRcXHRicmVhaztcXG4gIDk2OlxcdFxcbiAgOTc6XFx0XFx0Y2FzZSBJRUVFODAyMTU0X0NNRF9BU1NPQ0lBVElPTl9SRVNQOlxcbiAgOTg6XFx0XFx0XFx0ZGV2X2RiZyhcXHUwMDI2bWFjX3BrdC1cXHUwMDNlc2RhdGEtXFx1MDAzZWRldi1cXHUwMDNlZGV2LCBcXFwicHJvY2Vzc2luZyBBU1NPQyBSRVNQXFxcXG5cXFwiKTtcXG4gIDk5OlxcdFxcdFxcdGlmICghbWFjODAyMTU0X2lzX2Fzc29jaWF0aW5nKGxvY2FsKSlcXG4gMTAwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxMDE6XFx0XFxuIDEwMjpcXHRcXHRcXHRtYWM4MDIxNTRfcHJvY2Vzc19hc3NvY2lhdGlvbl9yZXNwKG1hY19wa3QtXFx1MDAzZXNkYXRhLCBtYWNfcGt0LVxcdTAwM2Vza2IpO1xcbiAxMDM6XFx0XFx0XFx0YnJlYWs7XFxuIDEwNDpcXHRcXG4gMTA1OlxcdFxcdGNhc2UgSUVFRTgwMjE1NF9DTURfQVNTT0NJQVRJT05fUkVROlxcbiAxMDY6XFx0XFx0XFx0ZGV2X2RiZyhcXHUwMDI2bWFjX3BrdC1cXHUwMDNlc2RhdGEtXFx1MDAzZWRldi1cXHUwMDNlZGV2LCBcXFwicHJvY2Vzc2luZyBBU1NPQyBSRVFcXFxcblxcXCIpO1xcbiAxMDc6XFx0XFx0XFx0aWYgKG1hY19wa3QtXFx1MDAzZXNkYXRhLVxcdTAwM2V3cGFuX2Rldi5pZnR5cGUgIT0gTkw4MDIxNTRfSUZUWVBFX0NPT1JEKVxcbiAxMDg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDEwOTpcXHRcXG4gMTEwOlxcdFxcdFxcdG1hYzgwMjE1NF9wcm9jZXNzX2Fzc29jaWF0aW9uX3JlcShtYWNfcGt0LVxcdTAwM2VzZGF0YSwgbWFjX3BrdC1cXHUwMDNlc2tiKTtcXG4gMTExOlxcdFxcdFxcdGJyZWFrO1xcbiAxMTI6XFx0XFxuIDExMzpcXHRcXHRjYXNlIElFRUU4MDIxNTRfQ01EX0RJU0FTU09DSUFUSU9OX05PVElGWTpcXG4gMTE0OlxcdFxcdFxcdGRldl9kYmcoXFx1MDAyNm1hY19wa3QtXFx1MDAzZXNkYXRhLVxcdTAwM2VkZXYtXFx1MDAzZWRldiwgXFxcInByb2Nlc3NpbmcgRElTQVNTT0MgTk9USUZcXFxcblxcXCIpO1xcbiAxMTU6XFx0XFx0XFx0aWYgKG1hY19wa3QtXFx1MDAzZXNkYXRhLVxcdTAwM2V3cGFuX2Rldi5pZnR5cGUgIT0gTkw4MDIxNTRfSUZUWVBFX0NPT1JEKVxcbiAxMTY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDExNzpcXHRcXG4gMTE4OlxcdFxcdFxcdG1hYzgwMjE1NF9wcm9jZXNzX2Rpc2Fzc29jaWF0aW9uX25vdGlmKG1hY19wa3QtXFx1MDAzZXNkYXRhLCBtYWNfcGt0LVxcdTAwM2Vza2IpO1xcbiAxMTk6XFx0XFx0XFx0YnJlYWs7XFxuIDEyMDpcXHRcXG4gMTIxOlxcdFxcdGRlZmF1bHQ6XFxuIDEyMjpcXHRcXHRcXHRicmVhaztcXG4gMTIzOlxcdFxcdH1cXG4gMTI0OlxcdH1cXG4gMTI1OlxcdFxcbiAxMjY6XFx0dm9pZCBtYWM4MDIxNTRfcnhfbWFjX2NtZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiAxMjc6XFx0e1xcbiAxMjg6XFx0XFx0c3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsID1cXG4gMTI5OlxcdFxcdFxcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCwgcnhfbWFjX2NtZF93b3JrKTtcXG4gMTMwOlxcdFxcdHN0cnVjdCBjZmc4MDIxNTRfbWFjX3BrdCAqbWFjX3BrdDtcXG4gMTMxOlxcdFxcbiAxMzI6XFx0XFx0Zm9yICg7Oykge1xcbiAxMzM6XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZsb2NhbC1cXHUwMDNlcnhfbG9jayk7XFxuIDEzNDpcXHRcXHRcXHRtYWNfcGt0ID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFxcdTAwMjZsb2NhbC1cXHUwMDNlcnhfbWFjX2NtZF9saXN0LFxcbiAxMzU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGNmZzgwMjE1NF9tYWNfcGt0LCBub2RlKTtcXG4gMTM2OlxcdFxcdFxcdGlmIChtYWNfcGt0KVxcbiAxMzc6XFx0XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNm1hY19wa3QtXFx1MDAzZW5vZGUpO1xcbiAxMzg6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9sb2NrKTtcXG4gMTM5OlxcdFxcdFxcdGlmICghbWFjX3BrdClcXG4gMTQwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNDE6XFx0XFxuIDE0MjpcXHRcXHRcXHQvKiBBIHN0b3BwZWQgaW50ZXJmYWNlIGNhbm5vdCB0cmFuc21pdDsgc2tpcHBpbmcgYXZvaWRzIGFcXG4gMTQzOlxcdFxcdFxcdCAqIG5lZWRsZXNzIGFzc29jaWF0aW9uIHJlc3BvbnNlIChhbmQgdGhlICFuZXRpZl9ydW5uaW5nKClcXG4gMTQ0OlxcdFxcdFxcdCAqIHdhcm5pbmcgaXQgd291bGQgdHJpcCkgZHVyaW5nIHRlYXJkb3duLiBUaGUgYmVhY29uIHdvcmtlclxcbiAxNDU6XFx0XFx0XFx0ICogbmVlZHMgbm8gc3VjaCBjaGVjayBhcyBpdCBuZXZlciB0cmFuc21pdHMuXFxuIDE0NjpcXHRcXHRcXHQgKi9cXG4gMTQ3OlxcdFxcdFxcdGlmIChpZWVlODAyMTU0X3NkYXRhX3J1bm5pbmcobWFjX3BrdC1cXHUwMDNlc2RhdGEpKVxcbiAxNDg6XFx0XFx0XFx0XFx0bWFjODAyMTU0X3J4X21hY19jbWQobG9jYWwsIG1hY19wa3QpO1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRcXHRcXHRuZXRkZXZfcHV0KG1hY19wa3QtXFx1MDAzZXNkYXRhLVxcdTAwM2VkZXYsIFxcdTAwMjZtYWNfcGt0LVxcdTAwM2VkZXZfdHJhY2tlcik7XFxuIDE1MTpcXHRcXHRcXHRrZnJlZV9za2IobWFjX3BrdC1cXHUwMDNlc2tiKTtcXG4gMTUyOlxcdFxcdFxcdGtmcmVlKG1hY19wa3QpO1xcbiAxNTM6XFx0XFx0fVxcbiAxNTQ6XFx0fVxcbiAxNTU6XFx0XFxuIDE1NjpcXHQvKipcXG4gMTU3OlxcdCAqIG1hYzgwMjE1NF9mbHVzaF9saXN0IC0gZnJlZSBxdWV1ZWQgUlggZnJhbWVzIG9uIEBsaXN0XFxuIDE1ODpcXHQgKiBAbGlzdDogcnhfYmVhY29uX2xpc3Qgb3IgcnhfbWFjX2NtZF9saXN0XFxuIDE1OTpcXHQgKiBAc2RhdGE6IG9ubHkgZnJlZSBmcmFtZXMgcmVjZWl2ZWQgb24gdGhpcyBpbnRlcmZhY2UsIG9yICVOVUxMIGZvciBhbGxcXG4gMTYwOlxcdCAqXFxuIDE2MTpcXHQgKiBFYWNoIGZyYW1lIHBpbnMgdGhlIG5ldF9kZXZpY2UgaXQgd2FzIHJlY2VpdmVkIG9uICh2aWEgbmV0ZGV2X2hvbGQoKSksXFxuIDE2MjpcXHQgKiBzbyByZWxlYXNlIHRoYXQgcmVmZXJlbmNlIGFzIHRoZSBmcmFtZSBpcyBkcm9wcGVkLiBDYWxsZXIgbXVzdCBob2xkXFxuIDE2MzpcXHQgKiBsb2NhbC1cXHUwMDNlcnhfbG9jay5cXG4gMTY0OlxcdCAqL1xcbiAxNjU6XFx0dm9pZCBtYWM4MDIxNTRfZmx1c2hfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbiAxNjY6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaWVlZTgwMjE1NF9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuIDE2NzpcXHR7XFxuIDE2ODpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTU0X21hY19wa3QgKm1hY19wa3QsICp0bXA7XFxuIDE2OTpcXHRcXG4gMTcwOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtYWNfcGt0LCB0bXAsIGxpc3QsIG5vZGUpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzA6MTEuOTk2NDM2MzI0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ1NDYwMzYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElFRUUgODAyLjE1LjQgRnJhbWUgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBkaXNzZWN0IHRoaXMuIEknbSBsb29raW5nIGF0IHRoZSBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgZnJhbWUgdHlwZSBpcyBlaXRoZXIgYSBiZWFjb24gb3IgYSBNQUMgY29tbWFuZC4gVGhlIGNvZGUgc25pcHBldCBtZW50aW9ucyBhbiBpbnRlcmVzdGluZyBiZWhhdmlvcjogaXQgYXBwZWFycyB0aGF0IGBza2JfZ2V0KHNrYilgIHdhcyBwcmV2aW91c2x5IHVzZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbiByZXR1cm5lZCBgTkVUX1JYX1NVQ0NFU1NgIHVuZGVyIHRoZXNlIGNvbmRpdGlvbnMsIHdpdGhvdXQgZnJlZWluZyB0aGUgU0tCLiBOb3csIHRoYXQncyBhIHJlZCBmbGFnLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpczogd2hvIGFjdHVhbGx5IG93bnMgdGhlIFNLQiwgdGhlIHBhY2tldCBidWZmZXIsIGFmdGVyIHRoaXMgcG9pbnQ/IFRoZSBvcmlnaW5hbCBjYWxsZXIgbGlrZWx5IGRvZXNuJ3QgYW55IG1vcmUsIHNvIHNvbWVvbmUgZWxzZSBoYXMgdG8gZnJlZSBpdC4gVGhlIGNvZGUgc2VlbXMgdG8gYXNzdW1lIHRoYXQuXG5cblRoZSBmYWN0IHRoYXQgYGllZWU4MDIxNTRfc3ViaWZfZnJhbWVgIG9ubHkgZnJlZXMgdGhlIFNLQiBpbiB0aGUgYGZhaWw6YCBwYXRoIGlzIGEgY2x1ZS4gVGhpcyBkaXNjcmVwYW5jeSBpcyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBpZGVudGlmeSBhbGwgdGhlIGNhbGxlcnMgb2YgYGllZWU4MDIxNTRfc3ViaWZfZnJhbWVgIHRvIHVuZGVyc3RhbmQgdGhlIG93bmVyc2hpcCBhbmQgdGhlIGV4cGVjdGVkIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBUaGF0J3MgdGhlIGtleSB0byBmaWd1cmluZyBvdXQgaWYgdGhpcyBpcyBjb3JyZWN0IGFuZCBlbnN1cmluZyB0aGF0IHRoZSBTS0IgaXMgcHJvcGVybHkgcmVsZWFzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MzcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMDoxNS40NTEwNDIxNDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTQ4MDQzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWVlZTgwMjE1NF9zdWJpZl9mcmFtZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTU0L3J4LmM9MjAxPXN0YXRpYyBpbnRcXG5uZXQvbWFjODAyMTU0L3J4LmM6MjAyOmllZWU4MDIxNTRfc3ViaWZfZnJhbWUoc3RydWN0IGllZWU4MDIxNTRfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbm5ldC9tYWM4MDIxNTQvcnguYy0yMDMtXFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTU0X2hkciAqaGRyKVxcbi0tXFxubmV0L21hYzgwMjE1NC9yeC5jPTQxMT1fX2llZWU4MDIxNTRfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbWFjODAyMTU0L3J4LmMtNDQxLVxcdFxcdFxcdHNrYjItXFx1MDAzZWRldiA9IHNkYXRhLVxcdTAwM2VkZXY7XFxubmV0L21hYzgwMjE1NC9yeC5jOjQ0MjpcXHRcXHRcXHRpZWVlODAyMTU0X3N1YmlmX2ZyYW1lKHNkYXRhLCBza2IyLCBcXHUwMDI2aGRyKTtcXG5uZXQvbWFjODAyMTU0L3J4LmMtNDQzLVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzA6MTYuOTQ1ODUxNTk3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MTI0NDYwMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgTUFDIExheWVyIFJlY2VpdmUgUGF0aCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBJJ20gZm9jdXNpbmcgb24gdGhlIHJlY2VpdmUgcGF0aCB3aXRoaW4gdGhlIE1BQyA4MDIuMTUuNCBsYXllciwgc3BlY2lmaWNhbGx5IGluIGBuZXQvbWFjODAyMTU0L3J4LmNgLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgbG9naWMgYXJvdW5kIGxpbmUgNDExLiBJIGhhdmUgYSBodW5jaCBhYm91dCBhIHBvdGVudGlhbCBpc3N1ZSByZWxhdGVkIHRvIFtpbnNlcnQgeW91ciBmaWVsZCdzIHJlbGV2YW50IHRlY2huaWNhbCBhc3BlY3QgaGVyZSAtIGUuZy4sIGZyYW1lIGZpbHRlcmluZywgYWRkcmVzcyBtYXRjaGluZywgQUNLIHByb2Nlc3NpbmcsIGV0Yy5dLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNydWNpYWwgY29kZSByZXNwb25zaWJsZSBmb3IgW2Rlc2NyaWJlIHRoZSBjb2RlJ3MgZXhwZWN0ZWQgZnVuY3Rpb25dLiBJJ20gbG9va2luZyBmb3IgdGhlIHNwZWNpZmljIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgdGhhdCB0YWtlIHBsYWNlIGFmdGVyIGEgdmFsaWQgODAyLjE1LjQgZnJhbWUgaXMgcmVjZWl2ZWQgYXQgdGhlIHBoeXNpY2FsIGxheWVyLCBpbmNsdWRpbmcgdGhpbmdzIGxpa2UgY2hlY2tpbmcgZnJhbWUgdmFsaWRpdHksIGZpbHRlcmluZyBieSBhZGRyZXNzaW5nIG9yIE1BQyBjb21tYW5kcywgZGV0ZXJtaW5pbmcgd2hpY2ggdXBwZXIgbGF5ZXIgZW50aXR5IGdldHMgdGhlIGZyYW1lLCBhbmQgaGFuZGxpbmcgYW55IGFzc29jaWF0ZWQgYWNrbm93bGVkZ2VtZW50cy4gSSB3YW50IHRvIHNlZSBpZiB0aGUgaW1wbGVtZW50YXRpb24gdGFrZXMgW3JlbGV2YW50IHRlY2huaWNhbCBkZXRhaWwsIHN1Y2ggYXMgaW50ZXJydXB0IGhhbmRsaW5nLCBjb250ZXh0IHN3aXRjaGluZywgcXVldWVpbmcsIERNQSBjb25maWd1cmF0aW9uLCBldGMuXSBpbnRvIGFjY291bnQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IFtzcGVjaWZpYyB2YXJpYWJsZXMsIHN0cnVjdHVyZXMsIG9yIGZ1bmN0aW9uc10gYXJlIHVzZWQgaGVyZSB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBob3cgdGhpcyBjb2RlIHdvcmtzIGFuZCBzZWUgaWYgbXkgaHVuY2ggYWJvdXQgdGhlIHByb2JsZW0gaG9sZHMgdXAuIEkgYmV0IHRoaXMgaXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIGJpdCBoYXBwZW5zIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTkzLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzA6MTkuMzU4Mjk4ODI5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTU0L3J4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDEwOlxcdHN0YXRpYyB2b2lkXFxuIDQxMTpcXHRfX2llZWU4MDIxNTRfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwsXFxuIDQxMjpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA0MTM6XFx0e1xcbiA0MTQ6XFx0XFx0aW50IHJldDtcXG4gNDE1OlxcdFxcdHN0cnVjdCBpZWVlODAyMTU0X3N1Yl9pZl9kYXRhICpzZGF0YTtcXG4gNDE2OlxcdFxcdHN0cnVjdCBpZWVlODAyMTU0X2hkciBoZHI7XFxuIDQxNzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjtcXG4gNDE4OlxcdFxcbiA0MTk6XFx0XFx0cmV0ID0gaWVlZTgwMjE1NF9wYXJzZV9mcmFtZV9zdGFydChza2IsIFxcdTAwMjZoZHIpO1xcbiA0MjA6XFx0XFx0aWYgKHJldCkge1xcbiA0MjE6XFx0XFx0XFx0cHJfZGVidWcoXFxcImdvdCBpbnZhbGlkIGZyYW1lXFxcXG5cXFwiKTtcXG4gNDIyOlxcdFxcdFxcdHJldHVybjtcXG4gNDIzOlxcdFxcdH1cXG4gNDI0OlxcdFxcbiA0MjU6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbiA0MjY6XFx0XFx0XFx0aWYgKHNkYXRhLVxcdTAwM2V3cGFuX2Rldi5pZnR5cGUgPT0gTkw4MDIxNTRfSUZUWVBFX01PTklUT1IpXFxuIDQyNzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNDI4OlxcdFxcbiA0Mjk6XFx0XFx0XFx0aWYgKCFpZWVlODAyMTU0X3NkYXRhX3J1bm5pbmcoc2RhdGEpKVxcbiA0MzA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDQzMTpcXHRcXG4gNDMyOlxcdFxcdFxcdC8qIERvIG5vdCBkZWxpdmVyIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlcyBleHBlY3RpbmdcXG4gNDMzOlxcdFxcdFxcdCAqIEFBQ0s9MSBpZiB0aGUgYWRkcmVzcyBmaWx0ZXJzIHdoZXJlIGRpc2FibGVkLlxcbiA0MzQ6XFx0XFx0XFx0ICovXFxuIDQzNTpcXHRcXHRcXHRpZiAobG9jYWwtXFx1MDAzZWh3LnBoeS1cXHUwMDNlZmlsdGVyaW5nIFxcdTAwM2MgSUVFRTgwMjE1NF9GSUxURVJJTkdfNF9GUkFNRV9GSUVMRFMgXFx1MDAyNlxcdTAwMjZcXG4gNDM2OlxcdFxcdFxcdCAgICBzZGF0YS1cXHUwMDNlcmVxdWlyZWRfZmlsdGVyaW5nID09IElFRUU4MDIxNTRfRklMVEVSSU5HXzRfRlJBTUVfRklFTERTKVxcbiA0Mzc6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDQzODpcXHRcXG4gNDM5OlxcdFxcdFxcdHNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcXG4gNDQwOlxcdFxcdFxcdGlmIChza2IyKSB7XFxuIDQ0MTpcXHRcXHRcXHRcXHRza2IyLVxcdTAwM2VkZXYgPSBzZGF0YS1cXHUwMDNlZGV2O1xcbiA0NDI6XFx0XFx0XFx0XFx0aWVlZTgwMjE1NF9zdWJpZl9mcmFtZShzZGF0YSwgc2tiMiwgXFx1MDAyNmhkcik7XFxuIDQ0MzpcXHRcXHRcXHR9XFxuIDQ0NDpcXHRcXHR9XFxuIDQ0NTpcXHR9XFxuIDQ0NjpcXHRcXG4gNDQ3OlxcdHN0YXRpYyB2b2lkXFxuIDQ0ODpcXHRpZWVlODAyMTU0X21vbml0b3JzX3J4KHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gNDQ5OlxcdHtcXG4gNDUwOlxcdFxcdHN0cnVjdCBza19idWZmICpza2IyO1xcbiA0NTE6XFx0XFx0c3RydWN0IGllZWU4MDIxNTRfc3ViX2lmX2RhdGEgKnNkYXRhO1xcbiA0NTI6XFx0XFxuIDQ1MzpcXHRcXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcbiA0NTQ6XFx0XFx0c2tiLVxcdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTtcXG4gNDU1OlxcdFxcdHNrYi1cXHUwMDNlcGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUO1xcbiA0NTY6XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lFRUU4MDIxNTQpO1xcbiA0NTc6XFx0XFxuIDQ1ODpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxuIDQ1OTpcXHRcXHRcXHRpZiAoc2RhdGEtXFx1MDAzZXdwYW5fZGV2LmlmdHlwZSAhPSBOTDgwMjE1NF9JRlRZUEVfTU9OSVRPUilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzA6MTkuMzU4NDM0OTA5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0MzA4Nzk5MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFNLQiBSZWZjb3VudCBMZWFrIGluIElFRUUgODAyLjE1LjQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IHRoZSBgX19pZWVlODAyMTU0X3J4X2hhbmRsZV9wYWNrZXRgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgaXQncyBjbG9uaW5nIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgdG8gYHNrYjJgLCBpbmNyZWFzaW5nIGl0cyByZWZlcmVuY2UgY291bnQgdG8gMSwgYW5kIHRoZW4gcGFzc2luZyBpdCB0byBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZWAuIFRoaXMgaXMgc3RhbmRhcmQsIGJ1dCB0aGUgZm9sbG93aW5nIGxvZ2ljIGluIGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lYCBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nIGFuZCBjb25jZXJuaW5nLlxuXG5JZiB0aGVyZSdzIGEgZmFpbHVyZSBpbiBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZWAsIHRoZSBgc2tiYCBpcyBmcmVlZC4gVGhhdCdzIGV4cGVjdGVkLiBIb3dldmVyLCB3aGVuIGl0J3MgYSBEQVRBIGZyYW1lLCBpdCdzIHBhc3NlZCBkaXJlY3RseSB0byBgbmV0aWZfcmVjZWl2ZV9za2JgIHZpYSBgaWVlZTgwMjE1NF9kZWxpdmVyX3NrYmAsIGFuZCB0aGF0J3MgYWxzbyBmaW5lLCB3aGljaCBpcyB0aGUgZXhwZWN0ZWQgaGFwcHkgcGF0aC4gVGhlIHBvdGVudGlhbCBpc3N1ZSBhcmlzZXMgd2l0aCBCRUFDT04gb3IgTUFDX0NNRCBmcmFtZXMuIFByZXZpb3VzbHksIGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lYCB3b3VsZCBjYWxsIGBza2JfZ2V0KHNrYilgIGJlZm9yZSByZXR1cm5pbmcgYE5FVF9SWF9TVUNDRVNTYC4gVGhpcyBtZWFudCBgc2tiMmAgKHRoZSBjbG9uZWQgYnVmZmVyKSBub3cgaGFkIGEgcmVmY291bnQgb2YgMiEgVGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhhdCBvbmx5IGEgc2luZ2xlIGBrZnJlZV9za2JgIHdhcyBwZXJmb3JtZWQgbGF0ZXIgaW4gdGhlIGBtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlcmAgb3IgYG1hYzgwMjE1NF9yeF9tYWNfY21kX3dvcmtlcmAuIFRoaXMgcmVwcmVzZW50cyBhIGNsZWFyIFNLQiBtZW1vcnkgbGVhayBiZWNhdXNlIG9uZSBvZiB0aGUgcmVmZXJlbmNlcyB3YXMgbmV2ZXIgcmVsZWFzZWQsIGxlYWRpbmcgdG8gYW4gaW5jcmVhc2luZyBtZW1vcnkgZm9vdHByaW50LlxuXG5UaGUgZml4LCBsb2dpY2FsbHksIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gUmVtb3ZpbmcgdGhhdCBgc2tiX2dldChza2IpYCBjYWxsIGVuc3VyZXMgdGhhdCB0aGUgYG1hY19wa3RgIGNvbnN1bWVzIHRoZSBjYWxsZXIncyByZWZlcmVuY2UgdG8gYHNrYmAgYW5kIGF2b2lkcyB0aGUgcmVmY291bnQgbWlzbWF0Y2guIEJ5IG5vdCB0YWtpbmcgYW4gYWRkaXRpb25hbCByZWZlcmVuY2UsIHdlIGVuc3VyZSB0aGF0IHRoZSBidWZmZXIgaXMgZnJlZWQgd2hlbiBpdCdzIG5vIGxvbmdlciBuZWVkZWQgaW4gc3Vic2VxdWVudCBwcm9jZXNzaW5nLlxuXG5Ob3csIG15IG5leHQgdGhvdWdodCBpcyBhYm91dCByZWFjaGFiaWxpdHkgYW5kIGZ1enphYmlsaXR5LiBJIG5lZWQgdG8gYXNzZXNzIHdoZXRoZXIgYW5kIGhvdyBgbWFjODAyMTU0YCBpcyBhY3R1YWxseSByZWFjaGFibGUgd2l0aGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgc3VjaCBhcyB0aG9zZSB1c2VkIGJ5IFFFTVUgb3Igc3l6a2FsbGVyLiBUaGUgcXVlc3Rpb24gYm9pbHMgZG93biB0byB3aGV0aGVyIElFRUUgODAyLjE1LjQgYW5kIGBtYWM4MDIxNTRgIGFyZSBlbXVsYXRlZCBvciB1dGlsaXplZCB3aXRoaW4gdGhlc2UgZW52aXJvbm1lbnRzLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBzcGVjaWZpYyBhcmVhczogYGRyaXZlcnMvbmV0L2llZWU4MDIxNTRgLCBgbmV0L21hYzgwMjE1NGAsIGFuZCBhbnkgdmlydHVhbCBkZXZpY2VzIGxpa2UgYGZha2VsYmAsIGBtYWM4MDIxNTRfaHdzaW1gLCBvciBgbmw4MDIxNTRgLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBkcml2ZXLigJlzIG9wZXJhdGlvbiBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgZXNzZW50aWFsIHRvIGVzdGFibGlzaCB0aGUgcmlzayBwcm9maWxlIG9mIHRoaXMgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODMwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzA6MjMuNzg5MzE3Mjc2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk5MDI5ODcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hYzgwMjE1NF9od3NpbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc9MTE0PWNvbmZpZyBJRUVFODAyMTU0X0hXU0lNXFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMTIyLVxcdCAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIFRvIGRvIHNvIHNheSBNIGhlcmUuXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjEyMzpcXHQgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgJ21hYzgwMjE1NF9od3NpbScuXFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX0lFRUU4MDIxNTRfTUNSMjBBKSArPSBtY3IyMGEub1xcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX0lFRUU4MDIxNTRfSFdTSU0pICs9IG1hYzgwMjE1NF9od3NpbS5vXFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L2Zha2VsYi5jPTI0ND1zdGF0aWMgX19pbml0IGludCBmYWtlbGJfaW5pdF9tb2R1bGUodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvZmFrZWxiLmMtMjQ4LVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvZmFrZWxiLmM6MjQ5OlxcdHByX3dhcm4oXFxcImZha2VsYiBkcml2ZXIgaXMgbWFya2VkIGFzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgbWFjODAyMTU0X2h3c2ltIVxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9mYWtlbGIuYy0yNTAtXFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jLTI0LSNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYzoyNTojaW5jbHVkZSBcXFwibWFjODAyMTU0X2h3c2ltLmhcXFwiXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYy0yNi1cXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmM9MTA1Mj1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYWM4MDIxNTRod3NpbV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jLTEwNTUtXFx0LmRyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jOjEwNTY6XFx0XFx0XFx0Lm5hbWUgPSBcXFwibWFjODAyMTU0X2h3c2ltXFxcIixcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jLTEwNTctXFx0fSxcXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmM9MTA2MD1zdGF0aWMgX19pbml0IGludCBod3NpbV9pbml0X21vZHVsZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYy0xMDY3LVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmM6MTA2ODpcXHRtYWM4MDIxNTRod3NpbV9kZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKFxcXCJtYWM4MDIxNTRfaHdzaW1cXFwiLFxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmMtMTA2OS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIC0xLCBOVUxMLCAwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzA6MjUuMzg4MzUyMjE4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyOTM2NTkzODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBtYWM4MDIxNTRfaHdzaW0gRnV6emluZyoqXG5cbk9rYXksIHNvIGBtYWM4MDIxNTRfaHdzaW1gLiBUaGF0J3MgdGhlIHNpbXVsYXRlZCA4MDIuMTUuNCByYWRpbyBoYXJkd2FyZSBkcml2ZXIgaW4gTGludXguIEkga25vdyB0aGlzLCBpdCdzIHByZXR0eSB3ZWxsLWVzdGFibGlzaGVkIG5vdy4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgaG93IGl0J3MgYmVpbmcgYXBwcm9hY2hlZDogbmV0bGluayBhbmQgc3lzZnMgZm9yIGNvbnRyb2wsIGFuZCBzcGVjaWZpY2FsbHksIHRoYXQgYHN5emthbGxlcmAgaXMgcHV0dGluZyBpdCB0aHJvdWdoIGl0cyBwYWNlcyB3aXRoIHNvbWUgaGVhdnkgZnV6emluZy4gVGhlIGtleSBwb2ludHMgYXJlIHRoZSB1c2Ugb2YgYGh3c2ltYCwgY291cGxlZCB3aXRoIHJhdyBzb2NrZXRzLCBgYWZfaWVlZTgwMjE1NGAsIGFuZCBgbmw4MDIxNTRgLiBJdCBtYWtlcyBzZW5zZTsgaGl0dGluZyBpdCBmcm9tIHRoZXNlIGRpZmZlcmVudCBhbmdsZXMgcHJvdmlkZXMgYSBtb3JlIHRob3JvdWdoIHRlc3Rpbmcgc3RyYXRlZ3kuIEl0J3MgdGltZSB0byBjaGVjayB0aGUgS2NvbmZpZywgaXQgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzM0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzA6MjcuNjgyMDEzNzI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTIwMDYzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDODAyMTU0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxNTRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjE1NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L21hYzgwMjE1NC9LY29uZmlnOjI6Y29uZmlnIE1BQzgwMjE1NFxcbm5ldC9tYWM4MDIxNTQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjE1LjQgU29mdCBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxNTQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMDoyNy43MjcyMTYzMzJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM5MjU5OTIxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIEtjb25maWcgZmlsZSBmb3IgbWFjODAyMTU0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSA4MDIuMTUuNCBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIG1hYzgwMjE1NCBLY29uZmlnIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBJRUVFIDgwMi4xNS40IE1BQyBsYXllciB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc2VlLi4uIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgc3R1ZmYgaGVyZTogdGhpbmdzIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBkcml2ZXIsIG9wdGlvbnMgZm9yIGRpZmZlcmVudCBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbnMsIG1heWJlIHNvbWUgY2hvaWNlcyByZWxhdGVkIHRvIHNwZWNpZmljIFBIWXMgKGxpa2UgdGhlIHJhZGlvIHVzZWQpLCBkZWZpbml0ZWx5IHRoaW5ncyBsaWtlIGRhdGEgcmF0ZSBzZWxlY3Rpb24sIGFuZCBwb3RlbnRpYWxseSBjb25maWd1cmF0aW9uIGZvciB2YXJpb3VzIHNlY3VyaXR5IGZlYXR1cmVzIGlmIHN1cHBvcnRlZC5cblxuSSdsbCBiZSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIHRvby4gV2hhdCBvdGhlciBzdWJzeXN0ZW1zIGRvZXMgdGhpcyByZWx5IG9uPyBBcmUgdGhlcmUgYW55IHByZXJlcXVpc2l0ZXMgSSBuZWVkIHRvIGVuc3VyZSBhcmUgZW5hYmxlZD8gVGhpcyBpcyBjcnVjaWFsIGZvciBjb3JyZWN0bHkgY29tcGlsaW5nIGFuZCBjb25maWd1cmluZyBhIHN5c3RlbSB0aGF0IHVzZXMgODAyLjE1LjQuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBoaWVyYXJjaHkgb2Ygb3B0aW9ucyDigJMgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIgYW5kIGlmIHRoZXJlIGFyZSBhbnkgY29uZmxpY3RpbmcgY2hvaWNlcy4gQW55IG1lbnRpb24gb2YgbXVsdGktUEFOIHN1cHBvcnQgb3IgbWVzaCBuZXR3b3JraW5nIGNhcGFiaWxpdGllcyB3aWxsIGFsc28gYmUgZ29vZCB0byB0YWtlIGEgbG9vayBhdC5cblxuSSBuZWVkIHRvIHNlZSBpZiBpdCBwcm92aWRlcyBzdXBwb3J0IGZvciBkaWZmZXJlbnQgc3RhbmRhcmQgcmV2aXNpb25zLCBlLmcuIDgwMi4xNS40LTIwMDMgb3IgODAyLjE1LjQtMjAyMC4gSSdsbCBiZSByZWFsbHkga2VlbiB0byBkaXNjb3ZlciBpZiB0aGVyZSdzIGFueSBtZWNoYW5pc20gZm9yIHNlbGVjdGluZyB0aGUgdW5kZXJseWluZyBkYXRhIGxpbmsgbGF5ZXIgcHJvdG9jb2wsIG9yIGlmIHRoYXQgaXMgc29tZWhvdyBiYWtlZCBpbi5cblRoaXMgZmlsZSBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRvIHRhaWxvciB0aGlzIHNwZWNpZmljIE1BQyBsYXllciBmb3Igb3VyIG5lZWRzLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGdyYW51bGFyaXR5IG9mIHRoZSBjb250cm9scyBhbmQgd2hhdCBoYXJkd2FyZSBhbmQgUEhZIG9wdGlvbnMgYXJlIGF2YWlsYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMDozMS4xMTk4MTc2ODZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjE1NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTUFDODAyMTU0XFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBJRUVFIDgwMi4xNS40IFNvZnQgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTU0KVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gSUVFRTgwMjE1NFxcbiAgIDU6XFx0XFx0c2VsZWN0IENSQ19DQ0lUVFxcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19BVVRIRU5DXFxuICAgODpcXHRcXHRzZWxlY3QgQ1JZUFRPX0NDTVxcbiAgIDk6XFx0XFx0c2VsZWN0IENSWVBUT19DVFJcXG4gIDEwOlxcdFxcdHNlbGVjdCBDUllQVE9fQUVTXFxuICAxMTpcXHRcXHRoZWxwXFxuICAxMjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IElFRUUgODAyLjE1LjRcXG4gIDEzOlxcdFxcdCAgbmV0d29ya2luZyBzdGFjayBmb3IgU29mdE1BQyBkZXZpY2VzICh0aGUgb25lcyBpbXBsZW1lbnRpbmdcXG4gIDE0OlxcdFxcdCAgb25seSBQSFkgbGV2ZWwgb2YgSUVFRSA4MDIuMTUuNCBzdGFuZGFyZCkuXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgTm90ZTogdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBuZWl0aGVyIGNlcnRpZmllZCwgbm9yIGZlYXR1cmVcXG4gIDE3OlxcdFxcdCAgY29tcGxldGUhIENvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBpbXBsZW1lbnRhdGlvbnMgaGFzbid0XFxuICAxODpcXHRcXHQgIGJlZW4gdGVzdGVkIHlldCFcXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0ICBJZiB5b3UgcGxhbiB0byB1c2UgSGFyZE1BQyBJRUVFIDgwMi4xNS40IGRldmljZXMsIHlvdSBjYW5cXG4gIDIxOlxcdFxcdCAgc2F5IE4gaGVyZS4gQWx0ZXJuYXRpdmVseSB5b3UgY2FuIHNheSBNIHRvIGNvbXBpbGUgaXQgYXNcXG4gIDIyOlxcdFxcdCAgbW9kdWxlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMDozMS4xMTk4NzMyNDZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgzMDEzOTAzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSUVFRSA4MDIuMTUuNCBIYXJkd2FyZSBTaW11bGF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGNvbmZpZ3VyaW5nIHNvbWV0aGluZywgYW5kIHRoZSBJRUVFIDgwMi4xNS40IGhhcmR3YXJlIHNpbXVsYXRpb24gaXMgdGhlIHRhcmdldC4gTmF0dXJhbGx5LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IHdlJ3JlIGNvdmVyaW5nIGFsbCBvdXIgYmFzZXMuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIGxvb2sgZm9yIHRoYXQgY29uZmlndXJhdGlvbiB3b3VsZCBiZSBpbiB0aGUgZHJpdmVyIHNvdXJjZSB0cmVlLCBzcGVjaWZpY2FsbHkgdW5kZXIgYGRyaXZlcnMvbmV0L2llZWU4MDIxNTQvYC4gQW5kIHRoZW4sIHdpdGhpbiAqdGhhdCogZGlyZWN0b3J5LCB0aGUgYEtjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgc3RhbmRhcmQgcGxhY2UgaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gdG8gZGVmaW5lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgSUVFRTgwMjE1NF9IV1NJTWAgaXMgZGVmaW5lZCBhbmQgY29ycmVjdGx5IGhhbmRsZWQgdGhlcmUuIFdlIG1pZ2h0IGFsc28gbmVlZCB0byBjaGVjayBpdHMgZGVwZW5kZW5jaWVzLCBpdHMgaGVscCB0ZXh0LCBhbmQgYW55dGhpbmcgZWxzZSByZWxldmFudCB0byBpdHMgYmVoYXZpb3IuIFNvLCBsZXQncyB0YWtlIGEgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5MjMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjMwOjMzLjk1MDAxNDczMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjM0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTEwOlxcdFxcbiAxMTE6XFx0XFx0ICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gVG8gZG8gc28sIHNheSBNIGhlcmUuXFxuIDExMjpcXHRcXHQgIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgJ21jcjIwYScuXFxuIDExMzpcXHRcXG4gMTE0OlxcdGNvbmZpZyBJRUVFODAyMTU0X0hXU0lNXFxuIDExNTpcXHRcXHRkZXBlbmRzIG9uIElFRUU4MDIxNTRfRFJJVkVSUyBcXHUwMDI2XFx1MDAyNiBNQUM4MDIxNTRcXG4gMTE2OlxcdFxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxNTRcXFwiXFxuIDExNzpcXHRcXHRoZWxwXFxuIDExODpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIGEgZGV2ZWxvcGVyIHRlc3RpbmcgdG9vbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHRlc3RcXG4gMTE5OlxcdFxcdCAgSUVFRSA4MDIuMTUuNCBuZXR3b3JraW5nIHN0YWNrIChtYWM4MDIxNTQpIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgbm90XFxuIDEyMDpcXHRcXHQgIG5lZWRlZCBmb3Igbm9ybWFsIHdwYW4gdXNhZ2UgYW5kIGlzIG9ubHkgZm9yIHRlc3RpbmcuXFxuIDEyMTpcXHRcXG4gMTIyOlxcdFxcdCAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIFRvIGRvIHNvIHNheSBNIGhlcmUuXFxuIDEyMzpcXHRcXHQgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgJ21hYzgwMjE1NF9od3NpbScuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjMwOjMzLjk1MDA5MjMyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMTk2MDQwMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBJRUVFIDgwMi4xNS40IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QuIExldCdzIGRpdmUgcmlnaHQgaW50byB0aGUgYG5ldC9pZWVlODAyMTU0L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgdGhlIGNvbmZpZ3VyYWJsZSBvcHRpb25zIGZvciB0aGUgSUVFRSA4MDIuMTUuNCBzdGFjayB3aXRoaW4gdGhlIGJ1aWxkIHN5c3RlbS4gVGhpcyBpcyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIGZpbGUsIHNvIGl0IHdpbGwgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnRzIGZvciB1bmRlcnN0YW5kaW5nIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkLCBkaXNhYmxlZCwgYW5kIGhvdyBldmVyeXRoaW5nIGlzIHN0cnVjdHVyZWQuIEknbSBsb29raW5nIGZvciB0aGUgdG9wLWxldmVsIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIGFueSBpbXBvcnRhbnQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQgYmVmb3JlIEkgZ28gYW55IGRlZXBlci4gSSB3YW50IHRvIGJ1aWxkIGEgcXVpY2sgbWVudGFsIG1vZGVsIG9mIHRoZSBjb25maWd1cmFibGUgbW9kdWxlcyBiZWZvcmUgcHJvY2VlZGluZyB0byB0aGUgbmV4dCBkaWFnbm9zdGljIHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDg0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMDozNi4yNjk2OTkwNjdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2llZWU4MDIxNTQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0bWVudWNvbmZpZyBJRUVFODAyMTU0XFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiSUVFRSBTdGQgODAyLjE1LjQgTG93LVJhdGUgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3JrcyBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0aGVscFxcbiAgIDU6XFx0XFx0ICBJRUVFIFN0ZCA4MDIuMTUuNCBkZWZpbmVzIGEgbG93IGRhdGEgcmF0ZSwgbG93IHBvd2VyIGFuZCBsb3dcXG4gICA2OlxcdFxcdCAgY29tcGxleGl0eSBzaG9ydCByYW5nZSB3aXJlbGVzcyBwZXJzb25hbCBhcmVhIG5ldHdvcmtzLiBJdCB3YXNcXG4gICA3OlxcdFxcdCAgZGVzaWduZWQgdG8gb3JnYW5pc2UgbmV0d29ya3Mgb2Ygc2Vuc29ycywgc3dpdGNoZXMsIGV0YyBhdXRvbWF0aW9uXFxuICAgODpcXHRcXHQgIGRldmljZXMuIE1heGltdW0gYWxsb3dlZCBkYXRhIHJhdGUgaXMgMjUwIGtiL3MgYW5kIHR5cGljYWwgcGVyc29uYWxcXG4gICA5OlxcdFxcdCAgb3BlcmF0aW5nIHNwYWNlIGFyb3VuZCAxMG0uXFxuICAxMDpcXHRcXG4gIDExOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIExSLVdQQU4gc3VwcG9ydCBpbnRvIHRoZSBrZXJuZWwgb3Igc2F5IE0gdG9cXG4gIDEyOlxcdFxcdCAgY29tcGlsZSBpdCBhcyBtb2R1bGVzLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRpZiBJRUVFODAyMTU0XFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbmZpZyBJRUVFODAyMTU0X05MODAyMTU0X0VYUEVSSU1FTlRBTFxcbiAgMTc6XFx0XFx0Ym9vbCBcXFwiSUVFRSA4MDIuMTUuNCBleHBlcmltZW50YWwgbmV0bGluayBzdXBwb3J0XFxcIlxcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBBZGRzIGV4cGVyaW1lbnRhbCBuZXRsaW5rIHN1cHBvcnQgZm9yIG5sODAyMTU0LlxcbiAgMjA6XFx0XFxuICAyMTpcXHRjb25maWcgSUVFRTgwMjE1NF9TT0NLRVRcXG4gIDIyOlxcdFxcdHRyaXN0YXRlIFxcXCJJRUVFIDgwMi4xNS40IHNvY2tldCBpbnRlcmZhY2VcXFwiXFxuICAyMzpcXHRcXHRkZWZhdWx0IHlcXG4gIDI0OlxcdFxcdGhlbHBcXG4gIDI1OlxcdFxcdCAgU29ja2V0IGludGVyZmFjZSBmb3IgSUVFRSA4MDIuMTUuNC4gQ29udGFpbnMgREdSQU0gc29ja2V0cyBpbnRlcmZhY2VcXG4gIDI2OlxcdFxcdCAgZm9yIDgwMi4xNS40IGRhdGFmcmFtZXMuIEFsc28gUkFXIHNvY2tldCBpbnRlcmZhY2UgdG8gYnVpbGQgTUFDXFxuICAyNzpcXHRcXHQgIGhlYWRlciBmcm9tIHVzZXJzcGFjZS5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0c291cmNlIFxcXCJuZXQvaWVlZTgwMjE1NC82bG93cGFuL0tjb25maWdcXFwiXFxuICAzMDpcXHRcXG4gIDMxOlxcdGVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjMwOjM2LjI2OTc1NDUxN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODgwNDYwNzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIE1BQzgwMjE1NCByZWNlaXZlIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRob3NlIFJYIGZ1bmN0aW9ucyBhcmUgdHJpZ2dlcmVkLiBNeSBpbml0aWFsIGFwcHJvYWNoIHdpbGwgYmUgdG8gZXhhbWluZSB0aGUgY29kZSBkaXJlY3RseSBhbmQgc2VhcmNoIGZvciB0aGUga2V5IGVudHJ5IHBvaW50cy4gU28sIEknbGwgc3RhcnQgd2l0aCBhIGBncmVwYCBmb3IgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gSSdtIGZvY3VzaW5nIG9uIGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lYCwgYGllZWU4MDIxNTRfcnhfaXJxc2FmZWAsIGFuZCBhbnkgb3RoZXIgb2J2aW91cyBlbnRyeSBwb2ludHMgd2l0aGluIGBuZXQvbWFjODAyMTU0L3J4LmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBsYXkgb2YgdGhlIGxhbmQsIHJpZ2h0PyBUaGlzIHdpbGwgZ2l2ZSBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgZnVuY3Rpb24gY2FsbCBoaWVyYXJjaHkgaW4gdGhlIHJlY2VpdmUgcGF0aCwgZnJvbSB0aGUgaGFyZHdhcmUgaW50ZXJydXB0IHRvIHRoZSBwcm9jZXNzaW5nIG9mIHRoZSByZWNlaXZlZCBmcmFtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyMjgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjMwOjM4LjE1MDIxODA4NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMxODc2NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWVlZTgwMjE1NF9yeFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTU0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmg9MTkzPWV4dGVybiBzdHJ1Y3QgaWVlZTgwMjE1NF9tbG1lX29wcyBtYWM4MDIxNTRfbWxtZV93cGFuO1xcbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmgtMTk0LVxcbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmg6MTk1OnZvaWQgaWVlZTgwMjE1NF9yeChzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IpO1xcbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmgtMTk2LXZvaWQgaWVlZTgwMjE1NF94bWl0X3N5bmNfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuLS1cXG5uZXQvbWFjODAyMTU0L21haW4uYz0yMz1zdGF0aWMgdm9pZCBpZWVlODAyMTU0X3Rhc2tsZXRfaGFuZGxlcihzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXFxuLS1cXG5uZXQvbWFjODAyMTU0L21haW4uYy0zNC1cXHRcXHRcXHRza2ItXFx1MDAzZXBrdF90eXBlID0gMDtcXG5uZXQvbWFjODAyMTU0L21haW4uYzozNTpcXHRcXHRcXHRpZWVlODAyMTU0X3J4KGxvY2FsLCBza2IpO1xcbm5ldC9tYWM4MDIxNTQvbWFpbi5jLTM2LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L21hYzgwMjE1NC9yeC5jPTQxMD1zdGF0aWMgdm9pZFxcbm5ldC9tYWM4MDIxNTQvcnguYzo0MTE6X19pZWVlODAyMTU0X3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsLFxcbm5ldC9tYWM4MDIxNTQvcnguYy00MTItXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tYWM4MDIxNTQvcnguYz00NDg9aWVlZTgwMjE1NF9tb25pdG9yc19yeChzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbWFjODAyMTU0L3J4LmMtNDc1LVxcbm5ldC9tYWM4MDIxNTQvcnguYzo0NzY6dm9pZCBpZWVlODAyMTU0X3J4KHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvbWFjODAyMTU0L3J4LmMtNDc3LXtcXG4tLVxcbm5ldC9tYWM4MDIxNTQvcnguYy01MDYtXFxubmV0L21hYzgwMjE1NC9yeC5jOjUwNzpcXHRfX2llZWU4MDIxNTRfcnhfaGFuZGxlX3BhY2tldChsb2NhbCwgc2tiKTtcXG5uZXQvbWFjODAyMTU0L3J4LmMtNTA4LVxcbi0tXFxubmV0L21hYzgwMjE1NC9yeC5jPTUxNT12b2lkXFxubmV0L21hYzgwMjE1NC9yeC5jOjUxNjppZWVlODAyMTU0X3J4X2lycXNhZmUoc3RydWN0IGllZWU4MDIxNTRfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBscWkpXFxubmV0L21hYzgwMjE1NC9yeC5jLTUxNy17XFxuLS1cXG5uZXQvbWFjODAyMTU0L3J4LmMtNTI1LX1cXG5uZXQvbWFjODAyMTU0L3J4LmM6NTI2OkVYUE9SVF9TWU1CT0woaWVlZTgwMjE1NF9yeF9pcnFzYWZlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzA6MzguMjAzNDA5MzA2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NTM5Nzg1MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBtYWM4MDIxNTQgUlggUGF0aCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHRoZSBtb2RpZmljYXRpb25zIGluIGBuZXQvbWFjODAyMTU0L3J4LmNgLiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGF0IGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lKClgIGJlY2F1c2UgdGhhdCdzIHRoZSBmdW5jdGlvbiB0aGF0J3MgYmVlbiBjaGFuZ2VkLiBOb3csIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3csIEkgbmVlZCB0byBtYXAgb3V0IHRoZSBjYWxsIGNoYWluIGFuZCB0aGUgcmVsZXZhbnQgd29ya2VycyBoYW5kbGluZyB0aGVzZSBmcmFtZXMuIFNvLCBJIHNlZSBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZWAgaXRzZWxmLCBhbmQgaXQgbG9va3MgbGlrZSBpdCBpbnRlcmFjdHMgd2l0aCBgbWFjODAyMTU0X3J4X2JlYWNvbl93b3JrZXJgLCBgbWFjODAyMTU0X3J4X21hY19jbWRfd29ya2VyYCwgYGllZWU4MDIxNTRfcnhgLCBhbmQgYGllZWU4MDIxNTRfcnhfaXJxc2FmZWAuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIHRoZSBkYXRhIGZsb3cuIEJlZm9yZSBkaWdnaW5nIGRlZXBlciBpbnRvIGFueSBzcGVjaWZpYyBjYWxsIHBhdGgsIEknbGwgcXVpY2tseSB2ZXJpZnkgdGhhdCBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGVsc2UgcmVsZXZhbnQgaW4gdGhlIGBuZXQvbWFjODAyMTU0L3J4LmNgIGZpbGUgaXRzZWxmLiBUaGVuLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkga25vdyB3aGF0IGFsbCB0aGUgc3ltYm9scyBhcmUgaW4gdGhhdCBmaWxlLCBqdXN0IGFzIGEgZ2VuZXJhbCBzYW5pdHkgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzQyLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjMwOjQwLjg1NzM5MDM0OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3NDM0NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVowLTlfXSsuKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxNTQvcnguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTU0L3J4LmMtMjMtXFxubmV0L21hYzgwMjE1NC9yeC5jOjI0OnN0YXRpYyBpbnQgaWVlZTgwMjE1NF9kZWxpdmVyX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9tYWM4MDIxNTQvcnguYy0yNS17XFxuLS1cXG5uZXQvbWFjODAyMTU0L3J4LmMtMzEtXFxubmV0L21hYzgwMjE1NC9yeC5jOjMyOnZvaWQgbWFjODAyMTU0X3J4X2JlYWNvbl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9tYWM4MDIxNTQvcnguYy0zMy17XFxuLS1cXG5uZXQvbWFjODAyMTU0L3J4LmMtNTYtXFxubmV0L21hYzgwMjE1NC9yeC5jOjU3OnN0YXRpYyBib29sIG1hYzgwMjE1NF9zaG91bGRfYW5zd2VyX2JlYWNvbl9yZXEoc3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsKVxcbm5ldC9tYWM4MDIxNTQvcnguYy01OC17XFxuLS1cXG5uZXQvbWFjODAyMTU0L3J4LmMtNzctXFxubmV0L21hYzgwMjE1NC9yeC5jOjc4OnN0YXRpYyB2b2lkIG1hYzgwMjE1NF9yeF9tYWNfY21kKHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCxcXG5uZXQvbWFjODAyMTU0L3J4LmMtNzktXFx0XFx0XFx0XFx0IHN0cnVjdCBjZmc4MDIxNTRfbWFjX3BrdCAqbWFjX3BrdClcXG4tLVxcbm5ldC9tYWM4MDIxNTQvcnguYy0xMjUtXFxubmV0L21hYzgwMjE1NC9yeC5jOjEyNjp2b2lkIG1hYzgwMjE1NF9yeF9tYWNfY21kX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L21hYzgwMjE1NC9yeC5jLTEyNy17XFxuLS1cXG5uZXQvbWFjODAyMTU0L3J4LmMtMTY0LSAqL1xcbm5ldC9tYWM4MDIxNTQvcnguYzoxNjU6dm9pZCBtYWM4MDIxNTRfZmx1c2hfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbm5ldC9tYWM4MDIxNTQvcnguYy0xNjYtXFx0XFx0XFx0ICBzdHJ1Y3QgaWVlZTgwMjE1NF9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuLS1cXG5uZXQvbWFjODAyMTU0L3J4LmMtMTkxLSAqL1xcbm5ldC9tYWM4MDIxNTQvcnguYzoxOTI6dm9pZCBtYWM4MDIxNTRfZmx1c2hfcXVldWVkX3BrdHMoc3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsLFxcbm5ldC9tYWM4MDIxNTQvcnguYy0xOTMtXFx0XFx0XFx0XFx0IHN0cnVjdCBpZWVlODAyMTU0X3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4tLVxcbm5ldC9tYWM4MDIxNTQvcnguYz0yMDE9c3RhdGljIGludFxcbm5ldC9tYWM4MDIxNTQvcnguYzoyMDI6aWVlZTgwMjE1NF9zdWJpZl9mcmFtZShzdHJ1Y3QgaWVlZTgwMjE1NF9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjE1NC9yeC5jLTIwMy1cXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGllZWU4MDIxNTRfaGRyICpoZHIpXFxuLS1cXG5uZXQvbWFjODAyMTU0L3J4LmM9MzMyPXN0YXRpYyB2b2lkXFxubmV0L21hYzgwMjE1NC9yeC5jOjMzMzppZWVlODAyMTU0X3ByaW50X2FkZHIoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGllZWU4MDIxNTRfYWRkciAqYWRkcilcXG5uZXQvbWFjODAyMTU0L3J4LmMtMzM0LXtcXG4tLVxcbm5ldC9tYWM4MDIxNTQvcnguYz0zNTE9c3RhdGljIGludFxcbm5ldC9tYWM4MDIxNTQvcnguYzozNTI6aWVlZTgwMjE1NF9wYXJzZV9mcmFtZV9zdGFydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWVlZTgwMjE1NF9oZHIgKmhkcilcXG5uZXQvbWFjODAyMTU0L3J4LmMtMzUzLXtcXG4tLVxcbm5ldC9tYWM4MDIxNTQvcnguYz00MTA9c3RhdGljIHZvaWRcXG5uZXQvbWFjODAyMTU0L3J4LmM6NDExOl9faWVlZTgwMjE1NF9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCxcXG5uZXQvbWFjODAyMTU0L3J4LmMtNDEyLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbWFjODAyMTU0L3J4LmM9NDQ3PXN0YXRpYyB2b2lkXFxubmV0L21hYzgwMjE1NC9yeC5jOjQ0ODppZWVlODAyMTU0X21vbml0b3JzX3J4KHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvbWFjODAyMTU0L3J4LmMtNDQ5LXtcXG4tLVxcbm5ldC9tYWM4MDIxNTQvcnguYy00NzUtXFxubmV0L21hYzgwMjE1NC9yeC5jOjQ3Njp2b2lkIGllZWU4MDIxNTRfcngoc3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9tYWM4MDIxNTQvcnguYy00Nzcte1xcbi0tXFxubmV0L21hYzgwMjE1NC9yeC5jPTUxNT12b2lkXFxubmV0L21hYzgwMjE1NC9yeC5jOjUxNjppZWVlODAyMTU0X3J4X2lycXNhZmUoc3RydWN0IGllZWU4MDIxNTRfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBscWkpXFxubmV0L21hYzgwMjE1NC9yeC5jLTUxNy17XFxuLS1cXG5uZXQvbWFjODAyMTU0L3J4LmMtNTI1LX1cXG5uZXQvbWFjODAyMTU0L3J4LmM6NTI2OkVYUE9SVF9TWU1CT0woaWVlZTgwMjE1NF9yeF9pcnFzYWZlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzA6NDAuOTAzMTM4MjUxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1OTMxNzg1MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIEFuYWx5c2lzOiBJRUVFIDgwMi4xNS40IENvZGUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBpcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZz8gTGV0J3MgY2hlY2sgdGhlIGNyaXRlcmlhLiBZZXMsIG1vZGlmeWluZyBgbmV0L21hYzgwMjE1NC9yeC5jYCB3aXRoaW4gYGllZWU4MDIxNTRfc3ViaWZfZnJhbWVgICpkZWZpbml0ZWx5KiB0b3VjaGVzIHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlLiBHb29kLiBTZWNvbmQsIGFyZSB3ZSB0YWxraW5nIGFib3V0IHNvbWV0aGluZyBhY2Nlc3NpYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gWWVwLCBgbWFjODAyMTU0YCBpcyBzaW11bGF0ZWQgdGhyb3VnaCBgbWFjODAyMTU0X2h3c2ltYCBvciByYXcgcGFja2V0IGluamVjdGlvbiB2aWEgc29ja2V0cyBvciB2aXJ0dWFsIGRldmljZXMuIEVhc3kgdG8gdGVzdC4gQ3J1Y2lhbGx5LCB0aGUgY29kZSBpcyBjaGFuZ2luZyBtZW1vcnkgcmVmZXJlbmNlIGNvdW50aW5nLCBzcGVjaWZpY2FsbHkgcmVtb3ZpbmcgYHNrYl9nZXQoc2tiKWAgdG8gdHJhbnNmZXIgb3duZXJzaGlwLiBUaGlzIGZpeGVzIGEgbWVtb3J5IGxlYWsgb3IgYXZvaWRzIHVzZS1hZnRlci1mcmVlL2xlYWsgaXNzdWVzLiBTbywgZnV6emluZyBpcyBjcml0aWNhbCBoZXJlIHRvIGZsdXNoIG91dCBhbnkgcG90ZW50aWFsIGRvdWJsZSBmcmVlcyBvciBVQUZzIHRoYXQgbWlnaHQgZXhpc3QgZHVlIHRvIHRoZSBvd25lcnNoaXAgY2hhbmdlLiBCYXNlZCBvbiBhbGwgdGhhdCwgYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIGNvbXBpbGluZyBhbmQgdGVzdGluZyB0aGlzLiBMb29raW5nIGF0IGBuZXQvbWFjODAyMTU0L0tjb25maWdgLCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHdlIG5lZWQgYElFRUU4MDIxNTRgLCBgTUFDODAyMTU0YCwgYW5kIGVpdGhlciBgSUVFRTgwMjE1NF9IV1NJTWAgb3IgYElFRUU4MDIxNTRfU09DS0VUYC5cblxuRmluYWxseSwgd2Ugc2hvdWxkIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzLiBgTUFDODAyMTU0YCBuZWVkcyBgSUVFRTgwMjE1NGAsIGFuZCBgSUVFRTgwMjE1NF9IV1NJTWAgZGVwZW5kcyBvbiBgSUVFRTgwMjE1NF9EUklWRVJTIFx1MDAyNlx1MDAyNiBNQUM4MDIxNTRgLiBXZSBzaG91bGQgY2hlY2sgYElFRUU4MDIxNTRfRFJJVkVSU2AgaW4gYGRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2AuIFdlIG5vdyBrbm93IGV2ZXJ5dGhpbmcgd2UgbmVlZCB0byBydW4gb3VyIGZ1enppbmcgb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI2OCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMDo0NC40OTYzMjA0NDNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51Y29uZmlnIElFRUU4MDIxNTRfRFJJVkVSU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIklFRUUgODAyLjE1LjQgZHJpdmVyc1xcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gTkVUREVWSUNFUyBcXHUwMDI2XFx1MDAyNiBJRUVFODAyMTU0XFxuICAgNTpcXHRcXHRkZWZhdWx0IHlcXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBnZXQgdG8gc2VlIG9wdGlvbnMgZm9yIElFRUUgODAyLjE1LjQgTG93LVJhdGVcXG4gICA4OlxcdFxcdCAgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3JrIGRldmljZSBkcml2ZXJzLiBUaGlzIG9wdGlvbiBhbG9uZVxcbiAgIDk6XFx0XFx0ICBkb2VzIG5vdCBhZGQgYW55IGtlcm5lbCBjb2RlLlxcbiAgMTA6XFx0XFxuICAxMTpcXHRcXHQgIElmIHlvdSBzYXkgTiwgYWxsIG9wdGlvbnMgaW4gdGhpcyBzdWJtZW51IHdpbGwgYmUgc2tpcHBlZCBhbmRcXG4gIDEyOlxcdFxcdCAgZGlzYWJsZWQuXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBJRUVFODAyMTU0X0ZBS0VMQlxcbiAgMTU6XFx0XFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXFx1MDAyNlxcdTAwMjYgTUFDODAyMTU0XFxuICAxNjpcXHRcXHR0cmlzdGF0ZSBcXFwiSUVFRSA4MDIuMTUuNCBsb29wYmFjayBkcml2ZXJcXFwiXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBmYWtlIGRyaXZlciB0aGF0IGNhbiBlbXVsYXRlIGEgbmV0XFxuICAxOTpcXHRcXHQgIG9mIHNldmVyYWwgaW50ZXJjb25uZWN0ZWQgcmFkaW8gZGV2aWNlcy5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0XFx0ICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gVG8gZG8gc28gc2F5IE0gaGVyZS5cXG4gIDIyOlxcdFxcdCAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCAnZmFrZWxiJy5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0Y29uZmlnIElFRUU4MDIxNTRfQVQ4NlJGMjMwXFxuICAyNTpcXHRcXHRkZXBlbmRzIG9uIElFRUU4MDIxNTRfRFJJVkVSUyBcXHUwMDI2XFx1MDAyNiBNQUM4MDIxNTRcXG4gIDI2OlxcdFxcdHRyaXN0YXRlIFxcXCJBVDg2UkYyMzAvMjMxLzIzMy8yMTIgdHJhbnNjZWl2ZXIgZHJpdmVyXFxcIlxcbiAgMjc6XFx0XFx0ZGVwZW5kcyBvbiBTUElcXG4gIDI4OlxcdFxcdHNlbGVjdCBSRUdNQVBfU1BJXFxuICAyOTpcXHRcXHRoZWxwXFxuICAzMDpcXHRcXHQgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBhdDg2cmYyMzAvMjMxLzIzMy8yMTIgU1BJIDgwMi4xNS40IHdpcmVsZXNzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjMwOjQ0LjQ5NjM5MTU0M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDQxNjQ3ODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgZm9yIEZ1enppbmcgdGhpcyBJRUVFIDgwMi4xNS40IENvZGUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkOiBgSUVFRTgwMjE1NGAsIGBNQUM4MDIxNTRgLCBhbmQgYElFRUU4MDIxNTRfSFdTSU1gLiAgVGhlc2UgYXJlIGNydWNpYWwgYmVjYXVzZSB0aGV5IGRpcmVjdGx5IGVuYWJsZSB0aGUgODAyLjE1LjQgbGF5ZXIgYW5kIGhhcmR3YXJlIHNpbXVsYXRpb24sIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdGVzdGluZy5cblxuTm93LCB0aGUgY29yZSBvZiB0aGlzIGFzc2Vzc21lbnQgaXMgdGhlIGZvY3VzLiBJJ3ZlIGlkZW50aWZpZWQga2V5IHN5bWJvbHM6IGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lYCwgYG1hYzgwMjE1NF9yeF9iZWFjb25fd29ya2VyYCwgYG1hYzgwMjE1NF9yeF9tYWNfY21kX3dvcmtlcmAsIGFuZCBgaWVlZTgwMjE1NF9yeGAuICBJIHdhbnQgdG8gcXVpY2tseSBjb25maXJtIHRoZXNlIGFyZSBzcGVjaWZpYyBhbmQgbm90IGdlbmVyYWwtcHVycG9zZSBmdW5jdGlvbnMgdGhhdCBhcmUgd2lkZWx5IHVzZWQgZWxzZXdoZXJlLiBCYXNlZCBvbiBhIHF1aWNrIHJldmlldywgaXQgY29uZmlybXMgdGhleSBhcmUgYWxsIGRpcmVjdGx5IHRpZWQgdG8gdGhlIDgwMi4xNS40IGFuZCBtYWM4MDIxNTQgbGF5ZXJzLiBHb29kLCB0aGlzIHNvbGlkaWZpZXMgdGhlIHNjb3BlIG9mIG91ciBmb2N1cy5cblxuVGltZSB0byBwcmVwYXJlIHRoZSBmaW5hbCByZWFzb25pbmcuIFRoZSBhaW0gaXMgdG8gdmVyaWZ5IHdoZXRoZXIgb3VyIHBhdGNoIGlzIFwid29ydGggZnV6emluZ1wiLlxuXG4xLiAgKipXb3J0aEZ1enppbmcqKjogKlRydWUqLiBUaGUgbW9kaWZpY2F0aW9ucyBoZXJlIGFyZSBkZWFsaW5nIHdpdGggcmVmZXJlbmNlIGNvdW50aW5nIG9mIHJlY2VpdmVkIGBza19idWZmc2AgaW4gYGllZWU4MDIxNTRfc3ViaWZfZnJhbWVgLiBUaGlzIGlzIGNyaXRpY2FsLlxuMi4gICoqRm9jdXNTeW1ib2xzKio6ICBBcyBhbHJlYWR5IGNvbmZpcm1lZCwgdGhlc2UgYXJlIHNwZWNpZmljLlxuMy4gICoqRW5hYmxlQ29uZmlncyoqOiAgQXMgc3RhdGVkLCB3ZSBoYXZlIHRvIGVuYWJsZSBJRUVFIDgwMi4xNS40IGFuZCB0aGUgaGFyZHdhcmUgc2ltdWxhdGlvbiB0byB0ZXN0IHRoZSBmdWxsIGNvZGUgcGF0aC5cbjQuICAqKlJlYXNvbmluZyoqOiBUaGUgY2hhbmdlIGlzIHRvIGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lYCwgYW5kIGl0IGFmZmVjdHMgaG93IHJlY2VpdmVkIHBhY2tldHMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSBieSByZW1vdmluZyByZWR1bmRhbnQgYHNrYl9nZXRgIGNhbGxzIHdoZW4gcXVldWluZyBiZWFjb24gYW5kIE1BQyBjb21tYW5kIHBhY2tldHMuIFRoaXMgaXMgaW1wb3J0YW50IHNpbmNlIGl0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIG1hYzgwMjE1NFxcX2h3c2ltIG9yIHNvY2tldC1iYXNlZCBmcmFtZSB0cmFuc21pc3Npb24gYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gdmVyaWZ5IGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnQgaW52YXJpYW50cy5cblxuU28sIGluIHN1bW1hcnksIGJhc2VkIG9uIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBtb2RpZmljYXRpb25zLCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMsIGFuZCB0aGUgZnV6emluZyB0YXJnZXQgYmVpbmcgcmVmZXJlbmNlIGNvdW50aW5nLCBJJ20gY29uZmlkZW50IHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgaW5kZWVkIHdvcnRoIGZ1enppbmcuICBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTYwMywiT3V0cHV0VG9rZW5zIjoyMTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMDo0OS45MzgwNDIyNzdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDQ2MzMxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSUVFRTgwMjE1NFwiLFxuICAgIFwiTUFDODAyMTU0XCIsXG4gICAgXCJJRUVFODAyMTU0X0RSSVZFUlNcIixcbiAgICBcIklFRUU4MDIxNTRfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTU0X3N1YmlmX2ZyYW1lXCIsXG4gICAgXCJtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlclwiLFxuICAgIFwibWFjODAyMTU0X3J4X21hY19jbWRfd29ya2VyXCIsXG4gICAgXCJpZWVlODAyMTU0X3J4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2tfYnVmZiByZWZlcmVuY2UgY291bnQgaGFuZGxpbmcgaW4gaWVlZTgwMjE1NF9zdWJpZl9mcmFtZSgpIGJ5IHJlbW92aW5nIHNrYl9nZXQoKSBjYWxscyB3aGVuIGVucXVldWluZyBiZWFjb24gYW5kIE1BQyBjb21tYW5kIHBhY2tldHMgdG8gYXN5bmNocm9ub3VzIHdvcmtlciBxdWV1ZXMuIFRoaXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgcGF0aCBjYW4gYmUgdGVzdGVkIHZpYSBtYWM4MDIxNTRfaHdzaW0gYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gdmVyaWZ5IHNrYiBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGNvcnJlY3RuZXNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklFRUU4MDIxNTRcIixcbiAgICBcIk1BQzgwMjE1NFwiLFxuICAgIFwiSUVFRTgwMjE1NF9EUklWRVJTXCIsXG4gICAgXCJJRUVFODAyMTU0X0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWVlZTgwMjE1NF9zdWJpZl9mcmFtZVwiLFxuICAgIFwibWFjODAyMTU0X3J4X2JlYWNvbl93b3JrZXJcIixcbiAgICBcIm1hYzgwMjE1NF9yeF9tYWNfY21kX3dvcmtlclwiLFxuICAgIFwiaWVlZTgwMjE1NF9yeFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNrX2J1ZmYgcmVmZXJlbmNlIGNvdW50IGhhbmRsaW5nIGluIGllZWU4MDIxNTRfc3ViaWZfZnJhbWUoKSBieSByZW1vdmluZyBza2JfZ2V0KCkgY2FsbHMgd2hlbiBlbnF1ZXVpbmcgYmVhY29uIGFuZCBNQUMgY29tbWFuZCBwYWNrZXRzIHRvIGFzeW5jaHJvbm91cyB3b3JrZXIgcXVldWVzLiBUaGlzIHJlYWNoYWJsZSBuZXR3b3JraW5nIHBhdGggY2FuIGJlIHRlc3RlZCB2aWEgbWFjODAyMTU0X2h3c2ltIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIHZlcmlmeSBza2IgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBjb3JyZWN0bmVzcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzA6NTAuMDA4NTEyOTc2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDI4NTE4MjMxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjMwOjUwLjAwODkyMTkxNloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI0Mjg0NzY5MjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZSgpYCBpbiBgbmV0L21hYzgwMjE1NC9yeC5jYCB0byBhc3NpZ24gYG1hY19wa3QtXFx1MDAzZXNrYiA9IHNrYmAgZGlyZWN0bHkgaW5zdGVhZCBvZiBjYWxsaW5nIGBza2JfZ2V0KHNrYilgLiBUaGlzIGF2b2lkcyB0YWtpbmcgYW4gZXh0cmEgcmVmY291bnQgd2hlbiB0cmFuc2ZlcnJpbmcgb3duZXJzaGlwIG9mIHRoZSBza2IgdG8gdGhlIGFzeW5jaHJvbm91cyBiZWFjb24vTUFDIGNvbW1hbmQgcHJvY2Vzc2luZyB3b3JrZXJzLCBmaXhpbmcgYW4gc2tiIHJlZmVyZW5jZSBjb3VudCAvIG1lbW9yeSBsZWFrLlxcblxcblRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBwYWRkaW5nLCBvciBleHBvc2Uga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS4gYG1hY19wa3RgIGlzIGFscmVhZHkgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iaigpYC4gUmVmZXJlbmNlIGNvdW50aW5nIGFuZCBtZW1vcnkgbGlmZWN5Y2xlIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLCB3aXRoIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgZGV0ZWN0YWJsZSBvbmx5IGJ5IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM0MjU5NjhiYzRjZjUzOTIyYTVjNjkzNjc5N2FkMzY1Y2VjZDMwMjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDExOjI5OjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjE1NC9yeC5jIGIvbmV0L21hYzgwMjE1NC9yeC5jXG5pbmRleCAxOWI1MzgyZTg1YTg0Li5hZDYwMmQyMjJlODYxIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjE1NC9yeC5jXG4rKysgYi9uZXQvbWFjODAyMTU0L3J4LmNcbkBAIC0yODcsNyArMjg3LDcgQEAgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZShzdHJ1Y3QgaWVlZTgwMjE1NF9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdGlmICghbWFjX3BrdClcbiBcdFx0XHRnb3RvIGZhaWw7XG4gXG4tXHRcdG1hY19wa3QtXHUwMDNlc2tiID0gc2tiX2dldChza2IpO1xuK1x0XHRtYWNfcGt0LVx1MDAzZXNrYiA9IHNrYjtcbiBcdFx0bWFjX3BrdC1cdTAwM2VzZGF0YSA9IHNkYXRhO1xuIFx0XHRtYWNfcGt0LVx1MDAzZXBhZ2UgPSBzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VzY2FuX3BhZ2U7XG4gXHRcdG1hY19wa3QtXHUwMDNlY2hhbm5lbCA9IHNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZXNjYW5fY2hhbm5lbDtcbkBAIC0zMDQsNyArMzA0LDcgQEAgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZShzdHJ1Y3QgaWVlZTgwMjE1NF9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdGlmICghbWFjX3BrdClcbiBcdFx0XHRnb3RvIGZhaWw7XG4gXG4tXHRcdG1hY19wa3QtXHUwMDNlc2tiID0gc2tiX2dldChza2IpO1xuK1x0XHRtYWNfcGt0LVx1MDAzZXNrYiA9IHNrYjtcbiBcdFx0bWFjX3BrdC1cdTAwM2VzZGF0YSA9IHNkYXRhO1xuIFx0XHRuZXRkZXZfaG9sZChzZGF0YS1cdTAwM2VkZXYsIFx1MDAyNm1hY19wa3QtXHUwMDNlZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuIFx0XHRzcGluX2xvY2soXHUwMDI2c2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlcnhfbG9jayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMDo1MC4wMDg5MjMxMjZaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjIxMjUyMzcyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aGluZ3M6XG5cbioqQW5hbHl6aW5nIHRoZSBNQUM4MDIxNTQgUmVjZWl2ZSBQYXRoKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoZSByZWNlaXZlciBzaWRlIG9mIHRoZSA4MDIuMTUuNCBNQUMgbGF5ZXIuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhhdCBkaWZmLiBTZWVpbmcgdGhlIGNoYW5nZXMgZGlyZWN0bHkgd2lsbCBnaXZlIG1lIGEgZ29vZCBpbml0aWFsIHNlbnNlIG9mIHRoZSBtb2RpZmljYXRpb25zIHRoYXQgaGF2ZSBiZWVuIG1hZGUsIGFuZCB3aHkuIFRoZW4sIEkgbmVlZCB0byB6b29tIG91dCBhIGJpdCBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSSdsbCByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvbWFjODAyMTU0L3J4LmNgIOKAkyB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbnMgYXJvdW5kIHRoZSBjaGFuZ2UgaXMgY3J1Y2lhbCB0byBncmFzcCB0aGUgaW1wbGljYXRpb25zLiBFc3NlbnRpYWxseSwgSSdtIGNhbGxpbmcgZm9yIGByZWFkLWZpbGVgIG9uIGBuZXQvbWFjODAyMTU0L3J4LmNgLiBJIG5lZWQgdGhhdCBmdWxsIGNvbnRleHQgaW4gZnJvbnQgb2YgbWUgdG8gbWFrZSBhIHByb3BlciBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjcyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMDo1Ni4yMjE0NTAyMjZaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxNTQvcnguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjUwOlxcdFxcdFxcdCAgICBtYWNfY2Ioc2tiKS1cXHUwMDNlZGVzdC5wYW5faWQgIT0gY3B1X3RvX2xlMTYoSUVFRTgwMjE1NF9QQU5JRF9CUk9BRENBU1QpKVxcbiAyNTE6XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2Vwa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7XFxuIDI1MjpcXHRcXHRcXHRlbHNlIGlmIChtYWNfY2Ioc2tiKS1cXHUwMDNlZGVzdC5zaG9ydF9hZGRyID09IHNzaG9ydClcXG4gMjUzOlxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlcGt0X3R5cGUgPSBQQUNLRVRfSE9TVDtcXG4gMjU0OlxcdFxcdFxcdGVsc2UgaWYgKG1hY19jYihza2IpLVxcdTAwM2VkZXN0LnNob3J0X2FkZHIgPT1cXG4gMjU1OlxcdFxcdFxcdFxcdCAgY3B1X3RvX2xlMTYoSUVFRTgwMjE1NF9BRERSX0JST0FEQ0FTVCkpXFxuIDI1NjpcXHRcXHRcXHRcXHRza2ItXFx1MDAzZXBrdF90eXBlID0gUEFDS0VUX0JST0FEQ0FTVDtcXG4gMjU3OlxcdFxcdFxcdGVsc2VcXG4gMjU4OlxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlcGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUO1xcbiAyNTk6XFx0XFx0XFx0YnJlYWs7XFxuIDI2MDpcXHRcXHRkZWZhdWx0OlxcbiAyNjE6XFx0XFx0XFx0cHJfZGVidWcoXFxcImludmFsaWQgZGVzdCBtb2RlXFxcXG5cXFwiKTtcXG4gMjYyOlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4gMjYzOlxcdFxcdH1cXG4gMjY0OlxcdFxcbiAyNjU6XFx0XFx0c2tiLVxcdTAwM2VkZXYgPSBzZGF0YS1cXHUwMDNlZGV2O1xcbiAyNjY6XFx0XFxuIDI2NzpcXHRcXHQvKiBUT0RPIHRoaXMgc2hvdWxkIGJlIG1vdmVkIGFmdGVyIG5ldGlmX3JlY2VpdmVfc2tiIGNhbGwsIG90aGVyd2lzZVxcbiAyNjg6XFx0XFx0ICogd2lyZXNoYXJrIHdpbGwgc2hvdyBhIG1hYyBoZWFkZXIgd2l0aCBzZWN1cml0eSBmaWVsZHMgYW5kIHRoZVxcbiAyNjk6XFx0XFx0ICogcGF5bG9hZCBpcyBhbHJlYWR5IGRlY3J5cHRlZC5cXG4gMjcwOlxcdFxcdCAqL1xcbiAyNzE6XFx0XFx0cmMgPSBtYWM4MDIxNTRfbGxzZWNfZGVjcnlwdChcXHUwMDI2c2RhdGEtXFx1MDAzZXNlYywgc2tiKTtcXG4gMjcyOlxcdFxcdGlmIChyYykge1xcbiAyNzM6XFx0XFx0XFx0cHJfZGVidWcoXFxcImRlY3J5cHRpb24gZmFpbGVkOiAlaVxcXFxuXFxcIiwgcmMpO1xcbiAyNzQ6XFx0XFx0XFx0Z290byBmYWlsO1xcbiAyNzU6XFx0XFx0fVxcbiAyNzY6XFx0XFxuIDI3NzpcXHRcXHRzZGF0YS1cXHUwMDNlZGV2LVxcdTAwM2VzdGF0cy5yeF9wYWNrZXRzKys7XFxuIDI3ODpcXHRcXHRzZGF0YS1cXHUwMDNlZGV2LVxcdTAwM2VzdGF0cy5yeF9ieXRlcyArPSBza2ItXFx1MDAzZWxlbjtcXG4gMjc5OlxcdFxcbiAyODA6XFx0XFx0c3dpdGNoIChtYWNfY2Ioc2tiKS1cXHUwMDNldHlwZSkge1xcbiAyODE6XFx0XFx0Y2FzZSBJRUVFODAyMTU0X0ZDX1RZUEVfQkVBQ09OOlxcbiAyODI6XFx0XFx0XFx0ZGV2X2RiZyhcXHUwMDI2c2RhdGEtXFx1MDAzZWRldi1cXHUwMDNlZGV2LCBcXFwiQkVBQ09OIHJlY2VpdmVkXFxcXG5cXFwiKTtcXG4gMjgzOlxcdFxcdFxcdGlmICghbWFjODAyMTU0X2lzX3NjYW5uaW5nKHNkYXRhLVxcdTAwM2Vsb2NhbCkpXFxuIDI4NDpcXHRcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIDI4NTpcXHRcXG4gMjg2OlxcdFxcdFxcdG1hY19wa3QgPSBremFsbG9jX29iaigqbWFjX3BrdCwgR0ZQX0FUT01JQyk7XFxuIDI4NzpcXHRcXHRcXHRpZiAoIW1hY19wa3QpXFxuIDI4ODpcXHRcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIDI4OTpcXHRcXG4gMjkwOlxcdFxcdFxcdG1hY19wa3QtXFx1MDAzZXNrYiA9IHNrYjtcXG4gMjkxOlxcdFxcdFxcdG1hY19wa3QtXFx1MDAzZXNkYXRhID0gc2RhdGE7XFxuIDI5MjpcXHRcXHRcXHRtYWNfcGt0LVxcdTAwM2VwYWdlID0gc2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VzY2FuX3BhZ2U7XFxuIDI5MzpcXHRcXHRcXHRtYWNfcGt0LVxcdTAwM2VjaGFubmVsID0gc2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VzY2FuX2NoYW5uZWw7XFxuIDI5NDpcXHRcXHRcXHRuZXRkZXZfaG9sZChzZGF0YS1cXHUwMDNlZGV2LCBcXHUwMDI2bWFjX3BrdC1cXHUwMDNlZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xcbiAyOTU6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZXJ4X2xvY2spO1xcbiAyOTY6XFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2bWFjX3BrdC1cXHUwMDNlbm9kZSwgXFx1MDAyNnNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlcnhfYmVhY29uX2xpc3QpO1xcbiAyOTc6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlcnhfbG9jayk7XFxuIDI5ODpcXHRcXHRcXHRxdWV1ZV93b3JrKHNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlbWFjX3dxLCBcXHUwMDI2c2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VyeF9iZWFjb25fd29yayk7XFxuIDI5OTpcXHRcXHRcXHRyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7XFxuIDMwMDpcXHRcXG4gMzAxOlxcdFxcdGNhc2UgSUVFRTgwMjE1NF9GQ19UWVBFX01BQ19DTUQ6XFxuIDMwMjpcXHRcXHRcXHRkZXZfZGJnKFxcdTAwMjZzZGF0YS1cXHUwMDNlZGV2LVxcdTAwM2VkZXYsIFxcXCJNQUMgQ09NTUFORCByZWNlaXZlZFxcXFxuXFxcIik7XFxuIDMwMzpcXHRcXHRcXHRtYWNfcGt0ID0ga3phbGxvY19vYmooKm1hY19wa3QsIEdGUF9BVE9NSUMpO1xcbiAzMDQ6XFx0XFx0XFx0aWYgKCFtYWNfcGt0KVxcbiAzMDU6XFx0XFx0XFx0XFx0Z290byBmYWlsO1xcbiAzMDY6XFx0XFxuIDMwNzpcXHRcXHRcXHRtYWNfcGt0LVxcdTAwM2Vza2IgPSBza2I7XFxuIDMwODpcXHRcXHRcXHRtYWNfcGt0LVxcdTAwM2VzZGF0YSA9IHNkYXRhO1xcbiAzMDk6XFx0XFx0XFx0bmV0ZGV2X2hvbGQoc2RhdGEtXFx1MDAzZWRldiwgXFx1MDAyNm1hY19wa3QtXFx1MDAzZWRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4gMzEwOlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2c2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VyeF9sb2NrKTtcXG4gMzExOlxcdFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNm1hY19wa3QtXFx1MDAzZW5vZGUsIFxcdTAwMjZzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZXJ4X21hY19jbWRfbGlzdCk7XFxuIDMxMjpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VyeF9sb2NrKTtcXG4gMzEzOlxcdFxcdFxcdHF1ZXVlX3dvcmsoc2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VtYWNfd3EsIFxcdTAwMjZzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZXJ4X21hY19jbWRfd29yayk7XFxuIDMxNDpcXHRcXHRcXHRyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7XFxuIDMxNTpcXHRcXG4gMzE2OlxcdFxcdGNhc2UgSUVFRTgwMjE1NF9GQ19UWVBFX0FDSzpcXG4gMzE3OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4gMzE4OlxcdFxcbiAzMTk6XFx0XFx0Y2FzZSBJRUVFODAyMTU0X0ZDX1RZUEVfREFUQTpcXG4gMzIwOlxcdFxcdFxcdHJldHVybiBpZWVlODAyMTU0X2RlbGl2ZXJfc2tiKHNrYik7XFxuIDMyMTpcXHRcXHRkZWZhdWx0OlxcbiAzMjI6XFx0XFx0XFx0cHJfd2Fybl9yYXRlbGltaXRlZChcXFwiaWVlZTgwMjE1NDogYmFkIGZyYW1lIHJlY2VpdmVkIFxcXCJcXG4gMzIzOlxcdFxcdFxcdFxcdFxcdCAgICBcXFwiKHR5cGUgPSAlZClcXFxcblxcXCIsIG1hY19jYihza2IpLVxcdTAwM2V0eXBlKTtcXG4gMzI0OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4gMzI1OlxcdFxcdH1cXG4gMzI2OlxcdFxcbiAzMjc6XFx0ZmFpbDpcXG4gMzI4OlxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAzMjk6XFx0XFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xcbiAzMzA6XFx0fVxcbiAzMzE6XFx0XFxuIDMzMjpcXHRzdGF0aWMgdm9pZFxcbiAzMzM6XFx0aWVlZTgwMjE1NF9wcmludF9hZGRyKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTU0X2FkZHIgKmFkZHIpXFxuIDMzNDpcXHR7XFxuIDMzNTpcXHRcXHRpZiAoYWRkci1cXHUwMDNlbW9kZSA9PSBJRUVFODAyMTU0X0FERFJfTk9ORSkge1xcbiAzMzY6XFx0XFx0XFx0cHJfZGVidWcoXFxcIiVzIG5vdCBwcmVzZW50XFxcXG5cXFwiLCBuYW1lKTtcXG4gMzM3OlxcdFxcdFxcdHJldHVybjtcXG4gMzM4OlxcdFxcdH1cXG4gMzM5OlxcdFxcbiAzNDA6XFx0XFx0cHJfZGVidWcoXFxcIiVzIFBBTiBJRDogJTA0eFxcXFxuXFxcIiwgbmFtZSwgbGUxNl90b19jcHUoYWRkci1cXHUwMDNlcGFuX2lkKSk7XFxuIDM0MTpcXHRcXHRpZiAoYWRkci1cXHUwMDNlbW9kZSA9PSBJRUVFODAyMTU0X0FERFJfU0hPUlQpIHtcXG4gMzQyOlxcdFxcdFxcdHByX2RlYnVnKFxcXCIlcyBpcyBzaG9ydDogJTA0eFxcXFxuXFxcIiwgbmFtZSxcXG4gMzQzOlxcdFxcdFxcdFxcdCBsZTE2X3RvX2NwdShhZGRyLVxcdTAwM2VzaG9ydF9hZGRyKSk7XFxuIDM0NDpcXHRcXHR9IGVsc2Uge1xcbiAzNDU6XFx0XFx0XFx0dTY0IGh3ID0gc3dhYjY0KChfX2ZvcmNlIHU2NClhZGRyLVxcdTAwM2VleHRlbmRlZF9hZGRyKTtcXG4gMzQ2OlxcdFxcbiAzNDc6XFx0XFx0XFx0cHJfZGVidWcoXFxcIiVzIGlzIGhhcmR3YXJlOiAlOHBoQ1xcXFxuXFxcIiwgbmFtZSwgXFx1MDAyNmh3KTtcXG4gMzQ4OlxcdFxcdH1cXG4gMzQ5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzA6NTYuMjIxNTU5NDE2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MzI2OTI5MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb2RlIEJlZm9yZSB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqYmVmb3JlKiBzdGF0ZSBvZiB0aGlzIGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lYCBmdW5jdGlvbi4gSSdtIGZvY3VzaW5nIG9uIGEgc3BlY2lmaWMgc2VxdWVuY2Ugd2hlcmUgYSBgbWFjX3BrdGAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYC4gSWYgdGhhdCBzdWNjZWVkcywgdGhlIGNvZGUgdGhlbiBkb2VzIGBtYWNfcGt0LVx1MDAzZXNrYiA9IHNrYl9nZXQoc2tiKTtgIGFuZCByZXR1cm5zIGBORVRfUlhfU1VDQ0VTU2AuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hlcmUgaXMgdGhlIG9yaWdpbmFsIGBza2JgIGJlaW5nIGhhbmRsZWQ/IElzIHRoZSByZXNwb25zaWJpbGl0eSB0byBmcmVlIHRoZSBgc2tiYCB3aXRoIHRoZSBjYWxsZXIgb3Igd2l0aGluIGEgd29ya3F1ZXVlPyBJIG5lZWQgdG8gdHJhY2UgdGhpcyBgc2tiYCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIHdlcmUgYW55IG1lbW9yeSBtYW5hZ2VtZW50IGlzc3Vlcy4gU28sIEkgbmVlZCB0byBzZWUgd2hlcmUgYGllZWU4MDIxNTRfc3ViaWZfZnJhbWVgIGlzIGNhbGxlZCBmcm9tLCBhbmQgdGhlbiBob3cgdGhlIGBtYWNfcGt0YCB0aGF0J3MgY3JlYXRlZCBoZXJlIGlzIHVzZWQgaW5zaWRlIG9mIHRoZSB3b3JrcXVldWUuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCBwcm9ibGVtIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzE2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzA6NTguNjU0MjU5NTk1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ4Mzg3Nzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxNTRfc3ViaWZfZnJhbWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjE1NC9yeC5jPTIwMT1zdGF0aWMgaW50XFxubmV0L21hYzgwMjE1NC9yeC5jOjIwMjppZWVlODAyMTU0X3N1YmlmX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTU0X3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTU0L3J4LmMtMjAzLVxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjE1NF9oZHIgKmhkcilcXG4tLVxcbm5ldC9tYWM4MDIxNTQvcnguYz00MTE9X19pZWVlODAyMTU0X3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21hYzgwMjE1NC9yeC5jLTQ0MS1cXHRcXHRcXHRza2IyLVxcdTAwM2VkZXYgPSBzZGF0YS1cXHUwMDNlZGV2O1xcbm5ldC9tYWM4MDIxNTQvcnguYzo0NDI6XFx0XFx0XFx0aWVlZTgwMjE1NF9zdWJpZl9mcmFtZShzZGF0YSwgc2tiMiwgXFx1MDAyNmhkcik7XFxubmV0L21hYzgwMjE1NC9yeC5jLTQ0My1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjMxOjAwLjEwMjY2NzA3MloiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjM0MTA3NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhlc2UgaXRlbXM6XG5cbioqRGl2aW5nIGludG8gdGhlIFJlY2VwdGlvbiBXb3JrcXVldWVzKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSBgcnhfYmVhY29uX3dvcmtgIGFuZCBgcnhfbWFjX2NtZF93b3JrYCB3b3JrcXVldWVzLiBUaGVzZSBhcmUgbGlrZWx5IGhhbmRsaW5nIHRoZSBpbmNvbWluZyBiZWFjb24gYW5kIE1BQyBjb21tYW5kIGZyYW1lcywgc28gdGhleSdyZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHJlY2VpdmVyIHByb2Nlc3NlcyBpdHMgaW50ZXJhY3Rpb25zLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZmxvdyBvZiBkYXRhLCBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQgaG93IHRoZXNlIHRhc2tzIGFyZSBzY2hlZHVsZWQgYW5kIHByaW9yaXRpemVkIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzIGFib3V0IHRoZSBsb2dpYyBpbiB0aGVzZSBzcGVjaWZpYyB3b3JrcXVldWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTgzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzE6MDEuNzM2Nzc2NzA5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY2MzEzODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ4X2JlYWNvbl93b3JrfHJ4X21hY19jbWRfd29ya1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTU0L2llZWU4MDIxNTRfaS5oPTMxPXN0cnVjdCBpZWVlODAyMTU0X2xvY2FsIHtcXG4tLVxcbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmgtNzMtXFx0c3RydWN0IGxpc3RfaGVhZCByeF9iZWFjb25fbGlzdDtcXG5uZXQvbWFjODAyMTU0L2llZWU4MDIxNTRfaS5oOjc0OlxcdHN0cnVjdCB3b3JrX3N0cnVjdCByeF9iZWFjb25fd29yaztcXG5uZXQvbWFjODAyMTU0L2llZWU4MDIxNTRfaS5oLTc1LVxcdHN0cnVjdCBsaXN0X2hlYWQgcnhfbWFjX2NtZF9saXN0O1xcbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmg6NzY6XFx0c3RydWN0IHdvcmtfc3RydWN0IHJ4X21hY19jbWRfd29yaztcXG5uZXQvbWFjODAyMTU0L2llZWU4MDIxNTRfaS5oLTc3LVxcdC8qIFNlcmlhbGl6ZXMgcnhfYmVhY29uX2xpc3QgYW5kIHJ4X21hY19jbWRfbGlzdCBhZ2FpbnN0IHRoZSBSWFxcbi0tXFxubmV0L21hYzgwMjE1NC9pZWVlODAyMTU0X2kuaD0yOTA9aW50IG1hYzgwMjE1NF9wcm9jZXNzX2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbWFjODAyMTU0L2llZWU4MDIxNTRfaS5oLTI5Mi1cXHRcXHRcXHQgICAgIHU4IHBhZ2UsIHU4IGNoYW5uZWwpO1xcbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmg6MjkzOnZvaWQgbWFjODAyMTU0X3J4X2JlYWNvbl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG5uZXQvbWFjODAyMTU0L2llZWU4MDIxNTRfaS5oLTI5NC1cXG4tLVxcbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmg9MzA2PXN0YXRpYyBpbmxpbmUgYm9vbCBtYWM4MDIxNTRfaXNfYmVhY29uaW5nKHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbClcXG4tLVxcbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmgtMzEwLVxcbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmg6MzExOnZvaWQgbWFjODAyMTU0X3J4X21hY19jbWRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxubmV0L21hYzgwMjE1NC9pZWVlODAyMTU0X2kuaC0zMTItdm9pZCBtYWM4MDIxNTRfZmx1c2hfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbi0tXFxubmV0L21hYzgwMjE1NC9tYWluLmM9NDc9aWVlZTgwMjE1NF9hbGxvY19odyhzaXplX3QgcHJpdl9kYXRhX2xlbiwgY29uc3Qgc3RydWN0IGllZWU4MDIxNTRfb3BzICpvcHMpXFxuLS1cXG5uZXQvbWFjODAyMTU0L21haW4uYy0xMDItXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNmxvY2FsLVxcdTAwM2VzY2FuX3dvcmssIG1hYzgwMjE1NF9zY2FuX3dvcmtlcik7XFxubmV0L21hYzgwMjE1NC9tYWluLmM6MTAzOlxcdElOSVRfV09SSyhcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X2JlYWNvbl93b3JrLCBtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlcik7XFxubmV0L21hYzgwMjE1NC9tYWluLmMtMTA0LVxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZsb2NhbC1cXHUwMDNlYmVhY29uX3dvcmssIG1hYzgwMjE1NF9iZWFjb25fd29ya2VyKTtcXG5uZXQvbWFjODAyMTU0L21haW4uYzoxMDU6XFx0SU5JVF9XT1JLKFxcdTAwMjZsb2NhbC1cXHUwMDNlcnhfbWFjX2NtZF93b3JrLCBtYWM4MDIxNTRfcnhfbWFjX2NtZF93b3JrZXIpO1xcbm5ldC9tYWM4MDIxNTQvbWFpbi5jLTEwNi1cXG4tLVxcbm5ldC9tYWM4MDIxNTQvcnguYz0yND1zdGF0aWMgaW50IGllZWU4MDIxNTRfZGVsaXZlcl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tYWM4MDIxNTQvcnguYy0zMS1cXG5uZXQvbWFjODAyMTU0L3J4LmM6MzI6dm9pZCBtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L21hYzgwMjE1NC9yeC5jLTMzLXtcXG5uZXQvbWFjODAyMTU0L3J4LmMtMzQtXFx0c3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsID1cXG5uZXQvbWFjODAyMTU0L3J4LmM6MzU6XFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsLCByeF9iZWFjb25fd29yayk7XFxubmV0L21hYzgwMjE1NC9yeC5jLTM2LVxcdHN0cnVjdCBjZmc4MDIxNTRfbWFjX3BrdCAqbWFjX3BrdDtcXG4tLVxcbm5ldC9tYWM4MDIxNTQvcnguYz03OD1zdGF0aWMgdm9pZCBtYWM4MDIxNTRfcnhfbWFjX2NtZChzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbWFjODAyMTU0L3J4LmMtMTI1LVxcbm5ldC9tYWM4MDIxNTQvcnguYzoxMjY6dm9pZCBtYWM4MDIxNTRfcnhfbWFjX2NtZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9tYWM4MDIxNTQvcnguYy0xMjcte1xcbm5ldC9tYWM4MDIxNTQvcnguYy0xMjgtXFx0c3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsID1cXG5uZXQvbWFjODAyMTU0L3J4LmM6MTI5OlxcdFxcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCwgcnhfbWFjX2NtZF93b3JrKTtcXG5uZXQvbWFjODAyMTU0L3J4LmMtMTMwLVxcdHN0cnVjdCBjZmc4MDIxNTRfbWFjX3BrdCAqbWFjX3BrdDtcXG4tLVxcbm5ldC9tYWM4MDIxNTQvcnguYz0yMDI9aWVlZTgwMjE1NF9zdWJpZl9mcmFtZShzdHJ1Y3QgaWVlZTgwMjE1NF9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTU0L3J4LmMtMjk3LVxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZXJ4X2xvY2spO1xcbm5ldC9tYWM4MDIxNTQvcnguYzoyOTg6XFx0XFx0cXVldWVfd29yayhzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZW1hY193cSwgXFx1MDAyNnNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlcnhfYmVhY29uX3dvcmspO1xcbm5ldC9tYWM4MDIxNTQvcnguYy0yOTktXFx0XFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xcbi0tXFxubmV0L21hYzgwMjE1NC9yeC5jLTMxMi1cXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VyeF9sb2NrKTtcXG5uZXQvbWFjODAyMTU0L3J4LmM6MzEzOlxcdFxcdHF1ZXVlX3dvcmsoc2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VtYWNfd3EsIFxcdTAwMjZzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZXJ4X21hY19jbWRfd29yayk7XFxubmV0L21hYzgwMjE1NC9yeC5jLTMxNC1cXHRcXHRyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjMxOjAzLjgwMzA5NTYwNloiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTMxNTYzNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRoaW5nczpcblxuKipBbmFseXppbmcgTUFDIDgwMi4xNS40IFJlY2VpdmUgTWVjaGFuaXNtcyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGhlYXJ0IG9mIHRoZSA4MDIuMTUuNCBNQUMgbGF5ZXIsIHNwZWNpZmljYWxseSB0aGUgcmVjZWl2ZSBwYXRoLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlIGxvb2sgYXQgdGhyZWUga2V5IGNvbXBvbmVudHM6IGBtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlcmAsIGBtYWM4MDIxNTRfcnhfbWFjX2NtZF93b3JrZXJgLCBhbmQgYG1hYzgwMjE1NF9mbHVzaF9saXN0YC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGJlYWNvbnMgYXJlIGhhbmRsZWQsIGhvdyBNQUMgY29tbWFuZHMgYXJlIHByb2Nlc3NlZCwgYW5kIGhvdyByZWNlaXZlZCBkYXRhIGxpc3RzIGFyZSBtYW5hZ2VkLCBwcm9iYWJseSBmb3IgZmx1c2hpbmcgb2xkIG9yIGludmFsaWQgZW50cmllcy4gVGhlc2UgdGhyZWUgZnVuY3Rpb25zIHdpbGwgcHJvYmFibHkgYmUgdGhlIGtleXMgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIE1BQyBsYXllciByZWNlaXZlcyBhbmQgcHJvY2Vzc2VzIGl0cyBkYXRhLiBJIHdpbGwgYmUgbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZSB0aHJlZSBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MTUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMTowNS43MzQ2NjI1NDVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjE1NC9yeC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMwOlxcdH1cXG4gIDMxOlxcdFxcbiAgMzI6XFx0dm9pZCBtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuICAzMzpcXHR7XFxuICAzNDpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwgPVxcbiAgMzU6XFx0XFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsLCByeF9iZWFjb25fd29yayk7XFxuICAzNjpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTU0X21hY19wa3QgKm1hY19wa3Q7XFxuICAzNzpcXHRcXG4gIDM4OlxcdFxcdGZvciAoOzspIHtcXG4gIDM5OlxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X2xvY2spO1xcbiAgNDA6XFx0XFx0XFx0bWFjX3BrdCA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X2JlYWNvbl9saXN0LFxcbiAgNDE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGNmZzgwMjE1NF9tYWNfcGt0LCBub2RlKTtcXG4gIDQyOlxcdFxcdFxcdGlmIChtYWNfcGt0KVxcbiAgNDM6XFx0XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNm1hY19wa3QtXFx1MDAzZW5vZGUpO1xcbiAgNDQ6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9sb2NrKTtcXG4gIDQ1OlxcdFxcdFxcdGlmICghbWFjX3BrdClcXG4gIDQ2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHRcXHRtYWM4MDIxNTRfcHJvY2Vzc19iZWFjb24obG9jYWwsIG1hY19wa3QtXFx1MDAzZXNrYixcXG4gIDQ5OlxcdFxcdFxcdFxcdFxcdFxcdCBtYWNfcGt0LVxcdTAwM2VwYWdlLCBtYWNfcGt0LVxcdTAwM2VjaGFubmVsKTtcXG4gIDUwOlxcdFxcbiAgNTE6XFx0XFx0XFx0bmV0ZGV2X3B1dChtYWNfcGt0LVxcdTAwM2VzZGF0YS1cXHUwMDNlZGV2LCBcXHUwMDI2bWFjX3BrdC1cXHUwMDNlZGV2X3RyYWNrZXIpO1xcbiAgNTI6XFx0XFx0XFx0a2ZyZWVfc2tiKG1hY19wa3QtXFx1MDAzZXNrYik7XFxuICA1MzpcXHRcXHRcXHRrZnJlZShtYWNfcGt0KTtcXG4gIDU0OlxcdFxcdH1cXG4gIDU1OlxcdH1cXG4gIDU2OlxcdFxcbiAgNTc6XFx0c3RhdGljIGJvb2wgbWFjODAyMTU0X3Nob3VsZF9hbnN3ZXJfYmVhY29uX3JlcShzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwpXFxuICA1ODpcXHR7XFxuICA1OTpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTU0X2JlYWNvbl9yZXF1ZXN0ICpiZWFjb25fcmVxO1xcbiAgNjA6XFx0XFx0dW5zaWduZWQgaW50IGludGVydmFsO1xcbiAgNjE6XFx0XFxuICA2MjpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuICA2MzpcXHRcXHRiZWFjb25fcmVxID0gcmN1X2RlcmVmZXJlbmNlKGxvY2FsLVxcdTAwM2ViZWFjb25fcmVxKTtcXG4gIDY0OlxcdFxcdGlmICghYmVhY29uX3JlcSkge1xcbiAgNjU6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuICA2NjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuICA2NzpcXHRcXHR9XFxuICA2ODpcXHRcXG4gIDY5OlxcdFxcdGludGVydmFsID0gYmVhY29uX3JlcS1cXHUwMDNlaW50ZXJ2YWw7XFxuICA3MDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gIDcxOlxcdFxcbiAgNzI6XFx0XFx0aWYgKCFtYWM4MDIxNTRfaXNfYmVhY29uaW5nKGxvY2FsKSlcXG4gIDczOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gIDc0OlxcdFxcbiAgNzU6XFx0XFx0cmV0dXJuIGludGVydmFsID09IElFRUU4MDIxNTRfQUNUSVZFX1NDQU5fRFVSQVRJT047XFxuICA3NjpcXHR9XFxuICA3NzpcXHRcXG4gIDc4OlxcdHN0YXRpYyB2b2lkIG1hYzgwMjE1NF9yeF9tYWNfY21kKHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCxcXG4gIDc5OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgY2ZnODAyMTU0X21hY19wa3QgKm1hY19wa3QpXFxuICA4MDpcXHR7XFxuICA4MTpcXHRcXHR1OCBtYWNfY21kO1xcbiAgODI6XFx0XFx0aW50IHJjO1xcbiAgODM6XFx0XFxuICA4NDpcXHRcXHRyYyA9IGllZWU4MDIxNTRfZ2V0X21hY19jbWQobWFjX3BrdC1cXHUwMDNlc2tiLCBcXHUwMDI2bWFjX2NtZCk7XFxuICA4NTpcXHRcXHRpZiAocmMpXFxuICA4NjpcXHRcXHRcXHRyZXR1cm47XFxuICA4NzpcXHRcXG4gIDg4OlxcdFxcdHN3aXRjaCAobWFjX2NtZCkge1xcbiAgODk6XFx0XFx0Y2FzZSBJRUVFODAyMTU0X0NNRF9CRUFDT05fUkVROlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMTowNS43MzQ3NDk1NzVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQyMTgxMDI3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBNQUMgQ29tbWFuZCBXb3JrZXIqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHRoZSByZWNlaXZlIHBhdGgsIGFuZCB3ZSd2ZSBhbHJlYWR5IHNjb3BlZCBvdXQgYSBmZXcgYXJlYXMuIExldCdzIG5vdCBnZXQgdHVubmVsIHZpc2lvbiwgdGhvdWdoLiBCZWZvcmUgd2UgbW92ZSBvbiwgSSBuZWVkIHRvIGNoZWNrIG91dCBgbWFjODAyMTU0X3J4X21hY19jbWRfd29ya2VyYC4gSXQncyBhIGtleSBwYXJ0IG9mIHRoZSBNQUMgbGF5ZXIncyByZWNlaXZlIHByb2Nlc3NpbmcuIEkgaGF2ZSBhIGh1bmNoIHRoYXQgc29tZXRoaW5nIGNyaXRpY2FsIHRvIG91ciBkZWJ1Z2dpbmcgZWZmb3J0cyBtYXkgcmVzaWRlIHRoZXJlLiBUaGlzIGNvdWxkIGJlIHdoZXJlIG91ciBwcm9ibGVtIGxpZXMsIG9yIGV2ZW4gd2hlcmUgYSBjcnVjaWFsIHBpZWNlIG9mIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtYWxmdW5jdGlvbiBpcyBiZWluZyBwcm9jZXNzZWQuIEl0J3MgdG9vIGltcG9ydGFudCB0byBza2lwIG92ZXIuIEdvdHRhIGJlIHRob3JvdWdoLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyBpbiBgbWFjODAyMTU0X3J4X21hY19jbWRfd29ya2VyYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk3MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzE6MDguMTU2NTYyNjA2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxNTQvcnguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMjU6XFx0XFxuIDEyNjpcXHR2b2lkIG1hYzgwMjE1NF9yeF9tYWNfY21kX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIDEyNzpcXHR7XFxuIDEyODpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwgPVxcbiAxMjk6XFx0XFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsLCByeF9tYWNfY21kX3dvcmspO1xcbiAxMzA6XFx0XFx0c3RydWN0IGNmZzgwMjE1NF9tYWNfcGt0ICptYWNfcGt0O1xcbiAxMzE6XFx0XFxuIDEzMjpcXHRcXHRmb3IgKDs7KSB7XFxuIDEzMzpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9sb2NrKTtcXG4gMTM0OlxcdFxcdFxcdG1hY19wa3QgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9tYWNfY21kX2xpc3QsXFxuIDEzNTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgY2ZnODAyMTU0X21hY19wa3QsIG5vZGUpO1xcbiAxMzY6XFx0XFx0XFx0aWYgKG1hY19wa3QpXFxuIDEzNzpcXHRcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2bWFjX3BrdC1cXHUwMDNlbm9kZSk7XFxuIDEzODpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X2xvY2spO1xcbiAxMzk6XFx0XFx0XFx0aWYgKCFtYWNfcGt0KVxcbiAxNDA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDE0MTpcXHRcXG4gMTQyOlxcdFxcdFxcdC8qIEEgc3RvcHBlZCBpbnRlcmZhY2UgY2Fubm90IHRyYW5zbWl0OyBza2lwcGluZyBhdm9pZHMgYVxcbiAxNDM6XFx0XFx0XFx0ICogbmVlZGxlc3MgYXNzb2NpYXRpb24gcmVzcG9uc2UgKGFuZCB0aGUgIW5ldGlmX3J1bm5pbmcoKVxcbiAxNDQ6XFx0XFx0XFx0ICogd2FybmluZyBpdCB3b3VsZCB0cmlwKSBkdXJpbmcgdGVhcmRvd24uIFRoZSBiZWFjb24gd29ya2VyXFxuIDE0NTpcXHRcXHRcXHQgKiBuZWVkcyBubyBzdWNoIGNoZWNrIGFzIGl0IG5ldmVyIHRyYW5zbWl0cy5cXG4gMTQ2OlxcdFxcdFxcdCAqL1xcbiAxNDc6XFx0XFx0XFx0aWYgKGllZWU4MDIxNTRfc2RhdGFfcnVubmluZyhtYWNfcGt0LVxcdTAwM2VzZGF0YSkpXFxuIDE0ODpcXHRcXHRcXHRcXHRtYWM4MDIxNTRfcnhfbWFjX2NtZChsb2NhbCwgbWFjX3BrdCk7XFxuIDE0OTpcXHRcXG4gMTUwOlxcdFxcdFxcdG5ldGRldl9wdXQobWFjX3BrdC1cXHUwMDNlc2RhdGEtXFx1MDAzZWRldiwgXFx1MDAyNm1hY19wa3QtXFx1MDAzZWRldl90cmFja2VyKTtcXG4gMTUxOlxcdFxcdFxcdGtmcmVlX3NrYihtYWNfcGt0LVxcdTAwM2Vza2IpO1xcbiAxNTI6XFx0XFx0XFx0a2ZyZWUobWFjX3BrdCk7XFxuIDE1MzpcXHRcXHR9XFxuIDE1NDpcXHR9XFxuIDE1NTpcXHRcXG4gMTU2OlxcdC8qKlxcbiAxNTc6XFx0ICogbWFjODAyMTU0X2ZsdXNoX2xpc3QgLSBmcmVlIHF1ZXVlZCBSWCBmcmFtZXMgb24gQGxpc3RcXG4gMTU4OlxcdCAqIEBsaXN0OiByeF9iZWFjb25fbGlzdCBvciByeF9tYWNfY21kX2xpc3RcXG4gMTU5OlxcdCAqIEBzZGF0YTogb25seSBmcmVlIGZyYW1lcyByZWNlaXZlZCBvbiB0aGlzIGludGVyZmFjZSwgb3IgJU5VTEwgZm9yIGFsbFxcbiAxNjA6XFx0ICpcXG4gMTYxOlxcdCAqIEVhY2ggZnJhbWUgcGlucyB0aGUgbmV0X2RldmljZSBpdCB3YXMgcmVjZWl2ZWQgb24gKHZpYSBuZXRkZXZfaG9sZCgpKSxcXG4gMTYyOlxcdCAqIHNvIHJlbGVhc2UgdGhhdCByZWZlcmVuY2UgYXMgdGhlIGZyYW1lIGlzIGRyb3BwZWQuIENhbGxlciBtdXN0IGhvbGRcXG4gMTYzOlxcdCAqIGxvY2FsLVxcdTAwM2VyeF9sb2NrLlxcbiAxNjQ6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjMxOjA4LjE1NjY0MTYxNVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTM3MDMxNzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBMZWFrIEZpeCBhbmQgS01TQU4gSW1wbGljYXRpb25zKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9tYWM4MDIxNTQvcnguY2AuICBCYXNpY2FsbHksIGl0J3MgYSBzdHJhaWdodGZvcndhcmQgZml4OiBpbiBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZWAsIHdoZW4gYSBgbWFjX3BrdGAgaXMgcXVldWVkLCB3ZSdyZSBjaGFuZ2luZyBob3cgd2UgaGFuZGxlIHRoZSBgc2tiYC4gUHJldmlvdXNseSwgd2Ugd2VyZSBkb2luZyBgbWFjX3BrdC1cdTAwM2Vza2IgPSBza2JfZ2V0KHNrYik7YCBhbmQgcmV0dXJuaW5nIGBORVRfUlhfU1VDQ0VTU2Agd2l0aG91dCBkcm9wcGluZyB0aGUgb3JpZ2luYWwgYHNrYmAgcmVmZXJlbmNlLiBUaGlzIG1lYW50IHRoZSBgc2tiYCByZWZjb3VudCB3YXMgYnVtcGVkLCBidXQgbmV2ZXIgZGVjcmVtZW50ZWQgaW4gdGhpcyBwYXRoLCBsZWFkaW5nIHRvIGEgY2xhc3NpYyBtZW1vcnkgbGVhay4gVGhlIHdvcmtlciB3b3VsZCBldmVudHVhbGx5IGZyZWUgaXQgb25jZSwgYnV0IHRoZSByZWZjb3VudCB3b3VsZCBiZSB3cm9uZy5cblxuVGhlIHBhdGNoJ3Mgc29sdXRpb24gaXMgc2ltcGxlIGFuZCBlbGVnYW50OiByZXBsYWNlIHRoYXQgd2l0aCBgbWFjX3BrdC1cdTAwM2Vza2IgPSBza2I7YC4gIFRoaXMgdHJhbnNmZXJzICpvd25lcnNoaXAqIG9mIHRoZSBgc2tiYCB0byBgbWFjX3BrdGAgaW1tZWRpYXRlbHksIGZpeGluZyB0aGUgbGVhay4gTm8gbW9yZSB1bm5lY2Vzc2FyeSByZWZjb3VudCBpbmNyZW1lbnRzLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcywgc3BlY2lmaWNhbGx5IGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeT8gSSd2ZSBydW4gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OlxuXG4xLiAgKipVc2VyLXNwYWNlIGV4cG9zdXJlOioqIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgbWlnaHQgbGVhayBpbmZvLiBgbWFjX3BrdGAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgd2hpY2ggZ3VhcmFudGVlcyB6ZXJvLWluaXRpYWxpemF0aW9uLiBUaGlzIGlzIGdvb2QuXG4yLiAgKipVbmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGFyZSBiZWluZyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIHdpdGggdGhpcyBjaGFuZ2UuXG4zLiAgKipCdWZmZXIgaGFuZGxpbmc6KiogTm8gY2hhbmdlcyB0byBidWZmZXIgbGVuZ3RocywgYm91bmRzIGNoZWNrcywgb3IgbG9naWMgdGhhdCB3b3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcy5cbjQuICAqKkJ1ZyB0eXBlOioqIFRoaXMgaXMgc3RyaWN0bHkgYSByZWZlcmVuY2UgY291bnQgbGVhay4gIElmIHNvbWV0aGluZyBlbHNlIHdhcyBicm9rZW4sIHRoZXJlICptaWdodCogYmUgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUsIGJ1dCBLQVNBTiBhbmQga21lbWxlYWsgYXJlIGFscmVhZHkgcGVyZmVjdGx5IHN1aXRlZCB0byBjYXRjaCB0aG9zZS5cblxuU28sIHdoZXJlIGRvZXMgS01TQU4gZml0IGluPyBXZSB1c2UgS01TQU4gZm9yIGZpbmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm8gbGVha3MsIG5vdCByZWZlcmVuY2UgY291bnQgZXJyb3JzLiBUaGlzIHBhdGNoICpvbmx5KiBhZGRyZXNzZXMgcmVmZXJlbmNlIGNvdW50aW5nLiAgVGhlIGNoYW5nZSBhdm9pZHMgdGFraW5nIGFuICpleHRyYSogcmVmY291bnQsIGFuZCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGV4cG9zZWQgdG8gdXNlci1zcGFjZSBhcyBwYXJ0IG9mIHRoaXMuIFN0YW5kYXJkIG1lbW9yeSBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiwga21lbWxlYWssIGV0Yy4sIGFyZSBzdWZmaWNpZW50IGZvciBkZXRlY3RpbmcgdGhlIHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHR5cGUgb2YgbWVtb3J5IG1hbmFnZW1lbnQuXG5cblNvLCBpbiBzdW1tYXJ5OlxuXG4qICAgKipDb250ZXh0OioqIFBhdGNoIG1vZGlmaWVzIGBuZXQvbWFjODAyMTU0L3J4LmNgIGJ5IHJlbW92aW5nIHRoZSBgc2tiX2dldGAgY2FsbCB3aGVuIGVucXVldWluZyBiZWFjb24gYW5kIE1BQyBjb21tYW5kIHBhY2tldHMuXG4qICAgKipJbXBhY3Q6KiogRml4ZXMgYSBtZW1vcnkgbGVhayBjYXVzZWQgYnkgYW4gdW5uZWNlc3NhcnkgcmVmZXJlbmNlIGNvdW50IG9uIHRoZSBgc2tiYC5cbiogICAqKktNU0FOIEFwcGxpY2FiaWxpdHk6KiogS01TQU4gaXMgbm90IGFwcGxpY2FibGUuIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zIG9yIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBmaWVsZHMuXG4qICAgKipLQVNBTi9HZW5lcmFsIFNhbml0aXplcnM6KiogS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIG1lbW9yeSBkZWJ1Z2dpbmcgdG9vbHMgYXJlIHN1ZmZpY2llbnQgZm9yIGhhbmRsaW5nIHRoZSByZWZjb3VudCByZWxhdGVkIGlzc3Vlcy5cblxuSSdtIGNvbmZpZGVudCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYCBoZXJlLiAgVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MDUsIk91dHB1dFRva2VucyI6MjEwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzE6MTQuMjkzNjc2MDE4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZSgpYCBpbiBgbmV0L21hYzgwMjE1NC9yeC5jYCB0byBhc3NpZ24gYG1hY19wa3QtXFx1MDAzZXNrYiA9IHNrYmAgZGlyZWN0bHkgaW5zdGVhZCBvZiBjYWxsaW5nIGBza2JfZ2V0KHNrYilgLiBUaGlzIGF2b2lkcyB0YWtpbmcgYW4gZXh0cmEgcmVmY291bnQgd2hlbiB0cmFuc2ZlcnJpbmcgb3duZXJzaGlwIG9mIHRoZSBza2IgdG8gdGhlIGFzeW5jaHJvbm91cyBiZWFjb24vTUFDIGNvbW1hbmQgcHJvY2Vzc2luZyB3b3JrZXJzLCBmaXhpbmcgYW4gc2tiIHJlZmVyZW5jZSBjb3VudCAvIG1lbW9yeSBsZWFrLlxcblxcblRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBwYWRkaW5nLCBvciBleHBvc2Uga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS4gYG1hY19wa3RgIGlzIGFscmVhZHkgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iaigpYC4gUmVmZXJlbmNlIGNvdW50aW5nIGFuZCBtZW1vcnkgbGlmZWN5Y2xlIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLCB3aXRoIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgZGV0ZWN0YWJsZSBvbmx5IGJ5IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lKClgIGluIGBuZXQvbWFjODAyMTU0L3J4LmNgIHRvIGFzc2lnbiBgbWFjX3BrdC1cXHUwMDNlc2tiID0gc2tiYCBkaXJlY3RseSBpbnN0ZWFkIG9mIGNhbGxpbmcgYHNrYl9nZXQoc2tiKWAuIFRoaXMgYXZvaWRzIHRha2luZyBhbiBleHRyYSByZWZjb3VudCB3aGVuIHRyYW5zZmVycmluZyBvd25lcnNoaXAgb2YgdGhlIHNrYiB0byB0aGUgYXN5bmNocm9ub3VzIGJlYWNvbi9NQUMgY29tbWFuZCBwcm9jZXNzaW5nIHdvcmtlcnMsIGZpeGluZyBhbiBza2IgcmVmZXJlbmNlIGNvdW50IC8gbWVtb3J5IGxlYWsuXFxuXFxuVGhlIGNoYW5nZXMgZG8gbm90IGFsbG9jYXRlIG9yIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGV4cG9zZSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBgbWFjX3BrdGAgaXMgYWxyZWFkeSBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKClgLiBSZWZlcmVuY2UgY291bnRpbmcgYW5kIG1lbW9yeSBsaWZlY3ljbGUgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMsIHdpdGggbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBkZXRlY3RhYmxlIG9ubHkgYnkgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowr5tt2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 10:46:04 +0000 UTC FinishedAt: 2026-09-06 11:31:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IEEE802154", "MAC802154", "IEEE802154_DRIVERS", "IEEE802154_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IEEE802154", "MAC802154", "IEEE802154_DRIVERS", "IEEE802154_HWSIM" ], "series_id": "c8152edf-04a3-45a5-8c2e-50dbeace0b73" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ieee802154_subif_frame", "mac802154_rx_beacon_worker", "mac802154_rx_mac_cmd_worker", "ieee802154_rx" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OywKICAgICYjMzQ7TUFDODAyMTU0JiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtJRUVFODAyMTU0X0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjE1NF9zdWJpZl9mcmFtZSYjMzQ7LAogICAgJiMzNDttYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlciYjMzQ7LAogICAgJiMzNDttYWM4MDIxNTRfcnhfbWFjX2NtZF93b3JrZXImIzM0OywKICAgICYjMzQ7aWVlZTgwMjE1NF9yeCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lKClgIGluIGBuZXQvbWFjODAyMTU0L3J4LmNgIHRvIGFzc2lnbiBgbWFjX3BrdC1cdTAwM2Vza2IgPSBza2JgIGRpcmVjdGx5IGluc3RlYWQgb2YgY2FsbGluZyBgc2tiX2dldChza2IpYC4gVGhpcyBhdm9pZHMgdGFraW5nIGFuIGV4dHJhIHJlZmNvdW50IHdoZW4gdHJhbnNmZXJyaW5nIG93bmVyc2hpcCBvZiB0aGUgc2tiIHRvIHRoZSBhc3luY2hyb25vdXMgYmVhY29uL01BQyBjb21tYW5kIHByb2Nlc3Npbmcgd29ya2VycywgZml4aW5nIGFuIHNrYiByZWZlcmVuY2UgY291bnQgLyBtZW1vcnkgbGVhay5cblxuVGhlIGNoYW5nZXMgZG8gbm90IGFsbG9jYXRlIG9yIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGV4cG9zZSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBgbWFjX3BrdGAgaXMgYWxyZWFkeSBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKClgLiBSZWZlcmVuY2UgY291bnRpbmcgYW5kIG1lbW9yeSBsaWZlY3ljbGUgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMsIHdpdGggbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBkZXRlY3RhYmxlIG9ubHkgYnkgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNrX2J1ZmYgcmVmZXJlbmNlIGNvdW50IGhhbmRsaW5nIGluIGllZWU4MDIxNTRfc3ViaWZfZnJhbWUoKSBieSByZW1vdmluZyBza2JfZ2V0KCkgY2FsbHMgd2hlbiBlbnF1ZXVpbmcgYmVhY29uIGFuZCBNQUMgY29tbWFuZCBwYWNrZXRzIHRvIGFzeW5jaHJvbm91cyB3b3JrZXIgcXVldWVzLiBUaGlzIHJlYWNoYWJsZSBuZXR3b3JraW5nIHBhdGggY2FuIGJlIHRlc3RlZCB2aWEgbWFjODAyMTU0X2h3c2ltIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIHZlcmlmeSBza2IgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBjb3JyZWN0bmVzcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM0MjU5NjhiYzRjZjUzOTIyYTVjNjkzNjc5N2FkMzY1Y2VjZDMwMjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDExOjI5OjUzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxNTQvcnguYyBiL25ldC9tYWM4MDIxNTQvcnguY1xuaW5kZXggMTliNTM4MmU4NWE4NC4uYWQ2MDJkMjIyZTg2MSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxNTQvcnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjE1NC9yeC5jXG5AQCAtMjg3LDcgJiM0MzsyODcsNyBAQCBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTU0X3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0aWYgKCFtYWNfcGt0KVxuIFx0XHRcdGdvdG8gZmFpbDtcbiBcbi1cdFx0bWFjX3BrdC1cdTAwM2Vza2IgPSBza2JfZ2V0KHNrYik7XG4mIzQzO1x0XHRtYWNfcGt0LVx1MDAzZXNrYiA9IHNrYjtcbiBcdFx0bWFjX3BrdC1cdTAwM2VzZGF0YSA9IHNkYXRhO1xuIFx0XHRtYWNfcGt0LVx1MDAzZXBhZ2UgPSBzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VzY2FuX3BhZ2U7XG4gXHRcdG1hY19wa3QtXHUwMDNlY2hhbm5lbCA9IHNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZXNjYW5fY2hhbm5lbDtcbkBAIC0zMDQsNyAmIzQzOzMwNCw3IEBAIGllZWU4MDIxNTRfc3ViaWZfZnJhbWUoc3RydWN0IGllZWU4MDIxNTRfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRpZiAoIW1hY19wa3QpXG4gXHRcdFx0Z290byBmYWlsO1xuIFxuLVx0XHRtYWNfcGt0LVx1MDAzZXNrYiA9IHNrYl9nZXQoc2tiKTtcbiYjNDM7XHRcdG1hY19wa3QtXHUwMDNlc2tiID0gc2tiO1xuIFx0XHRtYWNfcGt0LVx1MDAzZXNkYXRhID0gc2RhdGE7XG4gXHRcdG5ldGRldl9ob2xkKHNkYXRhLVx1MDAzZWRldiwgXHUwMDI2bWFjX3BrdC1cdTAwM2VkZXZfdHJhY2tlciwgR0ZQX0FUT01JQyk7XG4gXHRcdHNwaW5fbG9jayhcdTAwMjZzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VyeF9sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJRUVFODAyMTU0JiMzNDssCiAgICAmIzM0O01BQzgwMjE1NCYjMzQ7LAogICAgJiMzNDtJRUVFODAyMTU0X0RSSVZFUlMmIzM0OywKICAgICYjMzQ7SUVFRTgwMjE1NF9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2llZWU4MDIxNTRfc3ViaWZfZnJhbWUmIzM0OywKICAgICYjMzQ7bWFjODAyMTU0X3J4X2JlYWNvbl93b3JrZXImIzM0OywKICAgICYjMzQ7bWFjODAyMTU0X3J4X21hY19jbWRfd29ya2VyJiMzNDssCiAgICAmIzM0O2llZWU4MDIxNTRfcngmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2tfYnVmZiByZWZlcmVuY2UgY291bnQgaGFuZGxpbmcgaW4gaWVlZTgwMjE1NF9zdWJpZl9mcmFtZSgpIGJ5IHJlbW92aW5nIHNrYl9nZXQoKSBjYWxscyB3aGVuIGVucXVldWluZyBiZWFjb24gYW5kIE1BQyBjb21tYW5kIHBhY2tldHMgdG8gYXN5bmNocm9ub3VzIHdvcmtlciBxdWV1ZXMuIFRoaXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgcGF0aCBjYW4gYmUgdGVzdGVkIHZpYSBtYWM4MDIxNTRfaHdzaW0gYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gdmVyaWZ5IHNrYiBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGNvcnJlY3RuZXNzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzQyNTk2OGJjNGNmNTM5MjJhNWM2OTM2Nzk3YWQzNjVjZWNkMzAyNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTE6Mjk6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTU0L3J4LmMgYi9uZXQvbWFjODAyMTU0L3J4LmMKaW5kZXggMTliNTM4MmU4NWE4NC4uYWQ2MDJkMjIyZTg2MSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjE1NC9yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxNTQvcnguYwpAQCAtMjg3LDcgJiM0MzsyODcsNyBAQCBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTU0X3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJaWYgKCFtYWNfcGt0KQogCQkJZ290byBmYWlsOwogCi0JCW1hY19wa3QtJmd0O3NrYiA9IHNrYl9nZXQoc2tiKTsKJiM0MzsJCW1hY19wa3QtJmd0O3NrYiA9IHNrYjsKIAkJbWFjX3BrdC0mZ3Q7c2RhdGEgPSBzZGF0YTsKIAkJbWFjX3BrdC0mZ3Q7cGFnZSA9IHNkYXRhLSZndDtsb2NhbC0mZ3Q7c2Nhbl9wYWdlOwogCQltYWNfcGt0LSZndDtjaGFubmVsID0gc2RhdGEtJmd0O2xvY2FsLSZndDtzY2FuX2NoYW5uZWw7CkBAIC0zMDQsNyAmIzQzOzMwNCw3IEBAIGllZWU4MDIxNTRfc3ViaWZfZnJhbWUoc3RydWN0IGllZWU4MDIxNTRfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQlpZiAoIW1hY19wa3QpCiAJCQlnb3RvIGZhaWw7CiAKLQkJbWFjX3BrdC0mZ3Q7c2tiID0gc2tiX2dldChza2IpOwomIzQzOwkJbWFjX3BrdC0mZ3Q7c2tiID0gc2tiOwogCQltYWNfcGt0LSZndDtzZGF0YSA9IHNkYXRhOwogCQluZXRkZXZfaG9sZChzZGF0YS0mZ3Q7ZGV2LCAmYW1wO21hY19wa3QtJmd0O2Rldl90cmFja2VyLCBHRlBfQVRPTUlDKTsKIAkJc3Bpbl9sb2NrKCZhbXA7c2RhdGEtJmd0O2xvY2FsLSZndDtyeF9sb2NrKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA2MAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQ1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIG1hYzgwMjE1NCBSWCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoaXMgZGlmZiBwcmVzZW50ZWQgdG8gbWUuIEl0JiMzOTtzIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2Ugd2l0aGluIHRoZSBgbmV0L21hYzgwMjE1NC9yeC5jYCBmaWxlLiBUaGUgaW5kZXggbGluZXMgaW5kaWNhdGUgYSB2ZXJzaW9uZWQgY2hhbmdlLCBzbyB0aGlzIGlzIGxpa2VseSBhIHRhcmdldGVkIGJ1ZyBmaXggb3Igb3B0aW1pemF0aW9uLiBJIHNlZSBhIGNvdXBsZSBvZiBpbnN0YW5jZXMgb2Ygd2hhdCBsb29rcyBsaWtlIGEgcG90ZW50aWFsIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZS4gSXQgc2VlbXMgd2UmIzM5O3JlIG1vdmluZyBmcm9tIGEgYHNrYl9nZXQoc2tiKWAgY2FsbCB0byBqdXN0IHVzaW5nIGBza2JgIGRpcmVjdGx5IHdoZW4gYXNzaWduaW5nIHRvIGBtYWNfcGt0LSZndDtza2JgLiBUaGlzIGxpa2VseSBoYXMgdG8gZG8gd2l0aCBzb21lIHNoYXJlZCBtZW1vcnkgaGFuZGxpbmcgYW5kIGVuc3VyaW5nIHRoZSBtZW1vcnkgaXNuJiMzOTt0IGR1cGxpY2F0ZWQuIFRoZSBgbmV0ZGV2X2hvbGRgIGNhbGwgYW5kIHNwaW5sb2NrIHVzYWdlIGZ1cnRoZXIgc3VnZ2VzdCB0aGlzIG1pZ2h0IHJlbGF0ZSB0byBzaGFyZWQgc3RhdGUgb3IgcmVzb3VyY2UgYWNjZXNzLCB3aGljaCBpcyBzb21ldGhpbmcgSSYjMzk7bGwga2VlcCBpbiBtaW5kIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2l0aCBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBhbHRlcmF0aW9uIHdhcyBjaG9zZW4gYW5kIGlmIGl0IGludHJvZHVjZXMgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3IuIEkmIzM5O20ga2VlbiB0byBldmFsdWF0ZSB0aGUgb3ZlcmFsbCBpbXBsaWNhdGlvbnMgZm9yIHBhY2tldCBoYW5kbGluZyBhbmQgcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTU0L3J4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI2MDpcdFx0ZGVmYXVsdDpcbiAyNjE6XHRcdFx0cHJfZGVidWcoXCYjMzQ7aW52YWxpZCBkZXN0IG1vZGVcXG5cJiMzNDspO1xuIDI2MjpcdFx0XHRnb3RvIGZhaWw7XG4gMjYzOlx0XHR9XG4gMjY0Olx0XG4gMjY1Olx0XHRza2ItXHUwMDNlZGV2ID0gc2RhdGEtXHUwMDNlZGV2O1xuIDI2NjpcdFxuIDI2NzpcdFx0LyogVE9ETyB0aGlzIHNob3VsZCBiZSBtb3ZlZCBhZnRlciBuZXRpZl9yZWNlaXZlX3NrYiBjYWxsLCBvdGhlcndpc2VcbiAyNjg6XHRcdCAqIHdpcmVzaGFyayB3aWxsIHNob3cgYSBtYWMgaGVhZGVyIHdpdGggc2VjdXJpdHkgZmllbGRzIGFuZCB0aGVcbiAyNjk6XHRcdCAqIHBheWxvYWQgaXMgYWxyZWFkeSBkZWNyeXB0ZWQuXG4gMjcwOlx0XHQgKi9cbiAyNzE6XHRcdHJjID0gbWFjODAyMTU0X2xsc2VjX2RlY3J5cHQoXHUwMDI2c2RhdGEtXHUwMDNlc2VjLCBza2IpO1xuIDI3MjpcdFx0aWYgKHJjKSB7XG4gMjczOlx0XHRcdHByX2RlYnVnKFwmIzM0O2RlY3J5cHRpb24gZmFpbGVkOiAlaVxcblwmIzM0OywgcmMpO1xuIDI3NDpcdFx0XHRnb3RvIGZhaWw7XG4gMjc1Olx0XHR9XG4gMjc2Olx0XG4gMjc3Olx0XHRzZGF0YS1cdTAwM2VkZXYtXHUwMDNlc3RhdHMucnhfcGFja2V0cyYjNDM7JiM0Mzs7XG4gMjc4Olx0XHRzZGF0YS1cdTAwM2VkZXYtXHUwMDNlc3RhdHMucnhfYnl0ZXMgJiM0Mzs9IHNrYi1cdTAwM2VsZW47XG4gMjc5Olx0XG4gMjgwOlx0XHRzd2l0Y2ggKG1hY19jYihza2IpLVx1MDAzZXR5cGUpIHtcbiAyODE6XHRcdGNhc2UgSUVFRTgwMjE1NF9GQ19UWVBFX0JFQUNPTjpcbiAyODI6XHRcdFx0ZGV2X2RiZyhcdTAwMjZzZGF0YS1cdTAwM2VkZXYtXHUwMDNlZGV2LCBcJiMzNDtCRUFDT04gcmVjZWl2ZWRcXG5cJiMzNDspO1xuIDI4MzpcdFx0XHRpZiAoIW1hYzgwMjE1NF9pc19zY2FubmluZyhzZGF0YS1cdTAwM2Vsb2NhbCkpXG4gMjg0Olx0XHRcdFx0Z290byBmYWlsO1xuIDI4NTpcdFxuIDI4NjpcdFx0XHRtYWNfcGt0ID0ga3phbGxvY19vYmooKm1hY19wa3QsIEdGUF9BVE9NSUMpO1xuIDI4NzpcdFx0XHRpZiAoIW1hY19wa3QpXG4gMjg4Olx0XHRcdFx0Z290byBmYWlsO1xuIDI4OTpcdFxuIDI5MDpcdFx0XHRtYWNfcGt0LVx1MDAzZXNrYiA9IHNrYjtcbiAyOTE6XHRcdFx0bWFjX3BrdC1cdTAwM2VzZGF0YSA9IHNkYXRhO1xuIDI5MjpcdFx0XHRtYWNfcGt0LVx1MDAzZXBhZ2UgPSBzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VzY2FuX3BhZ2U7XG4gMjkzOlx0XHRcdG1hY19wa3QtXHUwMDNlY2hhbm5lbCA9IHNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZXNjYW5fY2hhbm5lbDtcbiAyOTQ6XHRcdFx0bmV0ZGV2X2hvbGQoc2RhdGEtXHUwMDNlZGV2LCBcdTAwMjZtYWNfcGt0LVx1MDAzZWRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcbiAyOTU6XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNnNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZXJ4X2xvY2spO1xuIDI5NjpcdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNm1hY19wa3QtXHUwMDNlbm9kZSwgXHUwMDI2c2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlcnhfYmVhY29uX2xpc3QpO1xuIDI5NzpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VyeF9sb2NrKTtcbiAyOTg6XHRcdFx0cXVldWVfd29yayhzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VtYWNfd3EsIFx1MDAyNnNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZXJ4X2JlYWNvbl93b3JrKTtcbiAyOTk6XHRcdFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xuIDMwMDpcdFxuIDMwMTpcdFx0Y2FzZSBJRUVFODAyMTU0X0ZDX1RZUEVfTUFDX0NNRDpcbiAzMDI6XHRcdFx0ZGV2X2RiZyhcdTAwMjZzZGF0YS1cdTAwM2VkZXYtXHUwMDNlZGV2LCBcJiMzNDtNQUMgQ09NTUFORCByZWNlaXZlZFxcblwmIzM0Oyk7XG4gMzAzOlx0XHRcdG1hY19wa3QgPSBremFsbG9jX29iaigqbWFjX3BrdCwgR0ZQX0FUT01JQyk7XG4gMzA0Olx0XHRcdGlmICghbWFjX3BrdClcbiAzMDU6XHRcdFx0XHRnb3RvIGZhaWw7XG4gMzA2Olx0XG4gMzA3Olx0XHRcdG1hY19wa3QtXHUwMDNlc2tiID0gc2tiO1xuIDMwODpcdFx0XHRtYWNfcGt0LVx1MDAzZXNkYXRhID0gc2RhdGE7XG4gMzA5Olx0XHRcdG5ldGRldl9ob2xkKHNkYXRhLVx1MDAzZWRldiwgXHUwMDI2bWFjX3BrdC1cdTAwM2VkZXZfdHJhY2tlciwgR0ZQX0FUT01JQyk7XG4gMzEwOlx0XHRcdHNwaW5fbG9jayhcdTAwMjZzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VyeF9sb2NrKTtcbiAzMTE6XHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZtYWNfcGt0LVx1MDAzZW5vZGUsIFx1MDAyNnNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZXJ4X21hY19jbWRfbGlzdCk7XG4gMzEyOlx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZXJ4X2xvY2spO1xuIDMxMzpcdFx0XHRxdWV1ZV93b3JrKHNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZW1hY193cSwgXHUwMDI2c2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlcnhfbWFjX2NtZF93b3JrKTtcbiAzMTQ6XHRcdFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xuIDMxNTpcdFxuIDMxNjpcdFx0Y2FzZSBJRUVFODAyMTU0X0ZDX1RZUEVfQUNLOlxuIDMxNzpcdFx0XHRnb3RvIGZhaWw7XG4gMzE4Olx0XG4gMzE5Olx0XHRjYXNlIElFRUU4MDIxNTRfRkNfVFlQRV9EQVRBOlxuIDMyMDpcdFx0XHRyZXR1cm4gaWVlZTgwMjE1NF9kZWxpdmVyX3NrYihza2IpO1xuIDMyMTpcdFx0ZGVmYXVsdDpcbiAzMjI6XHRcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcJiMzNDtpZWVlODAyMTU0OiBiYWQgZnJhbWUgcmVjZWl2ZWQgXCYjMzQ7XG4gMzIzOlx0XHRcdFx0XHQgICAgXCYjMzQ7KHR5cGUgPSAlZClcXG5cJiMzNDssIG1hY19jYihza2IpLVx1MDAzZXR5cGUpO1xuIDMyNDpcdFx0XHRnb3RvIGZhaWw7XG4gMzI1Olx0XHR9XG4gMzI2Olx0XG4gMzI3Olx0ZmFpbDpcbiAzMjg6XHRcdGtmcmVlX3NrYihza2IpO1xuIDMyOTpcdFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xuIDMzMDpcdH1cbiAzMzE6XHRcbiAzMzI6XHRzdGF0aWMgdm9pZFxuIDMzMzpcdGllZWU4MDIxNTRfcHJpbnRfYWRkcihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyICphZGRyKVxuIDMzNDpcdHtcbiAzMzU6XHRcdGlmIChhZGRyLVx1MDAzZW1vZGUgPT0gSUVFRTgwMjE1NF9BRERSX05PTkUpIHtcbiAzMzY6XHRcdFx0cHJfZGVidWcoXCYjMzQ7JXMgbm90IHByZXNlbnRcXG5cJiMzNDssIG5hbWUpO1xuIDMzNzpcdFx0XHRyZXR1cm47XG4gMzM4Olx0XHR9XG4gMzM5Olx0XG4gMzQwOlx0XHRwcl9kZWJ1ZyhcJiMzNDslcyBQQU4gSUQ6ICUwNHhcXG5cJiMzNDssIG5hbWUsIGxlMTZfdG9fY3B1KGFkZHItXHUwMDNlcGFuX2lkKSk7XG4gMzQxOlx0XHRpZiAoYWRkci1cdTAwM2Vtb2RlID09IElFRUU4MDIxNTRfQUREUl9TSE9SVCkge1xuIDM0MjpcdFx0XHRwcl9kZWJ1ZyhcJiMzNDslcyBpcyBzaG9ydDogJTA0eFxcblwmIzM0OywgbmFtZSxcbiAzNDM6XHRcdFx0XHQgbGUxNl90b19jcHUoYWRkci1cdTAwM2VzaG9ydF9hZGRyKSk7XG4gMzQ0Olx0XHR9IGVsc2Uge1xuIDM0NTpcdFx0XHR1NjQgaHcgPSBzd2FiNjQoKF9fZm9yY2UgdTY0KWFkZHItXHUwMDNlZXh0ZW5kZWRfYWRkcik7XG4gMzQ2Olx0XG4gMzQ3Olx0XHRcdHByX2RlYnVnKFwmIzM0OyVzIGlzIGhhcmR3YXJlOiAlOHBoQ1xcblwmIzM0OywgbmFtZSwgXHUwMDI2aHcpO1xuIDM0ODpcdFx0fVxuIDM0OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzMyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBNQUM4MDIxNTQgUmVjZWl2ZSBQYXRoKioKCkFscmlnaHQsIHRpbWUgdG8gdW5kZXJzdGFuZCB0aGUgcmVjZWl2ZSBwcm9jZXNzIGZvciBtYWM4MDIxNTQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGNvbnRleHQgb2YgYGllZWU4MDIxNTRfc3ViaWZfZnJhbWVgLCB0aGF0JiMzOTtzIHRoZSBrZXkgZW50cnkgcG9pbnQuIFRoYXQgbGlrZWx5IGhhcyBhbGwgdGhlIHNwZWNpZmljcyBvZiB0aGUgaGFyZHdhcmUgYWJzdHJhY3Rpb24gYW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoZSBzdWJpbnRlcmZhY2UgbGV2ZWwuIFRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJ4oCZbGwgc3RhcnQgYnkgdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggZnJvbSB0aGUgYHJ4LmNgIGZpbGUuIEkmIzM5O2xsIHJlYWQgYmFja3dhcmRzIGluIHRoYXQgZmlsZSwgbG9va2luZyBmb3IgdGhlIGluaXRpYWwgY2FsbCwgYW5kIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9uIGNhbGxzIGFuZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIExldCYjMzk7cyBzZWUgaG93IHRoZSBNQUMgbGF5ZXIgcmVjZWl2ZXMgdGhlIGluY29taW5nIGZyYW1lcyBhbmQgcGFzc2VzIHRoZW0gdXAgdGhlIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjE1NC9yeC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdC8qXG4gICAzOlx0ICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgU2llbWVucyBBR1xuICAgNDpcdCAqXG4gICA1Olx0ICogV3JpdHRlbiBieTpcbiAgIDY6XHQgKiBQYXZlbCBTbW9sZW5za2l5IFx1MDAzY3BhdmVsLnNtb2xlbnNraXlAZ21haWwuY29tXHUwMDNlXG4gICA3Olx0ICogTWF4aW0gR29yYmFjaHlvdiBcdTAwM2NtYXhpbS5nb3JiYWNoZXZAc2llbWVucy5jb21cdTAwM2VcbiAgIDg6XHQgKiBEbWl0cnkgRXJlbWluLVNvbGVuaWtvdiBcdTAwM2NkYmFyeXNoa292QGdtYWlsLmNvbVx1MDAzZVxuICAgOTpcdCAqIEFsZXhhbmRlciBTbWlybm92IFx1MDAzY2FsZXguYmx1ZXNtYW4uc21pcm5vdkBnbWFpbC5jb21cdTAwM2VcbiAgMTA6XHQgKi9cbiAgMTE6XHRcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9jcmMtY2NpdHQuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4gIDE3Olx0XG4gIDE4Olx0I2luY2x1ZGUgXHUwMDNjbmV0L21hYzgwMjE1NC5oXHUwMDNlXG4gIDE5Olx0I2luY2x1ZGUgXHUwMDNjbmV0L2llZWU4MDIxNTRfbmV0ZGV2LmhcdTAwM2VcbiAgMjA6XHQjaW5jbHVkZSBcdTAwM2NuZXQvbmw4MDIxNTQuaFx1MDAzZVxuICAyMTpcdFxuICAyMjpcdCNpbmNsdWRlIFwmIzM0O2llZWU4MDIxNTRfaS5oXCYjMzQ7XG4gIDIzOlx0XG4gIDI0Olx0c3RhdGljIGludCBpZWVlODAyMTU0X2RlbGl2ZXJfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4gIDI1Olx0e1xuICAyNjpcdFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZO1xuICAyNzpcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSUVFRTgwMjE1NCk7XG4gIDI4Olx0XG4gIDI5Olx0XHRyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTtcbiAgMzA6XHR9XG4gIDMxOlx0XG4gIDMyOlx0dm9pZCBtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gIDMzOlx0e1xuICAzNDpcdFx0c3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsID1cbiAgMzU6XHRcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsLCByeF9iZWFjb25fd29yayk7XG4gIDM2Olx0XHRzdHJ1Y3QgY2ZnODAyMTU0X21hY19wa3QgKm1hY19wa3Q7XG4gIDM3Olx0XG4gIDM4Olx0XHRmb3IgKDs7KSB7XG4gIDM5Olx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VyeF9sb2NrKTtcbiAgNDA6XHRcdFx0bWFjX3BrdCA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcdTAwMjZsb2NhbC1cdTAwM2VyeF9iZWFjb25fbGlzdCxcbiAgNDE6XHRcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgY2ZnODAyMTU0X21hY19wa3QsIG5vZGUpO1xuICA0MjpcdFx0XHRpZiAobWFjX3BrdClcbiAgNDM6XHRcdFx0XHRsaXN0X2RlbChcdTAwMjZtYWNfcGt0LVx1MDAzZW5vZGUpO1xuICA0NDpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VyeF9sb2NrKTtcbiAgNDU6XHRcdFx0aWYgKCFtYWNfcGt0KVxuICA0NjpcdFx0XHRcdGJyZWFrO1xuICA0NzpcdFxuICA0ODpcdFx0XHRtYWM4MDIxNTRfcHJvY2Vzc19iZWFjb24obG9jYWwsIG1hY19wa3QtXHUwMDNlc2tiLFxuICA0OTpcdFx0XHRcdFx0XHQgbWFjX3BrdC1cdTAwM2VwYWdlLCBtYWNfcGt0LVx1MDAzZWNoYW5uZWwpO1xuICA1MDpcdFxuICA1MTpcdFx0XHRuZXRkZXZfcHV0KG1hY19wa3QtXHUwMDNlc2RhdGEtXHUwMDNlZGV2LCBcdTAwMjZtYWNfcGt0LVx1MDAzZWRldl90cmFja2VyKTtcbiAgNTI6XHRcdFx0a2ZyZWVfc2tiKG1hY19wa3QtXHUwMDNlc2tiKTtcbiAgNTM6XHRcdFx0a2ZyZWUobWFjX3BrdCk7XG4gIDU0Olx0XHR9XG4gIDU1Olx0fVxuICA1NjpcdFxuICA1NzpcdHN0YXRpYyBib29sIG1hYzgwMjE1NF9zaG91bGRfYW5zd2VyX2JlYWNvbl9yZXEoc3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsKVxuICA1ODpcdHtcbiAgNTk6XHRcdHN0cnVjdCBjZmc4MDIxNTRfYmVhY29uX3JlcXVlc3QgKmJlYWNvbl9yZXE7XG4gIDYwOlx0XHR1bnNpZ25lZCBpbnQgaW50ZXJ2YWw7XG4gIDYxOlx0XG4gIDYyOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gIDYzOlx0XHRiZWFjb25fcmVxID0gcmN1X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWJlYWNvbl9yZXEpO1xuICA2NDpcdFx0aWYgKCFiZWFjb25fcmVxKSB7XG4gIDY1Olx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuICA2NjpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gIDY3Olx0XHR9XG4gIDY4Olx0XG4gIDY5Olx0XHRpbnRlcnZhbCA9IGJlYWNvbl9yZXEtXHUwMDNlaW50ZXJ2YWw7XG4gIDcwOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAgNzE6XHRcbiAgNzI6XHRcdGlmICghbWFjODAyMTU0X2lzX2JlYWNvbmluZyhsb2NhbCkpXG4gIDczOlx0XHRcdHJldHVybiBmYWxzZTtcbiAgNzQ6XHRcbiAgNzU6XHRcdHJldHVybiBpbnRlcnZhbCA9PSBJRUVFODAyMTU0X0FDVElWRV9TQ0FOX0RVUkFUSU9OO1xuICA3NjpcdH1cbiAgNzc6XHRcbiAgNzg6XHRzdGF0aWMgdm9pZCBtYWM4MDIxNTRfcnhfbWFjX2NtZChzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwsXG4gIDc5Olx0XHRcdFx0XHQgc3RydWN0IGNmZzgwMjE1NF9tYWNfcGt0ICptYWNfcGt0KVxuICA4MDpcdHtcbiAgODE6XHRcdHU4IG1hY19jbWQ7XG4gIDgyOlx0XHRpbnQgcmM7XG4gIDgzOlx0XG4gIDg0Olx0XHRyYyA9IGllZWU4MDIxNTRfZ2V0X21hY19jbWQobWFjX3BrdC1cdTAwM2Vza2IsIFx1MDAyNm1hY19jbWQpO1xuICA4NTpcdFx0aWYgKHJjKVxuICA4NjpcdFx0XHRyZXR1cm47XG4gIDg3Olx0XG4gIDg4Olx0XHRzd2l0Y2ggKG1hY19jbWQpIHtcbiAgODk6XHRcdGNhc2UgSUVFRTgwMjE1NF9DTURfQkVBQ09OX1JFUTpcbiAgOTA6XHRcdFx0ZGV2X2RiZyhcdTAwMjZtYWNfcGt0LVx1MDAzZXNkYXRhLVx1MDAzZWRldi1cdTAwM2VkZXYsIFwmIzM0O3Byb2Nlc3NpbmcgQkVBQ09OIFJFUVxcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk3NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIEJlYWNvbiBhbmQgTUFDIENvbW1hbmQgUHJvY2Vzc2luZyBpbiB0aGUgODAyLjE1LjQgU3RhY2sqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgYmVhY29uIGFuZCBNQUMgY29tbWFuZCByZWNlcHRpb24gYXJlIGhhbmRsZWQgaW4gdGhlIDgwMi4xNS40IGRyaXZlci4gRmlyc3QsIGBtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlcmAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIHRoZSBwcm9jZXNzaW5nIG9mIGJlYWNvbiBmcmFtZXMuIEZyb20gdGhlIGNvZGUgc25pcHBldCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgY2FsbHMgYG1hYzgwMjE1NF9wcm9jZXNzX2JlYWNvbmAsIHBhc3NlcyB0aGUgcmVsZXZhbnQgcGFja2V0IGRhdGEg4oCTIHRoZSBgc2tiYCwgcGFnZSwgYW5kIGNoYW5uZWwg4oCTIGFuZCBnZXRzIHRvIHdvcmsuIEZvbGxvd2luZyB0aGF0LCBpdCBuZWF0bHkgY2xlYW5zIHVwIHRoZSBtZW1vcnk6IEl0IHJlbGVhc2VzIHRoZSBuZXR3b3JrIGRldmljZSByZWZlcmVuY2Ugd2l0aCBgbmV0ZGV2X3B1dGAsIGZyZWVzIHRoZSBgc2tiYCB3aXRoIGBrZnJlZV9za2JgLCBhbmQgZmluYWxseSBmcmVlcyB0aGUgYWxsb2NhdGVkIGBtYWNfcGt0YCBpdHNlbGYuIFRoaXMgc2hvd3MgYSB3ZWxsLWRlZmluZWQgcHJvY2VzcyB0byBtZSwgZW5zdXJpbmcgcHJvcGVyIHJlc291cmNlIG1hbmFnZW1lbnQgYWZ0ZXIgcHJvY2Vzc2luZy4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IE1BQyBjb21tYW5kcyBhcmUgaGFuZGxlZCwgc28gSSYjMzk7bGwgbmVlZCB0byB0dXJuIG15IGF0dGVudGlvbiB0byB0aGUgYG1hYzgwMjE1NF9yeF9tYWNfY21kX3dvcmtlcmAgZnVuY3Rpb24uIEkgd2lsbCBuZWVkIHRvIGNvbnN1bHQgdGhlIGNvZGUgZnJvbSBsaW5lcyA5MCB0byAyMDAgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjE1NC9yeC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5MTpcdFx0XHRpZiAoIW1hYzgwMjE1NF9zaG91bGRfYW5zd2VyX2JlYWNvbl9yZXEobG9jYWwpKVxuICA5MjpcdFx0XHRcdGJyZWFrO1xuICA5MzpcdFxuICA5NDpcdFx0XHRxdWV1ZV9kZWxheWVkX3dvcmsobG9jYWwtXHUwMDNlbWFjX3dxLCBcdTAwMjZsb2NhbC1cdTAwM2ViZWFjb25fd29yaywgMCk7XG4gIDk1Olx0XHRcdGJyZWFrO1xuICA5NjpcdFxuICA5NzpcdFx0Y2FzZSBJRUVFODAyMTU0X0NNRF9BU1NPQ0lBVElPTl9SRVNQOlxuICA5ODpcdFx0XHRkZXZfZGJnKFx1MDAyNm1hY19wa3QtXHUwMDNlc2RhdGEtXHUwMDNlZGV2LVx1MDAzZWRldiwgXCYjMzQ7cHJvY2Vzc2luZyBBU1NPQyBSRVNQXFxuXCYjMzQ7KTtcbiAgOTk6XHRcdFx0aWYgKCFtYWM4MDIxNTRfaXNfYXNzb2NpYXRpbmcobG9jYWwpKVxuIDEwMDpcdFx0XHRcdGJyZWFrO1xuIDEwMTpcdFxuIDEwMjpcdFx0XHRtYWM4MDIxNTRfcHJvY2Vzc19hc3NvY2lhdGlvbl9yZXNwKG1hY19wa3QtXHUwMDNlc2RhdGEsIG1hY19wa3QtXHUwMDNlc2tiKTtcbiAxMDM6XHRcdFx0YnJlYWs7XG4gMTA0Olx0XG4gMTA1Olx0XHRjYXNlIElFRUU4MDIxNTRfQ01EX0FTU09DSUFUSU9OX1JFUTpcbiAxMDY6XHRcdFx0ZGV2X2RiZyhcdTAwMjZtYWNfcGt0LVx1MDAzZXNkYXRhLVx1MDAzZWRldi1cdTAwM2VkZXYsIFwmIzM0O3Byb2Nlc3NpbmcgQVNTT0MgUkVRXFxuXCYjMzQ7KTtcbiAxMDc6XHRcdFx0aWYgKG1hY19wa3QtXHUwMDNlc2RhdGEtXHUwMDNld3Bhbl9kZXYuaWZ0eXBlICE9IE5MODAyMTU0X0lGVFlQRV9DT09SRClcbiAxMDg6XHRcdFx0XHRicmVhaztcbiAxMDk6XHRcbiAxMTA6XHRcdFx0bWFjODAyMTU0X3Byb2Nlc3NfYXNzb2NpYXRpb25fcmVxKG1hY19wa3QtXHUwMDNlc2RhdGEsIG1hY19wa3QtXHUwMDNlc2tiKTtcbiAxMTE6XHRcdFx0YnJlYWs7XG4gMTEyOlx0XG4gMTEzOlx0XHRjYXNlIElFRUU4MDIxNTRfQ01EX0RJU0FTU09DSUFUSU9OX05PVElGWTpcbiAxMTQ6XHRcdFx0ZGV2X2RiZyhcdTAwMjZtYWNfcGt0LVx1MDAzZXNkYXRhLVx1MDAzZWRldi1cdTAwM2VkZXYsIFwmIzM0O3Byb2Nlc3NpbmcgRElTQVNTT0MgTk9USUZcXG5cJiMzNDspO1xuIDExNTpcdFx0XHRpZiAobWFjX3BrdC1cdTAwM2VzZGF0YS1cdTAwM2V3cGFuX2Rldi5pZnR5cGUgIT0gTkw4MDIxNTRfSUZUWVBFX0NPT1JEKVxuIDExNjpcdFx0XHRcdGJyZWFrO1xuIDExNzpcdFxuIDExODpcdFx0XHRtYWM4MDIxNTRfcHJvY2Vzc19kaXNhc3NvY2lhdGlvbl9ub3RpZihtYWNfcGt0LVx1MDAzZXNkYXRhLCBtYWNfcGt0LVx1MDAzZXNrYik7XG4gMTE5Olx0XHRcdGJyZWFrO1xuIDEyMDpcdFxuIDEyMTpcdFx0ZGVmYXVsdDpcbiAxMjI6XHRcdFx0YnJlYWs7XG4gMTIzOlx0XHR9XG4gMTI0Olx0fVxuIDEyNTpcdFxuIDEyNjpcdHZvaWQgbWFjODAyMTU0X3J4X21hY19jbWRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiAxMjc6XHR7XG4gMTI4Olx0XHRzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwgPVxuIDEyOTpcdFx0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxNTRfbG9jYWwsIHJ4X21hY19jbWRfd29yayk7XG4gMTMwOlx0XHRzdHJ1Y3QgY2ZnODAyMTU0X21hY19wa3QgKm1hY19wa3Q7XG4gMTMxOlx0XG4gMTMyOlx0XHRmb3IgKDs7KSB7XG4gMTMzOlx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VyeF9sb2NrKTtcbiAxMzQ6XHRcdFx0bWFjX3BrdCA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcdTAwMjZsb2NhbC1cdTAwM2VyeF9tYWNfY21kX2xpc3QsXG4gMTM1Olx0XHRcdFx0XHRcdFx0ICAgc3RydWN0IGNmZzgwMjE1NF9tYWNfcGt0LCBub2RlKTtcbiAxMzY6XHRcdFx0aWYgKG1hY19wa3QpXG4gMTM3Olx0XHRcdFx0bGlzdF9kZWwoXHUwMDI2bWFjX3BrdC1cdTAwM2Vub2RlKTtcbiAxMzg6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlcnhfbG9jayk7XG4gMTM5Olx0XHRcdGlmICghbWFjX3BrdClcbiAxNDA6XHRcdFx0XHRicmVhaztcbiAxNDE6XHRcbiAxNDI6XHRcdFx0LyogQSBzdG9wcGVkIGludGVyZmFjZSBjYW5ub3QgdHJhbnNtaXQ7IHNraXBwaW5nIGF2b2lkcyBhXG4gMTQzOlx0XHRcdCAqIG5lZWRsZXNzIGFzc29jaWF0aW9uIHJlc3BvbnNlIChhbmQgdGhlICFuZXRpZl9ydW5uaW5nKClcbiAxNDQ6XHRcdFx0ICogd2FybmluZyBpdCB3b3VsZCB0cmlwKSBkdXJpbmcgdGVhcmRvd24uIFRoZSBiZWFjb24gd29ya2VyXG4gMTQ1Olx0XHRcdCAqIG5lZWRzIG5vIHN1Y2ggY2hlY2sgYXMgaXQgbmV2ZXIgdHJhbnNtaXRzLlxuIDE0NjpcdFx0XHQgKi9cbiAxNDc6XHRcdFx0aWYgKGllZWU4MDIxNTRfc2RhdGFfcnVubmluZyhtYWNfcGt0LVx1MDAzZXNkYXRhKSlcbiAxNDg6XHRcdFx0XHRtYWM4MDIxNTRfcnhfbWFjX2NtZChsb2NhbCwgbWFjX3BrdCk7XG4gMTQ5Olx0XG4gMTUwOlx0XHRcdG5ldGRldl9wdXQobWFjX3BrdC1cdTAwM2VzZGF0YS1cdTAwM2VkZXYsIFx1MDAyNm1hY19wa3QtXHUwMDNlZGV2X3RyYWNrZXIpO1xuIDE1MTpcdFx0XHRrZnJlZV9za2IobWFjX3BrdC1cdTAwM2Vza2IpO1xuIDE1MjpcdFx0XHRrZnJlZShtYWNfcGt0KTtcbiAxNTM6XHRcdH1cbiAxNTQ6XHR9XG4gMTU1Olx0XG4gMTU2Olx0LyoqXG4gMTU3Olx0ICogbWFjODAyMTU0X2ZsdXNoX2xpc3QgLSBmcmVlIHF1ZXVlZCBSWCBmcmFtZXMgb24gQGxpc3RcbiAxNTg6XHQgKiBAbGlzdDogcnhfYmVhY29uX2xpc3Qgb3IgcnhfbWFjX2NtZF9saXN0XG4gMTU5Olx0ICogQHNkYXRhOiBvbmx5IGZyZWUgZnJhbWVzIHJlY2VpdmVkIG9uIHRoaXMgaW50ZXJmYWNlLCBvciAlTlVMTCBmb3IgYWxsXG4gMTYwOlx0ICpcbiAxNjE6XHQgKiBFYWNoIGZyYW1lIHBpbnMgdGhlIG5ldF9kZXZpY2UgaXQgd2FzIHJlY2VpdmVkIG9uICh2aWEgbmV0ZGV2X2hvbGQoKSksXG4gMTYyOlx0ICogc28gcmVsZWFzZSB0aGF0IHJlZmVyZW5jZSBhcyB0aGUgZnJhbWUgaXMgZHJvcHBlZC4gQ2FsbGVyIG11c3QgaG9sZFxuIDE2MzpcdCAqIGxvY2FsLVx1MDAzZXJ4X2xvY2suXG4gMTY0Olx0ICovXG4gMTY1Olx0dm9pZCBtYWM4MDIxNTRfZmx1c2hfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuIDE2NjpcdFx0XHRcdCAgc3RydWN0IGllZWU4MDIxNTRfc3ViX2lmX2RhdGEgKnNkYXRhKVxuIDE2NzpcdHtcbiAxNjg6XHRcdHN0cnVjdCBjZmc4MDIxNTRfbWFjX3BrdCAqbWFjX3BrdCwgKnRtcDtcbiAxNjk6XHRcbiAxNzA6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtYWNfcGt0LCB0bXAsIGxpc3QsIG5vZGUpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODM3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSUVFRSA4MDIuMTUuNCBGcmFtZSBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdoYXQgaGFwcGVucyB3aGVuIHRoZSBmcmFtZSB0eXBlIGlzIGVpdGhlciBhIGJlYWNvbiBvciBhIE1BQyBjb21tYW5kLiBUaGUgY29kZSBzbmlwcGV0IG1lbnRpb25zIGFuIGludGVyZXN0aW5nIGJlaGF2aW9yOiBpdCBhcHBlYXJzIHRoYXQgYHNrYl9nZXQoc2tiKWAgd2FzIHByZXZpb3VzbHkgdXNlZCB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gVGhlIGZ1bmN0aW9uIHJldHVybmVkIGBORVRfUlhfU1VDQ0VTU2AgdW5kZXIgdGhlc2UgY29uZGl0aW9ucywgd2l0aG91dCBmcmVlaW5nIHRoZSBTS0IuIE5vdywgdGhhdCYjMzk7cyBhIHJlZCBmbGFnLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpczogd2hvIGFjdHVhbGx5IG93bnMgdGhlIFNLQiwgdGhlIHBhY2tldCBidWZmZXIsIGFmdGVyIHRoaXMgcG9pbnQ/IFRoZSBvcmlnaW5hbCBjYWxsZXIgbGlrZWx5IGRvZXNuJiMzOTt0IGFueSBtb3JlLCBzbyBzb21lb25lIGVsc2UgaGFzIHRvIGZyZWUgaXQuIFRoZSBjb2RlIHNlZW1zIHRvIGFzc3VtZSB0aGF0LgoKVGhlIGZhY3QgdGhhdCBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZWAgb25seSBmcmVlcyB0aGUgU0tCIGluIHRoZSBgZmFpbDpgIHBhdGggaXMgYSBjbHVlLiBUaGlzIGRpc2NyZXBhbmN5IGlzIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgYW5kIGlkZW50aWZ5IGFsbCB0aGUgY2FsbGVycyBvZiBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZWAgdG8gdW5kZXJzdGFuZCB0aGUgb3duZXJzaGlwIGFuZCB0aGUgZXhwZWN0ZWQgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuIFRoYXQmIzM5O3MgdGhlIGtleSB0byBmaWd1cmluZyBvdXQgaWYgdGhpcyBpcyBjb3JyZWN0IGFuZCBlbnN1cmluZyB0aGF0IHRoZSBTS0IgaXMgcHJvcGVybHkgcmVsZWFzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2llZWU4MDIxNTRfc3ViaWZfZnJhbWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjE1NC9yeC5jPTIwMT1zdGF0aWMgaW50XG5uZXQvbWFjODAyMTU0L3J4LmM6MjAyOmllZWU4MDIxNTRfc3ViaWZfZnJhbWUoc3RydWN0IGllZWU4MDIxNTRfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjE1NC9yeC5jLTIwMy1cdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTU0X2hkciAqaGRyKVxuLS1cbm5ldC9tYWM4MDIxNTQvcnguYz00MTE9X19pZWVlODAyMTU0X3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxNTQvcnguYy00NDEtXHRcdFx0c2tiMi1cdTAwM2VkZXYgPSBzZGF0YS1cdTAwM2VkZXY7XG5uZXQvbWFjODAyMTU0L3J4LmM6NDQyOlx0XHRcdGllZWU4MDIxNTRfc3ViaWZfZnJhbWUoc2RhdGEsIHNrYjIsIFx1MDAyNmhkcik7XG5uZXQvbWFjODAyMTU0L3J4LmMtNDQzLVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1OTMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIE1BQyBMYXllciBSZWNlaXZlIFBhdGgqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHJlY2VpdmUgcGF0aCB3aXRoaW4gdGhlIE1BQyA4MDIuMTUuNCBsYXllciwgc3BlY2lmaWNhbGx5IGluIGBuZXQvbWFjODAyMTU0L3J4LmNgLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgbG9naWMgYXJvdW5kIGxpbmUgNDExLiBJIGhhdmUgYSBodW5jaCBhYm91dCBhIHBvdGVudGlhbCBpc3N1ZSByZWxhdGVkIHRvIFtpbnNlcnQgeW91ciBmaWVsZCYjMzk7cyByZWxldmFudCB0ZWNobmljYWwgYXNwZWN0IGhlcmUgLSBlLmcuLCBmcmFtZSBmaWx0ZXJpbmcsIGFkZHJlc3MgbWF0Y2hpbmcsIEFDSyBwcm9jZXNzaW5nLCBldGMuXS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY3J1Y2lhbCBjb2RlIHJlc3BvbnNpYmxlIGZvciBbZGVzY3JpYmUgdGhlIGNvZGUmIzM5O3MgZXhwZWN0ZWQgZnVuY3Rpb25dLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBzcGVjaWZpYyBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIHRoYXQgdGFrZSBwbGFjZSBhZnRlciBhIHZhbGlkIDgwMi4xNS40IGZyYW1lIGlzIHJlY2VpdmVkIGF0IHRoZSBwaHlzaWNhbCBsYXllciwgaW5jbHVkaW5nIHRoaW5ncyBsaWtlIGNoZWNraW5nIGZyYW1lIHZhbGlkaXR5LCBmaWx0ZXJpbmcgYnkgYWRkcmVzc2luZyBvciBNQUMgY29tbWFuZHMsIGRldGVybWluaW5nIHdoaWNoIHVwcGVyIGxheWVyIGVudGl0eSBnZXRzIHRoZSBmcmFtZSwgYW5kIGhhbmRsaW5nIGFueSBhc3NvY2lhdGVkIGFja25vd2xlZGdlbWVudHMuIEkgd2FudCB0byBzZWUgaWYgdGhlIGltcGxlbWVudGF0aW9uIHRha2VzIFtyZWxldmFudCB0ZWNobmljYWwgZGV0YWlsLCBzdWNoIGFzIGludGVycnVwdCBoYW5kbGluZywgY29udGV4dCBzd2l0Y2hpbmcsIHF1ZXVlaW5nLCBETUEgY29uZmlndXJhdGlvbiwgZXRjLl0gaW50byBhY2NvdW50LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBbc3BlY2lmaWMgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBvciBmdW5jdGlvbnNdIGFyZSB1c2VkIGhlcmUgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgY29kZSB3b3JrcyBhbmQgc2VlIGlmIG15IGh1bmNoIGFib3V0IHRoZSBwcm9ibGVtIGhvbGRzIHVwLiBJIGJldCB0aGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBiaXQgaGFwcGVucyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTU0L3J4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQxMDpcdHN0YXRpYyB2b2lkXG4gNDExOlx0X19pZWVlODAyMTU0X3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsLFxuIDQxMjpcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4gNDEzOlx0e1xuIDQxNDpcdFx0aW50IHJldDtcbiA0MTU6XHRcdHN0cnVjdCBpZWVlODAyMTU0X3N1Yl9pZl9kYXRhICpzZGF0YTtcbiA0MTY6XHRcdHN0cnVjdCBpZWVlODAyMTU0X2hkciBoZHI7XG4gNDE3Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjtcbiA0MTg6XHRcbiA0MTk6XHRcdHJldCA9IGllZWU4MDIxNTRfcGFyc2VfZnJhbWVfc3RhcnQoc2tiLCBcdTAwMjZoZHIpO1xuIDQyMDpcdFx0aWYgKHJldCkge1xuIDQyMTpcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtnb3QgaW52YWxpZCBmcmFtZVxcblwmIzM0Oyk7XG4gNDIyOlx0XHRcdHJldHVybjtcbiA0MjM6XHRcdH1cbiA0MjQ6XHRcbiA0MjU6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG4gNDI2Olx0XHRcdGlmIChzZGF0YS1cdTAwM2V3cGFuX2Rldi5pZnR5cGUgPT0gTkw4MDIxNTRfSUZUWVBFX01PTklUT1IpXG4gNDI3Olx0XHRcdFx0Y29udGludWU7XG4gNDI4Olx0XG4gNDI5Olx0XHRcdGlmICghaWVlZTgwMjE1NF9zZGF0YV9ydW5uaW5nKHNkYXRhKSlcbiA0MzA6XHRcdFx0XHRjb250aW51ZTtcbiA0MzE6XHRcbiA0MzI6XHRcdFx0LyogRG8gbm90IGRlbGl2ZXIgcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2VzIGV4cGVjdGluZ1xuIDQzMzpcdFx0XHQgKiBBQUNLPTEgaWYgdGhlIGFkZHJlc3MgZmlsdGVycyB3aGVyZSBkaXNhYmxlZC5cbiA0MzQ6XHRcdFx0ICovXG4gNDM1Olx0XHRcdGlmIChsb2NhbC1cdTAwM2Vody5waHktXHUwMDNlZmlsdGVyaW5nIFx1MDAzYyBJRUVFODAyMTU0X0ZJTFRFUklOR180X0ZSQU1FX0ZJRUxEUyBcdTAwMjZcdTAwMjZcbiA0MzY6XHRcdFx0ICAgIHNkYXRhLVx1MDAzZXJlcXVpcmVkX2ZpbHRlcmluZyA9PSBJRUVFODAyMTU0X0ZJTFRFUklOR180X0ZSQU1FX0ZJRUxEUylcbiA0Mzc6XHRcdFx0XHRjb250aW51ZTtcbiA0Mzg6XHRcbiA0Mzk6XHRcdFx0c2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xuIDQ0MDpcdFx0XHRpZiAoc2tiMikge1xuIDQ0MTpcdFx0XHRcdHNrYjItXHUwMDNlZGV2ID0gc2RhdGEtXHUwMDNlZGV2O1xuIDQ0MjpcdFx0XHRcdGllZWU4MDIxNTRfc3ViaWZfZnJhbWUoc2RhdGEsIHNrYjIsIFx1MDAyNmhkcik7XG4gNDQzOlx0XHRcdH1cbiA0NDQ6XHRcdH1cbiA0NDU6XHR9XG4gNDQ2Olx0XG4gNDQ3Olx0c3RhdGljIHZvaWRcbiA0NDg6XHRpZWVlODAyMTU0X21vbml0b3JzX3J4KHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA0NDk6XHR7XG4gNDUwOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjtcbiA0NTE6XHRcdHN0cnVjdCBpZWVlODAyMTU0X3N1Yl9pZl9kYXRhICpzZGF0YTtcbiA0NTI6XHRcbiA0NTM6XHRcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4gNDU0Olx0XHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XG4gNDU1Olx0XHRza2ItXHUwMDNlcGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUO1xuIDQ1NjpcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSUVFRTgwMjE1NCk7XG4gNDU3Olx0XG4gNDU4Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xuIDQ1OTpcdFx0XHRpZiAoc2RhdGEtXHUwMDNld3Bhbl9kZXYuaWZ0eXBlICE9IE5MODAyMTU0X0lGVFlQRV9NT05JVE9SKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgzMAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgU0tCIFJlZmNvdW50IExlYWsgaW4gSUVFRSA4MDIuMTUuNCBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBfX2llZWU4MDIxNTRfcnhfaGFuZGxlX3BhY2tldGAgZnVuY3Rpb24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBpdCYjMzk7cyBjbG9uaW5nIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgdG8gYHNrYjJgLCBpbmNyZWFzaW5nIGl0cyByZWZlcmVuY2UgY291bnQgdG8gMSwgYW5kIHRoZW4gcGFzc2luZyBpdCB0byBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZWAuIFRoaXMgaXMgc3RhbmRhcmQsIGJ1dCB0aGUgZm9sbG93aW5nIGxvZ2ljIGluIGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lYCBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nIGFuZCBjb25jZXJuaW5nLgoKSWYgdGhlcmUmIzM5O3MgYSBmYWlsdXJlIGluIGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lYCwgdGhlIGBza2JgIGlzIGZyZWVkLiBUaGF0JiMzOTtzIGV4cGVjdGVkLiBIb3dldmVyLCB3aGVuIGl0JiMzOTtzIGEgREFUQSBmcmFtZSwgaXQmIzM5O3MgcGFzc2VkIGRpcmVjdGx5IHRvIGBuZXRpZl9yZWNlaXZlX3NrYmAgdmlhIGBpZWVlODAyMTU0X2RlbGl2ZXJfc2tiYCwgYW5kIHRoYXQmIzM5O3MgYWxzbyBmaW5lLCB3aGljaCBpcyB0aGUgZXhwZWN0ZWQgaGFwcHkgcGF0aC4gVGhlIHBvdGVudGlhbCBpc3N1ZSBhcmlzZXMgd2l0aCBCRUFDT04gb3IgTUFDX0NNRCBmcmFtZXMuIFByZXZpb3VzbHksIGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lYCB3b3VsZCBjYWxsIGBza2JfZ2V0KHNrYilgIGJlZm9yZSByZXR1cm5pbmcgYE5FVF9SWF9TVUNDRVNTYC4gVGhpcyBtZWFudCBgc2tiMmAgKHRoZSBjbG9uZWQgYnVmZmVyKSBub3cgaGFkIGEgcmVmY291bnQgb2YgMiEgVGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhhdCBvbmx5IGEgc2luZ2xlIGBrZnJlZV9za2JgIHdhcyBwZXJmb3JtZWQgbGF0ZXIgaW4gdGhlIGBtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlcmAgb3IgYG1hYzgwMjE1NF9yeF9tYWNfY21kX3dvcmtlcmAuIFRoaXMgcmVwcmVzZW50cyBhIGNsZWFyIFNLQiBtZW1vcnkgbGVhayBiZWNhdXNlIG9uZSBvZiB0aGUgcmVmZXJlbmNlcyB3YXMgbmV2ZXIgcmVsZWFzZWQsIGxlYWRpbmcgdG8gYW4gaW5jcmVhc2luZyBtZW1vcnkgZm9vdHByaW50LgoKVGhlIGZpeCwgbG9naWNhbGx5LCBpcyBzdHJhaWdodGZvcndhcmQuIFJlbW92aW5nIHRoYXQgYHNrYl9nZXQoc2tiKWAgY2FsbCBlbnN1cmVzIHRoYXQgdGhlIGBtYWNfcGt0YCBjb25zdW1lcyB0aGUgY2FsbGVyJiMzOTtzIHJlZmVyZW5jZSB0byBgc2tiYCBhbmQgYXZvaWRzIHRoZSByZWZjb3VudCBtaXNtYXRjaC4gQnkgbm90IHRha2luZyBhbiBhZGRpdGlvbmFsIHJlZmVyZW5jZSwgd2UgZW5zdXJlIHRoYXQgdGhlIGJ1ZmZlciBpcyBmcmVlZCB3aGVuIGl0JiMzOTtzIG5vIGxvbmdlciBuZWVkZWQgaW4gc3Vic2VxdWVudCBwcm9jZXNzaW5nLgoKTm93LCBteSBuZXh0IHRob3VnaHQgaXMgYWJvdXQgcmVhY2hhYmlsaXR5IGFuZCBmdXp6YWJpbGl0eS4gSSBuZWVkIHRvIGFzc2VzcyB3aGV0aGVyIGFuZCBob3cgYG1hYzgwMjE1NGAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHN1Y2ggYXMgdGhvc2UgdXNlZCBieSBRRU1VIG9yIHN5emthbGxlci4gVGhlIHF1ZXN0aW9uIGJvaWxzIGRvd24gdG8gd2hldGhlciBJRUVFIDgwMi4xNS40IGFuZCBgbWFjODAyMTU0YCBhcmUgZW11bGF0ZWQgb3IgdXRpbGl6ZWQgd2l0aGluIHRoZXNlIGVudmlyb25tZW50cy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHNwZWNpZmljIGFyZWFzOiBgZHJpdmVycy9uZXQvaWVlZTgwMjE1NGAsIGBuZXQvbWFjODAyMTU0YCwgYW5kIGFueSB2aXJ0dWFsIGRldmljZXMgbGlrZSBgZmFrZWxiYCwgYG1hYzgwMjE1NF9od3NpbWAsIG9yIGBubDgwMjE1NGAuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhlIGRyaXZlcuKAmXMgb3BlcmF0aW9uIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudCBpcyBlc3NlbnRpYWwgdG8gZXN0YWJsaXNoIHRoZSByaXNrIHByb2ZpbGUgb2YgdGhpcyBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFjODAyMTU0X2h3c2ltJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZz0xMTQ9Y29uZmlnIElFRUU4MDIxNTRfSFdTSU1cbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMTIyLVx0ICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gVG8gZG8gc28gc2F5IE0gaGVyZS5cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzoxMjM6XHQgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgJiMzOTttYWM4MDIxNTRfaHdzaW0mIzM5Oy5cbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX0lFRUU4MDIxNTRfTUNSMjBBKSAmIzQzOz0gbWNyMjBhLm9cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX0lFRUU4MDIxNTRfSFdTSU0pICYjNDM7PSBtYWM4MDIxNTRfaHdzaW0ub1xuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvZmFrZWxiLmM9MjQ0PXN0YXRpYyBfX2luaXQgaW50IGZha2VsYl9pbml0X21vZHVsZSh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvZmFrZWxiLmMtMjQ4LVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9mYWtlbGIuYzoyNDk6XHRwcl93YXJuKFwmIzM0O2Zha2VsYiBkcml2ZXIgaXMgbWFya2VkIGFzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgbWFjODAyMTU0X2h3c2ltIVxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L2Zha2VsYi5jLTI1MC1cbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jLTI0LSNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYzoyNTojaW5jbHVkZSBcJiMzNDttYWM4MDIxNTRfaHdzaW0uaFwmIzM0O1xuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYy0yNi1cbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jPTEwNTI9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWFjODAyMTU0aHdzaW1fZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmMtMTA1NS1cdC5kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jOjEwNTY6XHRcdFx0Lm5hbWUgPSBcJiMzNDttYWM4MDIxNTRfaHdzaW1cJiMzNDssXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jLTEwNTctXHR9LFxuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmM9MTA2MD1zdGF0aWMgX19pbml0IGludCBod3NpbV9pbml0X21vZHVsZSh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmMtMTA2Ny1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmM6MTA2ODpcdG1hYzgwMjE1NGh3c2ltX2RldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoXCYjMzQ7bWFjODAyMTU0X2h3c2ltXCYjMzQ7LFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYy0xMDY5LVx0XHRcdFx0XHRcdFx0ICAgICAtMSwgTlVMTCwgMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzM0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBtYWM4MDIxNTRfaHdzaW0gRnV6emluZyoqCgpPa2F5LCBzbyBgbWFjODAyMTU0X2h3c2ltYC4gVGhhdCYjMzk7cyB0aGUgc2ltdWxhdGVkIDgwMi4xNS40IHJhZGlvIGhhcmR3YXJlIGRyaXZlciBpbiBMaW51eC4gSSBrbm93IHRoaXMsIGl0JiMzOTtzIHByZXR0eSB3ZWxsLWVzdGFibGlzaGVkIG5vdy4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgaG93IGl0JiMzOTtzIGJlaW5nIGFwcHJvYWNoZWQ6IG5ldGxpbmsgYW5kIHN5c2ZzIGZvciBjb250cm9sLCBhbmQgc3BlY2lmaWNhbGx5LCB0aGF0IGBzeXprYWxsZXJgIGlzIHB1dHRpbmcgaXQgdGhyb3VnaCBpdHMgcGFjZXMgd2l0aCBzb21lIGhlYXZ5IGZ1enppbmcuIFRoZSBrZXkgcG9pbnRzIGFyZSB0aGUgdXNlIG9mIGBod3NpbWAsIGNvdXBsZWQgd2l0aCByYXcgc29ja2V0cywgYGFmX2llZWU4MDIxNTRgLCBhbmQgYG5sODAyMTU0YC4gSXQgbWFrZXMgc2Vuc2U7IGhpdHRpbmcgaXQgZnJvbSB0aGVzZSBkaWZmZXJlbnQgYW5nbGVzIHByb3ZpZGVzIGEgbW9yZSB0aG9yb3VnaCB0ZXN0aW5nIHN0cmF0ZWd5LiBJdCYjMzk7cyB0aW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnLCBpdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQzgwMjE1NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxNTQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjE1NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbWFjODAyMTU0L0tjb25maWc6Mjpjb25maWcgTUFDODAyMTU0XG5uZXQvbWFjODAyMTU0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTUuNCBTb2Z0IE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjE1NClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNTgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlIGZvciBtYWM4MDIxNTQ6CgoqKkRpdmluZyBpbnRvIHRoZSA4MDIuMTUuNCBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBtYWM4MDIxNTQgS2NvbmZpZyBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgSUVFRSA4MDIuMTUuNCBNQUMgbGF5ZXIgd2l0aGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgc3R1ZmYgaGVyZTogdGhpbmdzIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBkcml2ZXIsIG9wdGlvbnMgZm9yIGRpZmZlcmVudCBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbnMsIG1heWJlIHNvbWUgY2hvaWNlcyByZWxhdGVkIHRvIHNwZWNpZmljIFBIWXMgKGxpa2UgdGhlIHJhZGlvIHVzZWQpLCBkZWZpbml0ZWx5IHRoaW5ncyBsaWtlIGRhdGEgcmF0ZSBzZWxlY3Rpb24sIGFuZCBwb3RlbnRpYWxseSBjb25maWd1cmF0aW9uIGZvciB2YXJpb3VzIHNlY3VyaXR5IGZlYXR1cmVzIGlmIHN1cHBvcnRlZC4KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcywgdG9vLiBXaGF0IG90aGVyIHN1YnN5c3RlbXMgZG9lcyB0aGlzIHJlbHkgb24/IEFyZSB0aGVyZSBhbnkgcHJlcmVxdWlzaXRlcyBJIG5lZWQgdG8gZW5zdXJlIGFyZSBlbmFibGVkPyBUaGlzIGlzIGNydWNpYWwgZm9yIGNvcnJlY3RseSBjb21waWxpbmcgYW5kIGNvbmZpZ3VyaW5nIGEgc3lzdGVtIHRoYXQgdXNlcyA4MDIuMTUuNC4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBoaWVyYXJjaHkgb2Ygb3B0aW9ucyDigJMgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIgYW5kIGlmIHRoZXJlIGFyZSBhbnkgY29uZmxpY3RpbmcgY2hvaWNlcy4gQW55IG1lbnRpb24gb2YgbXVsdGktUEFOIHN1cHBvcnQgb3IgbWVzaCBuZXR3b3JraW5nIGNhcGFiaWxpdGllcyB3aWxsIGFsc28gYmUgZ29vZCB0byB0YWtlIGEgbG9vayBhdC4KCkkgbmVlZCB0byBzZWUgaWYgaXQgcHJvdmlkZXMgc3VwcG9ydCBmb3IgZGlmZmVyZW50IHN0YW5kYXJkIHJldmlzaW9ucywgZS5nLiA4MDIuMTUuNC0yMDAzIG9yIDgwMi4xNS40LTIwMjAuIEkmIzM5O2xsIGJlIHJlYWxseSBrZWVuIHRvIGRpc2NvdmVyIGlmIHRoZXJlJiMzOTtzIGFueSBtZWNoYW5pc20gZm9yIHNlbGVjdGluZyB0aGUgdW5kZXJseWluZyBkYXRhIGxpbmsgbGF5ZXIgcHJvdG9jb2wsIG9yIGlmIHRoYXQgaXMgc29tZWhvdyBiYWtlZCBpbi4KVGhpcyBmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdG8gdGFpbG9yIHRoaXMgc3BlY2lmaWMgTUFDIGxheWVyIGZvciBvdXIgbmVlZHMuIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGdyYW51bGFyaXR5IG9mIHRoZSBjb250cm9scyBhbmQgd2hhdCBoYXJkd2FyZSBhbmQgUEhZIG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTU0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTUFDODAyMTU0XG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjE1LjQgU29mdCBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxNTQpXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElFRUU4MDIxNTRcbiAgIDU6XHRcdHNlbGVjdCBDUkNfQ0NJVFRcbiAgIDY6XHRcdHNlbGVjdCBDUllQVE9cbiAgIDc6XHRcdHNlbGVjdCBDUllQVE9fQVVUSEVOQ1xuICAgODpcdFx0c2VsZWN0IENSWVBUT19DQ01cbiAgIDk6XHRcdHNlbGVjdCBDUllQVE9fQ1RSXG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPX0FFU1xuICAxMTpcdFx0aGVscFxuICAxMjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBoYXJkd2FyZSBpbmRlcGVuZGVudCBJRUVFIDgwMi4xNS40XG4gIDEzOlx0XHQgIG5ldHdvcmtpbmcgc3RhY2sgZm9yIFNvZnRNQUMgZGV2aWNlcyAodGhlIG9uZXMgaW1wbGVtZW50aW5nXG4gIDE0Olx0XHQgIG9ubHkgUEhZIGxldmVsIG9mIElFRUUgODAyLjE1LjQgc3RhbmRhcmQpLlxuICAxNTpcdFxuICAxNjpcdFx0ICBOb3RlOiB0aGlzIGltcGxlbWVudGF0aW9uIGlzIG5laXRoZXIgY2VydGlmaWVkLCBub3IgZmVhdHVyZVxuICAxNzpcdFx0ICBjb21wbGV0ZSEgQ29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGltcGxlbWVudGF0aW9ucyBoYXNuJiMzOTt0XG4gIDE4Olx0XHQgIGJlZW4gdGVzdGVkIHlldCFcbiAgMTk6XHRcbiAgMjA6XHRcdCAgSWYgeW91IHBsYW4gdG8gdXNlIEhhcmRNQUMgSUVFRSA4MDIuMTUuNCBkZXZpY2VzLCB5b3UgY2FuXG4gIDIxOlx0XHQgIHNheSBOIGhlcmUuIEFsdGVybmF0aXZlbHkgeW91IGNhbiBzYXkgTSB0byBjb21waWxlIGl0IGFzXG4gIDIyOlx0XHQgIG1vZHVsZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5MjMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyB0aGUgSUVFRSA4MDIuMTUuNCBIYXJkd2FyZSBTaW11bGF0aW9uIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgY29uZmlndXJpbmcgc29tZXRoaW5nLCBhbmQgdGhlIElFRUUgODAyLjE1LjQgaGFyZHdhcmUgc2ltdWxhdGlvbiBpcyB0aGUgdGFyZ2V0LiBOYXR1cmFsbHksIEkgd2FudCB0byBjb25maXJtIHRoYXQgd2UmIzM5O3JlIGNvdmVyaW5nIGFsbCBvdXIgYmFzZXMuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIGxvb2sgZm9yIHRoYXQgY29uZmlndXJhdGlvbiB3b3VsZCBiZSBpbiB0aGUgZHJpdmVyIHNvdXJjZSB0cmVlLCBzcGVjaWZpY2FsbHkgdW5kZXIgYGRyaXZlcnMvbmV0L2llZWU4MDIxNTQvYC4gQW5kIHRoZW4sIHdpdGhpbiAqdGhhdCogZGlyZWN0b3J5LCB0aGUgYEtjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIHN0YW5kYXJkIHBsYWNlIGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIHRvIGRlZmluZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYElFRUU4MDIxNTRfSFdTSU1gIGlzIGRlZmluZWQgYW5kIGNvcnJlY3RseSBoYW5kbGVkIHRoZXJlLiBXZSBtaWdodCBhbHNvIG5lZWQgdG8gY2hlY2sgaXRzIGRlcGVuZGVuY2llcywgaXRzIGhlbHAgdGV4dCwgYW5kIGFueXRoaW5nIGVsc2UgcmVsZXZhbnQgdG8gaXRzIGJlaGF2aW9yLiBTbywgbGV0JiMzOTtzIHRha2UgYSBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTEwOlx0XG4gMTExOlx0XHQgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBUbyBkbyBzbywgc2F5IE0gaGVyZS5cbiAxMTI6XHRcdCAgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCAmIzM5O21jcjIwYSYjMzk7LlxuIDExMzpcdFxuIDExNDpcdGNvbmZpZyBJRUVFODAyMTU0X0hXU0lNXG4gMTE1Olx0XHRkZXBlbmRzIG9uIElFRUU4MDIxNTRfRFJJVkVSUyBcdTAwMjZcdTAwMjYgTUFDODAyMTU0XG4gMTE2Olx0XHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxNTRcJiMzNDtcbiAxMTc6XHRcdGhlbHBcbiAxMTg6XHRcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdFxuIDExOTpcdFx0ICBJRUVFIDgwMi4xNS40IG5ldHdvcmtpbmcgc3RhY2sgKG1hYzgwMjE1NCkgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBub3RcbiAxMjA6XHRcdCAgbmVlZGVkIGZvciBub3JtYWwgd3BhbiB1c2FnZSBhbmQgaXMgb25seSBmb3IgdGVzdGluZy5cbiAxMjE6XHRcbiAxMjI6XHRcdCAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIFRvIGRvIHNvIHNheSBNIGhlcmUuXG4gMTIzOlx0XHQgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgJiMzOTttYWM4MDIxNTRfaHdzaW0mIzM5Oy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0ODQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyB0aGUgSUVFRSA4MDIuMTUuNCBDb25maWd1cmF0aW9uKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdC4gTGV0JiMzOTtzIGRpdmUgcmlnaHQgaW50byB0aGUgYG5ldC9pZWVlODAyMTU0L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgdGhlIGNvbmZpZ3VyYWJsZSBvcHRpb25zIGZvciB0aGUgSUVFRSA4MDIuMTUuNCBzdGFjayB3aXRoaW4gdGhlIGJ1aWxkIHN5c3RlbS4gVGhpcyBpcyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIGZpbGUsIHNvIGl0IHdpbGwgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnRzIGZvciB1bmRlcnN0YW5kaW5nIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkLCBkaXNhYmxlZCwgYW5kIGhvdyBldmVyeXRoaW5nIGlzIHN0cnVjdHVyZWQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHRvcC1sZXZlbCBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBhbnkgaW1wb3J0YW50IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzIHRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kIGJlZm9yZSBJIGdvIGFueSBkZWVwZXIuIEkgd2FudCB0byBidWlsZCBhIHF1aWNrIG1lbnRhbCBtb2RlbCBvZiB0aGUgY29uZmlndXJhYmxlIG1vZHVsZXMgYmVmb3JlIHByb2NlZWRpbmcgdG8gdGhlIG5leHQgZGlhZ25vc3RpYyBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pZWVlODAyMTU0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51Y29uZmlnIElFRUU4MDIxNTRcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0lFRUUgU3RkIDgwMi4xNS40IExvdy1SYXRlIFdpcmVsZXNzIFBlcnNvbmFsIEFyZWEgTmV0d29ya3Mgc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0aGVscFxuICAgNTpcdFx0ICBJRUVFIFN0ZCA4MDIuMTUuNCBkZWZpbmVzIGEgbG93IGRhdGEgcmF0ZSwgbG93IHBvd2VyIGFuZCBsb3dcbiAgIDY6XHRcdCAgY29tcGxleGl0eSBzaG9ydCByYW5nZSB3aXJlbGVzcyBwZXJzb25hbCBhcmVhIG5ldHdvcmtzLiBJdCB3YXNcbiAgIDc6XHRcdCAgZGVzaWduZWQgdG8gb3JnYW5pc2UgbmV0d29ya3Mgb2Ygc2Vuc29ycywgc3dpdGNoZXMsIGV0YyBhdXRvbWF0aW9uXG4gICA4Olx0XHQgIGRldmljZXMuIE1heGltdW0gYWxsb3dlZCBkYXRhIHJhdGUgaXMgMjUwIGtiL3MgYW5kIHR5cGljYWwgcGVyc29uYWxcbiAgIDk6XHRcdCAgb3BlcmF0aW5nIHNwYWNlIGFyb3VuZCAxMG0uXG4gIDEwOlx0XG4gIDExOlx0XHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBMUi1XUEFOIHN1cHBvcnQgaW50byB0aGUga2VybmVsIG9yIHNheSBNIHRvXG4gIDEyOlx0XHQgIGNvbXBpbGUgaXQgYXMgbW9kdWxlcy5cbiAgMTM6XHRcbiAgMTQ6XHRpZiBJRUVFODAyMTU0XG4gIDE1Olx0XG4gIDE2Olx0Y29uZmlnIElFRUU4MDIxNTRfTkw4MDIxNTRfRVhQRVJJTUVOVEFMXG4gIDE3Olx0XHRib29sIFwmIzM0O0lFRUUgODAyLjE1LjQgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydFwmIzM0O1xuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBBZGRzIGV4cGVyaW1lbnRhbCBuZXRsaW5rIHN1cHBvcnQgZm9yIG5sODAyMTU0LlxuICAyMDpcdFxuICAyMTpcdGNvbmZpZyBJRUVFODAyMTU0X1NPQ0tFVFxuICAyMjpcdFx0dHJpc3RhdGUgXCYjMzQ7SUVFRSA4MDIuMTUuNCBzb2NrZXQgaW50ZXJmYWNlXCYjMzQ7XG4gIDIzOlx0XHRkZWZhdWx0IHlcbiAgMjQ6XHRcdGhlbHBcbiAgMjU6XHRcdCAgU29ja2V0IGludGVyZmFjZSBmb3IgSUVFRSA4MDIuMTUuNC4gQ29udGFpbnMgREdSQU0gc29ja2V0cyBpbnRlcmZhY2VcbiAgMjY6XHRcdCAgZm9yIDgwMi4xNS40IGRhdGFmcmFtZXMuIEFsc28gUkFXIHNvY2tldCBpbnRlcmZhY2UgdG8gYnVpbGQgTUFDXG4gIDI3Olx0XHQgIGhlYWRlciBmcm9tIHVzZXJzcGFjZS5cbiAgMjg6XHRcbiAgMjk6XHRzb3VyY2UgXCYjMzQ7bmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9LY29uZmlnXCYjMzQ7XG4gIDMwOlx0XG4gIDMxOlx0ZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyMjgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgTUFDODAyMTU0IHJlY2VpdmUgcGF0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhvc2UgUlggZnVuY3Rpb25zIGFyZSB0cmlnZ2VyZWQuIE15IGluaXRpYWwgYXBwcm9hY2ggd2lsbCBiZSB0byBleGFtaW5lIHRoZSBjb2RlIGRpcmVjdGx5IGFuZCBzZWFyY2ggZm9yIHRoZSBrZXkgZW50cnkgcG9pbnRzLiBTbywgSSYjMzk7bGwgc3RhcnQgd2l0aCBhIGBncmVwYCBmb3IgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gSSYjMzk7bSBmb2N1c2luZyBvbiBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZWAsIGBpZWVlODAyMTU0X3J4X2lycXNhZmVgLCBhbmQgYW55IG90aGVyIG9idmlvdXMgZW50cnkgcG9pbnRzIHdpdGhpbiBgbmV0L21hYzgwMjE1NC9yeC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgbGF5IG9mIHRoZSBsYW5kLCByaWdodD8gVGhpcyB3aWxsIGdpdmUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGZ1bmN0aW9uIGNhbGwgaGllcmFyY2h5IGluIHRoZSByZWNlaXZlIHBhdGgsIGZyb20gdGhlIGhhcmR3YXJlIGludGVycnVwdCB0byB0aGUgcHJvY2Vzc2luZyBvZiB0aGUgcmVjZWl2ZWQgZnJhbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2llZWU4MDIxNTRfcngmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTU0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmg9MTkzPWV4dGVybiBzdHJ1Y3QgaWVlZTgwMjE1NF9tbG1lX29wcyBtYWM4MDIxNTRfbWxtZV93cGFuO1xubmV0L21hYzgwMjE1NC9pZWVlODAyMTU0X2kuaC0xOTQtXG5uZXQvbWFjODAyMTU0L2llZWU4MDIxNTRfaS5oOjE5NTp2b2lkIGllZWU4MDIxNTRfcngoc3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmgtMTk2LXZvaWQgaWVlZTgwMjE1NF94bWl0X3N5bmNfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4tLVxubmV0L21hYzgwMjE1NC9tYWluLmM9MjM9c3RhdGljIHZvaWQgaWVlZTgwMjE1NF90YXNrbGV0X2hhbmRsZXIoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KVxuLS1cbm5ldC9tYWM4MDIxNTQvbWFpbi5jLTM0LVx0XHRcdHNrYi1cdTAwM2Vwa3RfdHlwZSA9IDA7XG5uZXQvbWFjODAyMTU0L21haW4uYzozNTpcdFx0XHRpZWVlODAyMTU0X3J4KGxvY2FsLCBza2IpO1xubmV0L21hYzgwMjE1NC9tYWluLmMtMzYtXHRcdFx0YnJlYWs7XG4tLVxubmV0L21hYzgwMjE1NC9yeC5jPTQxMD1zdGF0aWMgdm9pZFxubmV0L21hYzgwMjE1NC9yeC5jOjQxMTpfX2llZWU4MDIxNTRfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwsXG5uZXQvbWFjODAyMTU0L3J4LmMtNDEyLVx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21hYzgwMjE1NC9yeC5jPTQ0OD1pZWVlODAyMTU0X21vbml0b3JzX3J4KHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbWFjODAyMTU0L3J4LmMtNDc1LVxubmV0L21hYzgwMjE1NC9yeC5jOjQ3Njp2b2lkIGllZWU4MDIxNTRfcngoc3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L21hYzgwMjE1NC9yeC5jLTQ3Ny17XG4tLVxubmV0L21hYzgwMjE1NC9yeC5jLTUwNi1cbm5ldC9tYWM4MDIxNTQvcnguYzo1MDc6XHRfX2llZWU4MDIxNTRfcnhfaGFuZGxlX3BhY2tldChsb2NhbCwgc2tiKTtcbm5ldC9tYWM4MDIxNTQvcnguYy01MDgtXG4tLVxubmV0L21hYzgwMjE1NC9yeC5jPTUxNT12b2lkXG5uZXQvbWFjODAyMTU0L3J4LmM6NTE2OmllZWU4MDIxNTRfcnhfaXJxc2FmZShzdHJ1Y3QgaWVlZTgwMjE1NF9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IsIHU4IGxxaSlcbm5ldC9tYWM4MDIxNTQvcnguYy01MTcte1xuLS1cbm5ldC9tYWM4MDIxNTQvcnguYy01MjUtfVxubmV0L21hYzgwMjE1NC9yeC5jOjUyNjpFWFBPUlRfU1lNQk9MKGllZWU4MDIxNTRfcnhfaXJxc2FmZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzQyCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbWFjODAyMTU0IFJYIFBhdGgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHRoZSBtb2RpZmljYXRpb25zIGluIGBuZXQvbWFjODAyMTU0L3J4LmNgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gbG9va2luZyBhdCBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZSgpYCBiZWNhdXNlIHRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkLiBOb3csIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3csIEkgbmVlZCB0byBtYXAgb3V0IHRoZSBjYWxsIGNoYWluIGFuZCB0aGUgcmVsZXZhbnQgd29ya2VycyBoYW5kbGluZyB0aGVzZSBmcmFtZXMuIFNvLCBJIHNlZSBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZWAgaXRzZWxmLCBhbmQgaXQgbG9va3MgbGlrZSBpdCBpbnRlcmFjdHMgd2l0aCBgbWFjODAyMTU0X3J4X2JlYWNvbl93b3JrZXJgLCBgbWFjODAyMTU0X3J4X21hY19jbWRfd29ya2VyYCwgYGllZWU4MDIxNTRfcnhgLCBhbmQgYGllZWU4MDIxNTRfcnhfaXJxc2FmZWAuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIHRoZSBkYXRhIGZsb3cuIEJlZm9yZSBkaWdnaW5nIGRlZXBlciBpbnRvIGFueSBzcGVjaWZpYyBjYWxsIHBhdGgsIEkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IHRoYXQgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgZWxzZSByZWxldmFudCBpbiB0aGUgYG5ldC9tYWM4MDIxNTQvcnguY2AgZmlsZSBpdHNlbGYuIFRoZW4sIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IHdoYXQgYWxsIHRoZSBzeW1ib2xzIGFyZSBpbiB0aGF0IGZpbGUsIGp1c3QgYXMgYSBnZW5lcmFsIHNhbml0eSBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVowLTlfXSYjNDM7LipcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTU0L3J4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjE1NC9yeC5jLTIzLVxubmV0L21hYzgwMjE1NC9yeC5jOjI0OnN0YXRpYyBpbnQgaWVlZTgwMjE1NF9kZWxpdmVyX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L21hYzgwMjE1NC9yeC5jLTI1LXtcbi0tXG5uZXQvbWFjODAyMTU0L3J4LmMtMzEtXG5uZXQvbWFjODAyMTU0L3J4LmM6MzI6dm9pZCBtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQvbWFjODAyMTU0L3J4LmMtMzMte1xuLS1cbm5ldC9tYWM4MDIxNTQvcnguYy01Ni1cbm5ldC9tYWM4MDIxNTQvcnguYzo1NzpzdGF0aWMgYm9vbCBtYWM4MDIxNTRfc2hvdWxkX2Fuc3dlcl9iZWFjb25fcmVxKHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbClcbm5ldC9tYWM4MDIxNTQvcnguYy01OC17XG4tLVxubmV0L21hYzgwMjE1NC9yeC5jLTc3LVxubmV0L21hYzgwMjE1NC9yeC5jOjc4OnN0YXRpYyB2b2lkIG1hYzgwMjE1NF9yeF9tYWNfY21kKHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCxcbm5ldC9tYWM4MDIxNTQvcnguYy03OS1cdFx0XHRcdCBzdHJ1Y3QgY2ZnODAyMTU0X21hY19wa3QgKm1hY19wa3QpXG4tLVxubmV0L21hYzgwMjE1NC9yeC5jLTEyNS1cbm5ldC9tYWM4MDIxNTQvcnguYzoxMjY6dm9pZCBtYWM4MDIxNTRfcnhfbWFjX2NtZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L21hYzgwMjE1NC9yeC5jLTEyNy17XG4tLVxubmV0L21hYzgwMjE1NC9yeC5jLTE2NC0gKi9cbm5ldC9tYWM4MDIxNTQvcnguYzoxNjU6dm9pZCBtYWM4MDIxNTRfZmx1c2hfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxubmV0L21hYzgwMjE1NC9yeC5jLTE2Ni1cdFx0XHQgIHN0cnVjdCBpZWVlODAyMTU0X3N1Yl9pZl9kYXRhICpzZGF0YSlcbi0tXG5uZXQvbWFjODAyMTU0L3J4LmMtMTkxLSAqL1xubmV0L21hYzgwMjE1NC9yeC5jOjE5Mjp2b2lkIG1hYzgwMjE1NF9mbHVzaF9xdWV1ZWRfcGt0cyhzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwsXG5uZXQvbWFjODAyMTU0L3J4LmMtMTkzLVx0XHRcdFx0IHN0cnVjdCBpZWVlODAyMTU0X3N1Yl9pZl9kYXRhICpzZGF0YSlcbi0tXG5uZXQvbWFjODAyMTU0L3J4LmM9MjAxPXN0YXRpYyBpbnRcbm5ldC9tYWM4MDIxNTQvcnguYzoyMDI6aWVlZTgwMjE1NF9zdWJpZl9mcmFtZShzdHJ1Y3QgaWVlZTgwMjE1NF9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTU0L3J4LmMtMjAzLVx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGllZWU4MDIxNTRfaGRyICpoZHIpXG4tLVxubmV0L21hYzgwMjE1NC9yeC5jPTMzMj1zdGF0aWMgdm9pZFxubmV0L21hYzgwMjE1NC9yeC5jOjMzMzppZWVlODAyMTU0X3ByaW50X2FkZHIoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGllZWU4MDIxNTRfYWRkciAqYWRkcilcbm5ldC9tYWM4MDIxNTQvcnguYy0zMzQte1xuLS1cbm5ldC9tYWM4MDIxNTQvcnguYz0zNTE9c3RhdGljIGludFxubmV0L21hYzgwMjE1NC9yeC5jOjM1MjppZWVlODAyMTU0X3BhcnNlX2ZyYW1lX3N0YXJ0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZWVlODAyMTU0X2hkciAqaGRyKVxubmV0L21hYzgwMjE1NC9yeC5jLTM1My17XG4tLVxubmV0L21hYzgwMjE1NC9yeC5jPTQxMD1zdGF0aWMgdm9pZFxubmV0L21hYzgwMjE1NC9yeC5jOjQxMTpfX2llZWU4MDIxNTRfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwsXG5uZXQvbWFjODAyMTU0L3J4LmMtNDEyLVx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21hYzgwMjE1NC9yeC5jPTQ0Nz1zdGF0aWMgdm9pZFxubmV0L21hYzgwMjE1NC9yeC5jOjQ0ODppZWVlODAyMTU0X21vbml0b3JzX3J4KHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9tYWM4MDIxNTQvcnguYy00NDkte1xuLS1cbm5ldC9tYWM4MDIxNTQvcnguYy00NzUtXG5uZXQvbWFjODAyMTU0L3J4LmM6NDc2OnZvaWQgaWVlZTgwMjE1NF9yeChzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvbWFjODAyMTU0L3J4LmMtNDc3LXtcbi0tXG5uZXQvbWFjODAyMTU0L3J4LmM9NTE1PXZvaWRcbm5ldC9tYWM4MDIxNTQvcnguYzo1MTY6aWVlZTgwMjE1NF9yeF9pcnFzYWZlKHN0cnVjdCBpZWVlODAyMTU0X2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggbHFpKVxubmV0L21hYzgwMjE1NC9yeC5jLTUxNy17XG4tLVxubmV0L21hYzgwMjE1NC9yeC5jLTUyNS19XG5uZXQvbWFjODAyMTU0L3J4LmM6NTI2OkVYUE9SVF9TWU1CT0woaWVlZTgwMjE1NF9yeF9pcnFzYWZlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyNjgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFuYWx5c2lzOiBJRUVFIDgwMi4xNS40IENvZGUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGlzIHRoaXMgZXZlbiB3b3J0aCBmdXp6aW5nPyBMZXQmIzM5O3MgY2hlY2sgdGhlIGNyaXRlcmlhLiBZZXMsIG1vZGlmeWluZyBgbmV0L21hYzgwMjE1NC9yeC5jYCB3aXRoaW4gYGllZWU4MDIxNTRfc3ViaWZfZnJhbWVgICpkZWZpbml0ZWx5KiB0b3VjaGVzIHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlLiBHb29kLiBTZWNvbmQsIGFyZSB3ZSB0YWxraW5nIGFib3V0IHNvbWV0aGluZyBhY2Nlc3NpYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gWWVwLCBgbWFjODAyMTU0YCBpcyBzaW11bGF0ZWQgdGhyb3VnaCBgbWFjODAyMTU0X2h3c2ltYCBvciByYXcgcGFja2V0IGluamVjdGlvbiB2aWEgc29ja2V0cyBvciB2aXJ0dWFsIGRldmljZXMuIEVhc3kgdG8gdGVzdC4gQ3J1Y2lhbGx5LCB0aGUgY29kZSBpcyBjaGFuZ2luZyBtZW1vcnkgcmVmZXJlbmNlIGNvdW50aW5nLCBzcGVjaWZpY2FsbHkgcmVtb3ZpbmcgYHNrYl9nZXQoc2tiKWAgdG8gdHJhbnNmZXIgb3duZXJzaGlwLiBUaGlzIGZpeGVzIGEgbWVtb3J5IGxlYWsgb3IgYXZvaWRzIHVzZS1hZnRlci1mcmVlL2xlYWsgaXNzdWVzLiBTbywgZnV6emluZyBpcyBjcml0aWNhbCBoZXJlIHRvIGZsdXNoIG91dCBhbnkgcG90ZW50aWFsIGRvdWJsZSBmcmVlcyBvciBVQUZzIHRoYXQgbWlnaHQgZXhpc3QgZHVlIHRvIHRoZSBvd25lcnNoaXAgY2hhbmdlLiBCYXNlZCBvbiBhbGwgdGhhdCwgYFdvcnRoRnV6emluZyA9IHRydWVgLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgY29tcGlsaW5nIGFuZCB0ZXN0aW5nIHRoaXMuIExvb2tpbmcgYXQgYG5ldC9tYWM4MDIxNTQvS2NvbmZpZ2AsIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHdlIG5lZWQgYElFRUU4MDIxNTRgLCBgTUFDODAyMTU0YCwgYW5kIGVpdGhlciBgSUVFRTgwMjE1NF9IV1NJTWAgb3IgYElFRUU4MDIxNTRfU09DS0VUYC4KCkZpbmFsbHksIHdlIHNob3VsZCB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcy4gYE1BQzgwMjE1NGAgbmVlZHMgYElFRUU4MDIxNTRgLCBhbmQgYElFRUU4MDIxNTRfSFdTSU1gIGRlcGVuZHMgb24gYElFRUU4MDIxNTRfRFJJVkVSUyAmYW1wOyZhbXA7IE1BQzgwMjE1NGAuIFdlIHNob3VsZCBjaGVjayBgSUVFRTgwMjE1NF9EUklWRVJTYCBpbiBgZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnYC4gV2Ugbm93IGtub3cgZXZlcnl0aGluZyB3ZSBuZWVkIHRvIHJ1biBvdXIgZnV6emluZyBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0bWVudWNvbmZpZyBJRUVFODAyMTU0X0RSSVZFUlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0lFRUUgODAyLjE1LjQgZHJpdmVyc1wmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBORVRERVZJQ0VTIFx1MDAyNlx1MDAyNiBJRUVFODAyMTU0XG4gICA1Olx0XHRkZWZhdWx0IHlcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgU2F5IFkgaGVyZSB0byBnZXQgdG8gc2VlIG9wdGlvbnMgZm9yIElFRUUgODAyLjE1LjQgTG93LVJhdGVcbiAgIDg6XHRcdCAgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3JrIGRldmljZSBkcml2ZXJzLiBUaGlzIG9wdGlvbiBhbG9uZVxuICAgOTpcdFx0ICBkb2VzIG5vdCBhZGQgYW55IGtlcm5lbCBjb2RlLlxuICAxMDpcdFxuICAxMTpcdFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kXG4gIDEyOlx0XHQgIGRpc2FibGVkLlxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBJRUVFODAyMTU0X0ZBS0VMQlxuICAxNTpcdFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXHUwMDI2XHUwMDI2IE1BQzgwMjE1NFxuICAxNjpcdFx0dHJpc3RhdGUgXCYjMzQ7SUVFRSA4MDIuMTUuNCBsb29wYmFjayBkcml2ZXJcJiMzNDtcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIGZha2UgZHJpdmVyIHRoYXQgY2FuIGVtdWxhdGUgYSBuZXRcbiAgMTk6XHRcdCAgb2Ygc2V2ZXJhbCBpbnRlcmNvbm5lY3RlZCByYWRpbyBkZXZpY2VzLlxuICAyMDpcdFxuICAyMTpcdFx0ICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gVG8gZG8gc28gc2F5IE0gaGVyZS5cbiAgMjI6XHRcdCAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCAmIzM5O2Zha2VsYiYjMzk7LlxuICAyMzpcdFxuICAyNDpcdGNvbmZpZyBJRUVFODAyMTU0X0FUODZSRjIzMFxuICAyNTpcdFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXHUwMDI2XHUwMDI2IE1BQzgwMjE1NFxuICAyNjpcdFx0dHJpc3RhdGUgXCYjMzQ7QVQ4NlJGMjMwLzIzMS8yMzMvMjEyIHRyYW5zY2VpdmVyIGRyaXZlclwmIzM0O1xuICAyNzpcdFx0ZGVwZW5kcyBvbiBTUElcbiAgMjg6XHRcdHNlbGVjdCBSRUdNQVBfU1BJXG4gIDI5Olx0XHRoZWxwXG4gIDMwOlx0XHQgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBhdDg2cmYyMzAvMjMxLzIzMy8yMTIgU1BJIDgwMi4xNS40IHdpcmVsZXNzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NjAzCgkJCQkJCQlvdXRwdXQ6IDIxOAoJCQkJCQkJdGhvdWdodHM6IDQ0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IGZvciBGdXp6aW5nIHRoaXMgSUVFRSA4MDIuMTUuNCBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZDogYElFRUU4MDIxNTRgLCBgTUFDODAyMTU0YCwgYW5kIGBJRUVFODAyMTU0X0hXU0lNYC4gIFRoZXNlIGFyZSBjcnVjaWFsIGJlY2F1c2UgdGhleSBkaXJlY3RseSBlbmFibGUgdGhlIDgwMi4xNS40IGxheWVyIGFuZCBoYXJkd2FyZSBzaW11bGF0aW9uLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHRlc3RpbmcuCgpOb3csIHRoZSBjb3JlIG9mIHRoaXMgYXNzZXNzbWVudCBpcyB0aGUgZm9jdXMuIEkmIzM5O3ZlIGlkZW50aWZpZWQga2V5IHN5bWJvbHM6IGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lYCwgYG1hYzgwMjE1NF9yeF9iZWFjb25fd29ya2VyYCwgYG1hYzgwMjE1NF9yeF9tYWNfY21kX3dvcmtlcmAsIGFuZCBgaWVlZTgwMjE1NF9yeGAuICBJIHdhbnQgdG8gcXVpY2tseSBjb25maXJtIHRoZXNlIGFyZSBzcGVjaWZpYyBhbmQgbm90IGdlbmVyYWwtcHVycG9zZSBmdW5jdGlvbnMgdGhhdCBhcmUgd2lkZWx5IHVzZWQgZWxzZXdoZXJlLiBCYXNlZCBvbiBhIHF1aWNrIHJldmlldywgaXQgY29uZmlybXMgdGhleSBhcmUgYWxsIGRpcmVjdGx5IHRpZWQgdG8gdGhlIDgwMi4xNS40IGFuZCBtYWM4MDIxNTQgbGF5ZXJzLiBHb29kLCB0aGlzIHNvbGlkaWZpZXMgdGhlIHNjb3BlIG9mIG91ciBmb2N1cy4KClRpbWUgdG8gcHJlcGFyZSB0aGUgZmluYWwgcmVhc29uaW5nLiBUaGUgYWltIGlzIHRvIHZlcmlmeSB3aGV0aGVyIG91ciBwYXRjaCBpcyAmIzM0O3dvcnRoIGZ1enppbmcmIzM0Oy4KCjEuICAqKldvcnRoRnV6emluZyoqOiAqVHJ1ZSouIFRoZSBtb2RpZmljYXRpb25zIGhlcmUgYXJlIGRlYWxpbmcgd2l0aCByZWZlcmVuY2UgY291bnRpbmcgb2YgcmVjZWl2ZWQgYHNrX2J1ZmZzYCBpbiBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZWAuIFRoaXMgaXMgY3JpdGljYWwuCjIuICAqKkZvY3VzU3ltYm9scyoqOiAgQXMgYWxyZWFkeSBjb25maXJtZWQsIHRoZXNlIGFyZSBzcGVjaWZpYy4KMy4gICoqRW5hYmxlQ29uZmlncyoqOiAgQXMgc3RhdGVkLCB3ZSBoYXZlIHRvIGVuYWJsZSBJRUVFIDgwMi4xNS40IGFuZCB0aGUgaGFyZHdhcmUgc2ltdWxhdGlvbiB0byB0ZXN0IHRoZSBmdWxsIGNvZGUgcGF0aC4KNC4gICoqUmVhc29uaW5nKio6IFRoZSBjaGFuZ2UgaXMgdG8gYGllZWU4MDIxNTRfc3ViaWZfZnJhbWVgLCBhbmQgaXQgYWZmZWN0cyBob3cgcmVjZWl2ZWQgcGFja2V0cyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGJ5IHJlbW92aW5nIHJlZHVuZGFudCBgc2tiX2dldGAgY2FsbHMgd2hlbiBxdWV1aW5nIGJlYWNvbiBhbmQgTUFDIGNvbW1hbmQgcGFja2V0cy4gVGhpcyBpcyBpbXBvcnRhbnQgc2luY2UgaXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbWFjODAyMTU0XF9od3NpbSBvciBzb2NrZXQtYmFzZWQgZnJhbWUgdHJhbnNtaXNzaW9uIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIHZlcmlmeSBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50IGludmFyaWFudHMuCgpTbywgaW4gc3VtbWFyeSwgYmFzZWQgb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9uIG1vZGlmaWNhdGlvbnMsIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cywgYW5kIHRoZSBmdXp6aW5nIHRhcmdldCBiZWluZyByZWZlcmVuY2UgY291bnRpbmcsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgaW5kZWVkIHdvcnRoIGZ1enppbmcuICBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OywKICAgICYjMzQ7TUFDODAyMTU0JiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtJRUVFODAyMTU0X0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjE1NF9zdWJpZl9mcmFtZSYjMzQ7LAogICAgJiMzNDttYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlciYjMzQ7LAogICAgJiMzNDttYWM4MDIxNTRfcnhfbWFjX2NtZF93b3JrZXImIzM0OywKICAgICYjMzQ7aWVlZTgwMjE1NF9yeCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBza19idWZmIHJlZmVyZW5jZSBjb3VudCBoYW5kbGluZyBpbiBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lKCkgYnkgcmVtb3Zpbmcgc2tiX2dldCgpIGNhbGxzIHdoZW4gZW5xdWV1aW5nIGJlYWNvbiBhbmQgTUFDIGNvbW1hbmQgcGFja2V0cyB0byBhc3luY2hyb25vdXMgd29ya2VyIHF1ZXVlcy4gVGhpcyByZWFjaGFibGUgbmV0d29ya2luZyBwYXRoIGNhbiBiZSB0ZXN0ZWQgdmlhIG1hYzgwMjE1NF9od3NpbSBhbmQgaXMgd29ydGggZnV6emluZyB0byB2ZXJpZnkgc2tiIGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgY29ycmVjdG5lc3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OywKICAgICYjMzQ7TUFDODAyMTU0JiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtJRUVFODAyMTU0X0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjE1NF9zdWJpZl9mcmFtZSYjMzQ7LAogICAgJiMzNDttYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlciYjMzQ7LAogICAgJiMzNDttYWM4MDIxNTRfcnhfbWFjX2NtZF93b3JrZXImIzM0OywKICAgICYjMzQ7aWVlZTgwMjE1NF9yeCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBza19idWZmIHJlZmVyZW5jZSBjb3VudCBoYW5kbGluZyBpbiBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lKCkgYnkgcmVtb3Zpbmcgc2tiX2dldCgpIGNhbGxzIHdoZW4gZW5xdWV1aW5nIGJlYWNvbiBhbmQgTUFDIGNvbW1hbmQgcGFja2V0cyB0byBhc3luY2hyb25vdXMgd29ya2VyIHF1ZXVlcy4gVGhpcyByZWFjaGFibGUgbmV0d29ya2luZyBwYXRoIGNhbiBiZSB0ZXN0ZWQgdmlhIG1hYzgwMjE1NF9od3NpbSBhbmQgaXMgd29ydGggZnV6emluZyB0byB2ZXJpZnkgc2tiIGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgY29ycmVjdG5lc3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZSgpYCBpbiBgbmV0L21hYzgwMjE1NC9yeC5jYCB0byBhc3NpZ24gYG1hY19wa3QtXHUwMDNlc2tiID0gc2tiYCBkaXJlY3RseSBpbnN0ZWFkIG9mIGNhbGxpbmcgYHNrYl9nZXQoc2tiKWAuIFRoaXMgYXZvaWRzIHRha2luZyBhbiBleHRyYSByZWZjb3VudCB3aGVuIHRyYW5zZmVycmluZyBvd25lcnNoaXAgb2YgdGhlIHNrYiB0byB0aGUgYXN5bmNocm9ub3VzIGJlYWNvbi9NQUMgY29tbWFuZCBwcm9jZXNzaW5nIHdvcmtlcnMsIGZpeGluZyBhbiBza2IgcmVmZXJlbmNlIGNvdW50IC8gbWVtb3J5IGxlYWsuXG5cblRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBwYWRkaW5nLCBvciBleHBvc2Uga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS4gYG1hY19wa3RgIGlzIGFscmVhZHkgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iaigpYC4gUmVmZXJlbmNlIGNvdW50aW5nIGFuZCBtZW1vcnkgbGlmZWN5Y2xlIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLCB3aXRoIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgZGV0ZWN0YWJsZSBvbmx5IGJ5IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzQyNTk2OGJjNGNmNTM5MjJhNWM2OTM2Nzk3YWQzNjVjZWNkMzAyNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTE6Mjk6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTU0L3J4LmMgYi9uZXQvbWFjODAyMTU0L3J4LmMKaW5kZXggMTliNTM4MmU4NWE4NC4uYWQ2MDJkMjIyZTg2MSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjE1NC9yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxNTQvcnguYwpAQCAtMjg3LDcgJiM0MzsyODcsNyBAQCBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTU0X3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJaWYgKCFtYWNfcGt0KQogCQkJZ290byBmYWlsOwogCi0JCW1hY19wa3QtJmd0O3NrYiA9IHNrYl9nZXQoc2tiKTsKJiM0MzsJCW1hY19wa3QtJmd0O3NrYiA9IHNrYjsKIAkJbWFjX3BrdC0mZ3Q7c2RhdGEgPSBzZGF0YTsKIAkJbWFjX3BrdC0mZ3Q7cGFnZSA9IHNkYXRhLSZndDtsb2NhbC0mZ3Q7c2Nhbl9wYWdlOwogCQltYWNfcGt0LSZndDtjaGFubmVsID0gc2RhdGEtJmd0O2xvY2FsLSZndDtzY2FuX2NoYW5uZWw7CkBAIC0zMDQsNyAmIzQzOzMwNCw3IEBAIGllZWU4MDIxNTRfc3ViaWZfZnJhbWUoc3RydWN0IGllZWU4MDIxNTRfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQlpZiAoIW1hY19wa3QpCiAJCQlnb3RvIGZhaWw7CiAKLQkJbWFjX3BrdC0mZ3Q7c2tiID0gc2tiX2dldChza2IpOwomIzQzOwkJbWFjX3BrdC0mZ3Q7c2tiID0gc2tiOwogCQltYWNfcGt0LSZndDtzZGF0YSA9IHNkYXRhOwogCQluZXRkZXZfaG9sZChzZGF0YS0mZ3Q7ZGV2LCAmYW1wO21hY19wa3QtJmd0O2Rldl90cmFja2VyLCBHRlBfQVRPTUlDKTsKIAkJc3Bpbl9sb2NrKCZhbXA7c2RhdGEtJmd0O2xvY2FsLSZndDtyeF9sb2NrKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhpbmdzOgoKKipBbmFseXppbmcgdGhlIE1BQzgwMjE1NCBSZWNlaXZlIFBhdGgqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGUgcmVjZWl2ZXIgc2lkZSBvZiB0aGUgODAyLjE1LjQgTUFDIGxheWVyLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCB0aGF0IGRpZmYuIFNlZWluZyB0aGUgY2hhbmdlcyBkaXJlY3RseSB3aWxsIGdpdmUgbWUgYSBnb29kIGluaXRpYWwgc2Vuc2Ugb2YgdGhlIG1vZGlmaWNhdGlvbnMgdGhhdCBoYXZlIGJlZW4gbWFkZSwgYW5kIHdoeS4gVGhlbiwgSSBuZWVkIHRvIHpvb20gb3V0IGEgYml0IGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJJiMzOTtsbCByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvbWFjODAyMTU0L3J4LmNgIOKAkyB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbnMgYXJvdW5kIHRoZSBjaGFuZ2UgaXMgY3J1Y2lhbCB0byBncmFzcCB0aGUgaW1wbGljYXRpb25zLiBFc3NlbnRpYWxseSwgSSYjMzk7bSBjYWxsaW5nIGZvciBgcmVhZC1maWxlYCBvbiBgbmV0L21hYzgwMjE1NC9yeC5jYC4gSSBuZWVkIHRoYXQgZnVsbCBjb250ZXh0IGluIGZyb250IG9mIG1lIHRvIG1ha2UgYSBwcm9wZXIgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTU0L3J4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTA6XHRcdFx0ICAgIG1hY19jYihza2IpLVx1MDAzZWRlc3QucGFuX2lkICE9IGNwdV90b19sZTE2KElFRUU4MDIxNTRfUEFOSURfQlJPQURDQVNUKSlcbiAyNTE6XHRcdFx0XHRza2ItXHUwMDNlcGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUO1xuIDI1MjpcdFx0XHRlbHNlIGlmIChtYWNfY2Ioc2tiKS1cdTAwM2VkZXN0LnNob3J0X2FkZHIgPT0gc3Nob3J0KVxuIDI1MzpcdFx0XHRcdHNrYi1cdTAwM2Vwa3RfdHlwZSA9IFBBQ0tFVF9IT1NUO1xuIDI1NDpcdFx0XHRlbHNlIGlmIChtYWNfY2Ioc2tiKS1cdTAwM2VkZXN0LnNob3J0X2FkZHIgPT1cbiAyNTU6XHRcdFx0XHQgIGNwdV90b19sZTE2KElFRUU4MDIxNTRfQUREUl9CUk9BRENBU1QpKVxuIDI1NjpcdFx0XHRcdHNrYi1cdTAwM2Vwa3RfdHlwZSA9IFBBQ0tFVF9CUk9BRENBU1Q7XG4gMjU3Olx0XHRcdGVsc2VcbiAyNTg6XHRcdFx0XHRza2ItXHUwMDNlcGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUO1xuIDI1OTpcdFx0XHRicmVhaztcbiAyNjA6XHRcdGRlZmF1bHQ6XG4gMjYxOlx0XHRcdHByX2RlYnVnKFwmIzM0O2ludmFsaWQgZGVzdCBtb2RlXFxuXCYjMzQ7KTtcbiAyNjI6XHRcdFx0Z290byBmYWlsO1xuIDI2MzpcdFx0fVxuIDI2NDpcdFxuIDI2NTpcdFx0c2tiLVx1MDAzZWRldiA9IHNkYXRhLVx1MDAzZWRldjtcbiAyNjY6XHRcbiAyNjc6XHRcdC8qIFRPRE8gdGhpcyBzaG91bGQgYmUgbW92ZWQgYWZ0ZXIgbmV0aWZfcmVjZWl2ZV9za2IgY2FsbCwgb3RoZXJ3aXNlXG4gMjY4Olx0XHQgKiB3aXJlc2hhcmsgd2lsbCBzaG93IGEgbWFjIGhlYWRlciB3aXRoIHNlY3VyaXR5IGZpZWxkcyBhbmQgdGhlXG4gMjY5Olx0XHQgKiBwYXlsb2FkIGlzIGFscmVhZHkgZGVjcnlwdGVkLlxuIDI3MDpcdFx0ICovXG4gMjcxOlx0XHRyYyA9IG1hYzgwMjE1NF9sbHNlY19kZWNyeXB0KFx1MDAyNnNkYXRhLVx1MDAzZXNlYywgc2tiKTtcbiAyNzI6XHRcdGlmIChyYykge1xuIDI3MzpcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtkZWNyeXB0aW9uIGZhaWxlZDogJWlcXG5cJiMzNDssIHJjKTtcbiAyNzQ6XHRcdFx0Z290byBmYWlsO1xuIDI3NTpcdFx0fVxuIDI3NjpcdFxuIDI3NzpcdFx0c2RhdGEtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnJ4X3BhY2tldHMmIzQzOyYjNDM7O1xuIDI3ODpcdFx0c2RhdGEtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnJ4X2J5dGVzICYjNDM7PSBza2ItXHUwMDNlbGVuO1xuIDI3OTpcdFxuIDI4MDpcdFx0c3dpdGNoIChtYWNfY2Ioc2tiKS1cdTAwM2V0eXBlKSB7XG4gMjgxOlx0XHRjYXNlIElFRUU4MDIxNTRfRkNfVFlQRV9CRUFDT046XG4gMjgyOlx0XHRcdGRldl9kYmcoXHUwMDI2c2RhdGEtXHUwMDNlZGV2LVx1MDAzZWRldiwgXCYjMzQ7QkVBQ09OIHJlY2VpdmVkXFxuXCYjMzQ7KTtcbiAyODM6XHRcdFx0aWYgKCFtYWM4MDIxNTRfaXNfc2Nhbm5pbmcoc2RhdGEtXHUwMDNlbG9jYWwpKVxuIDI4NDpcdFx0XHRcdGdvdG8gZmFpbDtcbiAyODU6XHRcbiAyODY6XHRcdFx0bWFjX3BrdCA9IGt6YWxsb2Nfb2JqKCptYWNfcGt0LCBHRlBfQVRPTUlDKTtcbiAyODc6XHRcdFx0aWYgKCFtYWNfcGt0KVxuIDI4ODpcdFx0XHRcdGdvdG8gZmFpbDtcbiAyODk6XHRcbiAyOTA6XHRcdFx0bWFjX3BrdC1cdTAwM2Vza2IgPSBza2I7XG4gMjkxOlx0XHRcdG1hY19wa3QtXHUwMDNlc2RhdGEgPSBzZGF0YTtcbiAyOTI6XHRcdFx0bWFjX3BrdC1cdTAwM2VwYWdlID0gc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlc2Nhbl9wYWdlO1xuIDI5MzpcdFx0XHRtYWNfcGt0LVx1MDAzZWNoYW5uZWwgPSBzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VzY2FuX2NoYW5uZWw7XG4gMjk0Olx0XHRcdG5ldGRldl9ob2xkKHNkYXRhLVx1MDAzZWRldiwgXHUwMDI2bWFjX3BrdC1cdTAwM2VkZXZfdHJhY2tlciwgR0ZQX0FUT01JQyk7XG4gMjk1Olx0XHRcdHNwaW5fbG9jayhcdTAwMjZzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VyeF9sb2NrKTtcbiAyOTY6XHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZtYWNfcGt0LVx1MDAzZW5vZGUsIFx1MDAyNnNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZXJ4X2JlYWNvbl9saXN0KTtcbiAyOTc6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlcnhfbG9jayk7XG4gMjk4Olx0XHRcdHF1ZXVlX3dvcmsoc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlbWFjX3dxLCBcdTAwMjZzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VyeF9iZWFjb25fd29yayk7XG4gMjk5Olx0XHRcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcbiAzMDA6XHRcbiAzMDE6XHRcdGNhc2UgSUVFRTgwMjE1NF9GQ19UWVBFX01BQ19DTUQ6XG4gMzAyOlx0XHRcdGRldl9kYmcoXHUwMDI2c2RhdGEtXHUwMDNlZGV2LVx1MDAzZWRldiwgXCYjMzQ7TUFDIENPTU1BTkQgcmVjZWl2ZWRcXG5cJiMzNDspO1xuIDMwMzpcdFx0XHRtYWNfcGt0ID0ga3phbGxvY19vYmooKm1hY19wa3QsIEdGUF9BVE9NSUMpO1xuIDMwNDpcdFx0XHRpZiAoIW1hY19wa3QpXG4gMzA1Olx0XHRcdFx0Z290byBmYWlsO1xuIDMwNjpcdFxuIDMwNzpcdFx0XHRtYWNfcGt0LVx1MDAzZXNrYiA9IHNrYjtcbiAzMDg6XHRcdFx0bWFjX3BrdC1cdTAwM2VzZGF0YSA9IHNkYXRhO1xuIDMwOTpcdFx0XHRuZXRkZXZfaG9sZChzZGF0YS1cdTAwM2VkZXYsIFx1MDAyNm1hY19wa3QtXHUwMDNlZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuIDMxMDpcdFx0XHRzcGluX2xvY2soXHUwMDI2c2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlcnhfbG9jayk7XG4gMzExOlx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2bWFjX3BrdC1cdTAwM2Vub2RlLCBcdTAwMjZzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VyeF9tYWNfY21kX2xpc3QpO1xuIDMxMjpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VyeF9sb2NrKTtcbiAzMTM6XHRcdFx0cXVldWVfd29yayhzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VtYWNfd3EsIFx1MDAyNnNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZXJ4X21hY19jbWRfd29yayk7XG4gMzE0Olx0XHRcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcbiAzMTU6XHRcbiAzMTY6XHRcdGNhc2UgSUVFRTgwMjE1NF9GQ19UWVBFX0FDSzpcbiAzMTc6XHRcdFx0Z290byBmYWlsO1xuIDMxODpcdFxuIDMxOTpcdFx0Y2FzZSBJRUVFODAyMTU0X0ZDX1RZUEVfREFUQTpcbiAzMjA6XHRcdFx0cmV0dXJuIGllZWU4MDIxNTRfZGVsaXZlcl9za2Ioc2tiKTtcbiAzMjE6XHRcdGRlZmF1bHQ6XG4gMzIyOlx0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7aWVlZTgwMjE1NDogYmFkIGZyYW1lIHJlY2VpdmVkIFwmIzM0O1xuIDMyMzpcdFx0XHRcdFx0ICAgIFwmIzM0Oyh0eXBlID0gJWQpXFxuXCYjMzQ7LCBtYWNfY2Ioc2tiKS1cdTAwM2V0eXBlKTtcbiAzMjQ6XHRcdFx0Z290byBmYWlsO1xuIDMyNTpcdFx0fVxuIDMyNjpcdFxuIDMyNzpcdGZhaWw6XG4gMzI4Olx0XHRrZnJlZV9za2Ioc2tiKTtcbiAzMjk6XHRcdHJldHVybiBORVRfUlhfRFJPUDtcbiAzMzA6XHR9XG4gMzMxOlx0XG4gMzMyOlx0c3RhdGljIHZvaWRcbiAzMzM6XHRpZWVlODAyMTU0X3ByaW50X2FkZHIoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGllZWU4MDIxNTRfYWRkciAqYWRkcilcbiAzMzQ6XHR7XG4gMzM1Olx0XHRpZiAoYWRkci1cdTAwM2Vtb2RlID09IElFRUU4MDIxNTRfQUREUl9OT05FKSB7XG4gMzM2Olx0XHRcdHByX2RlYnVnKFwmIzM0OyVzIG5vdCBwcmVzZW50XFxuXCYjMzQ7LCBuYW1lKTtcbiAzMzc6XHRcdFx0cmV0dXJuO1xuIDMzODpcdFx0fVxuIDMzOTpcdFxuIDM0MDpcdFx0cHJfZGVidWcoXCYjMzQ7JXMgUEFOIElEOiAlMDR4XFxuXCYjMzQ7LCBuYW1lLCBsZTE2X3RvX2NwdShhZGRyLVx1MDAzZXBhbl9pZCkpO1xuIDM0MTpcdFx0aWYgKGFkZHItXHUwMDNlbW9kZSA9PSBJRUVFODAyMTU0X0FERFJfU0hPUlQpIHtcbiAzNDI6XHRcdFx0cHJfZGVidWcoXCYjMzQ7JXMgaXMgc2hvcnQ6ICUwNHhcXG5cJiMzNDssIG5hbWUsXG4gMzQzOlx0XHRcdFx0IGxlMTZfdG9fY3B1KGFkZHItXHUwMDNlc2hvcnRfYWRkcikpO1xuIDM0NDpcdFx0fSBlbHNlIHtcbiAzNDU6XHRcdFx0dTY0IGh3ID0gc3dhYjY0KChfX2ZvcmNlIHU2NClhZGRyLVx1MDAzZWV4dGVuZGVkX2FkZHIpO1xuIDM0NjpcdFxuIDM0NzpcdFx0XHRwcl9kZWJ1ZyhcJiMzNDslcyBpcyBoYXJkd2FyZTogJThwaENcXG5cJiMzNDssIG5hbWUsIFx1MDAyNmh3KTtcbiAzNDg6XHRcdH1cbiAzNDk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMTYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb2RlIEJlZm9yZSB0aGUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICpiZWZvcmUqIHN0YXRlIG9mIHRoaXMgYGllZWU4MDIxNTRfc3ViaWZfZnJhbWVgIGZ1bmN0aW9uLiBJJiMzOTttIGZvY3VzaW5nIG9uIGEgc3BlY2lmaWMgc2VxdWVuY2Ugd2hlcmUgYSBgbWFjX3BrdGAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYC4gSWYgdGhhdCBzdWNjZWVkcywgdGhlIGNvZGUgdGhlbiBkb2VzIGBtYWNfcGt0LSZndDtza2IgPSBza2JfZ2V0KHNrYik7YCBhbmQgcmV0dXJucyBgTkVUX1JYX1NVQ0NFU1NgLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoZXJlIGlzIHRoZSBvcmlnaW5hbCBgc2tiYCBiZWluZyBoYW5kbGVkPyBJcyB0aGUgcmVzcG9uc2liaWxpdHkgdG8gZnJlZSB0aGUgYHNrYmAgd2l0aCB0aGUgY2FsbGVyIG9yIHdpdGhpbiBhIHdvcmtxdWV1ZT8gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYHNrYmAgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSB3ZXJlIGFueSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMuIFNvLCBJIG5lZWQgdG8gc2VlIHdoZXJlIGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lYCBpcyBjYWxsZWQgZnJvbSwgYW5kIHRoZW4gaG93IHRoZSBgbWFjX3BrdGAgdGhhdCYjMzk7cyBjcmVhdGVkIGhlcmUgaXMgdXNlZCBpbnNpZGUgb2YgdGhlIHdvcmtxdWV1ZS4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCBwcm9ibGVtIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTU0X3N1YmlmX2ZyYW1lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxNTQvcnguYz0yMDE9c3RhdGljIGludFxubmV0L21hYzgwMjE1NC9yeC5jOjIwMjppZWVlODAyMTU0X3N1YmlmX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTU0X3N1Yl9pZl9kYXRhICpzZGF0YSxcbm5ldC9tYWM4MDIxNTQvcnguYy0yMDMtXHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjE1NF9oZHIgKmhkcilcbi0tXG5uZXQvbWFjODAyMTU0L3J4LmM9NDExPV9faWVlZTgwMjE1NF9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbWFjODAyMTU0L3J4LmMtNDQxLVx0XHRcdHNrYjItXHUwMDNlZGV2ID0gc2RhdGEtXHUwMDNlZGV2O1xubmV0L21hYzgwMjE1NC9yeC5jOjQ0MjpcdFx0XHRpZWVlODAyMTU0X3N1YmlmX2ZyYW1lKHNkYXRhLCBza2IyLCBcdTAwMjZoZHIpO1xubmV0L21hYzgwMjE1NC9yeC5jLTQ0My1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTgzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhlc2UgaXRlbXM6CgoqKkRpdmluZyBpbnRvIHRoZSBSZWNlcHRpb24gV29ya3F1ZXVlcyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSBgcnhfYmVhY29uX3dvcmtgIGFuZCBgcnhfbWFjX2NtZF93b3JrYCB3b3JrcXVldWVzLiBUaGVzZSBhcmUgbGlrZWx5IGhhbmRsaW5nIHRoZSBpbmNvbWluZyBiZWFjb24gYW5kIE1BQyBjb21tYW5kIGZyYW1lcywgc28gdGhleSYjMzk7cmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSByZWNlaXZlciBwcm9jZXNzZXMgaXRzIGludGVyYWN0aW9ucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGZsb3cgb2YgZGF0YSwgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kIGhvdyB0aGVzZSB0YXNrcyBhcmUgc2NoZWR1bGVkIGFuZCBwcmlvcml0aXplZCB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMgYWJvdXQgdGhlIGxvZ2ljIGluIHRoZXNlIHNwZWNpZmljIHdvcmtxdWV1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J4X2JlYWNvbl93b3JrfHJ4X21hY19jbWRfd29yayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTU0L2llZWU4MDIxNTRfaS5oPTMxPXN0cnVjdCBpZWVlODAyMTU0X2xvY2FsIHtcbi0tXG5uZXQvbWFjODAyMTU0L2llZWU4MDIxNTRfaS5oLTczLVx0c3RydWN0IGxpc3RfaGVhZCByeF9iZWFjb25fbGlzdDtcbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmg6NzQ6XHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcnhfYmVhY29uX3dvcms7XG5uZXQvbWFjODAyMTU0L2llZWU4MDIxNTRfaS5oLTc1LVx0c3RydWN0IGxpc3RfaGVhZCByeF9tYWNfY21kX2xpc3Q7XG5uZXQvbWFjODAyMTU0L2llZWU4MDIxNTRfaS5oOjc2Olx0c3RydWN0IHdvcmtfc3RydWN0IHJ4X21hY19jbWRfd29yaztcbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmgtNzctXHQvKiBTZXJpYWxpemVzIHJ4X2JlYWNvbl9saXN0IGFuZCByeF9tYWNfY21kX2xpc3QgYWdhaW5zdCB0aGUgUlhcbi0tXG5uZXQvbWFjODAyMTU0L2llZWU4MDIxNTRfaS5oPTI5MD1pbnQgbWFjODAyMTU0X3Byb2Nlc3NfYmVhY29uKHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbWFjODAyMTU0L2llZWU4MDIxNTRfaS5oLTI5Mi1cdFx0XHQgICAgIHU4IHBhZ2UsIHU4IGNoYW5uZWwpO1xubmV0L21hYzgwMjE1NC9pZWVlODAyMTU0X2kuaDoyOTM6dm9pZCBtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xubmV0L21hYzgwMjE1NC9pZWVlODAyMTU0X2kuaC0yOTQtXG4tLVxubmV0L21hYzgwMjE1NC9pZWVlODAyMTU0X2kuaD0zMDY9c3RhdGljIGlubGluZSBib29sIG1hYzgwMjE1NF9pc19iZWFjb25pbmcoc3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsKVxuLS1cbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmgtMzEwLVxubmV0L21hYzgwMjE1NC9pZWVlODAyMTU0X2kuaDozMTE6dm9pZCBtYWM4MDIxNTRfcnhfbWFjX2NtZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmgtMzEyLXZvaWQgbWFjODAyMTU0X2ZsdXNoX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5uZXQvbWFjODAyMTU0L21haW4uYz00Nz1pZWVlODAyMTU0X2FsbG9jX2h3KHNpemVfdCBwcml2X2RhdGFfbGVuLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjE1NF9vcHMgKm9wcylcbi0tXG5uZXQvbWFjODAyMTU0L21haW4uYy0xMDItXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZsb2NhbC1cdTAwM2VzY2FuX3dvcmssIG1hYzgwMjE1NF9zY2FuX3dvcmtlcik7XG5uZXQvbWFjODAyMTU0L21haW4uYzoxMDM6XHRJTklUX1dPUksoXHUwMDI2bG9jYWwtXHUwMDNlcnhfYmVhY29uX3dvcmssIG1hYzgwMjE1NF9yeF9iZWFjb25fd29ya2VyKTtcbm5ldC9tYWM4MDIxNTQvbWFpbi5jLTEwNC1cdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNmxvY2FsLVx1MDAzZWJlYWNvbl93b3JrLCBtYWM4MDIxNTRfYmVhY29uX3dvcmtlcik7XG5uZXQvbWFjODAyMTU0L21haW4uYzoxMDU6XHRJTklUX1dPUksoXHUwMDI2bG9jYWwtXHUwMDNlcnhfbWFjX2NtZF93b3JrLCBtYWM4MDIxNTRfcnhfbWFjX2NtZF93b3JrZXIpO1xubmV0L21hYzgwMjE1NC9tYWluLmMtMTA2LVxuLS1cbm5ldC9tYWM4MDIxNTQvcnguYz0yND1zdGF0aWMgaW50IGllZWU4MDIxNTRfZGVsaXZlcl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbWFjODAyMTU0L3J4LmMtMzEtXG5uZXQvbWFjODAyMTU0L3J4LmM6MzI6dm9pZCBtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQvbWFjODAyMTU0L3J4LmMtMzMte1xubmV0L21hYzgwMjE1NC9yeC5jLTM0LVx0c3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsID1cbm5ldC9tYWM4MDIxNTQvcnguYzozNTpcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsLCByeF9iZWFjb25fd29yayk7XG5uZXQvbWFjODAyMTU0L3J4LmMtMzYtXHRzdHJ1Y3QgY2ZnODAyMTU0X21hY19wa3QgKm1hY19wa3Q7XG4tLVxubmV0L21hYzgwMjE1NC9yeC5jPTc4PXN0YXRpYyB2b2lkIG1hYzgwMjE1NF9yeF9tYWNfY21kKHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbWFjODAyMTU0L3J4LmMtMTI1LVxubmV0L21hYzgwMjE1NC9yeC5jOjEyNjp2b2lkIG1hYzgwMjE1NF9yeF9tYWNfY21kX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQvbWFjODAyMTU0L3J4LmMtMTI3LXtcbm5ldC9tYWM4MDIxNTQvcnguYy0xMjgtXHRzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwgPVxubmV0L21hYzgwMjE1NC9yeC5jOjEyOTpcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsLCByeF9tYWNfY21kX3dvcmspO1xubmV0L21hYzgwMjE1NC9yeC5jLTEzMC1cdHN0cnVjdCBjZmc4MDIxNTRfbWFjX3BrdCAqbWFjX3BrdDtcbi0tXG5uZXQvbWFjODAyMTU0L3J4LmM9MjAyPWllZWU4MDIxNTRfc3ViaWZfZnJhbWUoc3RydWN0IGllZWU4MDIxNTRfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxNTQvcnguYy0yOTctXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZXJ4X2xvY2spO1xubmV0L21hYzgwMjE1NC9yeC5jOjI5ODpcdFx0cXVldWVfd29yayhzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VtYWNfd3EsIFx1MDAyNnNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZXJ4X2JlYWNvbl93b3JrKTtcbm5ldC9tYWM4MDIxNTQvcnguYy0yOTktXHRcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcbi0tXG5uZXQvbWFjODAyMTU0L3J4LmMtMzEyLVx0XHRzcGluX3VubG9jayhcdTAwMjZzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VyeF9sb2NrKTtcbm5ldC9tYWM4MDIxNTQvcnguYzozMTM6XHRcdHF1ZXVlX3dvcmsoc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlbWFjX3dxLCBcdTAwMjZzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VyeF9tYWNfY21kX3dvcmspO1xubmV0L21hYzgwMjE1NC9yeC5jLTMxNC1cdFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODE1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRoaW5nczoKCioqQW5hbHl6aW5nIE1BQyA4MDIuMTUuNCBSZWNlaXZlIE1lY2hhbmlzbXMqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgaGVhcnQgb2YgdGhlIDgwMi4xNS40IE1BQyBsYXllciwgc3BlY2lmaWNhbGx5IHRoZSByZWNlaXZlIHBhdGguIEkgbmVlZCB0byB0YWtlIGEgY2xvc2UgbG9vayBhdCB0aHJlZSBrZXkgY29tcG9uZW50czogYG1hYzgwMjE1NF9yeF9iZWFjb25fd29ya2VyYCwgYG1hYzgwMjE1NF9yeF9tYWNfY21kX3dvcmtlcmAsIGFuZCBgbWFjODAyMTU0X2ZsdXNoX2xpc3RgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgYmVhY29ucyBhcmUgaGFuZGxlZCwgaG93IE1BQyBjb21tYW5kcyBhcmUgcHJvY2Vzc2VkLCBhbmQgaG93IHJlY2VpdmVkIGRhdGEgbGlzdHMgYXJlIG1hbmFnZWQsIHByb2JhYmx5IGZvciBmbHVzaGluZyBvbGQgb3IgaW52YWxpZCBlbnRyaWVzLiBUaGVzZSB0aHJlZSBmdW5jdGlvbnMgd2lsbCBwcm9iYWJseSBiZSB0aGUga2V5cyB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgTUFDIGxheWVyIHJlY2VpdmVzIGFuZCBwcm9jZXNzZXMgaXRzIGRhdGEuIEkgd2lsbCBiZSBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZXNlIHRocmVlIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTU0L3J4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0fVxuICAzMTpcdFxuICAzMjpcdHZvaWQgbWFjODAyMTU0X3J4X2JlYWNvbl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuICAzMzpcdHtcbiAgMzQ6XHRcdHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCA9XG4gIDM1Olx0XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCwgcnhfYmVhY29uX3dvcmspO1xuICAzNjpcdFx0c3RydWN0IGNmZzgwMjE1NF9tYWNfcGt0ICptYWNfcGt0O1xuICAzNzpcdFxuICAzODpcdFx0Zm9yICg7Oykge1xuICAzOTpcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlcnhfbG9jayk7XG4gIDQwOlx0XHRcdG1hY19wa3QgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoXHUwMDI2bG9jYWwtXHUwMDNlcnhfYmVhY29uX2xpc3QsXG4gIDQxOlx0XHRcdFx0XHRcdFx0ICAgc3RydWN0IGNmZzgwMjE1NF9tYWNfcGt0LCBub2RlKTtcbiAgNDI6XHRcdFx0aWYgKG1hY19wa3QpXG4gIDQzOlx0XHRcdFx0bGlzdF9kZWwoXHUwMDI2bWFjX3BrdC1cdTAwM2Vub2RlKTtcbiAgNDQ6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlcnhfbG9jayk7XG4gIDQ1Olx0XHRcdGlmICghbWFjX3BrdClcbiAgNDY6XHRcdFx0XHRicmVhaztcbiAgNDc6XHRcbiAgNDg6XHRcdFx0bWFjODAyMTU0X3Byb2Nlc3NfYmVhY29uKGxvY2FsLCBtYWNfcGt0LVx1MDAzZXNrYixcbiAgNDk6XHRcdFx0XHRcdFx0IG1hY19wa3QtXHUwMDNlcGFnZSwgbWFjX3BrdC1cdTAwM2VjaGFubmVsKTtcbiAgNTA6XHRcbiAgNTE6XHRcdFx0bmV0ZGV2X3B1dChtYWNfcGt0LVx1MDAzZXNkYXRhLVx1MDAzZWRldiwgXHUwMDI2bWFjX3BrdC1cdTAwM2VkZXZfdHJhY2tlcik7XG4gIDUyOlx0XHRcdGtmcmVlX3NrYihtYWNfcGt0LVx1MDAzZXNrYik7XG4gIDUzOlx0XHRcdGtmcmVlKG1hY19wa3QpO1xuICA1NDpcdFx0fVxuICA1NTpcdH1cbiAgNTY6XHRcbiAgNTc6XHRzdGF0aWMgYm9vbCBtYWM4MDIxNTRfc2hvdWxkX2Fuc3dlcl9iZWFjb25fcmVxKHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbClcbiAgNTg6XHR7XG4gIDU5Olx0XHRzdHJ1Y3QgY2ZnODAyMTU0X2JlYWNvbl9yZXF1ZXN0ICpiZWFjb25fcmVxO1xuICA2MDpcdFx0dW5zaWduZWQgaW50IGludGVydmFsO1xuICA2MTpcdFxuICA2MjpcdFx0cmN1X3JlYWRfbG9jaygpO1xuICA2MzpcdFx0YmVhY29uX3JlcSA9IHJjdV9kZXJlZmVyZW5jZShsb2NhbC1cdTAwM2ViZWFjb25fcmVxKTtcbiAgNjQ6XHRcdGlmICghYmVhY29uX3JlcSkge1xuICA2NTpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAgNjY6XHRcdFx0cmV0dXJuIGZhbHNlO1xuICA2NzpcdFx0fVxuICA2ODpcdFxuICA2OTpcdFx0aW50ZXJ2YWwgPSBiZWFjb25fcmVxLVx1MDAzZWludGVydmFsO1xuICA3MDpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gIDcxOlx0XG4gIDcyOlx0XHRpZiAoIW1hYzgwMjE1NF9pc19iZWFjb25pbmcobG9jYWwpKVxuICA3MzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gIDc0Olx0XG4gIDc1Olx0XHRyZXR1cm4gaW50ZXJ2YWwgPT0gSUVFRTgwMjE1NF9BQ1RJVkVfU0NBTl9EVVJBVElPTjtcbiAgNzY6XHR9XG4gIDc3Olx0XG4gIDc4Olx0c3RhdGljIHZvaWQgbWFjODAyMTU0X3J4X21hY19jbWQoc3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsLFxuICA3OTpcdFx0XHRcdFx0IHN0cnVjdCBjZmc4MDIxNTRfbWFjX3BrdCAqbWFjX3BrdClcbiAgODA6XHR7XG4gIDgxOlx0XHR1OCBtYWNfY21kO1xuICA4MjpcdFx0aW50IHJjO1xuICA4MzpcdFxuICA4NDpcdFx0cmMgPSBpZWVlODAyMTU0X2dldF9tYWNfY21kKG1hY19wa3QtXHUwMDNlc2tiLCBcdTAwMjZtYWNfY21kKTtcbiAgODU6XHRcdGlmIChyYylcbiAgODY6XHRcdFx0cmV0dXJuO1xuICA4NzpcdFxuICA4ODpcdFx0c3dpdGNoIChtYWNfY21kKSB7XG4gIDg5Olx0XHRjYXNlIElFRUU4MDIxNTRfQ01EX0JFQUNPTl9SRVE6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NzAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIE1BQyBDb21tYW5kIFdvcmtlcioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGUgcmVjZWl2ZSBwYXRoLCBhbmQgd2UmIzM5O3ZlIGFscmVhZHkgc2NvcGVkIG91dCBhIGZldyBhcmVhcy4gTGV0JiMzOTtzIG5vdCBnZXQgdHVubmVsIHZpc2lvbiwgdGhvdWdoLiBCZWZvcmUgd2UgbW92ZSBvbiwgSSBuZWVkIHRvIGNoZWNrIG91dCBgbWFjODAyMTU0X3J4X21hY19jbWRfd29ya2VyYC4gSXQmIzM5O3MgYSBrZXkgcGFydCBvZiB0aGUgTUFDIGxheWVyJiMzOTtzIHJlY2VpdmUgcHJvY2Vzc2luZy4gSSBoYXZlIGEgaHVuY2ggdGhhdCBzb21ldGhpbmcgY3JpdGljYWwgdG8gb3VyIGRlYnVnZ2luZyBlZmZvcnRzIG1heSByZXNpZGUgdGhlcmUuIFRoaXMgY291bGQgYmUgd2hlcmUgb3VyIHByb2JsZW0gbGllcywgb3IgZXZlbiB3aGVyZSBhIGNydWNpYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1hbGZ1bmN0aW9uIGlzIGJlaW5nIHByb2Nlc3NlZC4gSXQmIzM5O3MgdG9vIGltcG9ydGFudCB0byBza2lwIG92ZXIuIEdvdHRhIGJlIHRob3JvdWdoLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIGBtYWM4MDIxNTRfcnhfbWFjX2NtZF93b3JrZXJgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxNTQvcnguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTI1Olx0XG4gMTI2Olx0dm9pZCBtYWM4MDIxNTRfcnhfbWFjX2NtZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIDEyNzpcdHtcbiAxMjg6XHRcdHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCA9XG4gMTI5Olx0XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCwgcnhfbWFjX2NtZF93b3JrKTtcbiAxMzA6XHRcdHN0cnVjdCBjZmc4MDIxNTRfbWFjX3BrdCAqbWFjX3BrdDtcbiAxMzE6XHRcbiAxMzI6XHRcdGZvciAoOzspIHtcbiAxMzM6XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X2xvY2spO1xuIDEzNDpcdFx0XHRtYWNfcGt0ID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X21hY19jbWRfbGlzdCxcbiAxMzU6XHRcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgY2ZnODAyMTU0X21hY19wa3QsIG5vZGUpO1xuIDEzNjpcdFx0XHRpZiAobWFjX3BrdClcbiAxMzc6XHRcdFx0XHRsaXN0X2RlbChcdTAwMjZtYWNfcGt0LVx1MDAzZW5vZGUpO1xuIDEzODpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VyeF9sb2NrKTtcbiAxMzk6XHRcdFx0aWYgKCFtYWNfcGt0KVxuIDE0MDpcdFx0XHRcdGJyZWFrO1xuIDE0MTpcdFxuIDE0MjpcdFx0XHQvKiBBIHN0b3BwZWQgaW50ZXJmYWNlIGNhbm5vdCB0cmFuc21pdDsgc2tpcHBpbmcgYXZvaWRzIGFcbiAxNDM6XHRcdFx0ICogbmVlZGxlc3MgYXNzb2NpYXRpb24gcmVzcG9uc2UgKGFuZCB0aGUgIW5ldGlmX3J1bm5pbmcoKVxuIDE0NDpcdFx0XHQgKiB3YXJuaW5nIGl0IHdvdWxkIHRyaXApIGR1cmluZyB0ZWFyZG93bi4gVGhlIGJlYWNvbiB3b3JrZXJcbiAxNDU6XHRcdFx0ICogbmVlZHMgbm8gc3VjaCBjaGVjayBhcyBpdCBuZXZlciB0cmFuc21pdHMuXG4gMTQ2Olx0XHRcdCAqL1xuIDE0NzpcdFx0XHRpZiAoaWVlZTgwMjE1NF9zZGF0YV9ydW5uaW5nKG1hY19wa3QtXHUwMDNlc2RhdGEpKVxuIDE0ODpcdFx0XHRcdG1hYzgwMjE1NF9yeF9tYWNfY21kKGxvY2FsLCBtYWNfcGt0KTtcbiAxNDk6XHRcbiAxNTA6XHRcdFx0bmV0ZGV2X3B1dChtYWNfcGt0LVx1MDAzZXNkYXRhLVx1MDAzZWRldiwgXHUwMDI2bWFjX3BrdC1cdTAwM2VkZXZfdHJhY2tlcik7XG4gMTUxOlx0XHRcdGtmcmVlX3NrYihtYWNfcGt0LVx1MDAzZXNrYik7XG4gMTUyOlx0XHRcdGtmcmVlKG1hY19wa3QpO1xuIDE1MzpcdFx0fVxuIDE1NDpcdH1cbiAxNTU6XHRcbiAxNTY6XHQvKipcbiAxNTc6XHQgKiBtYWM4MDIxNTRfZmx1c2hfbGlzdCAtIGZyZWUgcXVldWVkIFJYIGZyYW1lcyBvbiBAbGlzdFxuIDE1ODpcdCAqIEBsaXN0OiByeF9iZWFjb25fbGlzdCBvciByeF9tYWNfY21kX2xpc3RcbiAxNTk6XHQgKiBAc2RhdGE6IG9ubHkgZnJlZSBmcmFtZXMgcmVjZWl2ZWQgb24gdGhpcyBpbnRlcmZhY2UsIG9yICVOVUxMIGZvciBhbGxcbiAxNjA6XHQgKlxuIDE2MTpcdCAqIEVhY2ggZnJhbWUgcGlucyB0aGUgbmV0X2RldmljZSBpdCB3YXMgcmVjZWl2ZWQgb24gKHZpYSBuZXRkZXZfaG9sZCgpKSxcbiAxNjI6XHQgKiBzbyByZWxlYXNlIHRoYXQgcmVmZXJlbmNlIGFzIHRoZSBmcmFtZSBpcyBkcm9wcGVkLiBDYWxsZXIgbXVzdCBob2xkXG4gMTYzOlx0ICogbG9jYWwtXHUwMDNlcnhfbG9jay5cbiAxNjQ6XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkwNQoJCQkJCQkJb3V0cHV0OiAyMTAKCQkJCQkJCXRob3VnaHRzOiA3MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IExlYWsgRml4IGFuZCBLTVNBTiBJbXBsaWNhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvbWFjODAyMTU0L3J4LmNgLiAgQmFzaWNhbGx5LCBpdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXg6IGluIGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lYCwgd2hlbiBhIGBtYWNfcGt0YCBpcyBxdWV1ZWQsIHdlJiMzOTtyZSBjaGFuZ2luZyBob3cgd2UgaGFuZGxlIHRoZSBgc2tiYC4gUHJldmlvdXNseSwgd2Ugd2VyZSBkb2luZyBgbWFjX3BrdC0mZ3Q7c2tiID0gc2tiX2dldChza2IpO2AgYW5kIHJldHVybmluZyBgTkVUX1JYX1NVQ0NFU1NgIHdpdGhvdXQgZHJvcHBpbmcgdGhlIG9yaWdpbmFsIGBza2JgIHJlZmVyZW5jZS4gVGhpcyBtZWFudCB0aGUgYHNrYmAgcmVmY291bnQgd2FzIGJ1bXBlZCwgYnV0IG5ldmVyIGRlY3JlbWVudGVkIGluIHRoaXMgcGF0aCwgbGVhZGluZyB0byBhIGNsYXNzaWMgbWVtb3J5IGxlYWsuIFRoZSB3b3JrZXIgd291bGQgZXZlbnR1YWxseSBmcmVlIGl0IG9uY2UsIGJ1dCB0aGUgcmVmY291bnQgd291bGQgYmUgd3JvbmcuCgpUaGUgcGF0Y2gmIzM5O3Mgc29sdXRpb24gaXMgc2ltcGxlIGFuZCBlbGVnYW50OiByZXBsYWNlIHRoYXQgd2l0aCBgbWFjX3BrdC0mZ3Q7c2tiID0gc2tiO2AuICBUaGlzIHRyYW5zZmVycyAqb3duZXJzaGlwKiBvZiB0aGUgYHNrYmAgdG8gYG1hY19wa3RgIGltbWVkaWF0ZWx5LCBmaXhpbmcgdGhlIGxlYWsuIE5vIG1vcmUgdW5uZWNlc3NhcnkgcmVmY291bnQgaW5jcmVtZW50cy4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBJJiMzOTt2ZSBydW4gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OgoKMS4gICoqVXNlci1zcGFjZSBleHBvc3VyZToqKiBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG1pZ2h0IGxlYWsgaW5mby4gYG1hY19wa3RgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAsIHdoaWNoIGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbi4gVGhpcyBpcyBnb29kLgoyLiAgKipVbmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGFyZSBiZWluZyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIHdpdGggdGhpcyBjaGFuZ2UuCjMuICAqKkJ1ZmZlciBoYW5kbGluZzoqKiBObyBjaGFuZ2VzIHRvIGJ1ZmZlciBsZW5ndGhzLCBib3VuZHMgY2hlY2tzLCBvciBsb2dpYyB0aGF0IHdvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzLgo0LiAgKipCdWcgdHlwZToqKiBUaGlzIGlzIHN0cmljdGx5IGEgcmVmZXJlbmNlIGNvdW50IGxlYWsuICBJZiBzb21ldGhpbmcgZWxzZSB3YXMgYnJva2VuLCB0aGVyZSAqbWlnaHQqIGJlIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlLCBidXQgS0FTQU4gYW5kIGttZW1sZWFrIGFyZSBhbHJlYWR5IHBlcmZlY3RseSBzdWl0ZWQgdG8gY2F0Y2ggdGhvc2UuCgpTbywgd2hlcmUgZG9lcyBLTVNBTiBmaXQgaW4/IFdlIHVzZSBLTVNBTiBmb3IgZmluZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mbyBsZWFrcywgbm90IHJlZmVyZW5jZSBjb3VudCBlcnJvcnMuIFRoaXMgcGF0Y2ggKm9ubHkqIGFkZHJlc3NlcyByZWZlcmVuY2UgY291bnRpbmcuICBUaGUgY2hhbmdlIGF2b2lkcyB0YWtpbmcgYW4gKmV4dHJhKiByZWZjb3VudCwgYW5kIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgZXhwb3NlZCB0byB1c2VyLXNwYWNlIGFzIHBhcnQgb2YgdGhpcy4gU3RhbmRhcmQgbWVtb3J5IGRlYnVnZ2luZyB0b29scyBsaWtlIEtBU0FOLCBrbWVtbGVhaywgZXRjLiwgYXJlIHN1ZmZpY2llbnQgZm9yIGRldGVjdGluZyB0aGUgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgdHlwZSBvZiBtZW1vcnkgbWFuYWdlbWVudC4KClNvLCBpbiBzdW1tYXJ5OgoKKiAgICoqQ29udGV4dDoqKiBQYXRjaCBtb2RpZmllcyBgbmV0L21hYzgwMjE1NC9yeC5jYCBieSByZW1vdmluZyB0aGUgYHNrYl9nZXRgIGNhbGwgd2hlbiBlbnF1ZXVpbmcgYmVhY29uIGFuZCBNQUMgY29tbWFuZCBwYWNrZXRzLgoqICAgKipJbXBhY3Q6KiogRml4ZXMgYSBtZW1vcnkgbGVhayBjYXVzZWQgYnkgYW4gdW5uZWNlc3NhcnkgcmVmZXJlbmNlIGNvdW50IG9uIHRoZSBgc2tiYC4KKiAgICoqS01TQU4gQXBwbGljYWJpbGl0eToqKiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zIG9yIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBmaWVsZHMuCiogICAqKktBU0FOL0dlbmVyYWwgU2FuaXRpemVyczoqKiBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgbWVtb3J5IGRlYnVnZ2luZyB0b29scyBhcmUgc3VmZmljaWVudCBmb3IgaGFuZGxpbmcgdGhlIHJlZmNvdW50IHJlbGF0ZWQgaXNzdWVzLgoKSSYjMzk7bSBjb25maWRlbnQgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAgaGVyZS4gIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZSgpYCBpbiBgbmV0L21hYzgwMjE1NC9yeC5jYCB0byBhc3NpZ24gYG1hY19wa3QtXHUwMDNlc2tiID0gc2tiYCBkaXJlY3RseSBpbnN0ZWFkIG9mIGNhbGxpbmcgYHNrYl9nZXQoc2tiKWAuIFRoaXMgYXZvaWRzIHRha2luZyBhbiBleHRyYSByZWZjb3VudCB3aGVuIHRyYW5zZmVycmluZyBvd25lcnNoaXAgb2YgdGhlIHNrYiB0byB0aGUgYXN5bmNocm9ub3VzIGJlYWNvbi9NQUMgY29tbWFuZCBwcm9jZXNzaW5nIHdvcmtlcnMsIGZpeGluZyBhbiBza2IgcmVmZXJlbmNlIGNvdW50IC8gbWVtb3J5IGxlYWsuXG5cblRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBwYWRkaW5nLCBvciBleHBvc2Uga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS4gYG1hY19wa3RgIGlzIGFscmVhZHkgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iaigpYC4gUmVmZXJlbmNlIGNvdW50aW5nIGFuZCBtZW1vcnkgbGlmZWN5Y2xlIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLCB3aXRoIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgZGV0ZWN0YWJsZSBvbmx5IGJ5IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGllZWU4MDIxNTRfc3ViaWZfZnJhbWUoKWAgaW4gYG5ldC9tYWM4MDIxNTQvcnguY2AgdG8gYXNzaWduIGBtYWNfcGt0LVx1MDAzZXNrYiA9IHNrYmAgZGlyZWN0bHkgaW5zdGVhZCBvZiBjYWxsaW5nIGBza2JfZ2V0KHNrYilgLiBUaGlzIGF2b2lkcyB0YWtpbmcgYW4gZXh0cmEgcmVmY291bnQgd2hlbiB0cmFuc2ZlcnJpbmcgb3duZXJzaGlwIG9mIHRoZSBza2IgdG8gdGhlIGFzeW5jaHJvbm91cyBiZWFjb24vTUFDIGNvbW1hbmQgcHJvY2Vzc2luZyB3b3JrZXJzLCBmaXhpbmcgYW4gc2tiIHJlZmVyZW5jZSBjb3VudCAvIG1lbW9yeSBsZWFrLlxuXG5UaGUgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZXhwb3NlIGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIGBtYWNfcGt0YCBpcyBhbHJlYWR5IGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmooKWAuIFJlZmVyZW5jZSBjb3VudGluZyBhbmQgbWVtb3J5IGxpZmVjeWNsZSBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBsZWFrIGRldGVjdG9ycywgd2l0aCBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGRldGVjdGFibGUgb25seSBieSBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6Mjk6NTUuMjM3Nzg2NjgxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkwNTU5MTc0ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSUVFRTgwMjE1NFwiLFxuICAgIFwiTUFDODAyMTU0XCIsXG4gICAgXCJJRUVFODAyMTU0X0RSSVZFUlNcIixcbiAgICBcIklFRUU4MDIxNTRfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTU0X3N1YmlmX2ZyYW1lXCIsXG4gICAgXCJtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlclwiLFxuICAgIFwibWFjODAyMTU0X3J4X21hY19jbWRfd29ya2VyXCIsXG4gICAgXCJpZWVlODAyMTU0X3J4XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZSgpYCBpbiBgbmV0L21hYzgwMjE1NC9yeC5jYCB0byBhc3NpZ24gYG1hY19wa3QtXFx1MDAzZXNrYiA9IHNrYmAgZGlyZWN0bHkgaW5zdGVhZCBvZiBjYWxsaW5nIGBza2JfZ2V0KHNrYilgLiBUaGlzIGF2b2lkcyB0YWtpbmcgYW4gZXh0cmEgcmVmY291bnQgd2hlbiB0cmFuc2ZlcnJpbmcgb3duZXJzaGlwIG9mIHRoZSBza2IgdG8gdGhlIGFzeW5jaHJvbm91cyBiZWFjb24vTUFDIGNvbW1hbmQgcHJvY2Vzc2luZyB3b3JrZXJzLCBmaXhpbmcgYW4gc2tiIHJlZmVyZW5jZSBjb3VudCAvIG1lbW9yeSBsZWFrLlxcblxcblRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBwYWRkaW5nLCBvciBleHBvc2Uga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS4gYG1hY19wa3RgIGlzIGFscmVhZHkgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iaigpYC4gUmVmZXJlbmNlIGNvdW50aW5nIGFuZCBtZW1vcnkgbGlmZWN5Y2xlIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLCB3aXRoIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgZGV0ZWN0YWJsZSBvbmx5IGJ5IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNrX2J1ZmYgcmVmZXJlbmNlIGNvdW50IGhhbmRsaW5nIGluIGllZWU4MDIxNTRfc3ViaWZfZnJhbWUoKSBieSByZW1vdmluZyBza2JfZ2V0KCkgY2FsbHMgd2hlbiBlbnF1ZXVpbmcgYmVhY29uIGFuZCBNQUMgY29tbWFuZCBwYWNrZXRzIHRvIGFzeW5jaHJvbm91cyB3b3JrZXIgcXVldWVzLiBUaGlzIHJlYWNoYWJsZSBuZXR3b3JraW5nIHBhdGggY2FuIGJlIHRlc3RlZCB2aWEgbWFjODAyMTU0X2h3c2ltIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIHZlcmlmeSBza2IgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBjb3JyZWN0bmVzcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6Mjk6NTUuMjM3NzkwOTIxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAyMDg3MDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzQyNTk2OGJjNGNmNTM5MjJhNWM2OTM2Nzk3YWQzNjVjZWNkMzAyNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCA2IDExOjI5OjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxNTQvcnguYyBiL25ldC9tYWM4MDIxNTQvcnguY1xcbmluZGV4IDE5YjUzODJlODVhODQuLmFkNjAyZDIyMmU4NjEgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjE1NC9yeC5jXFxuKysrIGIvbmV0L21hYzgwMjE1NC9yeC5jXFxuQEAgLTI4Nyw3ICsyODcsNyBAQCBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTU0X3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0aWYgKCFtYWNfcGt0KVxcbiBcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIFxcbi1cXHRcXHRtYWNfcGt0LVxcdTAwM2Vza2IgPSBza2JfZ2V0KHNrYik7XFxuK1xcdFxcdG1hY19wa3QtXFx1MDAzZXNrYiA9IHNrYjtcXG4gXFx0XFx0bWFjX3BrdC1cXHUwMDNlc2RhdGEgPSBzZGF0YTtcXG4gXFx0XFx0bWFjX3BrdC1cXHUwMDNlcGFnZSA9IHNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlc2Nhbl9wYWdlO1xcbiBcXHRcXHRtYWNfcGt0LVxcdTAwM2VjaGFubmVsID0gc2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VzY2FuX2NoYW5uZWw7XFxuQEAgLTMwNCw3ICszMDQsNyBAQCBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTU0X3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0aWYgKCFtYWNfcGt0KVxcbiBcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIFxcbi1cXHRcXHRtYWNfcGt0LVxcdTAwM2Vza2IgPSBza2JfZ2V0KHNrYik7XFxuK1xcdFxcdG1hY19wa3QtXFx1MDAzZXNrYiA9IHNrYjtcXG4gXFx0XFx0bWFjX3BrdC1cXHUwMDNlc2RhdGEgPSBzZGF0YTtcXG4gXFx0XFx0bmV0ZGV2X2hvbGQoc2RhdGEtXFx1MDAzZWRldiwgXFx1MDAyNm1hY19wa3QtXFx1MDAzZWRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4gXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZXJ4X2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMToyOTo1Ni42NDA1MTQ4OTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUzMzY3OTkzNzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklFRUU4MDIxNTRcIixcbiAgICBcIk1BQzgwMjE1NFwiLFxuICAgIFwiSUVFRTgwMjE1NF9EUklWRVJTXCIsXG4gICAgXCJJRUVFODAyMTU0X0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWVlZTgwMjE1NF9zdWJpZl9mcmFtZVwiLFxuICAgIFwibWFjODAyMTU0X3J4X2JlYWNvbl93b3JrZXJcIixcbiAgICBcIm1hYzgwMjE1NF9yeF9tYWNfY21kX3dvcmtlclwiLFxuICAgIFwiaWVlZTgwMjE1NF9yeFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNrX2J1ZmYgcmVmZXJlbmNlIGNvdW50IGhhbmRsaW5nIGluIGllZWU4MDIxNTRfc3ViaWZfZnJhbWUoKSBieSByZW1vdmluZyBza2JfZ2V0KCkgY2FsbHMgd2hlbiBlbnF1ZXVpbmcgYmVhY29uIGFuZCBNQUMgY29tbWFuZCBwYWNrZXRzIHRvIGFzeW5jaHJvbm91cyB3b3JrZXIgcXVldWVzLiBUaGlzIHJlYWNoYWJsZSBuZXR3b3JraW5nIHBhdGggY2FuIGJlIHRlc3RlZCB2aWEgbWFjODAyMTU0X2h3c2ltIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIHZlcmlmeSBza2IgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBjb3JyZWN0bmVzcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNDI1OTY4YmM0Y2Y1MzkyMmE1YzY5MzY3OTdhZDM2NWNlY2QzMDI0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAxMToyOTo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxNTQvcnguYyBiL25ldC9tYWM4MDIxNTQvcnguY1xuaW5kZXggMTliNTM4MmU4NWE4NC4uYWQ2MDJkMjIyZTg2MSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxNTQvcnguY1xuKysrIGIvbmV0L21hYzgwMjE1NC9yeC5jXG5AQCAtMjg3LDcgKzI4Nyw3IEBAIGllZWU4MDIxNTRfc3ViaWZfZnJhbWUoc3RydWN0IGllZWU4MDIxNTRfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRpZiAoIW1hY19wa3QpXG4gXHRcdFx0Z290byBmYWlsO1xuIFxuLVx0XHRtYWNfcGt0LVx1MDAzZXNrYiA9IHNrYl9nZXQoc2tiKTtcbitcdFx0bWFjX3BrdC1cdTAwM2Vza2IgPSBza2I7XG4gXHRcdG1hY19wa3QtXHUwMDNlc2RhdGEgPSBzZGF0YTtcbiBcdFx0bWFjX3BrdC1cdTAwM2VwYWdlID0gc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlc2Nhbl9wYWdlO1xuIFx0XHRtYWNfcGt0LVx1MDAzZWNoYW5uZWwgPSBzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VzY2FuX2NoYW5uZWw7XG5AQCAtMzA0LDcgKzMwNCw3IEBAIGllZWU4MDIxNTRfc3ViaWZfZnJhbWUoc3RydWN0IGllZWU4MDIxNTRfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRpZiAoIW1hY19wa3QpXG4gXHRcdFx0Z290byBmYWlsO1xuIFxuLVx0XHRtYWNfcGt0LVx1MDAzZXNrYiA9IHNrYl9nZXQoc2tiKTtcbitcdFx0bWFjX3BrdC1cdTAwM2Vza2IgPSBza2I7XG4gXHRcdG1hY19wa3QtXHUwMDNlc2RhdGEgPSBzZGF0YTtcbiBcdFx0bmV0ZGV2X2hvbGQoc2RhdGEtXHUwMDNlZGV2LCBcdTAwMjZtYWNfcGt0LVx1MDAzZWRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcbiBcdFx0c3Bpbl9sb2NrKFx1MDAyNnNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZXJ4X2xvY2spO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6Mjk6NTYuNjQwNTE2Mzc1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA1MDc3ODY1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBtYWM4MDIxNTQgUlggUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGlzIGRpZmYgcHJlc2VudGVkIHRvIG1lLiBJdCdzIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2Ugd2l0aGluIHRoZSBgbmV0L21hYzgwMjE1NC9yeC5jYCBmaWxlLiBUaGUgaW5kZXggbGluZXMgaW5kaWNhdGUgYSB2ZXJzaW9uZWQgY2hhbmdlLCBzbyB0aGlzIGlzIGxpa2VseSBhIHRhcmdldGVkIGJ1ZyBmaXggb3Igb3B0aW1pemF0aW9uLiBJIHNlZSBhIGNvdXBsZSBvZiBpbnN0YW5jZXMgb2Ygd2hhdCBsb29rcyBsaWtlIGEgcG90ZW50aWFsIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZS4gSXQgc2VlbXMgd2UncmUgbW92aW5nIGZyb20gYSBgc2tiX2dldChza2IpYCBjYWxsIHRvIGp1c3QgdXNpbmcgYHNrYmAgZGlyZWN0bHkgd2hlbiBhc3NpZ25pbmcgdG8gYG1hY19wa3QtXHUwMDNlc2tiYC4gVGhpcyBsaWtlbHkgaGFzIHRvIGRvIHdpdGggc29tZSBzaGFyZWQgbWVtb3J5IGhhbmRsaW5nIGFuZCBlbnN1cmluZyB0aGUgbWVtb3J5IGlzbid0IGR1cGxpY2F0ZWQuIFRoZSBgbmV0ZGV2X2hvbGRgIGNhbGwgYW5kIHNwaW5sb2NrIHVzYWdlIGZ1cnRoZXIgc3VnZ2VzdCB0aGlzIG1pZ2h0IHJlbGF0ZSB0byBzaGFyZWQgc3RhdGUgb3IgcmVzb3VyY2UgYWNjZXNzLCB3aGljaCBpcyBzb21ldGhpbmcgSSdsbCBrZWVwIGluIG1pbmQgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpdGggYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgYWx0ZXJhdGlvbiB3YXMgY2hvc2VuIGFuZCBpZiBpdCBpbnRyb2R1Y2VzIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yLiBJJ20ga2VlbiB0byBldmFsdWF0ZSB0aGUgb3ZlcmFsbCBpbXBsaWNhdGlvbnMgZm9yIHBhY2tldCBoYW5kbGluZyBhbmQgcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNjAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMDowNy4xNDgzMDU4NzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTU0L3J4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjYwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjYwOlxcdFxcdGRlZmF1bHQ6XFxuIDI2MTpcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiaW52YWxpZCBkZXN0IG1vZGVcXFxcblxcXCIpO1xcbiAyNjI6XFx0XFx0XFx0Z290byBmYWlsO1xcbiAyNjM6XFx0XFx0fVxcbiAyNjQ6XFx0XFxuIDI2NTpcXHRcXHRza2ItXFx1MDAzZWRldiA9IHNkYXRhLVxcdTAwM2VkZXY7XFxuIDI2NjpcXHRcXG4gMjY3OlxcdFxcdC8qIFRPRE8gdGhpcyBzaG91bGQgYmUgbW92ZWQgYWZ0ZXIgbmV0aWZfcmVjZWl2ZV9za2IgY2FsbCwgb3RoZXJ3aXNlXFxuIDI2ODpcXHRcXHQgKiB3aXJlc2hhcmsgd2lsbCBzaG93IGEgbWFjIGhlYWRlciB3aXRoIHNlY3VyaXR5IGZpZWxkcyBhbmQgdGhlXFxuIDI2OTpcXHRcXHQgKiBwYXlsb2FkIGlzIGFscmVhZHkgZGVjcnlwdGVkLlxcbiAyNzA6XFx0XFx0ICovXFxuIDI3MTpcXHRcXHRyYyA9IG1hYzgwMjE1NF9sbHNlY19kZWNyeXB0KFxcdTAwMjZzZGF0YS1cXHUwMDNlc2VjLCBza2IpO1xcbiAyNzI6XFx0XFx0aWYgKHJjKSB7XFxuIDI3MzpcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiZGVjcnlwdGlvbiBmYWlsZWQ6ICVpXFxcXG5cXFwiLCByYyk7XFxuIDI3NDpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIDI3NTpcXHRcXHR9XFxuIDI3NjpcXHRcXG4gMjc3OlxcdFxcdHNkYXRhLVxcdTAwM2VkZXYtXFx1MDAzZXN0YXRzLnJ4X3BhY2tldHMrKztcXG4gMjc4OlxcdFxcdHNkYXRhLVxcdTAwM2VkZXYtXFx1MDAzZXN0YXRzLnJ4X2J5dGVzICs9IHNrYi1cXHUwMDNlbGVuO1xcbiAyNzk6XFx0XFxuIDI4MDpcXHRcXHRzd2l0Y2ggKG1hY19jYihza2IpLVxcdTAwM2V0eXBlKSB7XFxuIDI4MTpcXHRcXHRjYXNlIElFRUU4MDIxNTRfRkNfVFlQRV9CRUFDT046XFxuIDI4MjpcXHRcXHRcXHRkZXZfZGJnKFxcdTAwMjZzZGF0YS1cXHUwMDNlZGV2LVxcdTAwM2VkZXYsIFxcXCJCRUFDT04gcmVjZWl2ZWRcXFxcblxcXCIpO1xcbiAyODM6XFx0XFx0XFx0aWYgKCFtYWM4MDIxNTRfaXNfc2Nhbm5pbmcoc2RhdGEtXFx1MDAzZWxvY2FsKSlcXG4gMjg0OlxcdFxcdFxcdFxcdGdvdG8gZmFpbDtcXG4gMjg1OlxcdFxcbiAyODY6XFx0XFx0XFx0bWFjX3BrdCA9IGt6YWxsb2Nfb2JqKCptYWNfcGt0LCBHRlBfQVRPTUlDKTtcXG4gMjg3OlxcdFxcdFxcdGlmICghbWFjX3BrdClcXG4gMjg4OlxcdFxcdFxcdFxcdGdvdG8gZmFpbDtcXG4gMjg5OlxcdFxcbiAyOTA6XFx0XFx0XFx0bWFjX3BrdC1cXHUwMDNlc2tiID0gc2tiO1xcbiAyOTE6XFx0XFx0XFx0bWFjX3BrdC1cXHUwMDNlc2RhdGEgPSBzZGF0YTtcXG4gMjkyOlxcdFxcdFxcdG1hY19wa3QtXFx1MDAzZXBhZ2UgPSBzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZXNjYW5fcGFnZTtcXG4gMjkzOlxcdFxcdFxcdG1hY19wa3QtXFx1MDAzZWNoYW5uZWwgPSBzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZXNjYW5fY2hhbm5lbDtcXG4gMjk0OlxcdFxcdFxcdG5ldGRldl9ob2xkKHNkYXRhLVxcdTAwM2VkZXYsIFxcdTAwMjZtYWNfcGt0LVxcdTAwM2VkZXZfdHJhY2tlciwgR0ZQX0FUT01JQyk7XFxuIDI5NTpcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNnNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlcnhfbG9jayk7XFxuIDI5NjpcXHRcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZtYWNfcGt0LVxcdTAwM2Vub2RlLCBcXHUwMDI2c2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VyeF9iZWFjb25fbGlzdCk7XFxuIDI5NzpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VyeF9sb2NrKTtcXG4gMjk4OlxcdFxcdFxcdHF1ZXVlX3dvcmsoc2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VtYWNfd3EsIFxcdTAwMjZzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZXJ4X2JlYWNvbl93b3JrKTtcXG4gMjk5OlxcdFxcdFxcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcXG4gMzAwOlxcdFxcbiAzMDE6XFx0XFx0Y2FzZSBJRUVFODAyMTU0X0ZDX1RZUEVfTUFDX0NNRDpcXG4gMzAyOlxcdFxcdFxcdGRldl9kYmcoXFx1MDAyNnNkYXRhLVxcdTAwM2VkZXYtXFx1MDAzZWRldiwgXFxcIk1BQyBDT01NQU5EIHJlY2VpdmVkXFxcXG5cXFwiKTtcXG4gMzAzOlxcdFxcdFxcdG1hY19wa3QgPSBremFsbG9jX29iaigqbWFjX3BrdCwgR0ZQX0FUT01JQyk7XFxuIDMwNDpcXHRcXHRcXHRpZiAoIW1hY19wa3QpXFxuIDMwNTpcXHRcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIDMwNjpcXHRcXG4gMzA3OlxcdFxcdFxcdG1hY19wa3QtXFx1MDAzZXNrYiA9IHNrYjtcXG4gMzA4OlxcdFxcdFxcdG1hY19wa3QtXFx1MDAzZXNkYXRhID0gc2RhdGE7XFxuIDMwOTpcXHRcXHRcXHRuZXRkZXZfaG9sZChzZGF0YS1cXHUwMDNlZGV2LCBcXHUwMDI2bWFjX3BrdC1cXHUwMDNlZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xcbiAzMTA6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZXJ4X2xvY2spO1xcbiAzMTE6XFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2bWFjX3BrdC1cXHUwMDNlbm9kZSwgXFx1MDAyNnNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlcnhfbWFjX2NtZF9saXN0KTtcXG4gMzEyOlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZXJ4X2xvY2spO1xcbiAzMTM6XFx0XFx0XFx0cXVldWVfd29yayhzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZW1hY193cSwgXFx1MDAyNnNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlcnhfbWFjX2NtZF93b3JrKTtcXG4gMzE0OlxcdFxcdFxcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcXG4gMzE1OlxcdFxcbiAzMTY6XFx0XFx0Y2FzZSBJRUVFODAyMTU0X0ZDX1RZUEVfQUNLOlxcbiAzMTc6XFx0XFx0XFx0Z290byBmYWlsO1xcbiAzMTg6XFx0XFxuIDMxOTpcXHRcXHRjYXNlIElFRUU4MDIxNTRfRkNfVFlQRV9EQVRBOlxcbiAzMjA6XFx0XFx0XFx0cmV0dXJuIGllZWU4MDIxNTRfZGVsaXZlcl9za2Ioc2tiKTtcXG4gMzIxOlxcdFxcdGRlZmF1bHQ6XFxuIDMyMjpcXHRcXHRcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCJpZWVlODAyMTU0OiBiYWQgZnJhbWUgcmVjZWl2ZWQgXFxcIlxcbiAzMjM6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCIodHlwZSA9ICVkKVxcXFxuXFxcIiwgbWFjX2NiKHNrYiktXFx1MDAzZXR5cGUpO1xcbiAzMjQ6XFx0XFx0XFx0Z290byBmYWlsO1xcbiAzMjU6XFx0XFx0fVxcbiAzMjY6XFx0XFxuIDMyNzpcXHRmYWlsOlxcbiAzMjg6XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDMyOTpcXHRcXHRyZXR1cm4gTkVUX1JYX0RST1A7XFxuIDMzMDpcXHR9XFxuIDMzMTpcXHRcXG4gMzMyOlxcdHN0YXRpYyB2b2lkXFxuIDMzMzpcXHRpZWVlODAyMTU0X3ByaW50X2FkZHIoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGllZWU4MDIxNTRfYWRkciAqYWRkcilcXG4gMzM0OlxcdHtcXG4gMzM1OlxcdFxcdGlmIChhZGRyLVxcdTAwM2Vtb2RlID09IElFRUU4MDIxNTRfQUREUl9OT05FKSB7XFxuIDMzNjpcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiJXMgbm90IHByZXNlbnRcXFxcblxcXCIsIG5hbWUpO1xcbiAzMzc6XFx0XFx0XFx0cmV0dXJuO1xcbiAzMzg6XFx0XFx0fVxcbiAzMzk6XFx0XFxuIDM0MDpcXHRcXHRwcl9kZWJ1ZyhcXFwiJXMgUEFOIElEOiAlMDR4XFxcXG5cXFwiLCBuYW1lLCBsZTE2X3RvX2NwdShhZGRyLVxcdTAwM2VwYW5faWQpKTtcXG4gMzQxOlxcdFxcdGlmIChhZGRyLVxcdTAwM2Vtb2RlID09IElFRUU4MDIxNTRfQUREUl9TSE9SVCkge1xcbiAzNDI6XFx0XFx0XFx0cHJfZGVidWcoXFxcIiVzIGlzIHNob3J0OiAlMDR4XFxcXG5cXFwiLCBuYW1lLFxcbiAzNDM6XFx0XFx0XFx0XFx0IGxlMTZfdG9fY3B1KGFkZHItXFx1MDAzZXNob3J0X2FkZHIpKTtcXG4gMzQ0OlxcdFxcdH0gZWxzZSB7XFxuIDM0NTpcXHRcXHRcXHR1NjQgaHcgPSBzd2FiNjQoKF9fZm9yY2UgdTY0KWFkZHItXFx1MDAzZWV4dGVuZGVkX2FkZHIpO1xcbiAzNDY6XFx0XFxuIDM0NzpcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiJXMgaXMgaGFyZHdhcmU6ICU4cGhDXFxcXG5cXFwiLCBuYW1lLCBcXHUwMDI2aHcpO1xcbiAzNDg6XFx0XFx0fVxcbiAzNDk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMDowNy4xNDgzODYzMDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDM0MTU5Nzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTUFDODAyMTU0IFJlY2VpdmUgUGF0aCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gdW5kZXJzdGFuZCB0aGUgcmVjZWl2ZSBwcm9jZXNzIGZvciBtYWM4MDIxNTQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGNvbnRleHQgb2YgYGllZWU4MDIxNTRfc3ViaWZfZnJhbWVgLCB0aGF0J3MgdGhlIGtleSBlbnRyeSBwb2ludC4gVGhhdCBsaWtlbHkgaGFzIGFsbCB0aGUgc3BlY2lmaWNzIG9mIHRoZSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBhbmQgd2hhdCdzIGhhcHBlbmluZyBhdCB0aGUgc3ViaW50ZXJmYWNlIGxldmVsLiBUbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSeKAmWxsIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIGZyb20gdGhlIGByeC5jYCBmaWxlLiBJJ2xsIHJlYWQgYmFja3dhcmRzIGluIHRoYXQgZmlsZSwgbG9va2luZyBmb3IgdGhlIGluaXRpYWwgY2FsbCwgYW5kIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9uIGNhbGxzIGFuZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIExldCdzIHNlZSBob3cgdGhlIE1BQyBsYXllciByZWNlaXZlcyB0aGUgaW5jb21pbmcgZnJhbWVzIGFuZCBwYXNzZXMgdGhlbSB1cCB0aGUgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMzIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjMwOjA5LjU4MjU0ODcyMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxNTQvcnguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMiBTaWVtZW5zIEFHXFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogV3JpdHRlbiBieTpcXG4gICA2OlxcdCAqIFBhdmVsIFNtb2xlbnNraXkgXFx1MDAzY3BhdmVsLnNtb2xlbnNraXlAZ21haWwuY29tXFx1MDAzZVxcbiAgIDc6XFx0ICogTWF4aW0gR29yYmFjaHlvdiBcXHUwMDNjbWF4aW0uZ29yYmFjaGV2QHNpZW1lbnMuY29tXFx1MDAzZVxcbiAgIDg6XFx0ICogRG1pdHJ5IEVyZW1pbi1Tb2xlbmlrb3YgXFx1MDAzY2RiYXJ5c2hrb3ZAZ21haWwuY29tXFx1MDAzZVxcbiAgIDk6XFx0ICogQWxleGFuZGVyIFNtaXJub3YgXFx1MDAzY2FsZXguYmx1ZXNtYW4uc21pcm5vdkBnbWFpbC5jb21cXHUwMDNlXFxuICAxMDpcXHQgKi9cXG4gIDExOlxcdFxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbiAgMTU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NyYy1jY2l0dC5oXFx1MDAzZVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXFx1MDAzZVxcbiAgMTc6XFx0XFxuICAxODpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L21hYzgwMjE1NC5oXFx1MDAzZVxcbiAgMTk6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9pZWVlODAyMTU0X25ldGRldi5oXFx1MDAzZVxcbiAgMjA6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9ubDgwMjE1NC5oXFx1MDAzZVxcbiAgMjE6XFx0XFxuICAyMjpcXHQjaW5jbHVkZSBcXFwiaWVlZTgwMjE1NF9pLmhcXFwiXFxuICAyMzpcXHRcXG4gIDI0OlxcdHN0YXRpYyBpbnQgaWVlZTgwMjE1NF9kZWxpdmVyX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAgMjU6XFx0e1xcbiAgMjY6XFx0XFx0c2tiLVxcdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTtcXG4gIDI3OlxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JRUVFODAyMTU0KTtcXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0cmV0dXJuIG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7XFxuICAzMDpcXHR9XFxuICAzMTpcXHRcXG4gIDMyOlxcdHZvaWQgbWFjODAyMTU0X3J4X2JlYWNvbl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiAgMzM6XFx0e1xcbiAgMzQ6XFx0XFx0c3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsID1cXG4gIDM1OlxcdFxcdFxcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCwgcnhfYmVhY29uX3dvcmspO1xcbiAgMzY6XFx0XFx0c3RydWN0IGNmZzgwMjE1NF9tYWNfcGt0ICptYWNfcGt0O1xcbiAgMzc6XFx0XFxuICAzODpcXHRcXHRmb3IgKDs7KSB7XFxuICAzOTpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9sb2NrKTtcXG4gIDQwOlxcdFxcdFxcdG1hY19wa3QgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9iZWFjb25fbGlzdCxcXG4gIDQxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBjZmc4MDIxNTRfbWFjX3BrdCwgbm9kZSk7XFxuICA0MjpcXHRcXHRcXHRpZiAobWFjX3BrdClcXG4gIDQzOlxcdFxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZtYWNfcGt0LVxcdTAwM2Vub2RlKTtcXG4gIDQ0OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZsb2NhbC1cXHUwMDNlcnhfbG9jayk7XFxuICA0NTpcXHRcXHRcXHRpZiAoIW1hY19wa3QpXFxuICA0NjpcXHRcXHRcXHRcXHRicmVhaztcXG4gIDQ3OlxcdFxcbiAgNDg6XFx0XFx0XFx0bWFjODAyMTU0X3Byb2Nlc3NfYmVhY29uKGxvY2FsLCBtYWNfcGt0LVxcdTAwM2Vza2IsXFxuICA0OTpcXHRcXHRcXHRcXHRcXHRcXHQgbWFjX3BrdC1cXHUwMDNlcGFnZSwgbWFjX3BrdC1cXHUwMDNlY2hhbm5lbCk7XFxuICA1MDpcXHRcXG4gIDUxOlxcdFxcdFxcdG5ldGRldl9wdXQobWFjX3BrdC1cXHUwMDNlc2RhdGEtXFx1MDAzZWRldiwgXFx1MDAyNm1hY19wa3QtXFx1MDAzZWRldl90cmFja2VyKTtcXG4gIDUyOlxcdFxcdFxcdGtmcmVlX3NrYihtYWNfcGt0LVxcdTAwM2Vza2IpO1xcbiAgNTM6XFx0XFx0XFx0a2ZyZWUobWFjX3BrdCk7XFxuICA1NDpcXHRcXHR9XFxuICA1NTpcXHR9XFxuICA1NjpcXHRcXG4gIDU3OlxcdHN0YXRpYyBib29sIG1hYzgwMjE1NF9zaG91bGRfYW5zd2VyX2JlYWNvbl9yZXEoc3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsKVxcbiAgNTg6XFx0e1xcbiAgNTk6XFx0XFx0c3RydWN0IGNmZzgwMjE1NF9iZWFjb25fcmVxdWVzdCAqYmVhY29uX3JlcTtcXG4gIDYwOlxcdFxcdHVuc2lnbmVkIGludCBpbnRlcnZhbDtcXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAgNjM6XFx0XFx0YmVhY29uX3JlcSA9IHJjdV9kZXJlZmVyZW5jZShsb2NhbC1cXHUwMDNlYmVhY29uX3JlcSk7XFxuICA2NDpcXHRcXHRpZiAoIWJlYWNvbl9yZXEpIHtcXG4gIDY1OlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAgNjY6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgNjc6XFx0XFx0fVxcbiAgNjg6XFx0XFxuICA2OTpcXHRcXHRpbnRlcnZhbCA9IGJlYWNvbl9yZXEtXFx1MDAzZWludGVydmFsO1xcbiAgNzA6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdGlmICghbWFjODAyMTU0X2lzX2JlYWNvbmluZyhsb2NhbCkpXFxuICA3MzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuICA3NDpcXHRcXG4gIDc1OlxcdFxcdHJldHVybiBpbnRlcnZhbCA9PSBJRUVFODAyMTU0X0FDVElWRV9TQ0FOX0RVUkFUSU9OO1xcbiAgNzY6XFx0fVxcbiAgNzc6XFx0XFxuICA3ODpcXHRzdGF0aWMgdm9pZCBtYWM4MDIxNTRfcnhfbWFjX2NtZChzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwsXFxuICA3OTpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGNmZzgwMjE1NF9tYWNfcGt0ICptYWNfcGt0KVxcbiAgODA6XFx0e1xcbiAgODE6XFx0XFx0dTggbWFjX2NtZDtcXG4gIDgyOlxcdFxcdGludCByYztcXG4gIDgzOlxcdFxcbiAgODQ6XFx0XFx0cmMgPSBpZWVlODAyMTU0X2dldF9tYWNfY21kKG1hY19wa3QtXFx1MDAzZXNrYiwgXFx1MDAyNm1hY19jbWQpO1xcbiAgODU6XFx0XFx0aWYgKHJjKVxcbiAgODY6XFx0XFx0XFx0cmV0dXJuO1xcbiAgODc6XFx0XFxuICA4ODpcXHRcXHRzd2l0Y2ggKG1hY19jbWQpIHtcXG4gIDg5OlxcdFxcdGNhc2UgSUVFRTgwMjE1NF9DTURfQkVBQ09OX1JFUTpcXG4gIDkwOlxcdFxcdFxcdGRldl9kYmcoXFx1MDAyNm1hY19wa3QtXFx1MDAzZXNkYXRhLVxcdTAwM2VkZXYtXFx1MDAzZWRldiwgXFxcInByb2Nlc3NpbmcgQkVBQ09OIFJFUVxcXFxuXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjMwOjA5LjU4MjYzMTIyMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MTM3MTkyMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgQmVhY29uIGFuZCBNQUMgQ29tbWFuZCBQcm9jZXNzaW5nIGluIHRoZSA4MDIuMTUuNCBTdGFjayoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgYmVhY29uIGFuZCBNQUMgY29tbWFuZCByZWNlcHRpb24gYXJlIGhhbmRsZWQgaW4gdGhlIDgwMi4xNS40IGRyaXZlci4gRmlyc3QsIGBtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlcmAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyByZXNwb25zaWJsZSBmb3IgdGhlIHByb2Nlc3Npbmcgb2YgYmVhY29uIGZyYW1lcy4gRnJvbSB0aGUgY29kZSBzbmlwcGV0LCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGl0IGNhbGxzIGBtYWM4MDIxNTRfcHJvY2Vzc19iZWFjb25gLCBwYXNzZXMgdGhlIHJlbGV2YW50IHBhY2tldCBkYXRhIOKAkyB0aGUgYHNrYmAsIHBhZ2UsIGFuZCBjaGFubmVsIOKAkyBhbmQgZ2V0cyB0byB3b3JrLiBGb2xsb3dpbmcgdGhhdCwgaXQgbmVhdGx5IGNsZWFucyB1cCB0aGUgbWVtb3J5OiBJdCByZWxlYXNlcyB0aGUgbmV0d29yayBkZXZpY2UgcmVmZXJlbmNlIHdpdGggYG5ldGRldl9wdXRgLCBmcmVlcyB0aGUgYHNrYmAgd2l0aCBga2ZyZWVfc2tiYCwgYW5kIGZpbmFsbHkgZnJlZXMgdGhlIGFsbG9jYXRlZCBgbWFjX3BrdGAgaXRzZWxmLiBUaGlzIHNob3dzIGEgd2VsbC1kZWZpbmVkIHByb2Nlc3MgdG8gbWUsIGVuc3VyaW5nIHByb3BlciByZXNvdXJjZSBtYW5hZ2VtZW50IGFmdGVyIHByb2Nlc3NpbmcuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IE1BQyBjb21tYW5kcyBhcmUgaGFuZGxlZCwgc28gSSdsbCBuZWVkIHRvIHR1cm4gbXkgYXR0ZW50aW9uIHRvIHRoZSBgbWFjODAyMTU0X3J4X21hY19jbWRfd29ya2VyYCBmdW5jdGlvbi4gSSB3aWxsIG5lZWQgdG8gY29uc3VsdCB0aGUgY29kZSBmcm9tIGxpbmVzIDkwIHRvIDIwMCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NzcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMDoxMS45OTYzNTI1MjRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTU0L3J4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTE6XFx0XFx0XFx0aWYgKCFtYWM4MDIxNTRfc2hvdWxkX2Fuc3dlcl9iZWFjb25fcmVxKGxvY2FsKSlcXG4gIDkyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAgOTM6XFx0XFxuICA5NDpcXHRcXHRcXHRxdWV1ZV9kZWxheWVkX3dvcmsobG9jYWwtXFx1MDAzZW1hY193cSwgXFx1MDAyNmxvY2FsLVxcdTAwM2ViZWFjb25fd29yaywgMCk7XFxuICA5NTpcXHRcXHRcXHRicmVhaztcXG4gIDk2OlxcdFxcbiAgOTc6XFx0XFx0Y2FzZSBJRUVFODAyMTU0X0NNRF9BU1NPQ0lBVElPTl9SRVNQOlxcbiAgOTg6XFx0XFx0XFx0ZGV2X2RiZyhcXHUwMDI2bWFjX3BrdC1cXHUwMDNlc2RhdGEtXFx1MDAzZWRldi1cXHUwMDNlZGV2LCBcXFwicHJvY2Vzc2luZyBBU1NPQyBSRVNQXFxcXG5cXFwiKTtcXG4gIDk5OlxcdFxcdFxcdGlmICghbWFjODAyMTU0X2lzX2Fzc29jaWF0aW5nKGxvY2FsKSlcXG4gMTAwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxMDE6XFx0XFxuIDEwMjpcXHRcXHRcXHRtYWM4MDIxNTRfcHJvY2Vzc19hc3NvY2lhdGlvbl9yZXNwKG1hY19wa3QtXFx1MDAzZXNkYXRhLCBtYWNfcGt0LVxcdTAwM2Vza2IpO1xcbiAxMDM6XFx0XFx0XFx0YnJlYWs7XFxuIDEwNDpcXHRcXG4gMTA1OlxcdFxcdGNhc2UgSUVFRTgwMjE1NF9DTURfQVNTT0NJQVRJT05fUkVROlxcbiAxMDY6XFx0XFx0XFx0ZGV2X2RiZyhcXHUwMDI2bWFjX3BrdC1cXHUwMDNlc2RhdGEtXFx1MDAzZWRldi1cXHUwMDNlZGV2LCBcXFwicHJvY2Vzc2luZyBBU1NPQyBSRVFcXFxcblxcXCIpO1xcbiAxMDc6XFx0XFx0XFx0aWYgKG1hY19wa3QtXFx1MDAzZXNkYXRhLVxcdTAwM2V3cGFuX2Rldi5pZnR5cGUgIT0gTkw4MDIxNTRfSUZUWVBFX0NPT1JEKVxcbiAxMDg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDEwOTpcXHRcXG4gMTEwOlxcdFxcdFxcdG1hYzgwMjE1NF9wcm9jZXNzX2Fzc29jaWF0aW9uX3JlcShtYWNfcGt0LVxcdTAwM2VzZGF0YSwgbWFjX3BrdC1cXHUwMDNlc2tiKTtcXG4gMTExOlxcdFxcdFxcdGJyZWFrO1xcbiAxMTI6XFx0XFxuIDExMzpcXHRcXHRjYXNlIElFRUU4MDIxNTRfQ01EX0RJU0FTU09DSUFUSU9OX05PVElGWTpcXG4gMTE0OlxcdFxcdFxcdGRldl9kYmcoXFx1MDAyNm1hY19wa3QtXFx1MDAzZXNkYXRhLVxcdTAwM2VkZXYtXFx1MDAzZWRldiwgXFxcInByb2Nlc3NpbmcgRElTQVNTT0MgTk9USUZcXFxcblxcXCIpO1xcbiAxMTU6XFx0XFx0XFx0aWYgKG1hY19wa3QtXFx1MDAzZXNkYXRhLVxcdTAwM2V3cGFuX2Rldi5pZnR5cGUgIT0gTkw4MDIxNTRfSUZUWVBFX0NPT1JEKVxcbiAxMTY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDExNzpcXHRcXG4gMTE4OlxcdFxcdFxcdG1hYzgwMjE1NF9wcm9jZXNzX2Rpc2Fzc29jaWF0aW9uX25vdGlmKG1hY19wa3QtXFx1MDAzZXNkYXRhLCBtYWNfcGt0LVxcdTAwM2Vza2IpO1xcbiAxMTk6XFx0XFx0XFx0YnJlYWs7XFxuIDEyMDpcXHRcXG4gMTIxOlxcdFxcdGRlZmF1bHQ6XFxuIDEyMjpcXHRcXHRcXHRicmVhaztcXG4gMTIzOlxcdFxcdH1cXG4gMTI0OlxcdH1cXG4gMTI1OlxcdFxcbiAxMjY6XFx0dm9pZCBtYWM4MDIxNTRfcnhfbWFjX2NtZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiAxMjc6XFx0e1xcbiAxMjg6XFx0XFx0c3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsID1cXG4gMTI5OlxcdFxcdFxcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCwgcnhfbWFjX2NtZF93b3JrKTtcXG4gMTMwOlxcdFxcdHN0cnVjdCBjZmc4MDIxNTRfbWFjX3BrdCAqbWFjX3BrdDtcXG4gMTMxOlxcdFxcbiAxMzI6XFx0XFx0Zm9yICg7Oykge1xcbiAxMzM6XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZsb2NhbC1cXHUwMDNlcnhfbG9jayk7XFxuIDEzNDpcXHRcXHRcXHRtYWNfcGt0ID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFxcdTAwMjZsb2NhbC1cXHUwMDNlcnhfbWFjX2NtZF9saXN0LFxcbiAxMzU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGNmZzgwMjE1NF9tYWNfcGt0LCBub2RlKTtcXG4gMTM2OlxcdFxcdFxcdGlmIChtYWNfcGt0KVxcbiAxMzc6XFx0XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNm1hY19wa3QtXFx1MDAzZW5vZGUpO1xcbiAxMzg6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9sb2NrKTtcXG4gMTM5OlxcdFxcdFxcdGlmICghbWFjX3BrdClcXG4gMTQwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNDE6XFx0XFxuIDE0MjpcXHRcXHRcXHQvKiBBIHN0b3BwZWQgaW50ZXJmYWNlIGNhbm5vdCB0cmFuc21pdDsgc2tpcHBpbmcgYXZvaWRzIGFcXG4gMTQzOlxcdFxcdFxcdCAqIG5lZWRsZXNzIGFzc29jaWF0aW9uIHJlc3BvbnNlIChhbmQgdGhlICFuZXRpZl9ydW5uaW5nKClcXG4gMTQ0OlxcdFxcdFxcdCAqIHdhcm5pbmcgaXQgd291bGQgdHJpcCkgZHVyaW5nIHRlYXJkb3duLiBUaGUgYmVhY29uIHdvcmtlclxcbiAxNDU6XFx0XFx0XFx0ICogbmVlZHMgbm8gc3VjaCBjaGVjayBhcyBpdCBuZXZlciB0cmFuc21pdHMuXFxuIDE0NjpcXHRcXHRcXHQgKi9cXG4gMTQ3OlxcdFxcdFxcdGlmIChpZWVlODAyMTU0X3NkYXRhX3J1bm5pbmcobWFjX3BrdC1cXHUwMDNlc2RhdGEpKVxcbiAxNDg6XFx0XFx0XFx0XFx0bWFjODAyMTU0X3J4X21hY19jbWQobG9jYWwsIG1hY19wa3QpO1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRcXHRcXHRuZXRkZXZfcHV0KG1hY19wa3QtXFx1MDAzZXNkYXRhLVxcdTAwM2VkZXYsIFxcdTAwMjZtYWNfcGt0LVxcdTAwM2VkZXZfdHJhY2tlcik7XFxuIDE1MTpcXHRcXHRcXHRrZnJlZV9za2IobWFjX3BrdC1cXHUwMDNlc2tiKTtcXG4gMTUyOlxcdFxcdFxcdGtmcmVlKG1hY19wa3QpO1xcbiAxNTM6XFx0XFx0fVxcbiAxNTQ6XFx0fVxcbiAxNTU6XFx0XFxuIDE1NjpcXHQvKipcXG4gMTU3OlxcdCAqIG1hYzgwMjE1NF9mbHVzaF9saXN0IC0gZnJlZSBxdWV1ZWQgUlggZnJhbWVzIG9uIEBsaXN0XFxuIDE1ODpcXHQgKiBAbGlzdDogcnhfYmVhY29uX2xpc3Qgb3IgcnhfbWFjX2NtZF9saXN0XFxuIDE1OTpcXHQgKiBAc2RhdGE6IG9ubHkgZnJlZSBmcmFtZXMgcmVjZWl2ZWQgb24gdGhpcyBpbnRlcmZhY2UsIG9yICVOVUxMIGZvciBhbGxcXG4gMTYwOlxcdCAqXFxuIDE2MTpcXHQgKiBFYWNoIGZyYW1lIHBpbnMgdGhlIG5ldF9kZXZpY2UgaXQgd2FzIHJlY2VpdmVkIG9uICh2aWEgbmV0ZGV2X2hvbGQoKSksXFxuIDE2MjpcXHQgKiBzbyByZWxlYXNlIHRoYXQgcmVmZXJlbmNlIGFzIHRoZSBmcmFtZSBpcyBkcm9wcGVkLiBDYWxsZXIgbXVzdCBob2xkXFxuIDE2MzpcXHQgKiBsb2NhbC1cXHUwMDNlcnhfbG9jay5cXG4gMTY0OlxcdCAqL1xcbiAxNjU6XFx0dm9pZCBtYWM4MDIxNTRfZmx1c2hfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbiAxNjY6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaWVlZTgwMjE1NF9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuIDE2NzpcXHR7XFxuIDE2ODpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTU0X21hY19wa3QgKm1hY19wa3QsICp0bXA7XFxuIDE2OTpcXHRcXG4gMTcwOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtYWNfcGt0LCB0bXAsIGxpc3QsIG5vZGUpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzA6MTEuOTk2NDM2MzI0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ1NDYwMzYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElFRUUgODAyLjE1LjQgRnJhbWUgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBkaXNzZWN0IHRoaXMuIEknbSBsb29raW5nIGF0IHRoZSBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgZnJhbWUgdHlwZSBpcyBlaXRoZXIgYSBiZWFjb24gb3IgYSBNQUMgY29tbWFuZC4gVGhlIGNvZGUgc25pcHBldCBtZW50aW9ucyBhbiBpbnRlcmVzdGluZyBiZWhhdmlvcjogaXQgYXBwZWFycyB0aGF0IGBza2JfZ2V0KHNrYilgIHdhcyBwcmV2aW91c2x5IHVzZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbiByZXR1cm5lZCBgTkVUX1JYX1NVQ0NFU1NgIHVuZGVyIHRoZXNlIGNvbmRpdGlvbnMsIHdpdGhvdXQgZnJlZWluZyB0aGUgU0tCLiBOb3csIHRoYXQncyBhIHJlZCBmbGFnLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpczogd2hvIGFjdHVhbGx5IG93bnMgdGhlIFNLQiwgdGhlIHBhY2tldCBidWZmZXIsIGFmdGVyIHRoaXMgcG9pbnQ/IFRoZSBvcmlnaW5hbCBjYWxsZXIgbGlrZWx5IGRvZXNuJ3QgYW55IG1vcmUsIHNvIHNvbWVvbmUgZWxzZSBoYXMgdG8gZnJlZSBpdC4gVGhlIGNvZGUgc2VlbXMgdG8gYXNzdW1lIHRoYXQuXG5cblRoZSBmYWN0IHRoYXQgYGllZWU4MDIxNTRfc3ViaWZfZnJhbWVgIG9ubHkgZnJlZXMgdGhlIFNLQiBpbiB0aGUgYGZhaWw6YCBwYXRoIGlzIGEgY2x1ZS4gVGhpcyBkaXNjcmVwYW5jeSBpcyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBpZGVudGlmeSBhbGwgdGhlIGNhbGxlcnMgb2YgYGllZWU4MDIxNTRfc3ViaWZfZnJhbWVgIHRvIHVuZGVyc3RhbmQgdGhlIG93bmVyc2hpcCBhbmQgdGhlIGV4cGVjdGVkIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBUaGF0J3MgdGhlIGtleSB0byBmaWd1cmluZyBvdXQgaWYgdGhpcyBpcyBjb3JyZWN0IGFuZCBlbnN1cmluZyB0aGF0IHRoZSBTS0IgaXMgcHJvcGVybHkgcmVsZWFzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MzcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMDoxNS40NTEwNDIxNDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTQ4MDQzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWVlZTgwMjE1NF9zdWJpZl9mcmFtZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTU0L3J4LmM9MjAxPXN0YXRpYyBpbnRcXG5uZXQvbWFjODAyMTU0L3J4LmM6MjAyOmllZWU4MDIxNTRfc3ViaWZfZnJhbWUoc3RydWN0IGllZWU4MDIxNTRfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbm5ldC9tYWM4MDIxNTQvcnguYy0yMDMtXFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTU0X2hkciAqaGRyKVxcbi0tXFxubmV0L21hYzgwMjE1NC9yeC5jPTQxMT1fX2llZWU4MDIxNTRfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbWFjODAyMTU0L3J4LmMtNDQxLVxcdFxcdFxcdHNrYjItXFx1MDAzZWRldiA9IHNkYXRhLVxcdTAwM2VkZXY7XFxubmV0L21hYzgwMjE1NC9yeC5jOjQ0MjpcXHRcXHRcXHRpZWVlODAyMTU0X3N1YmlmX2ZyYW1lKHNkYXRhLCBza2IyLCBcXHUwMDI2aGRyKTtcXG5uZXQvbWFjODAyMTU0L3J4LmMtNDQzLVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzA6MTYuOTQ1ODUxNTk3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MTI0NDYwMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgTUFDIExheWVyIFJlY2VpdmUgUGF0aCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBJJ20gZm9jdXNpbmcgb24gdGhlIHJlY2VpdmUgcGF0aCB3aXRoaW4gdGhlIE1BQyA4MDIuMTUuNCBsYXllciwgc3BlY2lmaWNhbGx5IGluIGBuZXQvbWFjODAyMTU0L3J4LmNgLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgbG9naWMgYXJvdW5kIGxpbmUgNDExLiBJIGhhdmUgYSBodW5jaCBhYm91dCBhIHBvdGVudGlhbCBpc3N1ZSByZWxhdGVkIHRvIFtpbnNlcnQgeW91ciBmaWVsZCdzIHJlbGV2YW50IHRlY2huaWNhbCBhc3BlY3QgaGVyZSAtIGUuZy4sIGZyYW1lIGZpbHRlcmluZywgYWRkcmVzcyBtYXRjaGluZywgQUNLIHByb2Nlc3NpbmcsIGV0Yy5dLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNydWNpYWwgY29kZSByZXNwb25zaWJsZSBmb3IgW2Rlc2NyaWJlIHRoZSBjb2RlJ3MgZXhwZWN0ZWQgZnVuY3Rpb25dLiBJJ20gbG9va2luZyBmb3IgdGhlIHNwZWNpZmljIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgdGhhdCB0YWtlIHBsYWNlIGFmdGVyIGEgdmFsaWQgODAyLjE1LjQgZnJhbWUgaXMgcmVjZWl2ZWQgYXQgdGhlIHBoeXNpY2FsIGxheWVyLCBpbmNsdWRpbmcgdGhpbmdzIGxpa2UgY2hlY2tpbmcgZnJhbWUgdmFsaWRpdHksIGZpbHRlcmluZyBieSBhZGRyZXNzaW5nIG9yIE1BQyBjb21tYW5kcywgZGV0ZXJtaW5pbmcgd2hpY2ggdXBwZXIgbGF5ZXIgZW50aXR5IGdldHMgdGhlIGZyYW1lLCBhbmQgaGFuZGxpbmcgYW55IGFzc29jaWF0ZWQgYWNrbm93bGVkZ2VtZW50cy4gSSB3YW50IHRvIHNlZSBpZiB0aGUgaW1wbGVtZW50YXRpb24gdGFrZXMgW3JlbGV2YW50IHRlY2huaWNhbCBkZXRhaWwsIHN1Y2ggYXMgaW50ZXJydXB0IGhhbmRsaW5nLCBjb250ZXh0IHN3aXRjaGluZywgcXVldWVpbmcsIERNQSBjb25maWd1cmF0aW9uLCBldGMuXSBpbnRvIGFjY291bnQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IFtzcGVjaWZpYyB2YXJpYWJsZXMsIHN0cnVjdHVyZXMsIG9yIGZ1bmN0aW9uc10gYXJlIHVzZWQgaGVyZSB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBob3cgdGhpcyBjb2RlIHdvcmtzIGFuZCBzZWUgaWYgbXkgaHVuY2ggYWJvdXQgdGhlIHByb2JsZW0gaG9sZHMgdXAuIEkgYmV0IHRoaXMgaXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIGJpdCBoYXBwZW5zIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTkzLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzA6MTkuMzU4Mjk4ODI5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTU0L3J4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDEwOlxcdHN0YXRpYyB2b2lkXFxuIDQxMTpcXHRfX2llZWU4MDIxNTRfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwsXFxuIDQxMjpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA0MTM6XFx0e1xcbiA0MTQ6XFx0XFx0aW50IHJldDtcXG4gNDE1OlxcdFxcdHN0cnVjdCBpZWVlODAyMTU0X3N1Yl9pZl9kYXRhICpzZGF0YTtcXG4gNDE2OlxcdFxcdHN0cnVjdCBpZWVlODAyMTU0X2hkciBoZHI7XFxuIDQxNzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjtcXG4gNDE4OlxcdFxcbiA0MTk6XFx0XFx0cmV0ID0gaWVlZTgwMjE1NF9wYXJzZV9mcmFtZV9zdGFydChza2IsIFxcdTAwMjZoZHIpO1xcbiA0MjA6XFx0XFx0aWYgKHJldCkge1xcbiA0MjE6XFx0XFx0XFx0cHJfZGVidWcoXFxcImdvdCBpbnZhbGlkIGZyYW1lXFxcXG5cXFwiKTtcXG4gNDIyOlxcdFxcdFxcdHJldHVybjtcXG4gNDIzOlxcdFxcdH1cXG4gNDI0OlxcdFxcbiA0MjU6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbiA0MjY6XFx0XFx0XFx0aWYgKHNkYXRhLVxcdTAwM2V3cGFuX2Rldi5pZnR5cGUgPT0gTkw4MDIxNTRfSUZUWVBFX01PTklUT1IpXFxuIDQyNzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNDI4OlxcdFxcbiA0Mjk6XFx0XFx0XFx0aWYgKCFpZWVlODAyMTU0X3NkYXRhX3J1bm5pbmcoc2RhdGEpKVxcbiA0MzA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDQzMTpcXHRcXG4gNDMyOlxcdFxcdFxcdC8qIERvIG5vdCBkZWxpdmVyIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlcyBleHBlY3RpbmdcXG4gNDMzOlxcdFxcdFxcdCAqIEFBQ0s9MSBpZiB0aGUgYWRkcmVzcyBmaWx0ZXJzIHdoZXJlIGRpc2FibGVkLlxcbiA0MzQ6XFx0XFx0XFx0ICovXFxuIDQzNTpcXHRcXHRcXHRpZiAobG9jYWwtXFx1MDAzZWh3LnBoeS1cXHUwMDNlZmlsdGVyaW5nIFxcdTAwM2MgSUVFRTgwMjE1NF9GSUxURVJJTkdfNF9GUkFNRV9GSUVMRFMgXFx1MDAyNlxcdTAwMjZcXG4gNDM2OlxcdFxcdFxcdCAgICBzZGF0YS1cXHUwMDNlcmVxdWlyZWRfZmlsdGVyaW5nID09IElFRUU4MDIxNTRfRklMVEVSSU5HXzRfRlJBTUVfRklFTERTKVxcbiA0Mzc6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDQzODpcXHRcXG4gNDM5OlxcdFxcdFxcdHNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcXG4gNDQwOlxcdFxcdFxcdGlmIChza2IyKSB7XFxuIDQ0MTpcXHRcXHRcXHRcXHRza2IyLVxcdTAwM2VkZXYgPSBzZGF0YS1cXHUwMDNlZGV2O1xcbiA0NDI6XFx0XFx0XFx0XFx0aWVlZTgwMjE1NF9zdWJpZl9mcmFtZShzZGF0YSwgc2tiMiwgXFx1MDAyNmhkcik7XFxuIDQ0MzpcXHRcXHRcXHR9XFxuIDQ0NDpcXHRcXHR9XFxuIDQ0NTpcXHR9XFxuIDQ0NjpcXHRcXG4gNDQ3OlxcdHN0YXRpYyB2b2lkXFxuIDQ0ODpcXHRpZWVlODAyMTU0X21vbml0b3JzX3J4KHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gNDQ5OlxcdHtcXG4gNDUwOlxcdFxcdHN0cnVjdCBza19idWZmICpza2IyO1xcbiA0NTE6XFx0XFx0c3RydWN0IGllZWU4MDIxNTRfc3ViX2lmX2RhdGEgKnNkYXRhO1xcbiA0NTI6XFx0XFxuIDQ1MzpcXHRcXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcbiA0NTQ6XFx0XFx0c2tiLVxcdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTtcXG4gNDU1OlxcdFxcdHNrYi1cXHUwMDNlcGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUO1xcbiA0NTY6XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lFRUU4MDIxNTQpO1xcbiA0NTc6XFx0XFxuIDQ1ODpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxuIDQ1OTpcXHRcXHRcXHRpZiAoc2RhdGEtXFx1MDAzZXdwYW5fZGV2LmlmdHlwZSAhPSBOTDgwMjE1NF9JRlRZUEVfTU9OSVRPUilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzA6MTkuMzU4NDM0OTA5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0MzA4Nzk5MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFNLQiBSZWZjb3VudCBMZWFrIGluIElFRUUgODAyLjE1LjQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IHRoZSBgX19pZWVlODAyMTU0X3J4X2hhbmRsZV9wYWNrZXRgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgaXQncyBjbG9uaW5nIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgdG8gYHNrYjJgLCBpbmNyZWFzaW5nIGl0cyByZWZlcmVuY2UgY291bnQgdG8gMSwgYW5kIHRoZW4gcGFzc2luZyBpdCB0byBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZWAuIFRoaXMgaXMgc3RhbmRhcmQsIGJ1dCB0aGUgZm9sbG93aW5nIGxvZ2ljIGluIGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lYCBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nIGFuZCBjb25jZXJuaW5nLlxuXG5JZiB0aGVyZSdzIGEgZmFpbHVyZSBpbiBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZWAsIHRoZSBgc2tiYCBpcyBmcmVlZC4gVGhhdCdzIGV4cGVjdGVkLiBIb3dldmVyLCB3aGVuIGl0J3MgYSBEQVRBIGZyYW1lLCBpdCdzIHBhc3NlZCBkaXJlY3RseSB0byBgbmV0aWZfcmVjZWl2ZV9za2JgIHZpYSBgaWVlZTgwMjE1NF9kZWxpdmVyX3NrYmAsIGFuZCB0aGF0J3MgYWxzbyBmaW5lLCB3aGljaCBpcyB0aGUgZXhwZWN0ZWQgaGFwcHkgcGF0aC4gVGhlIHBvdGVudGlhbCBpc3N1ZSBhcmlzZXMgd2l0aCBCRUFDT04gb3IgTUFDX0NNRCBmcmFtZXMuIFByZXZpb3VzbHksIGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lYCB3b3VsZCBjYWxsIGBza2JfZ2V0KHNrYilgIGJlZm9yZSByZXR1cm5pbmcgYE5FVF9SWF9TVUNDRVNTYC4gVGhpcyBtZWFudCBgc2tiMmAgKHRoZSBjbG9uZWQgYnVmZmVyKSBub3cgaGFkIGEgcmVmY291bnQgb2YgMiEgVGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhhdCBvbmx5IGEgc2luZ2xlIGBrZnJlZV9za2JgIHdhcyBwZXJmb3JtZWQgbGF0ZXIgaW4gdGhlIGBtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlcmAgb3IgYG1hYzgwMjE1NF9yeF9tYWNfY21kX3dvcmtlcmAuIFRoaXMgcmVwcmVzZW50cyBhIGNsZWFyIFNLQiBtZW1vcnkgbGVhayBiZWNhdXNlIG9uZSBvZiB0aGUgcmVmZXJlbmNlcyB3YXMgbmV2ZXIgcmVsZWFzZWQsIGxlYWRpbmcgdG8gYW4gaW5jcmVhc2luZyBtZW1vcnkgZm9vdHByaW50LlxuXG5UaGUgZml4LCBsb2dpY2FsbHksIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gUmVtb3ZpbmcgdGhhdCBgc2tiX2dldChza2IpYCBjYWxsIGVuc3VyZXMgdGhhdCB0aGUgYG1hY19wa3RgIGNvbnN1bWVzIHRoZSBjYWxsZXIncyByZWZlcmVuY2UgdG8gYHNrYmAgYW5kIGF2b2lkcyB0aGUgcmVmY291bnQgbWlzbWF0Y2guIEJ5IG5vdCB0YWtpbmcgYW4gYWRkaXRpb25hbCByZWZlcmVuY2UsIHdlIGVuc3VyZSB0aGF0IHRoZSBidWZmZXIgaXMgZnJlZWQgd2hlbiBpdCdzIG5vIGxvbmdlciBuZWVkZWQgaW4gc3Vic2VxdWVudCBwcm9jZXNzaW5nLlxuXG5Ob3csIG15IG5leHQgdGhvdWdodCBpcyBhYm91dCByZWFjaGFiaWxpdHkgYW5kIGZ1enphYmlsaXR5LiBJIG5lZWQgdG8gYXNzZXNzIHdoZXRoZXIgYW5kIGhvdyBgbWFjODAyMTU0YCBpcyBhY3R1YWxseSByZWFjaGFibGUgd2l0aGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgc3VjaCBhcyB0aG9zZSB1c2VkIGJ5IFFFTVUgb3Igc3l6a2FsbGVyLiBUaGUgcXVlc3Rpb24gYm9pbHMgZG93biB0byB3aGV0aGVyIElFRUUgODAyLjE1LjQgYW5kIGBtYWM4MDIxNTRgIGFyZSBlbXVsYXRlZCBvciB1dGlsaXplZCB3aXRoaW4gdGhlc2UgZW52aXJvbm1lbnRzLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBzcGVjaWZpYyBhcmVhczogYGRyaXZlcnMvbmV0L2llZWU4MDIxNTRgLCBgbmV0L21hYzgwMjE1NGAsIGFuZCBhbnkgdmlydHVhbCBkZXZpY2VzIGxpa2UgYGZha2VsYmAsIGBtYWM4MDIxNTRfaHdzaW1gLCBvciBgbmw4MDIxNTRgLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBkcml2ZXLigJlzIG9wZXJhdGlvbiBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgZXNzZW50aWFsIHRvIGVzdGFibGlzaCB0aGUgcmlzayBwcm9maWxlIG9mIHRoaXMgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODMwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzA6MjMuNzg5MzE3Mjc2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk5MDI5ODcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hYzgwMjE1NF9od3NpbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc9MTE0PWNvbmZpZyBJRUVFODAyMTU0X0hXU0lNXFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMTIyLVxcdCAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIFRvIGRvIHNvIHNheSBNIGhlcmUuXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjEyMzpcXHQgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgJ21hYzgwMjE1NF9od3NpbScuXFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX0lFRUU4MDIxNTRfTUNSMjBBKSArPSBtY3IyMGEub1xcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX0lFRUU4MDIxNTRfSFdTSU0pICs9IG1hYzgwMjE1NF9od3NpbS5vXFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L2Zha2VsYi5jPTI0ND1zdGF0aWMgX19pbml0IGludCBmYWtlbGJfaW5pdF9tb2R1bGUodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvZmFrZWxiLmMtMjQ4LVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvZmFrZWxiLmM6MjQ5OlxcdHByX3dhcm4oXFxcImZha2VsYiBkcml2ZXIgaXMgbWFya2VkIGFzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgbWFjODAyMTU0X2h3c2ltIVxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9mYWtlbGIuYy0yNTAtXFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jLTI0LSNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYzoyNTojaW5jbHVkZSBcXFwibWFjODAyMTU0X2h3c2ltLmhcXFwiXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYy0yNi1cXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmM9MTA1Mj1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYWM4MDIxNTRod3NpbV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jLTEwNTUtXFx0LmRyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jOjEwNTY6XFx0XFx0XFx0Lm5hbWUgPSBcXFwibWFjODAyMTU0X2h3c2ltXFxcIixcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NF9od3NpbS5jLTEwNTctXFx0fSxcXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmM9MTA2MD1zdGF0aWMgX19pbml0IGludCBod3NpbV9pbml0X21vZHVsZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tYWM4MDIxNTRfaHdzaW0uYy0xMDY3LVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmM6MTA2ODpcXHRtYWM4MDIxNTRod3NpbV9kZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKFxcXCJtYWM4MDIxNTRfaHdzaW1cXFwiLFxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0X2h3c2ltLmMtMTA2OS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIC0xLCBOVUxMLCAwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzA6MjUuMzg4MzUyMjE4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyOTM2NTkzODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBtYWM4MDIxNTRfaHdzaW0gRnV6emluZyoqXG5cbk9rYXksIHNvIGBtYWM4MDIxNTRfaHdzaW1gLiBUaGF0J3MgdGhlIHNpbXVsYXRlZCA4MDIuMTUuNCByYWRpbyBoYXJkd2FyZSBkcml2ZXIgaW4gTGludXguIEkga25vdyB0aGlzLCBpdCdzIHByZXR0eSB3ZWxsLWVzdGFibGlzaGVkIG5vdy4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgaG93IGl0J3MgYmVpbmcgYXBwcm9hY2hlZDogbmV0bGluayBhbmQgc3lzZnMgZm9yIGNvbnRyb2wsIGFuZCBzcGVjaWZpY2FsbHksIHRoYXQgYHN5emthbGxlcmAgaXMgcHV0dGluZyBpdCB0aHJvdWdoIGl0cyBwYWNlcyB3aXRoIHNvbWUgaGVhdnkgZnV6emluZy4gVGhlIGtleSBwb2ludHMgYXJlIHRoZSB1c2Ugb2YgYGh3c2ltYCwgY291cGxlZCB3aXRoIHJhdyBzb2NrZXRzLCBgYWZfaWVlZTgwMjE1NGAsIGFuZCBgbmw4MDIxNTRgLiBJdCBtYWtlcyBzZW5zZTsgaGl0dGluZyBpdCBmcm9tIHRoZXNlIGRpZmZlcmVudCBhbmdsZXMgcHJvdmlkZXMgYSBtb3JlIHRob3JvdWdoIHRlc3Rpbmcgc3RyYXRlZ3kuIEl0J3MgdGltZSB0byBjaGVjayB0aGUgS2NvbmZpZywgaXQgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzM0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzA6MjcuNjgyMDEzNzI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTIwMDYzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDODAyMTU0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxNTRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjE1NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L21hYzgwMjE1NC9LY29uZmlnOjI6Y29uZmlnIE1BQzgwMjE1NFxcbm5ldC9tYWM4MDIxNTQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjE1LjQgU29mdCBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxNTQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMDoyNy43MjcyMTYzMzJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM5MjU5OTIxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIEtjb25maWcgZmlsZSBmb3IgbWFjODAyMTU0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSA4MDIuMTUuNCBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIG1hYzgwMjE1NCBLY29uZmlnIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBJRUVFIDgwMi4xNS40IE1BQyBsYXllciB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc2VlLi4uIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgc3R1ZmYgaGVyZTogdGhpbmdzIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBkcml2ZXIsIG9wdGlvbnMgZm9yIGRpZmZlcmVudCBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbnMsIG1heWJlIHNvbWUgY2hvaWNlcyByZWxhdGVkIHRvIHNwZWNpZmljIFBIWXMgKGxpa2UgdGhlIHJhZGlvIHVzZWQpLCBkZWZpbml0ZWx5IHRoaW5ncyBsaWtlIGRhdGEgcmF0ZSBzZWxlY3Rpb24sIGFuZCBwb3RlbnRpYWxseSBjb25maWd1cmF0aW9uIGZvciB2YXJpb3VzIHNlY3VyaXR5IGZlYXR1cmVzIGlmIHN1cHBvcnRlZC5cblxuSSdsbCBiZSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIHRvby4gV2hhdCBvdGhlciBzdWJzeXN0ZW1zIGRvZXMgdGhpcyByZWx5IG9uPyBBcmUgdGhlcmUgYW55IHByZXJlcXVpc2l0ZXMgSSBuZWVkIHRvIGVuc3VyZSBhcmUgZW5hYmxlZD8gVGhpcyBpcyBjcnVjaWFsIGZvciBjb3JyZWN0bHkgY29tcGlsaW5nIGFuZCBjb25maWd1cmluZyBhIHN5c3RlbSB0aGF0IHVzZXMgODAyLjE1LjQuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBoaWVyYXJjaHkgb2Ygb3B0aW9ucyDigJMgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIgYW5kIGlmIHRoZXJlIGFyZSBhbnkgY29uZmxpY3RpbmcgY2hvaWNlcy4gQW55IG1lbnRpb24gb2YgbXVsdGktUEFOIHN1cHBvcnQgb3IgbWVzaCBuZXR3b3JraW5nIGNhcGFiaWxpdGllcyB3aWxsIGFsc28gYmUgZ29vZCB0byB0YWtlIGEgbG9vayBhdC5cblxuSSBuZWVkIHRvIHNlZSBpZiBpdCBwcm92aWRlcyBzdXBwb3J0IGZvciBkaWZmZXJlbnQgc3RhbmRhcmQgcmV2aXNpb25zLCBlLmcuIDgwMi4xNS40LTIwMDMgb3IgODAyLjE1LjQtMjAyMC4gSSdsbCBiZSByZWFsbHkga2VlbiB0byBkaXNjb3ZlciBpZiB0aGVyZSdzIGFueSBtZWNoYW5pc20gZm9yIHNlbGVjdGluZyB0aGUgdW5kZXJseWluZyBkYXRhIGxpbmsgbGF5ZXIgcHJvdG9jb2wsIG9yIGlmIHRoYXQgaXMgc29tZWhvdyBiYWtlZCBpbi5cblRoaXMgZmlsZSBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRvIHRhaWxvciB0aGlzIHNwZWNpZmljIE1BQyBsYXllciBmb3Igb3VyIG5lZWRzLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGdyYW51bGFyaXR5IG9mIHRoZSBjb250cm9scyBhbmQgd2hhdCBoYXJkd2FyZSBhbmQgUEhZIG9wdGlvbnMgYXJlIGF2YWlsYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMDozMS4xMTk4MTc2ODZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjE1NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTUFDODAyMTU0XFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBJRUVFIDgwMi4xNS40IFNvZnQgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTU0KVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gSUVFRTgwMjE1NFxcbiAgIDU6XFx0XFx0c2VsZWN0IENSQ19DQ0lUVFxcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19BVVRIRU5DXFxuICAgODpcXHRcXHRzZWxlY3QgQ1JZUFRPX0NDTVxcbiAgIDk6XFx0XFx0c2VsZWN0IENSWVBUT19DVFJcXG4gIDEwOlxcdFxcdHNlbGVjdCBDUllQVE9fQUVTXFxuICAxMTpcXHRcXHRoZWxwXFxuICAxMjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IElFRUUgODAyLjE1LjRcXG4gIDEzOlxcdFxcdCAgbmV0d29ya2luZyBzdGFjayBmb3IgU29mdE1BQyBkZXZpY2VzICh0aGUgb25lcyBpbXBsZW1lbnRpbmdcXG4gIDE0OlxcdFxcdCAgb25seSBQSFkgbGV2ZWwgb2YgSUVFRSA4MDIuMTUuNCBzdGFuZGFyZCkuXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgTm90ZTogdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBuZWl0aGVyIGNlcnRpZmllZCwgbm9yIGZlYXR1cmVcXG4gIDE3OlxcdFxcdCAgY29tcGxldGUhIENvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBpbXBsZW1lbnRhdGlvbnMgaGFzbid0XFxuICAxODpcXHRcXHQgIGJlZW4gdGVzdGVkIHlldCFcXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0ICBJZiB5b3UgcGxhbiB0byB1c2UgSGFyZE1BQyBJRUVFIDgwMi4xNS40IGRldmljZXMsIHlvdSBjYW5cXG4gIDIxOlxcdFxcdCAgc2F5IE4gaGVyZS4gQWx0ZXJuYXRpdmVseSB5b3UgY2FuIHNheSBNIHRvIGNvbXBpbGUgaXQgYXNcXG4gIDIyOlxcdFxcdCAgbW9kdWxlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMDozMS4xMTk4NzMyNDZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgzMDEzOTAzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSUVFRSA4MDIuMTUuNCBIYXJkd2FyZSBTaW11bGF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGNvbmZpZ3VyaW5nIHNvbWV0aGluZywgYW5kIHRoZSBJRUVFIDgwMi4xNS40IGhhcmR3YXJlIHNpbXVsYXRpb24gaXMgdGhlIHRhcmdldC4gTmF0dXJhbGx5LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IHdlJ3JlIGNvdmVyaW5nIGFsbCBvdXIgYmFzZXMuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIGxvb2sgZm9yIHRoYXQgY29uZmlndXJhdGlvbiB3b3VsZCBiZSBpbiB0aGUgZHJpdmVyIHNvdXJjZSB0cmVlLCBzcGVjaWZpY2FsbHkgdW5kZXIgYGRyaXZlcnMvbmV0L2llZWU4MDIxNTQvYC4gQW5kIHRoZW4sIHdpdGhpbiAqdGhhdCogZGlyZWN0b3J5LCB0aGUgYEtjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgc3RhbmRhcmQgcGxhY2UgaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gdG8gZGVmaW5lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgSUVFRTgwMjE1NF9IV1NJTWAgaXMgZGVmaW5lZCBhbmQgY29ycmVjdGx5IGhhbmRsZWQgdGhlcmUuIFdlIG1pZ2h0IGFsc28gbmVlZCB0byBjaGVjayBpdHMgZGVwZW5kZW5jaWVzLCBpdHMgaGVscCB0ZXh0LCBhbmQgYW55dGhpbmcgZWxzZSByZWxldmFudCB0byBpdHMgYmVoYXZpb3IuIFNvLCBsZXQncyB0YWtlIGEgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5MjMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjMwOjMzLjk1MDAxNDczMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjM0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTEwOlxcdFxcbiAxMTE6XFx0XFx0ICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gVG8gZG8gc28sIHNheSBNIGhlcmUuXFxuIDExMjpcXHRcXHQgIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgJ21jcjIwYScuXFxuIDExMzpcXHRcXG4gMTE0OlxcdGNvbmZpZyBJRUVFODAyMTU0X0hXU0lNXFxuIDExNTpcXHRcXHRkZXBlbmRzIG9uIElFRUU4MDIxNTRfRFJJVkVSUyBcXHUwMDI2XFx1MDAyNiBNQUM4MDIxNTRcXG4gMTE2OlxcdFxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxNTRcXFwiXFxuIDExNzpcXHRcXHRoZWxwXFxuIDExODpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIGEgZGV2ZWxvcGVyIHRlc3RpbmcgdG9vbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHRlc3RcXG4gMTE5OlxcdFxcdCAgSUVFRSA4MDIuMTUuNCBuZXR3b3JraW5nIHN0YWNrIChtYWM4MDIxNTQpIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgbm90XFxuIDEyMDpcXHRcXHQgIG5lZWRlZCBmb3Igbm9ybWFsIHdwYW4gdXNhZ2UgYW5kIGlzIG9ubHkgZm9yIHRlc3RpbmcuXFxuIDEyMTpcXHRcXG4gMTIyOlxcdFxcdCAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIFRvIGRvIHNvIHNheSBNIGhlcmUuXFxuIDEyMzpcXHRcXHQgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgJ21hYzgwMjE1NF9od3NpbScuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjMwOjMzLjk1MDA5MjMyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMTk2MDQwMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBJRUVFIDgwMi4xNS40IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QuIExldCdzIGRpdmUgcmlnaHQgaW50byB0aGUgYG5ldC9pZWVlODAyMTU0L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgdGhlIGNvbmZpZ3VyYWJsZSBvcHRpb25zIGZvciB0aGUgSUVFRSA4MDIuMTUuNCBzdGFjayB3aXRoaW4gdGhlIGJ1aWxkIHN5c3RlbS4gVGhpcyBpcyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIGZpbGUsIHNvIGl0IHdpbGwgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnRzIGZvciB1bmRlcnN0YW5kaW5nIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkLCBkaXNhYmxlZCwgYW5kIGhvdyBldmVyeXRoaW5nIGlzIHN0cnVjdHVyZWQuIEknbSBsb29raW5nIGZvciB0aGUgdG9wLWxldmVsIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIGFueSBpbXBvcnRhbnQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQgYmVmb3JlIEkgZ28gYW55IGRlZXBlci4gSSB3YW50IHRvIGJ1aWxkIGEgcXVpY2sgbWVudGFsIG1vZGVsIG9mIHRoZSBjb25maWd1cmFibGUgbW9kdWxlcyBiZWZvcmUgcHJvY2VlZGluZyB0byB0aGUgbmV4dCBkaWFnbm9zdGljIHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDg0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMDozNi4yNjk2OTkwNjdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2llZWU4MDIxNTQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0bWVudWNvbmZpZyBJRUVFODAyMTU0XFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiSUVFRSBTdGQgODAyLjE1LjQgTG93LVJhdGUgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3JrcyBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0aGVscFxcbiAgIDU6XFx0XFx0ICBJRUVFIFN0ZCA4MDIuMTUuNCBkZWZpbmVzIGEgbG93IGRhdGEgcmF0ZSwgbG93IHBvd2VyIGFuZCBsb3dcXG4gICA2OlxcdFxcdCAgY29tcGxleGl0eSBzaG9ydCByYW5nZSB3aXJlbGVzcyBwZXJzb25hbCBhcmVhIG5ldHdvcmtzLiBJdCB3YXNcXG4gICA3OlxcdFxcdCAgZGVzaWduZWQgdG8gb3JnYW5pc2UgbmV0d29ya3Mgb2Ygc2Vuc29ycywgc3dpdGNoZXMsIGV0YyBhdXRvbWF0aW9uXFxuICAgODpcXHRcXHQgIGRldmljZXMuIE1heGltdW0gYWxsb3dlZCBkYXRhIHJhdGUgaXMgMjUwIGtiL3MgYW5kIHR5cGljYWwgcGVyc29uYWxcXG4gICA5OlxcdFxcdCAgb3BlcmF0aW5nIHNwYWNlIGFyb3VuZCAxMG0uXFxuICAxMDpcXHRcXG4gIDExOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIExSLVdQQU4gc3VwcG9ydCBpbnRvIHRoZSBrZXJuZWwgb3Igc2F5IE0gdG9cXG4gIDEyOlxcdFxcdCAgY29tcGlsZSBpdCBhcyBtb2R1bGVzLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRpZiBJRUVFODAyMTU0XFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbmZpZyBJRUVFODAyMTU0X05MODAyMTU0X0VYUEVSSU1FTlRBTFxcbiAgMTc6XFx0XFx0Ym9vbCBcXFwiSUVFRSA4MDIuMTUuNCBleHBlcmltZW50YWwgbmV0bGluayBzdXBwb3J0XFxcIlxcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBBZGRzIGV4cGVyaW1lbnRhbCBuZXRsaW5rIHN1cHBvcnQgZm9yIG5sODAyMTU0LlxcbiAgMjA6XFx0XFxuICAyMTpcXHRjb25maWcgSUVFRTgwMjE1NF9TT0NLRVRcXG4gIDIyOlxcdFxcdHRyaXN0YXRlIFxcXCJJRUVFIDgwMi4xNS40IHNvY2tldCBpbnRlcmZhY2VcXFwiXFxuICAyMzpcXHRcXHRkZWZhdWx0IHlcXG4gIDI0OlxcdFxcdGhlbHBcXG4gIDI1OlxcdFxcdCAgU29ja2V0IGludGVyZmFjZSBmb3IgSUVFRSA4MDIuMTUuNC4gQ29udGFpbnMgREdSQU0gc29ja2V0cyBpbnRlcmZhY2VcXG4gIDI2OlxcdFxcdCAgZm9yIDgwMi4xNS40IGRhdGFmcmFtZXMuIEFsc28gUkFXIHNvY2tldCBpbnRlcmZhY2UgdG8gYnVpbGQgTUFDXFxuICAyNzpcXHRcXHQgIGhlYWRlciBmcm9tIHVzZXJzcGFjZS5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0c291cmNlIFxcXCJuZXQvaWVlZTgwMjE1NC82bG93cGFuL0tjb25maWdcXFwiXFxuICAzMDpcXHRcXG4gIDMxOlxcdGVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjMwOjM2LjI2OTc1NDUxN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODgwNDYwNzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIE1BQzgwMjE1NCByZWNlaXZlIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRob3NlIFJYIGZ1bmN0aW9ucyBhcmUgdHJpZ2dlcmVkLiBNeSBpbml0aWFsIGFwcHJvYWNoIHdpbGwgYmUgdG8gZXhhbWluZSB0aGUgY29kZSBkaXJlY3RseSBhbmQgc2VhcmNoIGZvciB0aGUga2V5IGVudHJ5IHBvaW50cy4gU28sIEknbGwgc3RhcnQgd2l0aCBhIGBncmVwYCBmb3IgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gSSdtIGZvY3VzaW5nIG9uIGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lYCwgYGllZWU4MDIxNTRfcnhfaXJxc2FmZWAsIGFuZCBhbnkgb3RoZXIgb2J2aW91cyBlbnRyeSBwb2ludHMgd2l0aGluIGBuZXQvbWFjODAyMTU0L3J4LmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBsYXkgb2YgdGhlIGxhbmQsIHJpZ2h0PyBUaGlzIHdpbGwgZ2l2ZSBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgZnVuY3Rpb24gY2FsbCBoaWVyYXJjaHkgaW4gdGhlIHJlY2VpdmUgcGF0aCwgZnJvbSB0aGUgaGFyZHdhcmUgaW50ZXJydXB0IHRvIHRoZSBwcm9jZXNzaW5nIG9mIHRoZSByZWNlaXZlZCBmcmFtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyMjgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjMwOjM4LjE1MDIxODA4NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMxODc2NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWVlZTgwMjE1NF9yeFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTU0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmg9MTkzPWV4dGVybiBzdHJ1Y3QgaWVlZTgwMjE1NF9tbG1lX29wcyBtYWM4MDIxNTRfbWxtZV93cGFuO1xcbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmgtMTk0LVxcbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmg6MTk1OnZvaWQgaWVlZTgwMjE1NF9yeChzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IpO1xcbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmgtMTk2LXZvaWQgaWVlZTgwMjE1NF94bWl0X3N5bmNfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuLS1cXG5uZXQvbWFjODAyMTU0L21haW4uYz0yMz1zdGF0aWMgdm9pZCBpZWVlODAyMTU0X3Rhc2tsZXRfaGFuZGxlcihzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXFxuLS1cXG5uZXQvbWFjODAyMTU0L21haW4uYy0zNC1cXHRcXHRcXHRza2ItXFx1MDAzZXBrdF90eXBlID0gMDtcXG5uZXQvbWFjODAyMTU0L21haW4uYzozNTpcXHRcXHRcXHRpZWVlODAyMTU0X3J4KGxvY2FsLCBza2IpO1xcbm5ldC9tYWM4MDIxNTQvbWFpbi5jLTM2LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L21hYzgwMjE1NC9yeC5jPTQxMD1zdGF0aWMgdm9pZFxcbm5ldC9tYWM4MDIxNTQvcnguYzo0MTE6X19pZWVlODAyMTU0X3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsLFxcbm5ldC9tYWM4MDIxNTQvcnguYy00MTItXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tYWM4MDIxNTQvcnguYz00NDg9aWVlZTgwMjE1NF9tb25pdG9yc19yeChzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbWFjODAyMTU0L3J4LmMtNDc1LVxcbm5ldC9tYWM4MDIxNTQvcnguYzo0NzY6dm9pZCBpZWVlODAyMTU0X3J4KHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvbWFjODAyMTU0L3J4LmMtNDc3LXtcXG4tLVxcbm5ldC9tYWM4MDIxNTQvcnguYy01MDYtXFxubmV0L21hYzgwMjE1NC9yeC5jOjUwNzpcXHRfX2llZWU4MDIxNTRfcnhfaGFuZGxlX3BhY2tldChsb2NhbCwgc2tiKTtcXG5uZXQvbWFjODAyMTU0L3J4LmMtNTA4LVxcbi0tXFxubmV0L21hYzgwMjE1NC9yeC5jPTUxNT12b2lkXFxubmV0L21hYzgwMjE1NC9yeC5jOjUxNjppZWVlODAyMTU0X3J4X2lycXNhZmUoc3RydWN0IGllZWU4MDIxNTRfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBscWkpXFxubmV0L21hYzgwMjE1NC9yeC5jLTUxNy17XFxuLS1cXG5uZXQvbWFjODAyMTU0L3J4LmMtNTI1LX1cXG5uZXQvbWFjODAyMTU0L3J4LmM6NTI2OkVYUE9SVF9TWU1CT0woaWVlZTgwMjE1NF9yeF9pcnFzYWZlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzA6MzguMjAzNDA5MzA2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NTM5Nzg1MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBtYWM4MDIxNTQgUlggUGF0aCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHRoZSBtb2RpZmljYXRpb25zIGluIGBuZXQvbWFjODAyMTU0L3J4LmNgLiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGF0IGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lKClgIGJlY2F1c2UgdGhhdCdzIHRoZSBmdW5jdGlvbiB0aGF0J3MgYmVlbiBjaGFuZ2VkLiBOb3csIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3csIEkgbmVlZCB0byBtYXAgb3V0IHRoZSBjYWxsIGNoYWluIGFuZCB0aGUgcmVsZXZhbnQgd29ya2VycyBoYW5kbGluZyB0aGVzZSBmcmFtZXMuIFNvLCBJIHNlZSBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZWAgaXRzZWxmLCBhbmQgaXQgbG9va3MgbGlrZSBpdCBpbnRlcmFjdHMgd2l0aCBgbWFjODAyMTU0X3J4X2JlYWNvbl93b3JrZXJgLCBgbWFjODAyMTU0X3J4X21hY19jbWRfd29ya2VyYCwgYGllZWU4MDIxNTRfcnhgLCBhbmQgYGllZWU4MDIxNTRfcnhfaXJxc2FmZWAuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIHRoZSBkYXRhIGZsb3cuIEJlZm9yZSBkaWdnaW5nIGRlZXBlciBpbnRvIGFueSBzcGVjaWZpYyBjYWxsIHBhdGgsIEknbGwgcXVpY2tseSB2ZXJpZnkgdGhhdCBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGVsc2UgcmVsZXZhbnQgaW4gdGhlIGBuZXQvbWFjODAyMTU0L3J4LmNgIGZpbGUgaXRzZWxmLiBUaGVuLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkga25vdyB3aGF0IGFsbCB0aGUgc3ltYm9scyBhcmUgaW4gdGhhdCBmaWxlLCBqdXN0IGFzIGEgZ2VuZXJhbCBzYW5pdHkgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzQyLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjMwOjQwLjg1NzM5MDM0OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3NDM0NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVowLTlfXSsuKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxNTQvcnguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTU0L3J4LmMtMjMtXFxubmV0L21hYzgwMjE1NC9yeC5jOjI0OnN0YXRpYyBpbnQgaWVlZTgwMjE1NF9kZWxpdmVyX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9tYWM4MDIxNTQvcnguYy0yNS17XFxuLS1cXG5uZXQvbWFjODAyMTU0L3J4LmMtMzEtXFxubmV0L21hYzgwMjE1NC9yeC5jOjMyOnZvaWQgbWFjODAyMTU0X3J4X2JlYWNvbl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9tYWM4MDIxNTQvcnguYy0zMy17XFxuLS1cXG5uZXQvbWFjODAyMTU0L3J4LmMtNTYtXFxubmV0L21hYzgwMjE1NC9yeC5jOjU3OnN0YXRpYyBib29sIG1hYzgwMjE1NF9zaG91bGRfYW5zd2VyX2JlYWNvbl9yZXEoc3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsKVxcbm5ldC9tYWM4MDIxNTQvcnguYy01OC17XFxuLS1cXG5uZXQvbWFjODAyMTU0L3J4LmMtNzctXFxubmV0L21hYzgwMjE1NC9yeC5jOjc4OnN0YXRpYyB2b2lkIG1hYzgwMjE1NF9yeF9tYWNfY21kKHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCxcXG5uZXQvbWFjODAyMTU0L3J4LmMtNzktXFx0XFx0XFx0XFx0IHN0cnVjdCBjZmc4MDIxNTRfbWFjX3BrdCAqbWFjX3BrdClcXG4tLVxcbm5ldC9tYWM4MDIxNTQvcnguYy0xMjUtXFxubmV0L21hYzgwMjE1NC9yeC5jOjEyNjp2b2lkIG1hYzgwMjE1NF9yeF9tYWNfY21kX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L21hYzgwMjE1NC9yeC5jLTEyNy17XFxuLS1cXG5uZXQvbWFjODAyMTU0L3J4LmMtMTY0LSAqL1xcbm5ldC9tYWM4MDIxNTQvcnguYzoxNjU6dm9pZCBtYWM4MDIxNTRfZmx1c2hfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbm5ldC9tYWM4MDIxNTQvcnguYy0xNjYtXFx0XFx0XFx0ICBzdHJ1Y3QgaWVlZTgwMjE1NF9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuLS1cXG5uZXQvbWFjODAyMTU0L3J4LmMtMTkxLSAqL1xcbm5ldC9tYWM4MDIxNTQvcnguYzoxOTI6dm9pZCBtYWM4MDIxNTRfZmx1c2hfcXVldWVkX3BrdHMoc3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsLFxcbm5ldC9tYWM4MDIxNTQvcnguYy0xOTMtXFx0XFx0XFx0XFx0IHN0cnVjdCBpZWVlODAyMTU0X3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4tLVxcbm5ldC9tYWM4MDIxNTQvcnguYz0yMDE9c3RhdGljIGludFxcbm5ldC9tYWM4MDIxNTQvcnguYzoyMDI6aWVlZTgwMjE1NF9zdWJpZl9mcmFtZShzdHJ1Y3QgaWVlZTgwMjE1NF9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjE1NC9yeC5jLTIwMy1cXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGllZWU4MDIxNTRfaGRyICpoZHIpXFxuLS1cXG5uZXQvbWFjODAyMTU0L3J4LmM9MzMyPXN0YXRpYyB2b2lkXFxubmV0L21hYzgwMjE1NC9yeC5jOjMzMzppZWVlODAyMTU0X3ByaW50X2FkZHIoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGllZWU4MDIxNTRfYWRkciAqYWRkcilcXG5uZXQvbWFjODAyMTU0L3J4LmMtMzM0LXtcXG4tLVxcbm5ldC9tYWM4MDIxNTQvcnguYz0zNTE9c3RhdGljIGludFxcbm5ldC9tYWM4MDIxNTQvcnguYzozNTI6aWVlZTgwMjE1NF9wYXJzZV9mcmFtZV9zdGFydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWVlZTgwMjE1NF9oZHIgKmhkcilcXG5uZXQvbWFjODAyMTU0L3J4LmMtMzUzLXtcXG4tLVxcbm5ldC9tYWM4MDIxNTQvcnguYz00MTA9c3RhdGljIHZvaWRcXG5uZXQvbWFjODAyMTU0L3J4LmM6NDExOl9faWVlZTgwMjE1NF9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCxcXG5uZXQvbWFjODAyMTU0L3J4LmMtNDEyLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbWFjODAyMTU0L3J4LmM9NDQ3PXN0YXRpYyB2b2lkXFxubmV0L21hYzgwMjE1NC9yeC5jOjQ0ODppZWVlODAyMTU0X21vbml0b3JzX3J4KHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvbWFjODAyMTU0L3J4LmMtNDQ5LXtcXG4tLVxcbm5ldC9tYWM4MDIxNTQvcnguYy00NzUtXFxubmV0L21hYzgwMjE1NC9yeC5jOjQ3Njp2b2lkIGllZWU4MDIxNTRfcngoc3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9tYWM4MDIxNTQvcnguYy00Nzcte1xcbi0tXFxubmV0L21hYzgwMjE1NC9yeC5jPTUxNT12b2lkXFxubmV0L21hYzgwMjE1NC9yeC5jOjUxNjppZWVlODAyMTU0X3J4X2lycXNhZmUoc3RydWN0IGllZWU4MDIxNTRfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBscWkpXFxubmV0L21hYzgwMjE1NC9yeC5jLTUxNy17XFxuLS1cXG5uZXQvbWFjODAyMTU0L3J4LmMtNTI1LX1cXG5uZXQvbWFjODAyMTU0L3J4LmM6NTI2OkVYUE9SVF9TWU1CT0woaWVlZTgwMjE1NF9yeF9pcnFzYWZlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzA6NDAuOTAzMTM4MjUxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1OTMxNzg1MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIEFuYWx5c2lzOiBJRUVFIDgwMi4xNS40IENvZGUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBpcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZz8gTGV0J3MgY2hlY2sgdGhlIGNyaXRlcmlhLiBZZXMsIG1vZGlmeWluZyBgbmV0L21hYzgwMjE1NC9yeC5jYCB3aXRoaW4gYGllZWU4MDIxNTRfc3ViaWZfZnJhbWVgICpkZWZpbml0ZWx5KiB0b3VjaGVzIHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlLiBHb29kLiBTZWNvbmQsIGFyZSB3ZSB0YWxraW5nIGFib3V0IHNvbWV0aGluZyBhY2Nlc3NpYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gWWVwLCBgbWFjODAyMTU0YCBpcyBzaW11bGF0ZWQgdGhyb3VnaCBgbWFjODAyMTU0X2h3c2ltYCBvciByYXcgcGFja2V0IGluamVjdGlvbiB2aWEgc29ja2V0cyBvciB2aXJ0dWFsIGRldmljZXMuIEVhc3kgdG8gdGVzdC4gQ3J1Y2lhbGx5LCB0aGUgY29kZSBpcyBjaGFuZ2luZyBtZW1vcnkgcmVmZXJlbmNlIGNvdW50aW5nLCBzcGVjaWZpY2FsbHkgcmVtb3ZpbmcgYHNrYl9nZXQoc2tiKWAgdG8gdHJhbnNmZXIgb3duZXJzaGlwLiBUaGlzIGZpeGVzIGEgbWVtb3J5IGxlYWsgb3IgYXZvaWRzIHVzZS1hZnRlci1mcmVlL2xlYWsgaXNzdWVzLiBTbywgZnV6emluZyBpcyBjcml0aWNhbCBoZXJlIHRvIGZsdXNoIG91dCBhbnkgcG90ZW50aWFsIGRvdWJsZSBmcmVlcyBvciBVQUZzIHRoYXQgbWlnaHQgZXhpc3QgZHVlIHRvIHRoZSBvd25lcnNoaXAgY2hhbmdlLiBCYXNlZCBvbiBhbGwgdGhhdCwgYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIGNvbXBpbGluZyBhbmQgdGVzdGluZyB0aGlzLiBMb29raW5nIGF0IGBuZXQvbWFjODAyMTU0L0tjb25maWdgLCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHdlIG5lZWQgYElFRUU4MDIxNTRgLCBgTUFDODAyMTU0YCwgYW5kIGVpdGhlciBgSUVFRTgwMjE1NF9IV1NJTWAgb3IgYElFRUU4MDIxNTRfU09DS0VUYC5cblxuRmluYWxseSwgd2Ugc2hvdWxkIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzLiBgTUFDODAyMTU0YCBuZWVkcyBgSUVFRTgwMjE1NGAsIGFuZCBgSUVFRTgwMjE1NF9IV1NJTWAgZGVwZW5kcyBvbiBgSUVFRTgwMjE1NF9EUklWRVJTIFx1MDAyNlx1MDAyNiBNQUM4MDIxNTRgLiBXZSBzaG91bGQgY2hlY2sgYElFRUU4MDIxNTRfRFJJVkVSU2AgaW4gYGRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2AuIFdlIG5vdyBrbm93IGV2ZXJ5dGhpbmcgd2UgbmVlZCB0byBydW4gb3VyIGZ1enppbmcgb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI2OCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMDo0NC40OTYzMjA0NDNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51Y29uZmlnIElFRUU4MDIxNTRfRFJJVkVSU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIklFRUUgODAyLjE1LjQgZHJpdmVyc1xcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gTkVUREVWSUNFUyBcXHUwMDI2XFx1MDAyNiBJRUVFODAyMTU0XFxuICAgNTpcXHRcXHRkZWZhdWx0IHlcXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBnZXQgdG8gc2VlIG9wdGlvbnMgZm9yIElFRUUgODAyLjE1LjQgTG93LVJhdGVcXG4gICA4OlxcdFxcdCAgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3JrIGRldmljZSBkcml2ZXJzLiBUaGlzIG9wdGlvbiBhbG9uZVxcbiAgIDk6XFx0XFx0ICBkb2VzIG5vdCBhZGQgYW55IGtlcm5lbCBjb2RlLlxcbiAgMTA6XFx0XFxuICAxMTpcXHRcXHQgIElmIHlvdSBzYXkgTiwgYWxsIG9wdGlvbnMgaW4gdGhpcyBzdWJtZW51IHdpbGwgYmUgc2tpcHBlZCBhbmRcXG4gIDEyOlxcdFxcdCAgZGlzYWJsZWQuXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBJRUVFODAyMTU0X0ZBS0VMQlxcbiAgMTU6XFx0XFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXFx1MDAyNlxcdTAwMjYgTUFDODAyMTU0XFxuICAxNjpcXHRcXHR0cmlzdGF0ZSBcXFwiSUVFRSA4MDIuMTUuNCBsb29wYmFjayBkcml2ZXJcXFwiXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBmYWtlIGRyaXZlciB0aGF0IGNhbiBlbXVsYXRlIGEgbmV0XFxuICAxOTpcXHRcXHQgIG9mIHNldmVyYWwgaW50ZXJjb25uZWN0ZWQgcmFkaW8gZGV2aWNlcy5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0XFx0ICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gVG8gZG8gc28gc2F5IE0gaGVyZS5cXG4gIDIyOlxcdFxcdCAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCAnZmFrZWxiJy5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0Y29uZmlnIElFRUU4MDIxNTRfQVQ4NlJGMjMwXFxuICAyNTpcXHRcXHRkZXBlbmRzIG9uIElFRUU4MDIxNTRfRFJJVkVSUyBcXHUwMDI2XFx1MDAyNiBNQUM4MDIxNTRcXG4gIDI2OlxcdFxcdHRyaXN0YXRlIFxcXCJBVDg2UkYyMzAvMjMxLzIzMy8yMTIgdHJhbnNjZWl2ZXIgZHJpdmVyXFxcIlxcbiAgMjc6XFx0XFx0ZGVwZW5kcyBvbiBTUElcXG4gIDI4OlxcdFxcdHNlbGVjdCBSRUdNQVBfU1BJXFxuICAyOTpcXHRcXHRoZWxwXFxuICAzMDpcXHRcXHQgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBhdDg2cmYyMzAvMjMxLzIzMy8yMTIgU1BJIDgwMi4xNS40IHdpcmVsZXNzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjMwOjQ0LjQ5NjM5MTU0M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDQxNjQ3ODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgZm9yIEZ1enppbmcgdGhpcyBJRUVFIDgwMi4xNS40IENvZGUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkOiBgSUVFRTgwMjE1NGAsIGBNQUM4MDIxNTRgLCBhbmQgYElFRUU4MDIxNTRfSFdTSU1gLiAgVGhlc2UgYXJlIGNydWNpYWwgYmVjYXVzZSB0aGV5IGRpcmVjdGx5IGVuYWJsZSB0aGUgODAyLjE1LjQgbGF5ZXIgYW5kIGhhcmR3YXJlIHNpbXVsYXRpb24sIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdGVzdGluZy5cblxuTm93LCB0aGUgY29yZSBvZiB0aGlzIGFzc2Vzc21lbnQgaXMgdGhlIGZvY3VzLiBJJ3ZlIGlkZW50aWZpZWQga2V5IHN5bWJvbHM6IGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lYCwgYG1hYzgwMjE1NF9yeF9iZWFjb25fd29ya2VyYCwgYG1hYzgwMjE1NF9yeF9tYWNfY21kX3dvcmtlcmAsIGFuZCBgaWVlZTgwMjE1NF9yeGAuICBJIHdhbnQgdG8gcXVpY2tseSBjb25maXJtIHRoZXNlIGFyZSBzcGVjaWZpYyBhbmQgbm90IGdlbmVyYWwtcHVycG9zZSBmdW5jdGlvbnMgdGhhdCBhcmUgd2lkZWx5IHVzZWQgZWxzZXdoZXJlLiBCYXNlZCBvbiBhIHF1aWNrIHJldmlldywgaXQgY29uZmlybXMgdGhleSBhcmUgYWxsIGRpcmVjdGx5IHRpZWQgdG8gdGhlIDgwMi4xNS40IGFuZCBtYWM4MDIxNTQgbGF5ZXJzLiBHb29kLCB0aGlzIHNvbGlkaWZpZXMgdGhlIHNjb3BlIG9mIG91ciBmb2N1cy5cblxuVGltZSB0byBwcmVwYXJlIHRoZSBmaW5hbCByZWFzb25pbmcuIFRoZSBhaW0gaXMgdG8gdmVyaWZ5IHdoZXRoZXIgb3VyIHBhdGNoIGlzIFwid29ydGggZnV6emluZ1wiLlxuXG4xLiAgKipXb3J0aEZ1enppbmcqKjogKlRydWUqLiBUaGUgbW9kaWZpY2F0aW9ucyBoZXJlIGFyZSBkZWFsaW5nIHdpdGggcmVmZXJlbmNlIGNvdW50aW5nIG9mIHJlY2VpdmVkIGBza19idWZmc2AgaW4gYGllZWU4MDIxNTRfc3ViaWZfZnJhbWVgLiBUaGlzIGlzIGNyaXRpY2FsLlxuMi4gICoqRm9jdXNTeW1ib2xzKio6ICBBcyBhbHJlYWR5IGNvbmZpcm1lZCwgdGhlc2UgYXJlIHNwZWNpZmljLlxuMy4gICoqRW5hYmxlQ29uZmlncyoqOiAgQXMgc3RhdGVkLCB3ZSBoYXZlIHRvIGVuYWJsZSBJRUVFIDgwMi4xNS40IGFuZCB0aGUgaGFyZHdhcmUgc2ltdWxhdGlvbiB0byB0ZXN0IHRoZSBmdWxsIGNvZGUgcGF0aC5cbjQuICAqKlJlYXNvbmluZyoqOiBUaGUgY2hhbmdlIGlzIHRvIGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lYCwgYW5kIGl0IGFmZmVjdHMgaG93IHJlY2VpdmVkIHBhY2tldHMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSBieSByZW1vdmluZyByZWR1bmRhbnQgYHNrYl9nZXRgIGNhbGxzIHdoZW4gcXVldWluZyBiZWFjb24gYW5kIE1BQyBjb21tYW5kIHBhY2tldHMuIFRoaXMgaXMgaW1wb3J0YW50IHNpbmNlIGl0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIG1hYzgwMjE1NFxcX2h3c2ltIG9yIHNvY2tldC1iYXNlZCBmcmFtZSB0cmFuc21pc3Npb24gYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gdmVyaWZ5IGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnQgaW52YXJpYW50cy5cblxuU28sIGluIHN1bW1hcnksIGJhc2VkIG9uIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBtb2RpZmljYXRpb25zLCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMsIGFuZCB0aGUgZnV6emluZyB0YXJnZXQgYmVpbmcgcmVmZXJlbmNlIGNvdW50aW5nLCBJJ20gY29uZmlkZW50IHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgaW5kZWVkIHdvcnRoIGZ1enppbmcuICBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTYwMywiT3V0cHV0VG9rZW5zIjoyMTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMDo0OS45MzgwNDIyNzdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDQ2MzMxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSUVFRTgwMjE1NFwiLFxuICAgIFwiTUFDODAyMTU0XCIsXG4gICAgXCJJRUVFODAyMTU0X0RSSVZFUlNcIixcbiAgICBcIklFRUU4MDIxNTRfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTU0X3N1YmlmX2ZyYW1lXCIsXG4gICAgXCJtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlclwiLFxuICAgIFwibWFjODAyMTU0X3J4X21hY19jbWRfd29ya2VyXCIsXG4gICAgXCJpZWVlODAyMTU0X3J4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2tfYnVmZiByZWZlcmVuY2UgY291bnQgaGFuZGxpbmcgaW4gaWVlZTgwMjE1NF9zdWJpZl9mcmFtZSgpIGJ5IHJlbW92aW5nIHNrYl9nZXQoKSBjYWxscyB3aGVuIGVucXVldWluZyBiZWFjb24gYW5kIE1BQyBjb21tYW5kIHBhY2tldHMgdG8gYXN5bmNocm9ub3VzIHdvcmtlciBxdWV1ZXMuIFRoaXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgcGF0aCBjYW4gYmUgdGVzdGVkIHZpYSBtYWM4MDIxNTRfaHdzaW0gYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gdmVyaWZ5IHNrYiBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGNvcnJlY3RuZXNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklFRUU4MDIxNTRcIixcbiAgICBcIk1BQzgwMjE1NFwiLFxuICAgIFwiSUVFRTgwMjE1NF9EUklWRVJTXCIsXG4gICAgXCJJRUVFODAyMTU0X0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWVlZTgwMjE1NF9zdWJpZl9mcmFtZVwiLFxuICAgIFwibWFjODAyMTU0X3J4X2JlYWNvbl93b3JrZXJcIixcbiAgICBcIm1hYzgwMjE1NF9yeF9tYWNfY21kX3dvcmtlclwiLFxuICAgIFwiaWVlZTgwMjE1NF9yeFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNrX2J1ZmYgcmVmZXJlbmNlIGNvdW50IGhhbmRsaW5nIGluIGllZWU4MDIxNTRfc3ViaWZfZnJhbWUoKSBieSByZW1vdmluZyBza2JfZ2V0KCkgY2FsbHMgd2hlbiBlbnF1ZXVpbmcgYmVhY29uIGFuZCBNQUMgY29tbWFuZCBwYWNrZXRzIHRvIGFzeW5jaHJvbm91cyB3b3JrZXIgcXVldWVzLiBUaGlzIHJlYWNoYWJsZSBuZXR3b3JraW5nIHBhdGggY2FuIGJlIHRlc3RlZCB2aWEgbWFjODAyMTU0X2h3c2ltIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIHZlcmlmeSBza2IgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBjb3JyZWN0bmVzcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzA6NTAuMDA4NTEyOTc2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDI4NTE4MjMxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjMwOjUwLjAwODkyMTkxNloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI0Mjg0NzY5MjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZSgpYCBpbiBgbmV0L21hYzgwMjE1NC9yeC5jYCB0byBhc3NpZ24gYG1hY19wa3QtXFx1MDAzZXNrYiA9IHNrYmAgZGlyZWN0bHkgaW5zdGVhZCBvZiBjYWxsaW5nIGBza2JfZ2V0KHNrYilgLiBUaGlzIGF2b2lkcyB0YWtpbmcgYW4gZXh0cmEgcmVmY291bnQgd2hlbiB0cmFuc2ZlcnJpbmcgb3duZXJzaGlwIG9mIHRoZSBza2IgdG8gdGhlIGFzeW5jaHJvbm91cyBiZWFjb24vTUFDIGNvbW1hbmQgcHJvY2Vzc2luZyB3b3JrZXJzLCBmaXhpbmcgYW4gc2tiIHJlZmVyZW5jZSBjb3VudCAvIG1lbW9yeSBsZWFrLlxcblxcblRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBwYWRkaW5nLCBvciBleHBvc2Uga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS4gYG1hY19wa3RgIGlzIGFscmVhZHkgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iaigpYC4gUmVmZXJlbmNlIGNvdW50aW5nIGFuZCBtZW1vcnkgbGlmZWN5Y2xlIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLCB3aXRoIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgZGV0ZWN0YWJsZSBvbmx5IGJ5IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM0MjU5NjhiYzRjZjUzOTIyYTVjNjkzNjc5N2FkMzY1Y2VjZDMwMjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDExOjI5OjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjE1NC9yeC5jIGIvbmV0L21hYzgwMjE1NC9yeC5jXG5pbmRleCAxOWI1MzgyZTg1YTg0Li5hZDYwMmQyMjJlODYxIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjE1NC9yeC5jXG4rKysgYi9uZXQvbWFjODAyMTU0L3J4LmNcbkBAIC0yODcsNyArMjg3LDcgQEAgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZShzdHJ1Y3QgaWVlZTgwMjE1NF9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdGlmICghbWFjX3BrdClcbiBcdFx0XHRnb3RvIGZhaWw7XG4gXG4tXHRcdG1hY19wa3QtXHUwMDNlc2tiID0gc2tiX2dldChza2IpO1xuK1x0XHRtYWNfcGt0LVx1MDAzZXNrYiA9IHNrYjtcbiBcdFx0bWFjX3BrdC1cdTAwM2VzZGF0YSA9IHNkYXRhO1xuIFx0XHRtYWNfcGt0LVx1MDAzZXBhZ2UgPSBzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VzY2FuX3BhZ2U7XG4gXHRcdG1hY19wa3QtXHUwMDNlY2hhbm5lbCA9IHNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZXNjYW5fY2hhbm5lbDtcbkBAIC0zMDQsNyArMzA0LDcgQEAgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZShzdHJ1Y3QgaWVlZTgwMjE1NF9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdGlmICghbWFjX3BrdClcbiBcdFx0XHRnb3RvIGZhaWw7XG4gXG4tXHRcdG1hY19wa3QtXHUwMDNlc2tiID0gc2tiX2dldChza2IpO1xuK1x0XHRtYWNfcGt0LVx1MDAzZXNrYiA9IHNrYjtcbiBcdFx0bWFjX3BrdC1cdTAwM2VzZGF0YSA9IHNkYXRhO1xuIFx0XHRuZXRkZXZfaG9sZChzZGF0YS1cdTAwM2VkZXYsIFx1MDAyNm1hY19wa3QtXHUwMDNlZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuIFx0XHRzcGluX2xvY2soXHUwMDI2c2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlcnhfbG9jayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMDo1MC4wMDg5MjMxMjZaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjIxMjUyMzcyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aGluZ3M6XG5cbioqQW5hbHl6aW5nIHRoZSBNQUM4MDIxNTQgUmVjZWl2ZSBQYXRoKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoZSByZWNlaXZlciBzaWRlIG9mIHRoZSA4MDIuMTUuNCBNQUMgbGF5ZXIuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhhdCBkaWZmLiBTZWVpbmcgdGhlIGNoYW5nZXMgZGlyZWN0bHkgd2lsbCBnaXZlIG1lIGEgZ29vZCBpbml0aWFsIHNlbnNlIG9mIHRoZSBtb2RpZmljYXRpb25zIHRoYXQgaGF2ZSBiZWVuIG1hZGUsIGFuZCB3aHkuIFRoZW4sIEkgbmVlZCB0byB6b29tIG91dCBhIGJpdCBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSSdsbCByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvbWFjODAyMTU0L3J4LmNgIOKAkyB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbnMgYXJvdW5kIHRoZSBjaGFuZ2UgaXMgY3J1Y2lhbCB0byBncmFzcCB0aGUgaW1wbGljYXRpb25zLiBFc3NlbnRpYWxseSwgSSdtIGNhbGxpbmcgZm9yIGByZWFkLWZpbGVgIG9uIGBuZXQvbWFjODAyMTU0L3J4LmNgLiBJIG5lZWQgdGhhdCBmdWxsIGNvbnRleHQgaW4gZnJvbnQgb2YgbWUgdG8gbWFrZSBhIHByb3BlciBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjcyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMDo1Ni4yMjE0NTAyMjZaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxNTQvcnguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjUwOlxcdFxcdFxcdCAgICBtYWNfY2Ioc2tiKS1cXHUwMDNlZGVzdC5wYW5faWQgIT0gY3B1X3RvX2xlMTYoSUVFRTgwMjE1NF9QQU5JRF9CUk9BRENBU1QpKVxcbiAyNTE6XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2Vwa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7XFxuIDI1MjpcXHRcXHRcXHRlbHNlIGlmIChtYWNfY2Ioc2tiKS1cXHUwMDNlZGVzdC5zaG9ydF9hZGRyID09IHNzaG9ydClcXG4gMjUzOlxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlcGt0X3R5cGUgPSBQQUNLRVRfSE9TVDtcXG4gMjU0OlxcdFxcdFxcdGVsc2UgaWYgKG1hY19jYihza2IpLVxcdTAwM2VkZXN0LnNob3J0X2FkZHIgPT1cXG4gMjU1OlxcdFxcdFxcdFxcdCAgY3B1X3RvX2xlMTYoSUVFRTgwMjE1NF9BRERSX0JST0FEQ0FTVCkpXFxuIDI1NjpcXHRcXHRcXHRcXHRza2ItXFx1MDAzZXBrdF90eXBlID0gUEFDS0VUX0JST0FEQ0FTVDtcXG4gMjU3OlxcdFxcdFxcdGVsc2VcXG4gMjU4OlxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlcGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUO1xcbiAyNTk6XFx0XFx0XFx0YnJlYWs7XFxuIDI2MDpcXHRcXHRkZWZhdWx0OlxcbiAyNjE6XFx0XFx0XFx0cHJfZGVidWcoXFxcImludmFsaWQgZGVzdCBtb2RlXFxcXG5cXFwiKTtcXG4gMjYyOlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4gMjYzOlxcdFxcdH1cXG4gMjY0OlxcdFxcbiAyNjU6XFx0XFx0c2tiLVxcdTAwM2VkZXYgPSBzZGF0YS1cXHUwMDNlZGV2O1xcbiAyNjY6XFx0XFxuIDI2NzpcXHRcXHQvKiBUT0RPIHRoaXMgc2hvdWxkIGJlIG1vdmVkIGFmdGVyIG5ldGlmX3JlY2VpdmVfc2tiIGNhbGwsIG90aGVyd2lzZVxcbiAyNjg6XFx0XFx0ICogd2lyZXNoYXJrIHdpbGwgc2hvdyBhIG1hYyBoZWFkZXIgd2l0aCBzZWN1cml0eSBmaWVsZHMgYW5kIHRoZVxcbiAyNjk6XFx0XFx0ICogcGF5bG9hZCBpcyBhbHJlYWR5IGRlY3J5cHRlZC5cXG4gMjcwOlxcdFxcdCAqL1xcbiAyNzE6XFx0XFx0cmMgPSBtYWM4MDIxNTRfbGxzZWNfZGVjcnlwdChcXHUwMDI2c2RhdGEtXFx1MDAzZXNlYywgc2tiKTtcXG4gMjcyOlxcdFxcdGlmIChyYykge1xcbiAyNzM6XFx0XFx0XFx0cHJfZGVidWcoXFxcImRlY3J5cHRpb24gZmFpbGVkOiAlaVxcXFxuXFxcIiwgcmMpO1xcbiAyNzQ6XFx0XFx0XFx0Z290byBmYWlsO1xcbiAyNzU6XFx0XFx0fVxcbiAyNzY6XFx0XFxuIDI3NzpcXHRcXHRzZGF0YS1cXHUwMDNlZGV2LVxcdTAwM2VzdGF0cy5yeF9wYWNrZXRzKys7XFxuIDI3ODpcXHRcXHRzZGF0YS1cXHUwMDNlZGV2LVxcdTAwM2VzdGF0cy5yeF9ieXRlcyArPSBza2ItXFx1MDAzZWxlbjtcXG4gMjc5OlxcdFxcbiAyODA6XFx0XFx0c3dpdGNoIChtYWNfY2Ioc2tiKS1cXHUwMDNldHlwZSkge1xcbiAyODE6XFx0XFx0Y2FzZSBJRUVFODAyMTU0X0ZDX1RZUEVfQkVBQ09OOlxcbiAyODI6XFx0XFx0XFx0ZGV2X2RiZyhcXHUwMDI2c2RhdGEtXFx1MDAzZWRldi1cXHUwMDNlZGV2LCBcXFwiQkVBQ09OIHJlY2VpdmVkXFxcXG5cXFwiKTtcXG4gMjgzOlxcdFxcdFxcdGlmICghbWFjODAyMTU0X2lzX3NjYW5uaW5nKHNkYXRhLVxcdTAwM2Vsb2NhbCkpXFxuIDI4NDpcXHRcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIDI4NTpcXHRcXG4gMjg2OlxcdFxcdFxcdG1hY19wa3QgPSBremFsbG9jX29iaigqbWFjX3BrdCwgR0ZQX0FUT01JQyk7XFxuIDI4NzpcXHRcXHRcXHRpZiAoIW1hY19wa3QpXFxuIDI4ODpcXHRcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIDI4OTpcXHRcXG4gMjkwOlxcdFxcdFxcdG1hY19wa3QtXFx1MDAzZXNrYiA9IHNrYjtcXG4gMjkxOlxcdFxcdFxcdG1hY19wa3QtXFx1MDAzZXNkYXRhID0gc2RhdGE7XFxuIDI5MjpcXHRcXHRcXHRtYWNfcGt0LVxcdTAwM2VwYWdlID0gc2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VzY2FuX3BhZ2U7XFxuIDI5MzpcXHRcXHRcXHRtYWNfcGt0LVxcdTAwM2VjaGFubmVsID0gc2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VzY2FuX2NoYW5uZWw7XFxuIDI5NDpcXHRcXHRcXHRuZXRkZXZfaG9sZChzZGF0YS1cXHUwMDNlZGV2LCBcXHUwMDI2bWFjX3BrdC1cXHUwMDNlZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xcbiAyOTU6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZXJ4X2xvY2spO1xcbiAyOTY6XFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2bWFjX3BrdC1cXHUwMDNlbm9kZSwgXFx1MDAyNnNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlcnhfYmVhY29uX2xpc3QpO1xcbiAyOTc6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlcnhfbG9jayk7XFxuIDI5ODpcXHRcXHRcXHRxdWV1ZV93b3JrKHNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlbWFjX3dxLCBcXHUwMDI2c2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VyeF9iZWFjb25fd29yayk7XFxuIDI5OTpcXHRcXHRcXHRyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7XFxuIDMwMDpcXHRcXG4gMzAxOlxcdFxcdGNhc2UgSUVFRTgwMjE1NF9GQ19UWVBFX01BQ19DTUQ6XFxuIDMwMjpcXHRcXHRcXHRkZXZfZGJnKFxcdTAwMjZzZGF0YS1cXHUwMDNlZGV2LVxcdTAwM2VkZXYsIFxcXCJNQUMgQ09NTUFORCByZWNlaXZlZFxcXFxuXFxcIik7XFxuIDMwMzpcXHRcXHRcXHRtYWNfcGt0ID0ga3phbGxvY19vYmooKm1hY19wa3QsIEdGUF9BVE9NSUMpO1xcbiAzMDQ6XFx0XFx0XFx0aWYgKCFtYWNfcGt0KVxcbiAzMDU6XFx0XFx0XFx0XFx0Z290byBmYWlsO1xcbiAzMDY6XFx0XFxuIDMwNzpcXHRcXHRcXHRtYWNfcGt0LVxcdTAwM2Vza2IgPSBza2I7XFxuIDMwODpcXHRcXHRcXHRtYWNfcGt0LVxcdTAwM2VzZGF0YSA9IHNkYXRhO1xcbiAzMDk6XFx0XFx0XFx0bmV0ZGV2X2hvbGQoc2RhdGEtXFx1MDAzZWRldiwgXFx1MDAyNm1hY19wa3QtXFx1MDAzZWRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4gMzEwOlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2c2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VyeF9sb2NrKTtcXG4gMzExOlxcdFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNm1hY19wa3QtXFx1MDAzZW5vZGUsIFxcdTAwMjZzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZXJ4X21hY19jbWRfbGlzdCk7XFxuIDMxMjpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VyeF9sb2NrKTtcXG4gMzEzOlxcdFxcdFxcdHF1ZXVlX3dvcmsoc2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VtYWNfd3EsIFxcdTAwMjZzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZXJ4X21hY19jbWRfd29yayk7XFxuIDMxNDpcXHRcXHRcXHRyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7XFxuIDMxNTpcXHRcXG4gMzE2OlxcdFxcdGNhc2UgSUVFRTgwMjE1NF9GQ19UWVBFX0FDSzpcXG4gMzE3OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4gMzE4OlxcdFxcbiAzMTk6XFx0XFx0Y2FzZSBJRUVFODAyMTU0X0ZDX1RZUEVfREFUQTpcXG4gMzIwOlxcdFxcdFxcdHJldHVybiBpZWVlODAyMTU0X2RlbGl2ZXJfc2tiKHNrYik7XFxuIDMyMTpcXHRcXHRkZWZhdWx0OlxcbiAzMjI6XFx0XFx0XFx0cHJfd2Fybl9yYXRlbGltaXRlZChcXFwiaWVlZTgwMjE1NDogYmFkIGZyYW1lIHJlY2VpdmVkIFxcXCJcXG4gMzIzOlxcdFxcdFxcdFxcdFxcdCAgICBcXFwiKHR5cGUgPSAlZClcXFxcblxcXCIsIG1hY19jYihza2IpLVxcdTAwM2V0eXBlKTtcXG4gMzI0OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4gMzI1OlxcdFxcdH1cXG4gMzI2OlxcdFxcbiAzMjc6XFx0ZmFpbDpcXG4gMzI4OlxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAzMjk6XFx0XFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xcbiAzMzA6XFx0fVxcbiAzMzE6XFx0XFxuIDMzMjpcXHRzdGF0aWMgdm9pZFxcbiAzMzM6XFx0aWVlZTgwMjE1NF9wcmludF9hZGRyKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTU0X2FkZHIgKmFkZHIpXFxuIDMzNDpcXHR7XFxuIDMzNTpcXHRcXHRpZiAoYWRkci1cXHUwMDNlbW9kZSA9PSBJRUVFODAyMTU0X0FERFJfTk9ORSkge1xcbiAzMzY6XFx0XFx0XFx0cHJfZGVidWcoXFxcIiVzIG5vdCBwcmVzZW50XFxcXG5cXFwiLCBuYW1lKTtcXG4gMzM3OlxcdFxcdFxcdHJldHVybjtcXG4gMzM4OlxcdFxcdH1cXG4gMzM5OlxcdFxcbiAzNDA6XFx0XFx0cHJfZGVidWcoXFxcIiVzIFBBTiBJRDogJTA0eFxcXFxuXFxcIiwgbmFtZSwgbGUxNl90b19jcHUoYWRkci1cXHUwMDNlcGFuX2lkKSk7XFxuIDM0MTpcXHRcXHRpZiAoYWRkci1cXHUwMDNlbW9kZSA9PSBJRUVFODAyMTU0X0FERFJfU0hPUlQpIHtcXG4gMzQyOlxcdFxcdFxcdHByX2RlYnVnKFxcXCIlcyBpcyBzaG9ydDogJTA0eFxcXFxuXFxcIiwgbmFtZSxcXG4gMzQzOlxcdFxcdFxcdFxcdCBsZTE2X3RvX2NwdShhZGRyLVxcdTAwM2VzaG9ydF9hZGRyKSk7XFxuIDM0NDpcXHRcXHR9IGVsc2Uge1xcbiAzNDU6XFx0XFx0XFx0dTY0IGh3ID0gc3dhYjY0KChfX2ZvcmNlIHU2NClhZGRyLVxcdTAwM2VleHRlbmRlZF9hZGRyKTtcXG4gMzQ2OlxcdFxcbiAzNDc6XFx0XFx0XFx0cHJfZGVidWcoXFxcIiVzIGlzIGhhcmR3YXJlOiAlOHBoQ1xcXFxuXFxcIiwgbmFtZSwgXFx1MDAyNmh3KTtcXG4gMzQ4OlxcdFxcdH1cXG4gMzQ5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzA6NTYuMjIxNTU5NDE2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MzI2OTI5MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb2RlIEJlZm9yZSB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqYmVmb3JlKiBzdGF0ZSBvZiB0aGlzIGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lYCBmdW5jdGlvbi4gSSdtIGZvY3VzaW5nIG9uIGEgc3BlY2lmaWMgc2VxdWVuY2Ugd2hlcmUgYSBgbWFjX3BrdGAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYC4gSWYgdGhhdCBzdWNjZWVkcywgdGhlIGNvZGUgdGhlbiBkb2VzIGBtYWNfcGt0LVx1MDAzZXNrYiA9IHNrYl9nZXQoc2tiKTtgIGFuZCByZXR1cm5zIGBORVRfUlhfU1VDQ0VTU2AuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hlcmUgaXMgdGhlIG9yaWdpbmFsIGBza2JgIGJlaW5nIGhhbmRsZWQ/IElzIHRoZSByZXNwb25zaWJpbGl0eSB0byBmcmVlIHRoZSBgc2tiYCB3aXRoIHRoZSBjYWxsZXIgb3Igd2l0aGluIGEgd29ya3F1ZXVlPyBJIG5lZWQgdG8gdHJhY2UgdGhpcyBgc2tiYCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIHdlcmUgYW55IG1lbW9yeSBtYW5hZ2VtZW50IGlzc3Vlcy4gU28sIEkgbmVlZCB0byBzZWUgd2hlcmUgYGllZWU4MDIxNTRfc3ViaWZfZnJhbWVgIGlzIGNhbGxlZCBmcm9tLCBhbmQgdGhlbiBob3cgdGhlIGBtYWNfcGt0YCB0aGF0J3MgY3JlYXRlZCBoZXJlIGlzIHVzZWQgaW5zaWRlIG9mIHRoZSB3b3JrcXVldWUuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCBwcm9ibGVtIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzE2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzA6NTguNjU0MjU5NTk1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ4Mzg3Nzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxNTRfc3ViaWZfZnJhbWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjE1NC9yeC5jPTIwMT1zdGF0aWMgaW50XFxubmV0L21hYzgwMjE1NC9yeC5jOjIwMjppZWVlODAyMTU0X3N1YmlmX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTU0X3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTU0L3J4LmMtMjAzLVxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjE1NF9oZHIgKmhkcilcXG4tLVxcbm5ldC9tYWM4MDIxNTQvcnguYz00MTE9X19pZWVlODAyMTU0X3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21hYzgwMjE1NC9yeC5jLTQ0MS1cXHRcXHRcXHRza2IyLVxcdTAwM2VkZXYgPSBzZGF0YS1cXHUwMDNlZGV2O1xcbm5ldC9tYWM4MDIxNTQvcnguYzo0NDI6XFx0XFx0XFx0aWVlZTgwMjE1NF9zdWJpZl9mcmFtZShzZGF0YSwgc2tiMiwgXFx1MDAyNmhkcik7XFxubmV0L21hYzgwMjE1NC9yeC5jLTQ0My1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjMxOjAwLjEwMjY2NzA3MloiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjM0MTA3NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhlc2UgaXRlbXM6XG5cbioqRGl2aW5nIGludG8gdGhlIFJlY2VwdGlvbiBXb3JrcXVldWVzKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSBgcnhfYmVhY29uX3dvcmtgIGFuZCBgcnhfbWFjX2NtZF93b3JrYCB3b3JrcXVldWVzLiBUaGVzZSBhcmUgbGlrZWx5IGhhbmRsaW5nIHRoZSBpbmNvbWluZyBiZWFjb24gYW5kIE1BQyBjb21tYW5kIGZyYW1lcywgc28gdGhleSdyZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHJlY2VpdmVyIHByb2Nlc3NlcyBpdHMgaW50ZXJhY3Rpb25zLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZmxvdyBvZiBkYXRhLCBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQgaG93IHRoZXNlIHRhc2tzIGFyZSBzY2hlZHVsZWQgYW5kIHByaW9yaXRpemVkIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzIGFib3V0IHRoZSBsb2dpYyBpbiB0aGVzZSBzcGVjaWZpYyB3b3JrcXVldWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTgzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzE6MDEuNzM2Nzc2NzA5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY2MzEzODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ4X2JlYWNvbl93b3JrfHJ4X21hY19jbWRfd29ya1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTU0L2llZWU4MDIxNTRfaS5oPTMxPXN0cnVjdCBpZWVlODAyMTU0X2xvY2FsIHtcXG4tLVxcbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmgtNzMtXFx0c3RydWN0IGxpc3RfaGVhZCByeF9iZWFjb25fbGlzdDtcXG5uZXQvbWFjODAyMTU0L2llZWU4MDIxNTRfaS5oOjc0OlxcdHN0cnVjdCB3b3JrX3N0cnVjdCByeF9iZWFjb25fd29yaztcXG5uZXQvbWFjODAyMTU0L2llZWU4MDIxNTRfaS5oLTc1LVxcdHN0cnVjdCBsaXN0X2hlYWQgcnhfbWFjX2NtZF9saXN0O1xcbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmg6NzY6XFx0c3RydWN0IHdvcmtfc3RydWN0IHJ4X21hY19jbWRfd29yaztcXG5uZXQvbWFjODAyMTU0L2llZWU4MDIxNTRfaS5oLTc3LVxcdC8qIFNlcmlhbGl6ZXMgcnhfYmVhY29uX2xpc3QgYW5kIHJ4X21hY19jbWRfbGlzdCBhZ2FpbnN0IHRoZSBSWFxcbi0tXFxubmV0L21hYzgwMjE1NC9pZWVlODAyMTU0X2kuaD0yOTA9aW50IG1hYzgwMjE1NF9wcm9jZXNzX2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbWFjODAyMTU0L2llZWU4MDIxNTRfaS5oLTI5Mi1cXHRcXHRcXHQgICAgIHU4IHBhZ2UsIHU4IGNoYW5uZWwpO1xcbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmg6MjkzOnZvaWQgbWFjODAyMTU0X3J4X2JlYWNvbl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG5uZXQvbWFjODAyMTU0L2llZWU4MDIxNTRfaS5oLTI5NC1cXG4tLVxcbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmg9MzA2PXN0YXRpYyBpbmxpbmUgYm9vbCBtYWM4MDIxNTRfaXNfYmVhY29uaW5nKHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbClcXG4tLVxcbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmgtMzEwLVxcbm5ldC9tYWM4MDIxNTQvaWVlZTgwMjE1NF9pLmg6MzExOnZvaWQgbWFjODAyMTU0X3J4X21hY19jbWRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxubmV0L21hYzgwMjE1NC9pZWVlODAyMTU0X2kuaC0zMTItdm9pZCBtYWM4MDIxNTRfZmx1c2hfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbi0tXFxubmV0L21hYzgwMjE1NC9tYWluLmM9NDc9aWVlZTgwMjE1NF9hbGxvY19odyhzaXplX3QgcHJpdl9kYXRhX2xlbiwgY29uc3Qgc3RydWN0IGllZWU4MDIxNTRfb3BzICpvcHMpXFxuLS1cXG5uZXQvbWFjODAyMTU0L21haW4uYy0xMDItXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNmxvY2FsLVxcdTAwM2VzY2FuX3dvcmssIG1hYzgwMjE1NF9zY2FuX3dvcmtlcik7XFxubmV0L21hYzgwMjE1NC9tYWluLmM6MTAzOlxcdElOSVRfV09SSyhcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X2JlYWNvbl93b3JrLCBtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlcik7XFxubmV0L21hYzgwMjE1NC9tYWluLmMtMTA0LVxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZsb2NhbC1cXHUwMDNlYmVhY29uX3dvcmssIG1hYzgwMjE1NF9iZWFjb25fd29ya2VyKTtcXG5uZXQvbWFjODAyMTU0L21haW4uYzoxMDU6XFx0SU5JVF9XT1JLKFxcdTAwMjZsb2NhbC1cXHUwMDNlcnhfbWFjX2NtZF93b3JrLCBtYWM4MDIxNTRfcnhfbWFjX2NtZF93b3JrZXIpO1xcbm5ldC9tYWM4MDIxNTQvbWFpbi5jLTEwNi1cXG4tLVxcbm5ldC9tYWM4MDIxNTQvcnguYz0yND1zdGF0aWMgaW50IGllZWU4MDIxNTRfZGVsaXZlcl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tYWM4MDIxNTQvcnguYy0zMS1cXG5uZXQvbWFjODAyMTU0L3J4LmM6MzI6dm9pZCBtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L21hYzgwMjE1NC9yeC5jLTMzLXtcXG5uZXQvbWFjODAyMTU0L3J4LmMtMzQtXFx0c3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsID1cXG5uZXQvbWFjODAyMTU0L3J4LmM6MzU6XFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsLCByeF9iZWFjb25fd29yayk7XFxubmV0L21hYzgwMjE1NC9yeC5jLTM2LVxcdHN0cnVjdCBjZmc4MDIxNTRfbWFjX3BrdCAqbWFjX3BrdDtcXG4tLVxcbm5ldC9tYWM4MDIxNTQvcnguYz03OD1zdGF0aWMgdm9pZCBtYWM4MDIxNTRfcnhfbWFjX2NtZChzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbWFjODAyMTU0L3J4LmMtMTI1LVxcbm5ldC9tYWM4MDIxNTQvcnguYzoxMjY6dm9pZCBtYWM4MDIxNTRfcnhfbWFjX2NtZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9tYWM4MDIxNTQvcnguYy0xMjcte1xcbm5ldC9tYWM4MDIxNTQvcnguYy0xMjgtXFx0c3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsID1cXG5uZXQvbWFjODAyMTU0L3J4LmM6MTI5OlxcdFxcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCwgcnhfbWFjX2NtZF93b3JrKTtcXG5uZXQvbWFjODAyMTU0L3J4LmMtMTMwLVxcdHN0cnVjdCBjZmc4MDIxNTRfbWFjX3BrdCAqbWFjX3BrdDtcXG4tLVxcbm5ldC9tYWM4MDIxNTQvcnguYz0yMDI9aWVlZTgwMjE1NF9zdWJpZl9mcmFtZShzdHJ1Y3QgaWVlZTgwMjE1NF9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTU0L3J4LmMtMjk3LVxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZXJ4X2xvY2spO1xcbm5ldC9tYWM4MDIxNTQvcnguYzoyOTg6XFx0XFx0cXVldWVfd29yayhzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZW1hY193cSwgXFx1MDAyNnNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlcnhfYmVhY29uX3dvcmspO1xcbm5ldC9tYWM4MDIxNTQvcnguYy0yOTktXFx0XFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xcbi0tXFxubmV0L21hYzgwMjE1NC9yeC5jLTMxMi1cXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VyeF9sb2NrKTtcXG5uZXQvbWFjODAyMTU0L3J4LmM6MzEzOlxcdFxcdHF1ZXVlX3dvcmsoc2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VtYWNfd3EsIFxcdTAwMjZzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZXJ4X21hY19jbWRfd29yayk7XFxubmV0L21hYzgwMjE1NC9yeC5jLTMxNC1cXHRcXHRyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjMxOjAzLjgwMzA5NTYwNloiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTMxNTYzNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRoaW5nczpcblxuKipBbmFseXppbmcgTUFDIDgwMi4xNS40IFJlY2VpdmUgTWVjaGFuaXNtcyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGhlYXJ0IG9mIHRoZSA4MDIuMTUuNCBNQUMgbGF5ZXIsIHNwZWNpZmljYWxseSB0aGUgcmVjZWl2ZSBwYXRoLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlIGxvb2sgYXQgdGhyZWUga2V5IGNvbXBvbmVudHM6IGBtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlcmAsIGBtYWM4MDIxNTRfcnhfbWFjX2NtZF93b3JrZXJgLCBhbmQgYG1hYzgwMjE1NF9mbHVzaF9saXN0YC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGJlYWNvbnMgYXJlIGhhbmRsZWQsIGhvdyBNQUMgY29tbWFuZHMgYXJlIHByb2Nlc3NlZCwgYW5kIGhvdyByZWNlaXZlZCBkYXRhIGxpc3RzIGFyZSBtYW5hZ2VkLCBwcm9iYWJseSBmb3IgZmx1c2hpbmcgb2xkIG9yIGludmFsaWQgZW50cmllcy4gVGhlc2UgdGhyZWUgZnVuY3Rpb25zIHdpbGwgcHJvYmFibHkgYmUgdGhlIGtleXMgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIE1BQyBsYXllciByZWNlaXZlcyBhbmQgcHJvY2Vzc2VzIGl0cyBkYXRhLiBJIHdpbGwgYmUgbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZSB0aHJlZSBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MTUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMTowNS43MzQ2NjI1NDVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjE1NC9yeC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMwOlxcdH1cXG4gIDMxOlxcdFxcbiAgMzI6XFx0dm9pZCBtYWM4MDIxNTRfcnhfYmVhY29uX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuICAzMzpcXHR7XFxuICAzNDpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwgPVxcbiAgMzU6XFx0XFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsLCByeF9iZWFjb25fd29yayk7XFxuICAzNjpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTU0X21hY19wa3QgKm1hY19wa3Q7XFxuICAzNzpcXHRcXG4gIDM4OlxcdFxcdGZvciAoOzspIHtcXG4gIDM5OlxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X2xvY2spO1xcbiAgNDA6XFx0XFx0XFx0bWFjX3BrdCA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X2JlYWNvbl9saXN0LFxcbiAgNDE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGNmZzgwMjE1NF9tYWNfcGt0LCBub2RlKTtcXG4gIDQyOlxcdFxcdFxcdGlmIChtYWNfcGt0KVxcbiAgNDM6XFx0XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNm1hY19wa3QtXFx1MDAzZW5vZGUpO1xcbiAgNDQ6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9sb2NrKTtcXG4gIDQ1OlxcdFxcdFxcdGlmICghbWFjX3BrdClcXG4gIDQ2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHRcXHRtYWM4MDIxNTRfcHJvY2Vzc19iZWFjb24obG9jYWwsIG1hY19wa3QtXFx1MDAzZXNrYixcXG4gIDQ5OlxcdFxcdFxcdFxcdFxcdFxcdCBtYWNfcGt0LVxcdTAwM2VwYWdlLCBtYWNfcGt0LVxcdTAwM2VjaGFubmVsKTtcXG4gIDUwOlxcdFxcbiAgNTE6XFx0XFx0XFx0bmV0ZGV2X3B1dChtYWNfcGt0LVxcdTAwM2VzZGF0YS1cXHUwMDNlZGV2LCBcXHUwMDI2bWFjX3BrdC1cXHUwMDNlZGV2X3RyYWNrZXIpO1xcbiAgNTI6XFx0XFx0XFx0a2ZyZWVfc2tiKG1hY19wa3QtXFx1MDAzZXNrYik7XFxuICA1MzpcXHRcXHRcXHRrZnJlZShtYWNfcGt0KTtcXG4gIDU0OlxcdFxcdH1cXG4gIDU1OlxcdH1cXG4gIDU2OlxcdFxcbiAgNTc6XFx0c3RhdGljIGJvb2wgbWFjODAyMTU0X3Nob3VsZF9hbnN3ZXJfYmVhY29uX3JlcShzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwpXFxuICA1ODpcXHR7XFxuICA1OTpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTU0X2JlYWNvbl9yZXF1ZXN0ICpiZWFjb25fcmVxO1xcbiAgNjA6XFx0XFx0dW5zaWduZWQgaW50IGludGVydmFsO1xcbiAgNjE6XFx0XFxuICA2MjpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuICA2MzpcXHRcXHRiZWFjb25fcmVxID0gcmN1X2RlcmVmZXJlbmNlKGxvY2FsLVxcdTAwM2ViZWFjb25fcmVxKTtcXG4gIDY0OlxcdFxcdGlmICghYmVhY29uX3JlcSkge1xcbiAgNjU6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuICA2NjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuICA2NzpcXHRcXHR9XFxuICA2ODpcXHRcXG4gIDY5OlxcdFxcdGludGVydmFsID0gYmVhY29uX3JlcS1cXHUwMDNlaW50ZXJ2YWw7XFxuICA3MDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gIDcxOlxcdFxcbiAgNzI6XFx0XFx0aWYgKCFtYWM4MDIxNTRfaXNfYmVhY29uaW5nKGxvY2FsKSlcXG4gIDczOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gIDc0OlxcdFxcbiAgNzU6XFx0XFx0cmV0dXJuIGludGVydmFsID09IElFRUU4MDIxNTRfQUNUSVZFX1NDQU5fRFVSQVRJT047XFxuICA3NjpcXHR9XFxuICA3NzpcXHRcXG4gIDc4OlxcdHN0YXRpYyB2b2lkIG1hYzgwMjE1NF9yeF9tYWNfY21kKHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCxcXG4gIDc5OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgY2ZnODAyMTU0X21hY19wa3QgKm1hY19wa3QpXFxuICA4MDpcXHR7XFxuICA4MTpcXHRcXHR1OCBtYWNfY21kO1xcbiAgODI6XFx0XFx0aW50IHJjO1xcbiAgODM6XFx0XFxuICA4NDpcXHRcXHRyYyA9IGllZWU4MDIxNTRfZ2V0X21hY19jbWQobWFjX3BrdC1cXHUwMDNlc2tiLCBcXHUwMDI2bWFjX2NtZCk7XFxuICA4NTpcXHRcXHRpZiAocmMpXFxuICA4NjpcXHRcXHRcXHRyZXR1cm47XFxuICA4NzpcXHRcXG4gIDg4OlxcdFxcdHN3aXRjaCAobWFjX2NtZCkge1xcbiAgODk6XFx0XFx0Y2FzZSBJRUVFODAyMTU0X0NNRF9CRUFDT05fUkVROlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTozMTowNS43MzQ3NDk1NzVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQyMTgxMDI3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBNQUMgQ29tbWFuZCBXb3JrZXIqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHRoZSByZWNlaXZlIHBhdGgsIGFuZCB3ZSd2ZSBhbHJlYWR5IHNjb3BlZCBvdXQgYSBmZXcgYXJlYXMuIExldCdzIG5vdCBnZXQgdHVubmVsIHZpc2lvbiwgdGhvdWdoLiBCZWZvcmUgd2UgbW92ZSBvbiwgSSBuZWVkIHRvIGNoZWNrIG91dCBgbWFjODAyMTU0X3J4X21hY19jbWRfd29ya2VyYC4gSXQncyBhIGtleSBwYXJ0IG9mIHRoZSBNQUMgbGF5ZXIncyByZWNlaXZlIHByb2Nlc3NpbmcuIEkgaGF2ZSBhIGh1bmNoIHRoYXQgc29tZXRoaW5nIGNyaXRpY2FsIHRvIG91ciBkZWJ1Z2dpbmcgZWZmb3J0cyBtYXkgcmVzaWRlIHRoZXJlLiBUaGlzIGNvdWxkIGJlIHdoZXJlIG91ciBwcm9ibGVtIGxpZXMsIG9yIGV2ZW4gd2hlcmUgYSBjcnVjaWFsIHBpZWNlIG9mIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtYWxmdW5jdGlvbiBpcyBiZWluZyBwcm9jZXNzZWQuIEl0J3MgdG9vIGltcG9ydGFudCB0byBza2lwIG92ZXIuIEdvdHRhIGJlIHRob3JvdWdoLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyBpbiBgbWFjODAyMTU0X3J4X21hY19jbWRfd29ya2VyYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk3MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzE6MDguMTU2NTYyNjA2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxNTQvcnguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMjU6XFx0XFxuIDEyNjpcXHR2b2lkIG1hYzgwMjE1NF9yeF9tYWNfY21kX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIDEyNzpcXHR7XFxuIDEyODpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjE1NF9sb2NhbCAqbG9jYWwgPVxcbiAxMjk6XFx0XFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsLCByeF9tYWNfY21kX3dvcmspO1xcbiAxMzA6XFx0XFx0c3RydWN0IGNmZzgwMjE1NF9tYWNfcGt0ICptYWNfcGt0O1xcbiAxMzE6XFx0XFxuIDEzMjpcXHRcXHRmb3IgKDs7KSB7XFxuIDEzMzpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9sb2NrKTtcXG4gMTM0OlxcdFxcdFxcdG1hY19wa3QgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9tYWNfY21kX2xpc3QsXFxuIDEzNTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgY2ZnODAyMTU0X21hY19wa3QsIG5vZGUpO1xcbiAxMzY6XFx0XFx0XFx0aWYgKG1hY19wa3QpXFxuIDEzNzpcXHRcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2bWFjX3BrdC1cXHUwMDNlbm9kZSk7XFxuIDEzODpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X2xvY2spO1xcbiAxMzk6XFx0XFx0XFx0aWYgKCFtYWNfcGt0KVxcbiAxNDA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDE0MTpcXHRcXG4gMTQyOlxcdFxcdFxcdC8qIEEgc3RvcHBlZCBpbnRlcmZhY2UgY2Fubm90IHRyYW5zbWl0OyBza2lwcGluZyBhdm9pZHMgYVxcbiAxNDM6XFx0XFx0XFx0ICogbmVlZGxlc3MgYXNzb2NpYXRpb24gcmVzcG9uc2UgKGFuZCB0aGUgIW5ldGlmX3J1bm5pbmcoKVxcbiAxNDQ6XFx0XFx0XFx0ICogd2FybmluZyBpdCB3b3VsZCB0cmlwKSBkdXJpbmcgdGVhcmRvd24uIFRoZSBiZWFjb24gd29ya2VyXFxuIDE0NTpcXHRcXHRcXHQgKiBuZWVkcyBubyBzdWNoIGNoZWNrIGFzIGl0IG5ldmVyIHRyYW5zbWl0cy5cXG4gMTQ2OlxcdFxcdFxcdCAqL1xcbiAxNDc6XFx0XFx0XFx0aWYgKGllZWU4MDIxNTRfc2RhdGFfcnVubmluZyhtYWNfcGt0LVxcdTAwM2VzZGF0YSkpXFxuIDE0ODpcXHRcXHRcXHRcXHRtYWM4MDIxNTRfcnhfbWFjX2NtZChsb2NhbCwgbWFjX3BrdCk7XFxuIDE0OTpcXHRcXG4gMTUwOlxcdFxcdFxcdG5ldGRldl9wdXQobWFjX3BrdC1cXHUwMDNlc2RhdGEtXFx1MDAzZWRldiwgXFx1MDAyNm1hY19wa3QtXFx1MDAzZWRldl90cmFja2VyKTtcXG4gMTUxOlxcdFxcdFxcdGtmcmVlX3NrYihtYWNfcGt0LVxcdTAwM2Vza2IpO1xcbiAxNTI6XFx0XFx0XFx0a2ZyZWUobWFjX3BrdCk7XFxuIDE1MzpcXHRcXHR9XFxuIDE1NDpcXHR9XFxuIDE1NTpcXHRcXG4gMTU2OlxcdC8qKlxcbiAxNTc6XFx0ICogbWFjODAyMTU0X2ZsdXNoX2xpc3QgLSBmcmVlIHF1ZXVlZCBSWCBmcmFtZXMgb24gQGxpc3RcXG4gMTU4OlxcdCAqIEBsaXN0OiByeF9iZWFjb25fbGlzdCBvciByeF9tYWNfY21kX2xpc3RcXG4gMTU5OlxcdCAqIEBzZGF0YTogb25seSBmcmVlIGZyYW1lcyByZWNlaXZlZCBvbiB0aGlzIGludGVyZmFjZSwgb3IgJU5VTEwgZm9yIGFsbFxcbiAxNjA6XFx0ICpcXG4gMTYxOlxcdCAqIEVhY2ggZnJhbWUgcGlucyB0aGUgbmV0X2RldmljZSBpdCB3YXMgcmVjZWl2ZWQgb24gKHZpYSBuZXRkZXZfaG9sZCgpKSxcXG4gMTYyOlxcdCAqIHNvIHJlbGVhc2UgdGhhdCByZWZlcmVuY2UgYXMgdGhlIGZyYW1lIGlzIGRyb3BwZWQuIENhbGxlciBtdXN0IGhvbGRcXG4gMTYzOlxcdCAqIGxvY2FsLVxcdTAwM2VyeF9sb2NrLlxcbiAxNjQ6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjMxOjA4LjE1NjY0MTYxNVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTM3MDMxNzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBMZWFrIEZpeCBhbmQgS01TQU4gSW1wbGljYXRpb25zKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9tYWM4MDIxNTQvcnguY2AuICBCYXNpY2FsbHksIGl0J3MgYSBzdHJhaWdodGZvcndhcmQgZml4OiBpbiBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZWAsIHdoZW4gYSBgbWFjX3BrdGAgaXMgcXVldWVkLCB3ZSdyZSBjaGFuZ2luZyBob3cgd2UgaGFuZGxlIHRoZSBgc2tiYC4gUHJldmlvdXNseSwgd2Ugd2VyZSBkb2luZyBgbWFjX3BrdC1cdTAwM2Vza2IgPSBza2JfZ2V0KHNrYik7YCBhbmQgcmV0dXJuaW5nIGBORVRfUlhfU1VDQ0VTU2Agd2l0aG91dCBkcm9wcGluZyB0aGUgb3JpZ2luYWwgYHNrYmAgcmVmZXJlbmNlLiBUaGlzIG1lYW50IHRoZSBgc2tiYCByZWZjb3VudCB3YXMgYnVtcGVkLCBidXQgbmV2ZXIgZGVjcmVtZW50ZWQgaW4gdGhpcyBwYXRoLCBsZWFkaW5nIHRvIGEgY2xhc3NpYyBtZW1vcnkgbGVhay4gVGhlIHdvcmtlciB3b3VsZCBldmVudHVhbGx5IGZyZWUgaXQgb25jZSwgYnV0IHRoZSByZWZjb3VudCB3b3VsZCBiZSB3cm9uZy5cblxuVGhlIHBhdGNoJ3Mgc29sdXRpb24gaXMgc2ltcGxlIGFuZCBlbGVnYW50OiByZXBsYWNlIHRoYXQgd2l0aCBgbWFjX3BrdC1cdTAwM2Vza2IgPSBza2I7YC4gIFRoaXMgdHJhbnNmZXJzICpvd25lcnNoaXAqIG9mIHRoZSBgc2tiYCB0byBgbWFjX3BrdGAgaW1tZWRpYXRlbHksIGZpeGluZyB0aGUgbGVhay4gTm8gbW9yZSB1bm5lY2Vzc2FyeSByZWZjb3VudCBpbmNyZW1lbnRzLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcywgc3BlY2lmaWNhbGx5IGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeT8gSSd2ZSBydW4gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OlxuXG4xLiAgKipVc2VyLXNwYWNlIGV4cG9zdXJlOioqIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgbWlnaHQgbGVhayBpbmZvLiBgbWFjX3BrdGAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgd2hpY2ggZ3VhcmFudGVlcyB6ZXJvLWluaXRpYWxpemF0aW9uLiBUaGlzIGlzIGdvb2QuXG4yLiAgKipVbmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGFyZSBiZWluZyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIHdpdGggdGhpcyBjaGFuZ2UuXG4zLiAgKipCdWZmZXIgaGFuZGxpbmc6KiogTm8gY2hhbmdlcyB0byBidWZmZXIgbGVuZ3RocywgYm91bmRzIGNoZWNrcywgb3IgbG9naWMgdGhhdCB3b3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcy5cbjQuICAqKkJ1ZyB0eXBlOioqIFRoaXMgaXMgc3RyaWN0bHkgYSByZWZlcmVuY2UgY291bnQgbGVhay4gIElmIHNvbWV0aGluZyBlbHNlIHdhcyBicm9rZW4sIHRoZXJlICptaWdodCogYmUgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUsIGJ1dCBLQVNBTiBhbmQga21lbWxlYWsgYXJlIGFscmVhZHkgcGVyZmVjdGx5IHN1aXRlZCB0byBjYXRjaCB0aG9zZS5cblxuU28sIHdoZXJlIGRvZXMgS01TQU4gZml0IGluPyBXZSB1c2UgS01TQU4gZm9yIGZpbmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm8gbGVha3MsIG5vdCByZWZlcmVuY2UgY291bnQgZXJyb3JzLiBUaGlzIHBhdGNoICpvbmx5KiBhZGRyZXNzZXMgcmVmZXJlbmNlIGNvdW50aW5nLiAgVGhlIGNoYW5nZSBhdm9pZHMgdGFraW5nIGFuICpleHRyYSogcmVmY291bnQsIGFuZCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGV4cG9zZWQgdG8gdXNlci1zcGFjZSBhcyBwYXJ0IG9mIHRoaXMuIFN0YW5kYXJkIG1lbW9yeSBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiwga21lbWxlYWssIGV0Yy4sIGFyZSBzdWZmaWNpZW50IGZvciBkZXRlY3RpbmcgdGhlIHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHR5cGUgb2YgbWVtb3J5IG1hbmFnZW1lbnQuXG5cblNvLCBpbiBzdW1tYXJ5OlxuXG4qICAgKipDb250ZXh0OioqIFBhdGNoIG1vZGlmaWVzIGBuZXQvbWFjODAyMTU0L3J4LmNgIGJ5IHJlbW92aW5nIHRoZSBgc2tiX2dldGAgY2FsbCB3aGVuIGVucXVldWluZyBiZWFjb24gYW5kIE1BQyBjb21tYW5kIHBhY2tldHMuXG4qICAgKipJbXBhY3Q6KiogRml4ZXMgYSBtZW1vcnkgbGVhayBjYXVzZWQgYnkgYW4gdW5uZWNlc3NhcnkgcmVmZXJlbmNlIGNvdW50IG9uIHRoZSBgc2tiYC5cbiogICAqKktNU0FOIEFwcGxpY2FiaWxpdHk6KiogS01TQU4gaXMgbm90IGFwcGxpY2FibGUuIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zIG9yIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBmaWVsZHMuXG4qICAgKipLQVNBTi9HZW5lcmFsIFNhbml0aXplcnM6KiogS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIG1lbW9yeSBkZWJ1Z2dpbmcgdG9vbHMgYXJlIHN1ZmZpY2llbnQgZm9yIGhhbmRsaW5nIHRoZSByZWZjb3VudCByZWxhdGVkIGlzc3Vlcy5cblxuSSdtIGNvbmZpZGVudCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYCBoZXJlLiAgVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MDUsIk91dHB1dFRva2VucyI6MjEwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MzE6MTQuMjkzNjc2MDE4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaWVlZTgwMjE1NF9zdWJpZl9mcmFtZSgpYCBpbiBgbmV0L21hYzgwMjE1NC9yeC5jYCB0byBhc3NpZ24gYG1hY19wa3QtXFx1MDAzZXNrYiA9IHNrYmAgZGlyZWN0bHkgaW5zdGVhZCBvZiBjYWxsaW5nIGBza2JfZ2V0KHNrYilgLiBUaGlzIGF2b2lkcyB0YWtpbmcgYW4gZXh0cmEgcmVmY291bnQgd2hlbiB0cmFuc2ZlcnJpbmcgb3duZXJzaGlwIG9mIHRoZSBza2IgdG8gdGhlIGFzeW5jaHJvbm91cyBiZWFjb24vTUFDIGNvbW1hbmQgcHJvY2Vzc2luZyB3b3JrZXJzLCBmaXhpbmcgYW4gc2tiIHJlZmVyZW5jZSBjb3VudCAvIG1lbW9yeSBsZWFrLlxcblxcblRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBwYWRkaW5nLCBvciBleHBvc2Uga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS4gYG1hY19wa3RgIGlzIGFscmVhZHkgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iaigpYC4gUmVmZXJlbmNlIGNvdW50aW5nIGFuZCBtZW1vcnkgbGlmZWN5Y2xlIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLCB3aXRoIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgZGV0ZWN0YWJsZSBvbmx5IGJ5IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpZWVlODAyMTU0X3N1YmlmX2ZyYW1lKClgIGluIGBuZXQvbWFjODAyMTU0L3J4LmNgIHRvIGFzc2lnbiBgbWFjX3BrdC1cXHUwMDNlc2tiID0gc2tiYCBkaXJlY3RseSBpbnN0ZWFkIG9mIGNhbGxpbmcgYHNrYl9nZXQoc2tiKWAuIFRoaXMgYXZvaWRzIHRha2luZyBhbiBleHRyYSByZWZjb3VudCB3aGVuIHRyYW5zZmVycmluZyBvd25lcnNoaXAgb2YgdGhlIHNrYiB0byB0aGUgYXN5bmNocm9ub3VzIGJlYWNvbi9NQUMgY29tbWFuZCBwcm9jZXNzaW5nIHdvcmtlcnMsIGZpeGluZyBhbiBza2IgcmVmZXJlbmNlIGNvdW50IC8gbWVtb3J5IGxlYWsuXFxuXFxuVGhlIGNoYW5nZXMgZG8gbm90IGFsbG9jYXRlIG9yIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGV4cG9zZSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBgbWFjX3BrdGAgaXMgYWxyZWFkeSBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKClgLiBSZWZlcmVuY2UgY291bnRpbmcgYW5kIG1lbW9yeSBsaWZlY3ljbGUgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMsIHdpdGggbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBkZXRlY3RhYmxlIG9ubHkgYnkgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowr5tt2[1] Phase: Succeeded StartedAt: 2026-09-06 11:31:25 +0000 UTC FinishedAt: 2026-09-06 11:31:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5tt2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 11:31:25 +0000 UTC FinishedAt: 2026-09-06 11:31:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5tt2[2] Phase: Succeeded StartedAt: 2026-09-06 11:31:25 +0000 UTC FinishedAt: 2026-09-06 15:19:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-06 11:31:25 +0000 UTC FinishedAt: 2026-09-06 15:19:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 11:31:25 +0000 UTC FinishedAt: 2026-09-06 11:31:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 11:31:25 +0000 UTC FinishedAt: 2026-09-06 11:31:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr5tt2/series-workflowr5tt2-convert-artifact-2713344883/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 11:31:36 +0000 UTC FinishedAt: 2026-09-06 11:48:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 11:31:36 +0000 UTC FinishedAt: 2026-09-06 11:48:28 +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:*ecc12808-4aa4-478c-bdf0-7790032a1cc0,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-workflowr5tt2/series-workflowr5tt2-convert-artifact-2713344883/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": "6683795c-7789-44c0-aeb5-7d9c607ab3c0", "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-workflowr5tt2/series-workflowr5tt2-build-action-3629432353/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 11:31:36 +0000 UTC FinishedAt: 2026-09-06 11:48:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ecc12808-4aa4-478c-bdf0-7790032a1cc0,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-workflowr5tt2/series-workflowr5tt2-convert-artifact-2713344883/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": "6683795c-7789-44c0-aeb5-7d9c607ab3c0", "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-workflowr5tt2/series-workflowr5tt2-build-action-3629432353/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 11:48:28 +0000 UTC FinishedAt: 2026-09-06 11:48:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 11:48:28 +0000 UTC FinishedAt: 2026-09-06 11:48:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 11:48:28 +0000 UTC FinishedAt: 2026-09-06 11:48:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 11:48:28 +0000 UTC FinishedAt: 2026-09-06 11:48:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr5tt2/series-workflowr5tt2-convert-artifact-265930858/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 11:48:38 +0000 UTC FinishedAt: 2026-09-06 11:50:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 11:48:38 +0000 UTC FinishedAt: 2026-09-06 11:50:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6683795c-7789-44c0-aeb5-7d9c607ab3c0,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-workflowr5tt2/series-workflowr5tt2-build-action-3629432353/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-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 11:50:31 +0000 UTC FinishedAt: 2026-09-06 11:50:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 11:50:31 +0000 UTC FinishedAt: 2026-09-06 11:50:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 11:50:31 +0000 UTC FinishedAt: 2026-09-06 12:15:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 11:50:31 +0000 UTC FinishedAt: 2026-09-06 12:15:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ecc12808-4aa4-478c-bdf0-7790032a1cc0,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-workflowr5tt2/series-workflowr5tt2-convert-artifact-265930858/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": "0f297b73-ee95-430d-b5b3-194d249c6b56", "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-workflowr5tt2/series-workflowr5tt2-build-action-2187457678/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 11:50:31 +0000 UTC FinishedAt: 2026-09-06 12:15:35 +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:*ecc12808-4aa4-478c-bdf0-7790032a1cc0,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-workflowr5tt2/series-workflowr5tt2-convert-artifact-265930858/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": "0f297b73-ee95-430d-b5b3-194d249c6b56", "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-workflowr5tt2/series-workflowr5tt2-build-action-2187457678/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 12:15:45 +0000 UTC FinishedAt: 2026-09-06 12:15:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 12:15:45 +0000 UTC FinishedAt: 2026-09-06 12:15:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 12:15:45 +0000 UTC FinishedAt: 2026-09-06 12:17:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 12:15:45 +0000 UTC FinishedAt: 2026-09-06 12:17:23 +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:*0f297b73-ee95-430d-b5b3-194d249c6b56,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-workflowr5tt2/series-workflowr5tt2-build-action-2187457678/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-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-06 12:17:32 +0000 UTC FinishedAt: 2026-09-06 15:19:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-06 12:17:32 +0000 UTC FinishedAt: 2026-09-06 15:19:44 +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":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"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:*6683795c-7789-44c0-aeb5-7d9c607ab3c0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0f297b73-ee95-430d-b5b3-194d249c6b56,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-workflowr5tt2/series-workflowr5tt2-build-action-3629432353/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-workflowr5tt2/series-workflowr5tt2-build-action-2187457678/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 12:17:32 +0000 UTC FinishedAt: 2026-09-06 12:17:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 12:17:32 +0000 UTC FinishedAt: 2026-09-06 12:17:38 +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":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"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-workflowr5tt2/series-workflowr5tt2-convert-artifact-2570744831/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 12:17:32 +0000 UTC FinishedAt: 2026-09-06 12:17:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 12:17:32 +0000 UTC FinishedAt: 2026-09-06 12:17:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 12:17:33 +0000 UTC FinishedAt: 2026-09-06 12:17:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-06 12:17:59 +0000 UTC FinishedAt: 2026-09-06 15:19:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5tt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee802154_subif_frame","mac802154_rx_beacon_worker","mac802154_rx_mac_cmd_worker","ieee802154_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"c8152edf-04a3-45a5-8c2e-50dbeace0b73","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-06 12:17:59 +0000 UTC FinishedAt: 2026-09-06 15:19:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6683795c-7789-44c0-aeb5-7d9c607ab3c0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0f297b73-ee95-430d-b5b3-194d249c6b56,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-workflowr5tt2/series-workflowr5tt2-build-action-3629432353/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-workflowr5tt2/series-workflowr5tt2-build-action-2187457678/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-workflowr5tt2/series-workflowr5tt2-convert-artifact-2570744831/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,}