Name: series-workflowx28hh Phase: Succeeded StartedAt: 2026-09-15 10:40:46 +0000 UTC FinishedAt: 2026-09-15 15:01:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx28hh[0] Phase: Succeeded StartedAt: 2026-09-15 10:40:46 +0000 UTC FinishedAt: 2026-09-15 11:18:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx28hh[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 10:40:46 +0000 UTC FinishedAt: 2026-09-15 11:18:35 +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": "7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VLAN_8021Q", "NET_ACT_MPLS", "NET_ACT_VLAN", "NET_CLS_ACT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VLAN_8021Q", "NET_ACT_MPLS", "NET_ACT_VLAN", "NET_CLS_ACT" ], "series_id": "e5d7c409-5a32-4530-9bb4-754f48d61578" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "skb_vlan_push", "vlan_do_receive", "tcf_mpls_act", "tcf_vlan_act" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9NUExTJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfVkxBTiYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl92bGFuX3B1c2gmIzM0OywKICAgICYjMzQ7dmxhbl9kb19yZWNlaXZlJiMzNDssCiAgICAmIzM0O3RjZl9tcGxzX2FjdCYjMzQ7LAogICAgJiMzNDt0Y2Zfdmxhbl9hY3QmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIHVzaW5nIHBza2JfbWF5X3B1bGwoc2tiLCBtYWNfbGVuKSBpbiBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZygpIHRvIGVuc3VyZSB0aGF0IHRoZSBwYWNrZXQgYnVmZmVyIGNvbnRhaW5zIGF0IGxlYXN0IG1hY19sZW4gbGluZWFyIGJ5dGVzIGJlZm9yZSBwZXJmb3JtaW5nIGhlYWRlciBtYW5pcHVsYXRpb25zIChza2JfcG9zdHB1c2hfZGF0YV9tb3ZlIGFuZCB3cml0aW5nIHZsYW5fZXRoaGRyKS4gV2l0aG91dCB0aGlzIGNoZWNrLCBwYWNrZXRzIHNob3J0ZXIgdGhhbiBtYWNfbGVuIG9yIG5vbi1saW5lYXIgYnVmZmVycyBjb3VsZCBsZWFkIHRvIG91dC1vZi1ib3VuZHMgaGVhcCBhY2Nlc3NlcyAoT09CIHJlYWQvd3JpdGUpLCB3aGljaCBhcmUgZGlyZWN0bHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZSBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBidWZmZXJzLCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHBza2JfbWF5X3B1bGwoc2tiLCBtYWNfbGVuKSBjaGVjayB0byBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZygpIGluIGluY2x1ZGUvbGludXgvaWZfdmxhbi5oIHRvIGVuc3VyZSBzdWZmaWNpZW50IGhlYWQgZGF0YSBpcyBwdWxsZWQgYmVmb3JlIGluc2VydGluZyBhbiBpbm5lciBWTEFOIHRhZy4gVGhpcyByZWFjaGFibGUgaGVscGVyIGlzIGV4ZXJjaXNlZCBieSBjb3JlIG5ldHdvcmtpbmcgcGF0aHMgc3VjaCBhcyA4MDIuMVEgcmVjZWl2ZSBwcm9jZXNzaW5nICh2bGFuX2RvX3JlY2VpdmUpLCBWTEFOIHB1c2ggb3BlcmF0aW9ucyAoc2tiX3ZsYW5fcHVzaCksIGFuZCBUQyBhY3Rpb25zICh0Y2ZfbXBsc19hY3QsIHRjZl92bGFuX2FjdCkuIEZ1enppbmcgaXMgd29ydGh3aGlsZSB0byB0ZXN0IGJlaGF2aW9yIHdpdGggbm9uLWxpbmVhciwgZnJhZ21lbnRlZCwgb3IgbWFsZm9ybWVkIHBhY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmMzZkY2FhMWQ5NjdlYzJiNzJlYjQzNjVmNGJmODMzOTYzYjhkYmY0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTE6MTA6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl92bGFuLmggYi9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaFxuaW5kZXggMjBjYzE2ZWE0ZTVhYi4uNDg0NjAzMmJmNGZmYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaFxuQEAgLTM2NSw2ICYjNDM7MzY1LDkgQEAgc3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGNvbnN0IHU4IG1ldGFfbGVuID0gbWFjX2xlbiBcdTAwM2UgRVRIX1RMRU4gPyBza2JfbWV0YWRhdGFfbGVuKHNrYikgOiAwO1xuIFx0c3RydWN0IHZsYW5fZXRoaGRyICp2ZXRoO1xuIFxuJiM0MztcdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdGlmIChza2JfY293X2hlYWQoc2tiLCBtZXRhX2xlbiAmIzQzOyBWTEFOX0hMRU4pIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfTVBMUyYjMzQ7LAogICAgJiMzNDtORVRfQUNUX1ZMQU4mIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza2Jfdmxhbl9wdXNoJiMzNDssCiAgICAmIzM0O3ZsYW5fZG9fcmVjZWl2ZSYjMzQ7LAogICAgJiMzNDt0Y2ZfbXBsc19hY3QmIzM0OywKICAgICYjMzQ7dGNmX3ZsYW5fYWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbikgY2hlY2sgdG8gX192bGFuX2luc2VydF9pbm5lcl90YWcoKSBpbiBpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaCB0byBlbnN1cmUgc3VmZmljaWVudCBoZWFkIGRhdGEgaXMgcHVsbGVkIGJlZm9yZSBpbnNlcnRpbmcgYW4gaW5uZXIgVkxBTiB0YWcuIFRoaXMgcmVhY2hhYmxlIGhlbHBlciBpcyBleGVyY2lzZWQgYnkgY29yZSBuZXR3b3JraW5nIHBhdGhzIHN1Y2ggYXMgODAyLjFRIHJlY2VpdmUgcHJvY2Vzc2luZyAodmxhbl9kb19yZWNlaXZlKSwgVkxBTiBwdXNoIG9wZXJhdGlvbnMgKHNrYl92bGFuX3B1c2gpLCBhbmQgVEMgYWN0aW9ucyAodGNmX21wbHNfYWN0LCB0Y2Zfdmxhbl9hY3QpLiBGdXp6aW5nIGlzIHdvcnRod2hpbGUgdG8gdGVzdCBiZWhhdmlvciB3aXRoIG5vbi1saW5lYXIsIGZyYWdtZW50ZWQsIG9yIG1hbGZvcm1lZCBwYWNrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjM2ZGNhYTFkOTY3ZWMyYjcyZWI0MzY1ZjRiZjgzMzk2M2I4ZGJmNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDExOjEwOjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl92bGFuLmggYi9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaAppbmRleCAyMGNjMTZlYTRlNWFiLi40ODQ2MDMyYmY0ZmZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaApAQCAtMzY1LDYgJiM0MzszNjUsOSBAQCBzdGF0aWMgaW5saW5lIGludCBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWNvbnN0IHU4IG1ldGFfbGVuID0gbWFjX2xlbiAmZ3Q7IEVUSF9UTEVOID8gc2tiX21ldGFkYXRhX2xlbihza2IpIDogMDsKIAlzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZldGg7CiAKJiM0MzsJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbikpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJaWYgKHNrYl9jb3dfaGVhZChza2IsIG1ldGFfbGVuICYjNDM7IFZMQU5fSExFTikgJmx0OyAwKQogCQlyZXR1cm4gLUVOT01FTTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTAyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFZMQU4gSW5zZXJ0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgYSBgZGlmZmAgcHJlc2VudGVkLCBhbmQgdGhlIGZpbGUgYmVpbmcgbW9kaWZpZWQgaXMgYGluY2x1ZGUvbGludXgvaWZfdmxhbi5oYC4gU2VlbXMgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIFZMQU4gdGFnZ2luZywgc3BlY2lmaWNhbGx5IGFuIGlubmVyIHRhZyBpbnNlcnRpb24sIGp1ZGdpbmcgYnkgdGhlIGZ1bmN0aW9uIG5hbWUsIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AuCgpUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjaGVjaywgYGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pKSkgcmV0dXJuIC1FSU5WQUw7YCBiZWZvcmUgYXR0ZW1wdGluZyBhbnkgbWVtb3J5IG1hbmlwdWxhdGlvbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBnb29kIGFkZGl0aW9uLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGd1YXJkaW5nIGFnYWluc3QgYSBwb3RlbnRpYWwgYnVmZmVyIHVuZGVycnVuLiAgYHBza2JfbWF5X3B1bGxgIHByb2JhYmx5IHZlcmlmaWVzIGlmIHdlIGNhbiBzYWZlbHkgcmVhZCBgbWFjX2xlbmAgYnl0ZXMgZnJvbSB0aGUgcGFja2V0IGRhdGEgd2l0aG91dCBjYXVzaW5nIGEga2VybmVsIHBhbmljIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzLiAgRXNzZW50aWFsbHksIGl0IGNvbmZpcm1zIHRoZSBwcmVzZW5jZSBvZiBlbm91Z2ggZGF0YSBpbiB0aGUgU0tCIHRvIHByb2NlZWQgd2l0aCBWTEFOIGhlYWRlciBpbnNlcnRpb24uIEEgZmFpbHVyZSBoZXJlLCByZXByZXNlbnRlZCBieSBgLUVJTlZBTGAsIGxpa2VseSBpbmRpY2F0ZXMgYW4gaW52YWxpZCBwYWNrZXQgZm9ybWF0IG9yIGNvcnJ1cHRlZCBkYXRhLiBUaGlzIGlzIGEgdmVyeSBjb21tb24gc2NlbmFyaW8gZm9yIGJ1ZmZlciBjaGVja3MuCgpJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0sIGJ1dCB0aGlzIGNoZWNrIGxpa2VseSBwcmV2ZW50cyBhIGNyYXNoIGlmIHRoZXJlJiMzOTtzIGluc3VmZmljaWVudCBkYXRhIHRvIHdvcmsgd2l0aC4gSSBzaG91bGQgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGVzcGVjaWFsbHkgdGhlIGNhbGxzIHRvIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaG93IHRoZSBgbWFjX2xlbmAgdmFsdWUgaXMgZGVyaXZlZC4gSXQgaXMgcHJvYmFibHkgdGhlIG91dGVyIE1BQyBoZWFkZXIgbGVuZ3RoLiBMb29raW5nIGNsb3NlciBhdCBsaW5lIDM2NSwgSSB3aWxsIGluc3BlY3QgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCBhbmQgaXRzIGNhbGxlcnMgdG8gZW5zdXJlIHRoaXMgbmV3IHZhbGlkYXRpb24gaXMgc3VmZmljaWVudCBhbmQgdGhhdCBubyBwb3RlbnRpYWwgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkIGVsc2V3aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaWZfdmxhbi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNTU6XHQgKlxuIDM1NjpcdCAqIEluc2VydHMgdGhlIFZMQU4gdGFnIGludG8gQHNrYiBhcyBwYXJ0IG9mIHRoZSBwYXlsb2FkIGF0IG9mZnNldCBtYWNfbGVuXG4gMzU3Olx0ICogRG9lcyBub3QgY2hhbmdlIHNrYi1cdTAwM2Vwcm90b2NvbCBzbyB0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGR1cmluZyByZWNlaXZlLlxuIDM1ODpcdCAqXG4gMzU5Olx0ICogUmV0dXJuczogZXJyb3IgaWYgc2tiX2Nvd19oZWFkIGZhaWxzLlxuIDM2MDpcdCAqL1xuIDM2MTpcdHN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4gMzYyOlx0XHRcdFx0XHRcdCAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSxcbiAzNjM6XHRcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgbWFjX2xlbilcbiAzNjQ6XHR7XG4gMzY1Olx0XHRjb25zdCB1OCBtZXRhX2xlbiA9IG1hY19sZW4gXHUwMDNlIEVUSF9UTEVOID8gc2tiX21ldGFkYXRhX2xlbihza2IpIDogMDtcbiAzNjY6XHRcdHN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aDtcbiAzNjc6XHRcbiAzNjg6XHRcdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pKSlcbiAzNjk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzcwOlx0XG4gMzcxOlx0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgbWV0YV9sZW4gJiM0MzsgVkxBTl9ITEVOKSBcdTAwM2MgMClcbiAzNzI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzczOlx0XG4gMzc0Olx0XHRza2JfcHVzaChza2IsIFZMQU5fSExFTik7XG4gMzc1Olx0XG4gMzc2Olx0XHQvKiBNb3ZlIHRoZSBtYWMgaGVhZGVyIHNhbnMgcHJvdG8gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IGhlYWRlci4gKi9cbiAzNzc6XHRcdGlmIChsaWtlbHkobWFjX2xlbiBcdTAwM2UgRVRIX1RMRU4pKVxuIDM3ODpcdFx0XHRza2JfcG9zdHB1c2hfZGF0YV9tb3ZlKHNrYiwgVkxBTl9ITEVOLCBtYWNfbGVuIC0gRVRIX1RMRU4pO1xuIDM3OTpcdFx0aWYgKHNrYl9tYWNfaGVhZGVyX3dhc19zZXQoc2tiKSlcbiAzODA6XHRcdFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgLT0gVkxBTl9ITEVOO1xuIDM4MTpcdFxuIDM4MjpcdFx0dmV0aCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgbWFjX2xlbiAtIEVUSF9ITEVOKTtcbiAzODM6XHRcbiAzODQ6XHRcdC8qIGZpcnN0LCB0aGUgZXRoZXJuZXQgdHlwZSAqL1xuIDM4NTpcdFx0aWYgKGxpa2VseShtYWNfbGVuIFx1MDAzZT0gRVRIX1RMRU4pKSB7XG4gMzg2Olx0XHRcdC8qIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gc2hvdWxkIGFscmVhZHkgYmUgcG9wdWxhdGVkLCBhbmRcbiAzODc6XHRcdFx0ICogc2tiLVx1MDAzZWRhdGEgaGFzIHNwYWNlIGZvciBoX3ZsYW5fcHJvdG9cbiAzODg6XHRcdFx0ICovXG4gMzg5Olx0XHRcdHZldGgtXHUwMDNlaF92bGFuX3Byb3RvID0gdmxhbl9wcm90bztcbiAzOTA6XHRcdH0gZWxzZSB7XG4gMzkxOlx0XHRcdC8qIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gc2hvdWxkIG5vdCBiZSBwb3B1bGF0ZWQsIGFuZFxuIDM5MjpcdFx0XHQgKiBza2ItXHUwMDNlZGF0YSBoYXMgbm8gc3BhY2UgZm9yIGhfdmxhbl9wcm90b1xuIDM5MzpcdFx0XHQgKi9cbiAzOTQ6XHRcdFx0dmV0aC1cdTAwM2VoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvID0gc2tiLVx1MDAzZXByb3RvY29sO1xuIDM5NTpcdFx0fVxuIDM5NjpcdFxuIDM5NzpcdFx0Lyogbm93LCB0aGUgVENJICovXG4gMzk4Olx0XHR2ZXRoLVx1MDAzZWhfdmxhbl9UQ0kgPSBodG9ucyh2bGFuX3RjaSk7XG4gMzk5Olx0XG4gNDAwOlx0XHRyZXR1cm4gMDtcbiA0MDE6XHR9XG4gNDAyOlx0XG4gNDAzOlx0LyoqXG4gNDA0Olx0ICogX192bGFuX2luc2VydF90YWcgLSByZWd1bGFyIFZMQU4gdGFnIGluc2VydGluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MzUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBWTEFOIEluc2VydGlvbiBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGV2ZXJ5IHBsYWNlIGluIHRoZSBrZXJuZWwgdGhhdCBjYWxscyBgX192bGFuX2luc2VydF9pbm5lcl90YWdgLiBUaGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIFZMQU4gdGFnZ2luZywgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIHVzYWdlIGlzIGNyaXRpY2FsIGZvciBzZXZlcmFsIGRlYnVnZ2luZyBzY2VuYXJpb3MsIHBlcmZvcm1hbmNlIGFuYWx5c2lzLCBvciBwb3RlbnRpYWxseSBzZWN1cml0eSBhdWRpdHMuIEnigJlsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggdG8gZmluZCBhbGwgdGhlIGluc3RhbmNlcyBvZiB0aGlzIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZC4gSSBjb3VsZCB1c2UgYGdyZXBgIChvciBpdHMgbW9yZSBlZmZpY2llbnQgZXF1aXZhbGVudHMpIG9uIHRoZSBzb3VyY2UgdHJlZSwgYnV0IGEgbW9yZSBzdXJnaWNhbCBhcHByb2FjaCBtaWdodCBiZSBiZXR0ZXIgdG8gZWxpbWluYXRlIGZhbHNlIHBvc2l0aXZlcywgZGVwZW5kaW5nIG9uIHRoZSB0b29sY2hhaW4gY2FwYWJpbGl0aWVzIEkgaGF2ZS4gSXMgdGhlcmUgYSB3YXkgdG8gbGV2ZXJhZ2Ugc3ltYm9sIGluZGV4aW5nIG9yIGNyb3NzLXJlZmVyZW5jaW5nIGNhcGFiaWxpdGllcyBvZiBteSBJREUgb3IgYnVpbGQgZW52aXJvbm1lbnQ/IFRoYXQgd291bGQgYmUgaWRlYWwuIEkgbmVlZCB0byBiZSBzdXJlIEkmIzM5O20gY2FwdHVyaW5nIGFsbCBpbmRpcmVjdCBjYWxscyB0b28sIHdoaWNoIG1lYW5zIEkgc2hvdWxkIGxvb2sgZm9yIGZ1bmN0aW9uIHBvaW50ZXJzIG9yIG1hY3JvcyB0aGF0IG1pZ2h0IGV4cGFuZCB0byBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLiBBZnRlciBJIGhhdmUgdGhlIGxpc3QsIEkgc2hvdWxkIGdvIHRocm91Z2ggZWFjaCBsb2NhdGlvbiB3aXRoIGEgZGlzY2VybmluZyBleWUuIFVuZGVyc3RhbmRpbmcgaG93IHRoZSBkYXRhIGZsb3dzIGludG8gYW5kIG91dCBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSYjMzk7cyBiZWhhdmlvci4gVGltZSB0byBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD0zMzk9c3RhdGljIGlubGluZSBib29sIHZsYW5faHdfb2ZmbG9hZF9jYXBhYmxlKG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzLFxuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM0OS0vKipcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjM1MDogKiBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyAtIGlubmVyIFZMQU4gdGFnIGluc2VydGluZ1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzUxLSAqIEBza2I6IHNrYnVmZiB0byB0YWdcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0zNjAtICovXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDozNjE6c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM2Mi1cdFx0XHRcdFx0ICBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5fdGNpLFxuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTQxND1zdGF0aWMgaW5saW5lIGludCBfX3ZsYW5faW5zZXJ0X3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQxNi17XG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDo0MTc6XHRyZXR1cm4gX192bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCB2bGFuX3Byb3RvLCB2bGFuX3RjaSwgRVRIX0hMRU4pO1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDE4LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD00Mzc9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDQzLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDQ0Olx0ZXJyID0gX192bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCB2bGFuX3Byb3RvLCB2bGFuX3RjaSwgbWFjX2xlbik7XG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00NDUtXHRpZiAoZXJyKSB7XG4tLVxubmV0L3NjaGVkL2FjdF9tcGxzLmM9NTM9VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9tcGxzX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9zY2hlZC9hY3RfbXBscy5jLTkwLVx0XHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkge1xubmV0L3NjaGVkL2FjdF9tcGxzLmM6OTE6XHRcdFx0aWYgKF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHNrYiwgc2tiLVx1MDAzZXZsYW5fcHJvdG8sXG5uZXQvc2NoZWQvYWN0X21wbHMuYy05Mi1cdFx0XHRcdFx0XHQgICAgc2tiX3ZsYW5fdGFnX2dldChza2IpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMzgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFZMQU4gVGFnIEluc2VydGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBoaWVyYXJjaHkgZm9yIHRoZXNlIFZMQU4gdGFnIGluc2VydGlvbiBmdW5jdGlvbnMuIEl0IGxvb2tzIGxpa2UgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUsIGFuZCBJJiMzOTttIGludGVyZXN0ZWQgaW4gd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZC4gQmFzZWQgb24gd2hhdCBJJiMzOTt2ZSBzZWVuLCBpdCYjMzk7cyBjYWxsZWQgYnkgYSBmZXcgb3RoZXIgZnVuY3Rpb25zLiBGaXJzdCwgdGhlcmUmIzM5O3MgYF9fdmxhbl9pbnNlcnRfdGFnYCBhbmQgdGhlbiBgdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCwgYm90aCBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaGAuIFRoYXQgbWFrZXMgc2Vuc2UsIHRob3NlIGFyZSB0aGUgY29yZSBWTEFOIHN0cnVjdHVyZXMuIFRoZSB0aGlyZCBjYWxsLCBhbmQgdGhpcyBpcyBpbnRlcmVzdGluZywgY29tZXMgZnJvbSBgdGNmX21wbHNfYWN0YCBpbiBgbmV0L3NjaGVkL2FjdF9tcGxzLmNgLiBUaGF0JiMzOTtzIGltcGx5aW5nIHNvbWUgc29ydCBvZiBpbnRlcmFjdGlvbiB3aXRoIE1QTFMgdHJhZmZpYyBjb250cm9sLiBOb3cgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGBfX3ZsYW5faW5zZXJ0X3RhZ2AgYW5kIGB2bGFuX2luc2VydF9pbm5lcl90YWdgIGFyZSBjYWxsZWQgdG8gZnVsbHkgbWFwIHRoZSBmbG93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCBhbGwgdGhlc2UgcGxhY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdmxhbl9pbnNlcnRfdGFnXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9xZWRpL3FlZGlfbWFpbi5jPTY2Nz1zdGF0aWMgaW50IHFlZGlfbGwyX3J4KHZvaWQgKmNvb2tpZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGFyZzEsIHUzMiBhcmcyKVxuLS1cbmRyaXZlcnMvc2NzaS9xZWRpL3FlZGlfbWFpbi5jLTcyMi1cdGlmICh3b3JrLVx1MDAzZXZsYW5faWQpXG5kcml2ZXJzL3Njc2kvcWVkaS9xZWRpX21haW4uYzo3MjM6XHRcdF9fdmxhbl9pbnNlcnRfdGFnKHdvcmstXHUwMDNlc2tiLCBodG9ucyhFVEhfUF84MDIxUSksIHdvcmstXHUwMDNldmxhbl9pZCk7XG5kcml2ZXJzL3Njc2kvcWVkaS9xZWRpX21haW4uYy03MjQtXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg9MzYxPXN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDEzLSAqL1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDE0OnN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MTUtXHRcdFx0XHQgICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz02NDg5PWludCBza2Jfdmxhbl9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl90Y2kpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjUwMC1cbm5ldC9jb3JlL3NrYnVmZi5jOjY1MDE6XHRcdGVyciA9IF9fdmxhbl9pbnNlcnRfdGFnKHNrYiwgc2tiLVx1MDAzZXZsYW5fcHJvdG8sXG5uZXQvY29yZS9za2J1ZmYuYy02NTAyLVx0XHRcdFx0XHRza2Jfdmxhbl90YWdfZ2V0KHNrYikpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMzYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBWTEFOIFRhZ2dpbmcgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIFZMQU4gdGFnZ2luZyBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGZvY3VzZWQgb24gYHNrYl92bGFuX3B1c2hgLiBUaGlzIGlzIHRoZSBjb3JlIGZ1bmN0aW9uLCBzbyBpdCBtYWtlcyBzZW5zZSB0byBzdGFydCBoZXJlLiBUaGUgY2FsbCB0byBgX192bGFuX2luc2VydF90YWdgIGlzIHRoZSBjcnVjaWFsIG5leHQgc3RlcC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIGRvaW5nIGF0IGEgbG93IGxldmVsOyB3aGF0IGFyZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBtZW1vcnkgbWFuaXB1bGF0aW9uIG9jY3VycmluZz8gTXkgaHlwb3RoZXNpcyBpcyB0aGF0IGBfX3ZsYW5faW5zZXJ0X3RhZ2AgcHJvdmlkZXMgdGhlIGJhc2UgbWVjaGFuaWNzIGFuZCBgc2tiX3ZsYW5fcHVzaGAgcHJvdmlkZXMgYSB0b3AtbGV2ZWwgaW50ZXJmYWNlLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBkZWVwZXIgaW50byBgdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoYXQgbmV4dC4gSSBleHBlY3QgaXQmIzM5O3MgZ29pbmcgdG8gYmUgcmVsYXRlZCB0byB0aGUgb3V0ZXIgVkxBTiB0YWcgYW5kIGhvdyB0aGF0JiMzOTtzIGhhbmRsZWQuIElzIGl0IGEgc2VwYXJhdGUgZnVuY3Rpb24gYmVjYXVzZSBvZiBoYXJkd2FyZSBvZmZsb2FkIGltcGxpY2F0aW9ucz8gTWF5YmUgdGhpcyBpcyB3aGVyZSBkaWZmZXJlbnQgVkxBTiBjb25maWd1cmF0aW9ucyBhcmUgaGFuZGxlZCwgaW5uZXIgYW5kIG91dGVyLCB3aGljaCB3b3VsZCBleHBsYWluIHRoZSBuZWVkIGZvciB0d28gc2ltaWxhci1sb29raW5nIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmxhbl9pbnNlcnRfaW5uZXJfdGFnXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaWZfdmxhbi5oPTMzOT1zdGF0aWMgaW5saW5lIGJvb2wgdmxhbl9od19vZmZsb2FkX2NhcGFibGUobmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzYwLSAqL1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6MzYxOnN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0zNjItXHRcdFx0XHRcdCAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSxcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD00MTQ9c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MTYte1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDE3Olx0cmV0dXJuIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHNrYiwgdmxhbl9wcm90bywgdmxhbl90Y2ksIEVUSF9ITEVOKTtcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQxOC19XG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDM2LSAqL1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDM3OnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnZsYW5faW5zZXJ0X2lubmVyX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDM4LVx0XHRcdFx0XHRcdCAgICBfX2JlMTYgdmxhbl9wcm90byxcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00NDMtXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDo0NDQ6XHRlcnIgPSBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHZsYW5fcHJvdG8sIHZsYW5fdGNpLCBtYWNfbGVuKTtcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQ0NS1cdGlmIChlcnIpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD00Njg9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdmxhbl9pbnNlcnRfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDcwLXtcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQ3MTpcdHJldHVybiB2bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCB2bGFuX3Byb3RvLCB2bGFuX3RjaSwgRVRIX0hMRU4pO1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDcyLX1cbi0tXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9MTA9Ym9vbCB2bGFuX2RvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipza2JwKVxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYy01MS1cdFx0c2tiX3B1c2goc2tiLCBvZmZzZXQpO1xubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjUyOlx0XHRza2IgPSAqc2ticCA9IHZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHNrYi1cdTAwM2V2bGFuX3Byb3RvLFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTUzLVx0XHRcdFx0XHRcdCAgICBza2ItXHUwMDNldmxhbl90Y2ksIHNrYi1cdTAwM2VtYWNfbGVuKTtcbi0tXG5uZXQvc2NoZWQvYWN0X21wbHMuYz01Mz1UQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX21wbHNfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjaGVkL2FjdF9tcGxzLmMtOTAtXHRcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XG5uZXQvc2NoZWQvYWN0X21wbHMuYzo5MTpcdFx0XHRpZiAoX192bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCBza2ItXHUwMDNldmxhbl9wcm90byxcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTkyLVx0XHRcdFx0XHRcdCAgICBza2Jfdmxhbl90YWdfZ2V0KHNrYiksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyODAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBgdmxhbl9pbnNlcnRfdGFnYCoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHNwZWNpZmljIGZ1bmN0aW9uLCBgdmxhbl9pbnNlcnRfdGFnYC4gSXQmIzM5O3Mgd29ydGggZGlnZ2luZyBpbnRvLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBjdXJyZW50IGNvbnRleHQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiBpcyBiZWhhdmluZyBhcyBleHBlY3RlZCwgcGFydGljdWxhcmx5IGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggVkxBTiB0YWdnaW5nLiBHaXZlbiBteSBleHBlcnRpc2UsIEnigJlsbCBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGl0LiBJIHdhbnQgdG8gcXVpY2tseSBldmFsdWF0ZSB0aGlzLCB0byBlbnN1cmUgbm8gaGlkZGVuIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmxhbl9pbnNlcnRfdGFnXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9xZWRpL3FlZGlfbWFpbi5jPTY2Nz1zdGF0aWMgaW50IHFlZGlfbGwyX3J4KHZvaWQgKmNvb2tpZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGFyZzEsIHUzMiBhcmcyKVxuLS1cbmRyaXZlcnMvc2NzaS9xZWRpL3FlZGlfbWFpbi5jLTcyMi1cdGlmICh3b3JrLVx1MDAzZXZsYW5faWQpXG5kcml2ZXJzL3Njc2kvcWVkaS9xZWRpX21haW4uYzo3MjM6XHRcdF9fdmxhbl9pbnNlcnRfdGFnKHdvcmstXHUwMDNlc2tiLCBodG9ucyhFVEhfUF84MDIxUSksIHdvcmstXHUwMDNldmxhbl9pZCk7XG5kcml2ZXJzL3Njc2kvcWVkaS9xZWRpX21haW4uYy03MjQtXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg9MzYxPXN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDEzLSAqL1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDE0OnN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MTUtXHRcdFx0XHQgICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSlcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD00Mzc9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDY3LSAqL1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDY4OnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnZsYW5faW5zZXJ0X3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDY5LVx0XHRcdFx0XHQgICAgICBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5fdGNpKVxuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTQ4OD1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp2bGFuX2luc2VydF90YWdfc2V0X3Byb3RvKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDkxLXtcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQ5MjpcdHNrYiA9IHZsYW5faW5zZXJ0X3RhZyhza2IsIHZsYW5fcHJvdG8sIHZsYW5fdGNpKTtcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQ5My1cdGlmIChza2IpXG4tLVxubmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmM9MzM3PXN0YXRpYyB2b2lkIGJhdGFkdl9ibGFfc2VuZF9jbGFpbShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqbWFjLFxuLS1cbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jLTQyOC1cdGlmICh2aWQgXHUwMDI2IEJBVEFEVl9WTEFOX0hBU19UQUcpIHtcbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jOjQyOTpcdFx0c2tiID0gdmxhbl9pbnNlcnRfdGFnKHNrYiwgaHRvbnMoRVRIX1BfODAyMVEpLFxubmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmMtNDMwLVx0XHRcdFx0ICAgICAgdmlkIFx1MDAyNiBWTEFOX1ZJRF9NQVNLKTtcbi0tXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYz0xMTk5PWJhdGFkdl9kYXRfYXJwX2NyZWF0ZV9yZXBseShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBfX2JlMzIgaXBfc3JjLFxuLS1cbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTEyMTItXHRpZiAodmlkIFx1MDAyNiBCQVRBRFZfVkxBTl9IQVNfVEFHKVxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6MTIxMzpcdFx0c2tiID0gdmxhbl9pbnNlcnRfdGFnKHNrYiwgaHRvbnMoRVRIX1BfODAyMVEpLFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtMTIxNC1cdFx0XHRcdCAgICAgIHZpZCBcdTAwMjYgVkxBTl9WSURfTUFTSyk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NjQ4OT1pbnQgc2tiX3ZsYW5fcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5fdGNpKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY1MDAtXG5uZXQvY29yZS9za2J1ZmYuYzo2NTAxOlx0XHRlcnIgPSBfX3ZsYW5faW5zZXJ0X3RhZyhza2IsIHNrYi1cdTAwM2V2bGFuX3Byb3RvLFxubmV0L2NvcmUvc2tidWZmLmMtNjUwMi1cdFx0XHRcdFx0c2tiX3ZsYW5fdGFnX2dldChza2IpKTtcbi0tXG5uZXQvZHNhL3RhZ184MDIxcS5jPTQ2ND1zdHJ1Y3Qgc2tfYnVmZiAqZHNhXzgwMjFxX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5uZXQvZHNhL3RhZ184MDIxcS5jLTQ2Ny1cdC8qIHNrYi1cdTAwM2VkYXRhIHBvaW50cyBhdCB0aGUgTUFDIGhlYWRlciwgd2hpY2ggaXMgZmluZVxubmV0L2RzYS90YWdfODAyMXEuYzo0Njg6XHQgKiBmb3Igdmxhbl9pbnNlcnRfdGFnKCkuXG5uZXQvZHNhL3RhZ184MDIxcS5jLTQ2OS1cdCAqL1xubmV0L2RzYS90YWdfODAyMXEuYzo0NzA6XHRyZXR1cm4gdmxhbl9pbnNlcnRfdGFnKHNrYiwgaHRvbnModHBpZCksIHRjaSk7XG5uZXQvZHNhL3RhZ184MDIxcS5jLTQ3MS19XG4tLVxubmV0L2RzYS90YWdfc2phMTEwNS5jPTI0MT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnNqYTExMDVfcHZpZF90YWdfY29udHJvbF9wa3Qoc3RydWN0IGRzYV9wb3J0ICpkcCxcbi0tXG5uZXQvZHNhL3RhZ19zamExMTA1LmMtMjYyLVxubmV0L2RzYS90YWdfc2phMTEwNS5jOjI2MzpcdHJldHVybiB2bGFuX2luc2VydF90YWcoc2tiLCB4bWl0X3RwaWQsIChwY3AgXHUwMDNjXHUwMDNjIFZMQU5fUFJJT19TSElGVCkgfFxubmV0L2RzYS90YWdfc2phMTEwNS5jLTI2NC1cdFx0XHQgICAgICAgU0pBMTEwNV9ERUZBVUxUX1ZMQU4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODI0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBEZWVwIGludG8gVkxBTnMgYW5kIE1QTFMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhlIG5ldHdvcmtpbmcgc3RhY2sgYWdhaW4sIHNwZWNpZmljYWxseSBhdCBob3cgVkxBTnMgYW5kIE1QTFMgaW50ZXJhY3QuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gYG5ldC84MDIxcS92bGFuX2NvcmUuY2AsIGxpbmUgNTIgLSBgdmxhbl9kb19yZWNlaXZlKHN0cnVjdCBza19idWZmICoqc2ticClgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgVkxBTnMgYXJlIGhhbmRsZWQgZHVyaW5nIHBhY2tldCByZWNlcHRpb24uIFRoYXQmIzM5O3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQuCgpUaGVuLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBmdW5jdGlvbiBgc2tiX3ZsYW5fcHVzaGAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgVkxBTiB0YWcgaXRzZWxmIGlzIGFjdHVhbGx5ICpwdXNoZWQqIG9udG8gdGhlIGBza19idWZmYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmljcyBvZiB0aGlzIGZ1bmN0aW9uIGluIHBhcnRpY3VsYXIuCgpNeSBtaW5kIHRoZW4gd2FuZGVycyB0byBgdGNmX21wbHNfYWN0YCBpbiBgbmV0L3NjaGVkL2FjdF9tcGxzLmNgLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdGFjaywgdGhpcyBtdXN0IGJlIHdoZXJlIE1QTFMgYWN0aW9ucyBhcmUgaW1wbGVtZW50ZWQuIFRoZSBpbnRlcmFjdGlvbiBoZXJlIHdpdGggVkxBTnMgaXMgd2hhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZC4KCkZpbmFsbHksIEkgbmVlZCB0byBzZWUgKndoZXJlKiBgc2tiX3ZsYW5fcHVzaGAgaXMgY2FsbGVkLiBUaGF0IHdpbGwgcHJvdmlkZSBhIGdvb2QgaW5kaWNhdGlvbiBvZiB3aGVyZSBpdCBpcyB1c2VkIGFuZCBob3cuIEZpbmRpbmcgdGhvc2UgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgYW4gdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gVkxBTiBhbmQgTVBMUy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB2bGFuIHRhZ2dpbmcgaXMgYWRkZWQgdG8gYW4gc2tiLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2Jfdmxhbl9wdXNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmg9NDMxMj1pbnQgc2tiX3ZsYW5fcG9wKHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0MzEzOmludCBza2Jfdmxhbl9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl90Y2kpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00MzE0LWludCBza2JfZXRoX3BvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTIyOTEtICpcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDoyMjkyOiAqIGxvbmcgYnBmX3NrYl92bGFuX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSlcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0yMjkzLSAqIFx0RGVzY3JpcHRpb25cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNjAyMC1cdEZOKGdldF9jZ3JvdXBfY2xhc3NpZCwgMTcsICMjY3R4KVx0XHRcXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjYwMjE6XHRGTihza2Jfdmxhbl9wdXNoLCAxOCwgIyNjdHgpXHRcdFx0XFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC02MDIyLVx0Rk4oc2tiX3ZsYW5fcG9wLCAxOSwgIyNjdHgpXHRcdFx0XFxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0zMjkwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NldF9oYXNoX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTMyOTctXG5uZXQvY29yZS9maWx0ZXIuYzozMjk4OkJQRl9DQUxMXzMoYnBmX3NrYl92bGFuX3B1c2gsIHN0cnVjdCBza19idWZmICosIHNrYiwgX19iZTE2LCB2bGFuX3Byb3RvLFxubmV0L2NvcmUvZmlsdGVyLmMtMzI5OS1cdCAgIHUxNiwgdmxhbl90Y2kpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzMwNy1cdGJwZl9wdXNoX21hY19yY3N1bShza2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MzMwODpcdHJldCA9IHNrYl92bGFuX3B1c2goc2tiLCB2bGFuX3Byb3RvLCB2bGFuX3RjaSk7XG5uZXQvY29yZS9maWx0ZXIuYy0zMzA5LVx0YnBmX3B1bGxfbWFjX3Jjc3VtKHNrYik7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzMxNS1cbm5ldC9jb3JlL2ZpbHRlci5jOjMzMTY6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX3ZsYW5fcHVzaF9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjMzMTc6XHQuZnVuYyAgICAgICAgICAgPSBicGZfc2tiX3ZsYW5fcHVzaCxcbm5ldC9jb3JlL2ZpbHRlci5jLTMzMTgtXHQuZ3BsX29ubHkgICAgICAgPSBmYWxzZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04Mzg4PWJvb2wgYnBmX2hlbHBlcl9jaGFuZ2VzX3BrdF9kYXRhKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NDA3LVx0Y2FzZSBCUEZfRlVOQ19za2Jfdmxhbl9wb3A6XG5uZXQvY29yZS9maWx0ZXIuYzo4NDA4Olx0Y2FzZSBCUEZfRlVOQ19za2Jfdmxhbl9wdXNoOlxubmV0L2NvcmUvZmlsdGVyLmMtODQwOS1cdGNhc2UgQlBGX0ZVTkNfc3RvcmVfaGRyX29wdDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NjIyPXRjX2Nsc19hY3RfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NjQ2LVx0XHRyZXR1cm4gXHUwMDI2YnBmX2dldF9jZ3JvdXBfY2xhc3NpZF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg2NDc6XHRjYXNlIEJQRl9GVU5DX3NrYl92bGFuX3B1c2g6XG5uZXQvY29yZS9maWx0ZXIuYzo4NjQ4Olx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl92bGFuX3B1c2hfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYy04NjQ5LVx0Y2FzZSBCUEZfRlVOQ19za2Jfdmxhbl9wb3A6XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NjQ4ND1FWFBPUlRfU1lNQk9MKHNrYl92bGFuX3BvcCk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjQ4OC0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjY0ODk6aW50IHNrYl92bGFuX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSlcbm5ldC9jb3JlL3NrYnVmZi5jLTY0OTAte1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY0OTUtXHRcdGlmIChXQVJOX09OQ0Uob2Zmc2V0LFxubmV0L2NvcmUvc2tidWZmLmM6NjQ5NjpcdFx0XHQgICAgICBcJiMzNDtza2Jfdmxhbl9wdXNoIGdvdCBza2Igd2l0aCBza2ItXHUwMDNlZGF0YSBub3QgYXQgbWFjIGhlYWRlciAob2Zmc2V0ICVkKVxcblwmIzM0Oyxcbm5ldC9jb3JlL3NrYnVmZi5jLTY0OTctXHRcdFx0ICAgICAgb2Zmc2V0KSkge1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY1MTMtfVxubmV0L2NvcmUvc2tidWZmLmM6NjUxNDpFWFBPUlRfU1lNQk9MKHNrYl92bGFuX3B1c2gpO1xubmV0L2NvcmUvc2tidWZmLmMtNjUxNS1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz00Njg9c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTUxNy1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjUxODovKiBTaW1pbGFyIHRvIHNrYl92bGFuX3B1c2guICovXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy01MTktc3RhdGljIGludCBuZl9mbG93X3ZsYW5fcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgcHJvdG8sIHUxNiBpZCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTE5Nz1zdGF0aWMgaW50IHB1c2hfdmxhbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTIwNy1cdH1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6MjA4Olx0ZXJyID0gc2tiX3ZsYW5fcHVzaChza2IsIHZsYW4tXHUwMDNldmxhbl90cGlkLFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0yMDktXHRcdFx0ICAgIG50b2hzKHZsYW4tXHUwMDNldmxhbl90Y2kpIFx1MDAyNiB+VkxBTl9DRklfTUFTSyk7XG4tLVxubmV0L3NjaGVkL2FjdF92bGFuLmM9MjI9VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl92bGFuX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9zY2hlZC9hY3Rfdmxhbi5jLTQ4LVx0Y2FzZSBUQ0FfVkxBTl9BQ1RfUFVTSDpcbm5ldC9zY2hlZC9hY3Rfdmxhbi5jOjQ5Olx0XHRlcnIgPSBza2Jfdmxhbl9wdXNoKHNrYiwgcC1cdTAwM2V0Y2Z2X3B1c2hfcHJvdG8sIHAtXHUwMDNldGNmdl9wdXNoX3ZpZCB8XG5uZXQvc2NoZWQvYWN0X3ZsYW4uYy01MC1cdFx0XHRcdCAgICAocC1cdTAwM2V0Y2Z2X3B1c2hfcHJpbyBcdTAwM2NcdTAwM2MgVkxBTl9QUklPX1NISUZUKSk7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0yMjkxLSAqXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MjI5MjogKiBsb25nIGJwZl9za2Jfdmxhbl9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl90Y2kpXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMjI5My0gKiBcdERlc2NyaXB0aW9uXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTYwMjAtXHRGTihnZXRfY2dyb3VwX2NsYXNzaWQsIDE3LCAjI2N0eClcdFx0XFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDo2MDIxOlx0Rk4oc2tiX3ZsYW5fcHVzaCwgMTgsICMjY3R4KVx0XHRcdFxcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNjAyMi1cdEZOKHNrYl92bGFuX3BvcCwgMTksICMjY3R4KVx0XHRcdFxcXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2NvbnRleHRfdGVzdF9ydW4uYz00NzE9dm9pZCB0ZXN0X3hkcF9jb250ZXh0X3R1bnRhcCh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9jb250ZXh0X3Rlc3RfcnVuLmMtNTM4LVx0LyogVGVzdHMgZm9yIEJQRiBoZWxwZXJzIHdoaWNoIHRvdWNoIGhlYWRyb29tICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfY29udGV4dF90ZXN0X3J1bi5jOjUzOTpcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2hlbHBlcl9za2Jfdmxhbl9wdXNoX3BvcFwmIzM0OykpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfY29udGV4dF90ZXN0X3J1bi5jLTU0MC1cdFx0dGVzdF90dW50YXAoc2tlbC1cdTAwM2Vwcm9ncy5pbmdfeGRwLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2NvbnRleHRfdGVzdF9ydW4uYzo1NDE6XHRcdFx0ICAgIHNrZWwtXHUwMDNlcHJvZ3MuaGVscGVyX3NrYl92bGFuX3B1c2hfcG9wLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2NvbnRleHRfdGVzdF9ydW4uYy01NDItXHRcdFx0ICAgIE5VTEwsIC8qIHRjIHByaW8gMiAqL1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF9tZXRhLmM9NTY3PVNFQyhcJiMzNDt0Y1wmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF9tZXRhLmM6NTY4OmludCBoZWxwZXJfc2tiX3ZsYW5fcHVzaF9wb3Aoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYy01Njkte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF9tZXRhLmMtNTcxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYzo1NzI6XHQvKiBicGZfc2tiX3ZsYW5fcHVzaCBhc3N1bWVzIEhXIG9mZmxvYWQgZm9yIHByaW1hcnkgVkxBTiB0YWcuIE9ubHlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF9tZXRhLmMtNTczLVx0ICogc2Vjb25kYXJ5IHRhZyBwdXNoIHRyaWdnZXJzIGFuIGFjdHVhbCBNQUMgaGVhZGVyIG1vZGlmaWNhdGlvbi5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF9tZXRhLmMtNTc0LVx0ICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfbWV0YS5jOjU3NTpcdGVyciA9IGJwZl9za2Jfdmxhbl9wdXNoKGN0eCwgMCwgNDIpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYy01NzYtXHRpZiAoZXJyKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYy01NzctXHRcdGdvdG8gb3V0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYzo1Nzg6XHRlcnIgPSBicGZfc2tiX3ZsYW5fcHVzaChjdHgsIDAsIDIwNyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfbWV0YS5jLTU3OS1cdGlmIChlcnIpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX3ZsYW4uYz0yNTg9aW50IHRjX3ZsYW5fcHVzaChzdHJ1Y3QgX19za19idWZmICpjdHgpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jLTI1OS17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jOjI2MDpcdGJwZl9za2Jfdmxhbl9wdXNoKGN0eCwgYnBmX2h0b25zKEVUSF9QXzgwMjFRKSwgVEVTVFZMQU4pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX3ZsYW4uYy0yNjEtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfdmVyaWZpZXIuYz0xODY9c3RhdGljIHZvaWQgYnBmX2ZpbGxfbGRfYWJzX3ZsYW5fcHVzaF9wb3Aoc3RydWN0IGJwZl90ZXN0ICpzZWxmKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X3ZlcmlmaWVyLmMtMjA1LVx0XHRpbnNuW2kmIzQzOyYjNDM7XSA9IEJQRl9SQVdfSU5TTihCUEZfSk1QIHwgQlBGX0NBTEwsIDAsIDAsIDAsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF92ZXJpZmllci5jOjIwNjpcdFx0XHRcdFx0IEJQRl9GVU5DX3NrYl92bGFuX3B1c2gpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfdmVyaWZpZXIuYy0yMDctXHRcdGluc25baV0gPSBCUEZfSk1QX0lNTShCUEZfSk5FLCBCUEZfUkVHXzAsIDAsIGxlbiAtIGkgLSAzKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvY2FsbHMuYy05NTUtXHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMywgMiksXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvY2FsbHMuYzo5NTY6XHRCUEZfUkFXX0lOU04oQlBGX0pNUCB8IEJQRl9DQUxMLCAwLCAwLCAwLCBCUEZfRlVOQ19za2Jfdmxhbl9wdXNoKSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9jYWxscy5jLTk1Ny1cdEJQRl9FWElUX0lOU04oKSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvbGRfYWJzLmMtODMtXHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMywgMiksXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvbGRfYWJzLmM6ODQ6XHRCUEZfUkFXX0lOU04oQlBGX0pNUCB8IEJQRl9DQUxMLCAwLCAwLCAwLCBCUEZfRlVOQ19za2Jfdmxhbl9wdXNoKSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9sZF9hYnMuYy04NS1cdEJQRl9NT1Y2NF9SRUcoQlBGX1JFR182LCBCUEZfUkVHXzcpLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9sZF9hYnMuYy0yNjAtXHRcdEJQRl9SQVdfSU5TTihCUEZfSk1QIHwgQlBGX0NBTEwsIDAsIDAsIDAsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvbGRfYWJzLmM6MjYxOlx0XHRcdCAgICAgQlBGX0ZVTkNfc2tiX3ZsYW5fcHVzaCksXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvbGRfYWJzLmMtMjYyLVx0XHRCUEZfTU9WNjRfUkVHKEJQRl9SRUdfNiwgQlBGX1JFR183KSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3NDUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVkxBTiBIYW5kbGluZyBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgVkxBTiB0YWdnaW5nIGFuZCB1bnRhZ2dpbmcgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBzb21lIGtleSBmdW5jdGlvbnMuIEl0IHNlZW1zIGxpa2UgYHNrYl92bGFuX3B1c2hgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIGZvciAqYWRkaW5nKiBhIFZMQU4gdGFnIHRvIGFuIFNLQiAoU29ja2V0IEJ1ZmZlciksIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkLiBSaWdodCBhd2F5LCBpdCYjMzk7cyBjbGVhciB0aGF0IGl0JiMzOTtzIGltcG9ydGFudCBmb3IgYSBmZXcgY3JpdGljYWwgYXJlYXMuIEZpcnN0bHksIGBicGZfc2tiX3ZsYW5fcHVzaGAgaXMgYSBCUEYgaGVscGVyLiBUaGF04oCZcyBpbnRlcmVzdGluZywgbWVhbmluZyBpdCYjMzk7cyBhY2Nlc3NpYmxlIGZyb20gd2l0aGluIFRyYWZmaWMgQ29udHJvbCAodGMpIEJQRiBwcm9ncmFtcyEgVGhpcyBpbXBsaWVzIHRoYXQgdGhlIFZMQU4gdGFnZ2luZyBsb2dpYyBjYW4gYmUgZHluYW1pY2FsbHkgY29udHJvbGxlZCBhbmQgbW9kaWZpZWQgYXQgcnVudGltZSwgYSBwb3dlcmZ1bCBjYXBhYmlsaXR5LgoKQmV5b25kIEJQRiwgaXQmIzM5O3MgYWxzbyBiZWluZyB1dGlsaXplZCBieSBPcGVuIHZTd2l0Y2ggd2l0aCBgcHVzaF92bGFuYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gT1ZTLCBiZWluZyBhIHNvZnR3YXJlIHN3aXRjaCwgbmVlZHMgdG8gaGFuZGxlIFZMQU5zIGV4dGVuc2l2ZWx5LiBBbmQgZmluYWxseSwgdGhlIGB0YyBhY3RfdmxhbmAgYWN0aW9uIHVzZXMgaXQgdGhyb3VnaCBgdGNmX3ZsYW5fYWN0YC4gU28sIGl0JiMzOTtzIGludGVncmFsIHRvIHRoZSB1c2VyLXNwYWNlIHRyYWZmaWMgY29udHJvbCBmdW5jdGlvbmFsaXR5LgoKTm93LCBvbiB0aGUgKnJlY2VpdmluZyogc2lkZSwgSSBzZWUgYHZsYW5fZG9fcmVjZWl2ZWAgaXMgcGxheWluZyBhIHJvbGUuIFRoaXMgaXMgdHJpZ2dlcmVkIHdpdGhpbiB0aGUgc3RhbmRhcmQgbmV0d29ya2luZyByZWNlaXZlIHBhdGgsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9jb3JlL2Rldi5jYCBpbiB0aGUgYF9fbmV0aWZfcmVjZWl2ZV9za2JfY29yZWAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYXQgdGhlIGhlYXJ0IG9mIGhvdyBpbmNvbWluZyBwYWNrZXRzIGFyZSBwcm9jZXNzZWQuIFRoaXMgd2FycmFudHMgYSBtb3JlIGRldGFpbGVkIGxvb2suIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IGV4YWN0bHkgaG93IGB2bGFuX2RvX3JlY2VpdmVgIGZ1bmN0aW9ucyB0byBzZWUgaG93IFZMQU5zIGFyZSBoYW5kbGVkIGFuZCB1bnRhZ2dlZCBmcm9tIGluY29taW5nIHBhY2tldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZsYW5fZG9fcmVjZWl2ZVxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD0yMTE9dmxhbl9kZXZfZ2V0X2VncmVzc19xb3NfbWFzayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc2twcmlvKVxuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTIzMy1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjIzNDpleHRlcm4gYm9vbCB2bGFuX2RvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipza2IpO1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMjM1LVxuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTI4NT1zdGF0aWMgaW5saW5lIHUxNiB2bGFuX2Rldl9nZXRfZWdyZXNzX3Fvc19tYXNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMjkwLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6MjkxOnN0YXRpYyBpbmxpbmUgYm9vbCB2bGFuX2RvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipza2IpXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0yOTIte1xuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYy05LVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjEwOmJvb2wgdmxhbl9kb19yZWNlaXZlKHN0cnVjdCBza19idWZmICoqc2ticClcbm5ldC84MDIxcS92bGFuX2NvcmUuYy0xMS17XG4tLVxubmV0L2NvcmUvZGV2LmM9NjAzND1zdGF0aWMgaW50IF9fbmV0aWZfcmVjZWl2ZV9za2JfY29yZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIGJvb2wgcGZtZW1hbGxvYyxcbi0tXG5uZXQvY29yZS9kZXYuYy02MTM4LVx0XHR9XG5uZXQvY29yZS9kZXYuYzo2MTM5Olx0XHRpZiAodmxhbl9kb19yZWNlaXZlKFx1MDAyNnNrYikpXG5uZXQvY29yZS9kZXYuYy02MTQwLVx0XHRcdGdvdG8gYW5vdGhlcl9yb3VuZDtcbi0tXG5uZXQvY29yZS9kZXYuYy02MTY5LVx0XHRpZiAoc2tiX3ZsYW5fdGFnX2dldF9pZChza2IpKSB7XG5uZXQvY29yZS9kZXYuYzo2MTcwOlx0XHRcdC8qIFZsYW4gaWQgaXMgbm9uIDAgYW5kIHZsYW5fZG9fcmVjZWl2ZSgpIGFib3ZlIGNvdWxkbiYjMzk7dFxubmV0L2NvcmUvZGV2LmMtNjE3MS1cdFx0XHQgKiBmaW5kIHZsYW4gZGV2aWNlLlxuLS1cbm5ldC9jb3JlL2Rldi5jLTYxNzUtXHRcdFx0LyogT3V0ZXIgaGVhZGVyIGlzIDgwMi4xUCB3aXRoIHZsYW4gMCwgaW5uZXIgaGVhZGVyIGlzXG5uZXQvY29yZS9kZXYuYzo2MTc2Olx0XHRcdCAqIDgwMi4xUSBvciA4MDIuMUFEIGFuZCB2bGFuX2RvX3JlY2VpdmUoKSBhYm92ZSBjb3VsZFxubmV0L2NvcmUvZGV2LmMtNjE3Ny1cdFx0XHQgKiBub3QgZmluZCB2bGFuIGRldiBmb3IgdmxhbiBpZCAwLlxuLS1cbm5ldC9jb3JlL2Rldi5jLTYxODItXHRcdFx0XHRnb3RvIG91dDtcbm5ldC9jb3JlL2Rldi5jOjYxODM6XHRcdFx0aWYgKHZsYW5fZG9fcmVjZWl2ZShcdTAwMjZza2IpKVxubmV0L2NvcmUvZGV2LmMtNjE4NC1cdFx0XHRcdC8qIEFmdGVyIHN0cmlwcGluZyBvZmYgODAyLjFQIGhlYWRlciB3aXRoIHZsYW4gMFxuLS1cbm5ldC9jb3JlL2Rldi5jLTYxOTctXHRcdC8qIE5vdGU6IHdlIG1pZ2h0IGluIHRoZSBmdXR1cmUgdXNlIHByaW8gYml0c1xubmV0L2NvcmUvZGV2LmM6NjE5ODpcdFx0ICogYW5kIHNldCBza2ItXHUwMDNlcHJpb3JpdHkgbGlrZSBpbiB2bGFuX2RvX3JlY2VpdmUoKVxubmV0L2NvcmUvZGV2LmMtNjE5OS1cdFx0ICogRm9yIHRoZSB0aW1lIGJlaW5nLCBqdXN0IGlnbm9yZSBQcmlvcml0eSBDb2RlIFBvaW50XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDIzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHJlcXVlc3QsIHRoaW5raW5nIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRpdmluZyBpbnRvIHRoZSBWTEFOIFJlY2VpdmUgUGF0aCoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBpcyB0byB1bmRlcnN0YW5kIHRoZSBgdmxhbl9kb19yZWNlaXZlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC84MDIxcS92bGFuX2NvcmUuY2AgZmlsZS4gVGhpcyB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIFZMQU4gKFZpcnR1YWwgTEFOKSBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgTGludXgga2VybmVsLCBhbmQgbW9yZSBwcmVjaXNlbHksIHRoZSBjb3JlIFZMQU4gaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgaGFwcGVuaW5nIGR1cmluZyB0aGUgcmVjZWl2ZSBwYXRoLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgaXQgaXMgd2hhdCBJIHRoaW5rIGl0IGlzLCBob3dldmVyIEkmIzM5O2xsIGxvb2sgaW50byBpdC4gVGhpcyBtZWFucyBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgYSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgaW5jb21pbmcgRXRoZXJuZXQgZnJhbWVzIHRoYXQgYXJlIHRhZ2dlZCB3aXRoIGEgVkxBTiBJRC4gSXQmIzM5O3MgdGhlIHBvaW50IGluIHRoZSBzdGFjayB3aGVyZSB0aGUga2VybmVsIG5lZWRzIHRvIGRlY2lkZTogZG9lcyB0aGlzIGZyYW1lIGJlbG9uZyB0byB0aGUgY3VycmVudCBob3N0LCBvciBzaG91bGQgaXQgYmUgZm9yd2FyZGVkPyBXaGF0IG5lZWRzIHRvIGJlIGRvbmUgd2l0aCBpdD8gSXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgYXMgcGFydCBvZiB0aGUgcmVjZWl2ZSBwYXRoLCBhcyBvcHBvc2VkIHRvIHRoZSB0cmFuc21pdCBwYXRoPyBUaGUgZmlsZSBwYXRoIGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYW5kIEkga25vdyBleGFjdGx5IHdoZXJlIHRvIGxvb2sgZm9yIHRoaXMgZnVuY3Rpb24uIEtub3dpbmcgdGhpcyBmaWxlIGFuZCBmdW5jdGlvbiB3aWxsIGxldCBtZSB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlkZW50aWZpZXMsIGhhbmRsZXMgYW5kIGZpbHRlcnMgZnJhbWVzLCB3aGljaCB3aWxsIGdpdmUgbWUgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSB3aG9sZSBpbXBsZW1lbnRhdGlvbi4gSSB3aWxsIHN0YXJ0IGJ5IGZpZ3VyaW5nIG91dCB0aGUgY2FsbGluZyBjb252ZW50aW9ucyBhbmQgdGhlbiBsb29rIGZvciB0aGUgY3JpdGljYWwgcGFydHMgb2YgdGhlIHJlY2VpdmUgcHJvY2Vzcywgc3VjaCBhcyBmcmFtZSB2YWxpZGF0aW9uLCBWTEFOIElEIGV4dHJhY3Rpb24sIGFuZCBmaWx0ZXJpbmcgYmFzZWQgb24gcmVnaXN0ZXJlZCBWTEFOIGludGVyZmFjZXMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBsaWtlIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgYW5kIGFueSBWTEFOLXNwZWNpZmljIG1ldGFkYXRhIGl0IG1pZ2h0IGNhcnJ5LiBVbHRpbWF0ZWx5LCBJJiMzOTttIGV4cGVjdGluZyB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGVmZmljaWVudGx5IHN0ZWVycyBpbmNvbWluZywgdGFnZ2VkIEV0aGVybmV0IGZyYW1lcyB0byB0aGUgY29ycmVjdCBuZXR3b3JrIGludGVyZmFjZXMsIGFzIGl0JiMzOTtzIGEgY3JpdGljYWwgY29tcG9uZW50IHRvIGFueSBuZXR3b3JrIGltcGxlbWVudGF0aW9uIHVzaW5nIFZMQU5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC84MDIxcS92bGFuX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAgIDM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICAgNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFx1MDAzZVxuICAgNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldHBvbGwuaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbmV0L2dyby5oXHUwMDNlXG4gICA4Olx0I2luY2x1ZGUgXCYjMzQ7dmxhbi5oXCYjMzQ7XG4gICA5Olx0XG4gIDEwOlx0Ym9vbCB2bGFuX2RvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipza2JwKVxuICAxMTpcdHtcbiAgMTI6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSAqc2ticDtcbiAgMTM6XHRcdF9fYmUxNiB2bGFuX3Byb3RvID0gc2tiLVx1MDAzZXZsYW5fcHJvdG87XG4gIDE0Olx0XHR1MTYgdmxhbl9pZCA9IHNrYl92bGFuX3RhZ19nZXRfaWQoc2tiKTtcbiAgMTU6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2RldjtcbiAgMTY6XHRcdHN0cnVjdCB2bGFuX3BjcHVfc3RhdHMgKnJ4X3N0YXRzO1xuICAxNzpcdFxuICAxODpcdFx0dmxhbl9kZXYgPSB2bGFuX2ZpbmRfZGV2KHNrYi1cdTAwM2VkZXYsIHZsYW5fcHJvdG8sIHZsYW5faWQpO1xuICAxOTpcdFx0aWYgKCF2bGFuX2RldilcbiAgMjA6XHRcdFx0cmV0dXJuIGZhbHNlO1xuICAyMTpcdFxuICAyMjpcdFx0c2tiID0gKnNrYnAgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTtcbiAgMjM6XHRcdGlmICh1bmxpa2VseSghc2tiKSlcbiAgMjQ6XHRcdFx0cmV0dXJuIGZhbHNlO1xuICAyNTpcdFxuICAyNjpcdFx0aWYgKHVubGlrZWx5KCEodmxhbl9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkpKSB7XG4gIDI3Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuICAyODpcdFx0XHQqc2ticCA9IE5VTEw7XG4gIDI5Olx0XHRcdHJldHVybiBmYWxzZTtcbiAgMzA6XHRcdH1cbiAgMzE6XHRcbiAgMzI6XHRcdHNrYi1cdTAwM2VkZXYgPSB2bGFuX2RldjtcbiAgMzM6XHRcdGlmICh1bmxpa2VseShza2ItXHUwMDNlcGt0X3R5cGUgPT0gUEFDS0VUX09USEVSSE9TVCkpIHtcbiAgMzQ6XHRcdFx0LyogT3VyIGxvd2VyIGxheWVyIHRoaW5rcyB0aGlzIGlzIG5vdCBsb2NhbCwgbGV0JiMzOTtzIG1ha2Ugc3VyZS5cbiAgMzU6XHRcdFx0ICogVGhpcyBhbGxvd3MgdGhlIFZMQU4gdG8gaGF2ZSBhIGRpZmZlcmVudCBNQUMgdGhhbiB0aGVcbiAgMzY6XHRcdFx0ICogdW5kZXJseWluZyBkZXZpY2UsIGFuZCBzdGlsbCByb3V0ZSBjb3JyZWN0bHkuICovXG4gIDM3Olx0XHRcdGlmIChldGhlcl9hZGRyX2VxdWFsXzY0Yml0cyhldGhfaGRyKHNrYiktXHUwMDNlaF9kZXN0LCB2bGFuX2Rldi1cdTAwM2VkZXZfYWRkcikpXG4gIDM4Olx0XHRcdFx0c2tiLVx1MDAzZXBrdF90eXBlID0gUEFDS0VUX0hPU1Q7XG4gIDM5Olx0XHR9XG4gIDQwOlx0XG4gIDQxOlx0XHRpZiAoISh2bGFuX2Rldl9wcml2KHZsYW5fZGV2KS1cdTAwM2VmbGFncyBcdTAwMjYgVkxBTl9GTEFHX1JFT1JERVJfSERSKSBcdTAwMjZcdTAwMjZcbiAgNDI6XHRcdCAgICAhbmV0aWZfaXNfbWFjdmxhbl9wb3J0KHZsYW5fZGV2KSBcdTAwMjZcdTAwMjZcbiAgNDM6XHRcdCAgICAhbmV0aWZfaXNfYnJpZGdlX3BvcnQodmxhbl9kZXYpKSB7XG4gIDQ0Olx0XHRcdHVuc2lnbmVkIGludCBvZmZzZXQgPSBza2ItXHUwMDNlZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHNrYik7XG4gIDQ1Olx0XG4gIDQ2Olx0XHRcdC8qXG4gIDQ3Olx0XHRcdCAqIHZsYW5faW5zZXJ0X3RhZyBleHBlY3Qgc2tiLVx1MDAzZWRhdGEgcG9pbnRpbmcgdG8gbWFjIGhlYWRlci5cbiAgNDg6XHRcdFx0ICogU28gY2hhbmdlIHNrYi1cdTAwM2VkYXRhIGJlZm9yZSBjYWxsaW5nIGl0IGFuZCBjaGFuZ2UgYmFjayB0b1xuICA0OTpcdFx0XHQgKiBvcmlnaW5hbCBwb3NpdGlvbiBsYXRlclxuICA1MDpcdFx0XHQgKi9cbiAgNTE6XHRcdFx0c2tiX3B1c2goc2tiLCBvZmZzZXQpO1xuICA1MjpcdFx0XHRza2IgPSAqc2ticCA9IHZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHNrYi1cdTAwM2V2bGFuX3Byb3RvLFxuICA1MzpcdFx0XHRcdFx0XHRcdCAgICBza2ItXHUwMDNldmxhbl90Y2ksIHNrYi1cdTAwM2VtYWNfbGVuKTtcbiAgNTQ6XHRcdFx0aWYgKCFza2IpXG4gIDU1Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuICA1NjpcdFx0XHRza2JfcHVsbChza2IsIG9mZnNldCAmIzQzOyBWTEFOX0hMRU4pO1xuICA1NzpcdFx0XHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xuICA1ODpcdFx0fVxuICA1OTpcdFxuICA2MDpcdFx0c2tiLVx1MDAzZXByaW9yaXR5ID0gdmxhbl9nZXRfaW5ncmVzc19wcmlvcml0eSh2bGFuX2Rldiwgc2tiLVx1MDAzZXZsYW5fdGNpKTtcbiAgNjE6XHRcdF9fdmxhbl9od2FjY2VsX2NsZWFyX3RhZyhza2IpO1xuICA2MjpcdFxuICA2MzpcdFx0cnhfc3RhdHMgPSB0aGlzX2NwdV9wdHIodmxhbl9kZXZfcHJpdih2bGFuX2RldiktXHUwMDNldmxhbl9wY3B1X3N0YXRzKTtcbiAgNjQ6XHRcbiAgNjU6XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cnhfc3RhdHMtXHUwMDNlc3luY3ApO1xuICA2NjpcdFx0dTY0X3N0YXRzX2luYyhcdTAwMjZyeF9zdGF0cy1cdTAwM2VyeF9wYWNrZXRzKTtcbiAgNjc6XHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2cnhfc3RhdHMtXHUwMDNlcnhfYnl0ZXMsIHNrYi1cdTAwM2VsZW4pO1xuICA2ODpcdFx0aWYgKHNrYi1cdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfTVVMVElDQVNUKVxuICA2OTpcdFx0XHR1NjRfc3RhdHNfaW5jKFx1MDAyNnJ4X3N0YXRzLVx1MDAzZXJ4X211bHRpY2FzdCk7XG4gIDcwOlx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyeF9zdGF0cy1cdTAwM2VzeW5jcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjY5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVkxBTiBUYWcgSW5zZXJ0aW9uIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBgdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC4gSXQmIzM5O3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGlubGluZSBmdW5jdGlvbjogdGFrZXMgYSBzb2NrZXQgYnVmZmVyIChgc2tiYCksIHRoZSBWTEFOIHByb3RvY29sLCB0aGUgVkxBTiBUQ0ksIGFuZCB0aGUgTUFDIGxlbmd0aC4gSXRzIGpvYiBpcyB0byBpbnNlcnQgYW4gaW5uZXIgVkxBTiB0YWcsIGFuZCBpZiBpdCBmYWlscywgaXQgZnJlZXMgdGhlIGBza2JgIGFuZCByZXR1cm5zIGBOVUxMYC4gIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBqdXN0IGEgd3JhcHBlciBhcm91bmQgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0IGlzIGluIHRoZSBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGZ1bmN0aW9uLCB3aGljaCwgZnJvbSB0aGUgcGF0Y2gsIHNlZW1zIHRvIGhhdmUgaGFkIGEgY3J1Y2lhbCBhZGRpdGlvbi4gSXQgbm93IGluY2x1ZGVzIGEgY2hlY2sgdXNpbmcgYHBza2JfbWF5X3B1bGxgIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLiBJdCYjMzk7cyB1c2luZyBgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pYC4gUmlnaHQuIFNvLCBpdCYjMzk7cyB2ZXJpZnlpbmcgdGhhdCB0aGVyZSYjMzk7cyBlbm91Z2ggZGF0YSBhdmFpbGFibGUgaW4gdGhlIHNvY2tldCBidWZmZXIgKGBza2JgKSB0byBwdWxsIHRoZSBgbWFjX2xlbmAgYnl0ZXMuIElmIGl0IGZhaWxzLCByZXR1cm5pbmcgYC1FSU5WQUxgLiBUaGlzIGlzIGEgY2xhc3NpYyBidWZmZXIgb3ZlcnJlYWQgcHJvdGVjdGlvbi4gVGhpcyBpcyBnb29kLgoKU28sIHRoaXMgcGF0Y2ggcHJvYmFibHkgZml4ZWQgYSB2dWxuZXJhYmlsaXR5IHdoZXJlIHRoZSBmdW5jdGlvbiBjb3VsZCBwb3RlbnRpYWxseSByZWFkIGJleW9uZCB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBpZiB0aGUgYG1hY19sZW5gIHdhcyBsYXJnZXIgdGhhbiB0aGUgYXZhaWxhYmxlIGRhdGEgaW4gdGhlIHNvY2tldCBidWZmZXIsIHdoaWNoIGNvdWxkIGhhdmUgbGVkIHRvIGEgY3Jhc2ggb3IsIHdvcnNlLCBhIHNlY3VyaXR5IGV4cGxvaXQuIEkgc2hvdWxkIGxvb2sgaW50byB0aGUgY29tbWl0IG1lc3NhZ2Ugb3IgcmVsYXRlZCBidWcgcmVwb3J0cyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCBidXQgdGhpcyBhZGRlZCBjaGVjayBpcyBkZWZpbml0ZWx5IGEgc29saWQgZGVmZW5zaXZlIG1lYXN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Bza2JfbWF5X3B1bGxcXChza2IsIG1hY19sZW5cXCkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pZl92bGFuLmg9MzYxPXN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzY3LVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6MzY4Olx0aWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbikpKVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzY5LVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0OTQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgYW5kIGl0cyBDYWxsZXJzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCBmdW5jdGlvbiwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIGluc2VydGluZyBhIFZMQU4gdGFnIGludG8gYSBza2IuIFRoZSBjb3JlIG9mIGl0IGludm9sdmVzIHB1c2hpbmcgc3BhY2Ugb250byB0aGUgc2tiLCBzaGlmdGluZyBleGlzdGluZyBNQUMgaGVhZGVyIGRhdGEsIGFuZCB0aGVuIHBvcHVsYXRpbmcgdGhlIG5ldyBWTEFOIGhlYWRlci4gVGhlIGNydWNpYWwgcGFydCBoZXJlIGlzIHRoZSBhY2Nlc3MgdG8gYHNrYi0mZ3Q7ZGF0YSAmIzQzOyBtYWNfbGVuIC0gRVRIX0hMRU5gLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIHBvdGVudGlhbCBmb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgZGF0YSBjb3JydXB0aW9uLiBJZiBgbWFjX2xlbmAgaXMgZ3JlYXRlciB0aGFuIHRoZSBhbW91bnQgb2YgZGF0YSBjdXJyZW50bHkgaW4gdGhlIHNrYiYjMzk7cyBsaW5lYXIgYnVmZmVyLCB0aGF0IGFjY2VzcyB3b3VsZCBiZSBpbGxlZ2FsLiBGb3J0dW5hdGVseSwgaXQgbG9va3MgbGlrZSBgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pYCBpcyB0aGVyZSBhcyBhIGd1YXJkLiBJdCBhcHBlYXJzIHRoYXQgaXQgZW5zdXJlcyB0aGF0IHRoZSBza2IgaGFzIHRoZSBuZWNlc3NhcnkgZGF0YSB0byBwZXJmb3JtIHRoZXNlIG9wZXJhdGlvbnMgc2FmZWx5LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICp1c2VkKi4gSXQgbG9va3MgbGlrZSBpdCBpcyByZWFjaGFibGUgZnJvbSBhIGZldyBrZXkgYXJlYXMgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBJIHNlZSBjb25uZWN0aW9ucyBmcm9tIGB0Y2ZfbXBsc19hY3RgIChsaWtlbHkgZm9yIE1QTFMgb3ZlciBWTEFOKSwgYHNrYl92bGFuX3B1c2hgICh0aGUgZ2VuZXJhbCBWTEFOIHB1c2ggZnVuY3Rpb24pLCB3aGljaCBpcyBhbHNvIGFjY2Vzc2VkIGJ5IEJQRiwgT1ZTLCBhbmQgVEMsIGB2bGFuX2RvX3JlY2VpdmVgIChpbXBvcnRhbnQgZm9yIFZMQU4gcGFja2V0IHJlY2VwdGlvbiksIGFuZCBldmVuIEJBVE1BTi1hZHYuCgpBIHF1aWNrIG5vdGUgdG8gbXlzZWxmOiBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGlzIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbiBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaGAuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycywgYmVjYXVzZSBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHRoZSBjYWxsZXIgZnVuY3Rpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0sIGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzLiBJbiB0aGlzIGNhc2UsIGBza2Jfdmxhbl9wdXNoYCBpcyBhIGdvb2QgY2FuZGlkYXRlLCBhcyBpdCBzZWVtcyB0byBiZSB0aGUgbWFpbiBjYWxsZXIgb2YgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC4gSSYjMzk7bGwgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDg4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY0ODg6XHQgKi9cbjY0ODk6XHRpbnQgc2tiX3ZsYW5fcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5fdGNpKVxuNjQ5MDpcdHtcbjY0OTE6XHRcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XG42NDkyOlx0XHRcdGludCBvZmZzZXQgPSBza2ItXHUwMDNlZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHNrYik7XG42NDkzOlx0XHRcdGludCBlcnI7XG42NDk0Olx0XG42NDk1Olx0XHRcdGlmIChXQVJOX09OQ0Uob2Zmc2V0LFxuNjQ5NjpcdFx0XHRcdCAgICAgIFwmIzM0O3NrYl92bGFuX3B1c2ggZ290IHNrYiB3aXRoIHNrYi1cdTAwM2VkYXRhIG5vdCBhdCBtYWMgaGVhZGVyIChvZmZzZXQgJWQpXFxuXCYjMzQ7LFxuNjQ5NzpcdFx0XHRcdCAgICAgIG9mZnNldCkpIHtcbjY0OTg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjY0OTk6XHRcdFx0fVxuNjUwMDpcdFxuNjUwMTpcdFx0XHRlcnIgPSBfX3ZsYW5faW5zZXJ0X3RhZyhza2IsIHNrYi1cdTAwM2V2bGFuX3Byb3RvLFxuNjUwMjpcdFx0XHRcdFx0XHRza2Jfdmxhbl90YWdfZ2V0KHNrYikpO1xuNjUwMzpcdFx0XHRpZiAoZXJyKVxuNjUwNDpcdFx0XHRcdHJldHVybiBlcnI7XG42NTA1Olx0XG42NTA2Olx0XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IHNrYi1cdTAwM2V2bGFuX3Byb3RvO1xuNjUwNzpcdFx0XHRza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgLT0gVkxBTl9ITEVOO1xuNjUwODpcdFxuNjUwOTpcdFx0XHRza2JfcG9zdHB1c2hfcmNzdW0oc2tiLCBza2ItXHUwMDNlZGF0YSAmIzQzOyAoMiAqIEVUSF9BTEVOKSwgVkxBTl9ITEVOKTtcbjY1MTA6XHRcdH1cbjY1MTE6XHRcdF9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCB2bGFuX3Byb3RvLCB2bGFuX3RjaSk7XG42NTEyOlx0XHRyZXR1cm4gMDtcbjY1MTM6XHR9XG42NTE0Olx0RVhQT1JUX1NZTUJPTChza2Jfdmxhbl9wdXNoKTtcbjY1MTU6XHRcbjY1MTY6XHQvKipcbjY1MTc6XHQgKiBza2JfZXRoX3BvcCgpIC0gRHJvcCB0aGUgRXRoZXJuZXQgaGVhZGVyIGF0IHRoZSBoZWFkIG9mIGEgcGFja2V0XG42NTE4Olx0ICpcbjY1MTk6XHQgKiBAc2tiOiBTb2NrZXQgYnVmZmVyIHRvIG1vZGlmeVxuNjUyMDpcdCAqXG42NTIxOlx0ICogRHJvcCB0aGUgRXRoZXJuZXQgaGVhZGVyIG9mIEBza2IuXG42NTIyOlx0ICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzODYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgT2JzZXJ2YXRpb25zIG9uIFZMQU4gVGFnIEluc2VydGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IFZMQU4gdGFncyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHRoZSBpbnNlcnRpb24gcHJvY2Vzcy4gSW4gYHNrYl92bGFuX3B1c2hgLCBpdCYjMzk7cyBjbGVhciB0aGF0IGBfX3ZsYW5faW5zZXJ0X3RhZ2AgaXMgdGhlIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCwgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIHRoYXQgYF9fdmxhbl9pbnNlcnRfdGFnYCBpcyBhIHNpbXBsZSB3cmFwcGVyIGZvciBgX192bGFuX2luc2VydF9pbm5lcl90YWdgLiBCZWNhdXNlIGl0JiMzOTtzIGFuIGlubGluZSBmdW5jdGlvbiwgSSYjMzk7bSBwcmV0dHkgc3VyZSBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGdldHMgaW5saW5lZCBkaXJlY3RseSBpbnRvIGBza2Jfdmxhbl9wdXNoYCwgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4KCk5vdywgbGV0JiMzOTtzIGJyb2FkZW4gdGhlIHNjb3BlLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgdmxhbl9kb19yZWNlaXZlYCBpbiBgbmV0LzgwMjFxL3ZsYW5fY29yZS5jYC4gQXMgZXhwZWN0ZWQsIHRoaXMgY2FsbHMgYHZsYW5faW5zZXJ0X2lubmVyX3RhZ2AsIGFuZCB0aGF0IGluIHR1cm4gY2FsbHMgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC4gQW5kIGp1c3QgbGlrZSBiZWZvcmUsIHRoYXQgZnVuY3Rpb24gaXMgaW5saW5lZCwgc28gaXQgYXBwZWFycyBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGlzIGlubGluZWQgaGVyZSBhcyB3ZWxsLgoKRmluYWxseSwgSSYjMzk7bGwgc2hpZnQgZ2VhcnMgdG8gYG5ldC9zY2hlZC9hY3RfbXBscy5jYCwgdG8gaW52ZXN0aWdhdGUgaG93IGBhY3RfbXBsc2AgaW50ZXJhY3RzIHdpdGggVkxBTiB0YWdnaW5nLiBUaGUgY29kZSBpbiB0aGVyZSBjYWxscyBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGFzIHdlbGwuIFNlZW1zIGxpa2UgSSBzaG91bGQgaW5zcGVjdCBhcm91bmQgbGluZSA5MCB0byBzZWUgZXhhY3RseSBob3cgaXQgd29ya3MuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbnRleHQgb2YgdGhlIGNvZGUgdG8gZmlndXJlIG91dCBwcmVjaXNlbHkgd2hhdCBpdCYjMzk7cyBkb2luZyB3aXRoIHRoaXMgaW5uZXIgdGFnIGluc2VydGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X21wbHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRcdFx0XHRcdCBza2ItXHUwMDNlZGV2IFx1MDAyNlx1MDAyNiBza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSKSlcbiAgODE6XHRcdFx0XHRnb3RvIGRyb3A7XG4gIDgyOlx0XHRcdGJyZWFrO1xuICA4MzpcdFx0Y2FzZSBUQ0FfTVBMU19BQ1RfUFVTSDpcbiAgODQ6XHRcdFx0bmV3X2xzZSA9IHRjZl9tcGxzX2dldF9sc2UoTlVMTCwgcCwgIWV0aF9wX21wbHMoc2tiX3Byb3RvY29sKHNrYiwgdHJ1ZSkpKTtcbiAgODU6XHRcdFx0aWYgKHNrYl9tcGxzX3B1c2goc2tiLCBuZXdfbHNlLCBwLVx1MDAzZXRjZm1fcHJvdG8sIG1hY19sZW4sXG4gIDg2Olx0XHRcdFx0XHQgIHNrYi1cdTAwM2VkZXYgXHUwMDI2XHUwMDI2IHNrYi1cdTAwM2VkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIpKVxuICA4NzpcdFx0XHRcdGdvdG8gZHJvcDtcbiAgODg6XHRcdFx0YnJlYWs7XG4gIDg5Olx0XHRjYXNlIFRDQV9NUExTX0FDVF9NQUNfUFVTSDpcbiAgOTA6XHRcdFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHtcbiAgOTE6XHRcdFx0XHRpZiAoX192bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCBza2ItXHUwMDNldmxhbl9wcm90byxcbiAgOTI6XHRcdFx0XHRcdFx0XHQgICAgc2tiX3ZsYW5fdGFnX2dldChza2IpLFxuICA5MzpcdFx0XHRcdFx0XHRcdCAgICBFVEhfSExFTikgXHUwMDNjIDApXG4gIDk0Olx0XHRcdFx0XHRnb3RvIGRyb3A7XG4gIDk1Olx0XG4gIDk2Olx0XHRcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gc2tiLVx1MDAzZXZsYW5fcHJvdG87XG4gIDk3Olx0XHRcdFx0X192bGFuX2h3YWNjZWxfY2xlYXJfdGFnKHNrYik7XG4gIDk4Olx0XHRcdH1cbiAgOTk6XHRcbiAxMDA6XHRcdFx0bmV3X2xzZSA9IHRjZl9tcGxzX2dldF9sc2UoTlVMTCwgcCwgbWFjX2xlbiB8fFxuIDEwMTpcdFx0XHRcdFx0XHQgICAhZXRoX3BfbXBscyhza2ItXHUwMDNlcHJvdG9jb2wpKTtcbiAxMDI6XHRcbiAxMDM6XHRcdFx0aWYgKHNrYl9tcGxzX3B1c2goc2tiLCBuZXdfbHNlLCBwLVx1MDAzZXRjZm1fcHJvdG8sIDAsIGZhbHNlKSlcbiAxMDQ6XHRcdFx0XHRnb3RvIGRyb3A7XG4gMTA1Olx0XHRcdGJyZWFrO1xuIDEwNjpcdFx0Y2FzZSBUQ0FfTVBMU19BQ1RfTU9ESUZZOlxuIDEwNzpcdFx0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLFxuIDEwODpcdFx0XHRcdFx0ICAgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikgJiM0MzsgTVBMU19ITEVOKSlcbiAxMDk6XHRcdFx0XHRnb3RvIGRyb3A7XG4gMTEwOlx0XHRcdG5ld19sc2UgPSB0Y2ZfbXBsc19nZXRfbHNlKG1wbHNfaGRyKHNrYiksIHAsIGZhbHNlKTtcbiAxMTE6XHRcdFx0aWYgKHNrYl9tcGxzX3VwZGF0ZV9sc2Uoc2tiLCBuZXdfbHNlKSlcbiAxMTI6XHRcdFx0XHRnb3RvIGRyb3A7XG4gMTEzOlx0XHRcdGJyZWFrO1xuIDExNDpcdFx0Y2FzZSBUQ0FfTVBMU19BQ1RfREVDX1RUTDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3MjYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFZMQU4gVGFnIEluc2VydGlvbiBpbiB0aGUgS2VybmVsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgZm9jdXNlZCBvbiBob3cgVkxBTiB0YWdzIGFyZSBpbnNlcnRlZCB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIEkgc2VlIGB0Y2ZfbXBsc19hY3RgIGRpcmVjdGx5IGNhbGxzIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2Ag4oCTIHRoYXQmIzM5O3MgdGhlIGNvcmUgZnVuY3Rpb24uIEkmIzM5O20gbm90aW5nIHRoZSBwYXJhbWV0ZXJzOiB0aGUgYHNrYmAgKHNvY2tldCBidWZmZXIpLCB0aGUgVkxBTiBwcm90b2NvbCwgdGhlIHRhZyBpdHNlbGYsIGFuZCBgRVRIX0hMRU5gLCB0aGUgRXRoZXJuZXQgaGVhZGVyIGxlbmd0aC4gSSBhbHNvIHNlZSB0aGF0IGB2bGFuX2RvX3JlY2VpdmVgIGluIGBuZXQvODAyMXEvdmxhbl9jb3JlLmNgIHV0aWxpemVzIGB2bGFuX2luc2VydF9pbm5lcl90YWdgLCBidXQgd2l0aCBhIHBvdGVudGlhbGx5IHZhcmlhYmxlIGBtYWNfbGVuYC4gVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLgoKSW4gYHZsYW5fZG9fcmVjZWl2ZWAsIHRoZSBgbWFjX2xlbmAgcGFyYW1ldGVyIGlzIGEgZmxhZyBmb3IgcG90ZW50aWFsIGlzc3Vlcy4gVGhlIGNvZGUgY2hlY2tzIHdpdGggYHBza2JfbWF5X3B1bGwoc2tiLCBtYWNfbGVuKWAgYmVmb3JlIHByb2NlZWRpbmcuIElmIHRoYXQgcHVsbCBmYWlscywgbWVhbmluZyB0aGUgcGFja2V0IGlzbiYjMzk7dCBiaWcgZW5vdWdoLCBgdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCByZXR1cm5zIE5VTEwsIGVmZmVjdGl2ZWx5IGZyZWVpbmcgdGhlIGBza2JgIGFuZCByZXR1cm5pbmcgZmFsc2UuIFRoYXQmIzM5O3MgYSBnb29kIHNhZmVndWFyZCwgYnV0IGl0IGhpZ2hsaWdodHMgdGhlIGRlcGVuZGVuY3kgb24gYG1hY19sZW5gIGJlaW5nIHZhbGlkLgoKTm93LCBjb21wYXJlIHRoYXQgdG8gYHNrYl92bGFuX3B1c2hgLiBUaGlzIGZ1bmN0aW9uIGNhbGxzIGBfX3ZsYW5faW5zZXJ0X3RhZ2AsIHdoaWNoLCBhcyB3ZSBzYXcgZWFybGllciwgdWx0aW1hdGVseSBjYWxscyBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGJ1dCBhbHdheXMgdXNlcyBgRVRIX0hMRU5gLiBJZiBgcHNrYl9tYXlfcHVsbChza2IsIEVUSF9ITEVOKWAgZmFpbHMgaGVyZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgLUVJTlZBTC4gVGhhdCYjMzk7cyBhbm90aGVyIHNhZmV0eSBtZWFzdXJlLCBidXQgdGhlIGRpZmZlcmVuY2UgaW4gaGFuZGxpbmcgYmV0d2VlbiB0aGVzZSB0d28gY2FzZXMgaXMgd29ydGggcG9uZGVyaW5nLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9ucy4gYHNrYl92bGFuX3B1c2hgIHJlc2lkZXMgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gSW1wb3J0YW50bHksIHRoaXMgY29kZSBpcyBhbHdheXMgYnVpbHQgaWYgYENPTkZJR19ORVRgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwaWVjZSBvZiBmdW5jdGlvbmFsaXR5LiBGb3IgYHZsYW5fZG9fcmVjZWl2ZWAsIEkgc2VlIGl0IGxpdmVzIGluIGBuZXQvODAyMXEvdmxhbl9jb3JlLmNgLCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGBNYWtlZmlsZWAgb3IgS2NvbmZpZyBmaWxlcyB3aXRoaW4gdGhhdCBkaXJlY3RvcnkuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb25zIGFmZmVjdCBpdHMgY29tcGlsYXRpb24sIGp1c3QgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmxhbl9jb3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LzgwMjFxJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC84MDIxcS9NYWtlZmlsZS00LSNcbm5ldC84MDIxcS9NYWtlZmlsZTo1Om9iai0kKHN1YnN0IG0seSwkKENPTkZJR19WTEFOXzgwMjFRKSlcdCYjNDM7PSB2bGFuX2NvcmUub1xubmV0LzgwMjFxL01ha2VmaWxlLTYtb2JqLSQoQ09ORklHX1ZMQU5fODAyMVEpXHRcdCYjNDM7PSA4MDIxcS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjk4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOgoKKipJbnZlc3RpZ2F0aW5nIFZMQU4gYW5kIE1QTFMgSW50ZXJhY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGhvdyBWTEFOcyBhbmQgTVBMUyBhcmUgcGxheWluZyB0b2dldGhlci4gSSBrbm93IHRoYXQgYHZsYW5fY29yZS5vYCBpcyBnb2luZyB0byBiZSBnb3Zlcm5lZCBieSBgQ09ORklHX1ZMQU5fODAyMVFgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgdGhlIGZ1bmRhbWVudGFsIFZMQU4gaW5mcmFzdHJ1Y3R1cmUuIE5vdywgZ2l2ZW4gdGhhdCBjb250ZXh0LCBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgaXNzdWUgSSYjMzk7bSBsaWtlbHkgZGVidWdnaW5nLCBJIHRoaW5rIHRoZSBjcml0aWNhbCBwbGFjZSB0byBsb29rIGF0IGludGVyYWN0aW9ucyBpcyBpbiB0aGUgcXVldWluZyBkaXNjaXBsaW5lcywgYW5kIGhvdyB0aGUgTVBMUyBlbmNhcHN1bGF0aW9uIGFuZCBkZWNhcHN1bGF0aW9uIG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBWTEFOIHRhZ2dpbmcgYW5kIHVudGFnZ2luZyBpbnRlcmZhY2VzIHdpdGggTVBMUyBsYWJlbHMgaW4gdGhlIHRyYWZmaWMgc2hhcGluZyBhbmQgY2xhc3NpZmljYXRpb24gcHJvY2Vzc2VzLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byBgbmV0L3NjaGVkL2FjdF9tcGxzLmNgIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUga2VybmVsIGhhbmRsZXMgdGhlIE1QTFMgYWN0aW9ucy4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIFZMQU4tYXdhcmUgTVBMUyBoYW5kbGluZyB3aWxsIGJlLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTtyZSBkZWFsaW5nIHdpdGggdGFnZ2VkIHZzLiB1bnRhZ2dlZCBmcmFtZXMgaW4gdGhhdCBjb250ZXh0LiBJdCYjMzk7cyB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgZm9yIHRoZSBpbnRlcmFjdGlvbiB0byBiZSBoYW5kbGVkLCBvciB0aGUgYnVnIHRvIGJlIGxvY2F0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FjdF9tcGxzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTgxOT1jb25maWcgTkVUX0FDVF9NUExTXG4tLVxubmV0L3NjaGVkL0tjb25maWctODI3LVx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG5uZXQvc2NoZWQvS2NvbmZpZzo4Mjg6XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfbXBscy5cbm5ldC9zY2hlZC9LY29uZmlnLTgyOS1cbi0tXG5uZXQvc2NoZWQvTWFrZWZpbGU9MjA9b2JqLSQoQ09ORklHX05FVF9BQ1RfQ1NVTSlcdCYjNDM7PSBhY3RfY3N1bS5vXG5uZXQvc2NoZWQvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX05FVF9BQ1RfTVBMUylcdCYjNDM7PSBhY3RfbXBscy5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtMjItb2JqLSQoQ09ORklHX05FVF9BQ1RfVkxBTilcdCYjNDM7PSBhY3Rfdmxhbi5vXG4tLVxubmV0L3NjaGVkL2FjdF9tcGxzLmMtMTgtXG5uZXQvc2NoZWQvYWN0X21wbHMuYzoxOTpzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X21wbHNfb3BzO1xubmV0L3NjaGVkL2FjdF9tcGxzLmMtMjAtXG4tLVxubmV0L3NjaGVkL2FjdF9tcGxzLmM9MTU4PXN0YXRpYyBpbnQgdGNmX21wbHNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcbi0tXG5uZXQvc2NoZWQvYWN0X21wbHMuYy0xNjIte1xubmV0L3NjaGVkL2FjdF9tcGxzLmM6MTYzOlx0c3RydWN0IHRjX2FjdGlvbl9uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCBhY3RfbXBsc19vcHMubmV0X2lkKTtcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTE2NC1cdGJvb2wgYmluZCA9IGZsYWdzIFx1MDAyNiBUQ0FfQUNUX0ZMQUdTX0JJTkQ7XG4tLVxubmV0L3NjaGVkL2FjdF9tcGxzLmMtMTk4LVx0aWYgKCFleGlzdHMpIHtcbm5ldC9zY2hlZC9hY3RfbXBscy5jOjE5OTpcdFx0cmV0ID0gdGNmX2lkcl9jcmVhdGUodG4sIGluZGV4LCBlc3QsIGEsIFx1MDAyNmFjdF9tcGxzX29wcywgYmluZCxcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTIwMC1cdFx0XHRcdCAgICAgdHJ1ZSwgZmxhZ3MpO1xuLS1cbm5ldC9zY2hlZC9hY3RfbXBscy5jPTM4Mj1zdGF0aWMgaW50IHRjZl9tcGxzX29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcbi0tXG5uZXQvc2NoZWQvYWN0X21wbHMuYy00NDAtXG5uZXQvc2NoZWQvYWN0X21wbHMuYzo0NDE6c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9tcGxzX29wcyA9IHtcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTQ0Mi1cdC5raW5kXHRcdD1cdFwmIzM0O21wbHNcJiMzNDssXG4tLVxubmV0L3NjaGVkL2FjdF9tcGxzLmM9NDU0PXN0YXRpYyBfX25ldF9pbml0IGludCBtcGxzX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTQ1NS17XG5uZXQvc2NoZWQvYWN0X21wbHMuYzo0NTY6XHRzdHJ1Y3QgdGNfYWN0aW9uX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGFjdF9tcGxzX29wcy5uZXRfaWQpO1xubmV0L3NjaGVkL2FjdF9tcGxzLmMtNDU3LVxubmV0L3NjaGVkL2FjdF9tcGxzLmM6NDU4Olx0cmV0dXJuIHRjX2FjdGlvbl9uZXRfaW5pdChuZXQsIHRuLCBcdTAwMjZhY3RfbXBsc19vcHMpO1xubmV0L3NjaGVkL2FjdF9tcGxzLmMtNDU5LX1cbi0tXG5uZXQvc2NoZWQvYWN0X21wbHMuYz00NjE9c3RhdGljIHZvaWQgX19uZXRfZXhpdCBtcGxzX2V4aXRfbmV0KHN0cnVjdCBsaXN0X2hlYWQgKm5ldF9saXN0KVxubmV0L3NjaGVkL2FjdF9tcGxzLmMtNDYyLXtcbm5ldC9zY2hlZC9hY3RfbXBscy5jOjQ2MzpcdHRjX2FjdGlvbl9uZXRfZXhpdChuZXRfbGlzdCwgYWN0X21wbHNfb3BzLm5ldF9pZCk7XG5uZXQvc2NoZWQvYWN0X21wbHMuYy00NjQtfVxuLS1cbm5ldC9zY2hlZC9hY3RfbXBscy5jPTQ2Nj1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIG1wbHNfbmV0X29wcyA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X21wbHMuYy00NjgtXHQuZXhpdF9iYXRjaCA9IG1wbHNfZXhpdF9uZXQsXG5uZXQvc2NoZWQvYWN0X21wbHMuYzo0Njk6XHQuaWQgICA9IFx1MDAyNmFjdF9tcGxzX29wcy5uZXRfaWQsXG5uZXQvc2NoZWQvYWN0X21wbHMuYy00NzAtXHQuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdGNfYWN0aW9uX25ldCksXG4tLVxubmV0L3NjaGVkL2FjdF9tcGxzLmM9NDczPXN0YXRpYyBpbnQgX19pbml0IG1wbHNfaW5pdF9tb2R1bGUodm9pZClcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTQ3NC17XG5uZXQvc2NoZWQvYWN0X21wbHMuYzo0NzU6XHRyZXR1cm4gdGNmX3JlZ2lzdGVyX2FjdGlvbihcdTAwMjZhY3RfbXBsc19vcHMsIFx1MDAyNm1wbHNfbmV0X29wcyk7XG5uZXQvc2NoZWQvYWN0X21wbHMuYy00NzYtfVxuLS1cbm5ldC9zY2hlZC9hY3RfbXBscy5jPTQ3OD1zdGF0aWMgdm9pZCBfX2V4aXQgbXBsc19jbGVhbnVwX21vZHVsZSh2b2lkKVxubmV0L3NjaGVkL2FjdF9tcGxzLmMtNDc5LXtcbm5ldC9zY2hlZC9hY3RfbXBscy5jOjQ4MDpcdHRjZl91bnJlZ2lzdGVyX2FjdGlvbihcdTAwMjZhY3RfbXBsc19vcHMsIFx1MDAyNm1wbHNfbmV0X29wcyk7XG5uZXQvc2NoZWQvYWN0X21wbHMuYy00ODEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjIwNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIFZMQU4gQWN0aW9uIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IFZMQU4gYWN0aW9uIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gaG93IGl0JiMzOTtzIGludGVncmF0ZWQgaW50byB0cmFmZmljIGNvbnRyb2wuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjYWxsIGNoYWluIGFuZCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb2RlJiMzOTtzIHBvaW50aW5nIG1lIHRvd2FyZHMgYGFjdF92bGFuLmNgLiBSaWdodCwgc28gYHRjZl92bGFuX2FjdGAgaXMgdGhlIGNydWNpYWwgZnVuY3Rpb24gaGVyZSwgYW5kIGl0JiMzOTtzIGNhbGxpbmcgYHNrYl92bGFuX3B1c2hgIHdoZW4gdGhlIGBhY3Rpb25gIGlzIGBUQ0FfVkxBTl9BQ1RfUFVTSGAuIFRoaXMgaXMgd2hlcmUgdGhlIFZMQU4gdGFnZ2luZyBhY3R1YWxseSBoYXBwZW5zLCBzbyB0aGF0JiMzOTtzIHRoZSBjb3JlLiBJIHNob3VsZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBgbmV0L3NjaGVkL2FjdF92bGFuLmNgIGZpbGUgdG8gdHJhY2UgdGhlIGJlaGF2aW9yLiBJIHdhbnQgdG8gZnVsbHkgdmlzdWFsaXplIHRoZSBhcmNoaXRlY3R1cmUsIHNvIEkmIzM5O2xsIGNvbnRpbnVlIHRvIGV4YW1pbmUgdGhlIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGluIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3Rfdmxhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MDpcdFx0cCA9IHJjdV9kZXJlZmVyZW5jZV9iaCh2LVx1MDAzZXZsYW5fcCk7XG4gIDQxOlx0XG4gIDQyOlx0XHRzd2l0Y2ggKHAtXHUwMDNldGNmdl9hY3Rpb24pIHtcbiAgNDM6XHRcdGNhc2UgVENBX1ZMQU5fQUNUX1BPUDpcbiAgNDQ6XHRcdFx0ZXJyID0gc2tiX3ZsYW5fcG9wKHNrYik7XG4gIDQ1Olx0XHRcdGlmIChlcnIpXG4gIDQ2Olx0XHRcdFx0Z290byBkcm9wO1xuICA0NzpcdFx0XHRicmVhaztcbiAgNDg6XHRcdGNhc2UgVENBX1ZMQU5fQUNUX1BVU0g6XG4gIDQ5Olx0XHRcdGVyciA9IHNrYl92bGFuX3B1c2goc2tiLCBwLVx1MDAzZXRjZnZfcHVzaF9wcm90bywgcC1cdTAwM2V0Y2Z2X3B1c2hfdmlkIHxcbiAgNTA6XHRcdFx0XHRcdCAgICAocC1cdTAwM2V0Y2Z2X3B1c2hfcHJpbyBcdTAwM2NcdTAwM2MgVkxBTl9QUklPX1NISUZUKSk7XG4gIDUxOlx0XHRcdGlmIChlcnIpXG4gIDUyOlx0XHRcdFx0Z290byBkcm9wO1xuICA1MzpcdFx0XHRicmVhaztcbiAgNTQ6XHRcdGNhc2UgVENBX1ZMQU5fQUNUX01PRElGWTpcbiAgNTU6XHRcdFx0LyogTm8tb3AgaWYgbm8gdmxhbiB0YWcgKGVpdGhlciBody1hY2NlbCBvciBpbi1wYXlsb2FkKSAqL1xuICA1NjpcdFx0XHRpZiAoIXNrYl92bGFuX3RhZ2dlZChza2IpKVxuICA1NzpcdFx0XHRcdGdvdG8gb3V0O1xuICA1ODpcdFx0XHQvKiBleHRyYWN0IGV4aXN0aW5nIHRhZyAoYW5kIGd1YXJhbnRlZSBubyBody1hY2NlbCB0YWcpICovXG4gIDU5Olx0XHRcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XG4gIDYwOlx0XHRcdFx0dGNpID0gc2tiX3ZsYW5fdGFnX2dldChza2IpO1xuICA2MTpcdFx0XHRcdF9fdmxhbl9od2FjY2VsX2NsZWFyX3RhZyhza2IpO1xuICA2MjpcdFx0XHR9IGVsc2Uge1xuICA2MzpcdFx0XHRcdC8qIGluLXBheWxvYWQgdmxhbiB0YWcsIHBvcCBpdCAqL1xuICA2NDpcdFx0XHRcdGVyciA9IF9fc2tiX3ZsYW5fcG9wKHNrYiwgXHUwMDI2dGNpKTtcbiAgNjU6XHRcdFx0XHRpZiAoZXJyKVxuICA2NjpcdFx0XHRcdFx0Z290byBkcm9wO1xuICA2NzpcdFx0XHR9XG4gIDY4Olx0XHRcdC8qIHJlcGxhY2UgdGhlIHZpZCAqL1xuICA2OTpcdFx0XHR0Y2kgPSAodGNpIFx1MDAyNiB+VkxBTl9WSURfTUFTSykgfCBwLVx1MDAzZXRjZnZfcHVzaF92aWQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTk1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogVkxBTiBIZWFkZXIgSW5zZXJ0aW9uKioKCk9rYXksIHRoaXMgbG9va3MgcHJvbWlzaW5nLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSXQmIzM5O3MgdG91Y2hpbmcgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMsIHNwZWNpZmljYWxseSB0aGUgVkxBTiBoZWFkZXIgaW5zZXJ0aW9uIGhlbHBlciwgYW5kIGl0JiMzOTtzIHVzZWQgYWNyb3NzIHNldmVyYWwgbmV0d29ya2luZyBwYXRoczogcmVjZWl2ZSBhbmQgdHJhbnNtaXQsIFRDLCBPVlMsIGFuZCBCUEYuIFRoYXQgYWxvbmUgd2FycmFudHMgYSBjbG9zZXIgbG9vay4KClRoZSBmYWN0IHRoYXQgdGhpcyBpbnRyb2R1Y2VzIGEgbmV3IGlucHV0IHZhbGlkYXRpb24gY2hlY2ssIGBpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBtYWNfbGVuKSkpIHJldHVybiAtRUlOVkFMO2AsIGlzIGEgbWFqb3IgZmxhZy4gSXQgbWVhbnMgd2UgaGF2ZSBhIHBvdGVudGlhbCAtRUlOVkFMIHJldHVybiwgd2hpY2ggY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIHBhY2tldCByZWplY3Rpb24gb3IgYmVoYXZpb3IgY2hhbmdlcyBpZiBgbWFjX2xlbmAgaXNuJiMzOTt0IGhhbmRsZWQgY29ycmVjdGx5LiBUaGUgcmVhY2hhYmxlIGF0dGFjayBzdXJmYWNlIGlzIGJyb2FkLCBlbmNvbXBhc3Npbmcgc3RhbmRhcmQgbmV0d29yayBpbnRlcmZhY2VzLCBCUEYsIFRDLCBWTEFOLCBPVlMsIGFuZCBldmVuIHR1bi90YXAuIFRoaXMgc3VnZ2VzdHMgYSBoaWdoIHByb2JhYmlsaXR5IG9mIGZpbmRpbmcgc29tZXRoaW5nIGludGVyZXN0aW5nLgoKTGV0IG1lIHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzLiBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGlzIHN0YXRpYyBpbmxpbmUsIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvaWZfdmxhbi5oYC4gVGltZSB0byBjb25maXJtIHRoYXQgZ2NjL2NsYW5nIGFyZSBpbmxpbmluZyBpdCwgYW5kIHllcCwgdGhleSBhcmUuIFNvIG5vdyBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGNhbGxpbmcgaXQgb3IgYXJlIGV4ZXJjaXNpbmcgaXQgZGlyZWN0bHkuCgpBZnRlciBjaGVja2luZywgSSBmaW5kOgoKMS4gIGBza2Jfdmxhbl9wdXNoYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIHdoaWNoIGNhbGxzIGBfX3ZsYW5faW5zZXJ0X3RhZ2Agd2hpY2ggY2FsbHMgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC4KMi4gIGB2bGFuX2RvX3JlY2VpdmVgIGluIGBuZXQvODAyMXEvdmxhbl9jb3JlLmNgIHdoaWNoIGNhbGxzIGB2bGFuX2luc2VydF9pbm5lcl90YWdgIHdoaWNoIGNhbGxzIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AuCjMuICBgdGNmX21wbHNfYWN0YCBpbiBgbmV0L3NjaGVkL2FjdF9tcGxzLmNgIHdoaWNoIGNhbGxzIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgZGlyZWN0bHkuCjQuICBgdGNmX3ZsYW5fYWN0YCBpbiBgbmV0L3NjaGVkL2FjdF92bGFuLmNgIGNhbGxzIGBza2Jfdmxhbl9wdXNoYC4KNS4gYGJwZl9za2Jfdmxhbl9wdXNoYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIGlzIGEgQlBGIGhlbHBlci4KClNvLCBhbGwgb2YgdGhlIGZ1bmN0aW9ucyB3aXRoIHRoZSBuYW1lcyB0aGF0IGRvbiYjMzk7dCBzdGFydCB3aXRoIGBfX2AgYXJlIGNhbGxlZCBmcm9tIG90aGVyIGAuY2AgZmlsZXMsIGFuZCB0aGV5IGFyZSBub3QgYHN0YXRpYyBpbmxpbmVgLiBJJiMzOTtsbCB3YW50IHRvIHJlbWVtYmVyIHRoZXNlLgoKTm93LCBsZXQmIzM5O3MgZGV0ZXJtaW5lIHRoZSBwcmV2YWxlbmNlIG9mIHRoZXNlIGZ1bmN0aW9ucy4gYHNrYl92bGFuX3B1c2hgIGlzIHNwZWNpZmljIHRvIFZMQU4gcHVzaGluZyBvcGVyYXRpb25zIGluIFRDL0JQRi9PVlMuIGB2bGFuX2RvX3JlY2VpdmVgIGlzIGFsc28gc3BlY2lmaWMsIG9ubHkgZm9yIDgwMi4xUSBWTEFOIHBhY2tldCBwcm9jZXNzaW5nIG9uIHJlY2VpdmUuIEFuZCBgdGNmX21wbHNfYWN0YCBpcyBub24tdWJpcXVpdG91cywgc3BlY2lmaWMgdG8gdGhlIFRDIE1QTFMgYWN0aW9uLgoKRm9yIGB2bGFuX2RvX3JlY2VpdmVgLCB0aGUgYENPTkZJR19WTEFOXzgwMjFRYCBLY29uZmlnIGRlcGVuZGVuY3kgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZCBmb3IgdGVzdGluZy4gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCYjMzk7cyBlbmFibGVkIHdoZW4gSSYjMzk7bSBydW5uaW5nIHRoaXMgZnV6ei4gTm93IEkgbmVlZCB0byBjaGVjayBgbmV0LzgwMjFxL0tjb25maWdgIGZvciB0aGF0IGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvODAyMXEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIENvbmZpZ3VyYXRpb24gZm9yIDgwMi4xUSBWTEFOIHN1cHBvcnRcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIFZMQU5fODAyMVFcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0OzgwMi4xUS84MDIuMWFkIFZMQU4gU3VwcG9ydFwmIzM0O1xuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBTZWxlY3QgdGhpcyBhbmQgeW91IHdpbGwgYmUgYWJsZSB0byBjcmVhdGUgODAyLjFRIFZMQU4gaW50ZXJmYWNlc1xuICAxMDpcdFx0ICBvbiB5b3VyIEV0aGVybmV0IGludGVyZmFjZXMuIDgwMi4xUSBWTEFOIHN1cHBvcnRzIGFsbW9zdFxuICAxMTpcdFx0ICBldmVyeXRoaW5nIGEgcmVndWxhciBFdGhlcm5ldCBpbnRlcmZhY2UgZG9lcywgaW5jbHVkaW5nXG4gIDEyOlx0XHQgIGZpcmV3YWxsaW5nLCBicmlkZ2luZywgYW5kIG9mIGNvdXJzZSBJUCB0cmFmZmljLiBZb3Ugd2lsbCBuZWVkXG4gIDEzOlx0XHQgIHRoZSAmIzM5O2lwJiMzOTsgdXRpbGl0eSBpbiBvcmRlciB0byBlZmZlY3RpdmVseSB1c2UgVkxBTnMuXG4gIDE0Olx0XHQgIFNlZSB0aGUgVkxBTiB3ZWIgcGFnZSBmb3IgbW9yZSBpbmZvcm1hdGlvbjpcbiAgMTU6XHRcdCAgXHUwMDNjaHR0cDovL3d3dy5jYW5kZWxhdGVjaC5jb20vfmdyZWVhci92bGFuLmh0bWxcdTAwM2VcbiAgMTY6XHRcbiAgMTc6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgMTg6XHRcdCAgd2lsbCBiZSBjYWxsZWQgODAyMXEuXG4gIDE5Olx0XG4gIDIwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIFZMQU5fODAyMVFfR1ZSUFxuICAyMzpcdFx0Ym9vbCBcJiMzNDtHVlJQIChHQVJQIFZMQU4gUmVnaXN0cmF0aW9uIFByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4gIDI0Olx0XHRkZXBlbmRzIG9uIFZMQU5fODAyMVFcbiAgMjU6XHRcdHNlbGVjdCBHQVJQXG4gIDI2Olx0XHRoZWxwXG4gIDI3Olx0XHQgIFNlbGVjdCB0aGlzIHRvIGVuYWJsZSBHVlJQIGVuZC1zeXN0ZW0gc3VwcG9ydC4gR1ZSUCBpcyB1c2VkIGZvclxuICAyODpcdFx0ICBhdXRvbWF0aWMgcHJvcGFnYXRpb24gb2YgcmVnaXN0ZXJlZCBWTEFOcyB0byBzd2l0Y2hlcy5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUyMzcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzcGVjaWZpY2FsbHkgYENPTkZJR19WTEFOXzgwMjFRYC4gRnJvbSB3aGF0IEkgc2VlLCBpdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gaGF2ZSBhbnkgdW51c3VhbCBkZXBlbmRlbmNpZXMgYmV5b25kIHRoZSBzdGFuZGFyZCBgTkVUYCBkZXBlbmRlbmN5LCB3aGljaCBpcyBmYWlybHkgdHlwaWNhbC4gTm90aGluZyBvdXQgb2YgdGhlIG9yZGluYXJ5IHRoZXJlLgoKTm93LCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBDT05GSUdfTkVUX0FDVF9NUExTYCBpbiB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYXJvdW5kIGxpbmUgODE5IGluIHRoYXQgZmlsZSB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgY29udGV4dCBhbmQgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbW9kdWxlcy4gSXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBLY29uZmlnIHN0cnVjdHVyZSB0byBiZSBzdXJlIG9mIGV4YWN0bHkgaG93IHRoaW5ncyBmaXQgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgxNTpcdFxuIDgxNjpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gODE3Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfY3N1bS5cbiA4MTg6XHRcbiA4MTk6XHRjb25maWcgTkVUX0FDVF9NUExTXG4gODIwOlx0XHR0cmlzdGF0ZSBcJiMzNDtNUExTIG1hbmlwdWxhdGlvblwmIzM0O1xuIDgyMTpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxuIDgyMjpcdFx0aGVscFxuIDgyMzpcdFx0ICBTYXkgWSBoZXJlIHRvIHB1c2ggb3IgcG9wIE1QTFMgaGVhZGVycy5cbiA4MjQ6XHRcbiA4MjU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiA4MjY6XHRcbiA4Mjc6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDgyODpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X21wbHMuXG4gODI5Olx0XG4gODMwOlx0Y29uZmlnIE5FVF9BQ1RfVkxBTlxuIDgzMTpcdFx0dHJpc3RhdGUgXCYjMzQ7VmxhbiBtYW5pcHVsYXRpb25cJiMzNDtcbiA4MzI6XHRcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcbiA4MzM6XHRcdGhlbHBcbiA4MzQ6XHRcdCAgU2F5IFkgaGVyZSB0byBwdXNoIG9yIHBvcCB2bGFuIGhlYWRlcnMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1Nzc1CgkJCQkJCQlvdXRwdXQ6IDI0MQoJCQkJCQkJdGhvdWdodHM6IDc1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBWTEFOIGFuZCBNUExTIENvbmZpZ3VyYXRpb24gZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoZSBkZXBlbmRlbmNpZXM6IGBDT05GSUdfTkVUX0FDVF9NUExTYCBhbmQgYENPTkZJR19ORVRfQUNUX1ZMQU5gIGJvdGggcmVseSBvbiBgQ09ORklHX05FVF9DTFNfQUNUYC4gV2UgYWxzbyBoYXZlIGBza2Jfdmxhbl9wdXNoYCByZXNpZGluZyBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLCB3aGljaCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfTkVUPXlgLCBhbmQgYENPTkZJR19WTEFOXzgwMjFRYC4gR290IGl0LgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IG91ciBgRW5hYmxlQ29uZmlnc2A6IGBWTEFOXzgwMjFRYCwgYE5FVF9BQ1RfTVBMU2AsIGBORVRfQUNUX1ZMQU5gLCBhbmQgYE5FVF9DTFNfQUNUYC4gVGhvc2UgbG9vayBjb3JyZWN0IGJhc2VkIG9uIHRoZSBkZXBlbmRlbmNpZXMuCgpBbHJpZ2h0LCB3aGF0IGRvIHRoZXNlIGNvbmZpZ3VyYXRpb25zICphY3R1YWxseSogZW5hYmxlPyBgVkxBTl84MDIxUWAgZW5hYmxlcyB0aGUgY29yZSBWTEFOIGNvZGUgKGB2bGFuX2NvcmUuY2ApIGFuZCA4MDIuMVEgc3VwcG9ydC4gYE5FVF9DTFNfQUNUYCBhbmQgYE5FVF9BQ1RfTVBMU2AgZW5hYmxlIE1QTFMgdHJhZmZpYyBjb250cm9sIGFjdGlvbnMsIGFuZCBgTkVUX0FDVF9WTEFOYCBlbmFibGVzIFZMQU4gdHJhZmZpYyBjb250cm9sIGFjdGlvbnMuIE1ha2VzIHNlbnNlLgoKTm93LCB0aGUgY3JpdGljYWwgcGFydC4gSSBuZWVkIHRvIGRlZmluZSB0aGUgYEZvY3VzU3ltYm9sc2AuIENhbiBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGJlIGxpc3RlZCBhcyBhIGZvY3VzIHN5bWJvbD8gTm8sIGl0IGNhbiYjMzk7dCwgYmVjYXVzZSBpdCYjMzk7cyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9pZl92bGFuLmhgLiBTZWN0aW9uIDQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBsYWNrIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgYW5kIHRodXMgY2FuJiMzOTt0IGJlIHRhcmdldGVkIGRpcmVjdGx5LiBUaGVyZWZvcmUsIEkgbmVlZCB0byBmb2N1cyBvbiAqY2FsbGVycyogb2YgdGhlIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24uCgpTbywgaW5zdGVhZCBvZiBgX192bGFuX2luc2VydF9pbm5lcl90YWdgLCBJJiMzOTttIGdvaW5nIHRvIGxpc3Q6CiogICBgc2tiX3ZsYW5fcHVzaGAKKiAgIGB2bGFuX2RvX3JlY2VpdmVgCiogICBgdGNmX21wbHNfYWN0YAoqICAgYHRjZl92bGFuX2FjdGAKCk5leHQsIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBub25lIG9mIHRoZXNlIGNhbGxlcnMgYXJlICp1YmlxdWl0b3VzKi4gTGV0JiMzOTtzIGNoZWNrOgoKKiAgIGBza2Jfdmxhbl9wdXNoYDogSXQmIzM5O3Mgb25seSBjYWxsZWQgd2hlbiBwdXNoaW5nIGEgVkxBTiB0YWcsIGZvciBpbnN0YW5jZSwgbmVzdGVkIFZMQU5zIG9yIFZMQU4gYWN0aW9ucyB0aHJvdWdoIHRjLCBicGYsIG9yIG92cy4gVGhhdCYjMzk7cyBub3QgdWJpcXVpdG91cy4gR29vZC4KKiAgIGB2bGFuX2RvX3JlY2VpdmVgOiBJdCYjMzk7cyBvbmx5IGNhbGxlZCB3aGVuIHJlY2VpdmluZyBwYWNrZXRzIG9uIGEgVkxBTiBpbnRlcmZhY2UuIERlZmluaXRlbHkgbm90IHViaXF1aXRvdXMuCiogICBgdGNmX21wbHNfYWN0YDogT25seSBjYWxsZWQgZm9yIE1QTFMgdHJhZmZpYyBjb250cm9sIGFjdGlvbnMuIE5vdCB1YmlxdWl0b3VzLgoqICAgYHRjZl92bGFuX2FjdGA6IE9ubHkgY2FsbGVkIGZvciBWTEFOIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLiBBbHNvLCBub3QgdWJpcXVpdG91cy4KCkV4Y2VsbGVudC4gSXQgc2VlbXMgSSBoYXZlIHNlbGVjdGVkIGEgZ29vZCBsaXN0IG9mIG5vbi11YmlxdWl0b3VzIGZ1bmN0aW9ucy4KCklzIGZ1enppbmcgd2FycmFudGVkPyBBYnNvbHV0ZWx5LiBgV29ydGhGdXp6aW5nPXRydWVgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBpbnB1dCB2YWxpZGF0aW9uIGNoZWNrIChgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pYCkgaW4gYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBpbnNlcnRpbmcgaW5uZXIgVkxBTiB0YWdzLiBUaGlzIGhlbHBlciBpcyBjYWxsZWQgYnkgdml0YWwgbmV0d29ya2luZyBwYXRocywgaW5jbHVkaW5nIDgwMi4xUSBWTEFOIHBhY2tldCByZWNlcHRpb24gKGB2bGFuX2RvX3JlY2VpdmVgKSwgcGFja2V0IG1vZGlmaWNhdGlvbiB2aWEgQlBGL1RDL09WUyAoYHNrYl92bGFuX3B1c2hgLCBgdGNmX3ZsYW5fYWN0YCksIGFuZCBUQyBNUExTIGFjdGlvbnMgKGB0Y2ZfbXBsc19hY3RgKS4gSSBuZWVkIHRvIGZ1enogdGhpcyB0aG9yb3VnaGx5IHRvIHZlcmlmeSB0aGF0IHVudXN1YWwgb3IgbWFsZm9ybWVkIHBhY2tldHMgd2l0aCBub24tbGluZWFyIGhlYWRlcnMgcHJvcGVybHkgdHJpZ2dlciB0aGUgbmV3IGNoZWNrLCB3aXRoIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgZXJyb3JzLgoKQWxsIGNoZWNrcyBhcmUgY2xlYXIgYW5kIHRoZSB2ZXJpZmljYXRpb24gaXMgY29tcGxldGUuIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7LAogICAgJiMzNDtORVRfQUNUX01QTFMmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9WTEFOJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3ZsYW5fcHVzaCYjMzQ7LAogICAgJiMzNDt2bGFuX2RvX3JlY2VpdmUmIzM0OywKICAgICYjMzQ7dGNmX21wbHNfYWN0JiMzNDssCiAgICAmIzM0O3RjZl92bGFuX2FjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pIGNoZWNrIHRvIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKCkgaW4gaW5jbHVkZS9saW51eC9pZl92bGFuLmggdG8gZW5zdXJlIHN1ZmZpY2llbnQgaGVhZCBkYXRhIGlzIHB1bGxlZCBiZWZvcmUgaW5zZXJ0aW5nIGFuIGlubmVyIFZMQU4gdGFnLiBUaGlzIHJlYWNoYWJsZSBoZWxwZXIgaXMgZXhlcmNpc2VkIGJ5IGNvcmUgbmV0d29ya2luZyBwYXRocyBzdWNoIGFzIDgwMi4xUSByZWNlaXZlIHByb2Nlc3NpbmcgKHZsYW5fZG9fcmVjZWl2ZSksIFZMQU4gcHVzaCBvcGVyYXRpb25zIChza2Jfdmxhbl9wdXNoKSwgYW5kIFRDIGFjdGlvbnMgKHRjZl9tcGxzX2FjdCwgdGNmX3ZsYW5fYWN0KS4gRnV6emluZyBpcyB3b3J0aHdoaWxlIHRvIHRlc3QgYmVoYXZpb3Igd2l0aCBub24tbGluZWFyLCBmcmFnbWVudGVkLCBvciBtYWxmb3JtZWQgcGFja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7LAogICAgJiMzNDtORVRfQUNUX01QTFMmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9WTEFOJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3ZsYW5fcHVzaCYjMzQ7LAogICAgJiMzNDt2bGFuX2RvX3JlY2VpdmUmIzM0OywKICAgICYjMzQ7dGNmX21wbHNfYWN0JiMzNDssCiAgICAmIzM0O3RjZl92bGFuX2FjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pIGNoZWNrIHRvIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKCkgaW4gaW5jbHVkZS9saW51eC9pZl92bGFuLmggdG8gZW5zdXJlIHN1ZmZpY2llbnQgaGVhZCBkYXRhIGlzIHB1bGxlZCBiZWZvcmUgaW5zZXJ0aW5nIGFuIGlubmVyIFZMQU4gdGFnLiBUaGlzIHJlYWNoYWJsZSBoZWxwZXIgaXMgZXhlcmNpc2VkIGJ5IGNvcmUgbmV0d29ya2luZyBwYXRocyBzdWNoIGFzIDgwMi4xUSByZWNlaXZlIHByb2Nlc3NpbmcgKHZsYW5fZG9fcmVjZWl2ZSksIFZMQU4gcHVzaCBvcGVyYXRpb25zIChza2Jfdmxhbl9wdXNoKSwgYW5kIFRDIGFjdGlvbnMgKHRjZl9tcGxzX2FjdCwgdGNmX3ZsYW5fYWN0KS4gRnV6emluZyBpcyB3b3J0aHdoaWxlIHRvIHRlc3QgYmVoYXZpb3Igd2l0aCBub24tbGluZWFyLCBmcmFnbWVudGVkLCBvciBtYWxmb3JtZWQgcGFja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgdXNpbmcgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pIGluIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKCkgdG8gZW5zdXJlIHRoYXQgdGhlIHBhY2tldCBidWZmZXIgY29udGFpbnMgYXQgbGVhc3QgbWFjX2xlbiBsaW5lYXIgYnl0ZXMgYmVmb3JlIHBlcmZvcm1pbmcgaGVhZGVyIG1hbmlwdWxhdGlvbnMgKHNrYl9wb3N0cHVzaF9kYXRhX21vdmUgYW5kIHdyaXRpbmcgdmxhbl9ldGhoZHIpLiBXaXRob3V0IHRoaXMgY2hlY2ssIHBhY2tldHMgc2hvcnRlciB0aGFuIG1hY19sZW4gb3Igbm9uLWxpbmVhciBidWZmZXJzIGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBoZWFwIGFjY2Vzc2VzIChPT0IgcmVhZC93cml0ZSksIHdoaWNoIGFyZSBkaXJlY3RseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjM2ZGNhYTFkOTY3ZWMyYjcyZWI0MzY1ZjRiZjgzMzk2M2I4ZGJmNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDExOjEwOjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl92bGFuLmggYi9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaAppbmRleCAyMGNjMTZlYTRlNWFiLi40ODQ2MDMyYmY0ZmZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaApAQCAtMzY1LDYgJiM0MzszNjUsOSBAQCBzdGF0aWMgaW5saW5lIGludCBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWNvbnN0IHU4IG1ldGFfbGVuID0gbWFjX2xlbiAmZ3Q7IEVUSF9UTEVOID8gc2tiX21ldGFkYXRhX2xlbihza2IpIDogMDsKIAlzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZldGg7CiAKJiM0MzsJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbikpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJaWYgKHNrYl9jb3dfaGVhZChza2IsIG1ldGFfbGVuICYjNDM7IFZMQU5fSExFTikgJmx0OyAwKQogCQlyZXR1cm4gLUVOT01FTTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZMQU4gSW5zZXJ0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgaXQmIzM5O3MgdG91Y2hpbmcgYGluY2x1ZGUvbGludXgvaWZfdmxhbi5oYCwgc3BlY2lmaWNhbGx5IHRoZSBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGZ1bmN0aW9uLiBUaGUgY29kZSBzbmlwcGV0IGlzIHN0cmFpZ2h0Zm9yd2FyZCwgYWRkaW5nIGEgY2hlY2suIE5vdywgd2hlcmUgd2FzIHRoaXMgZnVuY3Rpb24gb3JpZ2luYWxseSBpbiB0aGUgcHJvamVjdD8gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlYWQgdGhlIHdob2xlIGZpbGUgdG8gY29uZmlybSB3aGF0IHRoZSBpbnRlbnRpb24gb2YgdGhlIGZ1bmN0aW9uIGlzLCBhbmQgYWxzbyB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgY2hhbmdlIGZpdHMgaW4uCgpUaGUgYWRkZWQgYGlmYCBzdGF0ZW1lbnQgd2l0aCBgcHNrYl9tYXlfcHVsbCgpYCBjYXRjaGVzIG15IGV5ZSBpbW1lZGlhdGVseS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgYWRkaW5nIGEgc2FmZXR5IGNoZWNrIGJlZm9yZSBwb3RlbnRpYWxseSBtb2RpZnlpbmcgdGhlIFNLQi4gVGhpcyBpcyBnb29kIHByYWN0aWNlOyBwcmV2ZW50aW5nIGlzc3VlcyB3aXRoIGRhdGEgY29ycnVwdGlvbiBvciBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWx3YXlzIGEgd2luLiBUaGUgY2hlY2sgZW5zdXJlcyB0aGF0IHdlIGhhdmUgZW5vdWdoIGRhdGEgYXZhaWxhYmxlIGluIHRoZSBTS0IgdG8gd29yayB3aXRoIHRoZSBNQUMgaGVhZGVyLiBTbywgd2UmIzM5O3JlIGxpa2VseSBkZWFsaW5nIHdpdGggc29tZSBraW5kIG9mIFZMQU4gdGFnZ2luZyBpbnNlcnRpb24uIFdlIGhhdmUgdGhlIGRhdGEgbGVuZ3RoIG9mIE1BQyBoZWFkZXIsIGFuZCBhbHNvIGEgbGVuZ3RoIGNoZWNrIHdpdGggYEVUSF9UTEVOYC4KCkkmIzM5O2xsIHF1aWNrbHkgcmVmZXJlbmNlIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLCBqdXN0IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCBzaG91bGQgYmUgcHJldHR5IHNhZmUgdG8gYXNzdW1lIHRoYXQgYHBza2JfbWF5X3B1bGwoKWAgaXMgYmVpbmcgdXNlZCBjb3JyZWN0bHksIGJ1dCwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbGluZyBjb250ZXh0cyBpbiB0aGUgcHJvamVjdC4gVGhlIGAtRUlOVkFMYCByZXR1cm4gb24gZmFpbHVyZSBpcyBzdGFuZGFyZCBwcmFjdGljZSwgaW5kaWNhdGluZyBhbiBpbnZhbGlkIGFyZ3VtZW50LCBzbyB0aGF0JiMzOTtzIGdvb2QuIFRoZSBjb21tZW50IHNob3VsZCBleHBsYWluIHRoZSByZWFzb25zIGZvciBmYWlsdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaWZfdmxhbi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaWZfdmxhbi5oPTMzOT1zdGF0aWMgaW5saW5lIGJvb2wgdmxhbl9od19vZmZsb2FkX2NhcGFibGUobmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzQ5LS8qKlxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6MzUwOiAqIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnIC0gaW5uZXIgVkxBTiB0YWcgaW5zZXJ0aW5nXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0zNTEtICogQHNrYjogc2tidWZmIHRvIHRhZ1xuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM2MC0gKi9cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjM2MTpzdGF0aWMgaW5saW5lIGludCBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzYyLVx0XHRcdFx0XHQgIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl90Y2ksXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg9NDE0PXN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDE2LXtcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQxNzpcdHJldHVybiBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHZsYW5fcHJvdG8sIHZsYW5fdGNpLCBFVEhfSExFTik7XG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MTgtfVxuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTQzNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp2bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00NDMtXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDo0NDQ6XHRlcnIgPSBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHZsYW5fcHJvdG8sIHZsYW5fdGNpLCBtYWNfbGVuKTtcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQ0NS1cdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEzNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQ6CgoqKkFuYWx5emluZyBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIC0gRGl2aW5nIGludG8gdGhlIENvZGUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICpyZWFsbHkqIGdvaW5nIG9uIHdpdGggYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC4gVGhlIG5hbWUgc3VnZ2VzdHMgaXQmIzM5O3MgcmVsYXRlZCB0byBWTEFOIGluc2VydGlvbiwgbGlrZWx5IGFkZGluZyBhbiBpbm5lciBWTEFOIHRhZywgc28gdGhhdCYjMzk7cyB0aGUgYXJlYSBvZiBmb2N1cy4gTXkgZmlyc3Qgc3RlcCwgbmF0dXJhbGx5LCBpcyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBkZWVwIGRpdmUgaW50byB0aGF0IGZ1bmN0aW9uLCB0aGUgYmVzdCB3YXkgdG8gZG8gdGhhdCBpcyB0byBoYXZlIGEgZ29vZCBsb29rIGF0IGl0IHdpdGggYHJlYWQtZmlsZWAuIEkgbmVlZCBhbGwgdGhlIGRldGFpbHMuIEkgd2FudCB0byBzZWUgdGhlIGFyZ3VtZW50cywgdGhlIGxvY2FsIHZhcmlhYmxlcywgZXZlcnkgc2luZ2xlIGxpbmUgb2YgdGhhdCBjb2RlLiBOb3RoaW5nIGxlc3MuIFRoZW4gSSYjMzk7bGwgYmUgYWJsZSB0byBjb25zaWRlciB0aGUgYWxnb3JpdGhtLCBhbmQgdGhlIGRhdGEgc3RydWN0dXJlcy4gSSB3aWxsIGFsc28gYmUgYWJsZSB0byByZXZpZXcgd2hhdCBhc3N1bXB0aW9ucyBhcmUgbWFkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzUwOlx0ICogX192bGFuX2luc2VydF9pbm5lcl90YWcgLSBpbm5lciBWTEFOIHRhZyBpbnNlcnRpbmdcbiAzNTE6XHQgKiBAc2tiOiBza2J1ZmYgdG8gdGFnXG4gMzUyOlx0ICogQHZsYW5fcHJvdG86IFZMQU4gZW5jYXBzdWxhdGlvbiBwcm90b2NvbFxuIDM1MzpcdCAqIEB2bGFuX3RjaTogVkxBTiBUQ0kgdG8gaW5zZXJ0XG4gMzU0Olx0ICogQG1hY19sZW46IE1BQyBoZWFkZXIgbGVuZ3RoIGluY2x1ZGluZyBvdXRlciB2bGFuIGhlYWRlcnNcbiAzNTU6XHQgKlxuIDM1NjpcdCAqIEluc2VydHMgdGhlIFZMQU4gdGFnIGludG8gQHNrYiBhcyBwYXJ0IG9mIHRoZSBwYXlsb2FkIGF0IG9mZnNldCBtYWNfbGVuXG4gMzU3Olx0ICogRG9lcyBub3QgY2hhbmdlIHNrYi1cdTAwM2Vwcm90b2NvbCBzbyB0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGR1cmluZyByZWNlaXZlLlxuIDM1ODpcdCAqXG4gMzU5Olx0ICogUmV0dXJuczogZXJyb3IgaWYgc2tiX2Nvd19oZWFkIGZhaWxzLlxuIDM2MDpcdCAqL1xuIDM2MTpcdHN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4gMzYyOlx0XHRcdFx0XHRcdCAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSxcbiAzNjM6XHRcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgbWFjX2xlbilcbiAzNjQ6XHR7XG4gMzY1Olx0XHRjb25zdCB1OCBtZXRhX2xlbiA9IG1hY19sZW4gXHUwMDNlIEVUSF9UTEVOID8gc2tiX21ldGFkYXRhX2xlbihza2IpIDogMDtcbiAzNjY6XHRcdHN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aDtcbiAzNjc6XHRcbiAzNjg6XHRcdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pKSlcbiAzNjk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzcwOlx0XG4gMzcxOlx0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgbWV0YV9sZW4gJiM0MzsgVkxBTl9ITEVOKSBcdTAwM2MgMClcbiAzNzI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzczOlx0XG4gMzc0Olx0XHRza2JfcHVzaChza2IsIFZMQU5fSExFTik7XG4gMzc1Olx0XG4gMzc2Olx0XHQvKiBNb3ZlIHRoZSBtYWMgaGVhZGVyIHNhbnMgcHJvdG8gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IGhlYWRlci4gKi9cbiAzNzc6XHRcdGlmIChsaWtlbHkobWFjX2xlbiBcdTAwM2UgRVRIX1RMRU4pKVxuIDM3ODpcdFx0XHRza2JfcG9zdHB1c2hfZGF0YV9tb3ZlKHNrYiwgVkxBTl9ITEVOLCBtYWNfbGVuIC0gRVRIX1RMRU4pO1xuIDM3OTpcdFx0aWYgKHNrYl9tYWNfaGVhZGVyX3dhc19zZXQoc2tiKSlcbiAzODA6XHRcdFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgLT0gVkxBTl9ITEVOO1xuIDM4MTpcdFxuIDM4MjpcdFx0dmV0aCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgbWFjX2xlbiAtIEVUSF9ITEVOKTtcbiAzODM6XHRcbiAzODQ6XHRcdC8qIGZpcnN0LCB0aGUgZXRoZXJuZXQgdHlwZSAqL1xuIDM4NTpcdFx0aWYgKGxpa2VseShtYWNfbGVuIFx1MDAzZT0gRVRIX1RMRU4pKSB7XG4gMzg2Olx0XHRcdC8qIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gc2hvdWxkIGFscmVhZHkgYmUgcG9wdWxhdGVkLCBhbmRcbiAzODc6XHRcdFx0ICogc2tiLVx1MDAzZWRhdGEgaGFzIHNwYWNlIGZvciBoX3ZsYW5fcHJvdG9cbiAzODg6XHRcdFx0ICovXG4gMzg5Olx0XHRcdHZldGgtXHUwMDNlaF92bGFuX3Byb3RvID0gdmxhbl9wcm90bztcbiAzOTA6XHRcdH0gZWxzZSB7XG4gMzkxOlx0XHRcdC8qIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gc2hvdWxkIG5vdCBiZSBwb3B1bGF0ZWQsIGFuZFxuIDM5MjpcdFx0XHQgKiBza2ItXHUwMDNlZGF0YSBoYXMgbm8gc3BhY2UgZm9yIGhfdmxhbl9wcm90b1xuIDM5MzpcdFx0XHQgKi9cbiAzOTQ6XHRcdFx0dmV0aC1cdTAwM2VoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvID0gc2tiLVx1MDAzZXByb3RvY29sO1xuIDM5NTpcdFx0fVxuIDM5NjpcdFxuIDM5NzpcdFx0Lyogbm93LCB0aGUgVENJICovXG4gMzk4Olx0XHR2ZXRoLVx1MDAzZWhfdmxhbl9UQ0kgPSBodG9ucyh2bGFuX3RjaSk7XG4gMzk5Olx0XG4gNDAwOlx0XHRyZXR1cm4gMDtcbiA0MDE6XHR9XG4gNDAyOlx0XG4gNDAzOlx0LyoqXG4gNDA0Olx0ICogX192bGFuX2luc2VydF90YWcgLSByZWd1bGFyIFZMQU4gdGFnIGluc2VydGluZ1xuIDQwNTpcdCAqIEBza2I6IHNrYnVmZiB0byB0YWdcbiA0MDY6XHQgKiBAdmxhbl9wcm90bzogVkxBTiBlbmNhcHN1bGF0aW9uIHByb3RvY29sXG4gNDA3Olx0ICogQHZsYW5fdGNpOiBWTEFOIFRDSSB0byBpbnNlcnRcbiA0MDg6XHQgKlxuIDQwOTpcdCAqIEluc2VydHMgdGhlIFZMQU4gdGFnIGludG8gQHNrYiBhcyBwYXJ0IG9mIHRoZSBwYXlsb2FkXG4gNDEwOlx0ICogRG9lcyBub3QgY2hhbmdlIHNrYi1cdTAwM2Vwcm90b2NvbCBzbyB0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGR1cmluZyByZWNlaXZlLlxuIDQxMTpcdCAqXG4gNDEyOlx0ICogUmV0dXJuczogZXJyb3IgaWYgc2tiX2Nvd19oZWFkIGZhaWxzLlxuIDQxMzpcdCAqL1xuIDQxNDpcdHN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MjYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkgaW4gVkxBTiBUYWcgSW5zZXJ0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGFkZGluZyBhIFZMQU4gdGFnIHRvIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoYXQgdGhlIG9yaWdpbmFsIGNvZGUgd2FzbiYjMzk7dCB2ZXJpZnlpbmcgdGhhdCBlbm91Z2ggYnl0ZXMsIHNwZWNpZmljYWxseSBgbWFjX2xlbmAsIHdlcmUgYWN0dWFsbHkgcHJlc2VudCBpbiB0aGUgbGluZWFyIGJ1ZmZlciBvZiB0aGUgYHNrYmAgYmVmb3JlIHByb2NlZWRpbmcuIFRoZSBgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pYCBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byBndWFyYW50ZWUgdGhhdCBgc2tiLSZndDtkYXRhYCB0byBgc2tiLSZndDt0YWlsYCBjb250YWlucyBhdCBsZWFzdCB0aGF0IG1hbnkgYnl0ZXMuCgpUaGUgY29yZSBvZiB0aGUgaXNzdWUgaXMgaGVyZTogaWYgYHBza2JfbWF5X3B1bGxgICpmYWlscyosIHRoZW4gb3BlcmF0aW9ucyBsaWtlIGBza2JfcG9zdHB1c2hfZGF0YV9tb3ZlKHNrYiwgVkxBTl9ITEVOLCBtYWNfbGVuIC0gRVRIX1RMRU4pYCBvciBhY2Nlc3NpbmcgYHNrYi0mZ3Q7ZGF0YSAmIzQzOyBtYWNfbGVuIC0gRVRIX0hMRU5gIHdvdWxkIHJlc3VsdCBpbiBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb3IgYnVmZmVyIG92ZXJmbG93LiBJbiBwYXJ0aWN1bGFyLCB0aGF0IGBza2JfcG9zdHB1c2hfZGF0YV9tb3ZlYCBmdW5jdGlvbiBpcyBjYWxsaW5nIGBtZW1tb3ZlKHNrYi0mZ3Q7ZGF0YSwgc2tiLSZndDtkYXRhICYjNDM7IFZMQU5fSExFTiwgbWFjX2xlbiAtIEVUSF9UTEVOKTtgIFdpdGhvdXQgZW5zdXJpbmcgdGhhdCBgc2tiLSZndDtkYXRhYCBoYXMgYXQgbGVhc3QgYG1hY19sZW5gIGJ5dGVzIHB1bGxlZCBpbnRvIHRoZSBsaW5lYXIgYnVmZmVyLCB0aGlzIGBtZW1tb3ZlYCBiZWNvbWVzIGEgcHJvYmxlbSBiZWNhdXNlIGl0JiMzOTtzIHJlYWRpbmcgb3Igd3JpdGluZyBwYXN0IHRoZSBsaW5lYXIgYXJlYSAoT09CIGFjY2VzcywgaGVhcCBidWZmZXIgb3ZlcmZsb3csIHNsYWItb3V0LW9mLWJvdW5kcywgcG90ZW50aWFsbHkpLiBUaGUgb3RoZXIgb3BlcmF0aW9uIEkgc2VlIGlzIGB2ZXRoID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKShza2ItJmd0O2RhdGEgJiM0MzsgbWFjX2xlbiAtIEVUSF9ITEVOKTtgLCBhbmQgdGhlbiBgdmV0aC0mZ3Q7aF92bGFuX3Byb3RvID0gdmxhbl9wcm90bztgIGlzIHdyaXRpbmcgdG8gYHZldGhgLgoKU28sIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZGlnIGludG8gdGhlIGNvbW1pdCBoaXN0b3J5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2gsIGlmIGFueSwgaXMgc3VwcG9zZWQgdG8gYmUgYWRkcmVzc2luZy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdpdCBsb2dgIG9yIHBlcmhhcHMgYSBtb3JlIHRhcmdldGVkIGdyZXBwZXIgdG8gZmluZCByZWxhdGVkIGNvbW1pdHMgb3IgYW55IGluZm9ybWF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGlzc3VlIHRoYXQgdGhpcyBwb3RlbnRpYWwgZml4IGFkZHJlc3Nlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHNrYl9tYXlfcHVsbFxcKHNrYiwgbWFjX2xlbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD0zNjE9c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0zNjctXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDozNjg6XHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBtYWNfbGVuKSkpXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0zNjktXHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDc5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFZMQU4gVGFnIEluc2VydGlvbiBDYWxsZXJzKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCBob3cgVkxBTiB0YWdzIGFyZSBpbnNlcnRlZCwgc3BlY2lmaWNhbGx5IGJ5IHRyYWNpbmcgdGhlIGNhbGxzIHRvIHRoZSByZWxldmFudCBmdW5jdGlvbnMuIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB0aGUgZnVuY3Rpb25zIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgYW5kIHRoZW4gYWxzbyB0aGUgZmFtaWxpZXMgb2YgYHZsYW5faW5zZXJ0X2lubmVyX3RhZ2AsIGBfX3ZsYW5faW5zZXJ0X3RhZ2AsIGFuZCBgdmxhbl9pbnNlcnRfdGFnYC4gV2UgbmVlZCB0byBtYXAgb3V0IHRoZSBjYWxsIHBhdGhzIHRvIHRoZXNlIGNvcmUgcm91dGluZXMgdG8gZ2FpbiBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBWTEFOIHRhZ2dpbmcgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBJJiMzOTttIHRoaW5raW5nIHdlIGNhbiBnZXQgdG8gdGhlIHJvb3Qgb2YgaG93IHRoZSBwYWNrZXRzIGFyZSBiZWluZyBjb25zdHJ1Y3RlZCwgYW5kIGhvdyB3ZSBhcmUgYnVpbGRpbmcgdGhlIFZMQU4gdGFncywgYW5kIHRoZW4gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBpbmVmZmljaWVuY2llcyBpbiB0aGUgcHJvY2Vzcy4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGZvbGxvdyB0aGVzZSBjYWxscyB0aHJvdWdoIHRoZSB3aG9sZSBzeXN0ZW0uIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2Ygd2hlcmUgdGhlIFZMQU4gbWFuaXB1bGF0aW9uIG9jY3VycyBhbmQgaG93IGRpZmZlcmVudCBkcml2ZXJzIGFuZCBtb2R1bGVzIGludGVyYWN0IHdpdGggdGhlIFZMQU4gaW5zZXJ0aW9uIGxvZ2ljLiBUaGVuLCB3ZSBjYW4gbG9vayBhdCB0aGUgZGF0YSBmbG93cyBhbmQgYXNzZXNzIHBlcmZvcm1hbmNlIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmxhbl9pbnNlcnRfaW5uZXJfdGFnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaWZfdmxhbi5oPTMzOT1zdGF0aWMgaW5saW5lIGJvb2wgdmxhbl9od19vZmZsb2FkX2NhcGFibGUobmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzQ5LS8qKlxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6MzUwOiAqIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnIC0gaW5uZXIgVkxBTiB0YWcgaW5zZXJ0aW5nXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0zNTEtICogQHNrYjogc2tidWZmIHRvIHRhZ1xuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM2MC0gKi9cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjM2MTpzdGF0aWMgaW5saW5lIGludCBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzYyLVx0XHRcdFx0XHQgIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl90Y2ksXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg9NDE0PXN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDE2LXtcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQxNzpcdHJldHVybiBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHZsYW5fcHJvdG8sIHZsYW5fdGNpLCBFVEhfSExFTik7XG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MTgtfVxuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQyMC0vKipcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQyMTogKiB2bGFuX2luc2VydF9pbm5lcl90YWcgLSBpbm5lciBWTEFOIHRhZyBpbnNlcnRpbmdcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQyMi0gKiBAc2tiOiBza2J1ZmYgdG8gdGFnXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDM2LSAqL1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDM3OnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnZsYW5faW5zZXJ0X2lubmVyX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDM4LVx0XHRcdFx0XHRcdCAgICBfX2JlMTYgdmxhbl9wcm90byxcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00NDMtXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDo0NDQ6XHRlcnIgPSBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHZsYW5fcHJvdG8sIHZsYW5fdGNpLCBtYWNfbGVuKTtcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQ0NS1cdGlmIChlcnIpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD00Njg9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdmxhbl9pbnNlcnRfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDcwLXtcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQ3MTpcdHJldHVybiB2bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCB2bGFuX3Byb3RvLCB2bGFuX3RjaSwgRVRIX0hMRU4pO1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDcyLX1cbi0tXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9MTA9Ym9vbCB2bGFuX2RvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipza2JwKVxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYy01MS1cdFx0c2tiX3B1c2goc2tiLCBvZmZzZXQpO1xubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjUyOlx0XHRza2IgPSAqc2ticCA9IHZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHNrYi1cdTAwM2V2bGFuX3Byb3RvLFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTUzLVx0XHRcdFx0XHRcdCAgICBza2ItXHUwMDNldmxhbl90Y2ksIHNrYi1cdTAwM2VtYWNfbGVuKTtcbi0tXG5uZXQvc2NoZWQvYWN0X21wbHMuYz01Mz1UQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX21wbHNfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjaGVkL2FjdF9tcGxzLmMtOTAtXHRcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XG5uZXQvc2NoZWQvYWN0X21wbHMuYzo5MTpcdFx0XHRpZiAoX192bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCBza2ItXHUwMDNldmxhbl9wcm90byxcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTkyLVx0XHRcdFx0XHRcdCAgICBza2Jfdmxhbl90YWdfZ2V0KHNrYiksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NzEKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFZMQU4gVGFnIEluc2VydGlvbiBpbiB0aGUgTmV0d29yayBTdGFjayoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IFZMQU4gdGFncyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHRoZSBpbnNlcnRpb24gcHJvY2Vzcy4gSSBzZWUgdGhhdCBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHR3byBpbnRlcmVzdGluZyBwbGFjZXM6IGBuZXQvc2NoZWQvYWN0X21wbHMuY2AsIHdoaWNoIGlzIGxpa2VseSByZWxhdGVkIHRvIE1QTFMgKE11bHRpcHJvdG9jb2wgTGFiZWwgU3dpdGNoaW5nKSB0cmFmZmljLCBhbmQgYG5ldC84MDIxcS92bGFuX2NvcmUuY2AgdGhyb3VnaCBgdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkmIzM5O2QgZXhwZWN0IGZvciBzdGFuZGFyZCBWTEFOIGNvcmUgZnVuY3Rpb25hbGl0eS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNlZSBpZiBhbnkgdW5leHBlY3RlZCBjYWxsaW5nIHBhdHRlcm5zIGVtZXJnZS4KCk5vdywgYF9fdmxhbl9pbnNlcnRfdGFnYCBpcyBhbHNvIGNhbGxlZCBlbHNld2hlcmUsIG5vdCBqdXN0IGluIHRoaXMgc3BlY2lmaWMgaW5uZXIgdGFnIHNjZW5hcmlvLiBTbywgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBicm9hZGVyIGNhbGwgZ3JhcGggb2YgKmJvdGgqIGBfX3ZsYW5faW5zZXJ0X3RhZ2AgYW5kIGl0cyB3cmFwcGVyIGZ1bmN0aW9uIGB2bGFuX2luc2VydF90YWdgLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBkaWZmZXJlbnQgY29udGV4dHMgd2hlcmUgVkxBTiB0YWcgaW5zZXJ0aW9uIGlzIHVzZWQgYW5kIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGFsbCBwb3RlbnRpYWwgY2FsbGVycyB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdmxhbl9pbnNlcnRfdGFnXFxiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9xZWRpL3FlZGlfbWFpbi5jPTY2Nz1zdGF0aWMgaW50IHFlZGlfbGwyX3J4KHZvaWQgKmNvb2tpZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGFyZzEsIHUzMiBhcmcyKVxuLS1cbmRyaXZlcnMvc2NzaS9xZWRpL3FlZGlfbWFpbi5jLTcyMi1cdGlmICh3b3JrLVx1MDAzZXZsYW5faWQpXG5kcml2ZXJzL3Njc2kvcWVkaS9xZWRpX21haW4uYzo3MjM6XHRcdF9fdmxhbl9pbnNlcnRfdGFnKHdvcmstXHUwMDNlc2tiLCBodG9ucyhFVEhfUF84MDIxUSksIHdvcmstXHUwMDNldmxhbl9pZCk7XG5kcml2ZXJzL3Njc2kvcWVkaS9xZWRpX21haW4uYy03MjQtXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg9MzYxPXN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDAzLS8qKlxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDA0OiAqIF9fdmxhbl9pbnNlcnRfdGFnIC0gcmVndWxhciBWTEFOIHRhZyBpbnNlcnRpbmdcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQwNS0gKiBAc2tiOiBza2J1ZmYgdG8gdGFnXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDEzLSAqL1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDE0OnN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MTUtXHRcdFx0XHQgICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz02NDg5PWludCBza2Jfdmxhbl9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl90Y2kpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjUwMC1cbm5ldC9jb3JlL3NrYnVmZi5jOjY1MDE6XHRcdGVyciA9IF9fdmxhbl9pbnNlcnRfdGFnKHNrYiwgc2tiLVx1MDAzZXZsYW5fcHJvdG8sXG5uZXQvY29yZS9za2J1ZmYuYy02NTAyLVx0XHRcdFx0XHRza2Jfdmxhbl90YWdfZ2V0KHNrYikpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjQ3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgYHZsYW5faW5zZXJ0X3RhZ2AqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBzcGVjaWZpYyBmdW5jdGlvbiwgYHZsYW5faW5zZXJ0X3RhZ2AuIEl0JiMzOTtzIHdvcnRoIGRpZ2dpbmcgaW50bywgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgY3VycmVudCBjb250ZXh0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQsIHBhcnRpY3VsYXJseSBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIFZMQU4gdGFnZ2luZy4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJ4oCZbGwgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpdC4gSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgdGhpcywgdG8gZW5zdXJlIG5vIGhpZGRlbiBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1xcYnZsYW5faW5zZXJ0X3RhZ1xcYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD00Mzc9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDUyLS8qKlxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDUzOiAqIHZsYW5faW5zZXJ0X3RhZyAtIHJlZ3VsYXIgVkxBTiB0YWcgaW5zZXJ0aW5nXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00NTQtICogQHNrYjogc2tidWZmIHRvIHRhZ1xuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQ2Ny0gKi9cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQ2ODpzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp2bGFuX2luc2VydF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQ2OS1cdFx0XHRcdFx0ICAgICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSlcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD00ODg9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdmxhbl9pbnNlcnRfdGFnX3NldF9wcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQ5MS17XG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDo0OTI6XHRza2IgPSB2bGFuX2luc2VydF90YWcoc2tiLCB2bGFuX3Byb3RvLCB2bGFuX3RjaSk7XG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00OTMtXHRpZiAoc2tiKVxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYz0xMD1ib29sIHZsYW5fZG9fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqKnNrYnApXG4tLVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTQ2LVx0XHQvKlxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjQ3Olx0XHQgKiB2bGFuX2luc2VydF90YWcgZXhwZWN0IHNrYi1cdTAwM2VkYXRhIHBvaW50aW5nIHRvIG1hYyBoZWFkZXIuXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtNDgtXHRcdCAqIFNvIGNoYW5nZSBza2ItXHUwMDNlZGF0YSBiZWZvcmUgY2FsbGluZyBpdCBhbmQgY2hhbmdlIGJhY2sgdG9cbi0tXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYz0zMzc9c3RhdGljIHZvaWQgYmF0YWR2X2JsYV9zZW5kX2NsYWltKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICptYWMsXG4tLVxubmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmMtNDI4LVx0aWYgKHZpZCBcdTAwMjYgQkFUQURWX1ZMQU5fSEFTX1RBRykge1xubmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmM6NDI5Olx0XHRza2IgPSB2bGFuX2luc2VydF90YWcoc2tiLCBodG9ucyhFVEhfUF84MDIxUSksXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYy00MzAtXHRcdFx0XHQgICAgICB2aWQgXHUwMDI2IFZMQU5fVklEX01BU0spO1xuLS1cbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jPTExOTk9YmF0YWR2X2RhdF9hcnBfY3JlYXRlX3JlcGx5KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIF9fYmUzMiBpcF9zcmMsXG4tLVxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtMTIxMi1cdGlmICh2aWQgXHUwMDI2IEJBVEFEVl9WTEFOX0hBU19UQUcpXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYzoxMjEzOlx0XHRza2IgPSB2bGFuX2luc2VydF90YWcoc2tiLCBodG9ucyhFVEhfUF84MDIxUSksXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy0xMjE0LVx0XHRcdFx0ICAgICAgdmlkIFx1MDAyNiBWTEFOX1ZJRF9NQVNLKTtcbi0tXG5uZXQvZHNhL3RhZ184MDIxcS5jPTQ2ND1zdHJ1Y3Qgc2tfYnVmZiAqZHNhXzgwMjFxX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5uZXQvZHNhL3RhZ184MDIxcS5jLTQ2Ny1cdC8qIHNrYi1cdTAwM2VkYXRhIHBvaW50cyBhdCB0aGUgTUFDIGhlYWRlciwgd2hpY2ggaXMgZmluZVxubmV0L2RzYS90YWdfODAyMXEuYzo0Njg6XHQgKiBmb3Igdmxhbl9pbnNlcnRfdGFnKCkuXG5uZXQvZHNhL3RhZ184MDIxcS5jLTQ2OS1cdCAqL1xubmV0L2RzYS90YWdfODAyMXEuYzo0NzA6XHRyZXR1cm4gdmxhbl9pbnNlcnRfdGFnKHNrYiwgaHRvbnModHBpZCksIHRjaSk7XG5uZXQvZHNhL3RhZ184MDIxcS5jLTQ3MS19XG4tLVxubmV0L2RzYS90YWdfc2phMTEwNS5jPTI0MT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnNqYTExMDVfcHZpZF90YWdfY29udHJvbF9wa3Qoc3RydWN0IGRzYV9wb3J0ICpkcCxcbi0tXG5uZXQvZHNhL3RhZ19zamExMTA1LmMtMjYyLVxubmV0L2RzYS90YWdfc2phMTEwNS5jOjI2MzpcdHJldHVybiB2bGFuX2luc2VydF90YWcoc2tiLCB4bWl0X3RwaWQsIChwY3AgXHUwMDNjXHUwMDNjIFZMQU5fUFJJT19TSElGVCkgfFxubmV0L2RzYS90YWdfc2phMTEwNS5jLTI2NC1cdFx0XHQgICAgICAgU0pBMTEwNV9ERUZBVUxUX1ZMQU4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTcxCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2gmIzM5O3MgSW1wYWN0KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgdW5kZXJzdGFuZCB0aGUgYnVnIGl0JiMzOTtzIGFkZHJlc3NpbmcuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gd2hhdCB3YXMgYnJva2VuICpiZWZvcmUqIHRoZSBwYXRjaC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGV4YW1pbmluZyB0aGlzIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgZnVuY3Rpb24sIHdoaWNoIHNlZW1zIHJlc3BvbnNpYmxlIGZvciBpbmplY3RpbmcgVkxBTiB0YWdzIGludG8gYW4gYHNrX2J1ZmZgLiBUaGUgY29kZSBzbmlwcGV0JiMzOTtzIHN0cnVjdHVyZSBpcyBmYW1pbGlhciwgYnV0IEkmIzM5O2xsIHdhbGsgdGhyb3VnaCBpdCBtZXRob2RpY2FsbHkuCgpJIHNlZSBhIGNoZWNrIHJlbGF0ZWQgdG8gYG1hY19sZW5gIGFuZCB0aGVuIHRoaXMgaW50ZXJlc3RpbmcgYHNrYl9wb3N0cHVzaF9kYXRhX21vdmVgIGNhbGwuIFRoZSBpbnRlbnQgb2YgdGhlIGNvZGUgc2VlbXMgdG8gYmUgcHVzaGluZyBhIFZMQU4gaGVhZGVyIG9udG8gdGhlIGBza2JgIGFuZCB0aGVuIHNoaWZ0aW5nIGEgcG9ydGlvbiBvZiB0aGUgb3JpZ2luYWwgTUFDIGhlYWRlci4gQnV0IHRoZXJlJiMzOTtzIGEgY29uZGl0aW9uIHJlbGF0ZWQgdG8gYG1hY19sZW5gIG5vdCBiZWluZyBmdWxseSBwcmVzZW50IGluIHRoZSBsaW5lYXIgYnVmZmVyLiBJZiBgc2tiX2hlYWRsZW4oc2tiKSAmbHQ7IG1hY19sZW5gLCB0aGVuIGBza2JfcG9zdHB1c2hfZGF0YV9tb3ZlYCBiZWNvbWVzIGNyaXRpY2FsLgoKVG8gdW5kZXJzdGFuZCB0aGUgYnVnLCBJIG5lZWQgdG8ga25vdyBwcmVjaXNlbHkgd2hhdCBgc2tiX3Bvc3RwdXNoX2RhdGFfbW92ZWAgKmRvZXMqIHVuZGVyIHRoZXNlIHBvdGVudGlhbGx5IG5vbi1jb250aWd1b3VzIGJ1ZmZlciBjb25kaXRpb25zLiBUaW1lIHRvIGJyZWFrIG91dCB0aGUgZ3JlcCBhbmQgc2VhcmNoIHRoZSBrZXJuZWwgc291cmNlIHRvIHNlZSB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZG9pbmcuIFRoZSBidWcgbGlrZWx5IGludm9sdmVzIGluY29ycmVjdCBhc3N1bXB0aW9ucyBhYm91dCBkYXRhIG1vdmVtZW50IGluIHRoZXNlIG5vbi1saW5lYXIgc2tiIHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX3Bvc3RwdXNoX2RhdGFfbW92ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD0zNjE9c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0zNzctXHRpZiAobGlrZWx5KG1hY19sZW4gXHUwMDNlIEVUSF9UTEVOKSlcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjM3ODpcdFx0c2tiX3Bvc3RwdXNoX2RhdGFfbW92ZShza2IsIFZMQU5fSExFTiwgbWFjX2xlbiAtIEVUSF9UTEVOKTtcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM3OS1cdGlmIChza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikpXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD00NjMxPXN0YXRpYyBpbmxpbmUgdm9pZCBza2JfbWV0YWRhdGFfY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQ2NDctICpcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDY0ODogKiBQcmVmZXIgc2tiX3Bvc3RwdWxsX2RhdGFfbW92ZSgpIG9yIHNrYl9wb3N0cHVzaF9kYXRhX21vdmUoKSB0byBjYWxsaW5nIHRoaXNcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNDY0OS0gKiBoZWxwZXIgZGlyZWN0bHkuXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD00Njg3PXN0YXRpYyBpbmxpbmUgdm9pZCBza2JfcG9zdHB1bGxfZGF0YV9tb3ZlKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00Njk1LS8qKlxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0Njk2OiAqIHNrYl9wb3N0cHVzaF9kYXRhX21vdmUgLSBNb3ZlIHBhY2tldCBkYXRhIGFuZCBtZXRhZGF0YSBhZnRlciBza2JfcHVzaCgpLlxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00Njk3LSAqIEBza2I6IHBhY2tldCB0byBvcGVyYXRlIG9uXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NzAyLSAqL1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0NzAzOnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfcG9zdHB1c2hfZGF0YV9tb3ZlKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQ3MDQtXHRcdFx0XHRcdCAgY29uc3QgdW5zaWduZWQgaW50IGxlbixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0zMzQ0PXN0YXRpYyBpbnQgYnBmX3NrYl9nZW5lcmljX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9mZiwgdTMyIGxlbilcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0zMzQ5LVx0c2tiX3B1c2goc2tiLCBsZW4pO1xubmV0L2NvcmUvZmlsdGVyLmM6MzM1MDpcdHNrYl9wb3N0cHVzaF9kYXRhX21vdmUoc2tiLCBsZW4sIG9mZik7XG5uZXQvY29yZS9maWx0ZXIuYy0zMzUxLVx0bWVtc2V0KHNrYi1cdTAwM2VkYXRhICYjNDM7IG9mZiwgMCwgbGVuKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz00MDYyPXN0YXRpYyBpbmxpbmUgaW50IF9fYnBmX3NrYl9jaGFuZ2VfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaGVhZF9yb29tLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQwODYtXHRcdF9fc2tiX3B1c2goc2tiLCBoZWFkX3Jvb20pO1xubmV0L2NvcmUvZmlsdGVyLmM6NDA4NzpcdFx0c2tiX3Bvc3RwdXNoX2RhdGFfbW92ZShza2IsIGhlYWRfcm9vbSwgMCk7XG5uZXQvY29yZS9maWx0ZXIuYy00MDg4LVx0XHRtZW1zZXQoc2tiLVx1MDAzZWRhdGEsIDAsIGhlYWRfcm9vbSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjI3NT1FWFBPUlRfU1lNQk9MKF9fcHNrYl9jb3B5X2ZjbG9uZSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjI5Mi0gKlx0Tm90ZTogSWYgeW91IHNrYl9wdXNoKCkgdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIgYWZ0ZXIgcmVhbGxvY2F0aW5nIHRoZVxubmV0L2NvcmUvc2tidWZmLmM6MjI5MzogKlx0aGVhZGVyLCBjYWxsIHNrYl9wb3N0cHVzaF9kYXRhX21vdmUoKSBmaXJzdCB0byBtb3ZlIHRoZSBtZXRhZGF0YSBvdXQgb2Zcbm5ldC9jb3JlL3NrYnVmZi5jLTIyOTQtICpcdHRoZSB3YXkgYmVmb3JlIHdyaXRpbmcgdG8gXHUwMDI2c2tfYnVmZi1cdTAwM2VkYXRhLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUzNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHNrYl9wb3N0cHVzaF9kYXRhX21vdmVgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgdGhlIGRlZmluaXRpb24gb2YgYHNrYl9wb3N0cHVzaF9kYXRhX21vdmVgLiBObyBuZWVkIHRvIHJlbHkgb24gYXNzdW1wdGlvbnMgb3IgbWVtb3J5IGhlcmU7IEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCB0byB0aGUgc291cmNlLCB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXI6IGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYC4gVGhpcyBmdW5jdGlvbiYjMzk7cyBiZWhhdmlvciBpcyBjcml0aWNhbCB0byBteSBjdXJyZW50IHRhc2ssIHNvIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIEkgaGF2ZSBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBpdCBkb2VzIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IGl0JiMzOTtzICpzdXBwb3NlZCogdG8gYmVoYXZlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGhlYWRlciBoYXMgdG8gc2F5IGFib3V0IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ3MDA6XHQgKlxuNDcwMTpcdCAqIFNlZSBza2JfZGF0YV9tb3ZlKCkgZm9yIGRldGFpbHMuXG40NzAyOlx0ICovXG40NzAzOlx0c3RhdGljIGlubGluZSB2b2lkIHNrYl9wb3N0cHVzaF9kYXRhX21vdmUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbjQ3MDQ6XHRcdFx0XHRcdFx0ICBjb25zdCB1bnNpZ25lZCBpbnQgbGVuLFxuNDcwNTpcdFx0XHRcdFx0XHQgIGNvbnN0IHVuc2lnbmVkIGludCBuKVxuNDcwNjpcdHtcbjQ3MDc6XHRcdERFQlVHX05FVF9XQVJOX09OX09OQ0UobGVuIFx1MDAzZSBJTlRfTUFYKTtcbjQ3MDg6XHRcdHNrYl9kYXRhX21vdmUoc2tiLCAtbGVuLCBuKTtcbjQ3MDk6XHR9XG40NzEwOlx0XG40NzExOlx0c3RydWN0IHNrX2J1ZmYgKnNrYl9jbG9uZV9zayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbjQ3MTI6XHRcbjQ3MTM6XHQjaWZkZWYgQ09ORklHX05FVFdPUktfUEhZX1RJTUVTVEFNUElOR1xuNDcxNDpcdFxuNDcxNTpcdHZvaWQgc2tiX2Nsb25lX3R4X3RpbWVzdGFtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbjQ3MTY6XHRib29sIHNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG40NzE3Olx0XG40NzE4Olx0I2Vsc2UgLyogQ09ORklHX05FVFdPUktfUEhZX1RJTUVTVEFNUElORyAqL1xuNDcxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA2OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byBgc2tiX2RhdGFfbW92ZWAqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgc2tiX2RhdGFfbW92ZWAgYW5kIEkgd2FudCB0byB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0IGl0JiMzOTtzIGRvaW5nLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIHNvdXJjZS4gTGV0IG1lIHB1bGwgdXAgYGluY2x1ZGUvbGludXgvc2tidWZmLmhgIGFuZCBzY2FuIGxpbmVzIDQ2NTAgdG8gNDY4Ni4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZXNlIGNvcmUgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgaGF2ZSBrZXkgaW5saW5lIGRvY3VtZW50YXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBjcnVjaWFsIGJpdHMgb2YgaW5mb3JtYXRpb246IGRvZXMgaXQgc2ltcGx5IG1vdmUgdGhlIGRhdGEgcG9pbnRlcj8gSXMgdGhlcmUgYW55IG1lbW9yeSBhbGxvY2F0aW9uIG9yIGZyZWVpbmcgaW52b2x2ZWQ/IERvZXMgaXQgY29uc2lkZXIgdGhlIHBhY2tldCYjMzk7cyBtZXRhZGF0YSBhbmQgY29udHJvbCB0aGUgYnVmZmVyJiMzOTtzIHJlZmVyZW5jZSBjb3VudD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gZnJvbSBhIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBwZXJzcGVjdGl2ZS4gVGhpcyByZXF1aXJlcyBhIHRob3JvdWdoIGFuYWx5c2lzIG9mIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBgc2tiYCBzdHJ1Y3R1cmUuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW1wbGljYXRpb25zIGZvciBhbnkgb3RoZXIgcHJvY2Vzc2VzIHVzaW5nIHRoaXMgYHNrYmAuIEFscmlnaHQsIGxldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ2NTA6XHQgKi9cbjQ2NTE6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2RhdGFfbW92ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBpbnQgbGVuLFxuNDY1MjpcdFx0XHRcdFx0IGNvbnN0IHVuc2lnbmVkIGludCBuKVxuNDY1MzpcdHtcbjQ2NTQ6XHRcdGNvbnN0IHU4IG1ldGFfbGVuID0gc2tiX21ldGFkYXRhX2xlbihza2IpO1xuNDY1NTpcdFx0dTggKm1ldGEsICptZXRhX2VuZDtcbjQ2NTY6XHRcbjQ2NTc6XHRcdGlmICghbGVuIHx8ICghbiBcdTAwMjZcdTAwMjYgIW1ldGFfbGVuKSlcbjQ2NTg6XHRcdFx0cmV0dXJuO1xuNDY1OTpcdFxuNDY2MDpcdFx0aWYgKCFtZXRhX2xlbilcbjQ2NjE6XHRcdFx0Z290byBub19tZXRhZGF0YTtcbjQ2NjI6XHRcbjQ2NjM6XHRcdG1ldGFfZW5kID0gc2tiX21ldGFkYXRhX2VuZChza2IpO1xuNDY2NDpcdFx0bWV0YSA9IG1ldGFfZW5kIC0gbWV0YV9sZW47XG40NjY1Olx0XG40NjY2Olx0XHRpZiAoV0FSTl9PTl9PTkNFKG1ldGFfZW5kICYjNDM7IGxlbiAhPSBza2ItXHUwMDNlZGF0YSB8fFxuNDY2NzpcdFx0XHRcdCBtZXRhX2xlbiBcdTAwM2Ugc2tiX2hlYWRyb29tKHNrYikpKSB7XG40NjY4Olx0XHRcdHNrYl9tZXRhZGF0YV9jbGVhcihza2IpO1xuNDY2OTpcdFx0XHRnb3RvIG5vX21ldGFkYXRhO1xuNDY3MDpcdFx0fVxuNDY3MTpcdFxuNDY3MjpcdFx0bWVtbW92ZShtZXRhICYjNDM7IGxlbiwgbWV0YSwgbWV0YV9sZW4gJiM0Mzsgbik7XG40NjczOlx0XHRyZXR1cm47XG40Njc0Olx0XG40Njc1Olx0bm9fbWV0YWRhdGE6XG40Njc2Olx0XHRtZW1tb3ZlKHNrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlZGF0YSAtIGxlbiwgbik7XG40Njc3Olx0fVxuNDY3ODpcdFxuNDY3OTpcdC8qKlxuNDY4MDpcdCAqIHNrYl9wb3N0cHVsbF9kYXRhX21vdmUgLSBNb3ZlIHBhY2tldCBkYXRhIGFuZCBtZXRhZGF0YSBhZnRlciBza2JfcHVsbCgpLlxuNDY4MTpcdCAqIEBza2I6IHBhY2tldCB0byBvcGVyYXRlIG9uXG40NjgyOlx0ICogQGxlbjogbnVtYmVyIG9mIGJ5dGVzIHB1bGxlZCBmcm9tIFx1MDAyNnNrX2J1ZmYtXHUwMDNlZGF0YVxuNDY4MzpcdCAqIEBuOiBudW1iZXIgb2YgYnl0ZXMgdG8gbWVtbW92ZSgpIGZyb20gcHJlLXB1bGwgXHUwMDI2c2tfYnVmZi1cdTAwM2VkYXRhXG40Njg0Olx0ICpcbjQ2ODU6XHQgKiBTZWUgc2tiX2RhdGFfbW92ZSgpIGZvciBkZXRhaWxzLlxuNDY4NjpcdCAqL1xuNDY4NzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBza2JfcG9zdHB1bGxfZGF0YV9tb3ZlKHN0cnVjdCBza19idWZmICpza2IsXG40Njg4Olx0XHRcdFx0XHRcdCAgY29uc3QgdW5zaWduZWQgaW50IGxlbixcbjQ2ODk6XHRcdFx0XHRcdFx0ICBjb25zdCB1bnNpZ25lZCBpbnQgbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NzEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNzQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzIGluIFZMQU4gSW5zZXJ0aW9uKioKCk9rYXksIHNvIGBza2JfZGF0YV9tb3ZlYCB1c2VzIGBtZW1tb3ZlYCwgYW5kIHRoaXMgY29kZSYjMzk7cyBhY2Nlc3NpbmcgYHNrYi0mZ3Q7ZGF0YSAmIzQzOyBtYWNfbGVuIC0gRVRIX0hMRU5gIHdoZW4gY29uc3RydWN0aW5nIHRoZSBWTEFOIGhlYWRlci4gSWYgYG1hY19sZW5gIGlzIGdyZWF0ZXIgdGhhbiBgc2tiX2hlYWRsZW4oc2tiKWAsIHdlJiMzOTtyZSBwb3RlbnRpYWxseSByZWFkaW5nIG9yIHdyaXRpbmcgb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSBsaW5lYXIgYnVmZmVyLCBwb3NzaWJseSBpbnRvIHRoZSB0YWlscm9vbSBvciBldmVuIGludG8gcGFnZWQgZGF0YSwgd2hpY2ggaXMgYW4gT09CIHJlYWQgb3Igd3JpdGUuIEtBU0FOIHNob3VsZCBjYXRjaCBvdXQtb2YtYm91bmRzIGFjY2VzcyBvbiBgc2tiLSZndDtoZWFkYCwgYnV0IGRvZXMgdGhpcyB0b3VjaCB1bmluaXRpYWxpemVkIG1lbW9yeSBzcGVjaWZpY2FsbHk/CgpMZXQmIzM5O3MgbG9vayBhdCB0aGUgcHJvdmlkZWQgY29kZSBhZ2FpbjogaXQgaW50cm9kdWNlcyBhIGNoZWNrIHVzaW5nIGBwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbilgLiAgRG9lcyB0aGlzIGFkZGl0aW9uIGZpeCBvciBwb3RlbnRpYWxseSBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyAgYHBza2JfbWF5X3B1bGwoc2tiLCBsZW4pYCBjaGVja3MgaWYgYGxlbmAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBza2JfaGVhZGxlbihza2IpYC4gSWYgbm90LCBpdCBjYWxscyBgX19wc2tiX3B1bGxfdGFpbGAuIElmIHRoZSB0b3RhbCBTS0IgbGVuZ3RoIGlzIGxlc3MgdGhhbiBgbGVuYCwgYHBza2JfbWF5X3B1bGxgIHJldHVybnMgMC4gTm93LCBpZiB0aGUgcGF0Y2ggY29uZGl0aW9uIGAhcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pYCBpcyB0cnVlLCBpdCByZXR1cm5zIGAtRUlOVkFMYC4KCkJlZm9yZSB0aGUgcGF0Y2gsIGlmIHRoZSBTS0IgZGlkbiYjMzk7dCBoYXZlIGVub3VnaCBsaW5lYXIgYnl0ZXMgKG9yIHdhcyBzaG9ydGVyIHRoYW4gYG1hY19sZW5gKSwgdGhlIGNvZGUgd291bGQgcHJvY2VlZCB0byBgc2tiX2Nvd19oZWFkYCBhbmQgYHNrYl9wdXNoYCwgYnV0IGFsc28gYWNjZXNzIG1lbW9yeSBhdCBgc2tiLSZndDtkYXRhICYjNDM7IG1hY19sZW4gLSBFVEhfSExFTmAgb3IgcGVyZm9ybSBgbWVtbW92ZWAgd2l0aCBgbWFjX2xlbiAtIEVUSF9UTEVOYC4gIElmIGBtYWNfbGVuYCBleGNlZWRzIGBza2ItJmd0O2xlbmAsIGNvdWxkIHRoaXMgb3BlcmF0aW9uIHBvdGVudGlhbGx5IHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnk/CgpZZXMsIGlmIGBtYWNfbGVuICZndDsgc2tiLSZndDtsZW5gIG9yIGBtYWNfbGVuICZndDsgc2tiX2hlYWRsZW4oc2tiKWAuIFRoZSBgc2tiLSZndDtkYXRhYCBwb2ludHMgdG8gdGhlIHBhY2tldCBkYXRhIGluIHRoZSBhbGxvY2F0ZWQgaGVhZCBidWZmZXIgKGVpdGhlciBrbWFsbG9jJiMzOTtkIG9yIHBhZ2UgYWxsb2NhdGVkKS4gVGhlIG1lbW9yeSBiZXlvbmQgYHNrYi0mZ3Q7dGFpbGAgd2l0aGluIHRoaXMgYWxsb2NhdGlvbiAodGFpbHJvb20pIGlzICp1bmluaXRpYWxpemVkKi4gIFdhaXQsIGlzIHRhaWxyb29tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBJZiB0aGUgY29kZSByZWFkcyBwYXN0IGBza2ItJmd0O3RhaWxgIHdpdGhpbiB0aGUgc2xhYiBhbGxvY2F0aW9uLCBvciBwYXN0IHRoZSBlbmQgb2YgdGhlIHNsYWIsIHRoZW4gS0FTQU4gY2F0Y2hlcyBpdCB3aXRoIGEgc2xhYi1vdXQtb2YtYm91bmRzIG9yIGdsb2JhbC1vdXQtb2YtYm91bmRzIHJlYWQgZXJyb3IuCgpPa2F5LCBLQVNBTiB0cmFja3MgYGttYWxsb2NgIG9iamVjdHMuICBgc2tiLSZndDt0YWlsYCBpcyBhIGxvZ2ljYWwgbWFya2VyIHdpdGhpbiB0aGUgc2tiIGRhdGEgYnVmZmVyIChgc2tiLSZndDtoZWFkYCB0byBgc2tiLSZndDtlbmRgKS4gRG9lcyBLQVNBTiBvciBLTVNBTiBjYXRjaCByZWFkcyB3aXRoaW4gdGhlIFNLQiB0YWlscm9vbT8gV2FpdC4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGhhbmRsZSB0aGUgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuCgpXYWl0LCB0aGUgcHJvbXB0IGRpZmZlcmVudGlhdGVzIEtBU0FOIGFuZCBLTVNBTi4gIFN0YW5kYXJkIEtBU0FOIGFscmVhZHkgaGFzIGNvbXByZWhlbnNpdmUgZGVidWdnaW5nIHRvb2xzLiBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mICp1bmluaXRpYWxpemVkKiBtZW1vcnkuIFRoZSBwcm9tcHQgc3RhdGVzIHRvIG9ubHkgdXNlIEtNU0FOIGlmIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugcmlza3MgKm9ubHkqIGRldGVjdGVkIGJ5IEtNU0FOLiAgVGhpcyBpcyBpbXBvcnRhbnQuIEtNU0FOIGlzIGV4cGVuc2l2ZSwgYW5kIHNob3VsZCBiZSB0aGUgbGFzdCByZXNvcnQuCgpUaGUgcnVsZTogT25seSBzZXQgYE5lZWRzS01TQU49dHJ1ZWAgaWYgdGhlIHBhdGNoIG1vZGlmaWVzIGtlcm5lbCBkYXRhIHNlbnQgdG8gdXNlciBzcGFjZSwgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaW52b2x2ZXMgYWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBhbHRlcnMgYm91bmRzIGNoZWNraW5nIGluIHdheXMgdGhhdCBhbGxvd3MgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4gIFdlICpkb24mIzM5O3QqIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgaWYgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgKEtBU0FOIGNhdGNoZXMgdGhlc2UpIG9yIGlmIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLgoKTGV0JiMzOTtzIGZvY3VzIG9uIHdoYXQgdGhlIHBhdGNoIGRvZXMsIGFnYWluLiBUaGUgcGF0Y2ggYWRkcyBgaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbikpIHJldHVybiAtRUlOVkFMO2AuIFRoaXMgaXMgYSBzdGFuZGFyZCBib3VuZHMgY2hlY2suIFdoeSB3YXMgdGhpcyBhZGRlZD8gSXQmIzM5O3MgbGlrZWx5IGEgc2FuaXR5IGNoZWNrLCBhIHNhZmV0eSBjaGVjayB0byBhdm9pZCBPT0IgcmVhZHMuICBJIG5lZWQgdG8gZmluZCB0aGUgdXBzdHJlYW0gY29tbWl0L2ZpeC9jb250ZXh0LiAgSSBjYW4mIzM5O3QgcnVuIGBnaXQgbG9nYCwgb25seSBgZ3JlcHBlcmAuCgpJIG5lZWQgdG8gc2VlIGlmIGBwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbilgIGlzIHVzZWQgZWxzZXdoZXJlLiBJcyB0aGVyZSBjb250ZXh0IGF2YWlsYWJsZSB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgb2YgdGhlIGNoZWNrPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwc2tiX21heV9wdWxsXFwoc2tiLCAuKm1hY19sZW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pZl92bGFuLmg9MzYxPXN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzY3LVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6MzY4Olx0aWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbikpKVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzY5LVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3ODAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIGEgVkxBTiBJbnNlcnRpb24gSXNzdWUqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCB0aGlzIGNvbW1pdC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3Mgam9nIG15IG1lbW9yeSDigJMgd2hhdCB3YXMgdGhlIGNvbW1pdCBkaXJlY3RseSBiZWZvcmUgdGhpcyBvbmU/IEdvdCBpdC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgd2hlcmUgaXMgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCBhY3R1YWxseSBiZWluZyAqdXNlZCo/IFRpbWUgdG8gdHJhY2UgdGhhdCBmdW5jdGlvbi4gQWgsIEkgc2VlIGEgdXNhZ2UgaW4gYG5ldC9zY2hlZC9hY3RfbXBscy5jYC4gTGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGZpbGUuCgpIb2xkIG9u4oCmIHNvbWV0aGluZyYjMzk7cyBjYXRjaGluZyBteSBleWUuIFRoZXJlIGl0IGlzISBMaW5lcyA4MCB0byAxMTAgb2YgYG5ldC9zY2hlZC9hY3RfbXBscy5jYCBhcmUgd2hlcmUgdGhlIGFjdGlvbiBpcyBoYXBwZW5pbmcuIFNwZWNpZmljYWxseSwgd2l0aGluIHRoZSBgdGNmX21wbHNfYWN0YCBmdW5jdGlvbi4gVGhleSYjMzk7cmUgY2hlY2tpbmcgaWYgYSBWTEFOIHRhZyBpcyBwcmVzZW50IG9uIHRoZSBgc2tiYC4gSWYgc28sIHRoZXkmIzM5O3JlIGF0dGVtcHRpbmcgdG8gaW5zZXJ0IGFuICppbm5lciogVkxBTiB0YWcgdXNpbmcgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBpbnNlcnRpb24sIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgTVBMUyBwcm9jZXNzaW5nIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIHRhZ3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIHRoaXMgY2FsbCBpcyBoYXBwZW5pbmcgaGVyZSwgYW5kIHdoYXQgdGhlIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzIGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X21wbHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRcdFx0XHRcdCBza2ItXHUwMDNlZGV2IFx1MDAyNlx1MDAyNiBza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSKSlcbiAgODE6XHRcdFx0XHRnb3RvIGRyb3A7XG4gIDgyOlx0XHRcdGJyZWFrO1xuICA4MzpcdFx0Y2FzZSBUQ0FfTVBMU19BQ1RfUFVTSDpcbiAgODQ6XHRcdFx0bmV3X2xzZSA9IHRjZl9tcGxzX2dldF9sc2UoTlVMTCwgcCwgIWV0aF9wX21wbHMoc2tiX3Byb3RvY29sKHNrYiwgdHJ1ZSkpKTtcbiAgODU6XHRcdFx0aWYgKHNrYl9tcGxzX3B1c2goc2tiLCBuZXdfbHNlLCBwLVx1MDAzZXRjZm1fcHJvdG8sIG1hY19sZW4sXG4gIDg2Olx0XHRcdFx0XHQgIHNrYi1cdTAwM2VkZXYgXHUwMDI2XHUwMDI2IHNrYi1cdTAwM2VkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIpKVxuICA4NzpcdFx0XHRcdGdvdG8gZHJvcDtcbiAgODg6XHRcdFx0YnJlYWs7XG4gIDg5Olx0XHRjYXNlIFRDQV9NUExTX0FDVF9NQUNfUFVTSDpcbiAgOTA6XHRcdFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHtcbiAgOTE6XHRcdFx0XHRpZiAoX192bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCBza2ItXHUwMDNldmxhbl9wcm90byxcbiAgOTI6XHRcdFx0XHRcdFx0XHQgICAgc2tiX3ZsYW5fdGFnX2dldChza2IpLFxuICA5MzpcdFx0XHRcdFx0XHRcdCAgICBFVEhfSExFTikgXHUwMDNjIDApXG4gIDk0Olx0XHRcdFx0XHRnb3RvIGRyb3A7XG4gIDk1Olx0XG4gIDk2Olx0XHRcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gc2tiLVx1MDAzZXZsYW5fcHJvdG87XG4gIDk3Olx0XHRcdFx0X192bGFuX2h3YWNjZWxfY2xlYXJfdGFnKHNrYik7XG4gIDk4Olx0XHRcdH1cbiAgOTk6XHRcbiAxMDA6XHRcdFx0bmV3X2xzZSA9IHRjZl9tcGxzX2dldF9sc2UoTlVMTCwgcCwgbWFjX2xlbiB8fFxuIDEwMTpcdFx0XHRcdFx0XHQgICAhZXRoX3BfbXBscyhza2ItXHUwMDNlcHJvdG9jb2wpKTtcbiAxMDI6XHRcbiAxMDM6XHRcdFx0aWYgKHNrYl9tcGxzX3B1c2goc2tiLCBuZXdfbHNlLCBwLVx1MDAzZXRjZm1fcHJvdG8sIDAsIGZhbHNlKSlcbiAxMDQ6XHRcdFx0XHRnb3RvIGRyb3A7XG4gMTA1Olx0XHRcdGJyZWFrO1xuIDEwNjpcdFx0Y2FzZSBUQ0FfTVBMU19BQ1RfTU9ESUZZOlxuIDEwNzpcdFx0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLFxuIDEwODpcdFx0XHRcdFx0ICAgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikgJiM0MzsgTVBMU19ITEVOKSlcbiAxMDk6XHRcdFx0XHRnb3RvIGRyb3A7XG4gMTEwOlx0XHRcdG5ld19sc2UgPSB0Y2ZfbXBsc19nZXRfbHNlKG1wbHNfaGRyKHNrYiksIHAsIGZhbHNlKTtcbiAxMTE6XHRcdFx0aWYgKHNrYl9tcGxzX3VwZGF0ZV9sc2Uoc2tiLCBuZXdfbHNlKSlcbiAxMTI6XHRcdFx0XHRnb3RvIGRyb3A7XG4gMTEzOlx0XHRcdGJyZWFrO1xuIDExNDpcdFx0Y2FzZSBUQ0FfTVBMU19BQ1RfREVDX1RUTDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5MzYKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFZMQU4gQ29yZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBWTEFOIGNvcmUgZnVuY3Rpb25hbGl0eSwgc28gbGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgbmV0LzgwMjFxL3ZsYW5fY29yZS5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gemVybyBpbiBvbiBsaW5lcyA0MCB0aHJvdWdoIDY1LiBUaGF0IHNob3VsZCBiZSBhIGdvb2QgY2h1bmsgb2YgY29kZSB0byByZWZyZXNoLiBIb3BlZnVsbHksIHRoYXQgd2lsbCBjb250YWluIHRoZSBzZWN0aW9uIEkgbmVlZCBvbiBob3cgdGhpbmdzIGFyZSBoYW5kbGVkLiBUaW1lIHRvIG9wZW4gdGhlIGZpbGUgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJIGV4cGVjdCBpdCB0byBpbmNsdWRlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbiBjYWxscyByZWxhdGVkIHRvIFZMQU4gdGFnZ2luZyBhbmQgdW50YWdnaW5nLCBvciBhdCBsZWFzdCBob3cgdGhlIFZMQU4gY29yZSBoYW5kbGVzIHRoZSBpbnNlcnRpb24gYW5kIHJlbW92YWwgb2YgdGhlIDgwMi4xUSB0YWcuIExldCYjMzk7cyBzZWUgaWYgbXkgbWVudGFsIG1vZGVsIGxpbmVzIHVwIHdpdGggdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0LzgwMjFxL3ZsYW5fY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MDpcdFxuICA0MTpcdFx0aWYgKCEodmxhbl9kZXZfcHJpdih2bGFuX2RldiktXHUwMDNlZmxhZ3MgXHUwMDI2IFZMQU5fRkxBR19SRU9SREVSX0hEUikgXHUwMDI2XHUwMDI2XG4gIDQyOlx0XHQgICAgIW5ldGlmX2lzX21hY3ZsYW5fcG9ydCh2bGFuX2RldikgXHUwMDI2XHUwMDI2XG4gIDQzOlx0XHQgICAgIW5ldGlmX2lzX2JyaWRnZV9wb3J0KHZsYW5fZGV2KSkge1xuICA0NDpcdFx0XHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gc2tiLVx1MDAzZWRhdGEgLSBza2JfbWFjX2hlYWRlcihza2IpO1xuICA0NTpcdFxuICA0NjpcdFx0XHQvKlxuICA0NzpcdFx0XHQgKiB2bGFuX2luc2VydF90YWcgZXhwZWN0IHNrYi1cdTAwM2VkYXRhIHBvaW50aW5nIHRvIG1hYyBoZWFkZXIuXG4gIDQ4Olx0XHRcdCAqIFNvIGNoYW5nZSBza2ItXHUwMDNlZGF0YSBiZWZvcmUgY2FsbGluZyBpdCBhbmQgY2hhbmdlIGJhY2sgdG9cbiAgNDk6XHRcdFx0ICogb3JpZ2luYWwgcG9zaXRpb24gbGF0ZXJcbiAgNTA6XHRcdFx0ICovXG4gIDUxOlx0XHRcdHNrYl9wdXNoKHNrYiwgb2Zmc2V0KTtcbiAgNTI6XHRcdFx0c2tiID0gKnNrYnAgPSB2bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCBza2ItXHUwMDNldmxhbl9wcm90byxcbiAgNTM6XHRcdFx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZXZsYW5fdGNpLCBza2ItXHUwMDNlbWFjX2xlbik7XG4gIDU0Olx0XHRcdGlmICghc2tiKVxuICA1NTpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiAgNTY6XHRcdFx0c2tiX3B1bGwoc2tiLCBvZmZzZXQgJiM0MzsgVkxBTl9ITEVOKTtcbiAgNTc6XHRcdFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcbiAgNTg6XHRcdH1cbiAgNTk6XHRcbiAgNjA6XHRcdHNrYi1cdTAwM2Vwcmlvcml0eSA9IHZsYW5fZ2V0X2luZ3Jlc3NfcHJpb3JpdHkodmxhbl9kZXYsIHNrYi1cdTAwM2V2bGFuX3RjaSk7XG4gIDYxOlx0XHRfX3ZsYW5faHdhY2NlbF9jbGVhcl90YWcoc2tiKTtcbiAgNjI6XHRcbiAgNjM6XHRcdHJ4X3N0YXRzID0gdGhpc19jcHVfcHRyKHZsYW5fZGV2X3ByaXYodmxhbl9kZXYpLVx1MDAzZXZsYW5fcGNwdV9zdGF0cyk7XG4gIDY0Olx0XG4gIDY1Olx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJ4X3N0YXRzLVx1MDAzZXN5bmNwKTtcbiAgNjY6XHRcdHU2NF9zdGF0c19pbmMoXHUwMDI2cnhfc3RhdHMtXHUwMDNlcnhfcGFja2V0cyk7XG4gIDY3Olx0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNnJ4X3N0YXRzLVx1MDAzZXJ4X2J5dGVzLCBza2ItXHUwMDNlbGVuKTtcbiAgNjg6XHRcdGlmIChza2ItXHUwMDNlcGt0X3R5cGUgPT0gUEFDS0VUX01VTFRJQ0FTVClcbiAgNjk6XHRcdFx0dTY0X3N0YXRzX2luYyhcdTAwMjZyeF9zdGF0cy1cdTAwM2VyeF9tdWx0aWNhc3QpO1xuICA3MDpcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cnhfc3RhdHMtXHUwMDNlc3luY3ApO1xuICA3MTpcdFxuICA3MjpcdFx0cmV0dXJuIHRydWU7XG4gIDczOlx0fVxuICA3NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgwMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWTEFOIFRhZyBJbnNlcnRpb24gTG9naWMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgZnVuY3Rpb24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0JiMzOTtzIHN1cHBvc2VkIHRvIGRvLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBpbnNlcnRpbmcgYSBWTEFOIHRhZyBpbnRvIGFuIGBza19idWZmYC4gIE9rYXksIGdvdCBpdC4gSXQgdGFrZXMgYW4gYHNrX2J1ZmZgLCB0aGUgVkxBTiBwcm90b2NvbCBhbmQgVENJLCBhbmQgdGhlIE1BQyBoZWFkZXIgbGVuZ3RoIGFzIGlucHV0LgoKTm93LCB0aGF0IGBwc2tiX21heV9wdWxsYCBjYWxsLi4uIEkga25vdyB0aGF0IGZ1bmN0aW9uLiAgSXTigJlzIGEgY3J1Y2lhbCBzYWZldHkgY2hlY2suIEl0IHZlcmlmaWVzIGlmIHRoZSBgc2tfYnVmZmAgaGFzIGVub3VnaCBjb250aWd1b3VzIGRhdGEgdG8gYWNjb21tb2RhdGUgYG1hY19sZW5gLiAgSWYgbm90LCBpdCBhdHRlbXB0cyB0byBwdWxsIHRoZSBuZWNlc3NhcnkgZGF0YSwgd2hpY2ggY291bGQgaW52b2x2ZSByZWFzc2VtYmxpbmcgZnJhZ21lbnRzLiBCdXQsIGlmIGBwc2tiX21heV9wdWxsYCByZXR1cm5zIGBmYWxzZWAsIHdoaWNoIGhhcHBlbnMgd2hlbiBgc2tiLSZndDtsZW4gJmx0OyBtYWNfbGVuYCBvciBgc2tiX2hlYWRsZW4oc2tiKSAmbHQ7IG1hY19sZW5gLCB0aGVuIHRoZXJlJiMzOTtzIGFuIGlzc3VlLiBJdCBtZWFucyB0aGUgYHNrYmAgZG9lc24mIzM5O3QgY29udGFpbiBlbm91Z2ggZGF0YSwgc28gYG1hY19sZW5gIGJ5dGVzIGFyZSBub3QgZ3VhcmFudGVlZCB0byBiZSBwcmVzZW50LgoKVGhlIHN1YnNlcXVlbnQgYHNrYl9wdXNoYCBhbmQgYHNrYl9wb3N0cHVzaF9kYXRhX21vdmVgIGNhbGxzIHdvcnJ5IG1lLiBJZiBgcHNrYl9tYXlfcHVsbGAgZmFpbGVkLCB0aGVuIHRoZXNlIG9wZXJhdGlvbnMgY291bGQgdHJ5IHRvIGFjY2VzcyBkYXRhICpiZXlvbmQqIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLiBgbWVtbW92ZWAgd2l0aCBgbWFjX2xlbiAtIEVUSF9UTEVOYCBjb3VsZCBjYXVzZSBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcy4gIEFuZCwgdGhlIGFzc2lnbm1lbnQgdG8gYHZldGhgIHdvdWxkIGxlYWQgdG8gd3JpdGluZyBvdXQgb2YgdGhlIGJvdW5kcyBvZiB0aGUgc2tiIGRhdGEgYnVmZmVyIG9yIGJleW9uZCBgc2tiLSZndDt0YWlsYC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgaGVhcCBidWZmZXIgb3ZlcmZsb3csIGEgS0FTQU4gY2F0Y2ghCgpTbywgdGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgdnVsbmVyYWJpbGl0eS4gVGhlIGFic2VuY2Ugb2YgdGhlIGBwc2tiX21heV9wdWxsYCBjaGVjayBtZWFucyB3cml0ZXMgdG8gYHZldGhgIGNvdWxkIGJlIG91dCBvZiBib3VuZHMsIGRlcGVuZGluZyBvbiB0aGUgbGVuZ3RoIG9mIGBza2JgLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQmIzM5O3MgcnVuIGRvd24gdGhlIGNoZWNrbGlzdC4KMS4gIE5vdGhpbmcgaXMgc2VudCB0byB1c2Vyc3BhY2UuIEdvb2QuCjIuICBgbWFjX2xlbmAgaXMgYSBmdW5jdGlvbiBhcmd1bWVudCwgaW5pdGlhbGl6ZWQuIGBza2JgIGlzIGFuIGluaXRpYWxpemVkIGBza19idWZmYC4KMy4gIE5vIG5ldyBzdHJ1Y3R1cmVzIG9yIGFsbG9jYXRpb25zLgo0LiAgQnV0Li4ud2FpdC4gRG9lcyB0aGUgY2hlY2sgKmludHJvZHVjZSogYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaz8gTm8sIHRoZSBuZXcgYHBza2JfbWF5X3B1bGxgIGNoZWNrIHByZXZlbnRzIGdvaW5nIGJleW9uZCB0aGUgYG1hY19sZW5gLiBJdCBlbnN1cmVzIGBsZW5gIGJ5dGVzIG9mIHRoZSBza2IgYXJlIGluIHRoZSBjb250aWd1b3VzIGhlYWQgYnVmZmVyIChgc2tiLSZndDtkYXRhYCB0byBgc2tiLSZndDtkYXRhICYjNDM7IGxlbmApLiBJdCYjMzk7cyBwcmV2ZW50aW5nIGlzc3VlcyEKCk9rYXksIHNvIEkgbmVlZCB0byBjaGVjayB0aGUgY2FzZXMgd2hlcmUgYC1FSU5WQUxgIGlzIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24sIHRvIGVuc3VyZSB0aGUgKmNhbGxlcnMqIGRvbiYjMzk7dCB1c2UgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQmIzM5O3Mgc2VlIHdobyBjYWxscyBgX192bGFuX2luc2VydF9pbm5lcl90YWdgLiBBaGEsIGBfX3ZsYW5faW5zZXJ0X3RhZ2AuIExldCYjMzk7cyBjaGVjayB3aGVyZSB0aGF0IGlzIGNhbGxlZC4gSXQgbG9va3MgbGlrZSBgc2tiX3ZsYW5fcHVzaGAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gSSYjMzk7bGwgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIHRoYXQgZnVuY3Rpb24gdG8gY29uZmlybSBpdCBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgZXJyb3IgY29kZS4gSXQgc2hvdWxkIGJlIGdvb2QgYmVjYXVzZSBgcHNrYl9tYXlfcHVsbGAgaXMgYSBzYWZldHkgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY0OTA6XHR7XG42NDkxOlx0XHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkge1xuNjQ5MjpcdFx0XHRpbnQgb2Zmc2V0ID0gc2tiLVx1MDAzZWRhdGEgLSBza2JfbWFjX2hlYWRlcihza2IpO1xuNjQ5MzpcdFx0XHRpbnQgZXJyO1xuNjQ5NDpcdFxuNjQ5NTpcdFx0XHRpZiAoV0FSTl9PTkNFKG9mZnNldCxcbjY0OTY6XHRcdFx0XHQgICAgICBcJiMzNDtza2Jfdmxhbl9wdXNoIGdvdCBza2Igd2l0aCBza2ItXHUwMDNlZGF0YSBub3QgYXQgbWFjIGhlYWRlciAob2Zmc2V0ICVkKVxcblwmIzM0OyxcbjY0OTc6XHRcdFx0XHQgICAgICBvZmZzZXQpKSB7XG42NDk4Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG42NDk5Olx0XHRcdH1cbjY1MDA6XHRcbjY1MDE6XHRcdFx0ZXJyID0gX192bGFuX2luc2VydF90YWcoc2tiLCBza2ItXHUwMDNldmxhbl9wcm90byxcbjY1MDI6XHRcdFx0XHRcdFx0c2tiX3ZsYW5fdGFnX2dldChza2IpKTtcbjY1MDM6XHRcdFx0aWYgKGVycilcbjY1MDQ6XHRcdFx0XHRyZXR1cm4gZXJyO1xuNjUwNTpcdFxuNjUwNjpcdFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBza2ItXHUwMDNldmxhbl9wcm90bztcbjY1MDc6XHRcdFx0c2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyIC09IFZMQU5fSExFTjtcbjY1MDg6XHRcbjY1MDk6XHRcdFx0c2tiX3Bvc3RwdXNoX3Jjc3VtKHNrYiwgc2tiLVx1MDAzZWRhdGEgJiM0MzsgKDIgKiBFVEhfQUxFTiksIFZMQU5fSExFTik7XG42NTEwOlx0XHR9XG42NTExOlx0XHRfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgdmxhbl9wcm90bywgdmxhbl90Y2kpO1xuNjUxMjpcdFx0cmV0dXJuIDA7XG42NTEzOlx0fVxuNjUxNDpcdEVYUE9SVF9TWU1CT0woc2tiX3ZsYW5fcHVzaCk7XG42NTE1Olx0XG42NTE2Olx0LyoqXG42NTE3Olx0ICogc2tiX2V0aF9wb3AoKSAtIERyb3AgdGhlIEV0aGVybmV0IGhlYWRlciBhdCB0aGUgaGVhZCBvZiBhIHBhY2tldFxuNjUxODpcdCAqXG42NTE5Olx0ICogQHNrYjogU29ja2V0IGJ1ZmZlciB0byBtb2RpZnlcbjY1MjA6XHQgKlxuNjUyMTpcdCAqIERyb3AgdGhlIEV0aGVybmV0IGhlYWRlciBvZiBAc2tiLlxuNjUyMjpcdCAqXG42NTIzOlx0ICogRXhwZWN0cyB0aGF0IHNrYi1cdTAwM2VkYXRhIHBvaW50cyB0byB0aGUgbWFjIGhlYWRlciBhbmQgdGhhdCBubyBWTEFOIHRhZ3MgYXJlXG42NTI0Olx0ICogcHJlc2VudC5cbjY1MjU6XHQgKlxuNjUyNjpcdCAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtZXJybm8gb3RoZXJ3aXNlLlxuNjUyNzpcdCAqL1xuNjUyODpcdGludCBza2JfZXRoX3BvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuNjUyOTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2OTcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFZMQU4gVGFnZ2luZyBpbiBhIFNDU0kgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgVkxBTiB0YWdzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgU0NTSSBkZXZpY2VzLiBNeSBpbml0aWFsIHBvaW50IG9mIHJlZmVyZW5jZSBpcyB0aGUgYHNrYl92bGFuX3B1c2hgIGZ1bmN0aW9uLiBJZiB0aGVyZSYjMzk7cyBhbiBlcnJvciB0aGVyZSwgaXQganVzdCByZXR1cm5zIHRoZSBlcnJvciBjb2RlLCB3aGljaCBpcyBzdHJhaWdodGZvcndhcmQuIE5vdywgSSB3YW50IHRvIHNlZSBob3cgdGhpcyBpcyB1c2VkIGluIHByYWN0aWNlLiBJJiMzOTttIGZvY3VzaW5nIG9uIGBkcml2ZXJzL3Njc2kvcWVkaS9xZWRpX21haW4uY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSBgX192bGFuX2luc2VydF90YWdgIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCBoZXJlLCBhbmQgaG93IGl0IHVzZXMgdGhlIEV0aGVybmV0IHByb3RvY29sIGZvciBWTEFOcyAoRVRIX1BfODAyMVEpIGFuZCB0aGUgVkxBTiBJRCBpdHNlbGYuIE5vdywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGUgcmVjZWl2ZSBwYXRoLiBJIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byBgcWVkaV9sbDJfcnhgIGluIHRoZSBzYW1lIGZpbGUgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBmbG93LiBUaGlzIHNob3VsZCBzaG93IG1lIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgaW5jb21pbmcgZnJhbWVzIHdpdGggYW5kIHdpdGhvdXQgVkxBTiB0YWdzLCBhbmQgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgb3ZlcmFsbCBTQ1NJIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9xZWRpL3FlZGlfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MjA6XHRcdFx0d29yay1cdTAwM2V2bGFuX2lkID0gc2tiX3ZsYW5fdGFnX2dldChza2IpO1xuIDcyMTpcdFxuIDcyMjpcdFx0aWYgKHdvcmstXHUwMDNldmxhbl9pZClcbiA3MjM6XHRcdFx0X192bGFuX2luc2VydF90YWcod29yay1cdTAwM2Vza2IsIGh0b25zKEVUSF9QXzgwMjFRKSwgd29yay1cdTAwM2V2bGFuX2lkKTtcbiA3MjQ6XHRcbiA3MjU6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZxZWRpLVx1MDAzZWxsMl9sb2NrKTtcbiA3MjY6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2d29yay1cdTAwM2VsaXN0LCBcdTAwMjZxZWRpLVx1MDAzZWxsMl9za2JfbGlzdCk7XG4gNzI3Olx0XHRzcGluX3VubG9ja19iaChcdTAwMjZxZWRpLVx1MDAzZWxsMl9sb2NrKTtcbiA3Mjg6XHRcbiA3Mjk6XHRcdHdha2VfdXBfcHJvY2VzcyhxZWRpLVx1MDAzZWxsMl9yZWN2X3RocmVhZCk7XG4gNzMwOlx0XG4gNzMxOlx0XHRyZXR1cm4gMDtcbiA3MzI6XHR9XG4gNzMzOlx0XG4gNzM0Olx0LyogbWFwIHRoaXMgc2tiIHRvIGlzY3NpdWlvIG1tYXBlZCByZWdpb24gKi9cbiA3MzU6XHRzdGF0aWMgaW50IHFlZGlfbGwyX3Byb2Nlc3Nfc2tiKHN0cnVjdCBxZWRpX2N0eCAqcWVkaSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA3MzY6XHRcdFx0XHRcdHUxNiB2bGFuX2lkKVxuIDczNzpcdHtcbiA3Mzg6XHRcdHN0cnVjdCBxZWRpX3Vpb19kZXYgKnVkZXYgPSBOVUxMO1xuIDczOTpcdFx0c3RydWN0IHFlZGlfdWlvX2N0cmwgKnVjdHJsID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0MzIKCQkJCQkJCW91dHB1dDogMTc0CgkJCQkJCQl0aG91Z2h0czogODEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFZMQU4gVGFnIEluc2VydGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGNhcmVmdWxseSByZXZpZXdpbmcgdGhpcyBwYXRjaCwgZm9jdXNpbmcgb24gaXRzIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IHNhZmV0eS4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBpdCBhZGRzIGEgc2FmZXR5IGNoZWNrLCBgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pYCwgdG8gYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC4gVGhpcyBjaGVjayBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgZW5zdXJlcyB0aGF0IHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgYWN0dWFsbHkgKmhhcyogZW5vdWdoIGRhdGEgdG8gYWNjb21tb2RhdGUgdGhlIFZMQU4gdGFnIGluc2VydGlvbiwgc3BlY2lmaWNhbGx5IGVuc3VyaW5nIHRoZXJlIGFyZSBhdCBsZWFzdCBgbWFjX2xlbmAgYnl0ZXMgYXZhaWxhYmxlLgoKV2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgY29kZSB3YXMgdnVsbmVyYWJsZSB0byBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCB3cml0ZXMsIHBvdGVudGlhbGx5IGNvcnJ1cHRpbmcgbWVtb3J5IOKAkyBhIGNsYXNzaWMgaGVhcCBvciBzbGFiIG91dC1vZi1ib3VuZHMgdnVsbmVyYWJpbGl0eS4gIFRoaXMgaXMgYSBzaWduaWZpY2FudCBwcm9ibGVtIHRoYXQgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNBTml0aXplcikgaXMgZGVzaWduZWQgdG8gY2F0Y2guICBJdCYjMzk7cyB0aGUgcHJpbWFyeSByZWFzb24gZm9yIHRoaXMgcGF0Y2guCgpUaGUgaW1wb3J0YW50IHBvaW50IGlzIHRoYXQgdGhpcyBwYXRjaCBvbmx5IGFkZHJlc3NlcyAqZXhpc3RpbmcqIG1lbW9yeSBzYWZldHkgaXNzdWVzLiBJdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBkb2VzbiYjMzk7dCBpbnZvbHZlIGFueSBjaGFuZ2VzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyByZWFkLCBvciBzdHJ1Y3R1cmUgZmllbGRzIGVuZGluZyB1cCB1bmluaXRpYWxpemVkIGFuZCBsZWFrZWQgdG8gdXNlcnNwYWNlLiBJJiMzOTt2ZSBzcGVjaWZpY2FsbHkgY2hlY2tlZCBmb3IgdGhvc2Ugc2NlbmFyaW9zLgoKVGhlIHBhdGNoJiMzOTtzIGxvZ2ljIGlzIGNsZWFyOiBpZiBgcHNrYl9tYXlfcHVsbGAgZmFpbHMgKG1lYW5pbmcgbm90IGVub3VnaCBkYXRhKSwgaXQgcmV0dXJucyBgLUVJTlZBTGAuICBUaGUgY2FsbGVycyBvZiBgdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCBoYW5kbGUgdGhpcyBlcnJvciBieSBkcm9wcGluZyB0aGUgYHNrYmAsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IGJlaGF2aW9yLiAgVGhlcmUmIzM5O3Mgbm8gcGF0aCB3aGVyZSB3ZSBlbmQgdXAgbGVha2luZyB1bmluaXRpYWxpemVkIGRhdGEgb3IgcmV0dXJuaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBgcHNrYl9tYXlfcHVsbGAgaXMgZGVzaWduZWQgdG8gcHVsbCAqZXhpc3RpbmcqIGJ5dGVzIGludG8gdGhlIGxpbmVhciBidWZmZXIsIG5vdCBjcmVhdGUgbmV3IHVuaW5pdGlhbGl6ZWQgb25lcy4gQWxzbywgSSBoYXZlIHZlcmlmaWVkIHRoYXQgc3RydWN0dXJlcyB3cml0dGVuIHRvIGFyZSBhbHdheXMgZG9uZSBzbyBhZnRlciBgcHNrYl9tYXlfcHVsbGAgc3VjY2VlZHMsIGVuc3VyaW5nIGluaXRpYWxpemF0aW9uLgoKU28sIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBLTVNBTiAoS2VybmVsIE1lbW9yeSBTQU5pdGl6ZXIpIGNvbmNlcm5zLiBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCB0byBkZXRlY3QgdGhlIHR5cGVzIG9mIHZ1bG5lcmFiaWxpdGllcyB0aGlzIHBhdGNoIGFkZHJlc3Nlcy4gVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzOiBgTmVlZHNLTVNBTjogZmFsc2VgLiBJJiMzOTttIHJlYWR5IHRvIGNvbW1pdCB0aGlzLCBiZWNhdXNlIHRoZSBjb3JlIHByb2JsZW0gdGhpcyBwYXRjaCBhZGRyZXNzZXMgaXMgZGVmaW5pdGVseSBhIEtBU0FOIGlzc3VlLiBJJiMzOTttIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgdXNpbmcgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pIGluIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKCkgdG8gZW5zdXJlIHRoYXQgdGhlIHBhY2tldCBidWZmZXIgY29udGFpbnMgYXQgbGVhc3QgbWFjX2xlbiBsaW5lYXIgYnl0ZXMgYmVmb3JlIHBlcmZvcm1pbmcgaGVhZGVyIG1hbmlwdWxhdGlvbnMgKHNrYl9wb3N0cHVzaF9kYXRhX21vdmUgYW5kIHdyaXRpbmcgdmxhbl9ldGhoZHIpLiBXaXRob3V0IHRoaXMgY2hlY2ssIHBhY2tldHMgc2hvcnRlciB0aGFuIG1hY19sZW4gb3Igbm9uLWxpbmVhciBidWZmZXJzIGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBoZWFwIGFjY2Vzc2VzIChPT0IgcmVhZC93cml0ZSksIHdoaWNoIGFyZSBkaXJlY3RseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayB1c2luZyBwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbikgaW4gX192bGFuX2luc2VydF9pbm5lcl90YWcoKSB0byBlbnN1cmUgdGhhdCB0aGUgcGFja2V0IGJ1ZmZlciBjb250YWlucyBhdCBsZWFzdCBtYWNfbGVuIGxpbmVhciBieXRlcyBiZWZvcmUgcGVyZm9ybWluZyBoZWFkZXIgbWFuaXB1bGF0aW9ucyAoc2tiX3Bvc3RwdXNoX2RhdGFfbW92ZSBhbmQgd3JpdGluZyB2bGFuX2V0aGhkcikuIFdpdGhvdXQgdGhpcyBjaGVjaywgcGFja2V0cyBzaG9ydGVyIHRoYW4gbWFjX2xlbiBvciBub24tbGluZWFyIGJ1ZmZlcnMgY291bGQgbGVhZCB0byBvdXQtb2YtYm91bmRzIGhlYXAgYWNjZXNzZXMgKE9PQiByZWFkL3dyaXRlKSwgd2hpY2ggYXJlIGRpcmVjdGx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGUgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEwOjIzLjAwNDM5OTM5NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDcwNjE4NDMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWTEFOXzgwMjFRXCIsXG4gICAgXCJORVRfQUNUX01QTFNcIixcbiAgICBcIk5FVF9BQ1RfVkxBTlwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza2Jfdmxhbl9wdXNoXCIsXG4gICAgXCJ2bGFuX2RvX3JlY2VpdmVcIixcbiAgICBcInRjZl9tcGxzX2FjdFwiLFxuICAgIFwidGNmX3ZsYW5fYWN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIHVzaW5nIHBza2JfbWF5X3B1bGwoc2tiLCBtYWNfbGVuKSBpbiBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZygpIHRvIGVuc3VyZSB0aGF0IHRoZSBwYWNrZXQgYnVmZmVyIGNvbnRhaW5zIGF0IGxlYXN0IG1hY19sZW4gbGluZWFyIGJ5dGVzIGJlZm9yZSBwZXJmb3JtaW5nIGhlYWRlciBtYW5pcHVsYXRpb25zIChza2JfcG9zdHB1c2hfZGF0YV9tb3ZlIGFuZCB3cml0aW5nIHZsYW5fZXRoaGRyKS4gV2l0aG91dCB0aGlzIGNoZWNrLCBwYWNrZXRzIHNob3J0ZXIgdGhhbiBtYWNfbGVuIG9yIG5vbi1saW5lYXIgYnVmZmVycyBjb3VsZCBsZWFkIHRvIG91dC1vZi1ib3VuZHMgaGVhcCBhY2Nlc3NlcyAoT09CIHJlYWQvd3JpdGUpLCB3aGljaCBhcmUgZGlyZWN0bHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZSBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBidWZmZXJzLCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pIGNoZWNrIHRvIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKCkgaW4gaW5jbHVkZS9saW51eC9pZl92bGFuLmggdG8gZW5zdXJlIHN1ZmZpY2llbnQgaGVhZCBkYXRhIGlzIHB1bGxlZCBiZWZvcmUgaW5zZXJ0aW5nIGFuIGlubmVyIFZMQU4gdGFnLiBUaGlzIHJlYWNoYWJsZSBoZWxwZXIgaXMgZXhlcmNpc2VkIGJ5IGNvcmUgbmV0d29ya2luZyBwYXRocyBzdWNoIGFzIDgwMi4xUSByZWNlaXZlIHByb2Nlc3NpbmcgKHZsYW5fZG9fcmVjZWl2ZSksIFZMQU4gcHVzaCBvcGVyYXRpb25zIChza2Jfdmxhbl9wdXNoKSwgYW5kIFRDIGFjdGlvbnMgKHRjZl9tcGxzX2FjdCwgdGNmX3ZsYW5fYWN0KS4gRnV6emluZyBpcyB3b3J0aHdoaWxlIHRvIHRlc3QgYmVoYXZpb3Igd2l0aCBub24tbGluZWFyLCBmcmFnbWVudGVkLCBvciBtYWxmb3JtZWQgcGFja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTA6MjMuMDA0NDA2NDAzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU0MTE4MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmMzZkY2FhMWQ5NjdlYzJiNzJlYjQzNjVmNGJmODMzOTYzYjhkYmY0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDE1IDExOjEwOjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oIGIvaW5jbHVkZS9saW51eC9pZl92bGFuLmhcXG5pbmRleCAyMGNjMTZlYTRlNWFiLi40ODQ2MDMyYmY0ZmZjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9pZl92bGFuLmhcXG5AQCAtMzY1LDYgKzM2NSw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGNvbnN0IHU4IG1ldGFfbGVuID0gbWFjX2xlbiBcXHUwMDNlIEVUSF9UTEVOID8gc2tiX21ldGFkYXRhX2xlbihza2IpIDogMDtcXG4gXFx0c3RydWN0IHZsYW5fZXRoaGRyICp2ZXRoO1xcbiBcXG4rXFx0aWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbikpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdGlmIChza2JfY293X2hlYWQoc2tiLCBtZXRhX2xlbiArIFZMQU5fSExFTikgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEwOjIzLjQ2MDU0MTI1MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTk1ODUwMDgxMDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZMQU5fODAyMVFcIixcbiAgICBcIk5FVF9BQ1RfTVBMU1wiLFxuICAgIFwiTkVUX0FDVF9WTEFOXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl92bGFuX3B1c2hcIixcbiAgICBcInZsYW5fZG9fcmVjZWl2ZVwiLFxuICAgIFwidGNmX21wbHNfYWN0XCIsXG4gICAgXCJ0Y2Zfdmxhbl9hY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pIGNoZWNrIHRvIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKCkgaW4gaW5jbHVkZS9saW51eC9pZl92bGFuLmggdG8gZW5zdXJlIHN1ZmZpY2llbnQgaGVhZCBkYXRhIGlzIHB1bGxlZCBiZWZvcmUgaW5zZXJ0aW5nIGFuIGlubmVyIFZMQU4gdGFnLiBUaGlzIHJlYWNoYWJsZSBoZWxwZXIgaXMgZXhlcmNpc2VkIGJ5IGNvcmUgbmV0d29ya2luZyBwYXRocyBzdWNoIGFzIDgwMi4xUSByZWNlaXZlIHByb2Nlc3NpbmcgKHZsYW5fZG9fcmVjZWl2ZSksIFZMQU4gcHVzaCBvcGVyYXRpb25zIChza2Jfdmxhbl9wdXNoKSwgYW5kIFRDIGFjdGlvbnMgKHRjZl9tcGxzX2FjdCwgdGNmX3ZsYW5fYWN0KS4gRnV6emluZyBpcyB3b3J0aHdoaWxlIHRvIHRlc3QgYmVoYXZpb3Igd2l0aCBub24tbGluZWFyLCBmcmFnbWVudGVkLCBvciBtYWxmb3JtZWQgcGFja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMzZkY2FhMWQ5NjdlYzJiNzJlYjQzNjVmNGJmODMzOTYzYjhkYmY0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTE6MTA6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oXG5pbmRleCAyMGNjMTZlYTRlNWFiLi40ODQ2MDMyYmY0ZmZjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pZl92bGFuLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oXG5AQCAtMzY1LDYgKzM2NSw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjb25zdCB1OCBtZXRhX2xlbiA9IG1hY19sZW4gXHUwMDNlIEVUSF9UTEVOID8gc2tiX21ldGFkYXRhX2xlbihza2IpIDogMDtcbiBcdHN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aDtcbiBcbitcdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgbWV0YV9sZW4gKyBWTEFOX0hMRU4pIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEwOjIzLjQ2MDU0MzEwMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ5MTY3MjczMjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFZMQU4gSW5zZXJ0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgc2VlIGEgYGRpZmZgIHByZXNlbnRlZCwgYW5kIHRoZSBmaWxlIGJlaW5nIG1vZGlmaWVkIGlzIGBpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaGAuIFNlZW1zIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIFZMQU4gdGFnZ2luZywgc3BlY2lmaWNhbGx5IGFuIGlubmVyIHRhZyBpbnNlcnRpb24sIGp1ZGdpbmcgYnkgdGhlIGZ1bmN0aW9uIG5hbWUsIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AuXG5cblRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNoZWNrLCBgaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbikpKSByZXR1cm4gLUVJTlZBTDtgIGJlZm9yZSBhdHRlbXB0aW5nIGFueSBtZW1vcnkgbWFuaXB1bGF0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIGdvb2QgYWRkaXRpb24uIEl0IGxvb2tzIGxpa2UgaXQncyBndWFyZGluZyBhZ2FpbnN0IGEgcG90ZW50aWFsIGJ1ZmZlciB1bmRlcnJ1bi4gIGBwc2tiX21heV9wdWxsYCBwcm9iYWJseSB2ZXJpZmllcyBpZiB3ZSBjYW4gc2FmZWx5IHJlYWQgYG1hY19sZW5gIGJ5dGVzIGZyb20gdGhlIHBhY2tldCBkYXRhIHdpdGhvdXQgY2F1c2luZyBhIGtlcm5lbCBwYW5pYyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gIEVzc2VudGlhbGx5LCBpdCBjb25maXJtcyB0aGUgcHJlc2VuY2Ugb2YgZW5vdWdoIGRhdGEgaW4gdGhlIFNLQiB0byBwcm9jZWVkIHdpdGggVkxBTiBoZWFkZXIgaW5zZXJ0aW9uLiBBIGZhaWx1cmUgaGVyZSwgcmVwcmVzZW50ZWQgYnkgYC1FSU5WQUxgLCBsaWtlbHkgaW5kaWNhdGVzIGFuIGludmFsaWQgcGFja2V0IGZvcm1hdCBvciBjb3JydXB0ZWQgZGF0YS4gVGhpcyBpcyBhIHZlcnkgY29tbW9uIHNjZW5hcmlvIGZvciBidWZmZXIgY2hlY2tzLlxuXG5JJ2xsIG5lZWQgdG8gY29uZmlybSwgYnV0IHRoaXMgY2hlY2sgbGlrZWx5IHByZXZlbnRzIGEgY3Jhc2ggaWYgdGhlcmUncyBpbnN1ZmZpY2llbnQgZGF0YSB0byB3b3JrIHdpdGguIEkgc2hvdWxkIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBlc3BlY2lhbGx5IHRoZSBjYWxscyB0byBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGhvdyB0aGUgYG1hY19sZW5gIHZhbHVlIGlzIGRlcml2ZWQuIEl0IGlzIHByb2JhYmx5IHRoZSBvdXRlciBNQUMgaGVhZGVyIGxlbmd0aC4gTG9va2luZyBjbG9zZXIgYXQgbGluZSAzNjUsIEkgd2lsbCBpbnNwZWN0IGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgYW5kIGl0cyBjYWxsZXJzIHRvIGVuc3VyZSB0aGlzIG5ldyB2YWxpZGF0aW9uIGlzIHN1ZmZpY2llbnQgYW5kIHRoYXQgbm8gcG90ZW50aWFsIGlzc3VlcyBhcmUgaW50cm9kdWNlZCBlbHNld2hlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MDIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxMToxMi42Mjc4MTkwMjhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzNTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNTU6XFx0ICpcXG4gMzU2OlxcdCAqIEluc2VydHMgdGhlIFZMQU4gdGFnIGludG8gQHNrYiBhcyBwYXJ0IG9mIHRoZSBwYXlsb2FkIGF0IG9mZnNldCBtYWNfbGVuXFxuIDM1NzpcXHQgKiBEb2VzIG5vdCBjaGFuZ2Ugc2tiLVxcdTAwM2Vwcm90b2NvbCBzbyB0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGR1cmluZyByZWNlaXZlLlxcbiAzNTg6XFx0ICpcXG4gMzU5OlxcdCAqIFJldHVybnM6IGVycm9yIGlmIHNrYl9jb3dfaGVhZCBmYWlscy5cXG4gMzYwOlxcdCAqL1xcbiAzNjE6XFx0c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gMzYyOlxcdFxcdFxcdFxcdFxcdFxcdCAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSxcXG4gMzYzOlxcdFxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IG1hY19sZW4pXFxuIDM2NDpcXHR7XFxuIDM2NTpcXHRcXHRjb25zdCB1OCBtZXRhX2xlbiA9IG1hY19sZW4gXFx1MDAzZSBFVEhfVExFTiA/IHNrYl9tZXRhZGF0YV9sZW4oc2tiKSA6IDA7XFxuIDM2NjpcXHRcXHRzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZldGg7XFxuIDM2NzpcXHRcXG4gMzY4OlxcdFxcdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pKSlcXG4gMzY5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzNzA6XFx0XFxuIDM3MTpcXHRcXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgbWV0YV9sZW4gKyBWTEFOX0hMRU4pIFxcdTAwM2MgMClcXG4gMzcyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzNzM6XFx0XFxuIDM3NDpcXHRcXHRza2JfcHVzaChza2IsIFZMQU5fSExFTik7XFxuIDM3NTpcXHRcXG4gMzc2OlxcdFxcdC8qIE1vdmUgdGhlIG1hYyBoZWFkZXIgc2FucyBwcm90byB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXcgaGVhZGVyLiAqL1xcbiAzNzc6XFx0XFx0aWYgKGxpa2VseShtYWNfbGVuIFxcdTAwM2UgRVRIX1RMRU4pKVxcbiAzNzg6XFx0XFx0XFx0c2tiX3Bvc3RwdXNoX2RhdGFfbW92ZShza2IsIFZMQU5fSExFTiwgbWFjX2xlbiAtIEVUSF9UTEVOKTtcXG4gMzc5OlxcdFxcdGlmIChza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikpXFxuIDM4MDpcXHRcXHRcXHRza2ItXFx1MDAzZW1hY19oZWFkZXIgLT0gVkxBTl9ITEVOO1xcbiAzODE6XFx0XFxuIDM4MjpcXHRcXHR2ZXRoID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKShza2ItXFx1MDAzZWRhdGEgKyBtYWNfbGVuIC0gRVRIX0hMRU4pO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHQvKiBmaXJzdCwgdGhlIGV0aGVybmV0IHR5cGUgKi9cXG4gMzg1OlxcdFxcdGlmIChsaWtlbHkobWFjX2xlbiBcXHUwMDNlPSBFVEhfVExFTikpIHtcXG4gMzg2OlxcdFxcdFxcdC8qIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gc2hvdWxkIGFscmVhZHkgYmUgcG9wdWxhdGVkLCBhbmRcXG4gMzg3OlxcdFxcdFxcdCAqIHNrYi1cXHUwMDNlZGF0YSBoYXMgc3BhY2UgZm9yIGhfdmxhbl9wcm90b1xcbiAzODg6XFx0XFx0XFx0ICovXFxuIDM4OTpcXHRcXHRcXHR2ZXRoLVxcdTAwM2VoX3ZsYW5fcHJvdG8gPSB2bGFuX3Byb3RvO1xcbiAzOTA6XFx0XFx0fSBlbHNlIHtcXG4gMzkxOlxcdFxcdFxcdC8qIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gc2hvdWxkIG5vdCBiZSBwb3B1bGF0ZWQsIGFuZFxcbiAzOTI6XFx0XFx0XFx0ICogc2tiLVxcdTAwM2VkYXRhIGhhcyBubyBzcGFjZSBmb3IgaF92bGFuX3Byb3RvXFxuIDM5MzpcXHRcXHRcXHQgKi9cXG4gMzk0OlxcdFxcdFxcdHZldGgtXFx1MDAzZWhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gPSBza2ItXFx1MDAzZXByb3RvY29sO1xcbiAzOTU6XFx0XFx0fVxcbiAzOTY6XFx0XFxuIDM5NzpcXHRcXHQvKiBub3csIHRoZSBUQ0kgKi9cXG4gMzk4OlxcdFxcdHZldGgtXFx1MDAzZWhfdmxhbl9UQ0kgPSBodG9ucyh2bGFuX3RjaSk7XFxuIDM5OTpcXHRcXG4gNDAwOlxcdFxcdHJldHVybiAwO1xcbiA0MDE6XFx0fVxcbiA0MDI6XFx0XFxuIDQwMzpcXHQvKipcXG4gNDA0OlxcdCAqIF9fdmxhbl9pbnNlcnRfdGFnIC0gcmVndWxhciBWTEFOIHRhZyBpbnNlcnRpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTE6MTIuNjI3OTA4MTc5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzA3MzU1Mjc3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgVkxBTiBJbnNlcnRpb24gaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGV2ZXJ5IHBsYWNlIGluIHRoZSBrZXJuZWwgdGhhdCBjYWxscyBgX192bGFuX2luc2VydF9pbm5lcl90YWdgLiBUaGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIFZMQU4gdGFnZ2luZywgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIHVzYWdlIGlzIGNyaXRpY2FsIGZvciBzZXZlcmFsIGRlYnVnZ2luZyBzY2VuYXJpb3MsIHBlcmZvcm1hbmNlIGFuYWx5c2lzLCBvciBwb3RlbnRpYWxseSBzZWN1cml0eSBhdWRpdHMuIEnigJlsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggdG8gZmluZCBhbGwgdGhlIGluc3RhbmNlcyBvZiB0aGlzIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZC4gSSBjb3VsZCB1c2UgYGdyZXBgIChvciBpdHMgbW9yZSBlZmZpY2llbnQgZXF1aXZhbGVudHMpIG9uIHRoZSBzb3VyY2UgdHJlZSwgYnV0IGEgbW9yZSBzdXJnaWNhbCBhcHByb2FjaCBtaWdodCBiZSBiZXR0ZXIgdG8gZWxpbWluYXRlIGZhbHNlIHBvc2l0aXZlcywgZGVwZW5kaW5nIG9uIHRoZSB0b29sY2hhaW4gY2FwYWJpbGl0aWVzIEkgaGF2ZS4gSXMgdGhlcmUgYSB3YXkgdG8gbGV2ZXJhZ2Ugc3ltYm9sIGluZGV4aW5nIG9yIGNyb3NzLXJlZmVyZW5jaW5nIGNhcGFiaWxpdGllcyBvZiBteSBJREUgb3IgYnVpbGQgZW52aXJvbm1lbnQ/IFRoYXQgd291bGQgYmUgaWRlYWwuIEkgbmVlZCB0byBiZSBzdXJlIEknbSBjYXB0dXJpbmcgYWxsIGluZGlyZWN0IGNhbGxzIHRvbywgd2hpY2ggbWVhbnMgSSBzaG91bGQgbG9vayBmb3IgZnVuY3Rpb24gcG9pbnRlcnMgb3IgbWFjcm9zIHRoYXQgbWlnaHQgZXhwYW5kIHRvIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24uIEFmdGVyIEkgaGF2ZSB0aGUgbGlzdCwgSSBzaG91bGQgZ28gdGhyb3VnaCBlYWNoIGxvY2F0aW9uIHdpdGggYSBkaXNjZXJuaW5nIGV5ZS4gVW5kZXJzdGFuZGluZyBob3cgdGhlIGRhdGEgZmxvd3MgaW50byBhbmQgb3V0IG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtJ3MgYmVoYXZpb3IuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MzUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjExOjE1LjcwMTQ2Mzc0NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODkxNzc3MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTMzOT1zdGF0aWMgaW5saW5lIGJvb2wgdmxhbl9od19vZmZsb2FkX2NhcGFibGUobmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0zNDktLyoqXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6MzUwOiAqIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnIC0gaW5uZXIgVkxBTiB0YWcgaW5zZXJ0aW5nXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzUxLSAqIEBza2I6IHNrYnVmZiB0byB0YWdcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM2MC0gKi9cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDozNjE6c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0zNjItXFx0XFx0XFx0XFx0XFx0ICBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5fdGNpLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg9NDE0PXN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfdGFnKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MTYte1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQxNzpcXHRyZXR1cm4gX192bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCB2bGFuX3Byb3RvLCB2bGFuX3RjaSwgRVRIX0hMRU4pO1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQxOC19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD00Mzc9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00NDMtXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDQ0OlxcdGVyciA9IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHNrYiwgdmxhbl9wcm90bywgdmxhbl90Y2ksIG1hY19sZW4pO1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQ0NS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X21wbHMuYz01Mz1UQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX21wbHNfYWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X21wbHMuYy05MC1cXHRcXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkge1xcbm5ldC9zY2hlZC9hY3RfbXBscy5jOjkxOlxcdFxcdFxcdGlmIChfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHNrYi1cXHUwMDNldmxhbl9wcm90byxcXG5uZXQvc2NoZWQvYWN0X21wbHMuYy05Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgc2tiX3ZsYW5fdGFnX2dldChza2IpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxMToxNy41OTMyNDYxMzZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTcwMzA1MTU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVkxBTiBUYWcgSW5zZXJ0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgaGllcmFyY2h5IGZvciB0aGVzZSBWTEFOIHRhZyBpbnNlcnRpb24gZnVuY3Rpb25zLiBJdCBsb29rcyBsaWtlIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBhbmQgSSdtIGludGVyZXN0ZWQgaW4gd2hlcmUgaXQncyBiZWluZyB1c2VkLiBCYXNlZCBvbiB3aGF0IEkndmUgc2VlbiwgaXQncyBjYWxsZWQgYnkgYSBmZXcgb3RoZXIgZnVuY3Rpb25zLiBGaXJzdCwgdGhlcmUncyBgX192bGFuX2luc2VydF90YWdgIGFuZCB0aGVuIGB2bGFuX2luc2VydF9pbm5lcl90YWdgLCBib3RoIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvaWZfdmxhbi5oYC4gVGhhdCBtYWtlcyBzZW5zZSwgdGhvc2UgYXJlIHRoZSBjb3JlIFZMQU4gc3RydWN0dXJlcy4gVGhlIHRoaXJkIGNhbGwsIGFuZCB0aGlzIGlzIGludGVyZXN0aW5nLCBjb21lcyBmcm9tIGB0Y2ZfbXBsc19hY3RgIGluIGBuZXQvc2NoZWQvYWN0X21wbHMuY2AuIFRoYXQncyBpbXBseWluZyBzb21lIHNvcnQgb2YgaW50ZXJhY3Rpb24gd2l0aCBNUExTIHRyYWZmaWMgY29udHJvbC4gTm93IEkgbmVlZCB0byBjaGVjayB3aGVyZSBgX192bGFuX2luc2VydF90YWdgIGFuZCBgdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCBhcmUgY2FsbGVkIHRvIGZ1bGx5IG1hcCB0aGUgZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhdCBhbGwgdGhlc2UgcGxhY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzM4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjExOjMzLjI5NjMwMDg1NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjk3ODkzNjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdmxhbl9pbnNlcnRfdGFnXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL3FlZGkvcWVkaV9tYWluLmM9NjY3PXN0YXRpYyBpbnQgcWVkaV9sbDJfcngodm9pZCAqY29va2llLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgYXJnMSwgdTMyIGFyZzIpXFxuLS1cXG5kcml2ZXJzL3Njc2kvcWVkaS9xZWRpX21haW4uYy03MjItXFx0aWYgKHdvcmstXFx1MDAzZXZsYW5faWQpXFxuZHJpdmVycy9zY3NpL3FlZGkvcWVkaV9tYWluLmM6NzIzOlxcdFxcdF9fdmxhbl9pbnNlcnRfdGFnKHdvcmstXFx1MDAzZXNrYiwgaHRvbnMoRVRIX1BfODAyMVEpLCB3b3JrLVxcdTAwM2V2bGFuX2lkKTtcXG5kcml2ZXJzL3Njc2kvcWVkaS9xZWRpX21haW4uYy03MjQtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD0zNjE9c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQxMy0gKi9cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDo0MTQ6c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MTUtXFx0XFx0XFx0XFx0ICAgIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl90Y2kpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz02NDg5PWludCBza2Jfdmxhbl9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl90Y2kpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02NTAwLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjY1MDE6XFx0XFx0ZXJyID0gX192bGFuX2luc2VydF90YWcoc2tiLCBza2ItXFx1MDAzZXZsYW5fcHJvdG8sXFxubmV0L2NvcmUvc2tidWZmLmMtNjUwMi1cXHRcXHRcXHRcXHRcXHRza2Jfdmxhbl90YWdfZ2V0KHNrYikpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxMTozNi41OTQyMDE4MzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MzExNzE0MjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBWTEFOIFRhZ2dpbmcgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBWTEFOIHRhZ2dpbmcgaW1wbGVtZW50YXRpb24gaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIE15IGluaXRpYWwgdGhvdWdodCBpcyBmb2N1c2VkIG9uIGBza2Jfdmxhbl9wdXNoYC4gVGhpcyBpcyB0aGUgY29yZSBmdW5jdGlvbiwgc28gaXQgbWFrZXMgc2Vuc2UgdG8gc3RhcnQgaGVyZS4gVGhlIGNhbGwgdG8gYF9fdmxhbl9pbnNlcnRfdGFnYCBpcyB0aGUgY3J1Y2lhbCBuZXh0IHN0ZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZyBhdCBhIGxvdyBsZXZlbDsgd2hhdCBhcmUgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgbWVtb3J5IG1hbmlwdWxhdGlvbiBvY2N1cnJpbmc/IE15IGh5cG90aGVzaXMgaXMgdGhhdCBgX192bGFuX2luc2VydF90YWdgIHByb3ZpZGVzIHRoZSBiYXNlIG1lY2hhbmljcyBhbmQgYHNrYl92bGFuX3B1c2hgIHByb3ZpZGVzIGEgdG9wLWxldmVsIGludGVyZmFjZS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgZGVlcGVyIGludG8gYHZsYW5faW5zZXJ0X2lubmVyX3RhZ2AuIEknbSBnb2luZyB0byBsb29rIGF0IHRoYXQgbmV4dC4gSSBleHBlY3QgaXQncyBnb2luZyB0byBiZSByZWxhdGVkIHRvIHRoZSBvdXRlciBWTEFOIHRhZyBhbmQgaG93IHRoYXQncyBoYW5kbGVkLiBJcyBpdCBhIHNlcGFyYXRlIGZ1bmN0aW9uIGJlY2F1c2Ugb2YgaGFyZHdhcmUgb2ZmbG9hZCBpbXBsaWNhdGlvbnM/IE1heWJlIHRoaXMgaXMgd2hlcmUgZGlmZmVyZW50IFZMQU4gY29uZmlndXJhdGlvbnMgYXJlIGhhbmRsZWQsIGlubmVyIGFuZCBvdXRlciwgd2hpY2ggd291bGQgZXhwbGFpbiB0aGUgbmVlZCBmb3IgdHdvIHNpbWlsYXItbG9va2luZyBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMzYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxMTo0MS45MDU5MTg5MzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzE2NjMyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmxhbl9pbnNlcnRfaW5uZXJfdGFnXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9pZl92bGFuLmg9MzM5PXN0YXRpYyBpbmxpbmUgYm9vbCB2bGFuX2h3X29mZmxvYWRfY2FwYWJsZShuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyxcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM2MC0gKi9cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDozNjE6c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0zNjItXFx0XFx0XFx0XFx0XFx0ICBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5fdGNpLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg9NDE0PXN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfdGFnKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MTYte1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQxNzpcXHRyZXR1cm4gX192bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCB2bGFuX3Byb3RvLCB2bGFuX3RjaSwgRVRIX0hMRU4pO1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQxOC19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MzYtICovXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDM3OnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnZsYW5faW5zZXJ0X2lubmVyX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQzOC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgX19iZTE2IHZsYW5fcHJvdG8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00NDMtXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDQ0OlxcdGVyciA9IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHNrYiwgdmxhbl9wcm90bywgdmxhbl90Y2ksIG1hY19sZW4pO1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQ0NS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD00Njg9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdmxhbl9pbnNlcnRfdGFnKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00NzAte1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQ3MTpcXHRyZXR1cm4gdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHNrYiwgdmxhbl9wcm90bywgdmxhbl90Y2ksIEVUSF9ITEVOKTtcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00NzItfVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jPTEwPWJvb2wgdmxhbl9kb19yZWNlaXZlKHN0cnVjdCBza19idWZmICoqc2ticClcXG4tLVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYy01MS1cXHRcXHRza2JfcHVzaChza2IsIG9mZnNldCk7XFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjUyOlxcdFxcdHNrYiA9ICpza2JwID0gdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHNrYiwgc2tiLVxcdTAwM2V2bGFuX3Byb3RvLFxcbm5ldC84MDIxcS92bGFuX2NvcmUuYy01My1cXHRcXHRcXHRcXHRcXHRcXHQgICAgc2tiLVxcdTAwM2V2bGFuX3RjaSwgc2tiLVxcdTAwM2VtYWNfbGVuKTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfbXBscy5jPTUzPVRDX0lORElSRUNUX1NDT1BFIGludCB0Y2ZfbXBsc19hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTkwLVxcdFxcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XFxubmV0L3NjaGVkL2FjdF9tcGxzLmM6OTE6XFx0XFx0XFx0aWYgKF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHNrYiwgc2tiLVxcdTAwM2V2bGFuX3Byb3RvLFxcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTkyLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBza2Jfdmxhbl90YWdfZ2V0KHNrYiksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjExOjQ0LjA3NzU5MjA5OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTU1MTA3NzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBgdmxhbl9pbnNlcnRfdGFnYCoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYSBzcGVjaWZpYyBmdW5jdGlvbiwgYHZsYW5faW5zZXJ0X3RhZ2AuIEl0J3Mgd29ydGggZGlnZ2luZyBpbnRvLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBjdXJyZW50IGNvbnRleHQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiBpcyBiZWhhdmluZyBhcyBleHBlY3RlZCwgcGFydGljdWxhcmx5IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBWTEFOIHRhZ2dpbmcuIEdpdmVuIG15IGV4cGVydGlzZSwgSeKAmWxsIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaXQuIEkgd2FudCB0byBxdWlja2x5IGV2YWx1YXRlIHRoaXMsIHRvIGVuc3VyZSBubyBoaWRkZW4gaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjgwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTE6NDUuNjMyNzAzNzU0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU5ODM5Mzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZsYW5faW5zZXJ0X3RhZ1xcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvc2NzaS9xZWRpL3FlZGlfbWFpbi5jPTY2Nz1zdGF0aWMgaW50IHFlZGlfbGwyX3J4KHZvaWQgKmNvb2tpZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGFyZzEsIHUzMiBhcmcyKVxcbi0tXFxuZHJpdmVycy9zY3NpL3FlZGkvcWVkaV9tYWluLmMtNzIyLVxcdGlmICh3b3JrLVxcdTAwM2V2bGFuX2lkKVxcbmRyaXZlcnMvc2NzaS9xZWRpL3FlZGlfbWFpbi5jOjcyMzpcXHRcXHRfX3ZsYW5faW5zZXJ0X3RhZyh3b3JrLVxcdTAwM2Vza2IsIGh0b25zKEVUSF9QXzgwMjFRKSwgd29yay1cXHUwMDNldmxhbl9pZCk7XFxuZHJpdmVycy9zY3NpL3FlZGkvcWVkaV9tYWluLmMtNzI0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg9MzYxPXN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MTMtICovXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDE0OnN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfdGFnKHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDE1LVxcdFxcdFxcdFxcdCAgICBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5fdGNpKVxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg9NDM3PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnZsYW5faW5zZXJ0X2lubmVyX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDY3LSAqL1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQ2ODpzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp2bGFuX2luc2VydF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00NjktXFx0XFx0XFx0XFx0XFx0ICAgICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSlcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTQ4OD1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp2bGFuX2luc2VydF90YWdfc2V0X3Byb3RvKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00OTEte1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQ5MjpcXHRza2IgPSB2bGFuX2luc2VydF90YWcoc2tiLCB2bGFuX3Byb3RvLCB2bGFuX3RjaSk7XFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDkzLVxcdGlmIChza2IpXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYz0zMzc9c3RhdGljIHZvaWQgYmF0YWR2X2JsYV9zZW5kX2NsYWltKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICptYWMsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYy00MjgtXFx0aWYgKHZpZCBcXHUwMDI2IEJBVEFEVl9WTEFOX0hBU19UQUcpIHtcXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYzo0Mjk6XFx0XFx0c2tiID0gdmxhbl9pbnNlcnRfdGFnKHNrYiwgaHRvbnMoRVRIX1BfODAyMVEpLFxcbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jLTQzMC1cXHRcXHRcXHRcXHQgICAgICB2aWQgXFx1MDAyNiBWTEFOX1ZJRF9NQVNLKTtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jPTExOTk9YmF0YWR2X2RhdF9hcnBfY3JlYXRlX3JlcGx5KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIF9fYmUzMiBpcF9zcmMsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy0xMjEyLVxcdGlmICh2aWQgXFx1MDAyNiBCQVRBRFZfVkxBTl9IQVNfVEFHKVxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jOjEyMTM6XFx0XFx0c2tiID0gdmxhbl9pbnNlcnRfdGFnKHNrYiwgaHRvbnMoRVRIX1BfODAyMVEpLFxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTEyMTQtXFx0XFx0XFx0XFx0ICAgICAgdmlkIFxcdTAwMjYgVkxBTl9WSURfTUFTSyk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz02NDg5PWludCBza2Jfdmxhbl9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl90Y2kpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02NTAwLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjY1MDE6XFx0XFx0ZXJyID0gX192bGFuX2luc2VydF90YWcoc2tiLCBza2ItXFx1MDAzZXZsYW5fcHJvdG8sXFxubmV0L2NvcmUvc2tidWZmLmMtNjUwMi1cXHRcXHRcXHRcXHRcXHRza2Jfdmxhbl90YWdfZ2V0KHNrYikpO1xcbi0tXFxubmV0L2RzYS90YWdfODAyMXEuYz00NjQ9c3RydWN0IHNrX2J1ZmYgKmRzYV84MDIxcV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5uZXQvZHNhL3RhZ184MDIxcS5jLTQ2Ny1cXHQvKiBza2ItXFx1MDAzZWRhdGEgcG9pbnRzIGF0IHRoZSBNQUMgaGVhZGVyLCB3aGljaCBpcyBmaW5lXFxubmV0L2RzYS90YWdfODAyMXEuYzo0Njg6XFx0ICogZm9yIHZsYW5faW5zZXJ0X3RhZygpLlxcbm5ldC9kc2EvdGFnXzgwMjFxLmMtNDY5LVxcdCAqL1xcbm5ldC9kc2EvdGFnXzgwMjFxLmM6NDcwOlxcdHJldHVybiB2bGFuX2luc2VydF90YWcoc2tiLCBodG9ucyh0cGlkKSwgdGNpKTtcXG5uZXQvZHNhL3RhZ184MDIxcS5jLTQ3MS19XFxuLS1cXG5uZXQvZHNhL3RhZ19zamExMTA1LmM9MjQxPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqc2phMTEwNV9wdmlkX3RhZ19jb250cm9sX3BrdChzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxcbi0tXFxubmV0L2RzYS90YWdfc2phMTEwNS5jLTI2Mi1cXG5uZXQvZHNhL3RhZ19zamExMTA1LmM6MjYzOlxcdHJldHVybiB2bGFuX2luc2VydF90YWcoc2tiLCB4bWl0X3RwaWQsIChwY3AgXFx1MDAzY1xcdTAwM2MgVkxBTl9QUklPX1NISUZUKSB8XFxubmV0L2RzYS90YWdfc2phMTEwNS5jLTI2NC1cXHRcXHRcXHQgICAgICAgU0pBMTEwNV9ERUZBVUxUX1ZMQU4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxMTo0Ny43OTI1NTAxNjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODU5NjI4MzA5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgRGVlcCBpbnRvIFZMQU5zIGFuZCBNUExTKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUgbmV0d29ya2luZyBzdGFjayBhZ2Fpbiwgc3BlY2lmaWNhbGx5IGF0IGhvdyBWTEFOcyBhbmQgTVBMUyBpbnRlcmFjdC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgbmV0LzgwMjFxL3ZsYW5fY29yZS5jYCwgbGluZSA1MiAtIGB2bGFuX2RvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipza2JwKWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBWTEFOcyBhcmUgaGFuZGxlZCBkdXJpbmcgcGFja2V0IHJlY2VwdGlvbi4gVGhhdCdzIGEga2V5IHN0YXJ0aW5nIHBvaW50LlxuXG5UaGVuLCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGZ1bmN0aW9uIGBza2Jfdmxhbl9wdXNoYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBWTEFOIHRhZyBpdHNlbGYgaXMgYWN0dWFsbHkgKnB1c2hlZCogb250byB0aGUgYHNrX2J1ZmZgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIHRoaXMgZnVuY3Rpb24gaW4gcGFydGljdWxhci5cblxuTXkgbWluZCB0aGVuIHdhbmRlcnMgdG8gYHRjZl9tcGxzX2FjdGAgaW4gYG5ldC9zY2hlZC9hY3RfbXBscy5jYC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3RhY2ssIHRoaXMgbXVzdCBiZSB3aGVyZSBNUExTIGFjdGlvbnMgYXJlIGltcGxlbWVudGVkLiBUaGUgaW50ZXJhY3Rpb24gaGVyZSB3aXRoIFZMQU5zIGlzIHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBzZWUgKndoZXJlKiBgc2tiX3ZsYW5fcHVzaGAgaXMgY2FsbGVkLiBUaGF0IHdpbGwgcHJvdmlkZSBhIGdvb2QgaW5kaWNhdGlvbiBvZiB3aGVyZSBpdCBpcyB1c2VkIGFuZCBob3cuIEZpbmRpbmcgdGhvc2UgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgYW4gdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gVkxBTiBhbmQgTVBMUy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB2bGFuIHRhZ2dpbmcgaXMgYWRkZWQgdG8gYW4gc2tiLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODI0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjExOjU2LjM4ODgzNzExM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4NTExODI2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2Jfdmxhbl9wdXNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmg9NDMxMj1pbnQgc2tiX3ZsYW5fcG9wKHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDMxMzppbnQgc2tiX3ZsYW5fcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5fdGNpKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQzMTQtaW50IHNrYl9ldGhfcG9wKHN0cnVjdCBza19idWZmICpza2IpO1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTIyOTEtICpcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MjI5MjogKiBsb25nIGJwZl9za2Jfdmxhbl9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl90Y2kpXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTIyOTMtICogXFx0RGVzY3JpcHRpb25cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC02MDIwLVxcdEZOKGdldF9jZ3JvdXBfY2xhc3NpZCwgMTcsICMjY3R4KVxcdFxcdFxcXFxcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NjAyMTpcXHRGTihza2Jfdmxhbl9wdXNoLCAxOCwgIyNjdHgpXFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC02MDIyLVxcdEZOKHNrYl92bGFuX3BvcCwgMTksICMjY3R4KVxcdFxcdFxcdFxcXFxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTMyOTA9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2V0X2hhc2hfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0zMjk3LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjMyOTg6QlBGX0NBTExfMyhicGZfc2tiX3ZsYW5fcHVzaCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBfX2JlMTYsIHZsYW5fcHJvdG8sXFxubmV0L2NvcmUvZmlsdGVyLmMtMzI5OS1cXHQgICB1MTYsIHZsYW5fdGNpKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzMwNy1cXHRicGZfcHVzaF9tYWNfcmNzdW0oc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYzozMzA4OlxcdHJldCA9IHNrYl92bGFuX3B1c2goc2tiLCB2bGFuX3Byb3RvLCB2bGFuX3RjaSk7XFxubmV0L2NvcmUvZmlsdGVyLmMtMzMwOS1cXHRicGZfcHVsbF9tYWNfcmNzdW0oc2tiKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTMzMTUtXFxubmV0L2NvcmUvZmlsdGVyLmM6MzMxNjpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2Jfdmxhbl9wdXNoX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjMzMTc6XFx0LmZ1bmMgICAgICAgICAgID0gYnBmX3NrYl92bGFuX3B1c2gsXFxubmV0L2NvcmUvZmlsdGVyLmMtMzMxOC1cXHQuZ3BsX29ubHkgICAgICAgPSBmYWxzZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTgzODg9Ym9vbCBicGZfaGVscGVyX2NoYW5nZXNfcGt0X2RhdGEoZW51bSBicGZfZnVuY19pZCBmdW5jX2lkKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODQwNy1cXHRjYXNlIEJQRl9GVU5DX3NrYl92bGFuX3BvcDpcXG5uZXQvY29yZS9maWx0ZXIuYzo4NDA4OlxcdGNhc2UgQlBGX0ZVTkNfc2tiX3ZsYW5fcHVzaDpcXG5uZXQvY29yZS9maWx0ZXIuYy04NDA5LVxcdGNhc2UgQlBGX0ZVTkNfc3RvcmVfaGRyX29wdDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg2MjI9dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODY0Ni1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9nZXRfY2dyb3VwX2NsYXNzaWRfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmM6ODY0NzpcXHRjYXNlIEJQRl9GVU5DX3NrYl92bGFuX3B1c2g6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODY0ODpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za2Jfdmxhbl9wdXNoX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg2NDktXFx0Y2FzZSBCUEZfRlVOQ19za2Jfdmxhbl9wb3A6XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz02NDg0PUVYUE9SVF9TWU1CT0woc2tiX3ZsYW5fcG9wKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY0ODgtICovXFxubmV0L2NvcmUvc2tidWZmLmM6NjQ4OTppbnQgc2tiX3ZsYW5fcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5fdGNpKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY0OTAte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNjQ5NS1cXHRcXHRpZiAoV0FSTl9PTkNFKG9mZnNldCxcXG5uZXQvY29yZS9za2J1ZmYuYzo2NDk2OlxcdFxcdFxcdCAgICAgIFxcXCJza2Jfdmxhbl9wdXNoIGdvdCBza2Igd2l0aCBza2ItXFx1MDAzZWRhdGEgbm90IGF0IG1hYyBoZWFkZXIgKG9mZnNldCAlZClcXFxcblxcXCIsXFxubmV0L2NvcmUvc2tidWZmLmMtNjQ5Ny1cXHRcXHRcXHQgICAgICBvZmZzZXQpKSB7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02NTEzLX1cXG5uZXQvY29yZS9za2J1ZmYuYzo2NTE0OkVYUE9SVF9TWU1CT0woc2tiX3ZsYW5fcHVzaCk7XFxubmV0L2NvcmUvc2tidWZmLmMtNjUxNS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTQ2OD1zdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy01MTctXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NTE4Oi8qIFNpbWlsYXIgdG8gc2tiX3ZsYW5fcHVzaC4gKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy01MTktc3RhdGljIGludCBuZl9mbG93X3ZsYW5fcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgcHJvdG8sIHUxNiBpZCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM9MTk3PXN0YXRpYyBpbnQgcHVzaF92bGFuKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0yMDctXFx0fVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6MjA4OlxcdGVyciA9IHNrYl92bGFuX3B1c2goc2tiLCB2bGFuLVxcdTAwM2V2bGFuX3RwaWQsXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0yMDktXFx0XFx0XFx0ICAgIG50b2hzKHZsYW4tXFx1MDAzZXZsYW5fdGNpKSBcXHUwMDI2IH5WTEFOX0NGSV9NQVNLKTtcXG4tLVxcbm5ldC9zY2hlZC9hY3Rfdmxhbi5jPTIyPVRDX0lORElSRUNUX1NDT1BFIGludCB0Y2Zfdmxhbl9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9zY2hlZC9hY3Rfdmxhbi5jLTQ4LVxcdGNhc2UgVENBX1ZMQU5fQUNUX1BVU0g6XFxubmV0L3NjaGVkL2FjdF92bGFuLmM6NDk6XFx0XFx0ZXJyID0gc2tiX3ZsYW5fcHVzaChza2IsIHAtXFx1MDAzZXRjZnZfcHVzaF9wcm90bywgcC1cXHUwMDNldGNmdl9wdXNoX3ZpZCB8XFxubmV0L3NjaGVkL2FjdF92bGFuLmMtNTAtXFx0XFx0XFx0XFx0ICAgIChwLVxcdTAwM2V0Y2Z2X3B1c2hfcHJpbyBcXHUwMDNjXFx1MDAzYyBWTEFOX1BSSU9fU0hJRlQpKTtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xNTI3PXVuaW9uIGJwZl9hdHRyIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0yMjkxLSAqXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjIyOTI6ICogbG9uZyBicGZfc2tiX3ZsYW5fcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5fdGNpKVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0yMjkzLSAqIFxcdERlc2NyaXB0aW9uXFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNjAyMC1cXHRGTihnZXRfY2dyb3VwX2NsYXNzaWQsIDE3LCAjI2N0eClcXHRcXHRcXFxcXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjYwMjE6XFx0Rk4oc2tiX3ZsYW5fcHVzaCwgMTgsICMjY3R4KVxcdFxcdFxcdFxcXFxcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNjAyMi1cXHRGTihza2Jfdmxhbl9wb3AsIDE5LCAjI2N0eClcXHRcXHRcXHRcXFxcXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfY29udGV4dF90ZXN0X3J1bi5jPTQ3MT12b2lkIHRlc3RfeGRwX2NvbnRleHRfdHVudGFwKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfY29udGV4dF90ZXN0X3J1bi5jLTUzOC1cXHQvKiBUZXN0cyBmb3IgQlBGIGhlbHBlcnMgd2hpY2ggdG91Y2ggaGVhZHJvb20gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfY29udGV4dF90ZXN0X3J1bi5jOjUzOTpcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiaGVscGVyX3NrYl92bGFuX3B1c2hfcG9wXFxcIikpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2NvbnRleHRfdGVzdF9ydW4uYy01NDAtXFx0XFx0dGVzdF90dW50YXAoc2tlbC1cXHUwMDNlcHJvZ3MuaW5nX3hkcCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfY29udGV4dF90ZXN0X3J1bi5jOjU0MTpcXHRcXHRcXHQgICAgc2tlbC1cXHUwMDNlcHJvZ3MuaGVscGVyX3NrYl92bGFuX3B1c2hfcG9wLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9jb250ZXh0X3Rlc3RfcnVuLmMtNTQyLVxcdFxcdFxcdCAgICBOVUxMLCAvKiB0YyBwcmlvIDIgKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF9tZXRhLmM9NTY3PVNFQyhcXFwidGNcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF9tZXRhLmM6NTY4OmludCBoZWxwZXJfc2tiX3ZsYW5fcHVzaF9wb3Aoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF9tZXRhLmMtNTY5LXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF9tZXRhLmMtNTcxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF9tZXRhLmM6NTcyOlxcdC8qIGJwZl9za2Jfdmxhbl9wdXNoIGFzc3VtZXMgSFcgb2ZmbG9hZCBmb3IgcHJpbWFyeSBWTEFOIHRhZy4gT25seVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF9tZXRhLmMtNTczLVxcdCAqIHNlY29uZGFyeSB0YWcgcHVzaCB0cmlnZ2VycyBhbiBhY3R1YWwgTUFDIGhlYWRlciBtb2RpZmljYXRpb24uXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYy01NzQtXFx0ICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYzo1NzU6XFx0ZXJyID0gYnBmX3NrYl92bGFuX3B1c2goY3R4LCAwLCA0Mik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYy01NzYtXFx0aWYgKGVycilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfbWV0YS5jLTU3Ny1cXHRcXHRnb3RvIG91dDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfbWV0YS5jOjU3ODpcXHRlcnIgPSBicGZfc2tiX3ZsYW5fcHVzaChjdHgsIDAsIDIwNyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYy01NzktXFx0aWYgKGVycilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF92bGFuLmM9MjU4PWludCB0Y192bGFuX3B1c2goc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF92bGFuLmMtMjU5LXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jOjI2MDpcXHRicGZfc2tiX3ZsYW5fcHVzaChjdHgsIGJwZl9odG9ucyhFVEhfUF84MDIxUSksIFRFU1RWTEFOKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jLTI2MS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X3ZlcmlmaWVyLmM9MTg2PXN0YXRpYyB2b2lkIGJwZl9maWxsX2xkX2Fic192bGFuX3B1c2hfcG9wKHN0cnVjdCBicGZfdGVzdCAqc2VsZilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X3ZlcmlmaWVyLmMtMjA1LVxcdFxcdGluc25baSsrXSA9IEJQRl9SQVdfSU5TTihCUEZfSk1QIHwgQlBGX0NBTEwsIDAsIDAsIDAsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfdmVyaWZpZXIuYzoyMDY6XFx0XFx0XFx0XFx0XFx0IEJQRl9GVU5DX3NrYl92bGFuX3B1c2gpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X3ZlcmlmaWVyLmMtMjA3LVxcdFxcdGluc25baV0gPSBCUEZfSk1QX0lNTShCUEZfSk5FLCBCUEZfUkVHXzAsIDAsIGxlbiAtIGkgLSAzKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9jYWxscy5jLTk1NS1cXHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMywgMiksXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL2NhbGxzLmM6OTU2OlxcdEJQRl9SQVdfSU5TTihCUEZfSk1QIHwgQlBGX0NBTEwsIDAsIDAsIDAsIEJQRl9GVU5DX3NrYl92bGFuX3B1c2gpLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9jYWxscy5jLTk1Ny1cXHRCUEZfRVhJVF9JTlNOKCksXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvbGRfYWJzLmMtODMtXFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzMsIDIpLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9sZF9hYnMuYzo4NDpcXHRCUEZfUkFXX0lOU04oQlBGX0pNUCB8IEJQRl9DQUxMLCAwLCAwLCAwLCBCUEZfRlVOQ19za2Jfdmxhbl9wdXNoKSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvbGRfYWJzLmMtODUtXFx0QlBGX01PVjY0X1JFRyhCUEZfUkVHXzYsIEJQRl9SRUdfNyksXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvbGRfYWJzLmMtMjYwLVxcdFxcdEJQRl9SQVdfSU5TTihCUEZfSk1QIHwgQlBGX0NBTEwsIDAsIDAsIDAsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL2xkX2Ficy5jOjI2MTpcXHRcXHRcXHQgICAgIEJQRl9GVU5DX3NrYl92bGFuX3B1c2gpLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9sZF9hYnMuYy0yNjItXFx0XFx0QlBGX01PVjY0X1JFRyhCUEZfUkVHXzYsIEJQRl9SRUdfNyksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjExOjU4LjA3Mzk2NTM1NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4OTg2Nzk5MjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFZMQU4gSGFuZGxpbmcgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBWTEFOIHRhZ2dpbmcgYW5kIHVudGFnZ2luZyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHNvbWUga2V5IGZ1bmN0aW9ucy4gSXQgc2VlbXMgbGlrZSBgc2tiX3ZsYW5fcHVzaGAgaXMgdGhlIGNvcmUgZnVuY3Rpb24gZm9yICphZGRpbmcqIGEgVkxBTiB0YWcgdG8gYW4gU0tCIChTb2NrZXQgQnVmZmVyKSwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGl0J3MgYmVpbmcgdXNlZC4gUmlnaHQgYXdheSwgaXQncyBjbGVhciB0aGF0IGl0J3MgaW1wb3J0YW50IGZvciBhIGZldyBjcml0aWNhbCBhcmVhcy4gRmlyc3RseSwgYGJwZl9za2Jfdmxhbl9wdXNoYCBpcyBhIEJQRiBoZWxwZXIuIFRoYXTigJlzIGludGVyZXN0aW5nLCBtZWFuaW5nIGl0J3MgYWNjZXNzaWJsZSBmcm9tIHdpdGhpbiBUcmFmZmljIENvbnRyb2wgKHRjKSBCUEYgcHJvZ3JhbXMhIFRoaXMgaW1wbGllcyB0aGF0IHRoZSBWTEFOIHRhZ2dpbmcgbG9naWMgY2FuIGJlIGR5bmFtaWNhbGx5IGNvbnRyb2xsZWQgYW5kIG1vZGlmaWVkIGF0IHJ1bnRpbWUsIGEgcG93ZXJmdWwgY2FwYWJpbGl0eS5cblxuQmV5b25kIEJQRiwgaXQncyBhbHNvIGJlaW5nIHV0aWxpemVkIGJ5IE9wZW4gdlN3aXRjaCB3aXRoIGBwdXNoX3ZsYW5gLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBPVlMsIGJlaW5nIGEgc29mdHdhcmUgc3dpdGNoLCBuZWVkcyB0byBoYW5kbGUgVkxBTnMgZXh0ZW5zaXZlbHkuIEFuZCBmaW5hbGx5LCB0aGUgYHRjIGFjdF92bGFuYCBhY3Rpb24gdXNlcyBpdCB0aHJvdWdoIGB0Y2Zfdmxhbl9hY3RgLiBTbywgaXQncyBpbnRlZ3JhbCB0byB0aGUgdXNlci1zcGFjZSB0cmFmZmljIGNvbnRyb2wgZnVuY3Rpb25hbGl0eS5cblxuTm93LCBvbiB0aGUgKnJlY2VpdmluZyogc2lkZSwgSSBzZWUgYHZsYW5fZG9fcmVjZWl2ZWAgaXMgcGxheWluZyBhIHJvbGUuIFRoaXMgaXMgdHJpZ2dlcmVkIHdpdGhpbiB0aGUgc3RhbmRhcmQgbmV0d29ya2luZyByZWNlaXZlIHBhdGgsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9jb3JlL2Rldi5jYCBpbiB0aGUgYF9fbmV0aWZfcmVjZWl2ZV9za2JfY29yZWAgZnVuY3Rpb24uIFRoYXQncyBhdCB0aGUgaGVhcnQgb2YgaG93IGluY29taW5nIHBhY2tldHMgYXJlIHByb2Nlc3NlZC4gVGhpcyB3YXJyYW50cyBhIG1vcmUgZGV0YWlsZWQgbG9vay4gSSdsbCBuZWVkIHRvIHZlcmlmeSBleGFjdGx5IGhvdyBgdmxhbl9kb19yZWNlaXZlYCBmdW5jdGlvbnMgdG8gc2VlIGhvdyBWTEFOcyBhcmUgaGFuZGxlZCBhbmQgdW50YWdnZWQgZnJvbSBpbmNvbWluZyBwYWNrZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc0NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxMjowNy4wNjA3NjcwNTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjE2MDc0MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmxhbl9kb19yZWNlaXZlXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9pZl92bGFuLmg9MjExPXZsYW5fZGV2X2dldF9lZ3Jlc3NfcW9zX21hc2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHNrcHJpbylcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTIzMy1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDoyMzQ6ZXh0ZXJuIGJvb2wgdmxhbl9kb19yZWNlaXZlKHN0cnVjdCBza19idWZmICoqc2tiKTtcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0yMzUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD0yODU9c3RhdGljIGlubGluZSB1MTYgdmxhbl9kZXZfZ2V0X2VncmVzc19xb3NfbWFzayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMjkwLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjI5MTpzdGF0aWMgaW5saW5lIGJvb2wgdmxhbl9kb19yZWNlaXZlKHN0cnVjdCBza19idWZmICoqc2tiKVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTI5Mi17XFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtOS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6MTA6Ym9vbCB2bGFuX2RvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipza2JwKVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYy0xMS17XFxuLS1cXG5uZXQvY29yZS9kZXYuYz02MDM0PXN0YXRpYyBpbnQgX19uZXRpZl9yZWNlaXZlX3NrYl9jb3JlKHN0cnVjdCBza19idWZmICoqcHNrYiwgYm9vbCBwZm1lbWFsbG9jLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjEzOC1cXHRcXHR9XFxubmV0L2NvcmUvZGV2LmM6NjEzOTpcXHRcXHRpZiAodmxhbl9kb19yZWNlaXZlKFxcdTAwMjZza2IpKVxcbm5ldC9jb3JlL2Rldi5jLTYxNDAtXFx0XFx0XFx0Z290byBhbm90aGVyX3JvdW5kO1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjE2OS1cXHRcXHRpZiAoc2tiX3ZsYW5fdGFnX2dldF9pZChza2IpKSB7XFxubmV0L2NvcmUvZGV2LmM6NjE3MDpcXHRcXHRcXHQvKiBWbGFuIGlkIGlzIG5vbiAwIGFuZCB2bGFuX2RvX3JlY2VpdmUoKSBhYm92ZSBjb3VsZG4ndFxcbm5ldC9jb3JlL2Rldi5jLTYxNzEtXFx0XFx0XFx0ICogZmluZCB2bGFuIGRldmljZS5cXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTYxNzUtXFx0XFx0XFx0LyogT3V0ZXIgaGVhZGVyIGlzIDgwMi4xUCB3aXRoIHZsYW4gMCwgaW5uZXIgaGVhZGVyIGlzXFxubmV0L2NvcmUvZGV2LmM6NjE3NjpcXHRcXHRcXHQgKiA4MDIuMVEgb3IgODAyLjFBRCBhbmQgdmxhbl9kb19yZWNlaXZlKCkgYWJvdmUgY291bGRcXG5uZXQvY29yZS9kZXYuYy02MTc3LVxcdFxcdFxcdCAqIG5vdCBmaW5kIHZsYW4gZGV2IGZvciB2bGFuIGlkIDAuXFxuLS1cXG5uZXQvY29yZS9kZXYuYy02MTgyLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbm5ldC9jb3JlL2Rldi5jOjYxODM6XFx0XFx0XFx0aWYgKHZsYW5fZG9fcmVjZWl2ZShcXHUwMDI2c2tiKSlcXG5uZXQvY29yZS9kZXYuYy02MTg0LVxcdFxcdFxcdFxcdC8qIEFmdGVyIHN0cmlwcGluZyBvZmYgODAyLjFQIGhlYWRlciB3aXRoIHZsYW4gMFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjE5Ny1cXHRcXHQvKiBOb3RlOiB3ZSBtaWdodCBpbiB0aGUgZnV0dXJlIHVzZSBwcmlvIGJpdHNcXG5uZXQvY29yZS9kZXYuYzo2MTk4OlxcdFxcdCAqIGFuZCBzZXQgc2tiLVxcdTAwM2Vwcmlvcml0eSBsaWtlIGluIHZsYW5fZG9fcmVjZWl2ZSgpXFxubmV0L2NvcmUvZGV2LmMtNjE5OS1cXHRcXHQgKiBGb3IgdGhlIHRpbWUgYmVpbmcsIGp1c3QgaWdub3JlIFByaW9yaXR5IENvZGUgUG9pbnRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTI6MDkuMTIyMzgwMDI0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQxNTI1OTY0NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcmVxdWVzdCwgdGhpbmtpbmcgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEaXZpbmcgaW50byB0aGUgVkxBTiBSZWNlaXZlIFBhdGgqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBpcyB0byB1bmRlcnN0YW5kIHRoZSBgdmxhbl9kb19yZWNlaXZlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC84MDIxcS92bGFuX2NvcmUuY2AgZmlsZS4gVGhpcyB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggVkxBTiAoVmlydHVhbCBMQU4pIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIGFuZCBtb3JlIHByZWNpc2VseSwgdGhlIGNvcmUgVkxBTiBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGhhcHBlbmluZyBkdXJpbmcgdGhlIHJlY2VpdmUgcGF0aC4gSSdtIGFzc3VtaW5nIHRoYXQgaXQgaXMgd2hhdCBJIHRoaW5rIGl0IGlzLCBob3dldmVyIEknbGwgbG9vayBpbnRvIGl0LiBUaGlzIG1lYW5zIEknbSBwcm9iYWJseSBsb29raW5nIGF0IGEgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGluY29taW5nIEV0aGVybmV0IGZyYW1lcyB0aGF0IGFyZSB0YWdnZWQgd2l0aCBhIFZMQU4gSUQuIEl0J3MgdGhlIHBvaW50IGluIHRoZSBzdGFjayB3aGVyZSB0aGUga2VybmVsIG5lZWRzIHRvIGRlY2lkZTogZG9lcyB0aGlzIGZyYW1lIGJlbG9uZyB0byB0aGUgY3VycmVudCBob3N0LCBvciBzaG91bGQgaXQgYmUgZm9yd2FyZGVkPyBXaGF0IG5lZWRzIHRvIGJlIGRvbmUgd2l0aCBpdD8gSXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgYXMgcGFydCBvZiB0aGUgcmVjZWl2ZSBwYXRoLCBhcyBvcHBvc2VkIHRvIHRoZSB0cmFuc21pdCBwYXRoPyBUaGUgZmlsZSBwYXRoIGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYW5kIEkga25vdyBleGFjdGx5IHdoZXJlIHRvIGxvb2sgZm9yIHRoaXMgZnVuY3Rpb24uIEtub3dpbmcgdGhpcyBmaWxlIGFuZCBmdW5jdGlvbiB3aWxsIGxldCBtZSB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlkZW50aWZpZXMsIGhhbmRsZXMgYW5kIGZpbHRlcnMgZnJhbWVzLCB3aGljaCB3aWxsIGdpdmUgbWUgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSB3aG9sZSBpbXBsZW1lbnRhdGlvbi4gSSB3aWxsIHN0YXJ0IGJ5IGZpZ3VyaW5nIG91dCB0aGUgY2FsbGluZyBjb252ZW50aW9ucyBhbmQgdGhlbiBsb29rIGZvciB0aGUgY3JpdGljYWwgcGFydHMgb2YgdGhlIHJlY2VpdmUgcHJvY2Vzcywgc3VjaCBhcyBmcmFtZSB2YWxpZGF0aW9uLCBWTEFOIElEIGV4dHJhY3Rpb24sIGFuZCBmaWx0ZXJpbmcgYmFzZWQgb24gcmVnaXN0ZXJlZCBWTEFOIGludGVyZmFjZXMuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGxpa2UgdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSBhbmQgYW55IFZMQU4tc3BlY2lmaWMgbWV0YWRhdGEgaXQgbWlnaHQgY2FycnkuIFVsdGltYXRlbHksIEknbSBleHBlY3RpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBlZmZpY2llbnRseSBzdGVlcnMgaW5jb21pbmcsIHRhZ2dlZCBFdGhlcm5ldCBmcmFtZXMgdG8gdGhlIGNvcnJlY3QgbmV0d29yayBpbnRlcmZhY2VzLCBhcyBpdCdzIGEgY3JpdGljYWwgY29tcG9uZW50IHRvIGFueSBuZXR3b3JrIGltcGxlbWVudGF0aW9uIHVzaW5nIFZMQU5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAyMywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEyOjEzLjI3NDk3ODcyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC84MDIxcS92bGFuX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICAgMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuICAgNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfdmxhbi5oXFx1MDAzZVxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldHBvbGwuaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvZ3JvLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXFwidmxhbi5oXFxcIlxcbiAgIDk6XFx0XFxuICAxMDpcXHRib29sIHZsYW5fZG9fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqKnNrYnApXFxuICAxMTpcXHR7XFxuICAxMjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnNrYnA7XFxuICAxMzpcXHRcXHRfX2JlMTYgdmxhbl9wcm90byA9IHNrYi1cXHUwMDNldmxhbl9wcm90bztcXG4gIDE0OlxcdFxcdHUxNiB2bGFuX2lkID0gc2tiX3ZsYW5fdGFnX2dldF9pZChza2IpO1xcbiAgMTU6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKnZsYW5fZGV2O1xcbiAgMTY6XFx0XFx0c3RydWN0IHZsYW5fcGNwdV9zdGF0cyAqcnhfc3RhdHM7XFxuICAxNzpcXHRcXG4gIDE4OlxcdFxcdHZsYW5fZGV2ID0gdmxhbl9maW5kX2Rldihza2ItXFx1MDAzZWRldiwgdmxhbl9wcm90bywgdmxhbl9pZCk7XFxuICAxOTpcXHRcXHRpZiAoIXZsYW5fZGV2KVxcbiAgMjA6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgMjE6XFx0XFxuICAyMjpcXHRcXHRza2IgPSAqc2ticCA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpO1xcbiAgMjM6XFx0XFx0aWYgKHVubGlrZWx5KCFza2IpKVxcbiAgMjQ6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgMjU6XFx0XFxuICAyNjpcXHRcXHRpZiAodW5saWtlbHkoISh2bGFuX2Rldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApKSkge1xcbiAgMjc6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICAyODpcXHRcXHRcXHQqc2ticCA9IE5VTEw7XFxuICAyOTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuICAzMDpcXHRcXHR9XFxuICAzMTpcXHRcXG4gIDMyOlxcdFxcdHNrYi1cXHUwMDNlZGV2ID0gdmxhbl9kZXY7XFxuICAzMzpcXHRcXHRpZiAodW5saWtlbHkoc2tiLVxcdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfT1RIRVJIT1NUKSkge1xcbiAgMzQ6XFx0XFx0XFx0LyogT3VyIGxvd2VyIGxheWVyIHRoaW5rcyB0aGlzIGlzIG5vdCBsb2NhbCwgbGV0J3MgbWFrZSBzdXJlLlxcbiAgMzU6XFx0XFx0XFx0ICogVGhpcyBhbGxvd3MgdGhlIFZMQU4gdG8gaGF2ZSBhIGRpZmZlcmVudCBNQUMgdGhhbiB0aGVcXG4gIDM2OlxcdFxcdFxcdCAqIHVuZGVybHlpbmcgZGV2aWNlLCBhbmQgc3RpbGwgcm91dGUgY29ycmVjdGx5LiAqL1xcbiAgMzc6XFx0XFx0XFx0aWYgKGV0aGVyX2FkZHJfZXF1YWxfNjRiaXRzKGV0aF9oZHIoc2tiKS1cXHUwMDNlaF9kZXN0LCB2bGFuX2Rldi1cXHUwMDNlZGV2X2FkZHIpKVxcbiAgMzg6XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2Vwa3RfdHlwZSA9IFBBQ0tFVF9IT1NUO1xcbiAgMzk6XFx0XFx0fVxcbiAgNDA6XFx0XFxuICA0MTpcXHRcXHRpZiAoISh2bGFuX2Rldl9wcml2KHZsYW5fZGV2KS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBWTEFOX0ZMQUdfUkVPUkRFUl9IRFIpIFxcdTAwMjZcXHUwMDI2XFxuICA0MjpcXHRcXHQgICAgIW5ldGlmX2lzX21hY3ZsYW5fcG9ydCh2bGFuX2RldikgXFx1MDAyNlxcdTAwMjZcXG4gIDQzOlxcdFxcdCAgICAhbmV0aWZfaXNfYnJpZGdlX3BvcnQodmxhbl9kZXYpKSB7XFxuICA0NDpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gc2tiLVxcdTAwM2VkYXRhIC0gc2tiX21hY19oZWFkZXIoc2tiKTtcXG4gIDQ1OlxcdFxcbiAgNDY6XFx0XFx0XFx0LypcXG4gIDQ3OlxcdFxcdFxcdCAqIHZsYW5faW5zZXJ0X3RhZyBleHBlY3Qgc2tiLVxcdTAwM2VkYXRhIHBvaW50aW5nIHRvIG1hYyBoZWFkZXIuXFxuICA0ODpcXHRcXHRcXHQgKiBTbyBjaGFuZ2Ugc2tiLVxcdTAwM2VkYXRhIGJlZm9yZSBjYWxsaW5nIGl0IGFuZCBjaGFuZ2UgYmFjayB0b1xcbiAgNDk6XFx0XFx0XFx0ICogb3JpZ2luYWwgcG9zaXRpb24gbGF0ZXJcXG4gIDUwOlxcdFxcdFxcdCAqL1xcbiAgNTE6XFx0XFx0XFx0c2tiX3B1c2goc2tiLCBvZmZzZXQpO1xcbiAgNTI6XFx0XFx0XFx0c2tiID0gKnNrYnAgPSB2bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCBza2ItXFx1MDAzZXZsYW5fcHJvdG8sXFxuICA1MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgc2tiLVxcdTAwM2V2bGFuX3RjaSwgc2tiLVxcdTAwM2VtYWNfbGVuKTtcXG4gIDU0OlxcdFxcdFxcdGlmICghc2tiKVxcbiAgNTU6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgNTY6XFx0XFx0XFx0c2tiX3B1bGwoc2tiLCBvZmZzZXQgKyBWTEFOX0hMRU4pO1xcbiAgNTc6XFx0XFx0XFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcXG4gIDU4OlxcdFxcdH1cXG4gIDU5OlxcdFxcbiAgNjA6XFx0XFx0c2tiLVxcdTAwM2Vwcmlvcml0eSA9IHZsYW5fZ2V0X2luZ3Jlc3NfcHJpb3JpdHkodmxhbl9kZXYsIHNrYi1cXHUwMDNldmxhbl90Y2kpO1xcbiAgNjE6XFx0XFx0X192bGFuX2h3YWNjZWxfY2xlYXJfdGFnKHNrYik7XFxuICA2MjpcXHRcXG4gIDYzOlxcdFxcdHJ4X3N0YXRzID0gdGhpc19jcHVfcHRyKHZsYW5fZGV2X3ByaXYodmxhbl9kZXYpLVxcdTAwM2V2bGFuX3BjcHVfc3RhdHMpO1xcbiAgNjQ6XFx0XFxuICA2NTpcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZyeF9zdGF0cy1cXHUwMDNlc3luY3ApO1xcbiAgNjY6XFx0XFx0dTY0X3N0YXRzX2luYyhcXHUwMDI2cnhfc3RhdHMtXFx1MDAzZXJ4X3BhY2tldHMpO1xcbiAgNjc6XFx0XFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2cnhfc3RhdHMtXFx1MDAzZXJ4X2J5dGVzLCBza2ItXFx1MDAzZWxlbik7XFxuICA2ODpcXHRcXHRpZiAoc2tiLVxcdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfTVVMVElDQVNUKVxcbiAgNjk6XFx0XFx0XFx0dTY0X3N0YXRzX2luYyhcXHUwMDI2cnhfc3RhdHMtXFx1MDAzZXJ4X211bHRpY2FzdCk7XFxuICA3MDpcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2cnhfc3RhdHMtXFx1MDAzZXN5bmNwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTI6MTMuMjc1MDY0ODVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDA2MjYzMjI0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZMQU4gVGFnIEluc2VydGlvbiBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIGB2bGFuX2luc2VydF9pbm5lcl90YWdgLiBJdCdzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBpbmxpbmUgZnVuY3Rpb246IHRha2VzIGEgc29ja2V0IGJ1ZmZlciAoYHNrYmApLCB0aGUgVkxBTiBwcm90b2NvbCwgdGhlIFZMQU4gVENJLCBhbmQgdGhlIE1BQyBsZW5ndGguIEl0cyBqb2IgaXMgdG8gaW5zZXJ0IGFuIGlubmVyIFZMQU4gdGFnLCBhbmQgaWYgaXQgZmFpbHMsIGl0IGZyZWVzIHRoZSBgc2tiYCBhbmQgcmV0dXJucyBgTlVMTGAuICBFc3NlbnRpYWxseSwgaXQncyBqdXN0IGEgd3JhcHBlciBhcm91bmQgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQgaXMgaW4gdGhlIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgZnVuY3Rpb24sIHdoaWNoLCBmcm9tIHRoZSBwYXRjaCwgc2VlbXMgdG8gaGF2ZSBoYWQgYSBjcnVjaWFsIGFkZGl0aW9uLiBJdCBub3cgaW5jbHVkZXMgYSBjaGVjayB1c2luZyBgcHNrYl9tYXlfcHVsbGAgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuIEl0J3MgdXNpbmcgYHBza2JfbWF5X3B1bGwoc2tiLCBtYWNfbGVuKWAuIFJpZ2h0LiBTbywgaXQncyB2ZXJpZnlpbmcgdGhhdCB0aGVyZSdzIGVub3VnaCBkYXRhIGF2YWlsYWJsZSBpbiB0aGUgc29ja2V0IGJ1ZmZlciAoYHNrYmApIHRvIHB1bGwgdGhlIGBtYWNfbGVuYCBieXRlcy4gSWYgaXQgZmFpbHMsIHJldHVybmluZyBgLUVJTlZBTGAuIFRoaXMgaXMgYSBjbGFzc2ljIGJ1ZmZlciBvdmVycmVhZCBwcm90ZWN0aW9uLiBUaGlzIGlzIGdvb2QuXG5cblNvLCB0aGlzIHBhdGNoIHByb2JhYmx5IGZpeGVkIGEgdnVsbmVyYWJpbGl0eSB3aGVyZSB0aGUgZnVuY3Rpb24gY291bGQgcG90ZW50aWFsbHkgcmVhZCBiZXlvbmQgdGhlIGFsbG9jYXRlZCBidWZmZXIgaWYgdGhlIGBtYWNfbGVuYCB3YXMgbGFyZ2VyIHRoYW4gdGhlIGF2YWlsYWJsZSBkYXRhIGluIHRoZSBzb2NrZXQgYnVmZmVyLCB3aGljaCBjb3VsZCBoYXZlIGxlZCB0byBhIGNyYXNoIG9yLCB3b3JzZSwgYSBzZWN1cml0eSBleHBsb2l0LiBJIHNob3VsZCBsb29rIGludG8gdGhlIGNvbW1pdCBtZXNzYWdlIG9yIHJlbGF0ZWQgYnVnIHJlcG9ydHMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCwgYnV0IHRoaXMgYWRkZWQgY2hlY2sgaXMgZGVmaW5pdGVseSBhIHNvbGlkIGRlZmVuc2l2ZSBtZWFzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY2OSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEyOjE3LjMzNzcwMDg2OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1NDAzMjk0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwc2tiX21heV9wdWxsXFxcXChza2IsIG1hY19sZW5cXFxcKVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD0zNjE9c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM2Ny1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDozNjg6XFx0aWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbikpKVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM2OS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTI6MTkuNDkxNzQ4MjkxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3Mzc3MTQ1MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGFuZCBpdHMgQ2FsbGVycyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgdGhlIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgZnVuY3Rpb24sIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBpbnNlcnRpbmcgYSBWTEFOIHRhZyBpbnRvIGEgc2tiLiBUaGUgY29yZSBvZiBpdCBpbnZvbHZlcyBwdXNoaW5nIHNwYWNlIG9udG8gdGhlIHNrYiwgc2hpZnRpbmcgZXhpc3RpbmcgTUFDIGhlYWRlciBkYXRhLCBhbmQgdGhlbiBwb3B1bGF0aW5nIHRoZSBuZXcgVkxBTiBoZWFkZXIuIFRoZSBjcnVjaWFsIHBhcnQgaGVyZSBpcyB0aGUgYWNjZXNzIHRvIGBza2ItXHUwMDNlZGF0YSArIG1hY19sZW4gLSBFVEhfSExFTmAuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBwb3RlbnRpYWwgZm9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIGRhdGEgY29ycnVwdGlvbi4gSWYgYG1hY19sZW5gIGlzIGdyZWF0ZXIgdGhhbiB0aGUgYW1vdW50IG9mIGRhdGEgY3VycmVudGx5IGluIHRoZSBza2IncyBsaW5lYXIgYnVmZmVyLCB0aGF0IGFjY2VzcyB3b3VsZCBiZSBpbGxlZ2FsLiBGb3J0dW5hdGVseSwgaXQgbG9va3MgbGlrZSBgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pYCBpcyB0aGVyZSBhcyBhIGd1YXJkLiBJdCBhcHBlYXJzIHRoYXQgaXQgZW5zdXJlcyB0aGF0IHRoZSBza2IgaGFzIHRoZSBuZWNlc3NhcnkgZGF0YSB0byBwZXJmb3JtIHRoZXNlIG9wZXJhdGlvbnMgc2FmZWx5LlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKnVzZWQqLiBJdCBsb29rcyBsaWtlIGl0IGlzIHJlYWNoYWJsZSBmcm9tIGEgZmV3IGtleSBhcmVhcyB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIEkgc2VlIGNvbm5lY3Rpb25zIGZyb20gYHRjZl9tcGxzX2FjdGAgKGxpa2VseSBmb3IgTVBMUyBvdmVyIFZMQU4pLCBgc2tiX3ZsYW5fcHVzaGAgKHRoZSBnZW5lcmFsIFZMQU4gcHVzaCBmdW5jdGlvbiksIHdoaWNoIGlzIGFsc28gYWNjZXNzZWQgYnkgQlBGLCBPVlMsIGFuZCBUQywgYHZsYW5fZG9fcmVjZWl2ZWAgKGltcG9ydGFudCBmb3IgVkxBTiBwYWNrZXQgcmVjZXB0aW9uKSwgYW5kIGV2ZW4gQkFUTUFOLWFkdi5cblxuQSBxdWljayBub3RlIHRvIG15c2VsZjogYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCBpcyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9pZl92bGFuLmhgLiBUaGlzIGlzIGltcG9ydGFudCBmb3Igc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMsIGJlY2F1c2UgSSdsbCBuZWVkIHRvIGZvY3VzIG9uIHRoZSBjYWxsZXIgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSwgYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMuIEluIHRoaXMgY2FzZSwgYHNrYl92bGFuX3B1c2hgIGlzIGEgZ29vZCBjYW5kaWRhdGUsIGFzIGl0IHNlZW1zIHRvIGJlIHRoZSBtYWluIGNhbGxlciBvZiBgX192bGFuX2luc2VydF9pbm5lcl90YWdgLiBJJ2xsIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ5NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxMjozNi44Njg4OTY0NzFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzMDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY0ODgsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY0ODg6XFx0ICovXFxuNjQ4OTpcXHRpbnQgc2tiX3ZsYW5fcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5fdGNpKVxcbjY0OTA6XFx0e1xcbjY0OTE6XFx0XFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHtcXG42NDkyOlxcdFxcdFxcdGludCBvZmZzZXQgPSBza2ItXFx1MDAzZWRhdGEgLSBza2JfbWFjX2hlYWRlcihza2IpO1xcbjY0OTM6XFx0XFx0XFx0aW50IGVycjtcXG42NDk0OlxcdFxcbjY0OTU6XFx0XFx0XFx0aWYgKFdBUk5fT05DRShvZmZzZXQsXFxuNjQ5NjpcXHRcXHRcXHRcXHQgICAgICBcXFwic2tiX3ZsYW5fcHVzaCBnb3Qgc2tiIHdpdGggc2tiLVxcdTAwM2VkYXRhIG5vdCBhdCBtYWMgaGVhZGVyIChvZmZzZXQgJWQpXFxcXG5cXFwiLFxcbjY0OTc6XFx0XFx0XFx0XFx0ICAgICAgb2Zmc2V0KSkge1xcbjY0OTg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNjQ5OTpcXHRcXHRcXHR9XFxuNjUwMDpcXHRcXG42NTAxOlxcdFxcdFxcdGVyciA9IF9fdmxhbl9pbnNlcnRfdGFnKHNrYiwgc2tiLVxcdTAwM2V2bGFuX3Byb3RvLFxcbjY1MDI6XFx0XFx0XFx0XFx0XFx0XFx0c2tiX3ZsYW5fdGFnX2dldChza2IpKTtcXG42NTAzOlxcdFxcdFxcdGlmIChlcnIpXFxuNjUwNDpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjY1MDU6XFx0XFxuNjUwNjpcXHRcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gc2tiLVxcdTAwM2V2bGFuX3Byb3RvO1xcbjY1MDc6XFx0XFx0XFx0c2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciAtPSBWTEFOX0hMRU47XFxuNjUwODpcXHRcXG42NTA5OlxcdFxcdFxcdHNrYl9wb3N0cHVzaF9yY3N1bShza2IsIHNrYi1cXHUwMDNlZGF0YSArICgyICogRVRIX0FMRU4pLCBWTEFOX0hMRU4pO1xcbjY1MTA6XFx0XFx0fVxcbjY1MTE6XFx0XFx0X192bGFuX2h3YWNjZWxfcHV0X3RhZyhza2IsIHZsYW5fcHJvdG8sIHZsYW5fdGNpKTtcXG42NTEyOlxcdFxcdHJldHVybiAwO1xcbjY1MTM6XFx0fVxcbjY1MTQ6XFx0RVhQT1JUX1NZTUJPTChza2Jfdmxhbl9wdXNoKTtcXG42NTE1OlxcdFxcbjY1MTY6XFx0LyoqXFxuNjUxNzpcXHQgKiBza2JfZXRoX3BvcCgpIC0gRHJvcCB0aGUgRXRoZXJuZXQgaGVhZGVyIGF0IHRoZSBoZWFkIG9mIGEgcGFja2V0XFxuNjUxODpcXHQgKlxcbjY1MTk6XFx0ICogQHNrYjogU29ja2V0IGJ1ZmZlciB0byBtb2RpZnlcXG42NTIwOlxcdCAqXFxuNjUyMTpcXHQgKiBEcm9wIHRoZSBFdGhlcm5ldCBoZWFkZXIgb2YgQHNrYi5cXG42NTIyOlxcdCAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEyOjM2Ljg2OTE0MTg4MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDgwNDI3OTQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBPYnNlcnZhdGlvbnMgb24gVkxBTiBUYWcgSW5zZXJ0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IFZMQU4gdGFncyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHRoZSBpbnNlcnRpb24gcHJvY2Vzcy4gSW4gYHNrYl92bGFuX3B1c2hgLCBpdCdzIGNsZWFyIHRoYXQgYF9fdmxhbl9pbnNlcnRfdGFnYCBpcyB0aGUgZnVuY3Rpb24gYmVpbmcgY2FsbGVkLCBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhhdCBgX192bGFuX2luc2VydF90YWdgIGlzIGEgc2ltcGxlIHdyYXBwZXIgZm9yIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AuIEJlY2F1c2UgaXQncyBhbiBpbmxpbmUgZnVuY3Rpb24sIEknbSBwcmV0dHkgc3VyZSBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGdldHMgaW5saW5lZCBkaXJlY3RseSBpbnRvIGBza2Jfdmxhbl9wdXNoYCwgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC5cblxuTm93LCBsZXQncyBicm9hZGVuIHRoZSBzY29wZS4gSSdsbCB0YWtlIGEgbG9vayBhdCBgdmxhbl9kb19yZWNlaXZlYCBpbiBgbmV0LzgwMjFxL3ZsYW5fY29yZS5jYC4gQXMgZXhwZWN0ZWQsIHRoaXMgY2FsbHMgYHZsYW5faW5zZXJ0X2lubmVyX3RhZ2AsIGFuZCB0aGF0IGluIHR1cm4gY2FsbHMgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC4gQW5kIGp1c3QgbGlrZSBiZWZvcmUsIHRoYXQgZnVuY3Rpb24gaXMgaW5saW5lZCwgc28gaXQgYXBwZWFycyBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGlzIGlubGluZWQgaGVyZSBhcyB3ZWxsLlxuXG5GaW5hbGx5LCBJJ2xsIHNoaWZ0IGdlYXJzIHRvIGBuZXQvc2NoZWQvYWN0X21wbHMuY2AsIHRvIGludmVzdGlnYXRlIGhvdyBgYWN0X21wbHNgIGludGVyYWN0cyB3aXRoIFZMQU4gdGFnZ2luZy4gVGhlIGNvZGUgaW4gdGhlcmUgY2FsbHMgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCBhcyB3ZWxsLiBTZWVtcyBsaWtlIEkgc2hvdWxkIGluc3BlY3QgYXJvdW5kIGxpbmUgOTAgdG8gc2VlIGV4YWN0bHkgaG93IGl0IHdvcmtzLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbnRleHQgb2YgdGhlIGNvZGUgdG8gZmlndXJlIG91dCBwcmVjaXNlbHkgd2hhdCBpdCdzIGRvaW5nIHdpdGggdGhpcyBpbm5lciB0YWcgaW5zZXJ0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODM4NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEyOjQ3LjY3MzQyNDI3NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvYWN0X21wbHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXHRcXHRcXHRcXHQgc2tiLVxcdTAwM2VkZXYgXFx1MDAyNlxcdTAwMjYgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSKSlcXG4gIDgxOlxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gIDgyOlxcdFxcdFxcdGJyZWFrO1xcbiAgODM6XFx0XFx0Y2FzZSBUQ0FfTVBMU19BQ1RfUFVTSDpcXG4gIDg0OlxcdFxcdFxcdG5ld19sc2UgPSB0Y2ZfbXBsc19nZXRfbHNlKE5VTEwsIHAsICFldGhfcF9tcGxzKHNrYl9wcm90b2NvbChza2IsIHRydWUpKSk7XFxuICA4NTpcXHRcXHRcXHRpZiAoc2tiX21wbHNfcHVzaChza2IsIG5ld19sc2UsIHAtXFx1MDAzZXRjZm1fcHJvdG8sIG1hY19sZW4sXFxuICA4NjpcXHRcXHRcXHRcXHRcXHQgIHNrYi1cXHUwMDNlZGV2IFxcdTAwMjZcXHUwMDI2IHNrYi1cXHUwMDNlZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUikpXFxuICA4NzpcXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuICA4ODpcXHRcXHRcXHRicmVhaztcXG4gIDg5OlxcdFxcdGNhc2UgVENBX01QTFNfQUNUX01BQ19QVVNIOlxcbiAgOTA6XFx0XFx0XFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHtcXG4gIDkxOlxcdFxcdFxcdFxcdGlmIChfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHNrYi1cXHUwMDNldmxhbl9wcm90byxcXG4gIDkyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBza2Jfdmxhbl90YWdfZ2V0KHNrYiksXFxuICA5MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgRVRIX0hMRU4pIFxcdTAwM2MgMClcXG4gIDk0OlxcdFxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gIDk1OlxcdFxcbiAgOTY6XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IHNrYi1cXHUwMDNldmxhbl9wcm90bztcXG4gIDk3OlxcdFxcdFxcdFxcdF9fdmxhbl9od2FjY2VsX2NsZWFyX3RhZyhza2IpO1xcbiAgOTg6XFx0XFx0XFx0fVxcbiAgOTk6XFx0XFxuIDEwMDpcXHRcXHRcXHRuZXdfbHNlID0gdGNmX21wbHNfZ2V0X2xzZShOVUxMLCBwLCBtYWNfbGVuIHx8XFxuIDEwMTpcXHRcXHRcXHRcXHRcXHRcXHQgICAhZXRoX3BfbXBscyhza2ItXFx1MDAzZXByb3RvY29sKSk7XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdFxcdGlmIChza2JfbXBsc19wdXNoKHNrYiwgbmV3X2xzZSwgcC1cXHUwMDNldGNmbV9wcm90bywgMCwgZmFsc2UpKVxcbiAxMDQ6XFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbiAxMDU6XFx0XFx0XFx0YnJlYWs7XFxuIDEwNjpcXHRcXHRjYXNlIFRDQV9NUExTX0FDVF9NT0RJRlk6XFxuIDEwNzpcXHRcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLFxcbiAxMDg6XFx0XFx0XFx0XFx0XFx0ICAgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikgKyBNUExTX0hMRU4pKVxcbiAxMDk6XFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbiAxMTA6XFx0XFx0XFx0bmV3X2xzZSA9IHRjZl9tcGxzX2dldF9sc2UobXBsc19oZHIoc2tiKSwgcCwgZmFsc2UpO1xcbiAxMTE6XFx0XFx0XFx0aWYgKHNrYl9tcGxzX3VwZGF0ZV9sc2Uoc2tiLCBuZXdfbHNlKSlcXG4gMTEyOlxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gMTEzOlxcdFxcdFxcdGJyZWFrO1xcbiAxMTQ6XFx0XFx0Y2FzZSBUQ0FfTVBMU19BQ1RfREVDX1RUTDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTI6NDcuNjczNTIyNDU2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQyODIwNDgwNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFZMQU4gVGFnIEluc2VydGlvbiBpbiB0aGUgS2VybmVsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIGZvY3VzZWQgb24gaG93IFZMQU4gdGFncyBhcmUgaW5zZXJ0ZWQgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBJIHNlZSBgdGNmX21wbHNfYWN0YCBkaXJlY3RseSBjYWxscyBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIOKAkyB0aGF0J3MgdGhlIGNvcmUgZnVuY3Rpb24uIEknbSBub3RpbmcgdGhlIHBhcmFtZXRlcnM6IHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlciksIHRoZSBWTEFOIHByb3RvY29sLCB0aGUgdGFnIGl0c2VsZiwgYW5kIGBFVEhfSExFTmAsIHRoZSBFdGhlcm5ldCBoZWFkZXIgbGVuZ3RoLiBJIGFsc28gc2VlIHRoYXQgYHZsYW5fZG9fcmVjZWl2ZWAgaW4gYG5ldC84MDIxcS92bGFuX2NvcmUuY2AgdXRpbGl6ZXMgYHZsYW5faW5zZXJ0X2lubmVyX3RhZ2AsIGJ1dCB3aXRoIGEgcG90ZW50aWFsbHkgdmFyaWFibGUgYG1hY19sZW5gLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuXG5cbkluIGB2bGFuX2RvX3JlY2VpdmVgLCB0aGUgYG1hY19sZW5gIHBhcmFtZXRlciBpcyBhIGZsYWcgZm9yIHBvdGVudGlhbCBpc3N1ZXMuIFRoZSBjb2RlIGNoZWNrcyB3aXRoIGBwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbilgIGJlZm9yZSBwcm9jZWVkaW5nLiBJZiB0aGF0IHB1bGwgZmFpbHMsIG1lYW5pbmcgdGhlIHBhY2tldCBpc24ndCBiaWcgZW5vdWdoLCBgdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCByZXR1cm5zIE5VTEwsIGVmZmVjdGl2ZWx5IGZyZWVpbmcgdGhlIGBza2JgIGFuZCByZXR1cm5pbmcgZmFsc2UuIFRoYXQncyBhIGdvb2Qgc2FmZWd1YXJkLCBidXQgaXQgaGlnaGxpZ2h0cyB0aGUgZGVwZW5kZW5jeSBvbiBgbWFjX2xlbmAgYmVpbmcgdmFsaWQuXG5cbk5vdywgY29tcGFyZSB0aGF0IHRvIGBza2Jfdmxhbl9wdXNoYC4gVGhpcyBmdW5jdGlvbiBjYWxscyBgX192bGFuX2luc2VydF90YWdgLCB3aGljaCwgYXMgd2Ugc2F3IGVhcmxpZXIsIHVsdGltYXRlbHkgY2FsbHMgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCBidXQgYWx3YXlzIHVzZXMgYEVUSF9ITEVOYC4gSWYgYHBza2JfbWF5X3B1bGwoc2tiLCBFVEhfSExFTilgIGZhaWxzIGhlcmUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIC1FSU5WQUwuIFRoYXQncyBhbm90aGVyIHNhZmV0eSBtZWFzdXJlLCBidXQgdGhlIGRpZmZlcmVuY2UgaW4gaGFuZGxpbmcgYmV0d2VlbiB0aGVzZSB0d28gY2FzZXMgaXMgd29ydGggcG9uZGVyaW5nLlxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb25zLiBgc2tiX3ZsYW5fcHVzaGAgcmVzaWRlcyBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBJbXBvcnRhbnRseSwgdGhpcyBjb2RlIGlzIGFsd2F5cyBidWlsdCBpZiBgQ09ORklHX05FVGAgaXMgZW5hYmxlZC4gVGhhdCdzIGEgZnVuZGFtZW50YWwgcGllY2Ugb2YgZnVuY3Rpb25hbGl0eS4gRm9yIGB2bGFuX2RvX3JlY2VpdmVgLCBJIHNlZSBpdCBsaXZlcyBpbiBgbmV0LzgwMjFxL3ZsYW5fY29yZS5jYCwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBgTWFrZWZpbGVgIG9yIEtjb25maWcgZmlsZXMgd2l0aGluIHRoYXQgZGlyZWN0b3J5LiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb25zIGFmZmVjdCBpdHMgY29tcGlsYXRpb24sIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3MjYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxMjo1MS45NTU1NzM1ODZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODQyMjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZsYW5fY29yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvODAyMXFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0LzgwMjFxL01ha2VmaWxlLTQtI1xcbm5ldC84MDIxcS9NYWtlZmlsZTo1Om9iai0kKHN1YnN0IG0seSwkKENPTkZJR19WTEFOXzgwMjFRKSlcXHQrPSB2bGFuX2NvcmUub1xcbm5ldC84MDIxcS9NYWtlZmlsZS02LW9iai0kKENPTkZJR19WTEFOXzgwMjFRKVxcdFxcdCs9IDgwMjFxLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTI6NTIuMDAzNDIzNDgyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUwNjA1ODg1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqSW52ZXN0aWdhdGluZyBWTEFOIGFuZCBNUExTIEludGVyYWN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gaG93IFZMQU5zIGFuZCBNUExTIGFyZSBwbGF5aW5nIHRvZ2V0aGVyLiBJIGtub3cgdGhhdCBgdmxhbl9jb3JlLm9gIGlzIGdvaW5nIHRvIGJlIGdvdmVybmVkIGJ5IGBDT05GSUdfVkxBTl84MDIxUWAuIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBmdW5kYW1lbnRhbCBWTEFOIGluZnJhc3RydWN0dXJlLiBOb3csIGdpdmVuIHRoYXQgY29udGV4dCwgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGlzc3VlIEknbSBsaWtlbHkgZGVidWdnaW5nLCBJIHRoaW5rIHRoZSBjcml0aWNhbCBwbGFjZSB0byBsb29rIGF0IGludGVyYWN0aW9ucyBpcyBpbiB0aGUgcXVldWluZyBkaXNjaXBsaW5lcywgYW5kIGhvdyB0aGUgTVBMUyBlbmNhcHN1bGF0aW9uIGFuZCBkZWNhcHN1bGF0aW9uIG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBWTEFOIHRhZ2dpbmcgYW5kIHVudGFnZ2luZyBpbnRlcmZhY2VzIHdpdGggTVBMUyBsYWJlbHMgaW4gdGhlIHRyYWZmaWMgc2hhcGluZyBhbmQgY2xhc3NpZmljYXRpb24gcHJvY2Vzc2VzLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBuZXQvc2NoZWQvYWN0X21wbHMuY2AgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBNUExTIGFjdGlvbnMuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBWTEFOLWF3YXJlIE1QTFMgaGFuZGxpbmcgd2lsbCBiZS4gTGV0J3Mgc2VlIGhvdyB0aGV5J3JlIGRlYWxpbmcgd2l0aCB0YWdnZWQgdnMuIHVudGFnZ2VkIGZyYW1lcyBpbiB0aGF0IGNvbnRleHQuIEl0J3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIGZvciB0aGUgaW50ZXJhY3Rpb24gdG8gYmUgaGFuZGxlZCwgb3IgdGhlIGJ1ZyB0byBiZSBsb2NhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDY5OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEyOjU3LjA2NDAxNTA3MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5OTEwODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWN0X21wbHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTgxOT1jb25maWcgTkVUX0FDVF9NUExTXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy04MjctXFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxubmV0L3NjaGVkL0tjb25maWc6ODI4OlxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9tcGxzLlxcbm5ldC9zY2hlZC9LY29uZmlnLTgyOS1cXG4tLVxcbm5ldC9zY2hlZC9NYWtlZmlsZT0yMD1vYmotJChDT05GSUdfTkVUX0FDVF9DU1VNKVxcdCs9IGFjdF9jc3VtLm9cXG5uZXQvc2NoZWQvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX05FVF9BQ1RfTVBMUylcXHQrPSBhY3RfbXBscy5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19ORVRfQUNUX1ZMQU4pXFx0Kz0gYWN0X3ZsYW4ub1xcbi0tXFxubmV0L3NjaGVkL2FjdF9tcGxzLmMtMTgtXFxubmV0L3NjaGVkL2FjdF9tcGxzLmM6MTk6c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9tcGxzX29wcztcXG5uZXQvc2NoZWQvYWN0X21wbHMuYy0yMC1cXG4tLVxcbm5ldC9zY2hlZC9hY3RfbXBscy5jPTE1OD1zdGF0aWMgaW50IHRjZl9tcGxzX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X21wbHMuYy0xNjIte1xcbm5ldC9zY2hlZC9hY3RfbXBscy5jOjE2MzpcXHRzdHJ1Y3QgdGNfYWN0aW9uX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGFjdF9tcGxzX29wcy5uZXRfaWQpO1xcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTE2NC1cXHRib29sIGJpbmQgPSBmbGFncyBcXHUwMDI2IFRDQV9BQ1RfRkxBR1NfQklORDtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTE5OC1cXHRpZiAoIWV4aXN0cykge1xcbm5ldC9zY2hlZC9hY3RfbXBscy5jOjE5OTpcXHRcXHRyZXQgPSB0Y2ZfaWRyX2NyZWF0ZSh0biwgaW5kZXgsIGVzdCwgYSwgXFx1MDAyNmFjdF9tcGxzX29wcywgYmluZCxcXG5uZXQvc2NoZWQvYWN0X21wbHMuYy0yMDAtXFx0XFx0XFx0XFx0ICAgICB0cnVlLCBmbGFncyk7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X21wbHMuYz0zODI9c3RhdGljIGludCB0Y2ZfbXBsc19vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X21wbHMuYy00NDAtXFxubmV0L3NjaGVkL2FjdF9tcGxzLmM6NDQxOnN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfbXBsc19vcHMgPSB7XFxubmV0L3NjaGVkL2FjdF9tcGxzLmMtNDQyLVxcdC5raW5kXFx0XFx0PVxcdFxcXCJtcGxzXFxcIixcXG4tLVxcbm5ldC9zY2hlZC9hY3RfbXBscy5jPTQ1ND1zdGF0aWMgX19uZXRfaW5pdCBpbnQgbXBsc19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3NjaGVkL2FjdF9tcGxzLmMtNDU1LXtcXG5uZXQvc2NoZWQvYWN0X21wbHMuYzo0NTY6XFx0c3RydWN0IHRjX2FjdGlvbl9uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCBhY3RfbXBsc19vcHMubmV0X2lkKTtcXG5uZXQvc2NoZWQvYWN0X21wbHMuYy00NTctXFxubmV0L3NjaGVkL2FjdF9tcGxzLmM6NDU4OlxcdHJldHVybiB0Y19hY3Rpb25fbmV0X2luaXQobmV0LCB0biwgXFx1MDAyNmFjdF9tcGxzX29wcyk7XFxubmV0L3NjaGVkL2FjdF9tcGxzLmMtNDU5LX1cXG4tLVxcbm5ldC9zY2hlZC9hY3RfbXBscy5jPTQ2MT1zdGF0aWMgdm9pZCBfX25ldF9leGl0IG1wbHNfZXhpdF9uZXQoc3RydWN0IGxpc3RfaGVhZCAqbmV0X2xpc3QpXFxubmV0L3NjaGVkL2FjdF9tcGxzLmMtNDYyLXtcXG5uZXQvc2NoZWQvYWN0X21wbHMuYzo0NjM6XFx0dGNfYWN0aW9uX25ldF9leGl0KG5ldF9saXN0LCBhY3RfbXBsc19vcHMubmV0X2lkKTtcXG5uZXQvc2NoZWQvYWN0X21wbHMuYy00NjQtfVxcbi0tXFxubmV0L3NjaGVkL2FjdF9tcGxzLmM9NDY2PXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgbXBsc19uZXRfb3BzID0ge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9tcGxzLmMtNDY4LVxcdC5leGl0X2JhdGNoID0gbXBsc19leGl0X25ldCxcXG5uZXQvc2NoZWQvYWN0X21wbHMuYzo0Njk6XFx0LmlkICAgPSBcXHUwMDI2YWN0X21wbHNfb3BzLm5ldF9pZCxcXG5uZXQvc2NoZWQvYWN0X21wbHMuYy00NzAtXFx0LnNpemUgPSBzaXplb2Yoc3RydWN0IHRjX2FjdGlvbl9uZXQpLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9tcGxzLmM9NDczPXN0YXRpYyBpbnQgX19pbml0IG1wbHNfaW5pdF9tb2R1bGUodm9pZClcXG5uZXQvc2NoZWQvYWN0X21wbHMuYy00NzQte1xcbm5ldC9zY2hlZC9hY3RfbXBscy5jOjQ3NTpcXHRyZXR1cm4gdGNmX3JlZ2lzdGVyX2FjdGlvbihcXHUwMDI2YWN0X21wbHNfb3BzLCBcXHUwMDI2bXBsc19uZXRfb3BzKTtcXG5uZXQvc2NoZWQvYWN0X21wbHMuYy00NzYtfVxcbi0tXFxubmV0L3NjaGVkL2FjdF9tcGxzLmM9NDc4PXN0YXRpYyB2b2lkIF9fZXhpdCBtcGxzX2NsZWFudXBfbW9kdWxlKHZvaWQpXFxubmV0L3NjaGVkL2FjdF9tcGxzLmMtNDc5LXtcXG5uZXQvc2NoZWQvYWN0X21wbHMuYzo0ODA6XFx0dGNmX3VucmVnaXN0ZXJfYWN0aW9uKFxcdTAwMjZhY3RfbXBsc19vcHMsIFxcdTAwMjZtcGxzX25ldF9vcHMpO1xcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTQ4MS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEyOjU3LjExMDAxMjI4NloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODI1MDY1NzE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byBWTEFOIEFjdGlvbiBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgVkxBTiBhY3Rpb24gaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBob3cgaXQncyBpbnRlZ3JhdGVkIGludG8gdHJhZmZpYyBjb250cm9sLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY2FsbCBjaGFpbiBhbmQgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucy4gTGV0J3Mgc2VlLi4uIHRoZSBjb2RlJ3MgcG9pbnRpbmcgbWUgdG93YXJkcyBgYWN0X3ZsYW4uY2AuIFJpZ2h0LCBzbyBgdGNmX3ZsYW5fYWN0YCBpcyB0aGUgY3J1Y2lhbCBmdW5jdGlvbiBoZXJlLCBhbmQgaXQncyBjYWxsaW5nIGBza2Jfdmxhbl9wdXNoYCB3aGVuIHRoZSBgYWN0aW9uYCBpcyBgVENBX1ZMQU5fQUNUX1BVU0hgLiBUaGlzIGlzIHdoZXJlIHRoZSBWTEFOIHRhZ2dpbmcgYWN0dWFsbHkgaGFwcGVucywgc28gdGhhdCdzIHRoZSBjb3JlLiBJIHNob3VsZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBgbmV0L3NjaGVkL2FjdF92bGFuLmNgIGZpbGUgdG8gdHJhY2UgdGhlIGJlaGF2aW9yLiBJIHdhbnQgdG8gZnVsbHkgdmlzdWFsaXplIHRoZSBhcmNoaXRlY3R1cmUsIHNvIEknbGwgY29udGludWUgdG8gZXhhbWluZSB0aGUgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgaW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjA2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTM6MTUuMzYwNjcxODM1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9hY3Rfdmxhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdFxcdHAgPSByY3VfZGVyZWZlcmVuY2VfYmgodi1cXHUwMDNldmxhbl9wKTtcXG4gIDQxOlxcdFxcbiAgNDI6XFx0XFx0c3dpdGNoIChwLVxcdTAwM2V0Y2Z2X2FjdGlvbikge1xcbiAgNDM6XFx0XFx0Y2FzZSBUQ0FfVkxBTl9BQ1RfUE9QOlxcbiAgNDQ6XFx0XFx0XFx0ZXJyID0gc2tiX3ZsYW5fcG9wKHNrYik7XFxuICA0NTpcXHRcXHRcXHRpZiAoZXJyKVxcbiAgNDY6XFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbiAgNDc6XFx0XFx0XFx0YnJlYWs7XFxuICA0ODpcXHRcXHRjYXNlIFRDQV9WTEFOX0FDVF9QVVNIOlxcbiAgNDk6XFx0XFx0XFx0ZXJyID0gc2tiX3ZsYW5fcHVzaChza2IsIHAtXFx1MDAzZXRjZnZfcHVzaF9wcm90bywgcC1cXHUwMDNldGNmdl9wdXNoX3ZpZCB8XFxuICA1MDpcXHRcXHRcXHRcXHRcXHQgICAgKHAtXFx1MDAzZXRjZnZfcHVzaF9wcmlvIFxcdTAwM2NcXHUwMDNjIFZMQU5fUFJJT19TSElGVCkpO1xcbiAgNTE6XFx0XFx0XFx0aWYgKGVycilcXG4gIDUyOlxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gIDUzOlxcdFxcdFxcdGJyZWFrO1xcbiAgNTQ6XFx0XFx0Y2FzZSBUQ0FfVkxBTl9BQ1RfTU9ESUZZOlxcbiAgNTU6XFx0XFx0XFx0LyogTm8tb3AgaWYgbm8gdmxhbiB0YWcgKGVpdGhlciBody1hY2NlbCBvciBpbi1wYXlsb2FkKSAqL1xcbiAgNTY6XFx0XFx0XFx0aWYgKCFza2Jfdmxhbl90YWdnZWQoc2tiKSlcXG4gIDU3OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAgNTg6XFx0XFx0XFx0LyogZXh0cmFjdCBleGlzdGluZyB0YWcgKGFuZCBndWFyYW50ZWUgbm8gaHctYWNjZWwgdGFnKSAqL1xcbiAgNTk6XFx0XFx0XFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHtcXG4gIDYwOlxcdFxcdFxcdFxcdHRjaSA9IHNrYl92bGFuX3RhZ19nZXQoc2tiKTtcXG4gIDYxOlxcdFxcdFxcdFxcdF9fdmxhbl9od2FjY2VsX2NsZWFyX3RhZyhza2IpO1xcbiAgNjI6XFx0XFx0XFx0fSBlbHNlIHtcXG4gIDYzOlxcdFxcdFxcdFxcdC8qIGluLXBheWxvYWQgdmxhbiB0YWcsIHBvcCBpdCAqL1xcbiAgNjQ6XFx0XFx0XFx0XFx0ZXJyID0gX19za2Jfdmxhbl9wb3Aoc2tiLCBcXHUwMDI2dGNpKTtcXG4gIDY1OlxcdFxcdFxcdFxcdGlmIChlcnIpXFxuICA2NjpcXHRcXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuICA2NzpcXHRcXHRcXHR9XFxuICA2ODpcXHRcXHRcXHQvKiByZXBsYWNlIHRoZSB2aWQgKi9cXG4gIDY5OlxcdFxcdFxcdHRjaSA9ICh0Y2kgXFx1MDAyNiB+VkxBTl9WSURfTUFTSykgfCBwLVxcdTAwM2V0Y2Z2X3B1c2hfdmlkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxMzoxNS4zNjA3NTczODZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Nzg0MzA1NjYzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogVkxBTiBIZWFkZXIgSW5zZXJ0aW9uKipcblxuT2theSwgdGhpcyBsb29rcyBwcm9taXNpbmcuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJdCdzIHRvdWNoaW5nIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzLCBzcGVjaWZpY2FsbHkgdGhlIFZMQU4gaGVhZGVyIGluc2VydGlvbiBoZWxwZXIsIGFuZCBpdCdzIHVzZWQgYWNyb3NzIHNldmVyYWwgbmV0d29ya2luZyBwYXRoczogcmVjZWl2ZSBhbmQgdHJhbnNtaXQsIFRDLCBPVlMsIGFuZCBCUEYuIFRoYXQgYWxvbmUgd2FycmFudHMgYSBjbG9zZXIgbG9vay5cblxuVGhlIGZhY3QgdGhhdCB0aGlzIGludHJvZHVjZXMgYSBuZXcgaW5wdXQgdmFsaWRhdGlvbiBjaGVjaywgYGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pKSkgcmV0dXJuIC1FSU5WQUw7YCwgaXMgYSBtYWpvciBmbGFnLiBJdCBtZWFucyB3ZSBoYXZlIGEgcG90ZW50aWFsIC1FSU5WQUwgcmV0dXJuLCB3aGljaCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgcGFja2V0IHJlamVjdGlvbiBvciBiZWhhdmlvciBjaGFuZ2VzIGlmIGBtYWNfbGVuYCBpc24ndCBoYW5kbGVkIGNvcnJlY3RseS4gVGhlIHJlYWNoYWJsZSBhdHRhY2sgc3VyZmFjZSBpcyBicm9hZCwgZW5jb21wYXNzaW5nIHN0YW5kYXJkIG5ldHdvcmsgaW50ZXJmYWNlcywgQlBGLCBUQywgVkxBTiwgT1ZTLCBhbmQgZXZlbiB0dW4vdGFwLiBUaGlzIHN1Z2dlc3RzIGEgaGlnaCBwcm9iYWJpbGl0eSBvZiBmaW5kaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZy5cblxuTGV0IG1lIHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzLiBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGlzIHN0YXRpYyBpbmxpbmUsIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvaWZfdmxhbi5oYC4gVGltZSB0byBjb25maXJtIHRoYXQgZ2NjL2NsYW5nIGFyZSBpbmxpbmluZyBpdCwgYW5kIHllcCwgdGhleSBhcmUuIFNvIG5vdyBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGNhbGxpbmcgaXQgb3IgYXJlIGV4ZXJjaXNpbmcgaXQgZGlyZWN0bHkuXG5cbkFmdGVyIGNoZWNraW5nLCBJIGZpbmQ6XG5cbjEuICBgc2tiX3ZsYW5fcHVzaGAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCB3aGljaCBjYWxscyBgX192bGFuX2luc2VydF90YWdgIHdoaWNoIGNhbGxzIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AuXG4yLiAgYHZsYW5fZG9fcmVjZWl2ZWAgaW4gYG5ldC84MDIxcS92bGFuX2NvcmUuY2Agd2hpY2ggY2FsbHMgYHZsYW5faW5zZXJ0X2lubmVyX3RhZ2Agd2hpY2ggY2FsbHMgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC5cbjMuICBgdGNmX21wbHNfYWN0YCBpbiBgbmV0L3NjaGVkL2FjdF9tcGxzLmNgIHdoaWNoIGNhbGxzIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgZGlyZWN0bHkuXG40LiAgYHRjZl92bGFuX2FjdGAgaW4gYG5ldC9zY2hlZC9hY3Rfdmxhbi5jYCBjYWxscyBgc2tiX3ZsYW5fcHVzaGAuXG41LiBgYnBmX3NrYl92bGFuX3B1c2hgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgaXMgYSBCUEYgaGVscGVyLlxuXG5TbywgYWxsIG9mIHRoZSBmdW5jdGlvbnMgd2l0aCB0aGUgbmFtZXMgdGhhdCBkb24ndCBzdGFydCB3aXRoIGBfX2AgYXJlIGNhbGxlZCBmcm9tIG90aGVyIGAuY2AgZmlsZXMsIGFuZCB0aGV5IGFyZSBub3QgYHN0YXRpYyBpbmxpbmVgLiBJJ2xsIHdhbnQgdG8gcmVtZW1iZXIgdGhlc2UuXG5cbk5vdywgbGV0J3MgZGV0ZXJtaW5lIHRoZSBwcmV2YWxlbmNlIG9mIHRoZXNlIGZ1bmN0aW9ucy4gYHNrYl92bGFuX3B1c2hgIGlzIHNwZWNpZmljIHRvIFZMQU4gcHVzaGluZyBvcGVyYXRpb25zIGluIFRDL0JQRi9PVlMuIGB2bGFuX2RvX3JlY2VpdmVgIGlzIGFsc28gc3BlY2lmaWMsIG9ubHkgZm9yIDgwMi4xUSBWTEFOIHBhY2tldCBwcm9jZXNzaW5nIG9uIHJlY2VpdmUuIEFuZCBgdGNmX21wbHNfYWN0YCBpcyBub24tdWJpcXVpdG91cywgc3BlY2lmaWMgdG8gdGhlIFRDIE1QTFMgYWN0aW9uLlxuXG5Gb3IgYHZsYW5fZG9fcmVjZWl2ZWAsIHRoZSBgQ09ORklHX1ZMQU5fODAyMVFgIEtjb25maWcgZGVwZW5kZW5jeSBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kIGZvciB0ZXN0aW5nLiBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQncyBlbmFibGVkIHdoZW4gSSdtIHJ1bm5pbmcgdGhpcyBmdXp6LiBOb3cgSSBuZWVkIHRvIGNoZWNrIGBuZXQvODAyMXEvS2NvbmZpZ2AgZm9yIHRoYXQgY29uZmlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjk5NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxMzoyMy4yMDM4MTY1MzJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0LzgwMjFxL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgQ29uZmlndXJhdGlvbiBmb3IgODAyLjFRIFZMQU4gc3VwcG9ydFxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgVkxBTl84MDIxUVxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIjgwMi4xUS84MDIuMWFkIFZMQU4gU3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgU2VsZWN0IHRoaXMgYW5kIHlvdSB3aWxsIGJlIGFibGUgdG8gY3JlYXRlIDgwMi4xUSBWTEFOIGludGVyZmFjZXNcXG4gIDEwOlxcdFxcdCAgb24geW91ciBFdGhlcm5ldCBpbnRlcmZhY2VzLiA4MDIuMVEgVkxBTiBzdXBwb3J0cyBhbG1vc3RcXG4gIDExOlxcdFxcdCAgZXZlcnl0aGluZyBhIHJlZ3VsYXIgRXRoZXJuZXQgaW50ZXJmYWNlIGRvZXMsIGluY2x1ZGluZ1xcbiAgMTI6XFx0XFx0ICBmaXJld2FsbGluZywgYnJpZGdpbmcsIGFuZCBvZiBjb3Vyc2UgSVAgdHJhZmZpYy4gWW91IHdpbGwgbmVlZFxcbiAgMTM6XFx0XFx0ICB0aGUgJ2lwJyB1dGlsaXR5IGluIG9yZGVyIHRvIGVmZmVjdGl2ZWx5IHVzZSBWTEFOcy5cXG4gIDE0OlxcdFxcdCAgU2VlIHRoZSBWTEFOIHdlYiBwYWdlIGZvciBtb3JlIGluZm9ybWF0aW9uOlxcbiAgMTU6XFx0XFx0ICBcXHUwMDNjaHR0cDovL3d3dy5jYW5kZWxhdGVjaC5jb20vfmdyZWVhci92bGFuLmh0bWxcXHUwMDNlXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDE4OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgODAyMXEuXFxuICAxOTpcXHRcXG4gIDIwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0Y29uZmlnIFZMQU5fODAyMVFfR1ZSUFxcbiAgMjM6XFx0XFx0Ym9vbCBcXFwiR1ZSUCAoR0FSUCBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFxcXCJcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gVkxBTl84MDIxUVxcbiAgMjU6XFx0XFx0c2VsZWN0IEdBUlBcXG4gIDI2OlxcdFxcdGhlbHBcXG4gIDI3OlxcdFxcdCAgU2VsZWN0IHRoaXMgdG8gZW5hYmxlIEdWUlAgZW5kLXN5c3RlbSBzdXBwb3J0LiBHVlJQIGlzIHVzZWQgZm9yXFxuICAyODpcXHRcXHQgIGF1dG9tYXRpYyBwcm9wYWdhdGlvbiBvZiByZWdpc3RlcmVkIFZMQU5zIHRvIHN3aXRjaGVzLlxcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEzOjIzLjIwMzg5NDYwMloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzkyODIxOTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzcGVjaWZpY2FsbHkgYENPTkZJR19WTEFOXzgwMjFRYC4gRnJvbSB3aGF0IEkgc2VlLCBpdCBkb2Vzbid0IGFwcGVhciB0byBoYXZlIGFueSB1bnVzdWFsIGRlcGVuZGVuY2llcyBiZXlvbmQgdGhlIHN0YW5kYXJkIGBORVRgIGRlcGVuZGVuY3ksIHdoaWNoIGlzIGZhaXJseSB0eXBpY2FsLiBOb3RoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnkgdGhlcmUuXG5cbk5vdywgbGV0J3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBDT05GSUdfTkVUX0FDVF9NUExTYCBpbiB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBhcm91bmQgbGluZSA4MTkgaW4gdGhhdCBmaWxlIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBjb250ZXh0IGFuZCBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvciBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBtb2R1bGVzLiBJdCdzIGFsd2F5cyBnb29kIHRvIHNlZSB0aGUgc3Vycm91bmRpbmcgS2NvbmZpZyBzdHJ1Y3R1cmUgdG8gYmUgc3VyZSBvZiBleGFjdGx5IGhvdyB0aGluZ3MgZml0IHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTIzNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTM6MjUuNTk2NzE5MDE0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MTU6XFx0XFxuIDgxNjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gODE3OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9jc3VtLlxcbiA4MTg6XFx0XFxuIDgxOTpcXHRjb25maWcgTkVUX0FDVF9NUExTXFxuIDgyMDpcXHRcXHR0cmlzdGF0ZSBcXFwiTVBMUyBtYW5pcHVsYXRpb25cXFwiXFxuIDgyMTpcXHRcXHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXFxuIDgyMjpcXHRcXHRoZWxwXFxuIDgyMzpcXHRcXHQgIFNheSBZIGhlcmUgdG8gcHVzaCBvciBwb3AgTVBMUyBoZWFkZXJzLlxcbiA4MjQ6XFx0XFxuIDgyNTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDgyNjpcXHRcXG4gODI3OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA4Mjg6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X21wbHMuXFxuIDgyOTpcXHRcXG4gODMwOlxcdGNvbmZpZyBORVRfQUNUX1ZMQU5cXG4gODMxOlxcdFxcdHRyaXN0YXRlIFxcXCJWbGFuIG1hbmlwdWxhdGlvblxcXCJcXG4gODMyOlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcXG4gODMzOlxcdFxcdGhlbHBcXG4gODM0OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBwdXNoIG9yIHBvcCB2bGFuIGhlYWRlcnMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEzOjI1LjU5NjgzOTEwNFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMzYzMzQ1NjI5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBWTEFOIGFuZCBNUExTIENvbmZpZ3VyYXRpb24gZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGUgZGVwZW5kZW5jaWVzOiBgQ09ORklHX05FVF9BQ1RfTVBMU2AgYW5kIGBDT05GSUdfTkVUX0FDVF9WTEFOYCBib3RoIHJlbHkgb24gYENPTkZJR19ORVRfQ0xTX0FDVGAuIFdlIGFsc28gaGF2ZSBgc2tiX3ZsYW5fcHVzaGAgcmVzaWRpbmcgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCwgd2hpY2ggaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX05FVD15YCwgYW5kIGBDT05GSUdfVkxBTl84MDIxUWAuIEdvdCBpdC5cblxuTm93LCBsZXQncyB2ZXJpZnkgb3VyIGBFbmFibGVDb25maWdzYDogYFZMQU5fODAyMVFgLCBgTkVUX0FDVF9NUExTYCwgYE5FVF9BQ1RfVkxBTmAsIGFuZCBgTkVUX0NMU19BQ1RgLiBUaG9zZSBsb29rIGNvcnJlY3QgYmFzZWQgb24gdGhlIGRlcGVuZGVuY2llcy5cblxuQWxyaWdodCwgd2hhdCBkbyB0aGVzZSBjb25maWd1cmF0aW9ucyAqYWN0dWFsbHkqIGVuYWJsZT8gYFZMQU5fODAyMVFgIGVuYWJsZXMgdGhlIGNvcmUgVkxBTiBjb2RlIChgdmxhbl9jb3JlLmNgKSBhbmQgODAyLjFRIHN1cHBvcnQuIGBORVRfQ0xTX0FDVGAgYW5kIGBORVRfQUNUX01QTFNgIGVuYWJsZSBNUExTIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLCBhbmQgYE5FVF9BQ1RfVkxBTmAgZW5hYmxlcyBWTEFOIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLiBNYWtlcyBzZW5zZS5cblxuTm93LCB0aGUgY3JpdGljYWwgcGFydC4gSSBuZWVkIHRvIGRlZmluZSB0aGUgYEZvY3VzU3ltYm9sc2AuIENhbiBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGJlIGxpc3RlZCBhcyBhIGZvY3VzIHN5bWJvbD8gTm8sIGl0IGNhbid0LCBiZWNhdXNlIGl0J3MgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvaWZfdmxhbi5oYC4gU2VjdGlvbiA0IGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgbGFjayBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGFuZCB0aHVzIGNhbid0IGJlIHRhcmdldGVkIGRpcmVjdGx5LiBUaGVyZWZvcmUsIEkgbmVlZCB0byBmb2N1cyBvbiAqY2FsbGVycyogb2YgdGhlIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24uXG5cblNvLCBpbnN0ZWFkIG9mIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AsIEknbSBnb2luZyB0byBsaXN0OlxuKiAgIGBza2Jfdmxhbl9wdXNoYFxuKiAgIGB2bGFuX2RvX3JlY2VpdmVgXG4qICAgYHRjZl9tcGxzX2FjdGBcbiogICBgdGNmX3ZsYW5fYWN0YFxuXG5OZXh0LCBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgbm9uZSBvZiB0aGVzZSBjYWxsZXJzIGFyZSAqdWJpcXVpdG91cyouIExldCdzIGNoZWNrOlxuXG4qICAgYHNrYl92bGFuX3B1c2hgOiBJdCdzIG9ubHkgY2FsbGVkIHdoZW4gcHVzaGluZyBhIFZMQU4gdGFnLCBmb3IgaW5zdGFuY2UsIG5lc3RlZCBWTEFOcyBvciBWTEFOIGFjdGlvbnMgdGhyb3VnaCB0YywgYnBmLCBvciBvdnMuIFRoYXQncyBub3QgdWJpcXVpdG91cy4gR29vZC5cbiogICBgdmxhbl9kb19yZWNlaXZlYDogSXQncyBvbmx5IGNhbGxlZCB3aGVuIHJlY2VpdmluZyBwYWNrZXRzIG9uIGEgVkxBTiBpbnRlcmZhY2UuIERlZmluaXRlbHkgbm90IHViaXF1aXRvdXMuXG4qICAgYHRjZl9tcGxzX2FjdGA6IE9ubHkgY2FsbGVkIGZvciBNUExTIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLiBOb3QgdWJpcXVpdG91cy5cbiogICBgdGNmX3ZsYW5fYWN0YDogT25seSBjYWxsZWQgZm9yIFZMQU4gdHJhZmZpYyBjb250cm9sIGFjdGlvbnMuIEFsc28sIG5vdCB1YmlxdWl0b3VzLlxuXG5FeGNlbGxlbnQuIEl0IHNlZW1zIEkgaGF2ZSBzZWxlY3RlZCBhIGdvb2QgbGlzdCBvZiBub24tdWJpcXVpdG91cyBmdW5jdGlvbnMuXG5cbklzIGZ1enppbmcgd2FycmFudGVkPyBBYnNvbHV0ZWx5LiBgV29ydGhGdXp6aW5nPXRydWVgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBpbnB1dCB2YWxpZGF0aW9uIGNoZWNrIChgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pYCkgaW4gYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBpbnNlcnRpbmcgaW5uZXIgVkxBTiB0YWdzLiBUaGlzIGhlbHBlciBpcyBjYWxsZWQgYnkgdml0YWwgbmV0d29ya2luZyBwYXRocywgaW5jbHVkaW5nIDgwMi4xUSBWTEFOIHBhY2tldCByZWNlcHRpb24gKGB2bGFuX2RvX3JlY2VpdmVgKSwgcGFja2V0IG1vZGlmaWNhdGlvbiB2aWEgQlBGL1RDL09WUyAoYHNrYl92bGFuX3B1c2hgLCBgdGNmX3ZsYW5fYWN0YCksIGFuZCBUQyBNUExTIGFjdGlvbnMgKGB0Y2ZfbXBsc19hY3RgKS4gSSBuZWVkIHRvIGZ1enogdGhpcyB0aG9yb3VnaGx5IHRvIHZlcmlmeSB0aGF0IHVudXN1YWwgb3IgbWFsZm9ybWVkIHBhY2tldHMgd2l0aCBub24tbGluZWFyIGhlYWRlcnMgcHJvcGVybHkgdHJpZ2dlciB0aGUgbmV3IGNoZWNrLCB3aXRoIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgZXJyb3JzLlxuXG5BbGwgY2hlY2tzIGFyZSBjbGVhciBhbmQgdGhlIHZlcmlmaWNhdGlvbiBpcyBjb21wbGV0ZS4gSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU3NzUsIk91dHB1dFRva2VucyI6MjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTM6MzkuMjMwMjk5MTIxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAzMTg2MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZMQU5fODAyMVFcIixcbiAgICBcIk5FVF9BQ1RfTVBMU1wiLFxuICAgIFwiTkVUX0FDVF9WTEFOXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl92bGFuX3B1c2hcIixcbiAgICBcInZsYW5fZG9fcmVjZWl2ZVwiLFxuICAgIFwidGNmX21wbHNfYWN0XCIsXG4gICAgXCJ0Y2Zfdmxhbl9hY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pIGNoZWNrIHRvIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKCkgaW4gaW5jbHVkZS9saW51eC9pZl92bGFuLmggdG8gZW5zdXJlIHN1ZmZpY2llbnQgaGVhZCBkYXRhIGlzIHB1bGxlZCBiZWZvcmUgaW5zZXJ0aW5nIGFuIGlubmVyIFZMQU4gdGFnLiBUaGlzIHJlYWNoYWJsZSBoZWxwZXIgaXMgZXhlcmNpc2VkIGJ5IGNvcmUgbmV0d29ya2luZyBwYXRocyBzdWNoIGFzIDgwMi4xUSByZWNlaXZlIHByb2Nlc3NpbmcgKHZsYW5fZG9fcmVjZWl2ZSksIFZMQU4gcHVzaCBvcGVyYXRpb25zIChza2Jfdmxhbl9wdXNoKSwgYW5kIFRDIGFjdGlvbnMgKHRjZl9tcGxzX2FjdCwgdGNmX3ZsYW5fYWN0KS4gRnV6emluZyBpcyB3b3J0aHdoaWxlIHRvIHRlc3QgYmVoYXZpb3Igd2l0aCBub24tbGluZWFyLCBmcmFnbWVudGVkLCBvciBtYWxmb3JtZWQgcGFja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWTEFOXzgwMjFRXCIsXG4gICAgXCJORVRfQUNUX01QTFNcIixcbiAgICBcIk5FVF9BQ1RfVkxBTlwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza2Jfdmxhbl9wdXNoXCIsXG4gICAgXCJ2bGFuX2RvX3JlY2VpdmVcIixcbiAgICBcInRjZl9tcGxzX2FjdFwiLFxuICAgIFwidGNmX3ZsYW5fYWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHBza2JfbWF5X3B1bGwoc2tiLCBtYWNfbGVuKSBjaGVjayB0byBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZygpIGluIGluY2x1ZGUvbGludXgvaWZfdmxhbi5oIHRvIGVuc3VyZSBzdWZmaWNpZW50IGhlYWQgZGF0YSBpcyBwdWxsZWQgYmVmb3JlIGluc2VydGluZyBhbiBpbm5lciBWTEFOIHRhZy4gVGhpcyByZWFjaGFibGUgaGVscGVyIGlzIGV4ZXJjaXNlZCBieSBjb3JlIG5ldHdvcmtpbmcgcGF0aHMgc3VjaCBhcyA4MDIuMVEgcmVjZWl2ZSBwcm9jZXNzaW5nICh2bGFuX2RvX3JlY2VpdmUpLCBWTEFOIHB1c2ggb3BlcmF0aW9ucyAoc2tiX3ZsYW5fcHVzaCksIGFuZCBUQyBhY3Rpb25zICh0Y2ZfbXBsc19hY3QsIHRjZl92bGFuX2FjdCkuIEZ1enppbmcgaXMgd29ydGh3aGlsZSB0byB0ZXN0IGJlaGF2aW9yIHdpdGggbm9uLWxpbmVhciwgZnJhZ21lbnRlZCwgb3IgbWFsZm9ybWVkIHBhY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEzOjM5LjMxMDYyNzQ4OFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0Mzk5OTQzNDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTM6MzkuMzExMTQyODA5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjg0Mzk5NDIyNjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIHVzaW5nIHBza2JfbWF5X3B1bGwoc2tiLCBtYWNfbGVuKSBpbiBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZygpIHRvIGVuc3VyZSB0aGF0IHRoZSBwYWNrZXQgYnVmZmVyIGNvbnRhaW5zIGF0IGxlYXN0IG1hY19sZW4gbGluZWFyIGJ5dGVzIGJlZm9yZSBwZXJmb3JtaW5nIGhlYWRlciBtYW5pcHVsYXRpb25zIChza2JfcG9zdHB1c2hfZGF0YV9tb3ZlIGFuZCB3cml0aW5nIHZsYW5fZXRoaGRyKS4gV2l0aG91dCB0aGlzIGNoZWNrLCBwYWNrZXRzIHNob3J0ZXIgdGhhbiBtYWNfbGVuIG9yIG5vbi1saW5lYXIgYnVmZmVycyBjb3VsZCBsZWFkIHRvIG91dC1vZi1ib3VuZHMgaGVhcCBhY2Nlc3NlcyAoT09CIHJlYWQvd3JpdGUpLCB3aGljaCBhcmUgZGlyZWN0bHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZSBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBidWZmZXJzLCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMzZkY2FhMWQ5NjdlYzJiNzJlYjQzNjVmNGJmODMzOTYzYjhkYmY0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTE6MTA6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oXG5pbmRleCAyMGNjMTZlYTRlNWFiLi40ODQ2MDMyYmY0ZmZjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pZl92bGFuLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oXG5AQCAtMzY1LDYgKzM2NSw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjb25zdCB1OCBtZXRhX2xlbiA9IG1hY19sZW4gXHUwMDNlIEVUSF9UTEVOID8gc2tiX21ldGFkYXRhX2xlbihza2IpIDogMDtcbiBcdHN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aDtcbiBcbitcdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgbWV0YV9sZW4gKyBWTEFOX0hMRU4pIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEzOjM5LjMxMTE0NDE2OVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzIyMjMxMDc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZMQU4gSW5zZXJ0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgc2VlIGl0J3MgdG91Y2hpbmcgYGluY2x1ZGUvbGludXgvaWZfdmxhbi5oYCwgc3BlY2lmaWNhbGx5IHRoZSBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGZ1bmN0aW9uLiBUaGUgY29kZSBzbmlwcGV0IGlzIHN0cmFpZ2h0Zm9yd2FyZCwgYWRkaW5nIGEgY2hlY2suIE5vdywgd2hlcmUgd2FzIHRoaXMgZnVuY3Rpb24gb3JpZ2luYWxseSBpbiB0aGUgcHJvamVjdD8gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmVhZCB0aGUgd2hvbGUgZmlsZSB0byBjb25maXJtIHdoYXQgdGhlIGludGVudGlvbiBvZiB0aGUgZnVuY3Rpb24gaXMsIGFuZCBhbHNvIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBjaGFuZ2UgZml0cyBpbi5cblxuVGhlIGFkZGVkIGBpZmAgc3RhdGVtZW50IHdpdGggYHBza2JfbWF5X3B1bGwoKWAgY2F0Y2hlcyBteSBleWUgaW1tZWRpYXRlbHkuIEl0IGxvb2tzIGxpa2Ugd2UncmUgYWRkaW5nIGEgc2FmZXR5IGNoZWNrIGJlZm9yZSBwb3RlbnRpYWxseSBtb2RpZnlpbmcgdGhlIFNLQi4gVGhpcyBpcyBnb29kIHByYWN0aWNlOyBwcmV2ZW50aW5nIGlzc3VlcyB3aXRoIGRhdGEgY29ycnVwdGlvbiBvciBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWx3YXlzIGEgd2luLiBUaGUgY2hlY2sgZW5zdXJlcyB0aGF0IHdlIGhhdmUgZW5vdWdoIGRhdGEgYXZhaWxhYmxlIGluIHRoZSBTS0IgdG8gd29yayB3aXRoIHRoZSBNQUMgaGVhZGVyLiBTbywgd2UncmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBzb21lIGtpbmQgb2YgVkxBTiB0YWdnaW5nIGluc2VydGlvbi4gV2UgaGF2ZSB0aGUgZGF0YSBsZW5ndGggb2YgTUFDIGhlYWRlciwgYW5kIGFsc28gYSBsZW5ndGggY2hlY2sgd2l0aCBgRVRIX1RMRU5gLlxuXG5JJ2xsIHF1aWNrbHkgcmVmZXJlbmNlIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLCBqdXN0IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCBzaG91bGQgYmUgcHJldHR5IHNhZmUgdG8gYXNzdW1lIHRoYXQgYHBza2JfbWF5X3B1bGwoKWAgaXMgYmVpbmcgdXNlZCBjb3JyZWN0bHksIGJ1dCwgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsaW5nIGNvbnRleHRzIGluIHRoZSBwcm9qZWN0LiBUaGUgYC1FSU5WQUxgIHJldHVybiBvbiBmYWlsdXJlIGlzIHN0YW5kYXJkIHByYWN0aWNlLCBpbmRpY2F0aW5nIGFuIGludmFsaWQgYXJndW1lbnQsIHNvIHRoYXQncyBnb29kLiBUaGUgY29tbWVudCBzaG91bGQgZXhwbGFpbiB0aGUgcmVhc29ucyBmb3IgZmFpbHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExNCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEzOjU2LjUzMzQ1NzI1OVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3Njg1NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX192bGFuX2luc2VydF9pbm5lcl90YWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9pZl92bGFuLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9pZl92bGFuLmg9MzM5PXN0YXRpYyBpbmxpbmUgYm9vbCB2bGFuX2h3X29mZmxvYWRfY2FwYWJsZShuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyxcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM0OS0vKipcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDozNTA6ICogX192bGFuX2luc2VydF9pbm5lcl90YWcgLSBpbm5lciBWTEFOIHRhZyBpbnNlcnRpbmdcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0zNTEtICogQHNrYjogc2tidWZmIHRvIHRhZ1xcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzYwLSAqL1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjM2MTpzdGF0aWMgaW5saW5lIGludCBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM2Mi1cXHRcXHRcXHRcXHRcXHQgIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl90Y2ksXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD00MTQ9c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQxNi17XFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDE3OlxcdHJldHVybiBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHZsYW5fcHJvdG8sIHZsYW5fdGNpLCBFVEhfSExFTik7XFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDE4LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTQzNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp2bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQ0My1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDo0NDQ6XFx0ZXJyID0gX192bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCB2bGFuX3Byb3RvLCB2bGFuX3RjaSwgbWFjX2xlbik7XFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDQ1LVxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTM6NTYuNTgxMjMyODY1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk3MDIxMTE3MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQ6XG5cbioqQW5hbHl6aW5nIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgLSBEaXZpbmcgaW50byB0aGUgQ29kZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzICpyZWFsbHkqIGdvaW5nIG9uIHdpdGggYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC4gVGhlIG5hbWUgc3VnZ2VzdHMgaXQncyByZWxhdGVkIHRvIFZMQU4gaW5zZXJ0aW9uLCBsaWtlbHkgYWRkaW5nIGFuIGlubmVyIFZMQU4gdGFnLCBzbyB0aGF0J3MgdGhlIGFyZWEgb2YgZm9jdXMuIE15IGZpcnN0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIExldCdzIHN0YXJ0IHdpdGggYSBkZWVwIGRpdmUgaW50byB0aGF0IGZ1bmN0aW9uLCB0aGUgYmVzdCB3YXkgdG8gZG8gdGhhdCBpcyB0byBoYXZlIGEgZ29vZCBsb29rIGF0IGl0IHdpdGggYHJlYWQtZmlsZWAuIEkgbmVlZCBhbGwgdGhlIGRldGFpbHMuIEkgd2FudCB0byBzZWUgdGhlIGFyZ3VtZW50cywgdGhlIGxvY2FsIHZhcmlhYmxlcywgZXZlcnkgc2luZ2xlIGxpbmUgb2YgdGhhdCBjb2RlLiBOb3RoaW5nIGxlc3MuIFRoZW4gSSdsbCBiZSBhYmxlIHRvIGNvbnNpZGVyIHRoZSBhbGdvcml0aG0sIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzLiBJIHdpbGwgYWxzbyBiZSBhYmxlIHRvIHJldmlldyB3aGF0IGFzc3VtcHRpb25zIGFyZSBtYWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTM0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTQ6MDYuMjgzMzQ4NloiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzNTAsXG4gIFwiTGluZUNvdW50XCI6IDY1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNTA6XFx0ICogX192bGFuX2luc2VydF9pbm5lcl90YWcgLSBpbm5lciBWTEFOIHRhZyBpbnNlcnRpbmdcXG4gMzUxOlxcdCAqIEBza2I6IHNrYnVmZiB0byB0YWdcXG4gMzUyOlxcdCAqIEB2bGFuX3Byb3RvOiBWTEFOIGVuY2Fwc3VsYXRpb24gcHJvdG9jb2xcXG4gMzUzOlxcdCAqIEB2bGFuX3RjaTogVkxBTiBUQ0kgdG8gaW5zZXJ0XFxuIDM1NDpcXHQgKiBAbWFjX2xlbjogTUFDIGhlYWRlciBsZW5ndGggaW5jbHVkaW5nIG91dGVyIHZsYW4gaGVhZGVyc1xcbiAzNTU6XFx0ICpcXG4gMzU2OlxcdCAqIEluc2VydHMgdGhlIFZMQU4gdGFnIGludG8gQHNrYiBhcyBwYXJ0IG9mIHRoZSBwYXlsb2FkIGF0IG9mZnNldCBtYWNfbGVuXFxuIDM1NzpcXHQgKiBEb2VzIG5vdCBjaGFuZ2Ugc2tiLVxcdTAwM2Vwcm90b2NvbCBzbyB0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGR1cmluZyByZWNlaXZlLlxcbiAzNTg6XFx0ICpcXG4gMzU5OlxcdCAqIFJldHVybnM6IGVycm9yIGlmIHNrYl9jb3dfaGVhZCBmYWlscy5cXG4gMzYwOlxcdCAqL1xcbiAzNjE6XFx0c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gMzYyOlxcdFxcdFxcdFxcdFxcdFxcdCAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSxcXG4gMzYzOlxcdFxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IG1hY19sZW4pXFxuIDM2NDpcXHR7XFxuIDM2NTpcXHRcXHRjb25zdCB1OCBtZXRhX2xlbiA9IG1hY19sZW4gXFx1MDAzZSBFVEhfVExFTiA/IHNrYl9tZXRhZGF0YV9sZW4oc2tiKSA6IDA7XFxuIDM2NjpcXHRcXHRzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZldGg7XFxuIDM2NzpcXHRcXG4gMzY4OlxcdFxcdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pKSlcXG4gMzY5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzNzA6XFx0XFxuIDM3MTpcXHRcXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgbWV0YV9sZW4gKyBWTEFOX0hMRU4pIFxcdTAwM2MgMClcXG4gMzcyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzNzM6XFx0XFxuIDM3NDpcXHRcXHRza2JfcHVzaChza2IsIFZMQU5fSExFTik7XFxuIDM3NTpcXHRcXG4gMzc2OlxcdFxcdC8qIE1vdmUgdGhlIG1hYyBoZWFkZXIgc2FucyBwcm90byB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXcgaGVhZGVyLiAqL1xcbiAzNzc6XFx0XFx0aWYgKGxpa2VseShtYWNfbGVuIFxcdTAwM2UgRVRIX1RMRU4pKVxcbiAzNzg6XFx0XFx0XFx0c2tiX3Bvc3RwdXNoX2RhdGFfbW92ZShza2IsIFZMQU5fSExFTiwgbWFjX2xlbiAtIEVUSF9UTEVOKTtcXG4gMzc5OlxcdFxcdGlmIChza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikpXFxuIDM4MDpcXHRcXHRcXHRza2ItXFx1MDAzZW1hY19oZWFkZXIgLT0gVkxBTl9ITEVOO1xcbiAzODE6XFx0XFxuIDM4MjpcXHRcXHR2ZXRoID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKShza2ItXFx1MDAzZWRhdGEgKyBtYWNfbGVuIC0gRVRIX0hMRU4pO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHQvKiBmaXJzdCwgdGhlIGV0aGVybmV0IHR5cGUgKi9cXG4gMzg1OlxcdFxcdGlmIChsaWtlbHkobWFjX2xlbiBcXHUwMDNlPSBFVEhfVExFTikpIHtcXG4gMzg2OlxcdFxcdFxcdC8qIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gc2hvdWxkIGFscmVhZHkgYmUgcG9wdWxhdGVkLCBhbmRcXG4gMzg3OlxcdFxcdFxcdCAqIHNrYi1cXHUwMDNlZGF0YSBoYXMgc3BhY2UgZm9yIGhfdmxhbl9wcm90b1xcbiAzODg6XFx0XFx0XFx0ICovXFxuIDM4OTpcXHRcXHRcXHR2ZXRoLVxcdTAwM2VoX3ZsYW5fcHJvdG8gPSB2bGFuX3Byb3RvO1xcbiAzOTA6XFx0XFx0fSBlbHNlIHtcXG4gMzkxOlxcdFxcdFxcdC8qIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gc2hvdWxkIG5vdCBiZSBwb3B1bGF0ZWQsIGFuZFxcbiAzOTI6XFx0XFx0XFx0ICogc2tiLVxcdTAwM2VkYXRhIGhhcyBubyBzcGFjZSBmb3IgaF92bGFuX3Byb3RvXFxuIDM5MzpcXHRcXHRcXHQgKi9cXG4gMzk0OlxcdFxcdFxcdHZldGgtXFx1MDAzZWhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gPSBza2ItXFx1MDAzZXByb3RvY29sO1xcbiAzOTU6XFx0XFx0fVxcbiAzOTY6XFx0XFxuIDM5NzpcXHRcXHQvKiBub3csIHRoZSBUQ0kgKi9cXG4gMzk4OlxcdFxcdHZldGgtXFx1MDAzZWhfdmxhbl9UQ0kgPSBodG9ucyh2bGFuX3RjaSk7XFxuIDM5OTpcXHRcXG4gNDAwOlxcdFxcdHJldHVybiAwO1xcbiA0MDE6XFx0fVxcbiA0MDI6XFx0XFxuIDQwMzpcXHQvKipcXG4gNDA0OlxcdCAqIF9fdmxhbl9pbnNlcnRfdGFnIC0gcmVndWxhciBWTEFOIHRhZyBpbnNlcnRpbmdcXG4gNDA1OlxcdCAqIEBza2I6IHNrYnVmZiB0byB0YWdcXG4gNDA2OlxcdCAqIEB2bGFuX3Byb3RvOiBWTEFOIGVuY2Fwc3VsYXRpb24gcHJvdG9jb2xcXG4gNDA3OlxcdCAqIEB2bGFuX3RjaTogVkxBTiBUQ0kgdG8gaW5zZXJ0XFxuIDQwODpcXHQgKlxcbiA0MDk6XFx0ICogSW5zZXJ0cyB0aGUgVkxBTiB0YWcgaW50byBAc2tiIGFzIHBhcnQgb2YgdGhlIHBheWxvYWRcXG4gNDEwOlxcdCAqIERvZXMgbm90IGNoYW5nZSBza2ItXFx1MDAzZXByb3RvY29sIHNvIHRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgZHVyaW5nIHJlY2VpdmUuXFxuIDQxMTpcXHQgKlxcbiA0MTI6XFx0ICogUmV0dXJuczogZXJyb3IgaWYgc2tiX2Nvd19oZWFkIGZhaWxzLlxcbiA0MTM6XFx0ICovXFxuIDQxNDpcXHRzdGF0aWMgaW5saW5lIGludCBfX3ZsYW5faW5zZXJ0X3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxNDowNi4yODM0NDU5NloiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4ODk3MTU5ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBWdWxuZXJhYmlsaXR5IGluIFZMQU4gVGFnIEluc2VydGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgaXQncyBhZGRpbmcgYSBWTEFOIHRhZyB0byB0aGUgYHNrYmAgKHNvY2tldCBidWZmZXIpLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlIHdhc24ndCB2ZXJpZnlpbmcgdGhhdCBlbm91Z2ggYnl0ZXMsIHNwZWNpZmljYWxseSBgbWFjX2xlbmAsIHdlcmUgYWN0dWFsbHkgcHJlc2VudCBpbiB0aGUgbGluZWFyIGJ1ZmZlciBvZiB0aGUgYHNrYmAgYmVmb3JlIHByb2NlZWRpbmcuIFRoZSBgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pYCBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byBndWFyYW50ZWUgdGhhdCBgc2tiLVx1MDAzZWRhdGFgIHRvIGBza2ItXHUwMDNldGFpbGAgY29udGFpbnMgYXQgbGVhc3QgdGhhdCBtYW55IGJ5dGVzLlxuXG5UaGUgY29yZSBvZiB0aGUgaXNzdWUgaXMgaGVyZTogaWYgYHBza2JfbWF5X3B1bGxgICpmYWlscyosIHRoZW4gb3BlcmF0aW9ucyBsaWtlIGBza2JfcG9zdHB1c2hfZGF0YV9tb3ZlKHNrYiwgVkxBTl9ITEVOLCBtYWNfbGVuIC0gRVRIX1RMRU4pYCBvciBhY2Nlc3NpbmcgYHNrYi1cdTAwM2VkYXRhICsgbWFjX2xlbiAtIEVUSF9ITEVOYCB3b3VsZCByZXN1bHQgaW4gYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIGJ1ZmZlciBvdmVyZmxvdy4gSW4gcGFydGljdWxhciwgdGhhdCBgc2tiX3Bvc3RwdXNoX2RhdGFfbW92ZWAgZnVuY3Rpb24gaXMgY2FsbGluZyBgbWVtbW92ZShza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWRhdGEgKyBWTEFOX0hMRU4sIG1hY19sZW4gLSBFVEhfVExFTik7YCBXaXRob3V0IGVuc3VyaW5nIHRoYXQgYHNrYi1cdTAwM2VkYXRhYCBoYXMgYXQgbGVhc3QgYG1hY19sZW5gIGJ5dGVzIHB1bGxlZCBpbnRvIHRoZSBsaW5lYXIgYnVmZmVyLCB0aGlzIGBtZW1tb3ZlYCBiZWNvbWVzIGEgcHJvYmxlbSBiZWNhdXNlIGl0J3MgcmVhZGluZyBvciB3cml0aW5nIHBhc3QgdGhlIGxpbmVhciBhcmVhIChPT0IgYWNjZXNzLCBoZWFwIGJ1ZmZlciBvdmVyZmxvdywgc2xhYi1vdXQtb2YtYm91bmRzLCBwb3RlbnRpYWxseSkuIFRoZSBvdGhlciBvcGVyYXRpb24gSSBzZWUgaXMgYHZldGggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopKHNrYi1cdTAwM2VkYXRhICsgbWFjX2xlbiAtIEVUSF9ITEVOKTtgLCBhbmQgdGhlbiBgdmV0aC1cdTAwM2VoX3ZsYW5fcHJvdG8gPSB2bGFuX3Byb3RvO2AgaXMgd3JpdGluZyB0byBgdmV0aGAuXG5cblNvLCB0aGUgbmV4dCBzdGVwIGlzIHRvIGRpZyBpbnRvIHRoZSBjb21taXQgaGlzdG9yeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoLCBpZiBhbnksIGlzIHN1cHBvc2VkIHRvIGJlIGFkZHJlc3NpbmcuIEknbGwgbmVlZCB0byB1c2UgYGdpdCBsb2dgIG9yIHBlcmhhcHMgYSBtb3JlIHRhcmdldGVkIGdyZXBwZXIgdG8gZmluZCByZWxhdGVkIGNvbW1pdHMgb3IgYW55IGluZm9ybWF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGlzc3VlIHRoYXQgdGhpcyBwb3RlbnRpYWwgZml4IGFkZHJlc3Nlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUyNiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjE0OjE1LjE4MDYwOTc0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM0MzA0NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBza2JfbWF5X3B1bGxcXFxcKHNrYiwgbWFjX2xlblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD0zNjE9c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM2Ny1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDozNjg6XFx0aWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbikpKVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM2OS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTQ6MTcuMzE0OTIxMTI0WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUzMDgyODYzMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBWTEFOIFRhZyBJbnNlcnRpb24gQ2FsbGVycyoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCBob3cgVkxBTiB0YWdzIGFyZSBpbnNlcnRlZCwgc3BlY2lmaWNhbGx5IGJ5IHRyYWNpbmcgdGhlIGNhbGxzIHRvIHRoZSByZWxldmFudCBmdW5jdGlvbnMuIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB0aGUgZnVuY3Rpb25zIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgYW5kIHRoZW4gYWxzbyB0aGUgZmFtaWxpZXMgb2YgYHZsYW5faW5zZXJ0X2lubmVyX3RhZ2AsIGBfX3ZsYW5faW5zZXJ0X3RhZ2AsIGFuZCBgdmxhbl9pbnNlcnRfdGFnYC4gV2UgbmVlZCB0byBtYXAgb3V0IHRoZSBjYWxsIHBhdGhzIHRvIHRoZXNlIGNvcmUgcm91dGluZXMgdG8gZ2FpbiBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBWTEFOIHRhZ2dpbmcgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBJJ20gdGhpbmtpbmcgd2UgY2FuIGdldCB0byB0aGUgcm9vdCBvZiBob3cgdGhlIHBhY2tldHMgYXJlIGJlaW5nIGNvbnN0cnVjdGVkLCBhbmQgaG93IHdlIGFyZSBidWlsZGluZyB0aGUgVkxBTiB0YWdzLCBhbmQgdGhlbiBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGluZWZmaWNpZW5jaWVzIGluIHRoZSBwcm9jZXNzLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gZm9sbG93IHRoZXNlIGNhbGxzIHRocm91Z2ggdGhlIHdob2xlIHN5c3RlbS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvZiB3aGVyZSB0aGUgVkxBTiBtYW5pcHVsYXRpb24gb2NjdXJzIGFuZCBob3cgZGlmZmVyZW50IGRyaXZlcnMgYW5kIG1vZHVsZXMgaW50ZXJhY3Qgd2l0aCB0aGUgVkxBTiBpbnNlcnRpb24gbG9naWMuIFRoZW4sIHdlIGNhbiBsb29rIGF0IHRoZSBkYXRhIGZsb3dzIGFuZCBhc3Nlc3MgcGVyZm9ybWFuY2UgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDc5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTQ6MjIuNjIzMjExMzQxWiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc1NzMwNzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZsYW5faW5zZXJ0X2lubmVyX3RhZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD0zMzk9c3RhdGljIGlubGluZSBib29sIHZsYW5faHdfb2ZmbG9hZF9jYXBhYmxlKG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzQ5LS8qKlxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjM1MDogKiBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyAtIGlubmVyIFZMQU4gdGFnIGluc2VydGluZ1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM1MS0gKiBAc2tiOiBza2J1ZmYgdG8gdGFnXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0zNjAtICovXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6MzYxOnN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzYyLVxcdFxcdFxcdFxcdFxcdCAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTQxND1zdGF0aWMgaW5saW5lIGludCBfX3ZsYW5faW5zZXJ0X3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDE2LXtcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDo0MTc6XFx0cmV0dXJuIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHNrYiwgdmxhbl9wcm90bywgdmxhbl90Y2ksIEVUSF9ITEVOKTtcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MTgtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDIwLS8qKlxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQyMTogKiB2bGFuX2luc2VydF9pbm5lcl90YWcgLSBpbm5lciBWTEFOIHRhZyBpbnNlcnRpbmdcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MjItICogQHNrYjogc2tidWZmIHRvIHRhZ1xcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDM2LSAqL1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQzNzpzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp2bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MzgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIF9fYmUxNiB2bGFuX3Byb3RvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDQzLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQ0NDpcXHRlcnIgPSBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHZsYW5fcHJvdG8sIHZsYW5fdGNpLCBtYWNfbGVuKTtcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00NDUtXFx0aWYgKGVycikge1xcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg9NDY4PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnZsYW5faW5zZXJ0X3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDcwLXtcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDo0NzE6XFx0cmV0dXJuIHZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHZsYW5fcHJvdG8sIHZsYW5fdGNpLCBFVEhfSExFTik7XFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDcyLX1cXG4tLVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYz0xMD1ib29sIHZsYW5fZG9fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqKnNrYnApXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtNTEtXFx0XFx0c2tiX3B1c2goc2tiLCBvZmZzZXQpO1xcbm5ldC84MDIxcS92bGFuX2NvcmUuYzo1MjpcXHRcXHRza2IgPSAqc2ticCA9IHZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHNrYi1cXHUwMDNldmxhbl9wcm90byxcXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtNTMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHNrYi1cXHUwMDNldmxhbl90Y2ksIHNrYi1cXHUwMDNlbWFjX2xlbik7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X21wbHMuYz01Mz1UQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX21wbHNfYWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X21wbHMuYy05MC1cXHRcXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkge1xcbm5ldC9zY2hlZC9hY3RfbXBscy5jOjkxOlxcdFxcdFxcdGlmIChfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHNrYi1cXHUwMDNldmxhbl9wcm90byxcXG5uZXQvc2NoZWQvYWN0X21wbHMuYy05Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgc2tiX3ZsYW5fdGFnX2dldChza2IpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxNDoyNC4xOTg5NTU3NjdaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjExMzg4NTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVkxBTiBUYWcgSW5zZXJ0aW9uIGluIHRoZSBOZXR3b3JrIFN0YWNrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IFZMQU4gdGFncyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHRoZSBpbnNlcnRpb24gcHJvY2Vzcy4gSSBzZWUgdGhhdCBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHR3byBpbnRlcmVzdGluZyBwbGFjZXM6IGBuZXQvc2NoZWQvYWN0X21wbHMuY2AsIHdoaWNoIGlzIGxpa2VseSByZWxhdGVkIHRvIE1QTFMgKE11bHRpcHJvdG9jb2wgTGFiZWwgU3dpdGNoaW5nKSB0cmFmZmljLCBhbmQgYG5ldC84MDIxcS92bGFuX2NvcmUuY2AgdGhyb3VnaCBgdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEknZCBleHBlY3QgZm9yIHN0YW5kYXJkIFZMQU4gY29yZSBmdW5jdGlvbmFsaXR5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2VlIGlmIGFueSB1bmV4cGVjdGVkIGNhbGxpbmcgcGF0dGVybnMgZW1lcmdlLlxuXG5Ob3csIGBfX3ZsYW5faW5zZXJ0X3RhZ2AgaXMgYWxzbyBjYWxsZWQgZWxzZXdoZXJlLCBub3QganVzdCBpbiB0aGlzIHNwZWNpZmljIGlubmVyIHRhZyBzY2VuYXJpby4gU28sIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUsIEkgbmVlZCB0byBjaGVjayB0aGUgYnJvYWRlciBjYWxsIGdyYXBoIG9mICpib3RoKiBgX192bGFuX2luc2VydF90YWdgIGFuZCBpdHMgd3JhcHBlciBmdW5jdGlvbiBgdmxhbl9pbnNlcnRfdGFnYC4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgZGlmZmVyZW50IGNvbnRleHRzIHdoZXJlIFZMQU4gdGFnIGluc2VydGlvbiBpcyB1c2VkIGFuZCBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsLiBJJ2xsIG5lZWQgdG8gdHJhY2UgYWxsIHBvdGVudGlhbCBjYWxsZXJzIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc3MSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxNDozMC4zMTI4NDQwMTdaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MDY2NTU2NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX192bGFuX2luc2VydF90YWdcXFxcYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Njc2kvcWVkaS9xZWRpX21haW4uYz02Njc9c3RhdGljIGludCBxZWRpX2xsMl9yeCh2b2lkICpjb29raWUsIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBhcmcxLCB1MzIgYXJnMilcXG4tLVxcbmRyaXZlcnMvc2NzaS9xZWRpL3FlZGlfbWFpbi5jLTcyMi1cXHRpZiAod29yay1cXHUwMDNldmxhbl9pZClcXG5kcml2ZXJzL3Njc2kvcWVkaS9xZWRpX21haW4uYzo3MjM6XFx0XFx0X192bGFuX2luc2VydF90YWcod29yay1cXHUwMDNlc2tiLCBodG9ucyhFVEhfUF84MDIxUSksIHdvcmstXFx1MDAzZXZsYW5faWQpO1xcbmRyaXZlcnMvc2NzaS9xZWRpL3FlZGlfbWFpbi5jLTcyNC1cXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTM2MT1zdGF0aWMgaW5saW5lIGludCBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDAzLS8qKlxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQwNDogKiBfX3ZsYW5faW5zZXJ0X3RhZyAtIHJlZ3VsYXIgVkxBTiB0YWcgaW5zZXJ0aW5nXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDA1LSAqIEBza2I6IHNrYnVmZiB0byB0YWdcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQxMy0gKi9cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDo0MTQ6c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MTUtXFx0XFx0XFx0XFx0ICAgIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl90Y2kpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz02NDg5PWludCBza2Jfdmxhbl9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl90Y2kpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02NTAwLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjY1MDE6XFx0XFx0ZXJyID0gX192bGFuX2luc2VydF90YWcoc2tiLCBza2ItXFx1MDAzZXZsYW5fcHJvdG8sXFxubmV0L2NvcmUvc2tidWZmLmMtNjUwMi1cXHRcXHRcXHRcXHRcXHRza2Jfdmxhbl90YWdfZ2V0KHNrYikpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxNDozMy4yMTk1MjE4NjJaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTcyOTQxNjY0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgYHZsYW5faW5zZXJ0X3RhZ2AqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGEgc3BlY2lmaWMgZnVuY3Rpb24sIGB2bGFuX2luc2VydF90YWdgLiBJdCdzIHdvcnRoIGRpZ2dpbmcgaW50bywgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgY3VycmVudCBjb250ZXh0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQsIHBhcnRpY3VsYXJseSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggVkxBTiB0YWdnaW5nLiBHaXZlbiBteSBleHBlcnRpc2UsIEnigJlsbCBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGl0LiBJIHdhbnQgdG8gcXVpY2tseSBldmFsdWF0ZSB0aGlzLCB0byBlbnN1cmUgbm8gaGlkZGVuIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY0NywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjE0OjM0Ljk0ODk0MTE2NVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3ODMyNTEzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXFxcYnZsYW5faW5zZXJ0X3RhZ1xcXFxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTQzNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp2bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQ1Mi0vKipcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDo0NTM6ICogdmxhbl9pbnNlcnRfdGFnIC0gcmVndWxhciBWTEFOIHRhZyBpbnNlcnRpbmdcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00NTQtICogQHNrYjogc2tidWZmIHRvIHRhZ1xcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDY3LSAqL1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQ2ODpzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp2bGFuX2luc2VydF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00NjktXFx0XFx0XFx0XFx0XFx0ICAgICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSlcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTQ4OD1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp2bGFuX2luc2VydF90YWdfc2V0X3Byb3RvKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00OTEte1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQ5MjpcXHRza2IgPSB2bGFuX2luc2VydF90YWcoc2tiLCB2bGFuX3Byb3RvLCB2bGFuX3RjaSk7XFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDkzLVxcdGlmIChza2IpXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9MTA9Ym9vbCB2bGFuX2RvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipza2JwKVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTQ2LVxcdFxcdC8qXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjQ3OlxcdFxcdCAqIHZsYW5faW5zZXJ0X3RhZyBleHBlY3Qgc2tiLVxcdTAwM2VkYXRhIHBvaW50aW5nIHRvIG1hYyBoZWFkZXIuXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTQ4LVxcdFxcdCAqIFNvIGNoYW5nZSBza2ItXFx1MDAzZWRhdGEgYmVmb3JlIGNhbGxpbmcgaXQgYW5kIGNoYW5nZSBiYWNrIHRvXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYz0zMzc9c3RhdGljIHZvaWQgYmF0YWR2X2JsYV9zZW5kX2NsYWltKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICptYWMsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYy00MjgtXFx0aWYgKHZpZCBcXHUwMDI2IEJBVEFEVl9WTEFOX0hBU19UQUcpIHtcXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYzo0Mjk6XFx0XFx0c2tiID0gdmxhbl9pbnNlcnRfdGFnKHNrYiwgaHRvbnMoRVRIX1BfODAyMVEpLFxcbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jLTQzMC1cXHRcXHRcXHRcXHQgICAgICB2aWQgXFx1MDAyNiBWTEFOX1ZJRF9NQVNLKTtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jPTExOTk9YmF0YWR2X2RhdF9hcnBfY3JlYXRlX3JlcGx5KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIF9fYmUzMiBpcF9zcmMsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy0xMjEyLVxcdGlmICh2aWQgXFx1MDAyNiBCQVRBRFZfVkxBTl9IQVNfVEFHKVxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jOjEyMTM6XFx0XFx0c2tiID0gdmxhbl9pbnNlcnRfdGFnKHNrYiwgaHRvbnMoRVRIX1BfODAyMVEpLFxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTEyMTQtXFx0XFx0XFx0XFx0ICAgICAgdmlkIFxcdTAwMjYgVkxBTl9WSURfTUFTSyk7XFxuLS1cXG5uZXQvZHNhL3RhZ184MDIxcS5jPTQ2ND1zdHJ1Y3Qgc2tfYnVmZiAqZHNhXzgwMjFxX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbm5ldC9kc2EvdGFnXzgwMjFxLmMtNDY3LVxcdC8qIHNrYi1cXHUwMDNlZGF0YSBwb2ludHMgYXQgdGhlIE1BQyBoZWFkZXIsIHdoaWNoIGlzIGZpbmVcXG5uZXQvZHNhL3RhZ184MDIxcS5jOjQ2ODpcXHQgKiBmb3Igdmxhbl9pbnNlcnRfdGFnKCkuXFxubmV0L2RzYS90YWdfODAyMXEuYy00NjktXFx0ICovXFxubmV0L2RzYS90YWdfODAyMXEuYzo0NzA6XFx0cmV0dXJuIHZsYW5faW5zZXJ0X3RhZyhza2IsIGh0b25zKHRwaWQpLCB0Y2kpO1xcbm5ldC9kc2EvdGFnXzgwMjFxLmMtNDcxLX1cXG4tLVxcbm5ldC9kc2EvdGFnX3NqYTExMDUuYz0yNDE9c3RhdGljIHN0cnVjdCBza19idWZmICpzamExMTA1X3B2aWRfdGFnX2NvbnRyb2xfcGt0KHN0cnVjdCBkc2FfcG9ydCAqZHAsXFxuLS1cXG5uZXQvZHNhL3RhZ19zamExMTA1LmMtMjYyLVxcbm5ldC9kc2EvdGFnX3NqYTExMDUuYzoyNjM6XFx0cmV0dXJuIHZsYW5faW5zZXJ0X3RhZyhza2IsIHhtaXRfdHBpZCwgKHBjcCBcXHUwMDNjXFx1MDAzYyBWTEFOX1BSSU9fU0hJRlQpIHxcXG5uZXQvZHNhL3RhZ19zamExMTA1LmMtMjY0LVxcdFxcdFxcdCAgICAgICBTSkExMTA1X0RFRkFVTFRfVkxBTik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjE0OjM2LjkyNzI3MzUwOFoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0OTkwMjM2OTk5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoJ3MgSW1wYWN0KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHVuZGVyc3RhbmQgdGhlIGJ1ZyBpdCdzIGFkZHJlc3NpbmcuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gd2hhdCB3YXMgYnJva2VuICpiZWZvcmUqIHRoZSBwYXRjaC4gU3BlY2lmaWNhbGx5LCBJJ20gZXhhbWluaW5nIHRoaXMgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCBmdW5jdGlvbiwgd2hpY2ggc2VlbXMgcmVzcG9uc2libGUgZm9yIGluamVjdGluZyBWTEFOIHRhZ3MgaW50byBhbiBgc2tfYnVmZmAuIFRoZSBjb2RlIHNuaXBwZXQncyBzdHJ1Y3R1cmUgaXMgZmFtaWxpYXIsIGJ1dCBJJ2xsIHdhbGsgdGhyb3VnaCBpdCBtZXRob2RpY2FsbHkuXG5cbkkgc2VlIGEgY2hlY2sgcmVsYXRlZCB0byBgbWFjX2xlbmAgYW5kIHRoZW4gdGhpcyBpbnRlcmVzdGluZyBgc2tiX3Bvc3RwdXNoX2RhdGFfbW92ZWAgY2FsbC4gVGhlIGludGVudCBvZiB0aGUgY29kZSBzZWVtcyB0byBiZSBwdXNoaW5nIGEgVkxBTiBoZWFkZXIgb250byB0aGUgYHNrYmAgYW5kIHRoZW4gc2hpZnRpbmcgYSBwb3J0aW9uIG9mIHRoZSBvcmlnaW5hbCBNQUMgaGVhZGVyLiBCdXQgdGhlcmUncyBhIGNvbmRpdGlvbiByZWxhdGVkIHRvIGBtYWNfbGVuYCBub3QgYmVpbmcgZnVsbHkgcHJlc2VudCBpbiB0aGUgbGluZWFyIGJ1ZmZlci4gSWYgYHNrYl9oZWFkbGVuKHNrYikgXHUwMDNjIG1hY19sZW5gLCB0aGVuIGBza2JfcG9zdHB1c2hfZGF0YV9tb3ZlYCBiZWNvbWVzIGNyaXRpY2FsLlxuXG5UbyB1bmRlcnN0YW5kIHRoZSBidWcsIEkgbmVlZCB0byBrbm93IHByZWNpc2VseSB3aGF0IGBza2JfcG9zdHB1c2hfZGF0YV9tb3ZlYCAqZG9lcyogdW5kZXIgdGhlc2UgcG90ZW50aWFsbHkgbm9uLWNvbnRpZ3VvdXMgYnVmZmVyIGNvbmRpdGlvbnMuIFRpbWUgdG8gYnJlYWsgb3V0IHRoZSBncmVwIGFuZCBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UgdG8gc2VlIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBkb2luZy4gVGhlIGJ1ZyBsaWtlbHkgaW52b2x2ZXMgaW5jb3JyZWN0IGFzc3VtcHRpb25zIGFib3V0IGRhdGEgbW92ZW1lbnQgaW4gdGhlc2Ugbm9uLWxpbmVhciBza2Igc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTcxLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjE1OjI2LjgyOTY0Njg1NVoiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2ODkxOTg2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2JfcG9zdHB1c2hfZGF0YV9tb3ZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTM2MT1zdGF0aWMgaW5saW5lIGludCBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzc3LVxcdGlmIChsaWtlbHkobWFjX2xlbiBcXHUwMDNlIEVUSF9UTEVOKSlcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDozNzg6XFx0XFx0c2tiX3Bvc3RwdXNoX2RhdGFfbW92ZShza2IsIFZMQU5fSExFTiwgbWFjX2xlbiAtIEVUSF9UTEVOKTtcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0zNzktXFx0aWYgKHNrYl9tYWNfaGVhZGVyX3dhc19zZXQoc2tiKSlcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NDYzMT1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX21ldGFkYXRhX2NsZWFyKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQ2NDctICpcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQ2NDg6ICogUHJlZmVyIHNrYl9wb3N0cHVsbF9kYXRhX21vdmUoKSBvciBza2JfcG9zdHB1c2hfZGF0YV9tb3ZlKCkgdG8gY2FsbGluZyB0aGlzXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NjQ5LSAqIGhlbHBlciBkaXJlY3RseS5cXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NDY4Nz1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Bvc3RwdWxsX2RhdGFfbW92ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00Njk1LS8qKlxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDY5NjogKiBza2JfcG9zdHB1c2hfZGF0YV9tb3ZlIC0gTW92ZSBwYWNrZXQgZGF0YSBhbmQgbWV0YWRhdGEgYWZ0ZXIgc2tiX3B1c2goKS5cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQ2OTctICogQHNrYjogcGFja2V0IHRvIG9wZXJhdGUgb25cXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNDcwMi0gKi9cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQ3MDM6c3RhdGljIGlubGluZSB2b2lkIHNrYl9wb3N0cHVzaF9kYXRhX21vdmUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQ3MDQtXFx0XFx0XFx0XFx0XFx0ICBjb25zdCB1bnNpZ25lZCBpbnQgbGVuLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MzM0ND1zdGF0aWMgaW50IGJwZl9za2JfZ2VuZXJpY19wdXNoKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmYsIHUzMiBsZW4pXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0zMzQ5LVxcdHNrYl9wdXNoKHNrYiwgbGVuKTtcXG5uZXQvY29yZS9maWx0ZXIuYzozMzUwOlxcdHNrYl9wb3N0cHVzaF9kYXRhX21vdmUoc2tiLCBsZW4sIG9mZik7XFxubmV0L2NvcmUvZmlsdGVyLmMtMzM1MS1cXHRtZW1zZXQoc2tiLVxcdTAwM2VkYXRhICsgb2ZmLCAwLCBsZW4pO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDA2Mj1zdGF0aWMgaW5saW5lIGludCBfX2JwZl9za2JfY2hhbmdlX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGhlYWRfcm9vbSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQwODYtXFx0XFx0X19za2JfcHVzaChza2IsIGhlYWRfcm9vbSk7XFxubmV0L2NvcmUvZmlsdGVyLmM6NDA4NzpcXHRcXHRza2JfcG9zdHB1c2hfZGF0YV9tb3ZlKHNrYiwgaGVhZF9yb29tLCAwKTtcXG5uZXQvY29yZS9maWx0ZXIuYy00MDg4LVxcdFxcdG1lbXNldChza2ItXFx1MDAzZWRhdGEsIDAsIGhlYWRfcm9vbSk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yMjc1PUVYUE9SVF9TWU1CT0woX19wc2tiX2NvcHlfZmNsb25lKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTIyOTItICpcXHROb3RlOiBJZiB5b3Ugc2tiX3B1c2goKSB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlciBhZnRlciByZWFsbG9jYXRpbmcgdGhlXFxubmV0L2NvcmUvc2tidWZmLmM6MjI5MzogKlxcdGhlYWRlciwgY2FsbCBza2JfcG9zdHB1c2hfZGF0YV9tb3ZlKCkgZmlyc3QgdG8gbW92ZSB0aGUgbWV0YWRhdGEgb3V0IG9mXFxubmV0L2NvcmUvc2tidWZmLmMtMjI5NC0gKlxcdHRoZSB3YXkgYmVmb3JlIHdyaXRpbmcgdG8gXFx1MDAyNnNrX2J1ZmYtXFx1MDAzZWRhdGEuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjE1OjI4LjY5ODU3Mjk5M1oiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNTEyNjkwNzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBza2JfcG9zdHB1c2hfZGF0YV9tb3ZlYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgY29uZmlybWluZyB0aGUgZGVmaW5pdGlvbiBvZiBgc2tiX3Bvc3RwdXNoX2RhdGFfbW92ZWAuIE5vIG5lZWQgdG8gcmVseSBvbiBhc3N1bXB0aW9ucyBvciBtZW1vcnkgaGVyZTsgSSdtIGhlYWRpbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSwgdGhlIGRlZmluaXRpdmUgYW5zd2VyOiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAuIFRoaXMgZnVuY3Rpb24ncyBiZWhhdmlvciBpcyBjcml0aWNhbCB0byBteSBjdXJyZW50IHRhc2ssIHNvIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIEkgaGF2ZSBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBpdCBkb2VzIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IGl0J3MgKnN1cHBvc2VkKiB0byBiZWhhdmUuIExldCdzIHNlZSB3aGF0IHRoZSBoZWFkZXIgaGFzIHRvIHNheSBhYm91dCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MzcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxNTozMS4yMTEyNjY2OThaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE1NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDcwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDcwMDpcXHQgKlxcbjQ3MDE6XFx0ICogU2VlIHNrYl9kYXRhX21vdmUoKSBmb3IgZGV0YWlscy5cXG40NzAyOlxcdCAqL1xcbjQ3MDM6XFx0c3RhdGljIGlubGluZSB2b2lkIHNrYl9wb3N0cHVzaF9kYXRhX21vdmUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG40NzA0OlxcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3QgdW5zaWduZWQgaW50IGxlbixcXG40NzA1OlxcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3QgdW5zaWduZWQgaW50IG4pXFxuNDcwNjpcXHR7XFxuNDcwNzpcXHRcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKGxlbiBcXHUwMDNlIElOVF9NQVgpO1xcbjQ3MDg6XFx0XFx0c2tiX2RhdGFfbW92ZShza2IsIC1sZW4sIG4pO1xcbjQ3MDk6XFx0fVxcbjQ3MTA6XFx0XFxuNDcxMTpcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2Nsb25lX3NrKHN0cnVjdCBza19idWZmICpza2IpO1xcbjQ3MTI6XFx0XFxuNDcxMzpcXHQjaWZkZWYgQ09ORklHX05FVFdPUktfUEhZX1RJTUVTVEFNUElOR1xcbjQ3MTQ6XFx0XFxuNDcxNTpcXHR2b2lkIHNrYl9jbG9uZV90eF90aW1lc3RhbXAoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuNDcxNjpcXHRib29sIHNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuNDcxNzpcXHRcXG40NzE4OlxcdCNlbHNlIC8qIENPTkZJR19ORVRXT1JLX1BIWV9USU1FU1RBTVBJTkcgKi9cXG40NzE5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxNTozMS4yMTE2OTM5NTlaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjA0MzQ2ODI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIGBza2JfZGF0YV9tb3ZlYCoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgc2tiX2RhdGFfbW92ZWAgYW5kIEkgd2FudCB0byB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0IGl0J3MgZG9pbmcuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgc291cmNlLiBMZXQgbWUgcHVsbCB1cCBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAgYW5kIHNjYW4gbGluZXMgNDY1MCB0byA0Njg2LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGVzZSBjb3JlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGhhdmUga2V5IGlubGluZSBkb2N1bWVudGF0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBjcnVjaWFsIGJpdHMgb2YgaW5mb3JtYXRpb246IGRvZXMgaXQgc2ltcGx5IG1vdmUgdGhlIGRhdGEgcG9pbnRlcj8gSXMgdGhlcmUgYW55IG1lbW9yeSBhbGxvY2F0aW9uIG9yIGZyZWVpbmcgaW52b2x2ZWQ/IERvZXMgaXQgY29uc2lkZXIgdGhlIHBhY2tldCdzIG1ldGFkYXRhIGFuZCBjb250cm9sIHRoZSBidWZmZXIncyByZWZlcmVuY2UgY291bnQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGZyb20gYSBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgcGVyc3BlY3RpdmUuIFRoaXMgcmVxdWlyZXMgYSB0aG9yb3VnaCBhbmFseXNpcyBvZiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgYHNrYmAgc3RydWN0dXJlLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW1wbGljYXRpb25zIGZvciBhbnkgb3RoZXIgcHJvY2Vzc2VzIHVzaW5nIHRoaXMgYHNrYmAuIEFscmlnaHQsIGxldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDY4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxNTozMy4yNTUxNjU5NDJaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzMDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDY1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDY1MDpcXHQgKi9cXG40NjUxOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZGF0YV9tb3ZlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IGludCBsZW4sXFxuNDY1MjpcXHRcXHRcXHRcXHRcXHQgY29uc3QgdW5zaWduZWQgaW50IG4pXFxuNDY1MzpcXHR7XFxuNDY1NDpcXHRcXHRjb25zdCB1OCBtZXRhX2xlbiA9IHNrYl9tZXRhZGF0YV9sZW4oc2tiKTtcXG40NjU1OlxcdFxcdHU4ICptZXRhLCAqbWV0YV9lbmQ7XFxuNDY1NjpcXHRcXG40NjU3OlxcdFxcdGlmICghbGVuIHx8ICghbiBcXHUwMDI2XFx1MDAyNiAhbWV0YV9sZW4pKVxcbjQ2NTg6XFx0XFx0XFx0cmV0dXJuO1xcbjQ2NTk6XFx0XFxuNDY2MDpcXHRcXHRpZiAoIW1ldGFfbGVuKVxcbjQ2NjE6XFx0XFx0XFx0Z290byBub19tZXRhZGF0YTtcXG40NjYyOlxcdFxcbjQ2NjM6XFx0XFx0bWV0YV9lbmQgPSBza2JfbWV0YWRhdGFfZW5kKHNrYik7XFxuNDY2NDpcXHRcXHRtZXRhID0gbWV0YV9lbmQgLSBtZXRhX2xlbjtcXG40NjY1OlxcdFxcbjQ2NjY6XFx0XFx0aWYgKFdBUk5fT05fT05DRShtZXRhX2VuZCArIGxlbiAhPSBza2ItXFx1MDAzZWRhdGEgfHxcXG40NjY3OlxcdFxcdFxcdFxcdCBtZXRhX2xlbiBcXHUwMDNlIHNrYl9oZWFkcm9vbShza2IpKSkge1xcbjQ2Njg6XFx0XFx0XFx0c2tiX21ldGFkYXRhX2NsZWFyKHNrYik7XFxuNDY2OTpcXHRcXHRcXHRnb3RvIG5vX21ldGFkYXRhO1xcbjQ2NzA6XFx0XFx0fVxcbjQ2NzE6XFx0XFxuNDY3MjpcXHRcXHRtZW1tb3ZlKG1ldGEgKyBsZW4sIG1ldGEsIG1ldGFfbGVuICsgbik7XFxuNDY3MzpcXHRcXHRyZXR1cm47XFxuNDY3NDpcXHRcXG40Njc1OlxcdG5vX21ldGFkYXRhOlxcbjQ2NzY6XFx0XFx0bWVtbW92ZShza2ItXFx1MDAzZWRhdGEsIHNrYi1cXHUwMDNlZGF0YSAtIGxlbiwgbik7XFxuNDY3NzpcXHR9XFxuNDY3ODpcXHRcXG40Njc5OlxcdC8qKlxcbjQ2ODA6XFx0ICogc2tiX3Bvc3RwdWxsX2RhdGFfbW92ZSAtIE1vdmUgcGFja2V0IGRhdGEgYW5kIG1ldGFkYXRhIGFmdGVyIHNrYl9wdWxsKCkuXFxuNDY4MTpcXHQgKiBAc2tiOiBwYWNrZXQgdG8gb3BlcmF0ZSBvblxcbjQ2ODI6XFx0ICogQGxlbjogbnVtYmVyIG9mIGJ5dGVzIHB1bGxlZCBmcm9tIFxcdTAwMjZza19idWZmLVxcdTAwM2VkYXRhXFxuNDY4MzpcXHQgKiBAbjogbnVtYmVyIG9mIGJ5dGVzIHRvIG1lbW1vdmUoKSBmcm9tIHByZS1wdWxsIFxcdTAwMjZza19idWZmLVxcdTAwM2VkYXRhXFxuNDY4NDpcXHQgKlxcbjQ2ODU6XFx0ICogU2VlIHNrYl9kYXRhX21vdmUoKSBmb3IgZGV0YWlscy5cXG40Njg2OlxcdCAqL1xcbjQ2ODc6XFx0c3RhdGljIGlubGluZSB2b2lkIHNrYl9wb3N0cHVsbF9kYXRhX21vdmUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG40Njg4OlxcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3QgdW5zaWduZWQgaW50IGxlbixcXG40Njg5OlxcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3QgdW5zaWduZWQgaW50IG4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjE1OjMzLjI1NTQzMTcwM1oiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMzk0MjQyMjgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyBpbiBWTEFOIEluc2VydGlvbioqXG5cbk9rYXksIHNvIGBza2JfZGF0YV9tb3ZlYCB1c2VzIGBtZW1tb3ZlYCwgYW5kIHRoaXMgY29kZSdzIGFjY2Vzc2luZyBgc2tiLVx1MDAzZWRhdGEgKyBtYWNfbGVuIC0gRVRIX0hMRU5gIHdoZW4gY29uc3RydWN0aW5nIHRoZSBWTEFOIGhlYWRlci4gSWYgYG1hY19sZW5gIGlzIGdyZWF0ZXIgdGhhbiBgc2tiX2hlYWRsZW4oc2tiKWAsIHdlJ3JlIHBvdGVudGlhbGx5IHJlYWRpbmcgb3Igd3JpdGluZyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIGxpbmVhciBidWZmZXIsIHBvc3NpYmx5IGludG8gdGhlIHRhaWxyb29tIG9yIGV2ZW4gaW50byBwYWdlZCBkYXRhLCB3aGljaCBpcyBhbiBPT0IgcmVhZCBvciB3cml0ZS4gS0FTQU4gc2hvdWxkIGNhdGNoIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9uIGBza2ItXHUwMDNlaGVhZGAsIGJ1dCBkb2VzIHRoaXMgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnkgc3BlY2lmaWNhbGx5P1xuXG5MZXQncyBsb29rIGF0IHRoZSBwcm92aWRlZCBjb2RlIGFnYWluOiBpdCBpbnRyb2R1Y2VzIGEgY2hlY2sgdXNpbmcgYHBza2JfbWF5X3B1bGwoc2tiLCBtYWNfbGVuKWAuICBEb2VzIHRoaXMgYWRkaXRpb24gZml4IG9yIHBvdGVudGlhbGx5IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXM/ICBgcHNrYl9tYXlfcHVsbChza2IsIGxlbilgIGNoZWNrcyBpZiBgbGVuYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHNrYl9oZWFkbGVuKHNrYilgLiBJZiBub3QsIGl0IGNhbGxzIGBfX3Bza2JfcHVsbF90YWlsYC4gSWYgdGhlIHRvdGFsIFNLQiBsZW5ndGggaXMgbGVzcyB0aGFuIGBsZW5gLCBgcHNrYl9tYXlfcHVsbGAgcmV0dXJucyAwLiBOb3csIGlmIHRoZSBwYXRjaCBjb25kaXRpb24gYCFwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbilgIGlzIHRydWUsIGl0IHJldHVybnMgYC1FSU5WQUxgLlxuXG5CZWZvcmUgdGhlIHBhdGNoLCBpZiB0aGUgU0tCIGRpZG4ndCBoYXZlIGVub3VnaCBsaW5lYXIgYnl0ZXMgKG9yIHdhcyBzaG9ydGVyIHRoYW4gYG1hY19sZW5gKSwgdGhlIGNvZGUgd291bGQgcHJvY2VlZCB0byBgc2tiX2Nvd19oZWFkYCBhbmQgYHNrYl9wdXNoYCwgYnV0IGFsc28gYWNjZXNzIG1lbW9yeSBhdCBgc2tiLVx1MDAzZWRhdGEgKyBtYWNfbGVuIC0gRVRIX0hMRU5gIG9yIHBlcmZvcm0gYG1lbW1vdmVgIHdpdGggYG1hY19sZW4gLSBFVEhfVExFTmAuICBJZiBgbWFjX2xlbmAgZXhjZWVkcyBgc2tiLVx1MDAzZWxlbmAsIGNvdWxkIHRoaXMgb3BlcmF0aW9uIHBvdGVudGlhbGx5IHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnk/XG5cblllcywgaWYgYG1hY19sZW4gXHUwMDNlIHNrYi1cdTAwM2VsZW5gIG9yIGBtYWNfbGVuIFx1MDAzZSBza2JfaGVhZGxlbihza2IpYC4gVGhlIGBza2ItXHUwMDNlZGF0YWAgcG9pbnRzIHRvIHRoZSBwYWNrZXQgZGF0YSBpbiB0aGUgYWxsb2NhdGVkIGhlYWQgYnVmZmVyIChlaXRoZXIga21hbGxvYydkIG9yIHBhZ2UgYWxsb2NhdGVkKS4gVGhlIG1lbW9yeSBiZXlvbmQgYHNrYi1cdTAwM2V0YWlsYCB3aXRoaW4gdGhpcyBhbGxvY2F0aW9uICh0YWlscm9vbSkgaXMgKnVuaW5pdGlhbGl6ZWQqLiAgV2FpdCwgaXMgdGFpbHJvb20gdW5pbml0aWFsaXplZCBtZW1vcnk/IElmIHRoZSBjb2RlIHJlYWRzIHBhc3QgYHNrYi1cdTAwM2V0YWlsYCB3aXRoaW4gdGhlIHNsYWIgYWxsb2NhdGlvbiwgb3IgcGFzdCB0aGUgZW5kIG9mIHRoZSBzbGFiLCB0aGVuIEtBU0FOIGNhdGNoZXMgaXQgd2l0aCBhIHNsYWItb3V0LW9mLWJvdW5kcyBvciBnbG9iYWwtb3V0LW9mLWJvdW5kcyByZWFkIGVycm9yLlxuXG5Pa2F5LCBLQVNBTiB0cmFja3MgYGttYWxsb2NgIG9iamVjdHMuICBgc2tiLVx1MDAzZXRhaWxgIGlzIGEgbG9naWNhbCBtYXJrZXIgd2l0aGluIHRoZSBza2IgZGF0YSBidWZmZXIgKGBza2ItXHUwMDNlaGVhZGAgdG8gYHNrYi1cdTAwM2VlbmRgKS4gRG9lcyBLQVNBTiBvciBLTVNBTiBjYXRjaCByZWFkcyB3aXRoaW4gdGhlIFNLQiB0YWlscm9vbT8gV2FpdC4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGhhbmRsZSB0aGUgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuXG5cbldhaXQsIHRoZSBwcm9tcHQgZGlmZmVyZW50aWF0ZXMgS0FTQU4gYW5kIEtNU0FOLiAgU3RhbmRhcmQgS0FTQU4gYWxyZWFkeSBoYXMgY29tcHJlaGVuc2l2ZSBkZWJ1Z2dpbmcgdG9vbHMuIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeS4gVGhlIHByb21wdCBzdGF0ZXMgdG8gb25seSB1c2UgS01TQU4gaWYgY29kZSBjaGFuZ2VzIGludHJvZHVjZSByaXNrcyAqb25seSogZGV0ZWN0ZWQgYnkgS01TQU4uICBUaGlzIGlzIGltcG9ydGFudC4gS01TQU4gaXMgZXhwZW5zaXZlLCBhbmQgc2hvdWxkIGJlIHRoZSBsYXN0IHJlc29ydC5cblxuVGhlIHJ1bGU6IE9ubHkgc2V0IGBOZWVkc0tNU0FOPXRydWVgIGlmIHRoZSBwYXRjaCBtb2RpZmllcyBrZXJuZWwgZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UsIGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGludm9sdmVzIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgYWx0ZXJzIGJvdW5kcyBjaGVja2luZyBpbiB3YXlzIHRoYXQgYWxsb3dzIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuICBXZSAqZG9uJ3QqIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgaWYgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgKEtBU0FOIGNhdGNoZXMgdGhlc2UpIG9yIGlmIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLlxuXG5MZXQncyBmb2N1cyBvbiB3aGF0IHRoZSBwYXRjaCBkb2VzLCBhZ2Fpbi4gVGhlIHBhdGNoIGFkZHMgYGlmICghcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pKSByZXR1cm4gLUVJTlZBTDtgLiBUaGlzIGlzIGEgc3RhbmRhcmQgYm91bmRzIGNoZWNrLiBXaHkgd2FzIHRoaXMgYWRkZWQ/IEl0J3MgbGlrZWx5IGEgc2FuaXR5IGNoZWNrLCBhIHNhZmV0eSBjaGVjayB0byBhdm9pZCBPT0IgcmVhZHMuICBJIG5lZWQgdG8gZmluZCB0aGUgdXBzdHJlYW0gY29tbWl0L2ZpeC9jb250ZXh0LiAgSSBjYW4ndCBydW4gYGdpdCBsb2dgLCBvbmx5IGBncmVwcGVyYC5cblxuSSBuZWVkIHRvIHNlZSBpZiBgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pYCBpcyB1c2VkIGVsc2V3aGVyZS4gSXMgdGhlcmUgY29udGV4dCBhdmFpbGFibGUgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IG9mIHRoZSBjaGVjaz9cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NzEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTY6MDcuMTk3ODU3NTkyWiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjkyMTE3NTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBza2JfbWF5X3B1bGxcXFxcKHNrYiwgLiptYWNfbGVuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTM2MT1zdGF0aWMgaW5saW5lIGludCBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzY3LVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjM2ODpcXHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBtYWNfbGVuKSkpXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzY5LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxNjowOS40ODk5ODI1NjZaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDU0MzYxNTE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBWTEFOIEluc2VydGlvbiBJc3N1ZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBoYXBwZW5pbmcgd2l0aCB0aGlzIGNvbW1pdC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBqb2cgbXkgbWVtb3J5IOKAkyB3aGF0IHdhcyB0aGUgY29tbWl0IGRpcmVjdGx5IGJlZm9yZSB0aGlzIG9uZT8gR290IGl0LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCB3aGVyZSBpcyBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGFjdHVhbGx5IGJlaW5nICp1c2VkKj8gVGltZSB0byB0cmFjZSB0aGF0IGZ1bmN0aW9uLiBBaCwgSSBzZWUgYSB1c2FnZSBpbiBgbmV0L3NjaGVkL2FjdF9tcGxzLmNgLiBMZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBmaWxlLlxuXG5Ib2xkIG9u4oCmIHNvbWV0aGluZydzIGNhdGNoaW5nIG15IGV5ZS4gVGhlcmUgaXQgaXMhIExpbmVzIDgwIHRvIDExMCBvZiBgbmV0L3NjaGVkL2FjdF9tcGxzLmNgIGFyZSB3aGVyZSB0aGUgYWN0aW9uIGlzIGhhcHBlbmluZy4gU3BlY2lmaWNhbGx5LCB3aXRoaW4gdGhlIGB0Y2ZfbXBsc19hY3RgIGZ1bmN0aW9uLiBUaGV5J3JlIGNoZWNraW5nIGlmIGEgVkxBTiB0YWcgaXMgcHJlc2VudCBvbiB0aGUgYHNrYmAuIElmIHNvLCB0aGV5J3JlIGF0dGVtcHRpbmcgdG8gaW5zZXJ0IGFuICppbm5lciogVkxBTiB0YWcgdXNpbmcgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBpbnNlcnRpb24sIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgTVBMUyBwcm9jZXNzaW5nIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIHRhZ3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIHRoaXMgY2FsbCBpcyBoYXBwZW5pbmcgaGVyZSwgYW5kIHdoYXQgdGhlIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzIGFyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3ODAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTY6MTQuMDMzNjAzMTE1WiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvYWN0X21wbHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXHRcXHRcXHRcXHQgc2tiLVxcdTAwM2VkZXYgXFx1MDAyNlxcdTAwMjYgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSKSlcXG4gIDgxOlxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gIDgyOlxcdFxcdFxcdGJyZWFrO1xcbiAgODM6XFx0XFx0Y2FzZSBUQ0FfTVBMU19BQ1RfUFVTSDpcXG4gIDg0OlxcdFxcdFxcdG5ld19sc2UgPSB0Y2ZfbXBsc19nZXRfbHNlKE5VTEwsIHAsICFldGhfcF9tcGxzKHNrYl9wcm90b2NvbChza2IsIHRydWUpKSk7XFxuICA4NTpcXHRcXHRcXHRpZiAoc2tiX21wbHNfcHVzaChza2IsIG5ld19sc2UsIHAtXFx1MDAzZXRjZm1fcHJvdG8sIG1hY19sZW4sXFxuICA4NjpcXHRcXHRcXHRcXHRcXHQgIHNrYi1cXHUwMDNlZGV2IFxcdTAwMjZcXHUwMDI2IHNrYi1cXHUwMDNlZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUikpXFxuICA4NzpcXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuICA4ODpcXHRcXHRcXHRicmVhaztcXG4gIDg5OlxcdFxcdGNhc2UgVENBX01QTFNfQUNUX01BQ19QVVNIOlxcbiAgOTA6XFx0XFx0XFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHtcXG4gIDkxOlxcdFxcdFxcdFxcdGlmIChfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHNrYi1cXHUwMDNldmxhbl9wcm90byxcXG4gIDkyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBza2Jfdmxhbl90YWdfZ2V0KHNrYiksXFxuICA5MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgRVRIX0hMRU4pIFxcdTAwM2MgMClcXG4gIDk0OlxcdFxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gIDk1OlxcdFxcbiAgOTY6XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IHNrYi1cXHUwMDNldmxhbl9wcm90bztcXG4gIDk3OlxcdFxcdFxcdFxcdF9fdmxhbl9od2FjY2VsX2NsZWFyX3RhZyhza2IpO1xcbiAgOTg6XFx0XFx0XFx0fVxcbiAgOTk6XFx0XFxuIDEwMDpcXHRcXHRcXHRuZXdfbHNlID0gdGNmX21wbHNfZ2V0X2xzZShOVUxMLCBwLCBtYWNfbGVuIHx8XFxuIDEwMTpcXHRcXHRcXHRcXHRcXHRcXHQgICAhZXRoX3BfbXBscyhza2ItXFx1MDAzZXByb3RvY29sKSk7XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdFxcdGlmIChza2JfbXBsc19wdXNoKHNrYiwgbmV3X2xzZSwgcC1cXHUwMDNldGNmbV9wcm90bywgMCwgZmFsc2UpKVxcbiAxMDQ6XFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbiAxMDU6XFx0XFx0XFx0YnJlYWs7XFxuIDEwNjpcXHRcXHRjYXNlIFRDQV9NUExTX0FDVF9NT0RJRlk6XFxuIDEwNzpcXHRcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLFxcbiAxMDg6XFx0XFx0XFx0XFx0XFx0ICAgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikgKyBNUExTX0hMRU4pKVxcbiAxMDk6XFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbiAxMTA6XFx0XFx0XFx0bmV3X2xzZSA9IHRjZl9tcGxzX2dldF9sc2UobXBsc19oZHIoc2tiKSwgcCwgZmFsc2UpO1xcbiAxMTE6XFx0XFx0XFx0aWYgKHNrYl9tcGxzX3VwZGF0ZV9sc2Uoc2tiLCBuZXdfbHNlKSlcXG4gMTEyOlxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gMTEzOlxcdFxcdFxcdGJyZWFrO1xcbiAxMTQ6XFx0XFx0Y2FzZSBUQ0FfTVBMU19BQ1RfREVDX1RUTDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTY6MTQuMDMzNzgwNTU1WiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY0NzY2MTMwNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWTEFOIENvcmUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBWTEFOIGNvcmUgZnVuY3Rpb25hbGl0eSwgc28gbGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBuZXQvODAyMXEvdmxhbl9jb3JlLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB6ZXJvIGluIG9uIGxpbmVzIDQwIHRocm91Z2ggNjUuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBjaHVuayBvZiBjb2RlIHRvIHJlZnJlc2guIEhvcGVmdWxseSwgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIHNlY3Rpb24gSSBuZWVkIG9uIGhvdyB0aGluZ3MgYXJlIGhhbmRsZWQuIFRpbWUgdG8gb3BlbiB0aGUgZmlsZSBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEkgZXhwZWN0IGl0IHRvIGluY2x1ZGUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9uIGNhbGxzIHJlbGF0ZWQgdG8gVkxBTiB0YWdnaW5nIGFuZCB1bnRhZ2dpbmcsIG9yIGF0IGxlYXN0IGhvdyB0aGUgVkxBTiBjb3JlIGhhbmRsZXMgdGhlIGluc2VydGlvbiBhbmQgcmVtb3ZhbCBvZiB0aGUgODAyLjFRIHRhZy4gTGV0J3Mgc2VlIGlmIG15IG1lbnRhbCBtb2RlbCBsaW5lcyB1cCB3aXRoIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkzNiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTY6MjAuNTEwMzk2ODNaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0LzgwMjFxL3ZsYW5fY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdFxcbiAgNDE6XFx0XFx0aWYgKCEodmxhbl9kZXZfcHJpdih2bGFuX2RldiktXFx1MDAzZWZsYWdzIFxcdTAwMjYgVkxBTl9GTEFHX1JFT1JERVJfSERSKSBcXHUwMDI2XFx1MDAyNlxcbiAgNDI6XFx0XFx0ICAgICFuZXRpZl9pc19tYWN2bGFuX3BvcnQodmxhbl9kZXYpIFxcdTAwMjZcXHUwMDI2XFxuICA0MzpcXHRcXHQgICAgIW5ldGlmX2lzX2JyaWRnZV9wb3J0KHZsYW5fZGV2KSkge1xcbiAgNDQ6XFx0XFx0XFx0dW5zaWduZWQgaW50IG9mZnNldCA9IHNrYi1cXHUwMDNlZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHNrYik7XFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdFxcdC8qXFxuICA0NzpcXHRcXHRcXHQgKiB2bGFuX2luc2VydF90YWcgZXhwZWN0IHNrYi1cXHUwMDNlZGF0YSBwb2ludGluZyB0byBtYWMgaGVhZGVyLlxcbiAgNDg6XFx0XFx0XFx0ICogU28gY2hhbmdlIHNrYi1cXHUwMDNlZGF0YSBiZWZvcmUgY2FsbGluZyBpdCBhbmQgY2hhbmdlIGJhY2sgdG9cXG4gIDQ5OlxcdFxcdFxcdCAqIG9yaWdpbmFsIHBvc2l0aW9uIGxhdGVyXFxuICA1MDpcXHRcXHRcXHQgKi9cXG4gIDUxOlxcdFxcdFxcdHNrYl9wdXNoKHNrYiwgb2Zmc2V0KTtcXG4gIDUyOlxcdFxcdFxcdHNrYiA9ICpza2JwID0gdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHNrYiwgc2tiLVxcdTAwM2V2bGFuX3Byb3RvLFxcbiAgNTM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHNrYi1cXHUwMDNldmxhbl90Y2ksIHNrYi1cXHUwMDNlbWFjX2xlbik7XFxuICA1NDpcXHRcXHRcXHRpZiAoIXNrYilcXG4gIDU1OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gIDU2OlxcdFxcdFxcdHNrYl9wdWxsKHNrYiwgb2Zmc2V0ICsgVkxBTl9ITEVOKTtcXG4gIDU3OlxcdFxcdFxcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XFxuICA1ODpcXHRcXHR9XFxuICA1OTpcXHRcXG4gIDYwOlxcdFxcdHNrYi1cXHUwMDNlcHJpb3JpdHkgPSB2bGFuX2dldF9pbmdyZXNzX3ByaW9yaXR5KHZsYW5fZGV2LCBza2ItXFx1MDAzZXZsYW5fdGNpKTtcXG4gIDYxOlxcdFxcdF9fdmxhbl9od2FjY2VsX2NsZWFyX3RhZyhza2IpO1xcbiAgNjI6XFx0XFxuICA2MzpcXHRcXHRyeF9zdGF0cyA9IHRoaXNfY3B1X3B0cih2bGFuX2Rldl9wcml2KHZsYW5fZGV2KS1cXHUwMDNldmxhbl9wY3B1X3N0YXRzKTtcXG4gIDY0OlxcdFxcbiAgNjU6XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2cnhfc3RhdHMtXFx1MDAzZXN5bmNwKTtcXG4gIDY2OlxcdFxcdHU2NF9zdGF0c19pbmMoXFx1MDAyNnJ4X3N0YXRzLVxcdTAwM2VyeF9wYWNrZXRzKTtcXG4gIDY3OlxcdFxcdHU2NF9zdGF0c19hZGQoXFx1MDAyNnJ4X3N0YXRzLVxcdTAwM2VyeF9ieXRlcywgc2tiLVxcdTAwM2VsZW4pO1xcbiAgNjg6XFx0XFx0aWYgKHNrYi1cXHUwMDNlcGt0X3R5cGUgPT0gUEFDS0VUX01VTFRJQ0FTVClcXG4gIDY5OlxcdFxcdFxcdHU2NF9zdGF0c19pbmMoXFx1MDAyNnJ4X3N0YXRzLVxcdTAwM2VyeF9tdWx0aWNhc3QpO1xcbiAgNzA6XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnJ4X3N0YXRzLVxcdTAwM2VzeW5jcCk7XFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdHJldHVybiB0cnVlO1xcbiAgNzM6XFx0fVxcbiAgNzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjE2OjIwLjUxMDQ4Mjc4WiIsIlNlcSI6NjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5NTI1ODQ1NzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVkxBTiBUYWcgSW5zZXJ0aW9uIExvZ2ljKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCBmdW5jdGlvbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQncyBzdXBwb3NlZCB0byBkby4gSXQgbG9va3MgbGlrZSBpdCdzIHJlc3BvbnNpYmxlIGZvciBpbnNlcnRpbmcgYSBWTEFOIHRhZyBpbnRvIGFuIGBza19idWZmYC4gIE9rYXksIGdvdCBpdC4gSXQgdGFrZXMgYW4gYHNrX2J1ZmZgLCB0aGUgVkxBTiBwcm90b2NvbCBhbmQgVENJLCBhbmQgdGhlIE1BQyBoZWFkZXIgbGVuZ3RoIGFzIGlucHV0LlxuXG5Ob3csIHRoYXQgYHBza2JfbWF5X3B1bGxgIGNhbGwuLi4gSSBrbm93IHRoYXQgZnVuY3Rpb24uICBJdOKAmXMgYSBjcnVjaWFsIHNhZmV0eSBjaGVjay4gSXQgdmVyaWZpZXMgaWYgdGhlIGBza19idWZmYCBoYXMgZW5vdWdoIGNvbnRpZ3VvdXMgZGF0YSB0byBhY2NvbW1vZGF0ZSBgbWFjX2xlbmAuICBJZiBub3QsIGl0IGF0dGVtcHRzIHRvIHB1bGwgdGhlIG5lY2Vzc2FyeSBkYXRhLCB3aGljaCBjb3VsZCBpbnZvbHZlIHJlYXNzZW1ibGluZyBmcmFnbWVudHMuIEJ1dCwgaWYgYHBza2JfbWF5X3B1bGxgIHJldHVybnMgYGZhbHNlYCwgd2hpY2ggaGFwcGVucyB3aGVuIGBza2ItXHUwMDNlbGVuIFx1MDAzYyBtYWNfbGVuYCBvciBgc2tiX2hlYWRsZW4oc2tiKSBcdTAwM2MgbWFjX2xlbmAsIHRoZW4gdGhlcmUncyBhbiBpc3N1ZS4gSXQgbWVhbnMgdGhlIGBza2JgIGRvZXNuJ3QgY29udGFpbiBlbm91Z2ggZGF0YSwgc28gYG1hY19sZW5gIGJ5dGVzIGFyZSBub3QgZ3VhcmFudGVlZCB0byBiZSBwcmVzZW50LlxuXG5UaGUgc3Vic2VxdWVudCBgc2tiX3B1c2hgIGFuZCBgc2tiX3Bvc3RwdXNoX2RhdGFfbW92ZWAgY2FsbHMgd29ycnkgbWUuIElmIGBwc2tiX21heV9wdWxsYCBmYWlsZWQsIHRoZW4gdGhlc2Ugb3BlcmF0aW9ucyBjb3VsZCB0cnkgdG8gYWNjZXNzIGRhdGEgKmJleW9uZCogdGhlIGFsbG9jYXRlZCBidWZmZXIuIGBtZW1tb3ZlYCB3aXRoIGBtYWNfbGVuIC0gRVRIX1RMRU5gIGNvdWxkIGNhdXNlIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzLiAgQW5kLCB0aGUgYXNzaWdubWVudCB0byBgdmV0aGAgd291bGQgbGVhZCB0byB3cml0aW5nIG91dCBvZiB0aGUgYm91bmRzIG9mIHRoZSBza2IgZGF0YSBidWZmZXIgb3IgYmV5b25kIGBza2ItXHUwMDNldGFpbGAuIFRoYXQncyBhIGNsYXNzaWMgaGVhcCBidWZmZXIgb3ZlcmZsb3csIGEgS0FTQU4gY2F0Y2ghXG5cblNvLCB0aGUgb3JpZ2luYWwgY29kZSBoYWQgYSB2dWxuZXJhYmlsaXR5LiBUaGUgYWJzZW5jZSBvZiB0aGUgYHBza2JfbWF5X3B1bGxgIGNoZWNrIG1lYW5zIHdyaXRlcyB0byBgdmV0aGAgY291bGQgYmUgb3V0IG9mIGJvdW5kcywgZGVwZW5kaW5nIG9uIHRoZSBsZW5ndGggb2YgYHNrYmAuXG5cbk5vdywgbGV0J3Mgc2VlIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQncyBydW4gZG93biB0aGUgY2hlY2tsaXN0LlxuMS4gIE5vdGhpbmcgaXMgc2VudCB0byB1c2Vyc3BhY2UuIEdvb2QuXG4yLiAgYG1hY19sZW5gIGlzIGEgZnVuY3Rpb24gYXJndW1lbnQsIGluaXRpYWxpemVkLiBgc2tiYCBpcyBhbiBpbml0aWFsaXplZCBgc2tfYnVmZmAuXG4zLiAgTm8gbmV3IHN0cnVjdHVyZXMgb3IgYWxsb2NhdGlvbnMuXG40LiAgQnV0Li4ud2FpdC4gRG9lcyB0aGUgY2hlY2sgKmludHJvZHVjZSogYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaz8gTm8sIHRoZSBuZXcgYHBza2JfbWF5X3B1bGxgIGNoZWNrIHByZXZlbnRzIGdvaW5nIGJleW9uZCB0aGUgYG1hY19sZW5gLiBJdCBlbnN1cmVzIGBsZW5gIGJ5dGVzIG9mIHRoZSBza2IgYXJlIGluIHRoZSBjb250aWd1b3VzIGhlYWQgYnVmZmVyIChgc2tiLVx1MDAzZWRhdGFgIHRvIGBza2ItXHUwMDNlZGF0YSArIGxlbmApLiBJdCdzIHByZXZlbnRpbmcgaXNzdWVzIVxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhc2VzIHdoZXJlIGAtRUlOVkFMYCBpcyByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uLCB0byBlbnN1cmUgdGhlICpjYWxsZXJzKiBkb24ndCB1c2UgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQncyBzZWUgd2hvIGNhbGxzIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AuIEFoYSwgYF9fdmxhbl9pbnNlcnRfdGFnYC4gTGV0J3MgY2hlY2sgd2hlcmUgdGhhdCBpcyBjYWxsZWQuIEl0IGxvb2tzIGxpa2UgYHNrYl92bGFuX3B1c2hgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIEknbGwgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIHRoYXQgZnVuY3Rpb24gdG8gY29uZmlybSBpdCBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgZXJyb3IgY29kZS4gSXQgc2hvdWxkIGJlIGdvb2QgYmVjYXVzZSBgcHNrYl9tYXlfcHVsbGAgaXMgYSBzYWZldHkgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODAzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjE2OjQwLjAzNjMzMTExMVoiLCJTZXEiOjY0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjAyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjQ5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjQ5MDpcXHR7XFxuNjQ5MTpcXHRcXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkge1xcbjY0OTI6XFx0XFx0XFx0aW50IG9mZnNldCA9IHNrYi1cXHUwMDNlZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHNrYik7XFxuNjQ5MzpcXHRcXHRcXHRpbnQgZXJyO1xcbjY0OTQ6XFx0XFxuNjQ5NTpcXHRcXHRcXHRpZiAoV0FSTl9PTkNFKG9mZnNldCxcXG42NDk2OlxcdFxcdFxcdFxcdCAgICAgIFxcXCJza2Jfdmxhbl9wdXNoIGdvdCBza2Igd2l0aCBza2ItXFx1MDAzZWRhdGEgbm90IGF0IG1hYyBoZWFkZXIgKG9mZnNldCAlZClcXFxcblxcXCIsXFxuNjQ5NzpcXHRcXHRcXHRcXHQgICAgICBvZmZzZXQpKSB7XFxuNjQ5ODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42NDk5OlxcdFxcdFxcdH1cXG42NTAwOlxcdFxcbjY1MDE6XFx0XFx0XFx0ZXJyID0gX192bGFuX2luc2VydF90YWcoc2tiLCBza2ItXFx1MDAzZXZsYW5fcHJvdG8sXFxuNjUwMjpcXHRcXHRcXHRcXHRcXHRcXHRza2Jfdmxhbl90YWdfZ2V0KHNrYikpO1xcbjY1MDM6XFx0XFx0XFx0aWYgKGVycilcXG42NTA0OlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuNjUwNTpcXHRcXG42NTA2OlxcdFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBza2ItXFx1MDAzZXZsYW5fcHJvdG87XFxuNjUwNzpcXHRcXHRcXHRza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyIC09IFZMQU5fSExFTjtcXG42NTA4OlxcdFxcbjY1MDk6XFx0XFx0XFx0c2tiX3Bvc3RwdXNoX3Jjc3VtKHNrYiwgc2tiLVxcdTAwM2VkYXRhICsgKDIgKiBFVEhfQUxFTiksIFZMQU5fSExFTik7XFxuNjUxMDpcXHRcXHR9XFxuNjUxMTpcXHRcXHRfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgdmxhbl9wcm90bywgdmxhbl90Y2kpO1xcbjY1MTI6XFx0XFx0cmV0dXJuIDA7XFxuNjUxMzpcXHR9XFxuNjUxNDpcXHRFWFBPUlRfU1lNQk9MKHNrYl92bGFuX3B1c2gpO1xcbjY1MTU6XFx0XFxuNjUxNjpcXHQvKipcXG42NTE3OlxcdCAqIHNrYl9ldGhfcG9wKCkgLSBEcm9wIHRoZSBFdGhlcm5ldCBoZWFkZXIgYXQgdGhlIGhlYWQgb2YgYSBwYWNrZXRcXG42NTE4OlxcdCAqXFxuNjUxOTpcXHQgKiBAc2tiOiBTb2NrZXQgYnVmZmVyIHRvIG1vZGlmeVxcbjY1MjA6XFx0ICpcXG42NTIxOlxcdCAqIERyb3AgdGhlIEV0aGVybmV0IGhlYWRlciBvZiBAc2tiLlxcbjY1MjI6XFx0ICpcXG42NTIzOlxcdCAqIEV4cGVjdHMgdGhhdCBza2ItXFx1MDAzZWRhdGEgcG9pbnRzIHRvIHRoZSBtYWMgaGVhZGVyIGFuZCB0aGF0IG5vIFZMQU4gdGFncyBhcmVcXG42NTI0OlxcdCAqIHByZXNlbnQuXFxuNjUyNTpcXHQgKlxcbjY1MjY6XFx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvdGhlcndpc2UuXFxuNjUyNzpcXHQgKi9cXG42NTI4OlxcdGludCBza2JfZXRoX3BvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjY1Mjk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxNjo0MC4wMzY1OTQ0NzJaIiwiU2VxIjo2NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM1OTYzMDQzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFZMQU4gVGFnZ2luZyBpbiBhIFNDU0kgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IFZMQU4gdGFncyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIFNDU0kgZGV2aWNlcy4gTXkgaW5pdGlhbCBwb2ludCBvZiByZWZlcmVuY2UgaXMgdGhlIGBza2Jfdmxhbl9wdXNoYCBmdW5jdGlvbi4gSWYgdGhlcmUncyBhbiBlcnJvciB0aGVyZSwgaXQganVzdCByZXR1cm5zIHRoZSBlcnJvciBjb2RlLCB3aGljaCBpcyBzdHJhaWdodGZvcndhcmQuIE5vdywgSSB3YW50IHRvIHNlZSBob3cgdGhpcyBpcyB1c2VkIGluIHByYWN0aWNlLiBJJ20gZm9jdXNpbmcgb24gYGRyaXZlcnMvc2NzaS9xZWRpL3FlZGlfbWFpbi5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgYF9fdmxhbl9pbnNlcnRfdGFnYCBmdW5jdGlvbiBiZWluZyBjYWxsZWQgaGVyZSwgYW5kIGhvdyBpdCB1c2VzIHRoZSBFdGhlcm5ldCBwcm90b2NvbCBmb3IgVkxBTnMgKEVUSF9QXzgwMjFRKSBhbmQgdGhlIFZMQU4gSUQgaXRzZWxmLiBOb3csIGxldCdzIHRyYWNlIHRoaXMgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoZSByZWNlaXZlIHBhdGguIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIGBxZWRpX2xsMl9yeGAgaW4gdGhlIHNhbWUgZmlsZSB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGZsb3cuIFRoaXMgc2hvdWxkIHNob3cgbWUgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBpbmNvbWluZyBmcmFtZXMgd2l0aCBhbmQgd2l0aG91dCBWTEFOIHRhZ3MsIGFuZCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBvdmVyYWxsIFNDU0kgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5Njk3LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTc6MDMuNjMyOTAzMDAzWiIsIlNlcSI6NjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTMwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Njc2kvcWVkaS9xZWRpX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MjA6XFx0XFx0XFx0d29yay1cXHUwMDNldmxhbl9pZCA9IHNrYl92bGFuX3RhZ19nZXQoc2tiKTtcXG4gNzIxOlxcdFxcbiA3MjI6XFx0XFx0aWYgKHdvcmstXFx1MDAzZXZsYW5faWQpXFxuIDcyMzpcXHRcXHRcXHRfX3ZsYW5faW5zZXJ0X3RhZyh3b3JrLVxcdTAwM2Vza2IsIGh0b25zKEVUSF9QXzgwMjFRKSwgd29yay1cXHUwMDNldmxhbl9pZCk7XFxuIDcyNDpcXHRcXG4gNzI1OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cWVkaS1cXHUwMDNlbGwyX2xvY2spO1xcbiA3MjY6XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2d29yay1cXHUwMDNlbGlzdCwgXFx1MDAyNnFlZGktXFx1MDAzZWxsMl9za2JfbGlzdCk7XFxuIDcyNzpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cWVkaS1cXHUwMDNlbGwyX2xvY2spO1xcbiA3Mjg6XFx0XFxuIDcyOTpcXHRcXHR3YWtlX3VwX3Byb2Nlc3MocWVkaS1cXHUwMDNlbGwyX3JlY3ZfdGhyZWFkKTtcXG4gNzMwOlxcdFxcbiA3MzE6XFx0XFx0cmV0dXJuIDA7XFxuIDczMjpcXHR9XFxuIDczMzpcXHRcXG4gNzM0OlxcdC8qIG1hcCB0aGlzIHNrYiB0byBpc2NzaXVpbyBtbWFwZWQgcmVnaW9uICovXFxuIDczNTpcXHRzdGF0aWMgaW50IHFlZGlfbGwyX3Byb2Nlc3Nfc2tiKHN0cnVjdCBxZWRpX2N0eCAqcWVkaSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gNzM2OlxcdFxcdFxcdFxcdFxcdHUxNiB2bGFuX2lkKVxcbiA3Mzc6XFx0e1xcbiA3Mzg6XFx0XFx0c3RydWN0IHFlZGlfdWlvX2RldiAqdWRldiA9IE5VTEw7XFxuIDczOTpcXHRcXHRzdHJ1Y3QgcWVkaV91aW9fY3RybCAqdWN0cmwgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxNzowMy42MzMwNDQzNTNaIiwiU2VxIjo2NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODAwNzc0OTg2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVkxBTiBUYWcgSW5zZXJ0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGNhcmVmdWxseSByZXZpZXdpbmcgdGhpcyBwYXRjaCwgZm9jdXNpbmcgb24gaXRzIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IHNhZmV0eS4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBpdCBhZGRzIGEgc2FmZXR5IGNoZWNrLCBgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pYCwgdG8gYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC4gVGhpcyBjaGVjayBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgZW5zdXJlcyB0aGF0IHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgYWN0dWFsbHkgKmhhcyogZW5vdWdoIGRhdGEgdG8gYWNjb21tb2RhdGUgdGhlIFZMQU4gdGFnIGluc2VydGlvbiwgc3BlY2lmaWNhbGx5IGVuc3VyaW5nIHRoZXJlIGFyZSBhdCBsZWFzdCBgbWFjX2xlbmAgYnl0ZXMgYXZhaWxhYmxlLlxuXG5XaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBjb2RlIHdhcyB2dWxuZXJhYmxlIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIHdyaXRlcywgcG90ZW50aWFsbHkgY29ycnVwdGluZyBtZW1vcnkg4oCTIGEgY2xhc3NpYyBoZWFwIG9yIHNsYWIgb3V0LW9mLWJvdW5kcyB2dWxuZXJhYmlsaXR5LiAgVGhpcyBpcyBhIHNpZ25pZmljYW50IHByb2JsZW0gdGhhdCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU0FOaXRpemVyKSBpcyBkZXNpZ25lZCB0byBjYXRjaC4gIEl0J3MgdGhlIHByaW1hcnkgcmVhc29uIGZvciB0aGlzIHBhdGNoLlxuXG5UaGUgaW1wb3J0YW50IHBvaW50IGlzIHRoYXQgdGhpcyBwYXRjaCBvbmx5IGFkZHJlc3NlcyAqZXhpc3RpbmcqIG1lbW9yeSBzYWZldHkgaXNzdWVzLiBJdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0IGRvZXNuJ3QgaW52b2x2ZSBhbnkgY2hhbmdlcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgcmVhZCwgb3Igc3RydWN0dXJlIGZpZWxkcyBlbmRpbmcgdXAgdW5pbml0aWFsaXplZCBhbmQgbGVha2VkIHRvIHVzZXJzcGFjZS4gSSd2ZSBzcGVjaWZpY2FsbHkgY2hlY2tlZCBmb3IgdGhvc2Ugc2NlbmFyaW9zLlxuXG5UaGUgcGF0Y2gncyBsb2dpYyBpcyBjbGVhcjogaWYgYHBza2JfbWF5X3B1bGxgIGZhaWxzIChtZWFuaW5nIG5vdCBlbm91Z2ggZGF0YSksIGl0IHJldHVybnMgYC1FSU5WQUxgLiAgVGhlIGNhbGxlcnMgb2YgYHZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgaGFuZGxlIHRoaXMgZXJyb3IgYnkgZHJvcHBpbmcgdGhlIGBza2JgLCB3aGljaCBpcyB0aGUgY29ycmVjdCBiZWhhdmlvci4gIFRoZXJlJ3Mgbm8gcGF0aCB3aGVyZSB3ZSBlbmQgdXAgbGVha2luZyB1bmluaXRpYWxpemVkIGRhdGEgb3IgcmV0dXJuaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBgcHNrYl9tYXlfcHVsbGAgaXMgZGVzaWduZWQgdG8gcHVsbCAqZXhpc3RpbmcqIGJ5dGVzIGludG8gdGhlIGxpbmVhciBidWZmZXIsIG5vdCBjcmVhdGUgbmV3IHVuaW5pdGlhbGl6ZWQgb25lcy4gQWxzbywgSSBoYXZlIHZlcmlmaWVkIHRoYXQgc3RydWN0dXJlcyB3cml0dGVuIHRvIGFyZSBhbHdheXMgZG9uZSBzbyBhZnRlciBgcHNrYl9tYXlfcHVsbGAgc3VjY2VlZHMsIGVuc3VyaW5nIGluaXRpYWxpemF0aW9uLlxuXG5TbywgSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBLTVNBTiAoS2VybmVsIE1lbW9yeSBTQU5pdGl6ZXIpIGNvbmNlcm5zLiBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCB0byBkZXRlY3QgdGhlIHR5cGVzIG9mIHZ1bG5lcmFiaWxpdGllcyB0aGlzIHBhdGNoIGFkZHJlc3Nlcy4gVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzOiBgTmVlZHNLTVNBTjogZmFsc2VgLiBJJ20gcmVhZHkgdG8gY29tbWl0IHRoaXMsIGJlY2F1c2UgdGhlIGNvcmUgcHJvYmxlbSB0aGlzIHBhdGNoIGFkZHJlc3NlcyBpcyBkZWZpbml0ZWx5IGEgS0FTQU4gaXNzdWUuIEknbSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQzMiwiT3V0cHV0VG9rZW5zIjoxNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxODoyMy43MTA1NDU0ODVaIiwiU2VxIjo2OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgdXNpbmcgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pIGluIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKCkgdG8gZW5zdXJlIHRoYXQgdGhlIHBhY2tldCBidWZmZXIgY29udGFpbnMgYXQgbGVhc3QgbWFjX2xlbiBsaW5lYXIgYnl0ZXMgYmVmb3JlIHBlcmZvcm1pbmcgaGVhZGVyIG1hbmlwdWxhdGlvbnMgKHNrYl9wb3N0cHVzaF9kYXRhX21vdmUgYW5kIHdyaXRpbmcgdmxhbl9ldGhoZHIpLiBXaXRob3V0IHRoaXMgY2hlY2ssIHBhY2tldHMgc2hvcnRlciB0aGFuIG1hY19sZW4gb3Igbm9uLWxpbmVhciBidWZmZXJzIGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBoZWFwIGFjY2Vzc2VzIChPT0IgcmVhZC93cml0ZSksIHdoaWNoIGFyZSBkaXJlY3RseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgdXNpbmcgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pIGluIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKCkgdG8gZW5zdXJlIHRoYXQgdGhlIHBhY2tldCBidWZmZXIgY29udGFpbnMgYXQgbGVhc3QgbWFjX2xlbiBsaW5lYXIgYnl0ZXMgYmVmb3JlIHBlcmZvcm1pbmcgaGVhZGVyIG1hbmlwdWxhdGlvbnMgKHNrYl9wb3N0cHVzaF9kYXRhX21vdmUgYW5kIHdyaXRpbmcgdmxhbl9ldGhoZHIpLiBXaXRob3V0IHRoaXMgY2hlY2ssIHBhY2tldHMgc2hvcnRlciB0aGFuIG1hY19sZW4gb3Igbm9uLWxpbmVhciBidWZmZXJzIGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBoZWFwIGFjY2Vzc2VzIChPT0IgcmVhZC93cml0ZSksIHdoaWNoIGFyZSBkaXJlY3RseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowx28hh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 10:40:46 +0000 UTC FinishedAt: 2026-09-15 11:18: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": "7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VLAN_8021Q", "NET_ACT_MPLS", "NET_ACT_VLAN", "NET_CLS_ACT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VLAN_8021Q", "NET_ACT_MPLS", "NET_ACT_VLAN", "NET_CLS_ACT" ], "series_id": "e5d7c409-5a32-4530-9bb4-754f48d61578" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "skb_vlan_push", "vlan_do_receive", "tcf_mpls_act", "tcf_vlan_act" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9NUExTJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfVkxBTiYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl92bGFuX3B1c2gmIzM0OywKICAgICYjMzQ7dmxhbl9kb19yZWNlaXZlJiMzNDssCiAgICAmIzM0O3RjZl9tcGxzX2FjdCYjMzQ7LAogICAgJiMzNDt0Y2Zfdmxhbl9hY3QmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIHVzaW5nIHBza2JfbWF5X3B1bGwoc2tiLCBtYWNfbGVuKSBpbiBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZygpIHRvIGVuc3VyZSB0aGF0IHRoZSBwYWNrZXQgYnVmZmVyIGNvbnRhaW5zIGF0IGxlYXN0IG1hY19sZW4gbGluZWFyIGJ5dGVzIGJlZm9yZSBwZXJmb3JtaW5nIGhlYWRlciBtYW5pcHVsYXRpb25zIChza2JfcG9zdHB1c2hfZGF0YV9tb3ZlIGFuZCB3cml0aW5nIHZsYW5fZXRoaGRyKS4gV2l0aG91dCB0aGlzIGNoZWNrLCBwYWNrZXRzIHNob3J0ZXIgdGhhbiBtYWNfbGVuIG9yIG5vbi1saW5lYXIgYnVmZmVycyBjb3VsZCBsZWFkIHRvIG91dC1vZi1ib3VuZHMgaGVhcCBhY2Nlc3NlcyAoT09CIHJlYWQvd3JpdGUpLCB3aGljaCBhcmUgZGlyZWN0bHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZSBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBidWZmZXJzLCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHBza2JfbWF5X3B1bGwoc2tiLCBtYWNfbGVuKSBjaGVjayB0byBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZygpIGluIGluY2x1ZGUvbGludXgvaWZfdmxhbi5oIHRvIGVuc3VyZSBzdWZmaWNpZW50IGhlYWQgZGF0YSBpcyBwdWxsZWQgYmVmb3JlIGluc2VydGluZyBhbiBpbm5lciBWTEFOIHRhZy4gVGhpcyByZWFjaGFibGUgaGVscGVyIGlzIGV4ZXJjaXNlZCBieSBjb3JlIG5ldHdvcmtpbmcgcGF0aHMgc3VjaCBhcyA4MDIuMVEgcmVjZWl2ZSBwcm9jZXNzaW5nICh2bGFuX2RvX3JlY2VpdmUpLCBWTEFOIHB1c2ggb3BlcmF0aW9ucyAoc2tiX3ZsYW5fcHVzaCksIGFuZCBUQyBhY3Rpb25zICh0Y2ZfbXBsc19hY3QsIHRjZl92bGFuX2FjdCkuIEZ1enppbmcgaXMgd29ydGh3aGlsZSB0byB0ZXN0IGJlaGF2aW9yIHdpdGggbm9uLWxpbmVhciwgZnJhZ21lbnRlZCwgb3IgbWFsZm9ybWVkIHBhY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmMzZkY2FhMWQ5NjdlYzJiNzJlYjQzNjVmNGJmODMzOTYzYjhkYmY0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTE6MTA6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl92bGFuLmggYi9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaFxuaW5kZXggMjBjYzE2ZWE0ZTVhYi4uNDg0NjAzMmJmNGZmYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaFxuQEAgLTM2NSw2ICYjNDM7MzY1LDkgQEAgc3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGNvbnN0IHU4IG1ldGFfbGVuID0gbWFjX2xlbiBcdTAwM2UgRVRIX1RMRU4gPyBza2JfbWV0YWRhdGFfbGVuKHNrYikgOiAwO1xuIFx0c3RydWN0IHZsYW5fZXRoaGRyICp2ZXRoO1xuIFxuJiM0MztcdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdGlmIChza2JfY293X2hlYWQoc2tiLCBtZXRhX2xlbiAmIzQzOyBWTEFOX0hMRU4pIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfTVBMUyYjMzQ7LAogICAgJiMzNDtORVRfQUNUX1ZMQU4mIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza2Jfdmxhbl9wdXNoJiMzNDssCiAgICAmIzM0O3ZsYW5fZG9fcmVjZWl2ZSYjMzQ7LAogICAgJiMzNDt0Y2ZfbXBsc19hY3QmIzM0OywKICAgICYjMzQ7dGNmX3ZsYW5fYWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbikgY2hlY2sgdG8gX192bGFuX2luc2VydF9pbm5lcl90YWcoKSBpbiBpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaCB0byBlbnN1cmUgc3VmZmljaWVudCBoZWFkIGRhdGEgaXMgcHVsbGVkIGJlZm9yZSBpbnNlcnRpbmcgYW4gaW5uZXIgVkxBTiB0YWcuIFRoaXMgcmVhY2hhYmxlIGhlbHBlciBpcyBleGVyY2lzZWQgYnkgY29yZSBuZXR3b3JraW5nIHBhdGhzIHN1Y2ggYXMgODAyLjFRIHJlY2VpdmUgcHJvY2Vzc2luZyAodmxhbl9kb19yZWNlaXZlKSwgVkxBTiBwdXNoIG9wZXJhdGlvbnMgKHNrYl92bGFuX3B1c2gpLCBhbmQgVEMgYWN0aW9ucyAodGNmX21wbHNfYWN0LCB0Y2Zfdmxhbl9hY3QpLiBGdXp6aW5nIGlzIHdvcnRod2hpbGUgdG8gdGVzdCBiZWhhdmlvciB3aXRoIG5vbi1saW5lYXIsIGZyYWdtZW50ZWQsIG9yIG1hbGZvcm1lZCBwYWNrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjM2ZGNhYTFkOTY3ZWMyYjcyZWI0MzY1ZjRiZjgzMzk2M2I4ZGJmNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDExOjEwOjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl92bGFuLmggYi9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaAppbmRleCAyMGNjMTZlYTRlNWFiLi40ODQ2MDMyYmY0ZmZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaApAQCAtMzY1LDYgJiM0MzszNjUsOSBAQCBzdGF0aWMgaW5saW5lIGludCBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWNvbnN0IHU4IG1ldGFfbGVuID0gbWFjX2xlbiAmZ3Q7IEVUSF9UTEVOID8gc2tiX21ldGFkYXRhX2xlbihza2IpIDogMDsKIAlzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZldGg7CiAKJiM0MzsJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbikpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJaWYgKHNrYl9jb3dfaGVhZChza2IsIG1ldGFfbGVuICYjNDM7IFZMQU5fSExFTikgJmx0OyAwKQogCQlyZXR1cm4gLUVOT01FTTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTAyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFZMQU4gSW5zZXJ0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgYSBgZGlmZmAgcHJlc2VudGVkLCBhbmQgdGhlIGZpbGUgYmVpbmcgbW9kaWZpZWQgaXMgYGluY2x1ZGUvbGludXgvaWZfdmxhbi5oYC4gU2VlbXMgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIFZMQU4gdGFnZ2luZywgc3BlY2lmaWNhbGx5IGFuIGlubmVyIHRhZyBpbnNlcnRpb24sIGp1ZGdpbmcgYnkgdGhlIGZ1bmN0aW9uIG5hbWUsIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AuCgpUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjaGVjaywgYGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pKSkgcmV0dXJuIC1FSU5WQUw7YCBiZWZvcmUgYXR0ZW1wdGluZyBhbnkgbWVtb3J5IG1hbmlwdWxhdGlvbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBnb29kIGFkZGl0aW9uLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGd1YXJkaW5nIGFnYWluc3QgYSBwb3RlbnRpYWwgYnVmZmVyIHVuZGVycnVuLiAgYHBza2JfbWF5X3B1bGxgIHByb2JhYmx5IHZlcmlmaWVzIGlmIHdlIGNhbiBzYWZlbHkgcmVhZCBgbWFjX2xlbmAgYnl0ZXMgZnJvbSB0aGUgcGFja2V0IGRhdGEgd2l0aG91dCBjYXVzaW5nIGEga2VybmVsIHBhbmljIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzLiAgRXNzZW50aWFsbHksIGl0IGNvbmZpcm1zIHRoZSBwcmVzZW5jZSBvZiBlbm91Z2ggZGF0YSBpbiB0aGUgU0tCIHRvIHByb2NlZWQgd2l0aCBWTEFOIGhlYWRlciBpbnNlcnRpb24uIEEgZmFpbHVyZSBoZXJlLCByZXByZXNlbnRlZCBieSBgLUVJTlZBTGAsIGxpa2VseSBpbmRpY2F0ZXMgYW4gaW52YWxpZCBwYWNrZXQgZm9ybWF0IG9yIGNvcnJ1cHRlZCBkYXRhLiBUaGlzIGlzIGEgdmVyeSBjb21tb24gc2NlbmFyaW8gZm9yIGJ1ZmZlciBjaGVja3MuCgpJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0sIGJ1dCB0aGlzIGNoZWNrIGxpa2VseSBwcmV2ZW50cyBhIGNyYXNoIGlmIHRoZXJlJiMzOTtzIGluc3VmZmljaWVudCBkYXRhIHRvIHdvcmsgd2l0aC4gSSBzaG91bGQgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGVzcGVjaWFsbHkgdGhlIGNhbGxzIHRvIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaG93IHRoZSBgbWFjX2xlbmAgdmFsdWUgaXMgZGVyaXZlZC4gSXQgaXMgcHJvYmFibHkgdGhlIG91dGVyIE1BQyBoZWFkZXIgbGVuZ3RoLiBMb29raW5nIGNsb3NlciBhdCBsaW5lIDM2NSwgSSB3aWxsIGluc3BlY3QgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCBhbmQgaXRzIGNhbGxlcnMgdG8gZW5zdXJlIHRoaXMgbmV3IHZhbGlkYXRpb24gaXMgc3VmZmljaWVudCBhbmQgdGhhdCBubyBwb3RlbnRpYWwgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkIGVsc2V3aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaWZfdmxhbi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNTU6XHQgKlxuIDM1NjpcdCAqIEluc2VydHMgdGhlIFZMQU4gdGFnIGludG8gQHNrYiBhcyBwYXJ0IG9mIHRoZSBwYXlsb2FkIGF0IG9mZnNldCBtYWNfbGVuXG4gMzU3Olx0ICogRG9lcyBub3QgY2hhbmdlIHNrYi1cdTAwM2Vwcm90b2NvbCBzbyB0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGR1cmluZyByZWNlaXZlLlxuIDM1ODpcdCAqXG4gMzU5Olx0ICogUmV0dXJuczogZXJyb3IgaWYgc2tiX2Nvd19oZWFkIGZhaWxzLlxuIDM2MDpcdCAqL1xuIDM2MTpcdHN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4gMzYyOlx0XHRcdFx0XHRcdCAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSxcbiAzNjM6XHRcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgbWFjX2xlbilcbiAzNjQ6XHR7XG4gMzY1Olx0XHRjb25zdCB1OCBtZXRhX2xlbiA9IG1hY19sZW4gXHUwMDNlIEVUSF9UTEVOID8gc2tiX21ldGFkYXRhX2xlbihza2IpIDogMDtcbiAzNjY6XHRcdHN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aDtcbiAzNjc6XHRcbiAzNjg6XHRcdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pKSlcbiAzNjk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzcwOlx0XG4gMzcxOlx0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgbWV0YV9sZW4gJiM0MzsgVkxBTl9ITEVOKSBcdTAwM2MgMClcbiAzNzI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzczOlx0XG4gMzc0Olx0XHRza2JfcHVzaChza2IsIFZMQU5fSExFTik7XG4gMzc1Olx0XG4gMzc2Olx0XHQvKiBNb3ZlIHRoZSBtYWMgaGVhZGVyIHNhbnMgcHJvdG8gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IGhlYWRlci4gKi9cbiAzNzc6XHRcdGlmIChsaWtlbHkobWFjX2xlbiBcdTAwM2UgRVRIX1RMRU4pKVxuIDM3ODpcdFx0XHRza2JfcG9zdHB1c2hfZGF0YV9tb3ZlKHNrYiwgVkxBTl9ITEVOLCBtYWNfbGVuIC0gRVRIX1RMRU4pO1xuIDM3OTpcdFx0aWYgKHNrYl9tYWNfaGVhZGVyX3dhc19zZXQoc2tiKSlcbiAzODA6XHRcdFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgLT0gVkxBTl9ITEVOO1xuIDM4MTpcdFxuIDM4MjpcdFx0dmV0aCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgbWFjX2xlbiAtIEVUSF9ITEVOKTtcbiAzODM6XHRcbiAzODQ6XHRcdC8qIGZpcnN0LCB0aGUgZXRoZXJuZXQgdHlwZSAqL1xuIDM4NTpcdFx0aWYgKGxpa2VseShtYWNfbGVuIFx1MDAzZT0gRVRIX1RMRU4pKSB7XG4gMzg2Olx0XHRcdC8qIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gc2hvdWxkIGFscmVhZHkgYmUgcG9wdWxhdGVkLCBhbmRcbiAzODc6XHRcdFx0ICogc2tiLVx1MDAzZWRhdGEgaGFzIHNwYWNlIGZvciBoX3ZsYW5fcHJvdG9cbiAzODg6XHRcdFx0ICovXG4gMzg5Olx0XHRcdHZldGgtXHUwMDNlaF92bGFuX3Byb3RvID0gdmxhbl9wcm90bztcbiAzOTA6XHRcdH0gZWxzZSB7XG4gMzkxOlx0XHRcdC8qIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gc2hvdWxkIG5vdCBiZSBwb3B1bGF0ZWQsIGFuZFxuIDM5MjpcdFx0XHQgKiBza2ItXHUwMDNlZGF0YSBoYXMgbm8gc3BhY2UgZm9yIGhfdmxhbl9wcm90b1xuIDM5MzpcdFx0XHQgKi9cbiAzOTQ6XHRcdFx0dmV0aC1cdTAwM2VoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvID0gc2tiLVx1MDAzZXByb3RvY29sO1xuIDM5NTpcdFx0fVxuIDM5NjpcdFxuIDM5NzpcdFx0Lyogbm93LCB0aGUgVENJICovXG4gMzk4Olx0XHR2ZXRoLVx1MDAzZWhfdmxhbl9UQ0kgPSBodG9ucyh2bGFuX3RjaSk7XG4gMzk5Olx0XG4gNDAwOlx0XHRyZXR1cm4gMDtcbiA0MDE6XHR9XG4gNDAyOlx0XG4gNDAzOlx0LyoqXG4gNDA0Olx0ICogX192bGFuX2luc2VydF90YWcgLSByZWd1bGFyIFZMQU4gdGFnIGluc2VydGluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MzUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBWTEFOIEluc2VydGlvbiBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGV2ZXJ5IHBsYWNlIGluIHRoZSBrZXJuZWwgdGhhdCBjYWxscyBgX192bGFuX2luc2VydF9pbm5lcl90YWdgLiBUaGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIFZMQU4gdGFnZ2luZywgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIHVzYWdlIGlzIGNyaXRpY2FsIGZvciBzZXZlcmFsIGRlYnVnZ2luZyBzY2VuYXJpb3MsIHBlcmZvcm1hbmNlIGFuYWx5c2lzLCBvciBwb3RlbnRpYWxseSBzZWN1cml0eSBhdWRpdHMuIEnigJlsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggdG8gZmluZCBhbGwgdGhlIGluc3RhbmNlcyBvZiB0aGlzIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZC4gSSBjb3VsZCB1c2UgYGdyZXBgIChvciBpdHMgbW9yZSBlZmZpY2llbnQgZXF1aXZhbGVudHMpIG9uIHRoZSBzb3VyY2UgdHJlZSwgYnV0IGEgbW9yZSBzdXJnaWNhbCBhcHByb2FjaCBtaWdodCBiZSBiZXR0ZXIgdG8gZWxpbWluYXRlIGZhbHNlIHBvc2l0aXZlcywgZGVwZW5kaW5nIG9uIHRoZSB0b29sY2hhaW4gY2FwYWJpbGl0aWVzIEkgaGF2ZS4gSXMgdGhlcmUgYSB3YXkgdG8gbGV2ZXJhZ2Ugc3ltYm9sIGluZGV4aW5nIG9yIGNyb3NzLXJlZmVyZW5jaW5nIGNhcGFiaWxpdGllcyBvZiBteSBJREUgb3IgYnVpbGQgZW52aXJvbm1lbnQ/IFRoYXQgd291bGQgYmUgaWRlYWwuIEkgbmVlZCB0byBiZSBzdXJlIEkmIzM5O20gY2FwdHVyaW5nIGFsbCBpbmRpcmVjdCBjYWxscyB0b28sIHdoaWNoIG1lYW5zIEkgc2hvdWxkIGxvb2sgZm9yIGZ1bmN0aW9uIHBvaW50ZXJzIG9yIG1hY3JvcyB0aGF0IG1pZ2h0IGV4cGFuZCB0byBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLiBBZnRlciBJIGhhdmUgdGhlIGxpc3QsIEkgc2hvdWxkIGdvIHRocm91Z2ggZWFjaCBsb2NhdGlvbiB3aXRoIGEgZGlzY2VybmluZyBleWUuIFVuZGVyc3RhbmRpbmcgaG93IHRoZSBkYXRhIGZsb3dzIGludG8gYW5kIG91dCBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSYjMzk7cyBiZWhhdmlvci4gVGltZSB0byBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD0zMzk9c3RhdGljIGlubGluZSBib29sIHZsYW5faHdfb2ZmbG9hZF9jYXBhYmxlKG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzLFxuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM0OS0vKipcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjM1MDogKiBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyAtIGlubmVyIFZMQU4gdGFnIGluc2VydGluZ1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzUxLSAqIEBza2I6IHNrYnVmZiB0byB0YWdcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0zNjAtICovXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDozNjE6c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM2Mi1cdFx0XHRcdFx0ICBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5fdGNpLFxuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTQxND1zdGF0aWMgaW5saW5lIGludCBfX3ZsYW5faW5zZXJ0X3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQxNi17XG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDo0MTc6XHRyZXR1cm4gX192bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCB2bGFuX3Byb3RvLCB2bGFuX3RjaSwgRVRIX0hMRU4pO1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDE4LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD00Mzc9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDQzLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDQ0Olx0ZXJyID0gX192bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCB2bGFuX3Byb3RvLCB2bGFuX3RjaSwgbWFjX2xlbik7XG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00NDUtXHRpZiAoZXJyKSB7XG4tLVxubmV0L3NjaGVkL2FjdF9tcGxzLmM9NTM9VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9tcGxzX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9zY2hlZC9hY3RfbXBscy5jLTkwLVx0XHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkge1xubmV0L3NjaGVkL2FjdF9tcGxzLmM6OTE6XHRcdFx0aWYgKF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHNrYiwgc2tiLVx1MDAzZXZsYW5fcHJvdG8sXG5uZXQvc2NoZWQvYWN0X21wbHMuYy05Mi1cdFx0XHRcdFx0XHQgICAgc2tiX3ZsYW5fdGFnX2dldChza2IpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMzgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFZMQU4gVGFnIEluc2VydGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBoaWVyYXJjaHkgZm9yIHRoZXNlIFZMQU4gdGFnIGluc2VydGlvbiBmdW5jdGlvbnMuIEl0IGxvb2tzIGxpa2UgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUsIGFuZCBJJiMzOTttIGludGVyZXN0ZWQgaW4gd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZC4gQmFzZWQgb24gd2hhdCBJJiMzOTt2ZSBzZWVuLCBpdCYjMzk7cyBjYWxsZWQgYnkgYSBmZXcgb3RoZXIgZnVuY3Rpb25zLiBGaXJzdCwgdGhlcmUmIzM5O3MgYF9fdmxhbl9pbnNlcnRfdGFnYCBhbmQgdGhlbiBgdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCwgYm90aCBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaGAuIFRoYXQgbWFrZXMgc2Vuc2UsIHRob3NlIGFyZSB0aGUgY29yZSBWTEFOIHN0cnVjdHVyZXMuIFRoZSB0aGlyZCBjYWxsLCBhbmQgdGhpcyBpcyBpbnRlcmVzdGluZywgY29tZXMgZnJvbSBgdGNmX21wbHNfYWN0YCBpbiBgbmV0L3NjaGVkL2FjdF9tcGxzLmNgLiBUaGF0JiMzOTtzIGltcGx5aW5nIHNvbWUgc29ydCBvZiBpbnRlcmFjdGlvbiB3aXRoIE1QTFMgdHJhZmZpYyBjb250cm9sLiBOb3cgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGBfX3ZsYW5faW5zZXJ0X3RhZ2AgYW5kIGB2bGFuX2luc2VydF9pbm5lcl90YWdgIGFyZSBjYWxsZWQgdG8gZnVsbHkgbWFwIHRoZSBmbG93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCBhbGwgdGhlc2UgcGxhY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdmxhbl9pbnNlcnRfdGFnXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9xZWRpL3FlZGlfbWFpbi5jPTY2Nz1zdGF0aWMgaW50IHFlZGlfbGwyX3J4KHZvaWQgKmNvb2tpZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGFyZzEsIHUzMiBhcmcyKVxuLS1cbmRyaXZlcnMvc2NzaS9xZWRpL3FlZGlfbWFpbi5jLTcyMi1cdGlmICh3b3JrLVx1MDAzZXZsYW5faWQpXG5kcml2ZXJzL3Njc2kvcWVkaS9xZWRpX21haW4uYzo3MjM6XHRcdF9fdmxhbl9pbnNlcnRfdGFnKHdvcmstXHUwMDNlc2tiLCBodG9ucyhFVEhfUF84MDIxUSksIHdvcmstXHUwMDNldmxhbl9pZCk7XG5kcml2ZXJzL3Njc2kvcWVkaS9xZWRpX21haW4uYy03MjQtXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg9MzYxPXN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDEzLSAqL1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDE0OnN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MTUtXHRcdFx0XHQgICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz02NDg5PWludCBza2Jfdmxhbl9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl90Y2kpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjUwMC1cbm5ldC9jb3JlL3NrYnVmZi5jOjY1MDE6XHRcdGVyciA9IF9fdmxhbl9pbnNlcnRfdGFnKHNrYiwgc2tiLVx1MDAzZXZsYW5fcHJvdG8sXG5uZXQvY29yZS9za2J1ZmYuYy02NTAyLVx0XHRcdFx0XHRza2Jfdmxhbl90YWdfZ2V0KHNrYikpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMzYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBWTEFOIFRhZ2dpbmcgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIFZMQU4gdGFnZ2luZyBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGZvY3VzZWQgb24gYHNrYl92bGFuX3B1c2hgLiBUaGlzIGlzIHRoZSBjb3JlIGZ1bmN0aW9uLCBzbyBpdCBtYWtlcyBzZW5zZSB0byBzdGFydCBoZXJlLiBUaGUgY2FsbCB0byBgX192bGFuX2luc2VydF90YWdgIGlzIHRoZSBjcnVjaWFsIG5leHQgc3RlcC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIGRvaW5nIGF0IGEgbG93IGxldmVsOyB3aGF0IGFyZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBtZW1vcnkgbWFuaXB1bGF0aW9uIG9jY3VycmluZz8gTXkgaHlwb3RoZXNpcyBpcyB0aGF0IGBfX3ZsYW5faW5zZXJ0X3RhZ2AgcHJvdmlkZXMgdGhlIGJhc2UgbWVjaGFuaWNzIGFuZCBgc2tiX3ZsYW5fcHVzaGAgcHJvdmlkZXMgYSB0b3AtbGV2ZWwgaW50ZXJmYWNlLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBkZWVwZXIgaW50byBgdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoYXQgbmV4dC4gSSBleHBlY3QgaXQmIzM5O3MgZ29pbmcgdG8gYmUgcmVsYXRlZCB0byB0aGUgb3V0ZXIgVkxBTiB0YWcgYW5kIGhvdyB0aGF0JiMzOTtzIGhhbmRsZWQuIElzIGl0IGEgc2VwYXJhdGUgZnVuY3Rpb24gYmVjYXVzZSBvZiBoYXJkd2FyZSBvZmZsb2FkIGltcGxpY2F0aW9ucz8gTWF5YmUgdGhpcyBpcyB3aGVyZSBkaWZmZXJlbnQgVkxBTiBjb25maWd1cmF0aW9ucyBhcmUgaGFuZGxlZCwgaW5uZXIgYW5kIG91dGVyLCB3aGljaCB3b3VsZCBleHBsYWluIHRoZSBuZWVkIGZvciB0d28gc2ltaWxhci1sb29raW5nIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmxhbl9pbnNlcnRfaW5uZXJfdGFnXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaWZfdmxhbi5oPTMzOT1zdGF0aWMgaW5saW5lIGJvb2wgdmxhbl9od19vZmZsb2FkX2NhcGFibGUobmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzYwLSAqL1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6MzYxOnN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0zNjItXHRcdFx0XHRcdCAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSxcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD00MTQ9c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MTYte1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDE3Olx0cmV0dXJuIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHNrYiwgdmxhbl9wcm90bywgdmxhbl90Y2ksIEVUSF9ITEVOKTtcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQxOC19XG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDM2LSAqL1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDM3OnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnZsYW5faW5zZXJ0X2lubmVyX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDM4LVx0XHRcdFx0XHRcdCAgICBfX2JlMTYgdmxhbl9wcm90byxcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00NDMtXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDo0NDQ6XHRlcnIgPSBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHZsYW5fcHJvdG8sIHZsYW5fdGNpLCBtYWNfbGVuKTtcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQ0NS1cdGlmIChlcnIpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD00Njg9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdmxhbl9pbnNlcnRfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDcwLXtcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQ3MTpcdHJldHVybiB2bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCB2bGFuX3Byb3RvLCB2bGFuX3RjaSwgRVRIX0hMRU4pO1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDcyLX1cbi0tXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9MTA9Ym9vbCB2bGFuX2RvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipza2JwKVxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYy01MS1cdFx0c2tiX3B1c2goc2tiLCBvZmZzZXQpO1xubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjUyOlx0XHRza2IgPSAqc2ticCA9IHZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHNrYi1cdTAwM2V2bGFuX3Byb3RvLFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTUzLVx0XHRcdFx0XHRcdCAgICBza2ItXHUwMDNldmxhbl90Y2ksIHNrYi1cdTAwM2VtYWNfbGVuKTtcbi0tXG5uZXQvc2NoZWQvYWN0X21wbHMuYz01Mz1UQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX21wbHNfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjaGVkL2FjdF9tcGxzLmMtOTAtXHRcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XG5uZXQvc2NoZWQvYWN0X21wbHMuYzo5MTpcdFx0XHRpZiAoX192bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCBza2ItXHUwMDNldmxhbl9wcm90byxcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTkyLVx0XHRcdFx0XHRcdCAgICBza2Jfdmxhbl90YWdfZ2V0KHNrYiksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyODAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBgdmxhbl9pbnNlcnRfdGFnYCoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHNwZWNpZmljIGZ1bmN0aW9uLCBgdmxhbl9pbnNlcnRfdGFnYC4gSXQmIzM5O3Mgd29ydGggZGlnZ2luZyBpbnRvLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBjdXJyZW50IGNvbnRleHQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiBpcyBiZWhhdmluZyBhcyBleHBlY3RlZCwgcGFydGljdWxhcmx5IGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggVkxBTiB0YWdnaW5nLiBHaXZlbiBteSBleHBlcnRpc2UsIEnigJlsbCBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGl0LiBJIHdhbnQgdG8gcXVpY2tseSBldmFsdWF0ZSB0aGlzLCB0byBlbnN1cmUgbm8gaGlkZGVuIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmxhbl9pbnNlcnRfdGFnXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9xZWRpL3FlZGlfbWFpbi5jPTY2Nz1zdGF0aWMgaW50IHFlZGlfbGwyX3J4KHZvaWQgKmNvb2tpZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGFyZzEsIHUzMiBhcmcyKVxuLS1cbmRyaXZlcnMvc2NzaS9xZWRpL3FlZGlfbWFpbi5jLTcyMi1cdGlmICh3b3JrLVx1MDAzZXZsYW5faWQpXG5kcml2ZXJzL3Njc2kvcWVkaS9xZWRpX21haW4uYzo3MjM6XHRcdF9fdmxhbl9pbnNlcnRfdGFnKHdvcmstXHUwMDNlc2tiLCBodG9ucyhFVEhfUF84MDIxUSksIHdvcmstXHUwMDNldmxhbl9pZCk7XG5kcml2ZXJzL3Njc2kvcWVkaS9xZWRpX21haW4uYy03MjQtXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg9MzYxPXN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDEzLSAqL1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDE0OnN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MTUtXHRcdFx0XHQgICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSlcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD00Mzc9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDY3LSAqL1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDY4OnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnZsYW5faW5zZXJ0X3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDY5LVx0XHRcdFx0XHQgICAgICBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5fdGNpKVxuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTQ4OD1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp2bGFuX2luc2VydF90YWdfc2V0X3Byb3RvKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDkxLXtcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQ5MjpcdHNrYiA9IHZsYW5faW5zZXJ0X3RhZyhza2IsIHZsYW5fcHJvdG8sIHZsYW5fdGNpKTtcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQ5My1cdGlmIChza2IpXG4tLVxubmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmM9MzM3PXN0YXRpYyB2b2lkIGJhdGFkdl9ibGFfc2VuZF9jbGFpbShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqbWFjLFxuLS1cbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jLTQyOC1cdGlmICh2aWQgXHUwMDI2IEJBVEFEVl9WTEFOX0hBU19UQUcpIHtcbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jOjQyOTpcdFx0c2tiID0gdmxhbl9pbnNlcnRfdGFnKHNrYiwgaHRvbnMoRVRIX1BfODAyMVEpLFxubmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmMtNDMwLVx0XHRcdFx0ICAgICAgdmlkIFx1MDAyNiBWTEFOX1ZJRF9NQVNLKTtcbi0tXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYz0xMTk5PWJhdGFkdl9kYXRfYXJwX2NyZWF0ZV9yZXBseShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBfX2JlMzIgaXBfc3JjLFxuLS1cbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTEyMTItXHRpZiAodmlkIFx1MDAyNiBCQVRBRFZfVkxBTl9IQVNfVEFHKVxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6MTIxMzpcdFx0c2tiID0gdmxhbl9pbnNlcnRfdGFnKHNrYiwgaHRvbnMoRVRIX1BfODAyMVEpLFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtMTIxNC1cdFx0XHRcdCAgICAgIHZpZCBcdTAwMjYgVkxBTl9WSURfTUFTSyk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NjQ4OT1pbnQgc2tiX3ZsYW5fcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5fdGNpKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY1MDAtXG5uZXQvY29yZS9za2J1ZmYuYzo2NTAxOlx0XHRlcnIgPSBfX3ZsYW5faW5zZXJ0X3RhZyhza2IsIHNrYi1cdTAwM2V2bGFuX3Byb3RvLFxubmV0L2NvcmUvc2tidWZmLmMtNjUwMi1cdFx0XHRcdFx0c2tiX3ZsYW5fdGFnX2dldChza2IpKTtcbi0tXG5uZXQvZHNhL3RhZ184MDIxcS5jPTQ2ND1zdHJ1Y3Qgc2tfYnVmZiAqZHNhXzgwMjFxX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5uZXQvZHNhL3RhZ184MDIxcS5jLTQ2Ny1cdC8qIHNrYi1cdTAwM2VkYXRhIHBvaW50cyBhdCB0aGUgTUFDIGhlYWRlciwgd2hpY2ggaXMgZmluZVxubmV0L2RzYS90YWdfODAyMXEuYzo0Njg6XHQgKiBmb3Igdmxhbl9pbnNlcnRfdGFnKCkuXG5uZXQvZHNhL3RhZ184MDIxcS5jLTQ2OS1cdCAqL1xubmV0L2RzYS90YWdfODAyMXEuYzo0NzA6XHRyZXR1cm4gdmxhbl9pbnNlcnRfdGFnKHNrYiwgaHRvbnModHBpZCksIHRjaSk7XG5uZXQvZHNhL3RhZ184MDIxcS5jLTQ3MS19XG4tLVxubmV0L2RzYS90YWdfc2phMTEwNS5jPTI0MT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnNqYTExMDVfcHZpZF90YWdfY29udHJvbF9wa3Qoc3RydWN0IGRzYV9wb3J0ICpkcCxcbi0tXG5uZXQvZHNhL3RhZ19zamExMTA1LmMtMjYyLVxubmV0L2RzYS90YWdfc2phMTEwNS5jOjI2MzpcdHJldHVybiB2bGFuX2luc2VydF90YWcoc2tiLCB4bWl0X3RwaWQsIChwY3AgXHUwMDNjXHUwMDNjIFZMQU5fUFJJT19TSElGVCkgfFxubmV0L2RzYS90YWdfc2phMTEwNS5jLTI2NC1cdFx0XHQgICAgICAgU0pBMTEwNV9ERUZBVUxUX1ZMQU4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODI0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBEZWVwIGludG8gVkxBTnMgYW5kIE1QTFMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhlIG5ldHdvcmtpbmcgc3RhY2sgYWdhaW4sIHNwZWNpZmljYWxseSBhdCBob3cgVkxBTnMgYW5kIE1QTFMgaW50ZXJhY3QuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gYG5ldC84MDIxcS92bGFuX2NvcmUuY2AsIGxpbmUgNTIgLSBgdmxhbl9kb19yZWNlaXZlKHN0cnVjdCBza19idWZmICoqc2ticClgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgVkxBTnMgYXJlIGhhbmRsZWQgZHVyaW5nIHBhY2tldCByZWNlcHRpb24uIFRoYXQmIzM5O3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQuCgpUaGVuLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBmdW5jdGlvbiBgc2tiX3ZsYW5fcHVzaGAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgVkxBTiB0YWcgaXRzZWxmIGlzIGFjdHVhbGx5ICpwdXNoZWQqIG9udG8gdGhlIGBza19idWZmYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmljcyBvZiB0aGlzIGZ1bmN0aW9uIGluIHBhcnRpY3VsYXIuCgpNeSBtaW5kIHRoZW4gd2FuZGVycyB0byBgdGNmX21wbHNfYWN0YCBpbiBgbmV0L3NjaGVkL2FjdF9tcGxzLmNgLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdGFjaywgdGhpcyBtdXN0IGJlIHdoZXJlIE1QTFMgYWN0aW9ucyBhcmUgaW1wbGVtZW50ZWQuIFRoZSBpbnRlcmFjdGlvbiBoZXJlIHdpdGggVkxBTnMgaXMgd2hhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZC4KCkZpbmFsbHksIEkgbmVlZCB0byBzZWUgKndoZXJlKiBgc2tiX3ZsYW5fcHVzaGAgaXMgY2FsbGVkLiBUaGF0IHdpbGwgcHJvdmlkZSBhIGdvb2QgaW5kaWNhdGlvbiBvZiB3aGVyZSBpdCBpcyB1c2VkIGFuZCBob3cuIEZpbmRpbmcgdGhvc2UgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgYW4gdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gVkxBTiBhbmQgTVBMUy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB2bGFuIHRhZ2dpbmcgaXMgYWRkZWQgdG8gYW4gc2tiLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2Jfdmxhbl9wdXNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmg9NDMxMj1pbnQgc2tiX3ZsYW5fcG9wKHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0MzEzOmludCBza2Jfdmxhbl9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl90Y2kpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00MzE0LWludCBza2JfZXRoX3BvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTIyOTEtICpcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDoyMjkyOiAqIGxvbmcgYnBmX3NrYl92bGFuX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSlcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0yMjkzLSAqIFx0RGVzY3JpcHRpb25cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNjAyMC1cdEZOKGdldF9jZ3JvdXBfY2xhc3NpZCwgMTcsICMjY3R4KVx0XHRcXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjYwMjE6XHRGTihza2Jfdmxhbl9wdXNoLCAxOCwgIyNjdHgpXHRcdFx0XFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC02MDIyLVx0Rk4oc2tiX3ZsYW5fcG9wLCAxOSwgIyNjdHgpXHRcdFx0XFxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0zMjkwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NldF9oYXNoX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTMyOTctXG5uZXQvY29yZS9maWx0ZXIuYzozMjk4OkJQRl9DQUxMXzMoYnBmX3NrYl92bGFuX3B1c2gsIHN0cnVjdCBza19idWZmICosIHNrYiwgX19iZTE2LCB2bGFuX3Byb3RvLFxubmV0L2NvcmUvZmlsdGVyLmMtMzI5OS1cdCAgIHUxNiwgdmxhbl90Y2kpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzMwNy1cdGJwZl9wdXNoX21hY19yY3N1bShza2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MzMwODpcdHJldCA9IHNrYl92bGFuX3B1c2goc2tiLCB2bGFuX3Byb3RvLCB2bGFuX3RjaSk7XG5uZXQvY29yZS9maWx0ZXIuYy0zMzA5LVx0YnBmX3B1bGxfbWFjX3Jjc3VtKHNrYik7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzMxNS1cbm5ldC9jb3JlL2ZpbHRlci5jOjMzMTY6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX3ZsYW5fcHVzaF9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjMzMTc6XHQuZnVuYyAgICAgICAgICAgPSBicGZfc2tiX3ZsYW5fcHVzaCxcbm5ldC9jb3JlL2ZpbHRlci5jLTMzMTgtXHQuZ3BsX29ubHkgICAgICAgPSBmYWxzZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04Mzg4PWJvb2wgYnBmX2hlbHBlcl9jaGFuZ2VzX3BrdF9kYXRhKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NDA3LVx0Y2FzZSBCUEZfRlVOQ19za2Jfdmxhbl9wb3A6XG5uZXQvY29yZS9maWx0ZXIuYzo4NDA4Olx0Y2FzZSBCUEZfRlVOQ19za2Jfdmxhbl9wdXNoOlxubmV0L2NvcmUvZmlsdGVyLmMtODQwOS1cdGNhc2UgQlBGX0ZVTkNfc3RvcmVfaGRyX29wdDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NjIyPXRjX2Nsc19hY3RfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NjQ2LVx0XHRyZXR1cm4gXHUwMDI2YnBmX2dldF9jZ3JvdXBfY2xhc3NpZF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg2NDc6XHRjYXNlIEJQRl9GVU5DX3NrYl92bGFuX3B1c2g6XG5uZXQvY29yZS9maWx0ZXIuYzo4NjQ4Olx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl92bGFuX3B1c2hfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYy04NjQ5LVx0Y2FzZSBCUEZfRlVOQ19za2Jfdmxhbl9wb3A6XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NjQ4ND1FWFBPUlRfU1lNQk9MKHNrYl92bGFuX3BvcCk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjQ4OC0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjY0ODk6aW50IHNrYl92bGFuX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSlcbm5ldC9jb3JlL3NrYnVmZi5jLTY0OTAte1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY0OTUtXHRcdGlmIChXQVJOX09OQ0Uob2Zmc2V0LFxubmV0L2NvcmUvc2tidWZmLmM6NjQ5NjpcdFx0XHQgICAgICBcJiMzNDtza2Jfdmxhbl9wdXNoIGdvdCBza2Igd2l0aCBza2ItXHUwMDNlZGF0YSBub3QgYXQgbWFjIGhlYWRlciAob2Zmc2V0ICVkKVxcblwmIzM0Oyxcbm5ldC9jb3JlL3NrYnVmZi5jLTY0OTctXHRcdFx0ICAgICAgb2Zmc2V0KSkge1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY1MTMtfVxubmV0L2NvcmUvc2tidWZmLmM6NjUxNDpFWFBPUlRfU1lNQk9MKHNrYl92bGFuX3B1c2gpO1xubmV0L2NvcmUvc2tidWZmLmMtNjUxNS1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz00Njg9c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTUxNy1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjUxODovKiBTaW1pbGFyIHRvIHNrYl92bGFuX3B1c2guICovXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy01MTktc3RhdGljIGludCBuZl9mbG93X3ZsYW5fcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgcHJvdG8sIHUxNiBpZCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTE5Nz1zdGF0aWMgaW50IHB1c2hfdmxhbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTIwNy1cdH1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6MjA4Olx0ZXJyID0gc2tiX3ZsYW5fcHVzaChza2IsIHZsYW4tXHUwMDNldmxhbl90cGlkLFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0yMDktXHRcdFx0ICAgIG50b2hzKHZsYW4tXHUwMDNldmxhbl90Y2kpIFx1MDAyNiB+VkxBTl9DRklfTUFTSyk7XG4tLVxubmV0L3NjaGVkL2FjdF92bGFuLmM9MjI9VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl92bGFuX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9zY2hlZC9hY3Rfdmxhbi5jLTQ4LVx0Y2FzZSBUQ0FfVkxBTl9BQ1RfUFVTSDpcbm5ldC9zY2hlZC9hY3Rfdmxhbi5jOjQ5Olx0XHRlcnIgPSBza2Jfdmxhbl9wdXNoKHNrYiwgcC1cdTAwM2V0Y2Z2X3B1c2hfcHJvdG8sIHAtXHUwMDNldGNmdl9wdXNoX3ZpZCB8XG5uZXQvc2NoZWQvYWN0X3ZsYW4uYy01MC1cdFx0XHRcdCAgICAocC1cdTAwM2V0Y2Z2X3B1c2hfcHJpbyBcdTAwM2NcdTAwM2MgVkxBTl9QUklPX1NISUZUKSk7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0yMjkxLSAqXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MjI5MjogKiBsb25nIGJwZl9za2Jfdmxhbl9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl90Y2kpXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMjI5My0gKiBcdERlc2NyaXB0aW9uXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTYwMjAtXHRGTihnZXRfY2dyb3VwX2NsYXNzaWQsIDE3LCAjI2N0eClcdFx0XFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDo2MDIxOlx0Rk4oc2tiX3ZsYW5fcHVzaCwgMTgsICMjY3R4KVx0XHRcdFxcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNjAyMi1cdEZOKHNrYl92bGFuX3BvcCwgMTksICMjY3R4KVx0XHRcdFxcXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2NvbnRleHRfdGVzdF9ydW4uYz00NzE9dm9pZCB0ZXN0X3hkcF9jb250ZXh0X3R1bnRhcCh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9jb250ZXh0X3Rlc3RfcnVuLmMtNTM4LVx0LyogVGVzdHMgZm9yIEJQRiBoZWxwZXJzIHdoaWNoIHRvdWNoIGhlYWRyb29tICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfY29udGV4dF90ZXN0X3J1bi5jOjUzOTpcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2hlbHBlcl9za2Jfdmxhbl9wdXNoX3BvcFwmIzM0OykpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfY29udGV4dF90ZXN0X3J1bi5jLTU0MC1cdFx0dGVzdF90dW50YXAoc2tlbC1cdTAwM2Vwcm9ncy5pbmdfeGRwLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2NvbnRleHRfdGVzdF9ydW4uYzo1NDE6XHRcdFx0ICAgIHNrZWwtXHUwMDNlcHJvZ3MuaGVscGVyX3NrYl92bGFuX3B1c2hfcG9wLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2NvbnRleHRfdGVzdF9ydW4uYy01NDItXHRcdFx0ICAgIE5VTEwsIC8qIHRjIHByaW8gMiAqL1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF9tZXRhLmM9NTY3PVNFQyhcJiMzNDt0Y1wmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF9tZXRhLmM6NTY4OmludCBoZWxwZXJfc2tiX3ZsYW5fcHVzaF9wb3Aoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYy01Njkte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF9tZXRhLmMtNTcxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYzo1NzI6XHQvKiBicGZfc2tiX3ZsYW5fcHVzaCBhc3N1bWVzIEhXIG9mZmxvYWQgZm9yIHByaW1hcnkgVkxBTiB0YWcuIE9ubHlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF9tZXRhLmMtNTczLVx0ICogc2Vjb25kYXJ5IHRhZyBwdXNoIHRyaWdnZXJzIGFuIGFjdHVhbCBNQUMgaGVhZGVyIG1vZGlmaWNhdGlvbi5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF9tZXRhLmMtNTc0LVx0ICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfbWV0YS5jOjU3NTpcdGVyciA9IGJwZl9za2Jfdmxhbl9wdXNoKGN0eCwgMCwgNDIpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYy01NzYtXHRpZiAoZXJyKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYy01NzctXHRcdGdvdG8gb3V0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYzo1Nzg6XHRlcnIgPSBicGZfc2tiX3ZsYW5fcHVzaChjdHgsIDAsIDIwNyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfbWV0YS5jLTU3OS1cdGlmIChlcnIpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX3ZsYW4uYz0yNTg9aW50IHRjX3ZsYW5fcHVzaChzdHJ1Y3QgX19za19idWZmICpjdHgpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jLTI1OS17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jOjI2MDpcdGJwZl9za2Jfdmxhbl9wdXNoKGN0eCwgYnBmX2h0b25zKEVUSF9QXzgwMjFRKSwgVEVTVFZMQU4pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX3ZsYW4uYy0yNjEtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfdmVyaWZpZXIuYz0xODY9c3RhdGljIHZvaWQgYnBmX2ZpbGxfbGRfYWJzX3ZsYW5fcHVzaF9wb3Aoc3RydWN0IGJwZl90ZXN0ICpzZWxmKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X3ZlcmlmaWVyLmMtMjA1LVx0XHRpbnNuW2kmIzQzOyYjNDM7XSA9IEJQRl9SQVdfSU5TTihCUEZfSk1QIHwgQlBGX0NBTEwsIDAsIDAsIDAsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF92ZXJpZmllci5jOjIwNjpcdFx0XHRcdFx0IEJQRl9GVU5DX3NrYl92bGFuX3B1c2gpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfdmVyaWZpZXIuYy0yMDctXHRcdGluc25baV0gPSBCUEZfSk1QX0lNTShCUEZfSk5FLCBCUEZfUkVHXzAsIDAsIGxlbiAtIGkgLSAzKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvY2FsbHMuYy05NTUtXHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMywgMiksXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvY2FsbHMuYzo5NTY6XHRCUEZfUkFXX0lOU04oQlBGX0pNUCB8IEJQRl9DQUxMLCAwLCAwLCAwLCBCUEZfRlVOQ19za2Jfdmxhbl9wdXNoKSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9jYWxscy5jLTk1Ny1cdEJQRl9FWElUX0lOU04oKSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvbGRfYWJzLmMtODMtXHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMywgMiksXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvbGRfYWJzLmM6ODQ6XHRCUEZfUkFXX0lOU04oQlBGX0pNUCB8IEJQRl9DQUxMLCAwLCAwLCAwLCBCUEZfRlVOQ19za2Jfdmxhbl9wdXNoKSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9sZF9hYnMuYy04NS1cdEJQRl9NT1Y2NF9SRUcoQlBGX1JFR182LCBCUEZfUkVHXzcpLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9sZF9hYnMuYy0yNjAtXHRcdEJQRl9SQVdfSU5TTihCUEZfSk1QIHwgQlBGX0NBTEwsIDAsIDAsIDAsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvbGRfYWJzLmM6MjYxOlx0XHRcdCAgICAgQlBGX0ZVTkNfc2tiX3ZsYW5fcHVzaCksXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvbGRfYWJzLmMtMjYyLVx0XHRCUEZfTU9WNjRfUkVHKEJQRl9SRUdfNiwgQlBGX1JFR183KSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3NDUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVkxBTiBIYW5kbGluZyBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgVkxBTiB0YWdnaW5nIGFuZCB1bnRhZ2dpbmcgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBzb21lIGtleSBmdW5jdGlvbnMuIEl0IHNlZW1zIGxpa2UgYHNrYl92bGFuX3B1c2hgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIGZvciAqYWRkaW5nKiBhIFZMQU4gdGFnIHRvIGFuIFNLQiAoU29ja2V0IEJ1ZmZlciksIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkLiBSaWdodCBhd2F5LCBpdCYjMzk7cyBjbGVhciB0aGF0IGl0JiMzOTtzIGltcG9ydGFudCBmb3IgYSBmZXcgY3JpdGljYWwgYXJlYXMuIEZpcnN0bHksIGBicGZfc2tiX3ZsYW5fcHVzaGAgaXMgYSBCUEYgaGVscGVyLiBUaGF04oCZcyBpbnRlcmVzdGluZywgbWVhbmluZyBpdCYjMzk7cyBhY2Nlc3NpYmxlIGZyb20gd2l0aGluIFRyYWZmaWMgQ29udHJvbCAodGMpIEJQRiBwcm9ncmFtcyEgVGhpcyBpbXBsaWVzIHRoYXQgdGhlIFZMQU4gdGFnZ2luZyBsb2dpYyBjYW4gYmUgZHluYW1pY2FsbHkgY29udHJvbGxlZCBhbmQgbW9kaWZpZWQgYXQgcnVudGltZSwgYSBwb3dlcmZ1bCBjYXBhYmlsaXR5LgoKQmV5b25kIEJQRiwgaXQmIzM5O3MgYWxzbyBiZWluZyB1dGlsaXplZCBieSBPcGVuIHZTd2l0Y2ggd2l0aCBgcHVzaF92bGFuYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gT1ZTLCBiZWluZyBhIHNvZnR3YXJlIHN3aXRjaCwgbmVlZHMgdG8gaGFuZGxlIFZMQU5zIGV4dGVuc2l2ZWx5LiBBbmQgZmluYWxseSwgdGhlIGB0YyBhY3RfdmxhbmAgYWN0aW9uIHVzZXMgaXQgdGhyb3VnaCBgdGNmX3ZsYW5fYWN0YC4gU28sIGl0JiMzOTtzIGludGVncmFsIHRvIHRoZSB1c2VyLXNwYWNlIHRyYWZmaWMgY29udHJvbCBmdW5jdGlvbmFsaXR5LgoKTm93LCBvbiB0aGUgKnJlY2VpdmluZyogc2lkZSwgSSBzZWUgYHZsYW5fZG9fcmVjZWl2ZWAgaXMgcGxheWluZyBhIHJvbGUuIFRoaXMgaXMgdHJpZ2dlcmVkIHdpdGhpbiB0aGUgc3RhbmRhcmQgbmV0d29ya2luZyByZWNlaXZlIHBhdGgsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9jb3JlL2Rldi5jYCBpbiB0aGUgYF9fbmV0aWZfcmVjZWl2ZV9za2JfY29yZWAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYXQgdGhlIGhlYXJ0IG9mIGhvdyBpbmNvbWluZyBwYWNrZXRzIGFyZSBwcm9jZXNzZWQuIFRoaXMgd2FycmFudHMgYSBtb3JlIGRldGFpbGVkIGxvb2suIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IGV4YWN0bHkgaG93IGB2bGFuX2RvX3JlY2VpdmVgIGZ1bmN0aW9ucyB0byBzZWUgaG93IFZMQU5zIGFyZSBoYW5kbGVkIGFuZCB1bnRhZ2dlZCBmcm9tIGluY29taW5nIHBhY2tldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZsYW5fZG9fcmVjZWl2ZVxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD0yMTE9dmxhbl9kZXZfZ2V0X2VncmVzc19xb3NfbWFzayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc2twcmlvKVxuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTIzMy1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjIzNDpleHRlcm4gYm9vbCB2bGFuX2RvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipza2IpO1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMjM1LVxuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTI4NT1zdGF0aWMgaW5saW5lIHUxNiB2bGFuX2Rldl9nZXRfZWdyZXNzX3Fvc19tYXNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMjkwLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6MjkxOnN0YXRpYyBpbmxpbmUgYm9vbCB2bGFuX2RvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipza2IpXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0yOTIte1xuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYy05LVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjEwOmJvb2wgdmxhbl9kb19yZWNlaXZlKHN0cnVjdCBza19idWZmICoqc2ticClcbm5ldC84MDIxcS92bGFuX2NvcmUuYy0xMS17XG4tLVxubmV0L2NvcmUvZGV2LmM9NjAzND1zdGF0aWMgaW50IF9fbmV0aWZfcmVjZWl2ZV9za2JfY29yZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIGJvb2wgcGZtZW1hbGxvYyxcbi0tXG5uZXQvY29yZS9kZXYuYy02MTM4LVx0XHR9XG5uZXQvY29yZS9kZXYuYzo2MTM5Olx0XHRpZiAodmxhbl9kb19yZWNlaXZlKFx1MDAyNnNrYikpXG5uZXQvY29yZS9kZXYuYy02MTQwLVx0XHRcdGdvdG8gYW5vdGhlcl9yb3VuZDtcbi0tXG5uZXQvY29yZS9kZXYuYy02MTY5LVx0XHRpZiAoc2tiX3ZsYW5fdGFnX2dldF9pZChza2IpKSB7XG5uZXQvY29yZS9kZXYuYzo2MTcwOlx0XHRcdC8qIFZsYW4gaWQgaXMgbm9uIDAgYW5kIHZsYW5fZG9fcmVjZWl2ZSgpIGFib3ZlIGNvdWxkbiYjMzk7dFxubmV0L2NvcmUvZGV2LmMtNjE3MS1cdFx0XHQgKiBmaW5kIHZsYW4gZGV2aWNlLlxuLS1cbm5ldC9jb3JlL2Rldi5jLTYxNzUtXHRcdFx0LyogT3V0ZXIgaGVhZGVyIGlzIDgwMi4xUCB3aXRoIHZsYW4gMCwgaW5uZXIgaGVhZGVyIGlzXG5uZXQvY29yZS9kZXYuYzo2MTc2Olx0XHRcdCAqIDgwMi4xUSBvciA4MDIuMUFEIGFuZCB2bGFuX2RvX3JlY2VpdmUoKSBhYm92ZSBjb3VsZFxubmV0L2NvcmUvZGV2LmMtNjE3Ny1cdFx0XHQgKiBub3QgZmluZCB2bGFuIGRldiBmb3IgdmxhbiBpZCAwLlxuLS1cbm5ldC9jb3JlL2Rldi5jLTYxODItXHRcdFx0XHRnb3RvIG91dDtcbm5ldC9jb3JlL2Rldi5jOjYxODM6XHRcdFx0aWYgKHZsYW5fZG9fcmVjZWl2ZShcdTAwMjZza2IpKVxubmV0L2NvcmUvZGV2LmMtNjE4NC1cdFx0XHRcdC8qIEFmdGVyIHN0cmlwcGluZyBvZmYgODAyLjFQIGhlYWRlciB3aXRoIHZsYW4gMFxuLS1cbm5ldC9jb3JlL2Rldi5jLTYxOTctXHRcdC8qIE5vdGU6IHdlIG1pZ2h0IGluIHRoZSBmdXR1cmUgdXNlIHByaW8gYml0c1xubmV0L2NvcmUvZGV2LmM6NjE5ODpcdFx0ICogYW5kIHNldCBza2ItXHUwMDNlcHJpb3JpdHkgbGlrZSBpbiB2bGFuX2RvX3JlY2VpdmUoKVxubmV0L2NvcmUvZGV2LmMtNjE5OS1cdFx0ICogRm9yIHRoZSB0aW1lIGJlaW5nLCBqdXN0IGlnbm9yZSBQcmlvcml0eSBDb2RlIFBvaW50XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDIzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHJlcXVlc3QsIHRoaW5raW5nIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRpdmluZyBpbnRvIHRoZSBWTEFOIFJlY2VpdmUgUGF0aCoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBpcyB0byB1bmRlcnN0YW5kIHRoZSBgdmxhbl9kb19yZWNlaXZlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC84MDIxcS92bGFuX2NvcmUuY2AgZmlsZS4gVGhpcyB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIFZMQU4gKFZpcnR1YWwgTEFOKSBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgTGludXgga2VybmVsLCBhbmQgbW9yZSBwcmVjaXNlbHksIHRoZSBjb3JlIFZMQU4gaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgaGFwcGVuaW5nIGR1cmluZyB0aGUgcmVjZWl2ZSBwYXRoLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgaXQgaXMgd2hhdCBJIHRoaW5rIGl0IGlzLCBob3dldmVyIEkmIzM5O2xsIGxvb2sgaW50byBpdC4gVGhpcyBtZWFucyBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgYSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgaW5jb21pbmcgRXRoZXJuZXQgZnJhbWVzIHRoYXQgYXJlIHRhZ2dlZCB3aXRoIGEgVkxBTiBJRC4gSXQmIzM5O3MgdGhlIHBvaW50IGluIHRoZSBzdGFjayB3aGVyZSB0aGUga2VybmVsIG5lZWRzIHRvIGRlY2lkZTogZG9lcyB0aGlzIGZyYW1lIGJlbG9uZyB0byB0aGUgY3VycmVudCBob3N0LCBvciBzaG91bGQgaXQgYmUgZm9yd2FyZGVkPyBXaGF0IG5lZWRzIHRvIGJlIGRvbmUgd2l0aCBpdD8gSXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgYXMgcGFydCBvZiB0aGUgcmVjZWl2ZSBwYXRoLCBhcyBvcHBvc2VkIHRvIHRoZSB0cmFuc21pdCBwYXRoPyBUaGUgZmlsZSBwYXRoIGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYW5kIEkga25vdyBleGFjdGx5IHdoZXJlIHRvIGxvb2sgZm9yIHRoaXMgZnVuY3Rpb24uIEtub3dpbmcgdGhpcyBmaWxlIGFuZCBmdW5jdGlvbiB3aWxsIGxldCBtZSB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlkZW50aWZpZXMsIGhhbmRsZXMgYW5kIGZpbHRlcnMgZnJhbWVzLCB3aGljaCB3aWxsIGdpdmUgbWUgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSB3aG9sZSBpbXBsZW1lbnRhdGlvbi4gSSB3aWxsIHN0YXJ0IGJ5IGZpZ3VyaW5nIG91dCB0aGUgY2FsbGluZyBjb252ZW50aW9ucyBhbmQgdGhlbiBsb29rIGZvciB0aGUgY3JpdGljYWwgcGFydHMgb2YgdGhlIHJlY2VpdmUgcHJvY2Vzcywgc3VjaCBhcyBmcmFtZSB2YWxpZGF0aW9uLCBWTEFOIElEIGV4dHJhY3Rpb24sIGFuZCBmaWx0ZXJpbmcgYmFzZWQgb24gcmVnaXN0ZXJlZCBWTEFOIGludGVyZmFjZXMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBsaWtlIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgYW5kIGFueSBWTEFOLXNwZWNpZmljIG1ldGFkYXRhIGl0IG1pZ2h0IGNhcnJ5LiBVbHRpbWF0ZWx5LCBJJiMzOTttIGV4cGVjdGluZyB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGVmZmljaWVudGx5IHN0ZWVycyBpbmNvbWluZywgdGFnZ2VkIEV0aGVybmV0IGZyYW1lcyB0byB0aGUgY29ycmVjdCBuZXR3b3JrIGludGVyZmFjZXMsIGFzIGl0JiMzOTtzIGEgY3JpdGljYWwgY29tcG9uZW50IHRvIGFueSBuZXR3b3JrIGltcGxlbWVudGF0aW9uIHVzaW5nIFZMQU5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC84MDIxcS92bGFuX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAgIDM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICAgNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFx1MDAzZVxuICAgNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldHBvbGwuaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbmV0L2dyby5oXHUwMDNlXG4gICA4Olx0I2luY2x1ZGUgXCYjMzQ7dmxhbi5oXCYjMzQ7XG4gICA5Olx0XG4gIDEwOlx0Ym9vbCB2bGFuX2RvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipza2JwKVxuICAxMTpcdHtcbiAgMTI6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSAqc2ticDtcbiAgMTM6XHRcdF9fYmUxNiB2bGFuX3Byb3RvID0gc2tiLVx1MDAzZXZsYW5fcHJvdG87XG4gIDE0Olx0XHR1MTYgdmxhbl9pZCA9IHNrYl92bGFuX3RhZ19nZXRfaWQoc2tiKTtcbiAgMTU6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2RldjtcbiAgMTY6XHRcdHN0cnVjdCB2bGFuX3BjcHVfc3RhdHMgKnJ4X3N0YXRzO1xuICAxNzpcdFxuICAxODpcdFx0dmxhbl9kZXYgPSB2bGFuX2ZpbmRfZGV2KHNrYi1cdTAwM2VkZXYsIHZsYW5fcHJvdG8sIHZsYW5faWQpO1xuICAxOTpcdFx0aWYgKCF2bGFuX2RldilcbiAgMjA6XHRcdFx0cmV0dXJuIGZhbHNlO1xuICAyMTpcdFxuICAyMjpcdFx0c2tiID0gKnNrYnAgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTtcbiAgMjM6XHRcdGlmICh1bmxpa2VseSghc2tiKSlcbiAgMjQ6XHRcdFx0cmV0dXJuIGZhbHNlO1xuICAyNTpcdFxuICAyNjpcdFx0aWYgKHVubGlrZWx5KCEodmxhbl9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkpKSB7XG4gIDI3Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuICAyODpcdFx0XHQqc2ticCA9IE5VTEw7XG4gIDI5Olx0XHRcdHJldHVybiBmYWxzZTtcbiAgMzA6XHRcdH1cbiAgMzE6XHRcbiAgMzI6XHRcdHNrYi1cdTAwM2VkZXYgPSB2bGFuX2RldjtcbiAgMzM6XHRcdGlmICh1bmxpa2VseShza2ItXHUwMDNlcGt0X3R5cGUgPT0gUEFDS0VUX09USEVSSE9TVCkpIHtcbiAgMzQ6XHRcdFx0LyogT3VyIGxvd2VyIGxheWVyIHRoaW5rcyB0aGlzIGlzIG5vdCBsb2NhbCwgbGV0JiMzOTtzIG1ha2Ugc3VyZS5cbiAgMzU6XHRcdFx0ICogVGhpcyBhbGxvd3MgdGhlIFZMQU4gdG8gaGF2ZSBhIGRpZmZlcmVudCBNQUMgdGhhbiB0aGVcbiAgMzY6XHRcdFx0ICogdW5kZXJseWluZyBkZXZpY2UsIGFuZCBzdGlsbCByb3V0ZSBjb3JyZWN0bHkuICovXG4gIDM3Olx0XHRcdGlmIChldGhlcl9hZGRyX2VxdWFsXzY0Yml0cyhldGhfaGRyKHNrYiktXHUwMDNlaF9kZXN0LCB2bGFuX2Rldi1cdTAwM2VkZXZfYWRkcikpXG4gIDM4Olx0XHRcdFx0c2tiLVx1MDAzZXBrdF90eXBlID0gUEFDS0VUX0hPU1Q7XG4gIDM5Olx0XHR9XG4gIDQwOlx0XG4gIDQxOlx0XHRpZiAoISh2bGFuX2Rldl9wcml2KHZsYW5fZGV2KS1cdTAwM2VmbGFncyBcdTAwMjYgVkxBTl9GTEFHX1JFT1JERVJfSERSKSBcdTAwMjZcdTAwMjZcbiAgNDI6XHRcdCAgICAhbmV0aWZfaXNfbWFjdmxhbl9wb3J0KHZsYW5fZGV2KSBcdTAwMjZcdTAwMjZcbiAgNDM6XHRcdCAgICAhbmV0aWZfaXNfYnJpZGdlX3BvcnQodmxhbl9kZXYpKSB7XG4gIDQ0Olx0XHRcdHVuc2lnbmVkIGludCBvZmZzZXQgPSBza2ItXHUwMDNlZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHNrYik7XG4gIDQ1Olx0XG4gIDQ2Olx0XHRcdC8qXG4gIDQ3Olx0XHRcdCAqIHZsYW5faW5zZXJ0X3RhZyBleHBlY3Qgc2tiLVx1MDAzZWRhdGEgcG9pbnRpbmcgdG8gbWFjIGhlYWRlci5cbiAgNDg6XHRcdFx0ICogU28gY2hhbmdlIHNrYi1cdTAwM2VkYXRhIGJlZm9yZSBjYWxsaW5nIGl0IGFuZCBjaGFuZ2UgYmFjayB0b1xuICA0OTpcdFx0XHQgKiBvcmlnaW5hbCBwb3NpdGlvbiBsYXRlclxuICA1MDpcdFx0XHQgKi9cbiAgNTE6XHRcdFx0c2tiX3B1c2goc2tiLCBvZmZzZXQpO1xuICA1MjpcdFx0XHRza2IgPSAqc2ticCA9IHZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHNrYi1cdTAwM2V2bGFuX3Byb3RvLFxuICA1MzpcdFx0XHRcdFx0XHRcdCAgICBza2ItXHUwMDNldmxhbl90Y2ksIHNrYi1cdTAwM2VtYWNfbGVuKTtcbiAgNTQ6XHRcdFx0aWYgKCFza2IpXG4gIDU1Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuICA1NjpcdFx0XHRza2JfcHVsbChza2IsIG9mZnNldCAmIzQzOyBWTEFOX0hMRU4pO1xuICA1NzpcdFx0XHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xuICA1ODpcdFx0fVxuICA1OTpcdFxuICA2MDpcdFx0c2tiLVx1MDAzZXByaW9yaXR5ID0gdmxhbl9nZXRfaW5ncmVzc19wcmlvcml0eSh2bGFuX2Rldiwgc2tiLVx1MDAzZXZsYW5fdGNpKTtcbiAgNjE6XHRcdF9fdmxhbl9od2FjY2VsX2NsZWFyX3RhZyhza2IpO1xuICA2MjpcdFxuICA2MzpcdFx0cnhfc3RhdHMgPSB0aGlzX2NwdV9wdHIodmxhbl9kZXZfcHJpdih2bGFuX2RldiktXHUwMDNldmxhbl9wY3B1X3N0YXRzKTtcbiAgNjQ6XHRcbiAgNjU6XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cnhfc3RhdHMtXHUwMDNlc3luY3ApO1xuICA2NjpcdFx0dTY0X3N0YXRzX2luYyhcdTAwMjZyeF9zdGF0cy1cdTAwM2VyeF9wYWNrZXRzKTtcbiAgNjc6XHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2cnhfc3RhdHMtXHUwMDNlcnhfYnl0ZXMsIHNrYi1cdTAwM2VsZW4pO1xuICA2ODpcdFx0aWYgKHNrYi1cdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfTVVMVElDQVNUKVxuICA2OTpcdFx0XHR1NjRfc3RhdHNfaW5jKFx1MDAyNnJ4X3N0YXRzLVx1MDAzZXJ4X211bHRpY2FzdCk7XG4gIDcwOlx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyeF9zdGF0cy1cdTAwM2VzeW5jcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjY5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVkxBTiBUYWcgSW5zZXJ0aW9uIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBgdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC4gSXQmIzM5O3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGlubGluZSBmdW5jdGlvbjogdGFrZXMgYSBzb2NrZXQgYnVmZmVyIChgc2tiYCksIHRoZSBWTEFOIHByb3RvY29sLCB0aGUgVkxBTiBUQ0ksIGFuZCB0aGUgTUFDIGxlbmd0aC4gSXRzIGpvYiBpcyB0byBpbnNlcnQgYW4gaW5uZXIgVkxBTiB0YWcsIGFuZCBpZiBpdCBmYWlscywgaXQgZnJlZXMgdGhlIGBza2JgIGFuZCByZXR1cm5zIGBOVUxMYC4gIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBqdXN0IGEgd3JhcHBlciBhcm91bmQgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0IGlzIGluIHRoZSBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGZ1bmN0aW9uLCB3aGljaCwgZnJvbSB0aGUgcGF0Y2gsIHNlZW1zIHRvIGhhdmUgaGFkIGEgY3J1Y2lhbCBhZGRpdGlvbi4gSXQgbm93IGluY2x1ZGVzIGEgY2hlY2sgdXNpbmcgYHBza2JfbWF5X3B1bGxgIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLiBJdCYjMzk7cyB1c2luZyBgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pYC4gUmlnaHQuIFNvLCBpdCYjMzk7cyB2ZXJpZnlpbmcgdGhhdCB0aGVyZSYjMzk7cyBlbm91Z2ggZGF0YSBhdmFpbGFibGUgaW4gdGhlIHNvY2tldCBidWZmZXIgKGBza2JgKSB0byBwdWxsIHRoZSBgbWFjX2xlbmAgYnl0ZXMuIElmIGl0IGZhaWxzLCByZXR1cm5pbmcgYC1FSU5WQUxgLiBUaGlzIGlzIGEgY2xhc3NpYyBidWZmZXIgb3ZlcnJlYWQgcHJvdGVjdGlvbi4gVGhpcyBpcyBnb29kLgoKU28sIHRoaXMgcGF0Y2ggcHJvYmFibHkgZml4ZWQgYSB2dWxuZXJhYmlsaXR5IHdoZXJlIHRoZSBmdW5jdGlvbiBjb3VsZCBwb3RlbnRpYWxseSByZWFkIGJleW9uZCB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBpZiB0aGUgYG1hY19sZW5gIHdhcyBsYXJnZXIgdGhhbiB0aGUgYXZhaWxhYmxlIGRhdGEgaW4gdGhlIHNvY2tldCBidWZmZXIsIHdoaWNoIGNvdWxkIGhhdmUgbGVkIHRvIGEgY3Jhc2ggb3IsIHdvcnNlLCBhIHNlY3VyaXR5IGV4cGxvaXQuIEkgc2hvdWxkIGxvb2sgaW50byB0aGUgY29tbWl0IG1lc3NhZ2Ugb3IgcmVsYXRlZCBidWcgcmVwb3J0cyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCBidXQgdGhpcyBhZGRlZCBjaGVjayBpcyBkZWZpbml0ZWx5IGEgc29saWQgZGVmZW5zaXZlIG1lYXN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Bza2JfbWF5X3B1bGxcXChza2IsIG1hY19sZW5cXCkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pZl92bGFuLmg9MzYxPXN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzY3LVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6MzY4Olx0aWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbikpKVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzY5LVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0OTQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgYW5kIGl0cyBDYWxsZXJzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCBmdW5jdGlvbiwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIGluc2VydGluZyBhIFZMQU4gdGFnIGludG8gYSBza2IuIFRoZSBjb3JlIG9mIGl0IGludm9sdmVzIHB1c2hpbmcgc3BhY2Ugb250byB0aGUgc2tiLCBzaGlmdGluZyBleGlzdGluZyBNQUMgaGVhZGVyIGRhdGEsIGFuZCB0aGVuIHBvcHVsYXRpbmcgdGhlIG5ldyBWTEFOIGhlYWRlci4gVGhlIGNydWNpYWwgcGFydCBoZXJlIGlzIHRoZSBhY2Nlc3MgdG8gYHNrYi0mZ3Q7ZGF0YSAmIzQzOyBtYWNfbGVuIC0gRVRIX0hMRU5gLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIHBvdGVudGlhbCBmb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgZGF0YSBjb3JydXB0aW9uLiBJZiBgbWFjX2xlbmAgaXMgZ3JlYXRlciB0aGFuIHRoZSBhbW91bnQgb2YgZGF0YSBjdXJyZW50bHkgaW4gdGhlIHNrYiYjMzk7cyBsaW5lYXIgYnVmZmVyLCB0aGF0IGFjY2VzcyB3b3VsZCBiZSBpbGxlZ2FsLiBGb3J0dW5hdGVseSwgaXQgbG9va3MgbGlrZSBgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pYCBpcyB0aGVyZSBhcyBhIGd1YXJkLiBJdCBhcHBlYXJzIHRoYXQgaXQgZW5zdXJlcyB0aGF0IHRoZSBza2IgaGFzIHRoZSBuZWNlc3NhcnkgZGF0YSB0byBwZXJmb3JtIHRoZXNlIG9wZXJhdGlvbnMgc2FmZWx5LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICp1c2VkKi4gSXQgbG9va3MgbGlrZSBpdCBpcyByZWFjaGFibGUgZnJvbSBhIGZldyBrZXkgYXJlYXMgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBJIHNlZSBjb25uZWN0aW9ucyBmcm9tIGB0Y2ZfbXBsc19hY3RgIChsaWtlbHkgZm9yIE1QTFMgb3ZlciBWTEFOKSwgYHNrYl92bGFuX3B1c2hgICh0aGUgZ2VuZXJhbCBWTEFOIHB1c2ggZnVuY3Rpb24pLCB3aGljaCBpcyBhbHNvIGFjY2Vzc2VkIGJ5IEJQRiwgT1ZTLCBhbmQgVEMsIGB2bGFuX2RvX3JlY2VpdmVgIChpbXBvcnRhbnQgZm9yIFZMQU4gcGFja2V0IHJlY2VwdGlvbiksIGFuZCBldmVuIEJBVE1BTi1hZHYuCgpBIHF1aWNrIG5vdGUgdG8gbXlzZWxmOiBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGlzIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbiBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaGAuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycywgYmVjYXVzZSBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHRoZSBjYWxsZXIgZnVuY3Rpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0sIGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzLiBJbiB0aGlzIGNhc2UsIGBza2Jfdmxhbl9wdXNoYCBpcyBhIGdvb2QgY2FuZGlkYXRlLCBhcyBpdCBzZWVtcyB0byBiZSB0aGUgbWFpbiBjYWxsZXIgb2YgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC4gSSYjMzk7bGwgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDg4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY0ODg6XHQgKi9cbjY0ODk6XHRpbnQgc2tiX3ZsYW5fcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5fdGNpKVxuNjQ5MDpcdHtcbjY0OTE6XHRcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XG42NDkyOlx0XHRcdGludCBvZmZzZXQgPSBza2ItXHUwMDNlZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHNrYik7XG42NDkzOlx0XHRcdGludCBlcnI7XG42NDk0Olx0XG42NDk1Olx0XHRcdGlmIChXQVJOX09OQ0Uob2Zmc2V0LFxuNjQ5NjpcdFx0XHRcdCAgICAgIFwmIzM0O3NrYl92bGFuX3B1c2ggZ290IHNrYiB3aXRoIHNrYi1cdTAwM2VkYXRhIG5vdCBhdCBtYWMgaGVhZGVyIChvZmZzZXQgJWQpXFxuXCYjMzQ7LFxuNjQ5NzpcdFx0XHRcdCAgICAgIG9mZnNldCkpIHtcbjY0OTg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjY0OTk6XHRcdFx0fVxuNjUwMDpcdFxuNjUwMTpcdFx0XHRlcnIgPSBfX3ZsYW5faW5zZXJ0X3RhZyhza2IsIHNrYi1cdTAwM2V2bGFuX3Byb3RvLFxuNjUwMjpcdFx0XHRcdFx0XHRza2Jfdmxhbl90YWdfZ2V0KHNrYikpO1xuNjUwMzpcdFx0XHRpZiAoZXJyKVxuNjUwNDpcdFx0XHRcdHJldHVybiBlcnI7XG42NTA1Olx0XG42NTA2Olx0XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IHNrYi1cdTAwM2V2bGFuX3Byb3RvO1xuNjUwNzpcdFx0XHRza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgLT0gVkxBTl9ITEVOO1xuNjUwODpcdFxuNjUwOTpcdFx0XHRza2JfcG9zdHB1c2hfcmNzdW0oc2tiLCBza2ItXHUwMDNlZGF0YSAmIzQzOyAoMiAqIEVUSF9BTEVOKSwgVkxBTl9ITEVOKTtcbjY1MTA6XHRcdH1cbjY1MTE6XHRcdF9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCB2bGFuX3Byb3RvLCB2bGFuX3RjaSk7XG42NTEyOlx0XHRyZXR1cm4gMDtcbjY1MTM6XHR9XG42NTE0Olx0RVhQT1JUX1NZTUJPTChza2Jfdmxhbl9wdXNoKTtcbjY1MTU6XHRcbjY1MTY6XHQvKipcbjY1MTc6XHQgKiBza2JfZXRoX3BvcCgpIC0gRHJvcCB0aGUgRXRoZXJuZXQgaGVhZGVyIGF0IHRoZSBoZWFkIG9mIGEgcGFja2V0XG42NTE4Olx0ICpcbjY1MTk6XHQgKiBAc2tiOiBTb2NrZXQgYnVmZmVyIHRvIG1vZGlmeVxuNjUyMDpcdCAqXG42NTIxOlx0ICogRHJvcCB0aGUgRXRoZXJuZXQgaGVhZGVyIG9mIEBza2IuXG42NTIyOlx0ICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzODYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgT2JzZXJ2YXRpb25zIG9uIFZMQU4gVGFnIEluc2VydGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IFZMQU4gdGFncyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHRoZSBpbnNlcnRpb24gcHJvY2Vzcy4gSW4gYHNrYl92bGFuX3B1c2hgLCBpdCYjMzk7cyBjbGVhciB0aGF0IGBfX3ZsYW5faW5zZXJ0X3RhZ2AgaXMgdGhlIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCwgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIHRoYXQgYF9fdmxhbl9pbnNlcnRfdGFnYCBpcyBhIHNpbXBsZSB3cmFwcGVyIGZvciBgX192bGFuX2luc2VydF9pbm5lcl90YWdgLiBCZWNhdXNlIGl0JiMzOTtzIGFuIGlubGluZSBmdW5jdGlvbiwgSSYjMzk7bSBwcmV0dHkgc3VyZSBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGdldHMgaW5saW5lZCBkaXJlY3RseSBpbnRvIGBza2Jfdmxhbl9wdXNoYCwgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4KCk5vdywgbGV0JiMzOTtzIGJyb2FkZW4gdGhlIHNjb3BlLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgdmxhbl9kb19yZWNlaXZlYCBpbiBgbmV0LzgwMjFxL3ZsYW5fY29yZS5jYC4gQXMgZXhwZWN0ZWQsIHRoaXMgY2FsbHMgYHZsYW5faW5zZXJ0X2lubmVyX3RhZ2AsIGFuZCB0aGF0IGluIHR1cm4gY2FsbHMgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC4gQW5kIGp1c3QgbGlrZSBiZWZvcmUsIHRoYXQgZnVuY3Rpb24gaXMgaW5saW5lZCwgc28gaXQgYXBwZWFycyBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGlzIGlubGluZWQgaGVyZSBhcyB3ZWxsLgoKRmluYWxseSwgSSYjMzk7bGwgc2hpZnQgZ2VhcnMgdG8gYG5ldC9zY2hlZC9hY3RfbXBscy5jYCwgdG8gaW52ZXN0aWdhdGUgaG93IGBhY3RfbXBsc2AgaW50ZXJhY3RzIHdpdGggVkxBTiB0YWdnaW5nLiBUaGUgY29kZSBpbiB0aGVyZSBjYWxscyBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGFzIHdlbGwuIFNlZW1zIGxpa2UgSSBzaG91bGQgaW5zcGVjdCBhcm91bmQgbGluZSA5MCB0byBzZWUgZXhhY3RseSBob3cgaXQgd29ya3MuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbnRleHQgb2YgdGhlIGNvZGUgdG8gZmlndXJlIG91dCBwcmVjaXNlbHkgd2hhdCBpdCYjMzk7cyBkb2luZyB3aXRoIHRoaXMgaW5uZXIgdGFnIGluc2VydGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X21wbHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRcdFx0XHRcdCBza2ItXHUwMDNlZGV2IFx1MDAyNlx1MDAyNiBza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSKSlcbiAgODE6XHRcdFx0XHRnb3RvIGRyb3A7XG4gIDgyOlx0XHRcdGJyZWFrO1xuICA4MzpcdFx0Y2FzZSBUQ0FfTVBMU19BQ1RfUFVTSDpcbiAgODQ6XHRcdFx0bmV3X2xzZSA9IHRjZl9tcGxzX2dldF9sc2UoTlVMTCwgcCwgIWV0aF9wX21wbHMoc2tiX3Byb3RvY29sKHNrYiwgdHJ1ZSkpKTtcbiAgODU6XHRcdFx0aWYgKHNrYl9tcGxzX3B1c2goc2tiLCBuZXdfbHNlLCBwLVx1MDAzZXRjZm1fcHJvdG8sIG1hY19sZW4sXG4gIDg2Olx0XHRcdFx0XHQgIHNrYi1cdTAwM2VkZXYgXHUwMDI2XHUwMDI2IHNrYi1cdTAwM2VkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIpKVxuICA4NzpcdFx0XHRcdGdvdG8gZHJvcDtcbiAgODg6XHRcdFx0YnJlYWs7XG4gIDg5Olx0XHRjYXNlIFRDQV9NUExTX0FDVF9NQUNfUFVTSDpcbiAgOTA6XHRcdFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHtcbiAgOTE6XHRcdFx0XHRpZiAoX192bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCBza2ItXHUwMDNldmxhbl9wcm90byxcbiAgOTI6XHRcdFx0XHRcdFx0XHQgICAgc2tiX3ZsYW5fdGFnX2dldChza2IpLFxuICA5MzpcdFx0XHRcdFx0XHRcdCAgICBFVEhfSExFTikgXHUwMDNjIDApXG4gIDk0Olx0XHRcdFx0XHRnb3RvIGRyb3A7XG4gIDk1Olx0XG4gIDk2Olx0XHRcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gc2tiLVx1MDAzZXZsYW5fcHJvdG87XG4gIDk3Olx0XHRcdFx0X192bGFuX2h3YWNjZWxfY2xlYXJfdGFnKHNrYik7XG4gIDk4Olx0XHRcdH1cbiAgOTk6XHRcbiAxMDA6XHRcdFx0bmV3X2xzZSA9IHRjZl9tcGxzX2dldF9sc2UoTlVMTCwgcCwgbWFjX2xlbiB8fFxuIDEwMTpcdFx0XHRcdFx0XHQgICAhZXRoX3BfbXBscyhza2ItXHUwMDNlcHJvdG9jb2wpKTtcbiAxMDI6XHRcbiAxMDM6XHRcdFx0aWYgKHNrYl9tcGxzX3B1c2goc2tiLCBuZXdfbHNlLCBwLVx1MDAzZXRjZm1fcHJvdG8sIDAsIGZhbHNlKSlcbiAxMDQ6XHRcdFx0XHRnb3RvIGRyb3A7XG4gMTA1Olx0XHRcdGJyZWFrO1xuIDEwNjpcdFx0Y2FzZSBUQ0FfTVBMU19BQ1RfTU9ESUZZOlxuIDEwNzpcdFx0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLFxuIDEwODpcdFx0XHRcdFx0ICAgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikgJiM0MzsgTVBMU19ITEVOKSlcbiAxMDk6XHRcdFx0XHRnb3RvIGRyb3A7XG4gMTEwOlx0XHRcdG5ld19sc2UgPSB0Y2ZfbXBsc19nZXRfbHNlKG1wbHNfaGRyKHNrYiksIHAsIGZhbHNlKTtcbiAxMTE6XHRcdFx0aWYgKHNrYl9tcGxzX3VwZGF0ZV9sc2Uoc2tiLCBuZXdfbHNlKSlcbiAxMTI6XHRcdFx0XHRnb3RvIGRyb3A7XG4gMTEzOlx0XHRcdGJyZWFrO1xuIDExNDpcdFx0Y2FzZSBUQ0FfTVBMU19BQ1RfREVDX1RUTDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3MjYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFZMQU4gVGFnIEluc2VydGlvbiBpbiB0aGUgS2VybmVsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgZm9jdXNlZCBvbiBob3cgVkxBTiB0YWdzIGFyZSBpbnNlcnRlZCB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIEkgc2VlIGB0Y2ZfbXBsc19hY3RgIGRpcmVjdGx5IGNhbGxzIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2Ag4oCTIHRoYXQmIzM5O3MgdGhlIGNvcmUgZnVuY3Rpb24uIEkmIzM5O20gbm90aW5nIHRoZSBwYXJhbWV0ZXJzOiB0aGUgYHNrYmAgKHNvY2tldCBidWZmZXIpLCB0aGUgVkxBTiBwcm90b2NvbCwgdGhlIHRhZyBpdHNlbGYsIGFuZCBgRVRIX0hMRU5gLCB0aGUgRXRoZXJuZXQgaGVhZGVyIGxlbmd0aC4gSSBhbHNvIHNlZSB0aGF0IGB2bGFuX2RvX3JlY2VpdmVgIGluIGBuZXQvODAyMXEvdmxhbl9jb3JlLmNgIHV0aWxpemVzIGB2bGFuX2luc2VydF9pbm5lcl90YWdgLCBidXQgd2l0aCBhIHBvdGVudGlhbGx5IHZhcmlhYmxlIGBtYWNfbGVuYC4gVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLgoKSW4gYHZsYW5fZG9fcmVjZWl2ZWAsIHRoZSBgbWFjX2xlbmAgcGFyYW1ldGVyIGlzIGEgZmxhZyBmb3IgcG90ZW50aWFsIGlzc3Vlcy4gVGhlIGNvZGUgY2hlY2tzIHdpdGggYHBza2JfbWF5X3B1bGwoc2tiLCBtYWNfbGVuKWAgYmVmb3JlIHByb2NlZWRpbmcuIElmIHRoYXQgcHVsbCBmYWlscywgbWVhbmluZyB0aGUgcGFja2V0IGlzbiYjMzk7dCBiaWcgZW5vdWdoLCBgdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCByZXR1cm5zIE5VTEwsIGVmZmVjdGl2ZWx5IGZyZWVpbmcgdGhlIGBza2JgIGFuZCByZXR1cm5pbmcgZmFsc2UuIFRoYXQmIzM5O3MgYSBnb29kIHNhZmVndWFyZCwgYnV0IGl0IGhpZ2hsaWdodHMgdGhlIGRlcGVuZGVuY3kgb24gYG1hY19sZW5gIGJlaW5nIHZhbGlkLgoKTm93LCBjb21wYXJlIHRoYXQgdG8gYHNrYl92bGFuX3B1c2hgLiBUaGlzIGZ1bmN0aW9uIGNhbGxzIGBfX3ZsYW5faW5zZXJ0X3RhZ2AsIHdoaWNoLCBhcyB3ZSBzYXcgZWFybGllciwgdWx0aW1hdGVseSBjYWxscyBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGJ1dCBhbHdheXMgdXNlcyBgRVRIX0hMRU5gLiBJZiBgcHNrYl9tYXlfcHVsbChza2IsIEVUSF9ITEVOKWAgZmFpbHMgaGVyZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgLUVJTlZBTC4gVGhhdCYjMzk7cyBhbm90aGVyIHNhZmV0eSBtZWFzdXJlLCBidXQgdGhlIGRpZmZlcmVuY2UgaW4gaGFuZGxpbmcgYmV0d2VlbiB0aGVzZSB0d28gY2FzZXMgaXMgd29ydGggcG9uZGVyaW5nLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9ucy4gYHNrYl92bGFuX3B1c2hgIHJlc2lkZXMgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gSW1wb3J0YW50bHksIHRoaXMgY29kZSBpcyBhbHdheXMgYnVpbHQgaWYgYENPTkZJR19ORVRgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwaWVjZSBvZiBmdW5jdGlvbmFsaXR5LiBGb3IgYHZsYW5fZG9fcmVjZWl2ZWAsIEkgc2VlIGl0IGxpdmVzIGluIGBuZXQvODAyMXEvdmxhbl9jb3JlLmNgLCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGBNYWtlZmlsZWAgb3IgS2NvbmZpZyBmaWxlcyB3aXRoaW4gdGhhdCBkaXJlY3RvcnkuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb25zIGFmZmVjdCBpdHMgY29tcGlsYXRpb24sIGp1c3QgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmxhbl9jb3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LzgwMjFxJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC84MDIxcS9NYWtlZmlsZS00LSNcbm5ldC84MDIxcS9NYWtlZmlsZTo1Om9iai0kKHN1YnN0IG0seSwkKENPTkZJR19WTEFOXzgwMjFRKSlcdCYjNDM7PSB2bGFuX2NvcmUub1xubmV0LzgwMjFxL01ha2VmaWxlLTYtb2JqLSQoQ09ORklHX1ZMQU5fODAyMVEpXHRcdCYjNDM7PSA4MDIxcS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjk4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOgoKKipJbnZlc3RpZ2F0aW5nIFZMQU4gYW5kIE1QTFMgSW50ZXJhY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGhvdyBWTEFOcyBhbmQgTVBMUyBhcmUgcGxheWluZyB0b2dldGhlci4gSSBrbm93IHRoYXQgYHZsYW5fY29yZS5vYCBpcyBnb2luZyB0byBiZSBnb3Zlcm5lZCBieSBgQ09ORklHX1ZMQU5fODAyMVFgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgdGhlIGZ1bmRhbWVudGFsIFZMQU4gaW5mcmFzdHJ1Y3R1cmUuIE5vdywgZ2l2ZW4gdGhhdCBjb250ZXh0LCBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgaXNzdWUgSSYjMzk7bSBsaWtlbHkgZGVidWdnaW5nLCBJIHRoaW5rIHRoZSBjcml0aWNhbCBwbGFjZSB0byBsb29rIGF0IGludGVyYWN0aW9ucyBpcyBpbiB0aGUgcXVldWluZyBkaXNjaXBsaW5lcywgYW5kIGhvdyB0aGUgTVBMUyBlbmNhcHN1bGF0aW9uIGFuZCBkZWNhcHN1bGF0aW9uIG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBWTEFOIHRhZ2dpbmcgYW5kIHVudGFnZ2luZyBpbnRlcmZhY2VzIHdpdGggTVBMUyBsYWJlbHMgaW4gdGhlIHRyYWZmaWMgc2hhcGluZyBhbmQgY2xhc3NpZmljYXRpb24gcHJvY2Vzc2VzLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byBgbmV0L3NjaGVkL2FjdF9tcGxzLmNgIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUga2VybmVsIGhhbmRsZXMgdGhlIE1QTFMgYWN0aW9ucy4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIFZMQU4tYXdhcmUgTVBMUyBoYW5kbGluZyB3aWxsIGJlLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTtyZSBkZWFsaW5nIHdpdGggdGFnZ2VkIHZzLiB1bnRhZ2dlZCBmcmFtZXMgaW4gdGhhdCBjb250ZXh0LiBJdCYjMzk7cyB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgZm9yIHRoZSBpbnRlcmFjdGlvbiB0byBiZSBoYW5kbGVkLCBvciB0aGUgYnVnIHRvIGJlIGxvY2F0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FjdF9tcGxzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTgxOT1jb25maWcgTkVUX0FDVF9NUExTXG4tLVxubmV0L3NjaGVkL0tjb25maWctODI3LVx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG5uZXQvc2NoZWQvS2NvbmZpZzo4Mjg6XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfbXBscy5cbm5ldC9zY2hlZC9LY29uZmlnLTgyOS1cbi0tXG5uZXQvc2NoZWQvTWFrZWZpbGU9MjA9b2JqLSQoQ09ORklHX05FVF9BQ1RfQ1NVTSlcdCYjNDM7PSBhY3RfY3N1bS5vXG5uZXQvc2NoZWQvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX05FVF9BQ1RfTVBMUylcdCYjNDM7PSBhY3RfbXBscy5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtMjItb2JqLSQoQ09ORklHX05FVF9BQ1RfVkxBTilcdCYjNDM7PSBhY3Rfdmxhbi5vXG4tLVxubmV0L3NjaGVkL2FjdF9tcGxzLmMtMTgtXG5uZXQvc2NoZWQvYWN0X21wbHMuYzoxOTpzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X21wbHNfb3BzO1xubmV0L3NjaGVkL2FjdF9tcGxzLmMtMjAtXG4tLVxubmV0L3NjaGVkL2FjdF9tcGxzLmM9MTU4PXN0YXRpYyBpbnQgdGNmX21wbHNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcbi0tXG5uZXQvc2NoZWQvYWN0X21wbHMuYy0xNjIte1xubmV0L3NjaGVkL2FjdF9tcGxzLmM6MTYzOlx0c3RydWN0IHRjX2FjdGlvbl9uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCBhY3RfbXBsc19vcHMubmV0X2lkKTtcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTE2NC1cdGJvb2wgYmluZCA9IGZsYWdzIFx1MDAyNiBUQ0FfQUNUX0ZMQUdTX0JJTkQ7XG4tLVxubmV0L3NjaGVkL2FjdF9tcGxzLmMtMTk4LVx0aWYgKCFleGlzdHMpIHtcbm5ldC9zY2hlZC9hY3RfbXBscy5jOjE5OTpcdFx0cmV0ID0gdGNmX2lkcl9jcmVhdGUodG4sIGluZGV4LCBlc3QsIGEsIFx1MDAyNmFjdF9tcGxzX29wcywgYmluZCxcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTIwMC1cdFx0XHRcdCAgICAgdHJ1ZSwgZmxhZ3MpO1xuLS1cbm5ldC9zY2hlZC9hY3RfbXBscy5jPTM4Mj1zdGF0aWMgaW50IHRjZl9tcGxzX29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcbi0tXG5uZXQvc2NoZWQvYWN0X21wbHMuYy00NDAtXG5uZXQvc2NoZWQvYWN0X21wbHMuYzo0NDE6c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9tcGxzX29wcyA9IHtcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTQ0Mi1cdC5raW5kXHRcdD1cdFwmIzM0O21wbHNcJiMzNDssXG4tLVxubmV0L3NjaGVkL2FjdF9tcGxzLmM9NDU0PXN0YXRpYyBfX25ldF9pbml0IGludCBtcGxzX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTQ1NS17XG5uZXQvc2NoZWQvYWN0X21wbHMuYzo0NTY6XHRzdHJ1Y3QgdGNfYWN0aW9uX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGFjdF9tcGxzX29wcy5uZXRfaWQpO1xubmV0L3NjaGVkL2FjdF9tcGxzLmMtNDU3LVxubmV0L3NjaGVkL2FjdF9tcGxzLmM6NDU4Olx0cmV0dXJuIHRjX2FjdGlvbl9uZXRfaW5pdChuZXQsIHRuLCBcdTAwMjZhY3RfbXBsc19vcHMpO1xubmV0L3NjaGVkL2FjdF9tcGxzLmMtNDU5LX1cbi0tXG5uZXQvc2NoZWQvYWN0X21wbHMuYz00NjE9c3RhdGljIHZvaWQgX19uZXRfZXhpdCBtcGxzX2V4aXRfbmV0KHN0cnVjdCBsaXN0X2hlYWQgKm5ldF9saXN0KVxubmV0L3NjaGVkL2FjdF9tcGxzLmMtNDYyLXtcbm5ldC9zY2hlZC9hY3RfbXBscy5jOjQ2MzpcdHRjX2FjdGlvbl9uZXRfZXhpdChuZXRfbGlzdCwgYWN0X21wbHNfb3BzLm5ldF9pZCk7XG5uZXQvc2NoZWQvYWN0X21wbHMuYy00NjQtfVxuLS1cbm5ldC9zY2hlZC9hY3RfbXBscy5jPTQ2Nj1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIG1wbHNfbmV0X29wcyA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X21wbHMuYy00NjgtXHQuZXhpdF9iYXRjaCA9IG1wbHNfZXhpdF9uZXQsXG5uZXQvc2NoZWQvYWN0X21wbHMuYzo0Njk6XHQuaWQgICA9IFx1MDAyNmFjdF9tcGxzX29wcy5uZXRfaWQsXG5uZXQvc2NoZWQvYWN0X21wbHMuYy00NzAtXHQuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdGNfYWN0aW9uX25ldCksXG4tLVxubmV0L3NjaGVkL2FjdF9tcGxzLmM9NDczPXN0YXRpYyBpbnQgX19pbml0IG1wbHNfaW5pdF9tb2R1bGUodm9pZClcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTQ3NC17XG5uZXQvc2NoZWQvYWN0X21wbHMuYzo0NzU6XHRyZXR1cm4gdGNmX3JlZ2lzdGVyX2FjdGlvbihcdTAwMjZhY3RfbXBsc19vcHMsIFx1MDAyNm1wbHNfbmV0X29wcyk7XG5uZXQvc2NoZWQvYWN0X21wbHMuYy00NzYtfVxuLS1cbm5ldC9zY2hlZC9hY3RfbXBscy5jPTQ3OD1zdGF0aWMgdm9pZCBfX2V4aXQgbXBsc19jbGVhbnVwX21vZHVsZSh2b2lkKVxubmV0L3NjaGVkL2FjdF9tcGxzLmMtNDc5LXtcbm5ldC9zY2hlZC9hY3RfbXBscy5jOjQ4MDpcdHRjZl91bnJlZ2lzdGVyX2FjdGlvbihcdTAwMjZhY3RfbXBsc19vcHMsIFx1MDAyNm1wbHNfbmV0X29wcyk7XG5uZXQvc2NoZWQvYWN0X21wbHMuYy00ODEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjIwNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIFZMQU4gQWN0aW9uIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IFZMQU4gYWN0aW9uIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gaG93IGl0JiMzOTtzIGludGVncmF0ZWQgaW50byB0cmFmZmljIGNvbnRyb2wuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjYWxsIGNoYWluIGFuZCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb2RlJiMzOTtzIHBvaW50aW5nIG1lIHRvd2FyZHMgYGFjdF92bGFuLmNgLiBSaWdodCwgc28gYHRjZl92bGFuX2FjdGAgaXMgdGhlIGNydWNpYWwgZnVuY3Rpb24gaGVyZSwgYW5kIGl0JiMzOTtzIGNhbGxpbmcgYHNrYl92bGFuX3B1c2hgIHdoZW4gdGhlIGBhY3Rpb25gIGlzIGBUQ0FfVkxBTl9BQ1RfUFVTSGAuIFRoaXMgaXMgd2hlcmUgdGhlIFZMQU4gdGFnZ2luZyBhY3R1YWxseSBoYXBwZW5zLCBzbyB0aGF0JiMzOTtzIHRoZSBjb3JlLiBJIHNob3VsZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBgbmV0L3NjaGVkL2FjdF92bGFuLmNgIGZpbGUgdG8gdHJhY2UgdGhlIGJlaGF2aW9yLiBJIHdhbnQgdG8gZnVsbHkgdmlzdWFsaXplIHRoZSBhcmNoaXRlY3R1cmUsIHNvIEkmIzM5O2xsIGNvbnRpbnVlIHRvIGV4YW1pbmUgdGhlIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGluIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3Rfdmxhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MDpcdFx0cCA9IHJjdV9kZXJlZmVyZW5jZV9iaCh2LVx1MDAzZXZsYW5fcCk7XG4gIDQxOlx0XG4gIDQyOlx0XHRzd2l0Y2ggKHAtXHUwMDNldGNmdl9hY3Rpb24pIHtcbiAgNDM6XHRcdGNhc2UgVENBX1ZMQU5fQUNUX1BPUDpcbiAgNDQ6XHRcdFx0ZXJyID0gc2tiX3ZsYW5fcG9wKHNrYik7XG4gIDQ1Olx0XHRcdGlmIChlcnIpXG4gIDQ2Olx0XHRcdFx0Z290byBkcm9wO1xuICA0NzpcdFx0XHRicmVhaztcbiAgNDg6XHRcdGNhc2UgVENBX1ZMQU5fQUNUX1BVU0g6XG4gIDQ5Olx0XHRcdGVyciA9IHNrYl92bGFuX3B1c2goc2tiLCBwLVx1MDAzZXRjZnZfcHVzaF9wcm90bywgcC1cdTAwM2V0Y2Z2X3B1c2hfdmlkIHxcbiAgNTA6XHRcdFx0XHRcdCAgICAocC1cdTAwM2V0Y2Z2X3B1c2hfcHJpbyBcdTAwM2NcdTAwM2MgVkxBTl9QUklPX1NISUZUKSk7XG4gIDUxOlx0XHRcdGlmIChlcnIpXG4gIDUyOlx0XHRcdFx0Z290byBkcm9wO1xuICA1MzpcdFx0XHRicmVhaztcbiAgNTQ6XHRcdGNhc2UgVENBX1ZMQU5fQUNUX01PRElGWTpcbiAgNTU6XHRcdFx0LyogTm8tb3AgaWYgbm8gdmxhbiB0YWcgKGVpdGhlciBody1hY2NlbCBvciBpbi1wYXlsb2FkKSAqL1xuICA1NjpcdFx0XHRpZiAoIXNrYl92bGFuX3RhZ2dlZChza2IpKVxuICA1NzpcdFx0XHRcdGdvdG8gb3V0O1xuICA1ODpcdFx0XHQvKiBleHRyYWN0IGV4aXN0aW5nIHRhZyAoYW5kIGd1YXJhbnRlZSBubyBody1hY2NlbCB0YWcpICovXG4gIDU5Olx0XHRcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XG4gIDYwOlx0XHRcdFx0dGNpID0gc2tiX3ZsYW5fdGFnX2dldChza2IpO1xuICA2MTpcdFx0XHRcdF9fdmxhbl9od2FjY2VsX2NsZWFyX3RhZyhza2IpO1xuICA2MjpcdFx0XHR9IGVsc2Uge1xuICA2MzpcdFx0XHRcdC8qIGluLXBheWxvYWQgdmxhbiB0YWcsIHBvcCBpdCAqL1xuICA2NDpcdFx0XHRcdGVyciA9IF9fc2tiX3ZsYW5fcG9wKHNrYiwgXHUwMDI2dGNpKTtcbiAgNjU6XHRcdFx0XHRpZiAoZXJyKVxuICA2NjpcdFx0XHRcdFx0Z290byBkcm9wO1xuICA2NzpcdFx0XHR9XG4gIDY4Olx0XHRcdC8qIHJlcGxhY2UgdGhlIHZpZCAqL1xuICA2OTpcdFx0XHR0Y2kgPSAodGNpIFx1MDAyNiB+VkxBTl9WSURfTUFTSykgfCBwLVx1MDAzZXRjZnZfcHVzaF92aWQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTk1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogVkxBTiBIZWFkZXIgSW5zZXJ0aW9uKioKCk9rYXksIHRoaXMgbG9va3MgcHJvbWlzaW5nLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSXQmIzM5O3MgdG91Y2hpbmcgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMsIHNwZWNpZmljYWxseSB0aGUgVkxBTiBoZWFkZXIgaW5zZXJ0aW9uIGhlbHBlciwgYW5kIGl0JiMzOTtzIHVzZWQgYWNyb3NzIHNldmVyYWwgbmV0d29ya2luZyBwYXRoczogcmVjZWl2ZSBhbmQgdHJhbnNtaXQsIFRDLCBPVlMsIGFuZCBCUEYuIFRoYXQgYWxvbmUgd2FycmFudHMgYSBjbG9zZXIgbG9vay4KClRoZSBmYWN0IHRoYXQgdGhpcyBpbnRyb2R1Y2VzIGEgbmV3IGlucHV0IHZhbGlkYXRpb24gY2hlY2ssIGBpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBtYWNfbGVuKSkpIHJldHVybiAtRUlOVkFMO2AsIGlzIGEgbWFqb3IgZmxhZy4gSXQgbWVhbnMgd2UgaGF2ZSBhIHBvdGVudGlhbCAtRUlOVkFMIHJldHVybiwgd2hpY2ggY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIHBhY2tldCByZWplY3Rpb24gb3IgYmVoYXZpb3IgY2hhbmdlcyBpZiBgbWFjX2xlbmAgaXNuJiMzOTt0IGhhbmRsZWQgY29ycmVjdGx5LiBUaGUgcmVhY2hhYmxlIGF0dGFjayBzdXJmYWNlIGlzIGJyb2FkLCBlbmNvbXBhc3Npbmcgc3RhbmRhcmQgbmV0d29yayBpbnRlcmZhY2VzLCBCUEYsIFRDLCBWTEFOLCBPVlMsIGFuZCBldmVuIHR1bi90YXAuIFRoaXMgc3VnZ2VzdHMgYSBoaWdoIHByb2JhYmlsaXR5IG9mIGZpbmRpbmcgc29tZXRoaW5nIGludGVyZXN0aW5nLgoKTGV0IG1lIHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzLiBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGlzIHN0YXRpYyBpbmxpbmUsIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvaWZfdmxhbi5oYC4gVGltZSB0byBjb25maXJtIHRoYXQgZ2NjL2NsYW5nIGFyZSBpbmxpbmluZyBpdCwgYW5kIHllcCwgdGhleSBhcmUuIFNvIG5vdyBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGNhbGxpbmcgaXQgb3IgYXJlIGV4ZXJjaXNpbmcgaXQgZGlyZWN0bHkuCgpBZnRlciBjaGVja2luZywgSSBmaW5kOgoKMS4gIGBza2Jfdmxhbl9wdXNoYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIHdoaWNoIGNhbGxzIGBfX3ZsYW5faW5zZXJ0X3RhZ2Agd2hpY2ggY2FsbHMgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC4KMi4gIGB2bGFuX2RvX3JlY2VpdmVgIGluIGBuZXQvODAyMXEvdmxhbl9jb3JlLmNgIHdoaWNoIGNhbGxzIGB2bGFuX2luc2VydF9pbm5lcl90YWdgIHdoaWNoIGNhbGxzIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AuCjMuICBgdGNmX21wbHNfYWN0YCBpbiBgbmV0L3NjaGVkL2FjdF9tcGxzLmNgIHdoaWNoIGNhbGxzIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgZGlyZWN0bHkuCjQuICBgdGNmX3ZsYW5fYWN0YCBpbiBgbmV0L3NjaGVkL2FjdF92bGFuLmNgIGNhbGxzIGBza2Jfdmxhbl9wdXNoYC4KNS4gYGJwZl9za2Jfdmxhbl9wdXNoYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIGlzIGEgQlBGIGhlbHBlci4KClNvLCBhbGwgb2YgdGhlIGZ1bmN0aW9ucyB3aXRoIHRoZSBuYW1lcyB0aGF0IGRvbiYjMzk7dCBzdGFydCB3aXRoIGBfX2AgYXJlIGNhbGxlZCBmcm9tIG90aGVyIGAuY2AgZmlsZXMsIGFuZCB0aGV5IGFyZSBub3QgYHN0YXRpYyBpbmxpbmVgLiBJJiMzOTtsbCB3YW50IHRvIHJlbWVtYmVyIHRoZXNlLgoKTm93LCBsZXQmIzM5O3MgZGV0ZXJtaW5lIHRoZSBwcmV2YWxlbmNlIG9mIHRoZXNlIGZ1bmN0aW9ucy4gYHNrYl92bGFuX3B1c2hgIGlzIHNwZWNpZmljIHRvIFZMQU4gcHVzaGluZyBvcGVyYXRpb25zIGluIFRDL0JQRi9PVlMuIGB2bGFuX2RvX3JlY2VpdmVgIGlzIGFsc28gc3BlY2lmaWMsIG9ubHkgZm9yIDgwMi4xUSBWTEFOIHBhY2tldCBwcm9jZXNzaW5nIG9uIHJlY2VpdmUuIEFuZCBgdGNmX21wbHNfYWN0YCBpcyBub24tdWJpcXVpdG91cywgc3BlY2lmaWMgdG8gdGhlIFRDIE1QTFMgYWN0aW9uLgoKRm9yIGB2bGFuX2RvX3JlY2VpdmVgLCB0aGUgYENPTkZJR19WTEFOXzgwMjFRYCBLY29uZmlnIGRlcGVuZGVuY3kgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZCBmb3IgdGVzdGluZy4gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCYjMzk7cyBlbmFibGVkIHdoZW4gSSYjMzk7bSBydW5uaW5nIHRoaXMgZnV6ei4gTm93IEkgbmVlZCB0byBjaGVjayBgbmV0LzgwMjFxL0tjb25maWdgIGZvciB0aGF0IGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvODAyMXEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIENvbmZpZ3VyYXRpb24gZm9yIDgwMi4xUSBWTEFOIHN1cHBvcnRcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIFZMQU5fODAyMVFcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0OzgwMi4xUS84MDIuMWFkIFZMQU4gU3VwcG9ydFwmIzM0O1xuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBTZWxlY3QgdGhpcyBhbmQgeW91IHdpbGwgYmUgYWJsZSB0byBjcmVhdGUgODAyLjFRIFZMQU4gaW50ZXJmYWNlc1xuICAxMDpcdFx0ICBvbiB5b3VyIEV0aGVybmV0IGludGVyZmFjZXMuIDgwMi4xUSBWTEFOIHN1cHBvcnRzIGFsbW9zdFxuICAxMTpcdFx0ICBldmVyeXRoaW5nIGEgcmVndWxhciBFdGhlcm5ldCBpbnRlcmZhY2UgZG9lcywgaW5jbHVkaW5nXG4gIDEyOlx0XHQgIGZpcmV3YWxsaW5nLCBicmlkZ2luZywgYW5kIG9mIGNvdXJzZSBJUCB0cmFmZmljLiBZb3Ugd2lsbCBuZWVkXG4gIDEzOlx0XHQgIHRoZSAmIzM5O2lwJiMzOTsgdXRpbGl0eSBpbiBvcmRlciB0byBlZmZlY3RpdmVseSB1c2UgVkxBTnMuXG4gIDE0Olx0XHQgIFNlZSB0aGUgVkxBTiB3ZWIgcGFnZSBmb3IgbW9yZSBpbmZvcm1hdGlvbjpcbiAgMTU6XHRcdCAgXHUwMDNjaHR0cDovL3d3dy5jYW5kZWxhdGVjaC5jb20vfmdyZWVhci92bGFuLmh0bWxcdTAwM2VcbiAgMTY6XHRcbiAgMTc6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgMTg6XHRcdCAgd2lsbCBiZSBjYWxsZWQgODAyMXEuXG4gIDE5Olx0XG4gIDIwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIFZMQU5fODAyMVFfR1ZSUFxuICAyMzpcdFx0Ym9vbCBcJiMzNDtHVlJQIChHQVJQIFZMQU4gUmVnaXN0cmF0aW9uIFByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4gIDI0Olx0XHRkZXBlbmRzIG9uIFZMQU5fODAyMVFcbiAgMjU6XHRcdHNlbGVjdCBHQVJQXG4gIDI2Olx0XHRoZWxwXG4gIDI3Olx0XHQgIFNlbGVjdCB0aGlzIHRvIGVuYWJsZSBHVlJQIGVuZC1zeXN0ZW0gc3VwcG9ydC4gR1ZSUCBpcyB1c2VkIGZvclxuICAyODpcdFx0ICBhdXRvbWF0aWMgcHJvcGFnYXRpb24gb2YgcmVnaXN0ZXJlZCBWTEFOcyB0byBzd2l0Y2hlcy5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUyMzcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzcGVjaWZpY2FsbHkgYENPTkZJR19WTEFOXzgwMjFRYC4gRnJvbSB3aGF0IEkgc2VlLCBpdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gaGF2ZSBhbnkgdW51c3VhbCBkZXBlbmRlbmNpZXMgYmV5b25kIHRoZSBzdGFuZGFyZCBgTkVUYCBkZXBlbmRlbmN5LCB3aGljaCBpcyBmYWlybHkgdHlwaWNhbC4gTm90aGluZyBvdXQgb2YgdGhlIG9yZGluYXJ5IHRoZXJlLgoKTm93LCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBDT05GSUdfTkVUX0FDVF9NUExTYCBpbiB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYXJvdW5kIGxpbmUgODE5IGluIHRoYXQgZmlsZSB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgY29udGV4dCBhbmQgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbW9kdWxlcy4gSXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBLY29uZmlnIHN0cnVjdHVyZSB0byBiZSBzdXJlIG9mIGV4YWN0bHkgaG93IHRoaW5ncyBmaXQgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgxNTpcdFxuIDgxNjpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gODE3Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfY3N1bS5cbiA4MTg6XHRcbiA4MTk6XHRjb25maWcgTkVUX0FDVF9NUExTXG4gODIwOlx0XHR0cmlzdGF0ZSBcJiMzNDtNUExTIG1hbmlwdWxhdGlvblwmIzM0O1xuIDgyMTpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxuIDgyMjpcdFx0aGVscFxuIDgyMzpcdFx0ICBTYXkgWSBoZXJlIHRvIHB1c2ggb3IgcG9wIE1QTFMgaGVhZGVycy5cbiA4MjQ6XHRcbiA4MjU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiA4MjY6XHRcbiA4Mjc6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDgyODpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X21wbHMuXG4gODI5Olx0XG4gODMwOlx0Y29uZmlnIE5FVF9BQ1RfVkxBTlxuIDgzMTpcdFx0dHJpc3RhdGUgXCYjMzQ7VmxhbiBtYW5pcHVsYXRpb25cJiMzNDtcbiA4MzI6XHRcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcbiA4MzM6XHRcdGhlbHBcbiA4MzQ6XHRcdCAgU2F5IFkgaGVyZSB0byBwdXNoIG9yIHBvcCB2bGFuIGhlYWRlcnMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1Nzc1CgkJCQkJCQlvdXRwdXQ6IDI0MQoJCQkJCQkJdGhvdWdodHM6IDc1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBWTEFOIGFuZCBNUExTIENvbmZpZ3VyYXRpb24gZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoZSBkZXBlbmRlbmNpZXM6IGBDT05GSUdfTkVUX0FDVF9NUExTYCBhbmQgYENPTkZJR19ORVRfQUNUX1ZMQU5gIGJvdGggcmVseSBvbiBgQ09ORklHX05FVF9DTFNfQUNUYC4gV2UgYWxzbyBoYXZlIGBza2Jfdmxhbl9wdXNoYCByZXNpZGluZyBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLCB3aGljaCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfTkVUPXlgLCBhbmQgYENPTkZJR19WTEFOXzgwMjFRYC4gR290IGl0LgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IG91ciBgRW5hYmxlQ29uZmlnc2A6IGBWTEFOXzgwMjFRYCwgYE5FVF9BQ1RfTVBMU2AsIGBORVRfQUNUX1ZMQU5gLCBhbmQgYE5FVF9DTFNfQUNUYC4gVGhvc2UgbG9vayBjb3JyZWN0IGJhc2VkIG9uIHRoZSBkZXBlbmRlbmNpZXMuCgpBbHJpZ2h0LCB3aGF0IGRvIHRoZXNlIGNvbmZpZ3VyYXRpb25zICphY3R1YWxseSogZW5hYmxlPyBgVkxBTl84MDIxUWAgZW5hYmxlcyB0aGUgY29yZSBWTEFOIGNvZGUgKGB2bGFuX2NvcmUuY2ApIGFuZCA4MDIuMVEgc3VwcG9ydC4gYE5FVF9DTFNfQUNUYCBhbmQgYE5FVF9BQ1RfTVBMU2AgZW5hYmxlIE1QTFMgdHJhZmZpYyBjb250cm9sIGFjdGlvbnMsIGFuZCBgTkVUX0FDVF9WTEFOYCBlbmFibGVzIFZMQU4gdHJhZmZpYyBjb250cm9sIGFjdGlvbnMuIE1ha2VzIHNlbnNlLgoKTm93LCB0aGUgY3JpdGljYWwgcGFydC4gSSBuZWVkIHRvIGRlZmluZSB0aGUgYEZvY3VzU3ltYm9sc2AuIENhbiBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGJlIGxpc3RlZCBhcyBhIGZvY3VzIHN5bWJvbD8gTm8sIGl0IGNhbiYjMzk7dCwgYmVjYXVzZSBpdCYjMzk7cyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9pZl92bGFuLmhgLiBTZWN0aW9uIDQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBsYWNrIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgYW5kIHRodXMgY2FuJiMzOTt0IGJlIHRhcmdldGVkIGRpcmVjdGx5LiBUaGVyZWZvcmUsIEkgbmVlZCB0byBmb2N1cyBvbiAqY2FsbGVycyogb2YgdGhlIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24uCgpTbywgaW5zdGVhZCBvZiBgX192bGFuX2luc2VydF9pbm5lcl90YWdgLCBJJiMzOTttIGdvaW5nIHRvIGxpc3Q6CiogICBgc2tiX3ZsYW5fcHVzaGAKKiAgIGB2bGFuX2RvX3JlY2VpdmVgCiogICBgdGNmX21wbHNfYWN0YAoqICAgYHRjZl92bGFuX2FjdGAKCk5leHQsIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBub25lIG9mIHRoZXNlIGNhbGxlcnMgYXJlICp1YmlxdWl0b3VzKi4gTGV0JiMzOTtzIGNoZWNrOgoKKiAgIGBza2Jfdmxhbl9wdXNoYDogSXQmIzM5O3Mgb25seSBjYWxsZWQgd2hlbiBwdXNoaW5nIGEgVkxBTiB0YWcsIGZvciBpbnN0YW5jZSwgbmVzdGVkIFZMQU5zIG9yIFZMQU4gYWN0aW9ucyB0aHJvdWdoIHRjLCBicGYsIG9yIG92cy4gVGhhdCYjMzk7cyBub3QgdWJpcXVpdG91cy4gR29vZC4KKiAgIGB2bGFuX2RvX3JlY2VpdmVgOiBJdCYjMzk7cyBvbmx5IGNhbGxlZCB3aGVuIHJlY2VpdmluZyBwYWNrZXRzIG9uIGEgVkxBTiBpbnRlcmZhY2UuIERlZmluaXRlbHkgbm90IHViaXF1aXRvdXMuCiogICBgdGNmX21wbHNfYWN0YDogT25seSBjYWxsZWQgZm9yIE1QTFMgdHJhZmZpYyBjb250cm9sIGFjdGlvbnMuIE5vdCB1YmlxdWl0b3VzLgoqICAgYHRjZl92bGFuX2FjdGA6IE9ubHkgY2FsbGVkIGZvciBWTEFOIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLiBBbHNvLCBub3QgdWJpcXVpdG91cy4KCkV4Y2VsbGVudC4gSXQgc2VlbXMgSSBoYXZlIHNlbGVjdGVkIGEgZ29vZCBsaXN0IG9mIG5vbi11YmlxdWl0b3VzIGZ1bmN0aW9ucy4KCklzIGZ1enppbmcgd2FycmFudGVkPyBBYnNvbHV0ZWx5LiBgV29ydGhGdXp6aW5nPXRydWVgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBpbnB1dCB2YWxpZGF0aW9uIGNoZWNrIChgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pYCkgaW4gYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBpbnNlcnRpbmcgaW5uZXIgVkxBTiB0YWdzLiBUaGlzIGhlbHBlciBpcyBjYWxsZWQgYnkgdml0YWwgbmV0d29ya2luZyBwYXRocywgaW5jbHVkaW5nIDgwMi4xUSBWTEFOIHBhY2tldCByZWNlcHRpb24gKGB2bGFuX2RvX3JlY2VpdmVgKSwgcGFja2V0IG1vZGlmaWNhdGlvbiB2aWEgQlBGL1RDL09WUyAoYHNrYl92bGFuX3B1c2hgLCBgdGNmX3ZsYW5fYWN0YCksIGFuZCBUQyBNUExTIGFjdGlvbnMgKGB0Y2ZfbXBsc19hY3RgKS4gSSBuZWVkIHRvIGZ1enogdGhpcyB0aG9yb3VnaGx5IHRvIHZlcmlmeSB0aGF0IHVudXN1YWwgb3IgbWFsZm9ybWVkIHBhY2tldHMgd2l0aCBub24tbGluZWFyIGhlYWRlcnMgcHJvcGVybHkgdHJpZ2dlciB0aGUgbmV3IGNoZWNrLCB3aXRoIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgZXJyb3JzLgoKQWxsIGNoZWNrcyBhcmUgY2xlYXIgYW5kIHRoZSB2ZXJpZmljYXRpb24gaXMgY29tcGxldGUuIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7LAogICAgJiMzNDtORVRfQUNUX01QTFMmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9WTEFOJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3ZsYW5fcHVzaCYjMzQ7LAogICAgJiMzNDt2bGFuX2RvX3JlY2VpdmUmIzM0OywKICAgICYjMzQ7dGNmX21wbHNfYWN0JiMzNDssCiAgICAmIzM0O3RjZl92bGFuX2FjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pIGNoZWNrIHRvIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKCkgaW4gaW5jbHVkZS9saW51eC9pZl92bGFuLmggdG8gZW5zdXJlIHN1ZmZpY2llbnQgaGVhZCBkYXRhIGlzIHB1bGxlZCBiZWZvcmUgaW5zZXJ0aW5nIGFuIGlubmVyIFZMQU4gdGFnLiBUaGlzIHJlYWNoYWJsZSBoZWxwZXIgaXMgZXhlcmNpc2VkIGJ5IGNvcmUgbmV0d29ya2luZyBwYXRocyBzdWNoIGFzIDgwMi4xUSByZWNlaXZlIHByb2Nlc3NpbmcgKHZsYW5fZG9fcmVjZWl2ZSksIFZMQU4gcHVzaCBvcGVyYXRpb25zIChza2Jfdmxhbl9wdXNoKSwgYW5kIFRDIGFjdGlvbnMgKHRjZl9tcGxzX2FjdCwgdGNmX3ZsYW5fYWN0KS4gRnV6emluZyBpcyB3b3J0aHdoaWxlIHRvIHRlc3QgYmVoYXZpb3Igd2l0aCBub24tbGluZWFyLCBmcmFnbWVudGVkLCBvciBtYWxmb3JtZWQgcGFja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7LAogICAgJiMzNDtORVRfQUNUX01QTFMmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9WTEFOJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3ZsYW5fcHVzaCYjMzQ7LAogICAgJiMzNDt2bGFuX2RvX3JlY2VpdmUmIzM0OywKICAgICYjMzQ7dGNmX21wbHNfYWN0JiMzNDssCiAgICAmIzM0O3RjZl92bGFuX2FjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pIGNoZWNrIHRvIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKCkgaW4gaW5jbHVkZS9saW51eC9pZl92bGFuLmggdG8gZW5zdXJlIHN1ZmZpY2llbnQgaGVhZCBkYXRhIGlzIHB1bGxlZCBiZWZvcmUgaW5zZXJ0aW5nIGFuIGlubmVyIFZMQU4gdGFnLiBUaGlzIHJlYWNoYWJsZSBoZWxwZXIgaXMgZXhlcmNpc2VkIGJ5IGNvcmUgbmV0d29ya2luZyBwYXRocyBzdWNoIGFzIDgwMi4xUSByZWNlaXZlIHByb2Nlc3NpbmcgKHZsYW5fZG9fcmVjZWl2ZSksIFZMQU4gcHVzaCBvcGVyYXRpb25zIChza2Jfdmxhbl9wdXNoKSwgYW5kIFRDIGFjdGlvbnMgKHRjZl9tcGxzX2FjdCwgdGNmX3ZsYW5fYWN0KS4gRnV6emluZyBpcyB3b3J0aHdoaWxlIHRvIHRlc3QgYmVoYXZpb3Igd2l0aCBub24tbGluZWFyLCBmcmFnbWVudGVkLCBvciBtYWxmb3JtZWQgcGFja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgdXNpbmcgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pIGluIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKCkgdG8gZW5zdXJlIHRoYXQgdGhlIHBhY2tldCBidWZmZXIgY29udGFpbnMgYXQgbGVhc3QgbWFjX2xlbiBsaW5lYXIgYnl0ZXMgYmVmb3JlIHBlcmZvcm1pbmcgaGVhZGVyIG1hbmlwdWxhdGlvbnMgKHNrYl9wb3N0cHVzaF9kYXRhX21vdmUgYW5kIHdyaXRpbmcgdmxhbl9ldGhoZHIpLiBXaXRob3V0IHRoaXMgY2hlY2ssIHBhY2tldHMgc2hvcnRlciB0aGFuIG1hY19sZW4gb3Igbm9uLWxpbmVhciBidWZmZXJzIGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBoZWFwIGFjY2Vzc2VzIChPT0IgcmVhZC93cml0ZSksIHdoaWNoIGFyZSBkaXJlY3RseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjM2ZGNhYTFkOTY3ZWMyYjcyZWI0MzY1ZjRiZjgzMzk2M2I4ZGJmNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDExOjEwOjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl92bGFuLmggYi9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaAppbmRleCAyMGNjMTZlYTRlNWFiLi40ODQ2MDMyYmY0ZmZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaApAQCAtMzY1LDYgJiM0MzszNjUsOSBAQCBzdGF0aWMgaW5saW5lIGludCBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWNvbnN0IHU4IG1ldGFfbGVuID0gbWFjX2xlbiAmZ3Q7IEVUSF9UTEVOID8gc2tiX21ldGFkYXRhX2xlbihza2IpIDogMDsKIAlzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZldGg7CiAKJiM0MzsJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbikpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJaWYgKHNrYl9jb3dfaGVhZChza2IsIG1ldGFfbGVuICYjNDM7IFZMQU5fSExFTikgJmx0OyAwKQogCQlyZXR1cm4gLUVOT01FTTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZMQU4gSW5zZXJ0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgaXQmIzM5O3MgdG91Y2hpbmcgYGluY2x1ZGUvbGludXgvaWZfdmxhbi5oYCwgc3BlY2lmaWNhbGx5IHRoZSBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGZ1bmN0aW9uLiBUaGUgY29kZSBzbmlwcGV0IGlzIHN0cmFpZ2h0Zm9yd2FyZCwgYWRkaW5nIGEgY2hlY2suIE5vdywgd2hlcmUgd2FzIHRoaXMgZnVuY3Rpb24gb3JpZ2luYWxseSBpbiB0aGUgcHJvamVjdD8gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlYWQgdGhlIHdob2xlIGZpbGUgdG8gY29uZmlybSB3aGF0IHRoZSBpbnRlbnRpb24gb2YgdGhlIGZ1bmN0aW9uIGlzLCBhbmQgYWxzbyB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgY2hhbmdlIGZpdHMgaW4uCgpUaGUgYWRkZWQgYGlmYCBzdGF0ZW1lbnQgd2l0aCBgcHNrYl9tYXlfcHVsbCgpYCBjYXRjaGVzIG15IGV5ZSBpbW1lZGlhdGVseS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgYWRkaW5nIGEgc2FmZXR5IGNoZWNrIGJlZm9yZSBwb3RlbnRpYWxseSBtb2RpZnlpbmcgdGhlIFNLQi4gVGhpcyBpcyBnb29kIHByYWN0aWNlOyBwcmV2ZW50aW5nIGlzc3VlcyB3aXRoIGRhdGEgY29ycnVwdGlvbiBvciBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWx3YXlzIGEgd2luLiBUaGUgY2hlY2sgZW5zdXJlcyB0aGF0IHdlIGhhdmUgZW5vdWdoIGRhdGEgYXZhaWxhYmxlIGluIHRoZSBTS0IgdG8gd29yayB3aXRoIHRoZSBNQUMgaGVhZGVyLiBTbywgd2UmIzM5O3JlIGxpa2VseSBkZWFsaW5nIHdpdGggc29tZSBraW5kIG9mIFZMQU4gdGFnZ2luZyBpbnNlcnRpb24uIFdlIGhhdmUgdGhlIGRhdGEgbGVuZ3RoIG9mIE1BQyBoZWFkZXIsIGFuZCBhbHNvIGEgbGVuZ3RoIGNoZWNrIHdpdGggYEVUSF9UTEVOYC4KCkkmIzM5O2xsIHF1aWNrbHkgcmVmZXJlbmNlIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLCBqdXN0IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCBzaG91bGQgYmUgcHJldHR5IHNhZmUgdG8gYXNzdW1lIHRoYXQgYHBza2JfbWF5X3B1bGwoKWAgaXMgYmVpbmcgdXNlZCBjb3JyZWN0bHksIGJ1dCwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbGluZyBjb250ZXh0cyBpbiB0aGUgcHJvamVjdC4gVGhlIGAtRUlOVkFMYCByZXR1cm4gb24gZmFpbHVyZSBpcyBzdGFuZGFyZCBwcmFjdGljZSwgaW5kaWNhdGluZyBhbiBpbnZhbGlkIGFyZ3VtZW50LCBzbyB0aGF0JiMzOTtzIGdvb2QuIFRoZSBjb21tZW50IHNob3VsZCBleHBsYWluIHRoZSByZWFzb25zIGZvciBmYWlsdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaWZfdmxhbi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaWZfdmxhbi5oPTMzOT1zdGF0aWMgaW5saW5lIGJvb2wgdmxhbl9od19vZmZsb2FkX2NhcGFibGUobmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzQ5LS8qKlxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6MzUwOiAqIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnIC0gaW5uZXIgVkxBTiB0YWcgaW5zZXJ0aW5nXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0zNTEtICogQHNrYjogc2tidWZmIHRvIHRhZ1xuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM2MC0gKi9cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjM2MTpzdGF0aWMgaW5saW5lIGludCBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzYyLVx0XHRcdFx0XHQgIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl90Y2ksXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg9NDE0PXN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDE2LXtcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQxNzpcdHJldHVybiBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHZsYW5fcHJvdG8sIHZsYW5fdGNpLCBFVEhfSExFTik7XG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MTgtfVxuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTQzNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp2bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00NDMtXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDo0NDQ6XHRlcnIgPSBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHZsYW5fcHJvdG8sIHZsYW5fdGNpLCBtYWNfbGVuKTtcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQ0NS1cdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEzNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQ6CgoqKkFuYWx5emluZyBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIC0gRGl2aW5nIGludG8gdGhlIENvZGUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICpyZWFsbHkqIGdvaW5nIG9uIHdpdGggYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC4gVGhlIG5hbWUgc3VnZ2VzdHMgaXQmIzM5O3MgcmVsYXRlZCB0byBWTEFOIGluc2VydGlvbiwgbGlrZWx5IGFkZGluZyBhbiBpbm5lciBWTEFOIHRhZywgc28gdGhhdCYjMzk7cyB0aGUgYXJlYSBvZiBmb2N1cy4gTXkgZmlyc3Qgc3RlcCwgbmF0dXJhbGx5LCBpcyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBkZWVwIGRpdmUgaW50byB0aGF0IGZ1bmN0aW9uLCB0aGUgYmVzdCB3YXkgdG8gZG8gdGhhdCBpcyB0byBoYXZlIGEgZ29vZCBsb29rIGF0IGl0IHdpdGggYHJlYWQtZmlsZWAuIEkgbmVlZCBhbGwgdGhlIGRldGFpbHMuIEkgd2FudCB0byBzZWUgdGhlIGFyZ3VtZW50cywgdGhlIGxvY2FsIHZhcmlhYmxlcywgZXZlcnkgc2luZ2xlIGxpbmUgb2YgdGhhdCBjb2RlLiBOb3RoaW5nIGxlc3MuIFRoZW4gSSYjMzk7bGwgYmUgYWJsZSB0byBjb25zaWRlciB0aGUgYWxnb3JpdGhtLCBhbmQgdGhlIGRhdGEgc3RydWN0dXJlcy4gSSB3aWxsIGFsc28gYmUgYWJsZSB0byByZXZpZXcgd2hhdCBhc3N1bXB0aW9ucyBhcmUgbWFkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzUwOlx0ICogX192bGFuX2luc2VydF9pbm5lcl90YWcgLSBpbm5lciBWTEFOIHRhZyBpbnNlcnRpbmdcbiAzNTE6XHQgKiBAc2tiOiBza2J1ZmYgdG8gdGFnXG4gMzUyOlx0ICogQHZsYW5fcHJvdG86IFZMQU4gZW5jYXBzdWxhdGlvbiBwcm90b2NvbFxuIDM1MzpcdCAqIEB2bGFuX3RjaTogVkxBTiBUQ0kgdG8gaW5zZXJ0XG4gMzU0Olx0ICogQG1hY19sZW46IE1BQyBoZWFkZXIgbGVuZ3RoIGluY2x1ZGluZyBvdXRlciB2bGFuIGhlYWRlcnNcbiAzNTU6XHQgKlxuIDM1NjpcdCAqIEluc2VydHMgdGhlIFZMQU4gdGFnIGludG8gQHNrYiBhcyBwYXJ0IG9mIHRoZSBwYXlsb2FkIGF0IG9mZnNldCBtYWNfbGVuXG4gMzU3Olx0ICogRG9lcyBub3QgY2hhbmdlIHNrYi1cdTAwM2Vwcm90b2NvbCBzbyB0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGR1cmluZyByZWNlaXZlLlxuIDM1ODpcdCAqXG4gMzU5Olx0ICogUmV0dXJuczogZXJyb3IgaWYgc2tiX2Nvd19oZWFkIGZhaWxzLlxuIDM2MDpcdCAqL1xuIDM2MTpcdHN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4gMzYyOlx0XHRcdFx0XHRcdCAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSxcbiAzNjM6XHRcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgbWFjX2xlbilcbiAzNjQ6XHR7XG4gMzY1Olx0XHRjb25zdCB1OCBtZXRhX2xlbiA9IG1hY19sZW4gXHUwMDNlIEVUSF9UTEVOID8gc2tiX21ldGFkYXRhX2xlbihza2IpIDogMDtcbiAzNjY6XHRcdHN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aDtcbiAzNjc6XHRcbiAzNjg6XHRcdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pKSlcbiAzNjk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzcwOlx0XG4gMzcxOlx0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgbWV0YV9sZW4gJiM0MzsgVkxBTl9ITEVOKSBcdTAwM2MgMClcbiAzNzI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzczOlx0XG4gMzc0Olx0XHRza2JfcHVzaChza2IsIFZMQU5fSExFTik7XG4gMzc1Olx0XG4gMzc2Olx0XHQvKiBNb3ZlIHRoZSBtYWMgaGVhZGVyIHNhbnMgcHJvdG8gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IGhlYWRlci4gKi9cbiAzNzc6XHRcdGlmIChsaWtlbHkobWFjX2xlbiBcdTAwM2UgRVRIX1RMRU4pKVxuIDM3ODpcdFx0XHRza2JfcG9zdHB1c2hfZGF0YV9tb3ZlKHNrYiwgVkxBTl9ITEVOLCBtYWNfbGVuIC0gRVRIX1RMRU4pO1xuIDM3OTpcdFx0aWYgKHNrYl9tYWNfaGVhZGVyX3dhc19zZXQoc2tiKSlcbiAzODA6XHRcdFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgLT0gVkxBTl9ITEVOO1xuIDM4MTpcdFxuIDM4MjpcdFx0dmV0aCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgbWFjX2xlbiAtIEVUSF9ITEVOKTtcbiAzODM6XHRcbiAzODQ6XHRcdC8qIGZpcnN0LCB0aGUgZXRoZXJuZXQgdHlwZSAqL1xuIDM4NTpcdFx0aWYgKGxpa2VseShtYWNfbGVuIFx1MDAzZT0gRVRIX1RMRU4pKSB7XG4gMzg2Olx0XHRcdC8qIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gc2hvdWxkIGFscmVhZHkgYmUgcG9wdWxhdGVkLCBhbmRcbiAzODc6XHRcdFx0ICogc2tiLVx1MDAzZWRhdGEgaGFzIHNwYWNlIGZvciBoX3ZsYW5fcHJvdG9cbiAzODg6XHRcdFx0ICovXG4gMzg5Olx0XHRcdHZldGgtXHUwMDNlaF92bGFuX3Byb3RvID0gdmxhbl9wcm90bztcbiAzOTA6XHRcdH0gZWxzZSB7XG4gMzkxOlx0XHRcdC8qIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gc2hvdWxkIG5vdCBiZSBwb3B1bGF0ZWQsIGFuZFxuIDM5MjpcdFx0XHQgKiBza2ItXHUwMDNlZGF0YSBoYXMgbm8gc3BhY2UgZm9yIGhfdmxhbl9wcm90b1xuIDM5MzpcdFx0XHQgKi9cbiAzOTQ6XHRcdFx0dmV0aC1cdTAwM2VoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvID0gc2tiLVx1MDAzZXByb3RvY29sO1xuIDM5NTpcdFx0fVxuIDM5NjpcdFxuIDM5NzpcdFx0Lyogbm93LCB0aGUgVENJICovXG4gMzk4Olx0XHR2ZXRoLVx1MDAzZWhfdmxhbl9UQ0kgPSBodG9ucyh2bGFuX3RjaSk7XG4gMzk5Olx0XG4gNDAwOlx0XHRyZXR1cm4gMDtcbiA0MDE6XHR9XG4gNDAyOlx0XG4gNDAzOlx0LyoqXG4gNDA0Olx0ICogX192bGFuX2luc2VydF90YWcgLSByZWd1bGFyIFZMQU4gdGFnIGluc2VydGluZ1xuIDQwNTpcdCAqIEBza2I6IHNrYnVmZiB0byB0YWdcbiA0MDY6XHQgKiBAdmxhbl9wcm90bzogVkxBTiBlbmNhcHN1bGF0aW9uIHByb3RvY29sXG4gNDA3Olx0ICogQHZsYW5fdGNpOiBWTEFOIFRDSSB0byBpbnNlcnRcbiA0MDg6XHQgKlxuIDQwOTpcdCAqIEluc2VydHMgdGhlIFZMQU4gdGFnIGludG8gQHNrYiBhcyBwYXJ0IG9mIHRoZSBwYXlsb2FkXG4gNDEwOlx0ICogRG9lcyBub3QgY2hhbmdlIHNrYi1cdTAwM2Vwcm90b2NvbCBzbyB0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGR1cmluZyByZWNlaXZlLlxuIDQxMTpcdCAqXG4gNDEyOlx0ICogUmV0dXJuczogZXJyb3IgaWYgc2tiX2Nvd19oZWFkIGZhaWxzLlxuIDQxMzpcdCAqL1xuIDQxNDpcdHN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MjYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkgaW4gVkxBTiBUYWcgSW5zZXJ0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGFkZGluZyBhIFZMQU4gdGFnIHRvIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoYXQgdGhlIG9yaWdpbmFsIGNvZGUgd2FzbiYjMzk7dCB2ZXJpZnlpbmcgdGhhdCBlbm91Z2ggYnl0ZXMsIHNwZWNpZmljYWxseSBgbWFjX2xlbmAsIHdlcmUgYWN0dWFsbHkgcHJlc2VudCBpbiB0aGUgbGluZWFyIGJ1ZmZlciBvZiB0aGUgYHNrYmAgYmVmb3JlIHByb2NlZWRpbmcuIFRoZSBgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pYCBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byBndWFyYW50ZWUgdGhhdCBgc2tiLSZndDtkYXRhYCB0byBgc2tiLSZndDt0YWlsYCBjb250YWlucyBhdCBsZWFzdCB0aGF0IG1hbnkgYnl0ZXMuCgpUaGUgY29yZSBvZiB0aGUgaXNzdWUgaXMgaGVyZTogaWYgYHBza2JfbWF5X3B1bGxgICpmYWlscyosIHRoZW4gb3BlcmF0aW9ucyBsaWtlIGBza2JfcG9zdHB1c2hfZGF0YV9tb3ZlKHNrYiwgVkxBTl9ITEVOLCBtYWNfbGVuIC0gRVRIX1RMRU4pYCBvciBhY2Nlc3NpbmcgYHNrYi0mZ3Q7ZGF0YSAmIzQzOyBtYWNfbGVuIC0gRVRIX0hMRU5gIHdvdWxkIHJlc3VsdCBpbiBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb3IgYnVmZmVyIG92ZXJmbG93LiBJbiBwYXJ0aWN1bGFyLCB0aGF0IGBza2JfcG9zdHB1c2hfZGF0YV9tb3ZlYCBmdW5jdGlvbiBpcyBjYWxsaW5nIGBtZW1tb3ZlKHNrYi0mZ3Q7ZGF0YSwgc2tiLSZndDtkYXRhICYjNDM7IFZMQU5fSExFTiwgbWFjX2xlbiAtIEVUSF9UTEVOKTtgIFdpdGhvdXQgZW5zdXJpbmcgdGhhdCBgc2tiLSZndDtkYXRhYCBoYXMgYXQgbGVhc3QgYG1hY19sZW5gIGJ5dGVzIHB1bGxlZCBpbnRvIHRoZSBsaW5lYXIgYnVmZmVyLCB0aGlzIGBtZW1tb3ZlYCBiZWNvbWVzIGEgcHJvYmxlbSBiZWNhdXNlIGl0JiMzOTtzIHJlYWRpbmcgb3Igd3JpdGluZyBwYXN0IHRoZSBsaW5lYXIgYXJlYSAoT09CIGFjY2VzcywgaGVhcCBidWZmZXIgb3ZlcmZsb3csIHNsYWItb3V0LW9mLWJvdW5kcywgcG90ZW50aWFsbHkpLiBUaGUgb3RoZXIgb3BlcmF0aW9uIEkgc2VlIGlzIGB2ZXRoID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKShza2ItJmd0O2RhdGEgJiM0MzsgbWFjX2xlbiAtIEVUSF9ITEVOKTtgLCBhbmQgdGhlbiBgdmV0aC0mZ3Q7aF92bGFuX3Byb3RvID0gdmxhbl9wcm90bztgIGlzIHdyaXRpbmcgdG8gYHZldGhgLgoKU28sIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZGlnIGludG8gdGhlIGNvbW1pdCBoaXN0b3J5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2gsIGlmIGFueSwgaXMgc3VwcG9zZWQgdG8gYmUgYWRkcmVzc2luZy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdpdCBsb2dgIG9yIHBlcmhhcHMgYSBtb3JlIHRhcmdldGVkIGdyZXBwZXIgdG8gZmluZCByZWxhdGVkIGNvbW1pdHMgb3IgYW55IGluZm9ybWF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGlzc3VlIHRoYXQgdGhpcyBwb3RlbnRpYWwgZml4IGFkZHJlc3Nlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHNrYl9tYXlfcHVsbFxcKHNrYiwgbWFjX2xlbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD0zNjE9c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0zNjctXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDozNjg6XHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBtYWNfbGVuKSkpXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0zNjktXHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDc5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFZMQU4gVGFnIEluc2VydGlvbiBDYWxsZXJzKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCBob3cgVkxBTiB0YWdzIGFyZSBpbnNlcnRlZCwgc3BlY2lmaWNhbGx5IGJ5IHRyYWNpbmcgdGhlIGNhbGxzIHRvIHRoZSByZWxldmFudCBmdW5jdGlvbnMuIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB0aGUgZnVuY3Rpb25zIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgYW5kIHRoZW4gYWxzbyB0aGUgZmFtaWxpZXMgb2YgYHZsYW5faW5zZXJ0X2lubmVyX3RhZ2AsIGBfX3ZsYW5faW5zZXJ0X3RhZ2AsIGFuZCBgdmxhbl9pbnNlcnRfdGFnYC4gV2UgbmVlZCB0byBtYXAgb3V0IHRoZSBjYWxsIHBhdGhzIHRvIHRoZXNlIGNvcmUgcm91dGluZXMgdG8gZ2FpbiBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBWTEFOIHRhZ2dpbmcgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBJJiMzOTttIHRoaW5raW5nIHdlIGNhbiBnZXQgdG8gdGhlIHJvb3Qgb2YgaG93IHRoZSBwYWNrZXRzIGFyZSBiZWluZyBjb25zdHJ1Y3RlZCwgYW5kIGhvdyB3ZSBhcmUgYnVpbGRpbmcgdGhlIFZMQU4gdGFncywgYW5kIHRoZW4gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBpbmVmZmljaWVuY2llcyBpbiB0aGUgcHJvY2Vzcy4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGZvbGxvdyB0aGVzZSBjYWxscyB0aHJvdWdoIHRoZSB3aG9sZSBzeXN0ZW0uIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2Ygd2hlcmUgdGhlIFZMQU4gbWFuaXB1bGF0aW9uIG9jY3VycyBhbmQgaG93IGRpZmZlcmVudCBkcml2ZXJzIGFuZCBtb2R1bGVzIGludGVyYWN0IHdpdGggdGhlIFZMQU4gaW5zZXJ0aW9uIGxvZ2ljLiBUaGVuLCB3ZSBjYW4gbG9vayBhdCB0aGUgZGF0YSBmbG93cyBhbmQgYXNzZXNzIHBlcmZvcm1hbmNlIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmxhbl9pbnNlcnRfaW5uZXJfdGFnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaWZfdmxhbi5oPTMzOT1zdGF0aWMgaW5saW5lIGJvb2wgdmxhbl9od19vZmZsb2FkX2NhcGFibGUobmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzQ5LS8qKlxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6MzUwOiAqIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnIC0gaW5uZXIgVkxBTiB0YWcgaW5zZXJ0aW5nXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0zNTEtICogQHNrYjogc2tidWZmIHRvIHRhZ1xuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM2MC0gKi9cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjM2MTpzdGF0aWMgaW5saW5lIGludCBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzYyLVx0XHRcdFx0XHQgIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl90Y2ksXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg9NDE0PXN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDE2LXtcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQxNzpcdHJldHVybiBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHZsYW5fcHJvdG8sIHZsYW5fdGNpLCBFVEhfSExFTik7XG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MTgtfVxuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQyMC0vKipcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQyMTogKiB2bGFuX2luc2VydF9pbm5lcl90YWcgLSBpbm5lciBWTEFOIHRhZyBpbnNlcnRpbmdcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQyMi0gKiBAc2tiOiBza2J1ZmYgdG8gdGFnXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDM2LSAqL1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDM3OnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnZsYW5faW5zZXJ0X2lubmVyX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDM4LVx0XHRcdFx0XHRcdCAgICBfX2JlMTYgdmxhbl9wcm90byxcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00NDMtXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDo0NDQ6XHRlcnIgPSBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHZsYW5fcHJvdG8sIHZsYW5fdGNpLCBtYWNfbGVuKTtcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQ0NS1cdGlmIChlcnIpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD00Njg9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdmxhbl9pbnNlcnRfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDcwLXtcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQ3MTpcdHJldHVybiB2bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCB2bGFuX3Byb3RvLCB2bGFuX3RjaSwgRVRIX0hMRU4pO1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDcyLX1cbi0tXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9MTA9Ym9vbCB2bGFuX2RvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipza2JwKVxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYy01MS1cdFx0c2tiX3B1c2goc2tiLCBvZmZzZXQpO1xubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjUyOlx0XHRza2IgPSAqc2ticCA9IHZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHNrYi1cdTAwM2V2bGFuX3Byb3RvLFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTUzLVx0XHRcdFx0XHRcdCAgICBza2ItXHUwMDNldmxhbl90Y2ksIHNrYi1cdTAwM2VtYWNfbGVuKTtcbi0tXG5uZXQvc2NoZWQvYWN0X21wbHMuYz01Mz1UQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX21wbHNfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjaGVkL2FjdF9tcGxzLmMtOTAtXHRcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XG5uZXQvc2NoZWQvYWN0X21wbHMuYzo5MTpcdFx0XHRpZiAoX192bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCBza2ItXHUwMDNldmxhbl9wcm90byxcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTkyLVx0XHRcdFx0XHRcdCAgICBza2Jfdmxhbl90YWdfZ2V0KHNrYiksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NzEKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFZMQU4gVGFnIEluc2VydGlvbiBpbiB0aGUgTmV0d29yayBTdGFjayoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IFZMQU4gdGFncyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHRoZSBpbnNlcnRpb24gcHJvY2Vzcy4gSSBzZWUgdGhhdCBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHR3byBpbnRlcmVzdGluZyBwbGFjZXM6IGBuZXQvc2NoZWQvYWN0X21wbHMuY2AsIHdoaWNoIGlzIGxpa2VseSByZWxhdGVkIHRvIE1QTFMgKE11bHRpcHJvdG9jb2wgTGFiZWwgU3dpdGNoaW5nKSB0cmFmZmljLCBhbmQgYG5ldC84MDIxcS92bGFuX2NvcmUuY2AgdGhyb3VnaCBgdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkmIzM5O2QgZXhwZWN0IGZvciBzdGFuZGFyZCBWTEFOIGNvcmUgZnVuY3Rpb25hbGl0eS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNlZSBpZiBhbnkgdW5leHBlY3RlZCBjYWxsaW5nIHBhdHRlcm5zIGVtZXJnZS4KCk5vdywgYF9fdmxhbl9pbnNlcnRfdGFnYCBpcyBhbHNvIGNhbGxlZCBlbHNld2hlcmUsIG5vdCBqdXN0IGluIHRoaXMgc3BlY2lmaWMgaW5uZXIgdGFnIHNjZW5hcmlvLiBTbywgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBicm9hZGVyIGNhbGwgZ3JhcGggb2YgKmJvdGgqIGBfX3ZsYW5faW5zZXJ0X3RhZ2AgYW5kIGl0cyB3cmFwcGVyIGZ1bmN0aW9uIGB2bGFuX2luc2VydF90YWdgLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBkaWZmZXJlbnQgY29udGV4dHMgd2hlcmUgVkxBTiB0YWcgaW5zZXJ0aW9uIGlzIHVzZWQgYW5kIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGFsbCBwb3RlbnRpYWwgY2FsbGVycyB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdmxhbl9pbnNlcnRfdGFnXFxiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9xZWRpL3FlZGlfbWFpbi5jPTY2Nz1zdGF0aWMgaW50IHFlZGlfbGwyX3J4KHZvaWQgKmNvb2tpZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGFyZzEsIHUzMiBhcmcyKVxuLS1cbmRyaXZlcnMvc2NzaS9xZWRpL3FlZGlfbWFpbi5jLTcyMi1cdGlmICh3b3JrLVx1MDAzZXZsYW5faWQpXG5kcml2ZXJzL3Njc2kvcWVkaS9xZWRpX21haW4uYzo3MjM6XHRcdF9fdmxhbl9pbnNlcnRfdGFnKHdvcmstXHUwMDNlc2tiLCBodG9ucyhFVEhfUF84MDIxUSksIHdvcmstXHUwMDNldmxhbl9pZCk7XG5kcml2ZXJzL3Njc2kvcWVkaS9xZWRpX21haW4uYy03MjQtXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg9MzYxPXN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDAzLS8qKlxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDA0OiAqIF9fdmxhbl9pbnNlcnRfdGFnIC0gcmVndWxhciBWTEFOIHRhZyBpbnNlcnRpbmdcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQwNS0gKiBAc2tiOiBza2J1ZmYgdG8gdGFnXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDEzLSAqL1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDE0OnN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MTUtXHRcdFx0XHQgICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz02NDg5PWludCBza2Jfdmxhbl9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl90Y2kpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjUwMC1cbm5ldC9jb3JlL3NrYnVmZi5jOjY1MDE6XHRcdGVyciA9IF9fdmxhbl9pbnNlcnRfdGFnKHNrYiwgc2tiLVx1MDAzZXZsYW5fcHJvdG8sXG5uZXQvY29yZS9za2J1ZmYuYy02NTAyLVx0XHRcdFx0XHRza2Jfdmxhbl90YWdfZ2V0KHNrYikpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjQ3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgYHZsYW5faW5zZXJ0X3RhZ2AqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBzcGVjaWZpYyBmdW5jdGlvbiwgYHZsYW5faW5zZXJ0X3RhZ2AuIEl0JiMzOTtzIHdvcnRoIGRpZ2dpbmcgaW50bywgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgY3VycmVudCBjb250ZXh0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQsIHBhcnRpY3VsYXJseSBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIFZMQU4gdGFnZ2luZy4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJ4oCZbGwgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpdC4gSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgdGhpcywgdG8gZW5zdXJlIG5vIGhpZGRlbiBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1xcYnZsYW5faW5zZXJ0X3RhZ1xcYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD00Mzc9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDUyLS8qKlxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDUzOiAqIHZsYW5faW5zZXJ0X3RhZyAtIHJlZ3VsYXIgVkxBTiB0YWcgaW5zZXJ0aW5nXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00NTQtICogQHNrYjogc2tidWZmIHRvIHRhZ1xuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQ2Ny0gKi9cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQ2ODpzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp2bGFuX2luc2VydF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQ2OS1cdFx0XHRcdFx0ICAgICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSlcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD00ODg9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdmxhbl9pbnNlcnRfdGFnX3NldF9wcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQ5MS17XG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDo0OTI6XHRza2IgPSB2bGFuX2luc2VydF90YWcoc2tiLCB2bGFuX3Byb3RvLCB2bGFuX3RjaSk7XG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00OTMtXHRpZiAoc2tiKVxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYz0xMD1ib29sIHZsYW5fZG9fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqKnNrYnApXG4tLVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTQ2LVx0XHQvKlxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjQ3Olx0XHQgKiB2bGFuX2luc2VydF90YWcgZXhwZWN0IHNrYi1cdTAwM2VkYXRhIHBvaW50aW5nIHRvIG1hYyBoZWFkZXIuXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtNDgtXHRcdCAqIFNvIGNoYW5nZSBza2ItXHUwMDNlZGF0YSBiZWZvcmUgY2FsbGluZyBpdCBhbmQgY2hhbmdlIGJhY2sgdG9cbi0tXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYz0zMzc9c3RhdGljIHZvaWQgYmF0YWR2X2JsYV9zZW5kX2NsYWltKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICptYWMsXG4tLVxubmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmMtNDI4LVx0aWYgKHZpZCBcdTAwMjYgQkFUQURWX1ZMQU5fSEFTX1RBRykge1xubmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmM6NDI5Olx0XHRza2IgPSB2bGFuX2luc2VydF90YWcoc2tiLCBodG9ucyhFVEhfUF84MDIxUSksXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYy00MzAtXHRcdFx0XHQgICAgICB2aWQgXHUwMDI2IFZMQU5fVklEX01BU0spO1xuLS1cbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jPTExOTk9YmF0YWR2X2RhdF9hcnBfY3JlYXRlX3JlcGx5KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIF9fYmUzMiBpcF9zcmMsXG4tLVxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtMTIxMi1cdGlmICh2aWQgXHUwMDI2IEJBVEFEVl9WTEFOX0hBU19UQUcpXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYzoxMjEzOlx0XHRza2IgPSB2bGFuX2luc2VydF90YWcoc2tiLCBodG9ucyhFVEhfUF84MDIxUSksXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy0xMjE0LVx0XHRcdFx0ICAgICAgdmlkIFx1MDAyNiBWTEFOX1ZJRF9NQVNLKTtcbi0tXG5uZXQvZHNhL3RhZ184MDIxcS5jPTQ2ND1zdHJ1Y3Qgc2tfYnVmZiAqZHNhXzgwMjFxX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5uZXQvZHNhL3RhZ184MDIxcS5jLTQ2Ny1cdC8qIHNrYi1cdTAwM2VkYXRhIHBvaW50cyBhdCB0aGUgTUFDIGhlYWRlciwgd2hpY2ggaXMgZmluZVxubmV0L2RzYS90YWdfODAyMXEuYzo0Njg6XHQgKiBmb3Igdmxhbl9pbnNlcnRfdGFnKCkuXG5uZXQvZHNhL3RhZ184MDIxcS5jLTQ2OS1cdCAqL1xubmV0L2RzYS90YWdfODAyMXEuYzo0NzA6XHRyZXR1cm4gdmxhbl9pbnNlcnRfdGFnKHNrYiwgaHRvbnModHBpZCksIHRjaSk7XG5uZXQvZHNhL3RhZ184MDIxcS5jLTQ3MS19XG4tLVxubmV0L2RzYS90YWdfc2phMTEwNS5jPTI0MT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnNqYTExMDVfcHZpZF90YWdfY29udHJvbF9wa3Qoc3RydWN0IGRzYV9wb3J0ICpkcCxcbi0tXG5uZXQvZHNhL3RhZ19zamExMTA1LmMtMjYyLVxubmV0L2RzYS90YWdfc2phMTEwNS5jOjI2MzpcdHJldHVybiB2bGFuX2luc2VydF90YWcoc2tiLCB4bWl0X3RwaWQsIChwY3AgXHUwMDNjXHUwMDNjIFZMQU5fUFJJT19TSElGVCkgfFxubmV0L2RzYS90YWdfc2phMTEwNS5jLTI2NC1cdFx0XHQgICAgICAgU0pBMTEwNV9ERUZBVUxUX1ZMQU4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTcxCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2gmIzM5O3MgSW1wYWN0KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgdW5kZXJzdGFuZCB0aGUgYnVnIGl0JiMzOTtzIGFkZHJlc3NpbmcuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gd2hhdCB3YXMgYnJva2VuICpiZWZvcmUqIHRoZSBwYXRjaC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGV4YW1pbmluZyB0aGlzIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgZnVuY3Rpb24sIHdoaWNoIHNlZW1zIHJlc3BvbnNpYmxlIGZvciBpbmplY3RpbmcgVkxBTiB0YWdzIGludG8gYW4gYHNrX2J1ZmZgLiBUaGUgY29kZSBzbmlwcGV0JiMzOTtzIHN0cnVjdHVyZSBpcyBmYW1pbGlhciwgYnV0IEkmIzM5O2xsIHdhbGsgdGhyb3VnaCBpdCBtZXRob2RpY2FsbHkuCgpJIHNlZSBhIGNoZWNrIHJlbGF0ZWQgdG8gYG1hY19sZW5gIGFuZCB0aGVuIHRoaXMgaW50ZXJlc3RpbmcgYHNrYl9wb3N0cHVzaF9kYXRhX21vdmVgIGNhbGwuIFRoZSBpbnRlbnQgb2YgdGhlIGNvZGUgc2VlbXMgdG8gYmUgcHVzaGluZyBhIFZMQU4gaGVhZGVyIG9udG8gdGhlIGBza2JgIGFuZCB0aGVuIHNoaWZ0aW5nIGEgcG9ydGlvbiBvZiB0aGUgb3JpZ2luYWwgTUFDIGhlYWRlci4gQnV0IHRoZXJlJiMzOTtzIGEgY29uZGl0aW9uIHJlbGF0ZWQgdG8gYG1hY19sZW5gIG5vdCBiZWluZyBmdWxseSBwcmVzZW50IGluIHRoZSBsaW5lYXIgYnVmZmVyLiBJZiBgc2tiX2hlYWRsZW4oc2tiKSAmbHQ7IG1hY19sZW5gLCB0aGVuIGBza2JfcG9zdHB1c2hfZGF0YV9tb3ZlYCBiZWNvbWVzIGNyaXRpY2FsLgoKVG8gdW5kZXJzdGFuZCB0aGUgYnVnLCBJIG5lZWQgdG8ga25vdyBwcmVjaXNlbHkgd2hhdCBgc2tiX3Bvc3RwdXNoX2RhdGFfbW92ZWAgKmRvZXMqIHVuZGVyIHRoZXNlIHBvdGVudGlhbGx5IG5vbi1jb250aWd1b3VzIGJ1ZmZlciBjb25kaXRpb25zLiBUaW1lIHRvIGJyZWFrIG91dCB0aGUgZ3JlcCBhbmQgc2VhcmNoIHRoZSBrZXJuZWwgc291cmNlIHRvIHNlZSB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZG9pbmcuIFRoZSBidWcgbGlrZWx5IGludm9sdmVzIGluY29ycmVjdCBhc3N1bXB0aW9ucyBhYm91dCBkYXRhIG1vdmVtZW50IGluIHRoZXNlIG5vbi1saW5lYXIgc2tiIHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX3Bvc3RwdXNoX2RhdGFfbW92ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD0zNjE9c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0zNzctXHRpZiAobGlrZWx5KG1hY19sZW4gXHUwMDNlIEVUSF9UTEVOKSlcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjM3ODpcdFx0c2tiX3Bvc3RwdXNoX2RhdGFfbW92ZShza2IsIFZMQU5fSExFTiwgbWFjX2xlbiAtIEVUSF9UTEVOKTtcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM3OS1cdGlmIChza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikpXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD00NjMxPXN0YXRpYyBpbmxpbmUgdm9pZCBza2JfbWV0YWRhdGFfY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQ2NDctICpcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDY0ODogKiBQcmVmZXIgc2tiX3Bvc3RwdWxsX2RhdGFfbW92ZSgpIG9yIHNrYl9wb3N0cHVzaF9kYXRhX21vdmUoKSB0byBjYWxsaW5nIHRoaXNcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNDY0OS0gKiBoZWxwZXIgZGlyZWN0bHkuXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD00Njg3PXN0YXRpYyBpbmxpbmUgdm9pZCBza2JfcG9zdHB1bGxfZGF0YV9tb3ZlKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00Njk1LS8qKlxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0Njk2OiAqIHNrYl9wb3N0cHVzaF9kYXRhX21vdmUgLSBNb3ZlIHBhY2tldCBkYXRhIGFuZCBtZXRhZGF0YSBhZnRlciBza2JfcHVzaCgpLlxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00Njk3LSAqIEBza2I6IHBhY2tldCB0byBvcGVyYXRlIG9uXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NzAyLSAqL1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0NzAzOnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfcG9zdHB1c2hfZGF0YV9tb3ZlKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQ3MDQtXHRcdFx0XHRcdCAgY29uc3QgdW5zaWduZWQgaW50IGxlbixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0zMzQ0PXN0YXRpYyBpbnQgYnBmX3NrYl9nZW5lcmljX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9mZiwgdTMyIGxlbilcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0zMzQ5LVx0c2tiX3B1c2goc2tiLCBsZW4pO1xubmV0L2NvcmUvZmlsdGVyLmM6MzM1MDpcdHNrYl9wb3N0cHVzaF9kYXRhX21vdmUoc2tiLCBsZW4sIG9mZik7XG5uZXQvY29yZS9maWx0ZXIuYy0zMzUxLVx0bWVtc2V0KHNrYi1cdTAwM2VkYXRhICYjNDM7IG9mZiwgMCwgbGVuKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz00MDYyPXN0YXRpYyBpbmxpbmUgaW50IF9fYnBmX3NrYl9jaGFuZ2VfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaGVhZF9yb29tLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQwODYtXHRcdF9fc2tiX3B1c2goc2tiLCBoZWFkX3Jvb20pO1xubmV0L2NvcmUvZmlsdGVyLmM6NDA4NzpcdFx0c2tiX3Bvc3RwdXNoX2RhdGFfbW92ZShza2IsIGhlYWRfcm9vbSwgMCk7XG5uZXQvY29yZS9maWx0ZXIuYy00MDg4LVx0XHRtZW1zZXQoc2tiLVx1MDAzZWRhdGEsIDAsIGhlYWRfcm9vbSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjI3NT1FWFBPUlRfU1lNQk9MKF9fcHNrYl9jb3B5X2ZjbG9uZSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjI5Mi0gKlx0Tm90ZTogSWYgeW91IHNrYl9wdXNoKCkgdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIgYWZ0ZXIgcmVhbGxvY2F0aW5nIHRoZVxubmV0L2NvcmUvc2tidWZmLmM6MjI5MzogKlx0aGVhZGVyLCBjYWxsIHNrYl9wb3N0cHVzaF9kYXRhX21vdmUoKSBmaXJzdCB0byBtb3ZlIHRoZSBtZXRhZGF0YSBvdXQgb2Zcbm5ldC9jb3JlL3NrYnVmZi5jLTIyOTQtICpcdHRoZSB3YXkgYmVmb3JlIHdyaXRpbmcgdG8gXHUwMDI2c2tfYnVmZi1cdTAwM2VkYXRhLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUzNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHNrYl9wb3N0cHVzaF9kYXRhX21vdmVgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgdGhlIGRlZmluaXRpb24gb2YgYHNrYl9wb3N0cHVzaF9kYXRhX21vdmVgLiBObyBuZWVkIHRvIHJlbHkgb24gYXNzdW1wdGlvbnMgb3IgbWVtb3J5IGhlcmU7IEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCB0byB0aGUgc291cmNlLCB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXI6IGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYC4gVGhpcyBmdW5jdGlvbiYjMzk7cyBiZWhhdmlvciBpcyBjcml0aWNhbCB0byBteSBjdXJyZW50IHRhc2ssIHNvIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIEkgaGF2ZSBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBpdCBkb2VzIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IGl0JiMzOTtzICpzdXBwb3NlZCogdG8gYmVoYXZlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGhlYWRlciBoYXMgdG8gc2F5IGFib3V0IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ3MDA6XHQgKlxuNDcwMTpcdCAqIFNlZSBza2JfZGF0YV9tb3ZlKCkgZm9yIGRldGFpbHMuXG40NzAyOlx0ICovXG40NzAzOlx0c3RhdGljIGlubGluZSB2b2lkIHNrYl9wb3N0cHVzaF9kYXRhX21vdmUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbjQ3MDQ6XHRcdFx0XHRcdFx0ICBjb25zdCB1bnNpZ25lZCBpbnQgbGVuLFxuNDcwNTpcdFx0XHRcdFx0XHQgIGNvbnN0IHVuc2lnbmVkIGludCBuKVxuNDcwNjpcdHtcbjQ3MDc6XHRcdERFQlVHX05FVF9XQVJOX09OX09OQ0UobGVuIFx1MDAzZSBJTlRfTUFYKTtcbjQ3MDg6XHRcdHNrYl9kYXRhX21vdmUoc2tiLCAtbGVuLCBuKTtcbjQ3MDk6XHR9XG40NzEwOlx0XG40NzExOlx0c3RydWN0IHNrX2J1ZmYgKnNrYl9jbG9uZV9zayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbjQ3MTI6XHRcbjQ3MTM6XHQjaWZkZWYgQ09ORklHX05FVFdPUktfUEhZX1RJTUVTVEFNUElOR1xuNDcxNDpcdFxuNDcxNTpcdHZvaWQgc2tiX2Nsb25lX3R4X3RpbWVzdGFtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbjQ3MTY6XHRib29sIHNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG40NzE3Olx0XG40NzE4Olx0I2Vsc2UgLyogQ09ORklHX05FVFdPUktfUEhZX1RJTUVTVEFNUElORyAqL1xuNDcxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA2OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byBgc2tiX2RhdGFfbW92ZWAqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgc2tiX2RhdGFfbW92ZWAgYW5kIEkgd2FudCB0byB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0IGl0JiMzOTtzIGRvaW5nLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIHNvdXJjZS4gTGV0IG1lIHB1bGwgdXAgYGluY2x1ZGUvbGludXgvc2tidWZmLmhgIGFuZCBzY2FuIGxpbmVzIDQ2NTAgdG8gNDY4Ni4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZXNlIGNvcmUgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgaGF2ZSBrZXkgaW5saW5lIGRvY3VtZW50YXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBjcnVjaWFsIGJpdHMgb2YgaW5mb3JtYXRpb246IGRvZXMgaXQgc2ltcGx5IG1vdmUgdGhlIGRhdGEgcG9pbnRlcj8gSXMgdGhlcmUgYW55IG1lbW9yeSBhbGxvY2F0aW9uIG9yIGZyZWVpbmcgaW52b2x2ZWQ/IERvZXMgaXQgY29uc2lkZXIgdGhlIHBhY2tldCYjMzk7cyBtZXRhZGF0YSBhbmQgY29udHJvbCB0aGUgYnVmZmVyJiMzOTtzIHJlZmVyZW5jZSBjb3VudD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gZnJvbSBhIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBwZXJzcGVjdGl2ZS4gVGhpcyByZXF1aXJlcyBhIHRob3JvdWdoIGFuYWx5c2lzIG9mIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBgc2tiYCBzdHJ1Y3R1cmUuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW1wbGljYXRpb25zIGZvciBhbnkgb3RoZXIgcHJvY2Vzc2VzIHVzaW5nIHRoaXMgYHNrYmAuIEFscmlnaHQsIGxldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ2NTA6XHQgKi9cbjQ2NTE6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2RhdGFfbW92ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBpbnQgbGVuLFxuNDY1MjpcdFx0XHRcdFx0IGNvbnN0IHVuc2lnbmVkIGludCBuKVxuNDY1MzpcdHtcbjQ2NTQ6XHRcdGNvbnN0IHU4IG1ldGFfbGVuID0gc2tiX21ldGFkYXRhX2xlbihza2IpO1xuNDY1NTpcdFx0dTggKm1ldGEsICptZXRhX2VuZDtcbjQ2NTY6XHRcbjQ2NTc6XHRcdGlmICghbGVuIHx8ICghbiBcdTAwMjZcdTAwMjYgIW1ldGFfbGVuKSlcbjQ2NTg6XHRcdFx0cmV0dXJuO1xuNDY1OTpcdFxuNDY2MDpcdFx0aWYgKCFtZXRhX2xlbilcbjQ2NjE6XHRcdFx0Z290byBub19tZXRhZGF0YTtcbjQ2NjI6XHRcbjQ2NjM6XHRcdG1ldGFfZW5kID0gc2tiX21ldGFkYXRhX2VuZChza2IpO1xuNDY2NDpcdFx0bWV0YSA9IG1ldGFfZW5kIC0gbWV0YV9sZW47XG40NjY1Olx0XG40NjY2Olx0XHRpZiAoV0FSTl9PTl9PTkNFKG1ldGFfZW5kICYjNDM7IGxlbiAhPSBza2ItXHUwMDNlZGF0YSB8fFxuNDY2NzpcdFx0XHRcdCBtZXRhX2xlbiBcdTAwM2Ugc2tiX2hlYWRyb29tKHNrYikpKSB7XG40NjY4Olx0XHRcdHNrYl9tZXRhZGF0YV9jbGVhcihza2IpO1xuNDY2OTpcdFx0XHRnb3RvIG5vX21ldGFkYXRhO1xuNDY3MDpcdFx0fVxuNDY3MTpcdFxuNDY3MjpcdFx0bWVtbW92ZShtZXRhICYjNDM7IGxlbiwgbWV0YSwgbWV0YV9sZW4gJiM0Mzsgbik7XG40NjczOlx0XHRyZXR1cm47XG40Njc0Olx0XG40Njc1Olx0bm9fbWV0YWRhdGE6XG40Njc2Olx0XHRtZW1tb3ZlKHNrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlZGF0YSAtIGxlbiwgbik7XG40Njc3Olx0fVxuNDY3ODpcdFxuNDY3OTpcdC8qKlxuNDY4MDpcdCAqIHNrYl9wb3N0cHVsbF9kYXRhX21vdmUgLSBNb3ZlIHBhY2tldCBkYXRhIGFuZCBtZXRhZGF0YSBhZnRlciBza2JfcHVsbCgpLlxuNDY4MTpcdCAqIEBza2I6IHBhY2tldCB0byBvcGVyYXRlIG9uXG40NjgyOlx0ICogQGxlbjogbnVtYmVyIG9mIGJ5dGVzIHB1bGxlZCBmcm9tIFx1MDAyNnNrX2J1ZmYtXHUwMDNlZGF0YVxuNDY4MzpcdCAqIEBuOiBudW1iZXIgb2YgYnl0ZXMgdG8gbWVtbW92ZSgpIGZyb20gcHJlLXB1bGwgXHUwMDI2c2tfYnVmZi1cdTAwM2VkYXRhXG40Njg0Olx0ICpcbjQ2ODU6XHQgKiBTZWUgc2tiX2RhdGFfbW92ZSgpIGZvciBkZXRhaWxzLlxuNDY4NjpcdCAqL1xuNDY4NzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBza2JfcG9zdHB1bGxfZGF0YV9tb3ZlKHN0cnVjdCBza19idWZmICpza2IsXG40Njg4Olx0XHRcdFx0XHRcdCAgY29uc3QgdW5zaWduZWQgaW50IGxlbixcbjQ2ODk6XHRcdFx0XHRcdFx0ICBjb25zdCB1bnNpZ25lZCBpbnQgbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NzEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNzQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzIGluIFZMQU4gSW5zZXJ0aW9uKioKCk9rYXksIHNvIGBza2JfZGF0YV9tb3ZlYCB1c2VzIGBtZW1tb3ZlYCwgYW5kIHRoaXMgY29kZSYjMzk7cyBhY2Nlc3NpbmcgYHNrYi0mZ3Q7ZGF0YSAmIzQzOyBtYWNfbGVuIC0gRVRIX0hMRU5gIHdoZW4gY29uc3RydWN0aW5nIHRoZSBWTEFOIGhlYWRlci4gSWYgYG1hY19sZW5gIGlzIGdyZWF0ZXIgdGhhbiBgc2tiX2hlYWRsZW4oc2tiKWAsIHdlJiMzOTtyZSBwb3RlbnRpYWxseSByZWFkaW5nIG9yIHdyaXRpbmcgb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSBsaW5lYXIgYnVmZmVyLCBwb3NzaWJseSBpbnRvIHRoZSB0YWlscm9vbSBvciBldmVuIGludG8gcGFnZWQgZGF0YSwgd2hpY2ggaXMgYW4gT09CIHJlYWQgb3Igd3JpdGUuIEtBU0FOIHNob3VsZCBjYXRjaCBvdXQtb2YtYm91bmRzIGFjY2VzcyBvbiBgc2tiLSZndDtoZWFkYCwgYnV0IGRvZXMgdGhpcyB0b3VjaCB1bmluaXRpYWxpemVkIG1lbW9yeSBzcGVjaWZpY2FsbHk/CgpMZXQmIzM5O3MgbG9vayBhdCB0aGUgcHJvdmlkZWQgY29kZSBhZ2FpbjogaXQgaW50cm9kdWNlcyBhIGNoZWNrIHVzaW5nIGBwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbilgLiAgRG9lcyB0aGlzIGFkZGl0aW9uIGZpeCBvciBwb3RlbnRpYWxseSBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyAgYHBza2JfbWF5X3B1bGwoc2tiLCBsZW4pYCBjaGVja3MgaWYgYGxlbmAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBza2JfaGVhZGxlbihza2IpYC4gSWYgbm90LCBpdCBjYWxscyBgX19wc2tiX3B1bGxfdGFpbGAuIElmIHRoZSB0b3RhbCBTS0IgbGVuZ3RoIGlzIGxlc3MgdGhhbiBgbGVuYCwgYHBza2JfbWF5X3B1bGxgIHJldHVybnMgMC4gTm93LCBpZiB0aGUgcGF0Y2ggY29uZGl0aW9uIGAhcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pYCBpcyB0cnVlLCBpdCByZXR1cm5zIGAtRUlOVkFMYC4KCkJlZm9yZSB0aGUgcGF0Y2gsIGlmIHRoZSBTS0IgZGlkbiYjMzk7dCBoYXZlIGVub3VnaCBsaW5lYXIgYnl0ZXMgKG9yIHdhcyBzaG9ydGVyIHRoYW4gYG1hY19sZW5gKSwgdGhlIGNvZGUgd291bGQgcHJvY2VlZCB0byBgc2tiX2Nvd19oZWFkYCBhbmQgYHNrYl9wdXNoYCwgYnV0IGFsc28gYWNjZXNzIG1lbW9yeSBhdCBgc2tiLSZndDtkYXRhICYjNDM7IG1hY19sZW4gLSBFVEhfSExFTmAgb3IgcGVyZm9ybSBgbWVtbW92ZWAgd2l0aCBgbWFjX2xlbiAtIEVUSF9UTEVOYC4gIElmIGBtYWNfbGVuYCBleGNlZWRzIGBza2ItJmd0O2xlbmAsIGNvdWxkIHRoaXMgb3BlcmF0aW9uIHBvdGVudGlhbGx5IHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnk/CgpZZXMsIGlmIGBtYWNfbGVuICZndDsgc2tiLSZndDtsZW5gIG9yIGBtYWNfbGVuICZndDsgc2tiX2hlYWRsZW4oc2tiKWAuIFRoZSBgc2tiLSZndDtkYXRhYCBwb2ludHMgdG8gdGhlIHBhY2tldCBkYXRhIGluIHRoZSBhbGxvY2F0ZWQgaGVhZCBidWZmZXIgKGVpdGhlciBrbWFsbG9jJiMzOTtkIG9yIHBhZ2UgYWxsb2NhdGVkKS4gVGhlIG1lbW9yeSBiZXlvbmQgYHNrYi0mZ3Q7dGFpbGAgd2l0aGluIHRoaXMgYWxsb2NhdGlvbiAodGFpbHJvb20pIGlzICp1bmluaXRpYWxpemVkKi4gIFdhaXQsIGlzIHRhaWxyb29tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBJZiB0aGUgY29kZSByZWFkcyBwYXN0IGBza2ItJmd0O3RhaWxgIHdpdGhpbiB0aGUgc2xhYiBhbGxvY2F0aW9uLCBvciBwYXN0IHRoZSBlbmQgb2YgdGhlIHNsYWIsIHRoZW4gS0FTQU4gY2F0Y2hlcyBpdCB3aXRoIGEgc2xhYi1vdXQtb2YtYm91bmRzIG9yIGdsb2JhbC1vdXQtb2YtYm91bmRzIHJlYWQgZXJyb3IuCgpPa2F5LCBLQVNBTiB0cmFja3MgYGttYWxsb2NgIG9iamVjdHMuICBgc2tiLSZndDt0YWlsYCBpcyBhIGxvZ2ljYWwgbWFya2VyIHdpdGhpbiB0aGUgc2tiIGRhdGEgYnVmZmVyIChgc2tiLSZndDtoZWFkYCB0byBgc2tiLSZndDtlbmRgKS4gRG9lcyBLQVNBTiBvciBLTVNBTiBjYXRjaCByZWFkcyB3aXRoaW4gdGhlIFNLQiB0YWlscm9vbT8gV2FpdC4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGhhbmRsZSB0aGUgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuCgpXYWl0LCB0aGUgcHJvbXB0IGRpZmZlcmVudGlhdGVzIEtBU0FOIGFuZCBLTVNBTi4gIFN0YW5kYXJkIEtBU0FOIGFscmVhZHkgaGFzIGNvbXByZWhlbnNpdmUgZGVidWdnaW5nIHRvb2xzLiBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mICp1bmluaXRpYWxpemVkKiBtZW1vcnkuIFRoZSBwcm9tcHQgc3RhdGVzIHRvIG9ubHkgdXNlIEtNU0FOIGlmIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugcmlza3MgKm9ubHkqIGRldGVjdGVkIGJ5IEtNU0FOLiAgVGhpcyBpcyBpbXBvcnRhbnQuIEtNU0FOIGlzIGV4cGVuc2l2ZSwgYW5kIHNob3VsZCBiZSB0aGUgbGFzdCByZXNvcnQuCgpUaGUgcnVsZTogT25seSBzZXQgYE5lZWRzS01TQU49dHJ1ZWAgaWYgdGhlIHBhdGNoIG1vZGlmaWVzIGtlcm5lbCBkYXRhIHNlbnQgdG8gdXNlciBzcGFjZSwgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaW52b2x2ZXMgYWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBhbHRlcnMgYm91bmRzIGNoZWNraW5nIGluIHdheXMgdGhhdCBhbGxvd3MgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4gIFdlICpkb24mIzM5O3QqIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgaWYgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgKEtBU0FOIGNhdGNoZXMgdGhlc2UpIG9yIGlmIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLgoKTGV0JiMzOTtzIGZvY3VzIG9uIHdoYXQgdGhlIHBhdGNoIGRvZXMsIGFnYWluLiBUaGUgcGF0Y2ggYWRkcyBgaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbikpIHJldHVybiAtRUlOVkFMO2AuIFRoaXMgaXMgYSBzdGFuZGFyZCBib3VuZHMgY2hlY2suIFdoeSB3YXMgdGhpcyBhZGRlZD8gSXQmIzM5O3MgbGlrZWx5IGEgc2FuaXR5IGNoZWNrLCBhIHNhZmV0eSBjaGVjayB0byBhdm9pZCBPT0IgcmVhZHMuICBJIG5lZWQgdG8gZmluZCB0aGUgdXBzdHJlYW0gY29tbWl0L2ZpeC9jb250ZXh0LiAgSSBjYW4mIzM5O3QgcnVuIGBnaXQgbG9nYCwgb25seSBgZ3JlcHBlcmAuCgpJIG5lZWQgdG8gc2VlIGlmIGBwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbilgIGlzIHVzZWQgZWxzZXdoZXJlLiBJcyB0aGVyZSBjb250ZXh0IGF2YWlsYWJsZSB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgb2YgdGhlIGNoZWNrPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwc2tiX21heV9wdWxsXFwoc2tiLCAuKm1hY19sZW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pZl92bGFuLmg9MzYxPXN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzY3LVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6MzY4Olx0aWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbikpKVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzY5LVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3ODAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIGEgVkxBTiBJbnNlcnRpb24gSXNzdWUqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCB0aGlzIGNvbW1pdC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3Mgam9nIG15IG1lbW9yeSDigJMgd2hhdCB3YXMgdGhlIGNvbW1pdCBkaXJlY3RseSBiZWZvcmUgdGhpcyBvbmU/IEdvdCBpdC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgd2hlcmUgaXMgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCBhY3R1YWxseSBiZWluZyAqdXNlZCo/IFRpbWUgdG8gdHJhY2UgdGhhdCBmdW5jdGlvbi4gQWgsIEkgc2VlIGEgdXNhZ2UgaW4gYG5ldC9zY2hlZC9hY3RfbXBscy5jYC4gTGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGZpbGUuCgpIb2xkIG9u4oCmIHNvbWV0aGluZyYjMzk7cyBjYXRjaGluZyBteSBleWUuIFRoZXJlIGl0IGlzISBMaW5lcyA4MCB0byAxMTAgb2YgYG5ldC9zY2hlZC9hY3RfbXBscy5jYCBhcmUgd2hlcmUgdGhlIGFjdGlvbiBpcyBoYXBwZW5pbmcuIFNwZWNpZmljYWxseSwgd2l0aGluIHRoZSBgdGNmX21wbHNfYWN0YCBmdW5jdGlvbi4gVGhleSYjMzk7cmUgY2hlY2tpbmcgaWYgYSBWTEFOIHRhZyBpcyBwcmVzZW50IG9uIHRoZSBgc2tiYC4gSWYgc28sIHRoZXkmIzM5O3JlIGF0dGVtcHRpbmcgdG8gaW5zZXJ0IGFuICppbm5lciogVkxBTiB0YWcgdXNpbmcgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBpbnNlcnRpb24sIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgTVBMUyBwcm9jZXNzaW5nIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIHRhZ3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIHRoaXMgY2FsbCBpcyBoYXBwZW5pbmcgaGVyZSwgYW5kIHdoYXQgdGhlIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzIGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X21wbHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRcdFx0XHRcdCBza2ItXHUwMDNlZGV2IFx1MDAyNlx1MDAyNiBza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSKSlcbiAgODE6XHRcdFx0XHRnb3RvIGRyb3A7XG4gIDgyOlx0XHRcdGJyZWFrO1xuICA4MzpcdFx0Y2FzZSBUQ0FfTVBMU19BQ1RfUFVTSDpcbiAgODQ6XHRcdFx0bmV3X2xzZSA9IHRjZl9tcGxzX2dldF9sc2UoTlVMTCwgcCwgIWV0aF9wX21wbHMoc2tiX3Byb3RvY29sKHNrYiwgdHJ1ZSkpKTtcbiAgODU6XHRcdFx0aWYgKHNrYl9tcGxzX3B1c2goc2tiLCBuZXdfbHNlLCBwLVx1MDAzZXRjZm1fcHJvdG8sIG1hY19sZW4sXG4gIDg2Olx0XHRcdFx0XHQgIHNrYi1cdTAwM2VkZXYgXHUwMDI2XHUwMDI2IHNrYi1cdTAwM2VkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIpKVxuICA4NzpcdFx0XHRcdGdvdG8gZHJvcDtcbiAgODg6XHRcdFx0YnJlYWs7XG4gIDg5Olx0XHRjYXNlIFRDQV9NUExTX0FDVF9NQUNfUFVTSDpcbiAgOTA6XHRcdFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHtcbiAgOTE6XHRcdFx0XHRpZiAoX192bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCBza2ItXHUwMDNldmxhbl9wcm90byxcbiAgOTI6XHRcdFx0XHRcdFx0XHQgICAgc2tiX3ZsYW5fdGFnX2dldChza2IpLFxuICA5MzpcdFx0XHRcdFx0XHRcdCAgICBFVEhfSExFTikgXHUwMDNjIDApXG4gIDk0Olx0XHRcdFx0XHRnb3RvIGRyb3A7XG4gIDk1Olx0XG4gIDk2Olx0XHRcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gc2tiLVx1MDAzZXZsYW5fcHJvdG87XG4gIDk3Olx0XHRcdFx0X192bGFuX2h3YWNjZWxfY2xlYXJfdGFnKHNrYik7XG4gIDk4Olx0XHRcdH1cbiAgOTk6XHRcbiAxMDA6XHRcdFx0bmV3X2xzZSA9IHRjZl9tcGxzX2dldF9sc2UoTlVMTCwgcCwgbWFjX2xlbiB8fFxuIDEwMTpcdFx0XHRcdFx0XHQgICAhZXRoX3BfbXBscyhza2ItXHUwMDNlcHJvdG9jb2wpKTtcbiAxMDI6XHRcbiAxMDM6XHRcdFx0aWYgKHNrYl9tcGxzX3B1c2goc2tiLCBuZXdfbHNlLCBwLVx1MDAzZXRjZm1fcHJvdG8sIDAsIGZhbHNlKSlcbiAxMDQ6XHRcdFx0XHRnb3RvIGRyb3A7XG4gMTA1Olx0XHRcdGJyZWFrO1xuIDEwNjpcdFx0Y2FzZSBUQ0FfTVBMU19BQ1RfTU9ESUZZOlxuIDEwNzpcdFx0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLFxuIDEwODpcdFx0XHRcdFx0ICAgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikgJiM0MzsgTVBMU19ITEVOKSlcbiAxMDk6XHRcdFx0XHRnb3RvIGRyb3A7XG4gMTEwOlx0XHRcdG5ld19sc2UgPSB0Y2ZfbXBsc19nZXRfbHNlKG1wbHNfaGRyKHNrYiksIHAsIGZhbHNlKTtcbiAxMTE6XHRcdFx0aWYgKHNrYl9tcGxzX3VwZGF0ZV9sc2Uoc2tiLCBuZXdfbHNlKSlcbiAxMTI6XHRcdFx0XHRnb3RvIGRyb3A7XG4gMTEzOlx0XHRcdGJyZWFrO1xuIDExNDpcdFx0Y2FzZSBUQ0FfTVBMU19BQ1RfREVDX1RUTDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5MzYKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFZMQU4gQ29yZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBWTEFOIGNvcmUgZnVuY3Rpb25hbGl0eSwgc28gbGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgbmV0LzgwMjFxL3ZsYW5fY29yZS5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gemVybyBpbiBvbiBsaW5lcyA0MCB0aHJvdWdoIDY1LiBUaGF0IHNob3VsZCBiZSBhIGdvb2QgY2h1bmsgb2YgY29kZSB0byByZWZyZXNoLiBIb3BlZnVsbHksIHRoYXQgd2lsbCBjb250YWluIHRoZSBzZWN0aW9uIEkgbmVlZCBvbiBob3cgdGhpbmdzIGFyZSBoYW5kbGVkLiBUaW1lIHRvIG9wZW4gdGhlIGZpbGUgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJIGV4cGVjdCBpdCB0byBpbmNsdWRlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbiBjYWxscyByZWxhdGVkIHRvIFZMQU4gdGFnZ2luZyBhbmQgdW50YWdnaW5nLCBvciBhdCBsZWFzdCBob3cgdGhlIFZMQU4gY29yZSBoYW5kbGVzIHRoZSBpbnNlcnRpb24gYW5kIHJlbW92YWwgb2YgdGhlIDgwMi4xUSB0YWcuIExldCYjMzk7cyBzZWUgaWYgbXkgbWVudGFsIG1vZGVsIGxpbmVzIHVwIHdpdGggdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0LzgwMjFxL3ZsYW5fY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MDpcdFxuICA0MTpcdFx0aWYgKCEodmxhbl9kZXZfcHJpdih2bGFuX2RldiktXHUwMDNlZmxhZ3MgXHUwMDI2IFZMQU5fRkxBR19SRU9SREVSX0hEUikgXHUwMDI2XHUwMDI2XG4gIDQyOlx0XHQgICAgIW5ldGlmX2lzX21hY3ZsYW5fcG9ydCh2bGFuX2RldikgXHUwMDI2XHUwMDI2XG4gIDQzOlx0XHQgICAgIW5ldGlmX2lzX2JyaWRnZV9wb3J0KHZsYW5fZGV2KSkge1xuICA0NDpcdFx0XHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gc2tiLVx1MDAzZWRhdGEgLSBza2JfbWFjX2hlYWRlcihza2IpO1xuICA0NTpcdFxuICA0NjpcdFx0XHQvKlxuICA0NzpcdFx0XHQgKiB2bGFuX2luc2VydF90YWcgZXhwZWN0IHNrYi1cdTAwM2VkYXRhIHBvaW50aW5nIHRvIG1hYyBoZWFkZXIuXG4gIDQ4Olx0XHRcdCAqIFNvIGNoYW5nZSBza2ItXHUwMDNlZGF0YSBiZWZvcmUgY2FsbGluZyBpdCBhbmQgY2hhbmdlIGJhY2sgdG9cbiAgNDk6XHRcdFx0ICogb3JpZ2luYWwgcG9zaXRpb24gbGF0ZXJcbiAgNTA6XHRcdFx0ICovXG4gIDUxOlx0XHRcdHNrYl9wdXNoKHNrYiwgb2Zmc2V0KTtcbiAgNTI6XHRcdFx0c2tiID0gKnNrYnAgPSB2bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCBza2ItXHUwMDNldmxhbl9wcm90byxcbiAgNTM6XHRcdFx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZXZsYW5fdGNpLCBza2ItXHUwMDNlbWFjX2xlbik7XG4gIDU0Olx0XHRcdGlmICghc2tiKVxuICA1NTpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiAgNTY6XHRcdFx0c2tiX3B1bGwoc2tiLCBvZmZzZXQgJiM0MzsgVkxBTl9ITEVOKTtcbiAgNTc6XHRcdFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcbiAgNTg6XHRcdH1cbiAgNTk6XHRcbiAgNjA6XHRcdHNrYi1cdTAwM2Vwcmlvcml0eSA9IHZsYW5fZ2V0X2luZ3Jlc3NfcHJpb3JpdHkodmxhbl9kZXYsIHNrYi1cdTAwM2V2bGFuX3RjaSk7XG4gIDYxOlx0XHRfX3ZsYW5faHdhY2NlbF9jbGVhcl90YWcoc2tiKTtcbiAgNjI6XHRcbiAgNjM6XHRcdHJ4X3N0YXRzID0gdGhpc19jcHVfcHRyKHZsYW5fZGV2X3ByaXYodmxhbl9kZXYpLVx1MDAzZXZsYW5fcGNwdV9zdGF0cyk7XG4gIDY0Olx0XG4gIDY1Olx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJ4X3N0YXRzLVx1MDAzZXN5bmNwKTtcbiAgNjY6XHRcdHU2NF9zdGF0c19pbmMoXHUwMDI2cnhfc3RhdHMtXHUwMDNlcnhfcGFja2V0cyk7XG4gIDY3Olx0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNnJ4X3N0YXRzLVx1MDAzZXJ4X2J5dGVzLCBza2ItXHUwMDNlbGVuKTtcbiAgNjg6XHRcdGlmIChza2ItXHUwMDNlcGt0X3R5cGUgPT0gUEFDS0VUX01VTFRJQ0FTVClcbiAgNjk6XHRcdFx0dTY0X3N0YXRzX2luYyhcdTAwMjZyeF9zdGF0cy1cdTAwM2VyeF9tdWx0aWNhc3QpO1xuICA3MDpcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cnhfc3RhdHMtXHUwMDNlc3luY3ApO1xuICA3MTpcdFxuICA3MjpcdFx0cmV0dXJuIHRydWU7XG4gIDczOlx0fVxuICA3NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgwMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWTEFOIFRhZyBJbnNlcnRpb24gTG9naWMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgZnVuY3Rpb24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0JiMzOTtzIHN1cHBvc2VkIHRvIGRvLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBpbnNlcnRpbmcgYSBWTEFOIHRhZyBpbnRvIGFuIGBza19idWZmYC4gIE9rYXksIGdvdCBpdC4gSXQgdGFrZXMgYW4gYHNrX2J1ZmZgLCB0aGUgVkxBTiBwcm90b2NvbCBhbmQgVENJLCBhbmQgdGhlIE1BQyBoZWFkZXIgbGVuZ3RoIGFzIGlucHV0LgoKTm93LCB0aGF0IGBwc2tiX21heV9wdWxsYCBjYWxsLi4uIEkga25vdyB0aGF0IGZ1bmN0aW9uLiAgSXTigJlzIGEgY3J1Y2lhbCBzYWZldHkgY2hlY2suIEl0IHZlcmlmaWVzIGlmIHRoZSBgc2tfYnVmZmAgaGFzIGVub3VnaCBjb250aWd1b3VzIGRhdGEgdG8gYWNjb21tb2RhdGUgYG1hY19sZW5gLiAgSWYgbm90LCBpdCBhdHRlbXB0cyB0byBwdWxsIHRoZSBuZWNlc3NhcnkgZGF0YSwgd2hpY2ggY291bGQgaW52b2x2ZSByZWFzc2VtYmxpbmcgZnJhZ21lbnRzLiBCdXQsIGlmIGBwc2tiX21heV9wdWxsYCByZXR1cm5zIGBmYWxzZWAsIHdoaWNoIGhhcHBlbnMgd2hlbiBgc2tiLSZndDtsZW4gJmx0OyBtYWNfbGVuYCBvciBgc2tiX2hlYWRsZW4oc2tiKSAmbHQ7IG1hY19sZW5gLCB0aGVuIHRoZXJlJiMzOTtzIGFuIGlzc3VlLiBJdCBtZWFucyB0aGUgYHNrYmAgZG9lc24mIzM5O3QgY29udGFpbiBlbm91Z2ggZGF0YSwgc28gYG1hY19sZW5gIGJ5dGVzIGFyZSBub3QgZ3VhcmFudGVlZCB0byBiZSBwcmVzZW50LgoKVGhlIHN1YnNlcXVlbnQgYHNrYl9wdXNoYCBhbmQgYHNrYl9wb3N0cHVzaF9kYXRhX21vdmVgIGNhbGxzIHdvcnJ5IG1lLiBJZiBgcHNrYl9tYXlfcHVsbGAgZmFpbGVkLCB0aGVuIHRoZXNlIG9wZXJhdGlvbnMgY291bGQgdHJ5IHRvIGFjY2VzcyBkYXRhICpiZXlvbmQqIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLiBgbWVtbW92ZWAgd2l0aCBgbWFjX2xlbiAtIEVUSF9UTEVOYCBjb3VsZCBjYXVzZSBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcy4gIEFuZCwgdGhlIGFzc2lnbm1lbnQgdG8gYHZldGhgIHdvdWxkIGxlYWQgdG8gd3JpdGluZyBvdXQgb2YgdGhlIGJvdW5kcyBvZiB0aGUgc2tiIGRhdGEgYnVmZmVyIG9yIGJleW9uZCBgc2tiLSZndDt0YWlsYC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgaGVhcCBidWZmZXIgb3ZlcmZsb3csIGEgS0FTQU4gY2F0Y2ghCgpTbywgdGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgdnVsbmVyYWJpbGl0eS4gVGhlIGFic2VuY2Ugb2YgdGhlIGBwc2tiX21heV9wdWxsYCBjaGVjayBtZWFucyB3cml0ZXMgdG8gYHZldGhgIGNvdWxkIGJlIG91dCBvZiBib3VuZHMsIGRlcGVuZGluZyBvbiB0aGUgbGVuZ3RoIG9mIGBza2JgLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQmIzM5O3MgcnVuIGRvd24gdGhlIGNoZWNrbGlzdC4KMS4gIE5vdGhpbmcgaXMgc2VudCB0byB1c2Vyc3BhY2UuIEdvb2QuCjIuICBgbWFjX2xlbmAgaXMgYSBmdW5jdGlvbiBhcmd1bWVudCwgaW5pdGlhbGl6ZWQuIGBza2JgIGlzIGFuIGluaXRpYWxpemVkIGBza19idWZmYC4KMy4gIE5vIG5ldyBzdHJ1Y3R1cmVzIG9yIGFsbG9jYXRpb25zLgo0LiAgQnV0Li4ud2FpdC4gRG9lcyB0aGUgY2hlY2sgKmludHJvZHVjZSogYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaz8gTm8sIHRoZSBuZXcgYHBza2JfbWF5X3B1bGxgIGNoZWNrIHByZXZlbnRzIGdvaW5nIGJleW9uZCB0aGUgYG1hY19sZW5gLiBJdCBlbnN1cmVzIGBsZW5gIGJ5dGVzIG9mIHRoZSBza2IgYXJlIGluIHRoZSBjb250aWd1b3VzIGhlYWQgYnVmZmVyIChgc2tiLSZndDtkYXRhYCB0byBgc2tiLSZndDtkYXRhICYjNDM7IGxlbmApLiBJdCYjMzk7cyBwcmV2ZW50aW5nIGlzc3VlcyEKCk9rYXksIHNvIEkgbmVlZCB0byBjaGVjayB0aGUgY2FzZXMgd2hlcmUgYC1FSU5WQUxgIGlzIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24sIHRvIGVuc3VyZSB0aGUgKmNhbGxlcnMqIGRvbiYjMzk7dCB1c2UgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQmIzM5O3Mgc2VlIHdobyBjYWxscyBgX192bGFuX2luc2VydF9pbm5lcl90YWdgLiBBaGEsIGBfX3ZsYW5faW5zZXJ0X3RhZ2AuIExldCYjMzk7cyBjaGVjayB3aGVyZSB0aGF0IGlzIGNhbGxlZC4gSXQgbG9va3MgbGlrZSBgc2tiX3ZsYW5fcHVzaGAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gSSYjMzk7bGwgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIHRoYXQgZnVuY3Rpb24gdG8gY29uZmlybSBpdCBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgZXJyb3IgY29kZS4gSXQgc2hvdWxkIGJlIGdvb2QgYmVjYXVzZSBgcHNrYl9tYXlfcHVsbGAgaXMgYSBzYWZldHkgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY0OTA6XHR7XG42NDkxOlx0XHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkge1xuNjQ5MjpcdFx0XHRpbnQgb2Zmc2V0ID0gc2tiLVx1MDAzZWRhdGEgLSBza2JfbWFjX2hlYWRlcihza2IpO1xuNjQ5MzpcdFx0XHRpbnQgZXJyO1xuNjQ5NDpcdFxuNjQ5NTpcdFx0XHRpZiAoV0FSTl9PTkNFKG9mZnNldCxcbjY0OTY6XHRcdFx0XHQgICAgICBcJiMzNDtza2Jfdmxhbl9wdXNoIGdvdCBza2Igd2l0aCBza2ItXHUwMDNlZGF0YSBub3QgYXQgbWFjIGhlYWRlciAob2Zmc2V0ICVkKVxcblwmIzM0OyxcbjY0OTc6XHRcdFx0XHQgICAgICBvZmZzZXQpKSB7XG42NDk4Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG42NDk5Olx0XHRcdH1cbjY1MDA6XHRcbjY1MDE6XHRcdFx0ZXJyID0gX192bGFuX2luc2VydF90YWcoc2tiLCBza2ItXHUwMDNldmxhbl9wcm90byxcbjY1MDI6XHRcdFx0XHRcdFx0c2tiX3ZsYW5fdGFnX2dldChza2IpKTtcbjY1MDM6XHRcdFx0aWYgKGVycilcbjY1MDQ6XHRcdFx0XHRyZXR1cm4gZXJyO1xuNjUwNTpcdFxuNjUwNjpcdFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBza2ItXHUwMDNldmxhbl9wcm90bztcbjY1MDc6XHRcdFx0c2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyIC09IFZMQU5fSExFTjtcbjY1MDg6XHRcbjY1MDk6XHRcdFx0c2tiX3Bvc3RwdXNoX3Jjc3VtKHNrYiwgc2tiLVx1MDAzZWRhdGEgJiM0MzsgKDIgKiBFVEhfQUxFTiksIFZMQU5fSExFTik7XG42NTEwOlx0XHR9XG42NTExOlx0XHRfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgdmxhbl9wcm90bywgdmxhbl90Y2kpO1xuNjUxMjpcdFx0cmV0dXJuIDA7XG42NTEzOlx0fVxuNjUxNDpcdEVYUE9SVF9TWU1CT0woc2tiX3ZsYW5fcHVzaCk7XG42NTE1Olx0XG42NTE2Olx0LyoqXG42NTE3Olx0ICogc2tiX2V0aF9wb3AoKSAtIERyb3AgdGhlIEV0aGVybmV0IGhlYWRlciBhdCB0aGUgaGVhZCBvZiBhIHBhY2tldFxuNjUxODpcdCAqXG42NTE5Olx0ICogQHNrYjogU29ja2V0IGJ1ZmZlciB0byBtb2RpZnlcbjY1MjA6XHQgKlxuNjUyMTpcdCAqIERyb3AgdGhlIEV0aGVybmV0IGhlYWRlciBvZiBAc2tiLlxuNjUyMjpcdCAqXG42NTIzOlx0ICogRXhwZWN0cyB0aGF0IHNrYi1cdTAwM2VkYXRhIHBvaW50cyB0byB0aGUgbWFjIGhlYWRlciBhbmQgdGhhdCBubyBWTEFOIHRhZ3MgYXJlXG42NTI0Olx0ICogcHJlc2VudC5cbjY1MjU6XHQgKlxuNjUyNjpcdCAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtZXJybm8gb3RoZXJ3aXNlLlxuNjUyNzpcdCAqL1xuNjUyODpcdGludCBza2JfZXRoX3BvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuNjUyOTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2OTcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFZMQU4gVGFnZ2luZyBpbiBhIFNDU0kgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgVkxBTiB0YWdzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgU0NTSSBkZXZpY2VzLiBNeSBpbml0aWFsIHBvaW50IG9mIHJlZmVyZW5jZSBpcyB0aGUgYHNrYl92bGFuX3B1c2hgIGZ1bmN0aW9uLiBJZiB0aGVyZSYjMzk7cyBhbiBlcnJvciB0aGVyZSwgaXQganVzdCByZXR1cm5zIHRoZSBlcnJvciBjb2RlLCB3aGljaCBpcyBzdHJhaWdodGZvcndhcmQuIE5vdywgSSB3YW50IHRvIHNlZSBob3cgdGhpcyBpcyB1c2VkIGluIHByYWN0aWNlLiBJJiMzOTttIGZvY3VzaW5nIG9uIGBkcml2ZXJzL3Njc2kvcWVkaS9xZWRpX21haW4uY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSBgX192bGFuX2luc2VydF90YWdgIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCBoZXJlLCBhbmQgaG93IGl0IHVzZXMgdGhlIEV0aGVybmV0IHByb3RvY29sIGZvciBWTEFOcyAoRVRIX1BfODAyMVEpIGFuZCB0aGUgVkxBTiBJRCBpdHNlbGYuIE5vdywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGUgcmVjZWl2ZSBwYXRoLiBJIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byBgcWVkaV9sbDJfcnhgIGluIHRoZSBzYW1lIGZpbGUgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBmbG93LiBUaGlzIHNob3VsZCBzaG93IG1lIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgaW5jb21pbmcgZnJhbWVzIHdpdGggYW5kIHdpdGhvdXQgVkxBTiB0YWdzLCBhbmQgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgb3ZlcmFsbCBTQ1NJIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9xZWRpL3FlZGlfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MjA6XHRcdFx0d29yay1cdTAwM2V2bGFuX2lkID0gc2tiX3ZsYW5fdGFnX2dldChza2IpO1xuIDcyMTpcdFxuIDcyMjpcdFx0aWYgKHdvcmstXHUwMDNldmxhbl9pZClcbiA3MjM6XHRcdFx0X192bGFuX2luc2VydF90YWcod29yay1cdTAwM2Vza2IsIGh0b25zKEVUSF9QXzgwMjFRKSwgd29yay1cdTAwM2V2bGFuX2lkKTtcbiA3MjQ6XHRcbiA3MjU6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZxZWRpLVx1MDAzZWxsMl9sb2NrKTtcbiA3MjY6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2d29yay1cdTAwM2VsaXN0LCBcdTAwMjZxZWRpLVx1MDAzZWxsMl9za2JfbGlzdCk7XG4gNzI3Olx0XHRzcGluX3VubG9ja19iaChcdTAwMjZxZWRpLVx1MDAzZWxsMl9sb2NrKTtcbiA3Mjg6XHRcbiA3Mjk6XHRcdHdha2VfdXBfcHJvY2VzcyhxZWRpLVx1MDAzZWxsMl9yZWN2X3RocmVhZCk7XG4gNzMwOlx0XG4gNzMxOlx0XHRyZXR1cm4gMDtcbiA3MzI6XHR9XG4gNzMzOlx0XG4gNzM0Olx0LyogbWFwIHRoaXMgc2tiIHRvIGlzY3NpdWlvIG1tYXBlZCByZWdpb24gKi9cbiA3MzU6XHRzdGF0aWMgaW50IHFlZGlfbGwyX3Byb2Nlc3Nfc2tiKHN0cnVjdCBxZWRpX2N0eCAqcWVkaSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA3MzY6XHRcdFx0XHRcdHUxNiB2bGFuX2lkKVxuIDczNzpcdHtcbiA3Mzg6XHRcdHN0cnVjdCBxZWRpX3Vpb19kZXYgKnVkZXYgPSBOVUxMO1xuIDczOTpcdFx0c3RydWN0IHFlZGlfdWlvX2N0cmwgKnVjdHJsID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0MzIKCQkJCQkJCW91dHB1dDogMTc0CgkJCQkJCQl0aG91Z2h0czogODEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFZMQU4gVGFnIEluc2VydGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGNhcmVmdWxseSByZXZpZXdpbmcgdGhpcyBwYXRjaCwgZm9jdXNpbmcgb24gaXRzIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IHNhZmV0eS4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBpdCBhZGRzIGEgc2FmZXR5IGNoZWNrLCBgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pYCwgdG8gYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC4gVGhpcyBjaGVjayBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgZW5zdXJlcyB0aGF0IHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgYWN0dWFsbHkgKmhhcyogZW5vdWdoIGRhdGEgdG8gYWNjb21tb2RhdGUgdGhlIFZMQU4gdGFnIGluc2VydGlvbiwgc3BlY2lmaWNhbGx5IGVuc3VyaW5nIHRoZXJlIGFyZSBhdCBsZWFzdCBgbWFjX2xlbmAgYnl0ZXMgYXZhaWxhYmxlLgoKV2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgY29kZSB3YXMgdnVsbmVyYWJsZSB0byBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCB3cml0ZXMsIHBvdGVudGlhbGx5IGNvcnJ1cHRpbmcgbWVtb3J5IOKAkyBhIGNsYXNzaWMgaGVhcCBvciBzbGFiIG91dC1vZi1ib3VuZHMgdnVsbmVyYWJpbGl0eS4gIFRoaXMgaXMgYSBzaWduaWZpY2FudCBwcm9ibGVtIHRoYXQgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNBTml0aXplcikgaXMgZGVzaWduZWQgdG8gY2F0Y2guICBJdCYjMzk7cyB0aGUgcHJpbWFyeSByZWFzb24gZm9yIHRoaXMgcGF0Y2guCgpUaGUgaW1wb3J0YW50IHBvaW50IGlzIHRoYXQgdGhpcyBwYXRjaCBvbmx5IGFkZHJlc3NlcyAqZXhpc3RpbmcqIG1lbW9yeSBzYWZldHkgaXNzdWVzLiBJdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBkb2VzbiYjMzk7dCBpbnZvbHZlIGFueSBjaGFuZ2VzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyByZWFkLCBvciBzdHJ1Y3R1cmUgZmllbGRzIGVuZGluZyB1cCB1bmluaXRpYWxpemVkIGFuZCBsZWFrZWQgdG8gdXNlcnNwYWNlLiBJJiMzOTt2ZSBzcGVjaWZpY2FsbHkgY2hlY2tlZCBmb3IgdGhvc2Ugc2NlbmFyaW9zLgoKVGhlIHBhdGNoJiMzOTtzIGxvZ2ljIGlzIGNsZWFyOiBpZiBgcHNrYl9tYXlfcHVsbGAgZmFpbHMgKG1lYW5pbmcgbm90IGVub3VnaCBkYXRhKSwgaXQgcmV0dXJucyBgLUVJTlZBTGAuICBUaGUgY2FsbGVycyBvZiBgdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCBoYW5kbGUgdGhpcyBlcnJvciBieSBkcm9wcGluZyB0aGUgYHNrYmAsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IGJlaGF2aW9yLiAgVGhlcmUmIzM5O3Mgbm8gcGF0aCB3aGVyZSB3ZSBlbmQgdXAgbGVha2luZyB1bmluaXRpYWxpemVkIGRhdGEgb3IgcmV0dXJuaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBgcHNrYl9tYXlfcHVsbGAgaXMgZGVzaWduZWQgdG8gcHVsbCAqZXhpc3RpbmcqIGJ5dGVzIGludG8gdGhlIGxpbmVhciBidWZmZXIsIG5vdCBjcmVhdGUgbmV3IHVuaW5pdGlhbGl6ZWQgb25lcy4gQWxzbywgSSBoYXZlIHZlcmlmaWVkIHRoYXQgc3RydWN0dXJlcyB3cml0dGVuIHRvIGFyZSBhbHdheXMgZG9uZSBzbyBhZnRlciBgcHNrYl9tYXlfcHVsbGAgc3VjY2VlZHMsIGVuc3VyaW5nIGluaXRpYWxpemF0aW9uLgoKU28sIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBLTVNBTiAoS2VybmVsIE1lbW9yeSBTQU5pdGl6ZXIpIGNvbmNlcm5zLiBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCB0byBkZXRlY3QgdGhlIHR5cGVzIG9mIHZ1bG5lcmFiaWxpdGllcyB0aGlzIHBhdGNoIGFkZHJlc3Nlcy4gVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzOiBgTmVlZHNLTVNBTjogZmFsc2VgLiBJJiMzOTttIHJlYWR5IHRvIGNvbW1pdCB0aGlzLCBiZWNhdXNlIHRoZSBjb3JlIHByb2JsZW0gdGhpcyBwYXRjaCBhZGRyZXNzZXMgaXMgZGVmaW5pdGVseSBhIEtBU0FOIGlzc3VlLiBJJiMzOTttIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgdXNpbmcgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pIGluIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKCkgdG8gZW5zdXJlIHRoYXQgdGhlIHBhY2tldCBidWZmZXIgY29udGFpbnMgYXQgbGVhc3QgbWFjX2xlbiBsaW5lYXIgYnl0ZXMgYmVmb3JlIHBlcmZvcm1pbmcgaGVhZGVyIG1hbmlwdWxhdGlvbnMgKHNrYl9wb3N0cHVzaF9kYXRhX21vdmUgYW5kIHdyaXRpbmcgdmxhbl9ldGhoZHIpLiBXaXRob3V0IHRoaXMgY2hlY2ssIHBhY2tldHMgc2hvcnRlciB0aGFuIG1hY19sZW4gb3Igbm9uLWxpbmVhciBidWZmZXJzIGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBoZWFwIGFjY2Vzc2VzIChPT0IgcmVhZC93cml0ZSksIHdoaWNoIGFyZSBkaXJlY3RseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayB1c2luZyBwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbikgaW4gX192bGFuX2luc2VydF9pbm5lcl90YWcoKSB0byBlbnN1cmUgdGhhdCB0aGUgcGFja2V0IGJ1ZmZlciBjb250YWlucyBhdCBsZWFzdCBtYWNfbGVuIGxpbmVhciBieXRlcyBiZWZvcmUgcGVyZm9ybWluZyBoZWFkZXIgbWFuaXB1bGF0aW9ucyAoc2tiX3Bvc3RwdXNoX2RhdGFfbW92ZSBhbmQgd3JpdGluZyB2bGFuX2V0aGhkcikuIFdpdGhvdXQgdGhpcyBjaGVjaywgcGFja2V0cyBzaG9ydGVyIHRoYW4gbWFjX2xlbiBvciBub24tbGluZWFyIGJ1ZmZlcnMgY291bGQgbGVhZCB0byBvdXQtb2YtYm91bmRzIGhlYXAgYWNjZXNzZXMgKE9PQiByZWFkL3dyaXRlKSwgd2hpY2ggYXJlIGRpcmVjdGx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGUgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEwOjIzLjAwNDM5OTM5NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDcwNjE4NDMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWTEFOXzgwMjFRXCIsXG4gICAgXCJORVRfQUNUX01QTFNcIixcbiAgICBcIk5FVF9BQ1RfVkxBTlwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza2Jfdmxhbl9wdXNoXCIsXG4gICAgXCJ2bGFuX2RvX3JlY2VpdmVcIixcbiAgICBcInRjZl9tcGxzX2FjdFwiLFxuICAgIFwidGNmX3ZsYW5fYWN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIHVzaW5nIHBza2JfbWF5X3B1bGwoc2tiLCBtYWNfbGVuKSBpbiBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZygpIHRvIGVuc3VyZSB0aGF0IHRoZSBwYWNrZXQgYnVmZmVyIGNvbnRhaW5zIGF0IGxlYXN0IG1hY19sZW4gbGluZWFyIGJ5dGVzIGJlZm9yZSBwZXJmb3JtaW5nIGhlYWRlciBtYW5pcHVsYXRpb25zIChza2JfcG9zdHB1c2hfZGF0YV9tb3ZlIGFuZCB3cml0aW5nIHZsYW5fZXRoaGRyKS4gV2l0aG91dCB0aGlzIGNoZWNrLCBwYWNrZXRzIHNob3J0ZXIgdGhhbiBtYWNfbGVuIG9yIG5vbi1saW5lYXIgYnVmZmVycyBjb3VsZCBsZWFkIHRvIG91dC1vZi1ib3VuZHMgaGVhcCBhY2Nlc3NlcyAoT09CIHJlYWQvd3JpdGUpLCB3aGljaCBhcmUgZGlyZWN0bHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZSBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBidWZmZXJzLCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pIGNoZWNrIHRvIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKCkgaW4gaW5jbHVkZS9saW51eC9pZl92bGFuLmggdG8gZW5zdXJlIHN1ZmZpY2llbnQgaGVhZCBkYXRhIGlzIHB1bGxlZCBiZWZvcmUgaW5zZXJ0aW5nIGFuIGlubmVyIFZMQU4gdGFnLiBUaGlzIHJlYWNoYWJsZSBoZWxwZXIgaXMgZXhlcmNpc2VkIGJ5IGNvcmUgbmV0d29ya2luZyBwYXRocyBzdWNoIGFzIDgwMi4xUSByZWNlaXZlIHByb2Nlc3NpbmcgKHZsYW5fZG9fcmVjZWl2ZSksIFZMQU4gcHVzaCBvcGVyYXRpb25zIChza2Jfdmxhbl9wdXNoKSwgYW5kIFRDIGFjdGlvbnMgKHRjZl9tcGxzX2FjdCwgdGNmX3ZsYW5fYWN0KS4gRnV6emluZyBpcyB3b3J0aHdoaWxlIHRvIHRlc3QgYmVoYXZpb3Igd2l0aCBub24tbGluZWFyLCBmcmFnbWVudGVkLCBvciBtYWxmb3JtZWQgcGFja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTA6MjMuMDA0NDA2NDAzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU0MTE4MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmMzZkY2FhMWQ5NjdlYzJiNzJlYjQzNjVmNGJmODMzOTYzYjhkYmY0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDE1IDExOjEwOjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oIGIvaW5jbHVkZS9saW51eC9pZl92bGFuLmhcXG5pbmRleCAyMGNjMTZlYTRlNWFiLi40ODQ2MDMyYmY0ZmZjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9pZl92bGFuLmhcXG5AQCAtMzY1LDYgKzM2NSw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGNvbnN0IHU4IG1ldGFfbGVuID0gbWFjX2xlbiBcXHUwMDNlIEVUSF9UTEVOID8gc2tiX21ldGFkYXRhX2xlbihza2IpIDogMDtcXG4gXFx0c3RydWN0IHZsYW5fZXRoaGRyICp2ZXRoO1xcbiBcXG4rXFx0aWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbikpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdGlmIChza2JfY293X2hlYWQoc2tiLCBtZXRhX2xlbiArIFZMQU5fSExFTikgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEwOjIzLjQ2MDU0MTI1MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTk1ODUwMDgxMDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZMQU5fODAyMVFcIixcbiAgICBcIk5FVF9BQ1RfTVBMU1wiLFxuICAgIFwiTkVUX0FDVF9WTEFOXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl92bGFuX3B1c2hcIixcbiAgICBcInZsYW5fZG9fcmVjZWl2ZVwiLFxuICAgIFwidGNmX21wbHNfYWN0XCIsXG4gICAgXCJ0Y2Zfdmxhbl9hY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pIGNoZWNrIHRvIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKCkgaW4gaW5jbHVkZS9saW51eC9pZl92bGFuLmggdG8gZW5zdXJlIHN1ZmZpY2llbnQgaGVhZCBkYXRhIGlzIHB1bGxlZCBiZWZvcmUgaW5zZXJ0aW5nIGFuIGlubmVyIFZMQU4gdGFnLiBUaGlzIHJlYWNoYWJsZSBoZWxwZXIgaXMgZXhlcmNpc2VkIGJ5IGNvcmUgbmV0d29ya2luZyBwYXRocyBzdWNoIGFzIDgwMi4xUSByZWNlaXZlIHByb2Nlc3NpbmcgKHZsYW5fZG9fcmVjZWl2ZSksIFZMQU4gcHVzaCBvcGVyYXRpb25zIChza2Jfdmxhbl9wdXNoKSwgYW5kIFRDIGFjdGlvbnMgKHRjZl9tcGxzX2FjdCwgdGNmX3ZsYW5fYWN0KS4gRnV6emluZyBpcyB3b3J0aHdoaWxlIHRvIHRlc3QgYmVoYXZpb3Igd2l0aCBub24tbGluZWFyLCBmcmFnbWVudGVkLCBvciBtYWxmb3JtZWQgcGFja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMzZkY2FhMWQ5NjdlYzJiNzJlYjQzNjVmNGJmODMzOTYzYjhkYmY0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTE6MTA6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oXG5pbmRleCAyMGNjMTZlYTRlNWFiLi40ODQ2MDMyYmY0ZmZjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pZl92bGFuLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oXG5AQCAtMzY1LDYgKzM2NSw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjb25zdCB1OCBtZXRhX2xlbiA9IG1hY19sZW4gXHUwMDNlIEVUSF9UTEVOID8gc2tiX21ldGFkYXRhX2xlbihza2IpIDogMDtcbiBcdHN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aDtcbiBcbitcdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgbWV0YV9sZW4gKyBWTEFOX0hMRU4pIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEwOjIzLjQ2MDU0MzEwMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ5MTY3MjczMjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFZMQU4gSW5zZXJ0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgc2VlIGEgYGRpZmZgIHByZXNlbnRlZCwgYW5kIHRoZSBmaWxlIGJlaW5nIG1vZGlmaWVkIGlzIGBpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaGAuIFNlZW1zIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIFZMQU4gdGFnZ2luZywgc3BlY2lmaWNhbGx5IGFuIGlubmVyIHRhZyBpbnNlcnRpb24sIGp1ZGdpbmcgYnkgdGhlIGZ1bmN0aW9uIG5hbWUsIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AuXG5cblRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNoZWNrLCBgaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbikpKSByZXR1cm4gLUVJTlZBTDtgIGJlZm9yZSBhdHRlbXB0aW5nIGFueSBtZW1vcnkgbWFuaXB1bGF0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIGdvb2QgYWRkaXRpb24uIEl0IGxvb2tzIGxpa2UgaXQncyBndWFyZGluZyBhZ2FpbnN0IGEgcG90ZW50aWFsIGJ1ZmZlciB1bmRlcnJ1bi4gIGBwc2tiX21heV9wdWxsYCBwcm9iYWJseSB2ZXJpZmllcyBpZiB3ZSBjYW4gc2FmZWx5IHJlYWQgYG1hY19sZW5gIGJ5dGVzIGZyb20gdGhlIHBhY2tldCBkYXRhIHdpdGhvdXQgY2F1c2luZyBhIGtlcm5lbCBwYW5pYyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gIEVzc2VudGlhbGx5LCBpdCBjb25maXJtcyB0aGUgcHJlc2VuY2Ugb2YgZW5vdWdoIGRhdGEgaW4gdGhlIFNLQiB0byBwcm9jZWVkIHdpdGggVkxBTiBoZWFkZXIgaW5zZXJ0aW9uLiBBIGZhaWx1cmUgaGVyZSwgcmVwcmVzZW50ZWQgYnkgYC1FSU5WQUxgLCBsaWtlbHkgaW5kaWNhdGVzIGFuIGludmFsaWQgcGFja2V0IGZvcm1hdCBvciBjb3JydXB0ZWQgZGF0YS4gVGhpcyBpcyBhIHZlcnkgY29tbW9uIHNjZW5hcmlvIGZvciBidWZmZXIgY2hlY2tzLlxuXG5JJ2xsIG5lZWQgdG8gY29uZmlybSwgYnV0IHRoaXMgY2hlY2sgbGlrZWx5IHByZXZlbnRzIGEgY3Jhc2ggaWYgdGhlcmUncyBpbnN1ZmZpY2llbnQgZGF0YSB0byB3b3JrIHdpdGguIEkgc2hvdWxkIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBlc3BlY2lhbGx5IHRoZSBjYWxscyB0byBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGhvdyB0aGUgYG1hY19sZW5gIHZhbHVlIGlzIGRlcml2ZWQuIEl0IGlzIHByb2JhYmx5IHRoZSBvdXRlciBNQUMgaGVhZGVyIGxlbmd0aC4gTG9va2luZyBjbG9zZXIgYXQgbGluZSAzNjUsIEkgd2lsbCBpbnNwZWN0IGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgYW5kIGl0cyBjYWxsZXJzIHRvIGVuc3VyZSB0aGlzIG5ldyB2YWxpZGF0aW9uIGlzIHN1ZmZpY2llbnQgYW5kIHRoYXQgbm8gcG90ZW50aWFsIGlzc3VlcyBhcmUgaW50cm9kdWNlZCBlbHNld2hlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MDIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxMToxMi42Mjc4MTkwMjhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzNTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNTU6XFx0ICpcXG4gMzU2OlxcdCAqIEluc2VydHMgdGhlIFZMQU4gdGFnIGludG8gQHNrYiBhcyBwYXJ0IG9mIHRoZSBwYXlsb2FkIGF0IG9mZnNldCBtYWNfbGVuXFxuIDM1NzpcXHQgKiBEb2VzIG5vdCBjaGFuZ2Ugc2tiLVxcdTAwM2Vwcm90b2NvbCBzbyB0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGR1cmluZyByZWNlaXZlLlxcbiAzNTg6XFx0ICpcXG4gMzU5OlxcdCAqIFJldHVybnM6IGVycm9yIGlmIHNrYl9jb3dfaGVhZCBmYWlscy5cXG4gMzYwOlxcdCAqL1xcbiAzNjE6XFx0c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gMzYyOlxcdFxcdFxcdFxcdFxcdFxcdCAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSxcXG4gMzYzOlxcdFxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IG1hY19sZW4pXFxuIDM2NDpcXHR7XFxuIDM2NTpcXHRcXHRjb25zdCB1OCBtZXRhX2xlbiA9IG1hY19sZW4gXFx1MDAzZSBFVEhfVExFTiA/IHNrYl9tZXRhZGF0YV9sZW4oc2tiKSA6IDA7XFxuIDM2NjpcXHRcXHRzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZldGg7XFxuIDM2NzpcXHRcXG4gMzY4OlxcdFxcdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pKSlcXG4gMzY5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzNzA6XFx0XFxuIDM3MTpcXHRcXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgbWV0YV9sZW4gKyBWTEFOX0hMRU4pIFxcdTAwM2MgMClcXG4gMzcyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzNzM6XFx0XFxuIDM3NDpcXHRcXHRza2JfcHVzaChza2IsIFZMQU5fSExFTik7XFxuIDM3NTpcXHRcXG4gMzc2OlxcdFxcdC8qIE1vdmUgdGhlIG1hYyBoZWFkZXIgc2FucyBwcm90byB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXcgaGVhZGVyLiAqL1xcbiAzNzc6XFx0XFx0aWYgKGxpa2VseShtYWNfbGVuIFxcdTAwM2UgRVRIX1RMRU4pKVxcbiAzNzg6XFx0XFx0XFx0c2tiX3Bvc3RwdXNoX2RhdGFfbW92ZShza2IsIFZMQU5fSExFTiwgbWFjX2xlbiAtIEVUSF9UTEVOKTtcXG4gMzc5OlxcdFxcdGlmIChza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikpXFxuIDM4MDpcXHRcXHRcXHRza2ItXFx1MDAzZW1hY19oZWFkZXIgLT0gVkxBTl9ITEVOO1xcbiAzODE6XFx0XFxuIDM4MjpcXHRcXHR2ZXRoID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKShza2ItXFx1MDAzZWRhdGEgKyBtYWNfbGVuIC0gRVRIX0hMRU4pO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHQvKiBmaXJzdCwgdGhlIGV0aGVybmV0IHR5cGUgKi9cXG4gMzg1OlxcdFxcdGlmIChsaWtlbHkobWFjX2xlbiBcXHUwMDNlPSBFVEhfVExFTikpIHtcXG4gMzg2OlxcdFxcdFxcdC8qIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gc2hvdWxkIGFscmVhZHkgYmUgcG9wdWxhdGVkLCBhbmRcXG4gMzg3OlxcdFxcdFxcdCAqIHNrYi1cXHUwMDNlZGF0YSBoYXMgc3BhY2UgZm9yIGhfdmxhbl9wcm90b1xcbiAzODg6XFx0XFx0XFx0ICovXFxuIDM4OTpcXHRcXHRcXHR2ZXRoLVxcdTAwM2VoX3ZsYW5fcHJvdG8gPSB2bGFuX3Byb3RvO1xcbiAzOTA6XFx0XFx0fSBlbHNlIHtcXG4gMzkxOlxcdFxcdFxcdC8qIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gc2hvdWxkIG5vdCBiZSBwb3B1bGF0ZWQsIGFuZFxcbiAzOTI6XFx0XFx0XFx0ICogc2tiLVxcdTAwM2VkYXRhIGhhcyBubyBzcGFjZSBmb3IgaF92bGFuX3Byb3RvXFxuIDM5MzpcXHRcXHRcXHQgKi9cXG4gMzk0OlxcdFxcdFxcdHZldGgtXFx1MDAzZWhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gPSBza2ItXFx1MDAzZXByb3RvY29sO1xcbiAzOTU6XFx0XFx0fVxcbiAzOTY6XFx0XFxuIDM5NzpcXHRcXHQvKiBub3csIHRoZSBUQ0kgKi9cXG4gMzk4OlxcdFxcdHZldGgtXFx1MDAzZWhfdmxhbl9UQ0kgPSBodG9ucyh2bGFuX3RjaSk7XFxuIDM5OTpcXHRcXG4gNDAwOlxcdFxcdHJldHVybiAwO1xcbiA0MDE6XFx0fVxcbiA0MDI6XFx0XFxuIDQwMzpcXHQvKipcXG4gNDA0OlxcdCAqIF9fdmxhbl9pbnNlcnRfdGFnIC0gcmVndWxhciBWTEFOIHRhZyBpbnNlcnRpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTE6MTIuNjI3OTA4MTc5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzA3MzU1Mjc3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgVkxBTiBJbnNlcnRpb24gaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGV2ZXJ5IHBsYWNlIGluIHRoZSBrZXJuZWwgdGhhdCBjYWxscyBgX192bGFuX2luc2VydF9pbm5lcl90YWdgLiBUaGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIFZMQU4gdGFnZ2luZywgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIHVzYWdlIGlzIGNyaXRpY2FsIGZvciBzZXZlcmFsIGRlYnVnZ2luZyBzY2VuYXJpb3MsIHBlcmZvcm1hbmNlIGFuYWx5c2lzLCBvciBwb3RlbnRpYWxseSBzZWN1cml0eSBhdWRpdHMuIEnigJlsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggdG8gZmluZCBhbGwgdGhlIGluc3RhbmNlcyBvZiB0aGlzIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZC4gSSBjb3VsZCB1c2UgYGdyZXBgIChvciBpdHMgbW9yZSBlZmZpY2llbnQgZXF1aXZhbGVudHMpIG9uIHRoZSBzb3VyY2UgdHJlZSwgYnV0IGEgbW9yZSBzdXJnaWNhbCBhcHByb2FjaCBtaWdodCBiZSBiZXR0ZXIgdG8gZWxpbWluYXRlIGZhbHNlIHBvc2l0aXZlcywgZGVwZW5kaW5nIG9uIHRoZSB0b29sY2hhaW4gY2FwYWJpbGl0aWVzIEkgaGF2ZS4gSXMgdGhlcmUgYSB3YXkgdG8gbGV2ZXJhZ2Ugc3ltYm9sIGluZGV4aW5nIG9yIGNyb3NzLXJlZmVyZW5jaW5nIGNhcGFiaWxpdGllcyBvZiBteSBJREUgb3IgYnVpbGQgZW52aXJvbm1lbnQ/IFRoYXQgd291bGQgYmUgaWRlYWwuIEkgbmVlZCB0byBiZSBzdXJlIEknbSBjYXB0dXJpbmcgYWxsIGluZGlyZWN0IGNhbGxzIHRvbywgd2hpY2ggbWVhbnMgSSBzaG91bGQgbG9vayBmb3IgZnVuY3Rpb24gcG9pbnRlcnMgb3IgbWFjcm9zIHRoYXQgbWlnaHQgZXhwYW5kIHRvIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24uIEFmdGVyIEkgaGF2ZSB0aGUgbGlzdCwgSSBzaG91bGQgZ28gdGhyb3VnaCBlYWNoIGxvY2F0aW9uIHdpdGggYSBkaXNjZXJuaW5nIGV5ZS4gVW5kZXJzdGFuZGluZyBob3cgdGhlIGRhdGEgZmxvd3MgaW50byBhbmQgb3V0IG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtJ3MgYmVoYXZpb3IuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MzUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjExOjE1LjcwMTQ2Mzc0NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODkxNzc3MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTMzOT1zdGF0aWMgaW5saW5lIGJvb2wgdmxhbl9od19vZmZsb2FkX2NhcGFibGUobmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0zNDktLyoqXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6MzUwOiAqIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnIC0gaW5uZXIgVkxBTiB0YWcgaW5zZXJ0aW5nXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzUxLSAqIEBza2I6IHNrYnVmZiB0byB0YWdcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM2MC0gKi9cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDozNjE6c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0zNjItXFx0XFx0XFx0XFx0XFx0ICBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5fdGNpLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg9NDE0PXN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfdGFnKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MTYte1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQxNzpcXHRyZXR1cm4gX192bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCB2bGFuX3Byb3RvLCB2bGFuX3RjaSwgRVRIX0hMRU4pO1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQxOC19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD00Mzc9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00NDMtXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDQ0OlxcdGVyciA9IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHNrYiwgdmxhbl9wcm90bywgdmxhbl90Y2ksIG1hY19sZW4pO1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQ0NS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X21wbHMuYz01Mz1UQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX21wbHNfYWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X21wbHMuYy05MC1cXHRcXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkge1xcbm5ldC9zY2hlZC9hY3RfbXBscy5jOjkxOlxcdFxcdFxcdGlmIChfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHNrYi1cXHUwMDNldmxhbl9wcm90byxcXG5uZXQvc2NoZWQvYWN0X21wbHMuYy05Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgc2tiX3ZsYW5fdGFnX2dldChza2IpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxMToxNy41OTMyNDYxMzZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTcwMzA1MTU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVkxBTiBUYWcgSW5zZXJ0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgaGllcmFyY2h5IGZvciB0aGVzZSBWTEFOIHRhZyBpbnNlcnRpb24gZnVuY3Rpb25zLiBJdCBsb29rcyBsaWtlIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBhbmQgSSdtIGludGVyZXN0ZWQgaW4gd2hlcmUgaXQncyBiZWluZyB1c2VkLiBCYXNlZCBvbiB3aGF0IEkndmUgc2VlbiwgaXQncyBjYWxsZWQgYnkgYSBmZXcgb3RoZXIgZnVuY3Rpb25zLiBGaXJzdCwgdGhlcmUncyBgX192bGFuX2luc2VydF90YWdgIGFuZCB0aGVuIGB2bGFuX2luc2VydF9pbm5lcl90YWdgLCBib3RoIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvaWZfdmxhbi5oYC4gVGhhdCBtYWtlcyBzZW5zZSwgdGhvc2UgYXJlIHRoZSBjb3JlIFZMQU4gc3RydWN0dXJlcy4gVGhlIHRoaXJkIGNhbGwsIGFuZCB0aGlzIGlzIGludGVyZXN0aW5nLCBjb21lcyBmcm9tIGB0Y2ZfbXBsc19hY3RgIGluIGBuZXQvc2NoZWQvYWN0X21wbHMuY2AuIFRoYXQncyBpbXBseWluZyBzb21lIHNvcnQgb2YgaW50ZXJhY3Rpb24gd2l0aCBNUExTIHRyYWZmaWMgY29udHJvbC4gTm93IEkgbmVlZCB0byBjaGVjayB3aGVyZSBgX192bGFuX2luc2VydF90YWdgIGFuZCBgdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCBhcmUgY2FsbGVkIHRvIGZ1bGx5IG1hcCB0aGUgZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhdCBhbGwgdGhlc2UgcGxhY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzM4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjExOjMzLjI5NjMwMDg1NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjk3ODkzNjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdmxhbl9pbnNlcnRfdGFnXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL3FlZGkvcWVkaV9tYWluLmM9NjY3PXN0YXRpYyBpbnQgcWVkaV9sbDJfcngodm9pZCAqY29va2llLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgYXJnMSwgdTMyIGFyZzIpXFxuLS1cXG5kcml2ZXJzL3Njc2kvcWVkaS9xZWRpX21haW4uYy03MjItXFx0aWYgKHdvcmstXFx1MDAzZXZsYW5faWQpXFxuZHJpdmVycy9zY3NpL3FlZGkvcWVkaV9tYWluLmM6NzIzOlxcdFxcdF9fdmxhbl9pbnNlcnRfdGFnKHdvcmstXFx1MDAzZXNrYiwgaHRvbnMoRVRIX1BfODAyMVEpLCB3b3JrLVxcdTAwM2V2bGFuX2lkKTtcXG5kcml2ZXJzL3Njc2kvcWVkaS9xZWRpX21haW4uYy03MjQtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD0zNjE9c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQxMy0gKi9cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDo0MTQ6c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MTUtXFx0XFx0XFx0XFx0ICAgIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl90Y2kpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz02NDg5PWludCBza2Jfdmxhbl9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl90Y2kpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02NTAwLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjY1MDE6XFx0XFx0ZXJyID0gX192bGFuX2luc2VydF90YWcoc2tiLCBza2ItXFx1MDAzZXZsYW5fcHJvdG8sXFxubmV0L2NvcmUvc2tidWZmLmMtNjUwMi1cXHRcXHRcXHRcXHRcXHRza2Jfdmxhbl90YWdfZ2V0KHNrYikpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxMTozNi41OTQyMDE4MzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MzExNzE0MjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBWTEFOIFRhZ2dpbmcgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBWTEFOIHRhZ2dpbmcgaW1wbGVtZW50YXRpb24gaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIE15IGluaXRpYWwgdGhvdWdodCBpcyBmb2N1c2VkIG9uIGBza2Jfdmxhbl9wdXNoYC4gVGhpcyBpcyB0aGUgY29yZSBmdW5jdGlvbiwgc28gaXQgbWFrZXMgc2Vuc2UgdG8gc3RhcnQgaGVyZS4gVGhlIGNhbGwgdG8gYF9fdmxhbl9pbnNlcnRfdGFnYCBpcyB0aGUgY3J1Y2lhbCBuZXh0IHN0ZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZyBhdCBhIGxvdyBsZXZlbDsgd2hhdCBhcmUgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgbWVtb3J5IG1hbmlwdWxhdGlvbiBvY2N1cnJpbmc/IE15IGh5cG90aGVzaXMgaXMgdGhhdCBgX192bGFuX2luc2VydF90YWdgIHByb3ZpZGVzIHRoZSBiYXNlIG1lY2hhbmljcyBhbmQgYHNrYl92bGFuX3B1c2hgIHByb3ZpZGVzIGEgdG9wLWxldmVsIGludGVyZmFjZS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgZGVlcGVyIGludG8gYHZsYW5faW5zZXJ0X2lubmVyX3RhZ2AuIEknbSBnb2luZyB0byBsb29rIGF0IHRoYXQgbmV4dC4gSSBleHBlY3QgaXQncyBnb2luZyB0byBiZSByZWxhdGVkIHRvIHRoZSBvdXRlciBWTEFOIHRhZyBhbmQgaG93IHRoYXQncyBoYW5kbGVkLiBJcyBpdCBhIHNlcGFyYXRlIGZ1bmN0aW9uIGJlY2F1c2Ugb2YgaGFyZHdhcmUgb2ZmbG9hZCBpbXBsaWNhdGlvbnM/IE1heWJlIHRoaXMgaXMgd2hlcmUgZGlmZmVyZW50IFZMQU4gY29uZmlndXJhdGlvbnMgYXJlIGhhbmRsZWQsIGlubmVyIGFuZCBvdXRlciwgd2hpY2ggd291bGQgZXhwbGFpbiB0aGUgbmVlZCBmb3IgdHdvIHNpbWlsYXItbG9va2luZyBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMzYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxMTo0MS45MDU5MTg5MzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzE2NjMyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmxhbl9pbnNlcnRfaW5uZXJfdGFnXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9pZl92bGFuLmg9MzM5PXN0YXRpYyBpbmxpbmUgYm9vbCB2bGFuX2h3X29mZmxvYWRfY2FwYWJsZShuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyxcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM2MC0gKi9cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDozNjE6c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0zNjItXFx0XFx0XFx0XFx0XFx0ICBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5fdGNpLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg9NDE0PXN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfdGFnKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MTYte1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQxNzpcXHRyZXR1cm4gX192bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCB2bGFuX3Byb3RvLCB2bGFuX3RjaSwgRVRIX0hMRU4pO1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQxOC19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MzYtICovXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDM3OnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnZsYW5faW5zZXJ0X2lubmVyX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQzOC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgX19iZTE2IHZsYW5fcHJvdG8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00NDMtXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDQ0OlxcdGVyciA9IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHNrYiwgdmxhbl9wcm90bywgdmxhbl90Y2ksIG1hY19sZW4pO1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQ0NS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD00Njg9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdmxhbl9pbnNlcnRfdGFnKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00NzAte1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQ3MTpcXHRyZXR1cm4gdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHNrYiwgdmxhbl9wcm90bywgdmxhbl90Y2ksIEVUSF9ITEVOKTtcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00NzItfVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jPTEwPWJvb2wgdmxhbl9kb19yZWNlaXZlKHN0cnVjdCBza19idWZmICoqc2ticClcXG4tLVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYy01MS1cXHRcXHRza2JfcHVzaChza2IsIG9mZnNldCk7XFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjUyOlxcdFxcdHNrYiA9ICpza2JwID0gdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHNrYiwgc2tiLVxcdTAwM2V2bGFuX3Byb3RvLFxcbm5ldC84MDIxcS92bGFuX2NvcmUuYy01My1cXHRcXHRcXHRcXHRcXHRcXHQgICAgc2tiLVxcdTAwM2V2bGFuX3RjaSwgc2tiLVxcdTAwM2VtYWNfbGVuKTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfbXBscy5jPTUzPVRDX0lORElSRUNUX1NDT1BFIGludCB0Y2ZfbXBsc19hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTkwLVxcdFxcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XFxubmV0L3NjaGVkL2FjdF9tcGxzLmM6OTE6XFx0XFx0XFx0aWYgKF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHNrYiwgc2tiLVxcdTAwM2V2bGFuX3Byb3RvLFxcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTkyLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBza2Jfdmxhbl90YWdfZ2V0KHNrYiksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjExOjQ0LjA3NzU5MjA5OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTU1MTA3NzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBgdmxhbl9pbnNlcnRfdGFnYCoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYSBzcGVjaWZpYyBmdW5jdGlvbiwgYHZsYW5faW5zZXJ0X3RhZ2AuIEl0J3Mgd29ydGggZGlnZ2luZyBpbnRvLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBjdXJyZW50IGNvbnRleHQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiBpcyBiZWhhdmluZyBhcyBleHBlY3RlZCwgcGFydGljdWxhcmx5IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBWTEFOIHRhZ2dpbmcuIEdpdmVuIG15IGV4cGVydGlzZSwgSeKAmWxsIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaXQuIEkgd2FudCB0byBxdWlja2x5IGV2YWx1YXRlIHRoaXMsIHRvIGVuc3VyZSBubyBoaWRkZW4gaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjgwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTE6NDUuNjMyNzAzNzU0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU5ODM5Mzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZsYW5faW5zZXJ0X3RhZ1xcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvc2NzaS9xZWRpL3FlZGlfbWFpbi5jPTY2Nz1zdGF0aWMgaW50IHFlZGlfbGwyX3J4KHZvaWQgKmNvb2tpZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGFyZzEsIHUzMiBhcmcyKVxcbi0tXFxuZHJpdmVycy9zY3NpL3FlZGkvcWVkaV9tYWluLmMtNzIyLVxcdGlmICh3b3JrLVxcdTAwM2V2bGFuX2lkKVxcbmRyaXZlcnMvc2NzaS9xZWRpL3FlZGlfbWFpbi5jOjcyMzpcXHRcXHRfX3ZsYW5faW5zZXJ0X3RhZyh3b3JrLVxcdTAwM2Vza2IsIGh0b25zKEVUSF9QXzgwMjFRKSwgd29yay1cXHUwMDNldmxhbl9pZCk7XFxuZHJpdmVycy9zY3NpL3FlZGkvcWVkaV9tYWluLmMtNzI0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg9MzYxPXN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MTMtICovXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDE0OnN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfdGFnKHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDE1LVxcdFxcdFxcdFxcdCAgICBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5fdGNpKVxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg9NDM3PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnZsYW5faW5zZXJ0X2lubmVyX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDY3LSAqL1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQ2ODpzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp2bGFuX2luc2VydF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00NjktXFx0XFx0XFx0XFx0XFx0ICAgICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSlcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTQ4OD1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp2bGFuX2luc2VydF90YWdfc2V0X3Byb3RvKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00OTEte1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQ5MjpcXHRza2IgPSB2bGFuX2luc2VydF90YWcoc2tiLCB2bGFuX3Byb3RvLCB2bGFuX3RjaSk7XFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDkzLVxcdGlmIChza2IpXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYz0zMzc9c3RhdGljIHZvaWQgYmF0YWR2X2JsYV9zZW5kX2NsYWltKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICptYWMsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYy00MjgtXFx0aWYgKHZpZCBcXHUwMDI2IEJBVEFEVl9WTEFOX0hBU19UQUcpIHtcXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYzo0Mjk6XFx0XFx0c2tiID0gdmxhbl9pbnNlcnRfdGFnKHNrYiwgaHRvbnMoRVRIX1BfODAyMVEpLFxcbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jLTQzMC1cXHRcXHRcXHRcXHQgICAgICB2aWQgXFx1MDAyNiBWTEFOX1ZJRF9NQVNLKTtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jPTExOTk9YmF0YWR2X2RhdF9hcnBfY3JlYXRlX3JlcGx5KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIF9fYmUzMiBpcF9zcmMsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy0xMjEyLVxcdGlmICh2aWQgXFx1MDAyNiBCQVRBRFZfVkxBTl9IQVNfVEFHKVxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jOjEyMTM6XFx0XFx0c2tiID0gdmxhbl9pbnNlcnRfdGFnKHNrYiwgaHRvbnMoRVRIX1BfODAyMVEpLFxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTEyMTQtXFx0XFx0XFx0XFx0ICAgICAgdmlkIFxcdTAwMjYgVkxBTl9WSURfTUFTSyk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz02NDg5PWludCBza2Jfdmxhbl9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl90Y2kpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02NTAwLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjY1MDE6XFx0XFx0ZXJyID0gX192bGFuX2luc2VydF90YWcoc2tiLCBza2ItXFx1MDAzZXZsYW5fcHJvdG8sXFxubmV0L2NvcmUvc2tidWZmLmMtNjUwMi1cXHRcXHRcXHRcXHRcXHRza2Jfdmxhbl90YWdfZ2V0KHNrYikpO1xcbi0tXFxubmV0L2RzYS90YWdfODAyMXEuYz00NjQ9c3RydWN0IHNrX2J1ZmYgKmRzYV84MDIxcV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5uZXQvZHNhL3RhZ184MDIxcS5jLTQ2Ny1cXHQvKiBza2ItXFx1MDAzZWRhdGEgcG9pbnRzIGF0IHRoZSBNQUMgaGVhZGVyLCB3aGljaCBpcyBmaW5lXFxubmV0L2RzYS90YWdfODAyMXEuYzo0Njg6XFx0ICogZm9yIHZsYW5faW5zZXJ0X3RhZygpLlxcbm5ldC9kc2EvdGFnXzgwMjFxLmMtNDY5LVxcdCAqL1xcbm5ldC9kc2EvdGFnXzgwMjFxLmM6NDcwOlxcdHJldHVybiB2bGFuX2luc2VydF90YWcoc2tiLCBodG9ucyh0cGlkKSwgdGNpKTtcXG5uZXQvZHNhL3RhZ184MDIxcS5jLTQ3MS19XFxuLS1cXG5uZXQvZHNhL3RhZ19zamExMTA1LmM9MjQxPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqc2phMTEwNV9wdmlkX3RhZ19jb250cm9sX3BrdChzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxcbi0tXFxubmV0L2RzYS90YWdfc2phMTEwNS5jLTI2Mi1cXG5uZXQvZHNhL3RhZ19zamExMTA1LmM6MjYzOlxcdHJldHVybiB2bGFuX2luc2VydF90YWcoc2tiLCB4bWl0X3RwaWQsIChwY3AgXFx1MDAzY1xcdTAwM2MgVkxBTl9QUklPX1NISUZUKSB8XFxubmV0L2RzYS90YWdfc2phMTEwNS5jLTI2NC1cXHRcXHRcXHQgICAgICAgU0pBMTEwNV9ERUZBVUxUX1ZMQU4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxMTo0Ny43OTI1NTAxNjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODU5NjI4MzA5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgRGVlcCBpbnRvIFZMQU5zIGFuZCBNUExTKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUgbmV0d29ya2luZyBzdGFjayBhZ2Fpbiwgc3BlY2lmaWNhbGx5IGF0IGhvdyBWTEFOcyBhbmQgTVBMUyBpbnRlcmFjdC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgbmV0LzgwMjFxL3ZsYW5fY29yZS5jYCwgbGluZSA1MiAtIGB2bGFuX2RvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipza2JwKWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBWTEFOcyBhcmUgaGFuZGxlZCBkdXJpbmcgcGFja2V0IHJlY2VwdGlvbi4gVGhhdCdzIGEga2V5IHN0YXJ0aW5nIHBvaW50LlxuXG5UaGVuLCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGZ1bmN0aW9uIGBza2Jfdmxhbl9wdXNoYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBWTEFOIHRhZyBpdHNlbGYgaXMgYWN0dWFsbHkgKnB1c2hlZCogb250byB0aGUgYHNrX2J1ZmZgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIHRoaXMgZnVuY3Rpb24gaW4gcGFydGljdWxhci5cblxuTXkgbWluZCB0aGVuIHdhbmRlcnMgdG8gYHRjZl9tcGxzX2FjdGAgaW4gYG5ldC9zY2hlZC9hY3RfbXBscy5jYC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3RhY2ssIHRoaXMgbXVzdCBiZSB3aGVyZSBNUExTIGFjdGlvbnMgYXJlIGltcGxlbWVudGVkLiBUaGUgaW50ZXJhY3Rpb24gaGVyZSB3aXRoIFZMQU5zIGlzIHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBzZWUgKndoZXJlKiBgc2tiX3ZsYW5fcHVzaGAgaXMgY2FsbGVkLiBUaGF0IHdpbGwgcHJvdmlkZSBhIGdvb2QgaW5kaWNhdGlvbiBvZiB3aGVyZSBpdCBpcyB1c2VkIGFuZCBob3cuIEZpbmRpbmcgdGhvc2UgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgYW4gdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gVkxBTiBhbmQgTVBMUy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB2bGFuIHRhZ2dpbmcgaXMgYWRkZWQgdG8gYW4gc2tiLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODI0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjExOjU2LjM4ODgzNzExM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4NTExODI2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2Jfdmxhbl9wdXNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmg9NDMxMj1pbnQgc2tiX3ZsYW5fcG9wKHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDMxMzppbnQgc2tiX3ZsYW5fcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5fdGNpKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQzMTQtaW50IHNrYl9ldGhfcG9wKHN0cnVjdCBza19idWZmICpza2IpO1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTIyOTEtICpcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MjI5MjogKiBsb25nIGJwZl9za2Jfdmxhbl9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl90Y2kpXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTIyOTMtICogXFx0RGVzY3JpcHRpb25cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC02MDIwLVxcdEZOKGdldF9jZ3JvdXBfY2xhc3NpZCwgMTcsICMjY3R4KVxcdFxcdFxcXFxcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NjAyMTpcXHRGTihza2Jfdmxhbl9wdXNoLCAxOCwgIyNjdHgpXFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC02MDIyLVxcdEZOKHNrYl92bGFuX3BvcCwgMTksICMjY3R4KVxcdFxcdFxcdFxcXFxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTMyOTA9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2V0X2hhc2hfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0zMjk3LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjMyOTg6QlBGX0NBTExfMyhicGZfc2tiX3ZsYW5fcHVzaCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBfX2JlMTYsIHZsYW5fcHJvdG8sXFxubmV0L2NvcmUvZmlsdGVyLmMtMzI5OS1cXHQgICB1MTYsIHZsYW5fdGNpKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzMwNy1cXHRicGZfcHVzaF9tYWNfcmNzdW0oc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYzozMzA4OlxcdHJldCA9IHNrYl92bGFuX3B1c2goc2tiLCB2bGFuX3Byb3RvLCB2bGFuX3RjaSk7XFxubmV0L2NvcmUvZmlsdGVyLmMtMzMwOS1cXHRicGZfcHVsbF9tYWNfcmNzdW0oc2tiKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTMzMTUtXFxubmV0L2NvcmUvZmlsdGVyLmM6MzMxNjpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2Jfdmxhbl9wdXNoX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjMzMTc6XFx0LmZ1bmMgICAgICAgICAgID0gYnBmX3NrYl92bGFuX3B1c2gsXFxubmV0L2NvcmUvZmlsdGVyLmMtMzMxOC1cXHQuZ3BsX29ubHkgICAgICAgPSBmYWxzZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTgzODg9Ym9vbCBicGZfaGVscGVyX2NoYW5nZXNfcGt0X2RhdGEoZW51bSBicGZfZnVuY19pZCBmdW5jX2lkKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODQwNy1cXHRjYXNlIEJQRl9GVU5DX3NrYl92bGFuX3BvcDpcXG5uZXQvY29yZS9maWx0ZXIuYzo4NDA4OlxcdGNhc2UgQlBGX0ZVTkNfc2tiX3ZsYW5fcHVzaDpcXG5uZXQvY29yZS9maWx0ZXIuYy04NDA5LVxcdGNhc2UgQlBGX0ZVTkNfc3RvcmVfaGRyX29wdDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg2MjI9dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODY0Ni1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9nZXRfY2dyb3VwX2NsYXNzaWRfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmM6ODY0NzpcXHRjYXNlIEJQRl9GVU5DX3NrYl92bGFuX3B1c2g6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODY0ODpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za2Jfdmxhbl9wdXNoX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg2NDktXFx0Y2FzZSBCUEZfRlVOQ19za2Jfdmxhbl9wb3A6XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz02NDg0PUVYUE9SVF9TWU1CT0woc2tiX3ZsYW5fcG9wKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY0ODgtICovXFxubmV0L2NvcmUvc2tidWZmLmM6NjQ4OTppbnQgc2tiX3ZsYW5fcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5fdGNpKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY0OTAte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNjQ5NS1cXHRcXHRpZiAoV0FSTl9PTkNFKG9mZnNldCxcXG5uZXQvY29yZS9za2J1ZmYuYzo2NDk2OlxcdFxcdFxcdCAgICAgIFxcXCJza2Jfdmxhbl9wdXNoIGdvdCBza2Igd2l0aCBza2ItXFx1MDAzZWRhdGEgbm90IGF0IG1hYyBoZWFkZXIgKG9mZnNldCAlZClcXFxcblxcXCIsXFxubmV0L2NvcmUvc2tidWZmLmMtNjQ5Ny1cXHRcXHRcXHQgICAgICBvZmZzZXQpKSB7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02NTEzLX1cXG5uZXQvY29yZS9za2J1ZmYuYzo2NTE0OkVYUE9SVF9TWU1CT0woc2tiX3ZsYW5fcHVzaCk7XFxubmV0L2NvcmUvc2tidWZmLmMtNjUxNS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTQ2OD1zdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy01MTctXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NTE4Oi8qIFNpbWlsYXIgdG8gc2tiX3ZsYW5fcHVzaC4gKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy01MTktc3RhdGljIGludCBuZl9mbG93X3ZsYW5fcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgcHJvdG8sIHUxNiBpZCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM9MTk3PXN0YXRpYyBpbnQgcHVzaF92bGFuKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0yMDctXFx0fVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6MjA4OlxcdGVyciA9IHNrYl92bGFuX3B1c2goc2tiLCB2bGFuLVxcdTAwM2V2bGFuX3RwaWQsXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0yMDktXFx0XFx0XFx0ICAgIG50b2hzKHZsYW4tXFx1MDAzZXZsYW5fdGNpKSBcXHUwMDI2IH5WTEFOX0NGSV9NQVNLKTtcXG4tLVxcbm5ldC9zY2hlZC9hY3Rfdmxhbi5jPTIyPVRDX0lORElSRUNUX1NDT1BFIGludCB0Y2Zfdmxhbl9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9zY2hlZC9hY3Rfdmxhbi5jLTQ4LVxcdGNhc2UgVENBX1ZMQU5fQUNUX1BVU0g6XFxubmV0L3NjaGVkL2FjdF92bGFuLmM6NDk6XFx0XFx0ZXJyID0gc2tiX3ZsYW5fcHVzaChza2IsIHAtXFx1MDAzZXRjZnZfcHVzaF9wcm90bywgcC1cXHUwMDNldGNmdl9wdXNoX3ZpZCB8XFxubmV0L3NjaGVkL2FjdF92bGFuLmMtNTAtXFx0XFx0XFx0XFx0ICAgIChwLVxcdTAwM2V0Y2Z2X3B1c2hfcHJpbyBcXHUwMDNjXFx1MDAzYyBWTEFOX1BSSU9fU0hJRlQpKTtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xNTI3PXVuaW9uIGJwZl9hdHRyIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0yMjkxLSAqXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjIyOTI6ICogbG9uZyBicGZfc2tiX3ZsYW5fcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5fdGNpKVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0yMjkzLSAqIFxcdERlc2NyaXB0aW9uXFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNjAyMC1cXHRGTihnZXRfY2dyb3VwX2NsYXNzaWQsIDE3LCAjI2N0eClcXHRcXHRcXFxcXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjYwMjE6XFx0Rk4oc2tiX3ZsYW5fcHVzaCwgMTgsICMjY3R4KVxcdFxcdFxcdFxcXFxcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNjAyMi1cXHRGTihza2Jfdmxhbl9wb3AsIDE5LCAjI2N0eClcXHRcXHRcXHRcXFxcXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfY29udGV4dF90ZXN0X3J1bi5jPTQ3MT12b2lkIHRlc3RfeGRwX2NvbnRleHRfdHVudGFwKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfY29udGV4dF90ZXN0X3J1bi5jLTUzOC1cXHQvKiBUZXN0cyBmb3IgQlBGIGhlbHBlcnMgd2hpY2ggdG91Y2ggaGVhZHJvb20gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfY29udGV4dF90ZXN0X3J1bi5jOjUzOTpcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiaGVscGVyX3NrYl92bGFuX3B1c2hfcG9wXFxcIikpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2NvbnRleHRfdGVzdF9ydW4uYy01NDAtXFx0XFx0dGVzdF90dW50YXAoc2tlbC1cXHUwMDNlcHJvZ3MuaW5nX3hkcCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfY29udGV4dF90ZXN0X3J1bi5jOjU0MTpcXHRcXHRcXHQgICAgc2tlbC1cXHUwMDNlcHJvZ3MuaGVscGVyX3NrYl92bGFuX3B1c2hfcG9wLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9jb250ZXh0X3Rlc3RfcnVuLmMtNTQyLVxcdFxcdFxcdCAgICBOVUxMLCAvKiB0YyBwcmlvIDIgKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF9tZXRhLmM9NTY3PVNFQyhcXFwidGNcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF9tZXRhLmM6NTY4OmludCBoZWxwZXJfc2tiX3ZsYW5fcHVzaF9wb3Aoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF9tZXRhLmMtNTY5LXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF9tZXRhLmMtNTcxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF9tZXRhLmM6NTcyOlxcdC8qIGJwZl9za2Jfdmxhbl9wdXNoIGFzc3VtZXMgSFcgb2ZmbG9hZCBmb3IgcHJpbWFyeSBWTEFOIHRhZy4gT25seVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF9tZXRhLmMtNTczLVxcdCAqIHNlY29uZGFyeSB0YWcgcHVzaCB0cmlnZ2VycyBhbiBhY3R1YWwgTUFDIGhlYWRlciBtb2RpZmljYXRpb24uXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYy01NzQtXFx0ICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYzo1NzU6XFx0ZXJyID0gYnBmX3NrYl92bGFuX3B1c2goY3R4LCAwLCA0Mik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYy01NzYtXFx0aWYgKGVycilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfbWV0YS5jLTU3Ny1cXHRcXHRnb3RvIG91dDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfbWV0YS5jOjU3ODpcXHRlcnIgPSBicGZfc2tiX3ZsYW5fcHVzaChjdHgsIDAsIDIwNyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYy01NzktXFx0aWYgKGVycilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF92bGFuLmM9MjU4PWludCB0Y192bGFuX3B1c2goc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF92bGFuLmMtMjU5LXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jOjI2MDpcXHRicGZfc2tiX3ZsYW5fcHVzaChjdHgsIGJwZl9odG9ucyhFVEhfUF84MDIxUSksIFRFU1RWTEFOKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfdmxhbi5jLTI2MS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X3ZlcmlmaWVyLmM9MTg2PXN0YXRpYyB2b2lkIGJwZl9maWxsX2xkX2Fic192bGFuX3B1c2hfcG9wKHN0cnVjdCBicGZfdGVzdCAqc2VsZilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X3ZlcmlmaWVyLmMtMjA1LVxcdFxcdGluc25baSsrXSA9IEJQRl9SQVdfSU5TTihCUEZfSk1QIHwgQlBGX0NBTEwsIDAsIDAsIDAsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfdmVyaWZpZXIuYzoyMDY6XFx0XFx0XFx0XFx0XFx0IEJQRl9GVU5DX3NrYl92bGFuX3B1c2gpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X3ZlcmlmaWVyLmMtMjA3LVxcdFxcdGluc25baV0gPSBCUEZfSk1QX0lNTShCUEZfSk5FLCBCUEZfUkVHXzAsIDAsIGxlbiAtIGkgLSAzKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9jYWxscy5jLTk1NS1cXHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMywgMiksXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL2NhbGxzLmM6OTU2OlxcdEJQRl9SQVdfSU5TTihCUEZfSk1QIHwgQlBGX0NBTEwsIDAsIDAsIDAsIEJQRl9GVU5DX3NrYl92bGFuX3B1c2gpLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9jYWxscy5jLTk1Ny1cXHRCUEZfRVhJVF9JTlNOKCksXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvbGRfYWJzLmMtODMtXFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzMsIDIpLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9sZF9hYnMuYzo4NDpcXHRCUEZfUkFXX0lOU04oQlBGX0pNUCB8IEJQRl9DQUxMLCAwLCAwLCAwLCBCUEZfRlVOQ19za2Jfdmxhbl9wdXNoKSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvbGRfYWJzLmMtODUtXFx0QlBGX01PVjY0X1JFRyhCUEZfUkVHXzYsIEJQRl9SRUdfNyksXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvbGRfYWJzLmMtMjYwLVxcdFxcdEJQRl9SQVdfSU5TTihCUEZfSk1QIHwgQlBGX0NBTEwsIDAsIDAsIDAsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL2xkX2Ficy5jOjI2MTpcXHRcXHRcXHQgICAgIEJQRl9GVU5DX3NrYl92bGFuX3B1c2gpLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9sZF9hYnMuYy0yNjItXFx0XFx0QlBGX01PVjY0X1JFRyhCUEZfUkVHXzYsIEJQRl9SRUdfNyksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjExOjU4LjA3Mzk2NTM1NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4OTg2Nzk5MjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFZMQU4gSGFuZGxpbmcgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBWTEFOIHRhZ2dpbmcgYW5kIHVudGFnZ2luZyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHNvbWUga2V5IGZ1bmN0aW9ucy4gSXQgc2VlbXMgbGlrZSBgc2tiX3ZsYW5fcHVzaGAgaXMgdGhlIGNvcmUgZnVuY3Rpb24gZm9yICphZGRpbmcqIGEgVkxBTiB0YWcgdG8gYW4gU0tCIChTb2NrZXQgQnVmZmVyKSwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGl0J3MgYmVpbmcgdXNlZC4gUmlnaHQgYXdheSwgaXQncyBjbGVhciB0aGF0IGl0J3MgaW1wb3J0YW50IGZvciBhIGZldyBjcml0aWNhbCBhcmVhcy4gRmlyc3RseSwgYGJwZl9za2Jfdmxhbl9wdXNoYCBpcyBhIEJQRiBoZWxwZXIuIFRoYXTigJlzIGludGVyZXN0aW5nLCBtZWFuaW5nIGl0J3MgYWNjZXNzaWJsZSBmcm9tIHdpdGhpbiBUcmFmZmljIENvbnRyb2wgKHRjKSBCUEYgcHJvZ3JhbXMhIFRoaXMgaW1wbGllcyB0aGF0IHRoZSBWTEFOIHRhZ2dpbmcgbG9naWMgY2FuIGJlIGR5bmFtaWNhbGx5IGNvbnRyb2xsZWQgYW5kIG1vZGlmaWVkIGF0IHJ1bnRpbWUsIGEgcG93ZXJmdWwgY2FwYWJpbGl0eS5cblxuQmV5b25kIEJQRiwgaXQncyBhbHNvIGJlaW5nIHV0aWxpemVkIGJ5IE9wZW4gdlN3aXRjaCB3aXRoIGBwdXNoX3ZsYW5gLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBPVlMsIGJlaW5nIGEgc29mdHdhcmUgc3dpdGNoLCBuZWVkcyB0byBoYW5kbGUgVkxBTnMgZXh0ZW5zaXZlbHkuIEFuZCBmaW5hbGx5LCB0aGUgYHRjIGFjdF92bGFuYCBhY3Rpb24gdXNlcyBpdCB0aHJvdWdoIGB0Y2Zfdmxhbl9hY3RgLiBTbywgaXQncyBpbnRlZ3JhbCB0byB0aGUgdXNlci1zcGFjZSB0cmFmZmljIGNvbnRyb2wgZnVuY3Rpb25hbGl0eS5cblxuTm93LCBvbiB0aGUgKnJlY2VpdmluZyogc2lkZSwgSSBzZWUgYHZsYW5fZG9fcmVjZWl2ZWAgaXMgcGxheWluZyBhIHJvbGUuIFRoaXMgaXMgdHJpZ2dlcmVkIHdpdGhpbiB0aGUgc3RhbmRhcmQgbmV0d29ya2luZyByZWNlaXZlIHBhdGgsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9jb3JlL2Rldi5jYCBpbiB0aGUgYF9fbmV0aWZfcmVjZWl2ZV9za2JfY29yZWAgZnVuY3Rpb24uIFRoYXQncyBhdCB0aGUgaGVhcnQgb2YgaG93IGluY29taW5nIHBhY2tldHMgYXJlIHByb2Nlc3NlZC4gVGhpcyB3YXJyYW50cyBhIG1vcmUgZGV0YWlsZWQgbG9vay4gSSdsbCBuZWVkIHRvIHZlcmlmeSBleGFjdGx5IGhvdyBgdmxhbl9kb19yZWNlaXZlYCBmdW5jdGlvbnMgdG8gc2VlIGhvdyBWTEFOcyBhcmUgaGFuZGxlZCBhbmQgdW50YWdnZWQgZnJvbSBpbmNvbWluZyBwYWNrZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc0NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxMjowNy4wNjA3NjcwNTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjE2MDc0MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmxhbl9kb19yZWNlaXZlXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9pZl92bGFuLmg9MjExPXZsYW5fZGV2X2dldF9lZ3Jlc3NfcW9zX21hc2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHNrcHJpbylcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTIzMy1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDoyMzQ6ZXh0ZXJuIGJvb2wgdmxhbl9kb19yZWNlaXZlKHN0cnVjdCBza19idWZmICoqc2tiKTtcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0yMzUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD0yODU9c3RhdGljIGlubGluZSB1MTYgdmxhbl9kZXZfZ2V0X2VncmVzc19xb3NfbWFzayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMjkwLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjI5MTpzdGF0aWMgaW5saW5lIGJvb2wgdmxhbl9kb19yZWNlaXZlKHN0cnVjdCBza19idWZmICoqc2tiKVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTI5Mi17XFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtOS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6MTA6Ym9vbCB2bGFuX2RvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipza2JwKVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYy0xMS17XFxuLS1cXG5uZXQvY29yZS9kZXYuYz02MDM0PXN0YXRpYyBpbnQgX19uZXRpZl9yZWNlaXZlX3NrYl9jb3JlKHN0cnVjdCBza19idWZmICoqcHNrYiwgYm9vbCBwZm1lbWFsbG9jLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjEzOC1cXHRcXHR9XFxubmV0L2NvcmUvZGV2LmM6NjEzOTpcXHRcXHRpZiAodmxhbl9kb19yZWNlaXZlKFxcdTAwMjZza2IpKVxcbm5ldC9jb3JlL2Rldi5jLTYxNDAtXFx0XFx0XFx0Z290byBhbm90aGVyX3JvdW5kO1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjE2OS1cXHRcXHRpZiAoc2tiX3ZsYW5fdGFnX2dldF9pZChza2IpKSB7XFxubmV0L2NvcmUvZGV2LmM6NjE3MDpcXHRcXHRcXHQvKiBWbGFuIGlkIGlzIG5vbiAwIGFuZCB2bGFuX2RvX3JlY2VpdmUoKSBhYm92ZSBjb3VsZG4ndFxcbm5ldC9jb3JlL2Rldi5jLTYxNzEtXFx0XFx0XFx0ICogZmluZCB2bGFuIGRldmljZS5cXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTYxNzUtXFx0XFx0XFx0LyogT3V0ZXIgaGVhZGVyIGlzIDgwMi4xUCB3aXRoIHZsYW4gMCwgaW5uZXIgaGVhZGVyIGlzXFxubmV0L2NvcmUvZGV2LmM6NjE3NjpcXHRcXHRcXHQgKiA4MDIuMVEgb3IgODAyLjFBRCBhbmQgdmxhbl9kb19yZWNlaXZlKCkgYWJvdmUgY291bGRcXG5uZXQvY29yZS9kZXYuYy02MTc3LVxcdFxcdFxcdCAqIG5vdCBmaW5kIHZsYW4gZGV2IGZvciB2bGFuIGlkIDAuXFxuLS1cXG5uZXQvY29yZS9kZXYuYy02MTgyLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbm5ldC9jb3JlL2Rldi5jOjYxODM6XFx0XFx0XFx0aWYgKHZsYW5fZG9fcmVjZWl2ZShcXHUwMDI2c2tiKSlcXG5uZXQvY29yZS9kZXYuYy02MTg0LVxcdFxcdFxcdFxcdC8qIEFmdGVyIHN0cmlwcGluZyBvZmYgODAyLjFQIGhlYWRlciB3aXRoIHZsYW4gMFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjE5Ny1cXHRcXHQvKiBOb3RlOiB3ZSBtaWdodCBpbiB0aGUgZnV0dXJlIHVzZSBwcmlvIGJpdHNcXG5uZXQvY29yZS9kZXYuYzo2MTk4OlxcdFxcdCAqIGFuZCBzZXQgc2tiLVxcdTAwM2Vwcmlvcml0eSBsaWtlIGluIHZsYW5fZG9fcmVjZWl2ZSgpXFxubmV0L2NvcmUvZGV2LmMtNjE5OS1cXHRcXHQgKiBGb3IgdGhlIHRpbWUgYmVpbmcsIGp1c3QgaWdub3JlIFByaW9yaXR5IENvZGUgUG9pbnRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTI6MDkuMTIyMzgwMDI0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQxNTI1OTY0NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcmVxdWVzdCwgdGhpbmtpbmcgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEaXZpbmcgaW50byB0aGUgVkxBTiBSZWNlaXZlIFBhdGgqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBpcyB0byB1bmRlcnN0YW5kIHRoZSBgdmxhbl9kb19yZWNlaXZlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC84MDIxcS92bGFuX2NvcmUuY2AgZmlsZS4gVGhpcyB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggVkxBTiAoVmlydHVhbCBMQU4pIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIGFuZCBtb3JlIHByZWNpc2VseSwgdGhlIGNvcmUgVkxBTiBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGhhcHBlbmluZyBkdXJpbmcgdGhlIHJlY2VpdmUgcGF0aC4gSSdtIGFzc3VtaW5nIHRoYXQgaXQgaXMgd2hhdCBJIHRoaW5rIGl0IGlzLCBob3dldmVyIEknbGwgbG9vayBpbnRvIGl0LiBUaGlzIG1lYW5zIEknbSBwcm9iYWJseSBsb29raW5nIGF0IGEgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGluY29taW5nIEV0aGVybmV0IGZyYW1lcyB0aGF0IGFyZSB0YWdnZWQgd2l0aCBhIFZMQU4gSUQuIEl0J3MgdGhlIHBvaW50IGluIHRoZSBzdGFjayB3aGVyZSB0aGUga2VybmVsIG5lZWRzIHRvIGRlY2lkZTogZG9lcyB0aGlzIGZyYW1lIGJlbG9uZyB0byB0aGUgY3VycmVudCBob3N0LCBvciBzaG91bGQgaXQgYmUgZm9yd2FyZGVkPyBXaGF0IG5lZWRzIHRvIGJlIGRvbmUgd2l0aCBpdD8gSXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgYXMgcGFydCBvZiB0aGUgcmVjZWl2ZSBwYXRoLCBhcyBvcHBvc2VkIHRvIHRoZSB0cmFuc21pdCBwYXRoPyBUaGUgZmlsZSBwYXRoIGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYW5kIEkga25vdyBleGFjdGx5IHdoZXJlIHRvIGxvb2sgZm9yIHRoaXMgZnVuY3Rpb24uIEtub3dpbmcgdGhpcyBmaWxlIGFuZCBmdW5jdGlvbiB3aWxsIGxldCBtZSB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlkZW50aWZpZXMsIGhhbmRsZXMgYW5kIGZpbHRlcnMgZnJhbWVzLCB3aGljaCB3aWxsIGdpdmUgbWUgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSB3aG9sZSBpbXBsZW1lbnRhdGlvbi4gSSB3aWxsIHN0YXJ0IGJ5IGZpZ3VyaW5nIG91dCB0aGUgY2FsbGluZyBjb252ZW50aW9ucyBhbmQgdGhlbiBsb29rIGZvciB0aGUgY3JpdGljYWwgcGFydHMgb2YgdGhlIHJlY2VpdmUgcHJvY2Vzcywgc3VjaCBhcyBmcmFtZSB2YWxpZGF0aW9uLCBWTEFOIElEIGV4dHJhY3Rpb24sIGFuZCBmaWx0ZXJpbmcgYmFzZWQgb24gcmVnaXN0ZXJlZCBWTEFOIGludGVyZmFjZXMuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGxpa2UgdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSBhbmQgYW55IFZMQU4tc3BlY2lmaWMgbWV0YWRhdGEgaXQgbWlnaHQgY2FycnkuIFVsdGltYXRlbHksIEknbSBleHBlY3RpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBlZmZpY2llbnRseSBzdGVlcnMgaW5jb21pbmcsIHRhZ2dlZCBFdGhlcm5ldCBmcmFtZXMgdG8gdGhlIGNvcnJlY3QgbmV0d29yayBpbnRlcmZhY2VzLCBhcyBpdCdzIGEgY3JpdGljYWwgY29tcG9uZW50IHRvIGFueSBuZXR3b3JrIGltcGxlbWVudGF0aW9uIHVzaW5nIFZMQU5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAyMywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEyOjEzLjI3NDk3ODcyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC84MDIxcS92bGFuX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICAgMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuICAgNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfdmxhbi5oXFx1MDAzZVxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldHBvbGwuaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvZ3JvLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXFwidmxhbi5oXFxcIlxcbiAgIDk6XFx0XFxuICAxMDpcXHRib29sIHZsYW5fZG9fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqKnNrYnApXFxuICAxMTpcXHR7XFxuICAxMjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnNrYnA7XFxuICAxMzpcXHRcXHRfX2JlMTYgdmxhbl9wcm90byA9IHNrYi1cXHUwMDNldmxhbl9wcm90bztcXG4gIDE0OlxcdFxcdHUxNiB2bGFuX2lkID0gc2tiX3ZsYW5fdGFnX2dldF9pZChza2IpO1xcbiAgMTU6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKnZsYW5fZGV2O1xcbiAgMTY6XFx0XFx0c3RydWN0IHZsYW5fcGNwdV9zdGF0cyAqcnhfc3RhdHM7XFxuICAxNzpcXHRcXG4gIDE4OlxcdFxcdHZsYW5fZGV2ID0gdmxhbl9maW5kX2Rldihza2ItXFx1MDAzZWRldiwgdmxhbl9wcm90bywgdmxhbl9pZCk7XFxuICAxOTpcXHRcXHRpZiAoIXZsYW5fZGV2KVxcbiAgMjA6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgMjE6XFx0XFxuICAyMjpcXHRcXHRza2IgPSAqc2ticCA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpO1xcbiAgMjM6XFx0XFx0aWYgKHVubGlrZWx5KCFza2IpKVxcbiAgMjQ6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgMjU6XFx0XFxuICAyNjpcXHRcXHRpZiAodW5saWtlbHkoISh2bGFuX2Rldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApKSkge1xcbiAgMjc6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICAyODpcXHRcXHRcXHQqc2ticCA9IE5VTEw7XFxuICAyOTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuICAzMDpcXHRcXHR9XFxuICAzMTpcXHRcXG4gIDMyOlxcdFxcdHNrYi1cXHUwMDNlZGV2ID0gdmxhbl9kZXY7XFxuICAzMzpcXHRcXHRpZiAodW5saWtlbHkoc2tiLVxcdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfT1RIRVJIT1NUKSkge1xcbiAgMzQ6XFx0XFx0XFx0LyogT3VyIGxvd2VyIGxheWVyIHRoaW5rcyB0aGlzIGlzIG5vdCBsb2NhbCwgbGV0J3MgbWFrZSBzdXJlLlxcbiAgMzU6XFx0XFx0XFx0ICogVGhpcyBhbGxvd3MgdGhlIFZMQU4gdG8gaGF2ZSBhIGRpZmZlcmVudCBNQUMgdGhhbiB0aGVcXG4gIDM2OlxcdFxcdFxcdCAqIHVuZGVybHlpbmcgZGV2aWNlLCBhbmQgc3RpbGwgcm91dGUgY29ycmVjdGx5LiAqL1xcbiAgMzc6XFx0XFx0XFx0aWYgKGV0aGVyX2FkZHJfZXF1YWxfNjRiaXRzKGV0aF9oZHIoc2tiKS1cXHUwMDNlaF9kZXN0LCB2bGFuX2Rldi1cXHUwMDNlZGV2X2FkZHIpKVxcbiAgMzg6XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2Vwa3RfdHlwZSA9IFBBQ0tFVF9IT1NUO1xcbiAgMzk6XFx0XFx0fVxcbiAgNDA6XFx0XFxuICA0MTpcXHRcXHRpZiAoISh2bGFuX2Rldl9wcml2KHZsYW5fZGV2KS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBWTEFOX0ZMQUdfUkVPUkRFUl9IRFIpIFxcdTAwMjZcXHUwMDI2XFxuICA0MjpcXHRcXHQgICAgIW5ldGlmX2lzX21hY3ZsYW5fcG9ydCh2bGFuX2RldikgXFx1MDAyNlxcdTAwMjZcXG4gIDQzOlxcdFxcdCAgICAhbmV0aWZfaXNfYnJpZGdlX3BvcnQodmxhbl9kZXYpKSB7XFxuICA0NDpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gc2tiLVxcdTAwM2VkYXRhIC0gc2tiX21hY19oZWFkZXIoc2tiKTtcXG4gIDQ1OlxcdFxcbiAgNDY6XFx0XFx0XFx0LypcXG4gIDQ3OlxcdFxcdFxcdCAqIHZsYW5faW5zZXJ0X3RhZyBleHBlY3Qgc2tiLVxcdTAwM2VkYXRhIHBvaW50aW5nIHRvIG1hYyBoZWFkZXIuXFxuICA0ODpcXHRcXHRcXHQgKiBTbyBjaGFuZ2Ugc2tiLVxcdTAwM2VkYXRhIGJlZm9yZSBjYWxsaW5nIGl0IGFuZCBjaGFuZ2UgYmFjayB0b1xcbiAgNDk6XFx0XFx0XFx0ICogb3JpZ2luYWwgcG9zaXRpb24gbGF0ZXJcXG4gIDUwOlxcdFxcdFxcdCAqL1xcbiAgNTE6XFx0XFx0XFx0c2tiX3B1c2goc2tiLCBvZmZzZXQpO1xcbiAgNTI6XFx0XFx0XFx0c2tiID0gKnNrYnAgPSB2bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCBza2ItXFx1MDAzZXZsYW5fcHJvdG8sXFxuICA1MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgc2tiLVxcdTAwM2V2bGFuX3RjaSwgc2tiLVxcdTAwM2VtYWNfbGVuKTtcXG4gIDU0OlxcdFxcdFxcdGlmICghc2tiKVxcbiAgNTU6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgNTY6XFx0XFx0XFx0c2tiX3B1bGwoc2tiLCBvZmZzZXQgKyBWTEFOX0hMRU4pO1xcbiAgNTc6XFx0XFx0XFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcXG4gIDU4OlxcdFxcdH1cXG4gIDU5OlxcdFxcbiAgNjA6XFx0XFx0c2tiLVxcdTAwM2Vwcmlvcml0eSA9IHZsYW5fZ2V0X2luZ3Jlc3NfcHJpb3JpdHkodmxhbl9kZXYsIHNrYi1cXHUwMDNldmxhbl90Y2kpO1xcbiAgNjE6XFx0XFx0X192bGFuX2h3YWNjZWxfY2xlYXJfdGFnKHNrYik7XFxuICA2MjpcXHRcXG4gIDYzOlxcdFxcdHJ4X3N0YXRzID0gdGhpc19jcHVfcHRyKHZsYW5fZGV2X3ByaXYodmxhbl9kZXYpLVxcdTAwM2V2bGFuX3BjcHVfc3RhdHMpO1xcbiAgNjQ6XFx0XFxuICA2NTpcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZyeF9zdGF0cy1cXHUwMDNlc3luY3ApO1xcbiAgNjY6XFx0XFx0dTY0X3N0YXRzX2luYyhcXHUwMDI2cnhfc3RhdHMtXFx1MDAzZXJ4X3BhY2tldHMpO1xcbiAgNjc6XFx0XFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2cnhfc3RhdHMtXFx1MDAzZXJ4X2J5dGVzLCBza2ItXFx1MDAzZWxlbik7XFxuICA2ODpcXHRcXHRpZiAoc2tiLVxcdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfTVVMVElDQVNUKVxcbiAgNjk6XFx0XFx0XFx0dTY0X3N0YXRzX2luYyhcXHUwMDI2cnhfc3RhdHMtXFx1MDAzZXJ4X211bHRpY2FzdCk7XFxuICA3MDpcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2cnhfc3RhdHMtXFx1MDAzZXN5bmNwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTI6MTMuMjc1MDY0ODVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDA2MjYzMjI0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZMQU4gVGFnIEluc2VydGlvbiBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIGB2bGFuX2luc2VydF9pbm5lcl90YWdgLiBJdCdzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBpbmxpbmUgZnVuY3Rpb246IHRha2VzIGEgc29ja2V0IGJ1ZmZlciAoYHNrYmApLCB0aGUgVkxBTiBwcm90b2NvbCwgdGhlIFZMQU4gVENJLCBhbmQgdGhlIE1BQyBsZW5ndGguIEl0cyBqb2IgaXMgdG8gaW5zZXJ0IGFuIGlubmVyIFZMQU4gdGFnLCBhbmQgaWYgaXQgZmFpbHMsIGl0IGZyZWVzIHRoZSBgc2tiYCBhbmQgcmV0dXJucyBgTlVMTGAuICBFc3NlbnRpYWxseSwgaXQncyBqdXN0IGEgd3JhcHBlciBhcm91bmQgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQgaXMgaW4gdGhlIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgZnVuY3Rpb24sIHdoaWNoLCBmcm9tIHRoZSBwYXRjaCwgc2VlbXMgdG8gaGF2ZSBoYWQgYSBjcnVjaWFsIGFkZGl0aW9uLiBJdCBub3cgaW5jbHVkZXMgYSBjaGVjayB1c2luZyBgcHNrYl9tYXlfcHVsbGAgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuIEl0J3MgdXNpbmcgYHBza2JfbWF5X3B1bGwoc2tiLCBtYWNfbGVuKWAuIFJpZ2h0LiBTbywgaXQncyB2ZXJpZnlpbmcgdGhhdCB0aGVyZSdzIGVub3VnaCBkYXRhIGF2YWlsYWJsZSBpbiB0aGUgc29ja2V0IGJ1ZmZlciAoYHNrYmApIHRvIHB1bGwgdGhlIGBtYWNfbGVuYCBieXRlcy4gSWYgaXQgZmFpbHMsIHJldHVybmluZyBgLUVJTlZBTGAuIFRoaXMgaXMgYSBjbGFzc2ljIGJ1ZmZlciBvdmVycmVhZCBwcm90ZWN0aW9uLiBUaGlzIGlzIGdvb2QuXG5cblNvLCB0aGlzIHBhdGNoIHByb2JhYmx5IGZpeGVkIGEgdnVsbmVyYWJpbGl0eSB3aGVyZSB0aGUgZnVuY3Rpb24gY291bGQgcG90ZW50aWFsbHkgcmVhZCBiZXlvbmQgdGhlIGFsbG9jYXRlZCBidWZmZXIgaWYgdGhlIGBtYWNfbGVuYCB3YXMgbGFyZ2VyIHRoYW4gdGhlIGF2YWlsYWJsZSBkYXRhIGluIHRoZSBzb2NrZXQgYnVmZmVyLCB3aGljaCBjb3VsZCBoYXZlIGxlZCB0byBhIGNyYXNoIG9yLCB3b3JzZSwgYSBzZWN1cml0eSBleHBsb2l0LiBJIHNob3VsZCBsb29rIGludG8gdGhlIGNvbW1pdCBtZXNzYWdlIG9yIHJlbGF0ZWQgYnVnIHJlcG9ydHMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCwgYnV0IHRoaXMgYWRkZWQgY2hlY2sgaXMgZGVmaW5pdGVseSBhIHNvbGlkIGRlZmVuc2l2ZSBtZWFzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY2OSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEyOjE3LjMzNzcwMDg2OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1NDAzMjk0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwc2tiX21heV9wdWxsXFxcXChza2IsIG1hY19sZW5cXFxcKVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD0zNjE9c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM2Ny1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDozNjg6XFx0aWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbikpKVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM2OS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTI6MTkuNDkxNzQ4MjkxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3Mzc3MTQ1MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGFuZCBpdHMgQ2FsbGVycyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgdGhlIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgZnVuY3Rpb24sIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBpbnNlcnRpbmcgYSBWTEFOIHRhZyBpbnRvIGEgc2tiLiBUaGUgY29yZSBvZiBpdCBpbnZvbHZlcyBwdXNoaW5nIHNwYWNlIG9udG8gdGhlIHNrYiwgc2hpZnRpbmcgZXhpc3RpbmcgTUFDIGhlYWRlciBkYXRhLCBhbmQgdGhlbiBwb3B1bGF0aW5nIHRoZSBuZXcgVkxBTiBoZWFkZXIuIFRoZSBjcnVjaWFsIHBhcnQgaGVyZSBpcyB0aGUgYWNjZXNzIHRvIGBza2ItXHUwMDNlZGF0YSArIG1hY19sZW4gLSBFVEhfSExFTmAuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBwb3RlbnRpYWwgZm9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIGRhdGEgY29ycnVwdGlvbi4gSWYgYG1hY19sZW5gIGlzIGdyZWF0ZXIgdGhhbiB0aGUgYW1vdW50IG9mIGRhdGEgY3VycmVudGx5IGluIHRoZSBza2IncyBsaW5lYXIgYnVmZmVyLCB0aGF0IGFjY2VzcyB3b3VsZCBiZSBpbGxlZ2FsLiBGb3J0dW5hdGVseSwgaXQgbG9va3MgbGlrZSBgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pYCBpcyB0aGVyZSBhcyBhIGd1YXJkLiBJdCBhcHBlYXJzIHRoYXQgaXQgZW5zdXJlcyB0aGF0IHRoZSBza2IgaGFzIHRoZSBuZWNlc3NhcnkgZGF0YSB0byBwZXJmb3JtIHRoZXNlIG9wZXJhdGlvbnMgc2FmZWx5LlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKnVzZWQqLiBJdCBsb29rcyBsaWtlIGl0IGlzIHJlYWNoYWJsZSBmcm9tIGEgZmV3IGtleSBhcmVhcyB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIEkgc2VlIGNvbm5lY3Rpb25zIGZyb20gYHRjZl9tcGxzX2FjdGAgKGxpa2VseSBmb3IgTVBMUyBvdmVyIFZMQU4pLCBgc2tiX3ZsYW5fcHVzaGAgKHRoZSBnZW5lcmFsIFZMQU4gcHVzaCBmdW5jdGlvbiksIHdoaWNoIGlzIGFsc28gYWNjZXNzZWQgYnkgQlBGLCBPVlMsIGFuZCBUQywgYHZsYW5fZG9fcmVjZWl2ZWAgKGltcG9ydGFudCBmb3IgVkxBTiBwYWNrZXQgcmVjZXB0aW9uKSwgYW5kIGV2ZW4gQkFUTUFOLWFkdi5cblxuQSBxdWljayBub3RlIHRvIG15c2VsZjogYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCBpcyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9pZl92bGFuLmhgLiBUaGlzIGlzIGltcG9ydGFudCBmb3Igc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMsIGJlY2F1c2UgSSdsbCBuZWVkIHRvIGZvY3VzIG9uIHRoZSBjYWxsZXIgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSwgYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMuIEluIHRoaXMgY2FzZSwgYHNrYl92bGFuX3B1c2hgIGlzIGEgZ29vZCBjYW5kaWRhdGUsIGFzIGl0IHNlZW1zIHRvIGJlIHRoZSBtYWluIGNhbGxlciBvZiBgX192bGFuX2luc2VydF9pbm5lcl90YWdgLiBJJ2xsIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ5NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxMjozNi44Njg4OTY0NzFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzMDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY0ODgsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY0ODg6XFx0ICovXFxuNjQ4OTpcXHRpbnQgc2tiX3ZsYW5fcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5fdGNpKVxcbjY0OTA6XFx0e1xcbjY0OTE6XFx0XFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHtcXG42NDkyOlxcdFxcdFxcdGludCBvZmZzZXQgPSBza2ItXFx1MDAzZWRhdGEgLSBza2JfbWFjX2hlYWRlcihza2IpO1xcbjY0OTM6XFx0XFx0XFx0aW50IGVycjtcXG42NDk0OlxcdFxcbjY0OTU6XFx0XFx0XFx0aWYgKFdBUk5fT05DRShvZmZzZXQsXFxuNjQ5NjpcXHRcXHRcXHRcXHQgICAgICBcXFwic2tiX3ZsYW5fcHVzaCBnb3Qgc2tiIHdpdGggc2tiLVxcdTAwM2VkYXRhIG5vdCBhdCBtYWMgaGVhZGVyIChvZmZzZXQgJWQpXFxcXG5cXFwiLFxcbjY0OTc6XFx0XFx0XFx0XFx0ICAgICAgb2Zmc2V0KSkge1xcbjY0OTg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNjQ5OTpcXHRcXHRcXHR9XFxuNjUwMDpcXHRcXG42NTAxOlxcdFxcdFxcdGVyciA9IF9fdmxhbl9pbnNlcnRfdGFnKHNrYiwgc2tiLVxcdTAwM2V2bGFuX3Byb3RvLFxcbjY1MDI6XFx0XFx0XFx0XFx0XFx0XFx0c2tiX3ZsYW5fdGFnX2dldChza2IpKTtcXG42NTAzOlxcdFxcdFxcdGlmIChlcnIpXFxuNjUwNDpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjY1MDU6XFx0XFxuNjUwNjpcXHRcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gc2tiLVxcdTAwM2V2bGFuX3Byb3RvO1xcbjY1MDc6XFx0XFx0XFx0c2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciAtPSBWTEFOX0hMRU47XFxuNjUwODpcXHRcXG42NTA5OlxcdFxcdFxcdHNrYl9wb3N0cHVzaF9yY3N1bShza2IsIHNrYi1cXHUwMDNlZGF0YSArICgyICogRVRIX0FMRU4pLCBWTEFOX0hMRU4pO1xcbjY1MTA6XFx0XFx0fVxcbjY1MTE6XFx0XFx0X192bGFuX2h3YWNjZWxfcHV0X3RhZyhza2IsIHZsYW5fcHJvdG8sIHZsYW5fdGNpKTtcXG42NTEyOlxcdFxcdHJldHVybiAwO1xcbjY1MTM6XFx0fVxcbjY1MTQ6XFx0RVhQT1JUX1NZTUJPTChza2Jfdmxhbl9wdXNoKTtcXG42NTE1OlxcdFxcbjY1MTY6XFx0LyoqXFxuNjUxNzpcXHQgKiBza2JfZXRoX3BvcCgpIC0gRHJvcCB0aGUgRXRoZXJuZXQgaGVhZGVyIGF0IHRoZSBoZWFkIG9mIGEgcGFja2V0XFxuNjUxODpcXHQgKlxcbjY1MTk6XFx0ICogQHNrYjogU29ja2V0IGJ1ZmZlciB0byBtb2RpZnlcXG42NTIwOlxcdCAqXFxuNjUyMTpcXHQgKiBEcm9wIHRoZSBFdGhlcm5ldCBoZWFkZXIgb2YgQHNrYi5cXG42NTIyOlxcdCAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEyOjM2Ljg2OTE0MTg4MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDgwNDI3OTQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBPYnNlcnZhdGlvbnMgb24gVkxBTiBUYWcgSW5zZXJ0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IFZMQU4gdGFncyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHRoZSBpbnNlcnRpb24gcHJvY2Vzcy4gSW4gYHNrYl92bGFuX3B1c2hgLCBpdCdzIGNsZWFyIHRoYXQgYF9fdmxhbl9pbnNlcnRfdGFnYCBpcyB0aGUgZnVuY3Rpb24gYmVpbmcgY2FsbGVkLCBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhhdCBgX192bGFuX2luc2VydF90YWdgIGlzIGEgc2ltcGxlIHdyYXBwZXIgZm9yIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AuIEJlY2F1c2UgaXQncyBhbiBpbmxpbmUgZnVuY3Rpb24sIEknbSBwcmV0dHkgc3VyZSBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGdldHMgaW5saW5lZCBkaXJlY3RseSBpbnRvIGBza2Jfdmxhbl9wdXNoYCwgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC5cblxuTm93LCBsZXQncyBicm9hZGVuIHRoZSBzY29wZS4gSSdsbCB0YWtlIGEgbG9vayBhdCBgdmxhbl9kb19yZWNlaXZlYCBpbiBgbmV0LzgwMjFxL3ZsYW5fY29yZS5jYC4gQXMgZXhwZWN0ZWQsIHRoaXMgY2FsbHMgYHZsYW5faW5zZXJ0X2lubmVyX3RhZ2AsIGFuZCB0aGF0IGluIHR1cm4gY2FsbHMgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC4gQW5kIGp1c3QgbGlrZSBiZWZvcmUsIHRoYXQgZnVuY3Rpb24gaXMgaW5saW5lZCwgc28gaXQgYXBwZWFycyBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGlzIGlubGluZWQgaGVyZSBhcyB3ZWxsLlxuXG5GaW5hbGx5LCBJJ2xsIHNoaWZ0IGdlYXJzIHRvIGBuZXQvc2NoZWQvYWN0X21wbHMuY2AsIHRvIGludmVzdGlnYXRlIGhvdyBgYWN0X21wbHNgIGludGVyYWN0cyB3aXRoIFZMQU4gdGFnZ2luZy4gVGhlIGNvZGUgaW4gdGhlcmUgY2FsbHMgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCBhcyB3ZWxsLiBTZWVtcyBsaWtlIEkgc2hvdWxkIGluc3BlY3QgYXJvdW5kIGxpbmUgOTAgdG8gc2VlIGV4YWN0bHkgaG93IGl0IHdvcmtzLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbnRleHQgb2YgdGhlIGNvZGUgdG8gZmlndXJlIG91dCBwcmVjaXNlbHkgd2hhdCBpdCdzIGRvaW5nIHdpdGggdGhpcyBpbm5lciB0YWcgaW5zZXJ0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODM4NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEyOjQ3LjY3MzQyNDI3NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvYWN0X21wbHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXHRcXHRcXHRcXHQgc2tiLVxcdTAwM2VkZXYgXFx1MDAyNlxcdTAwMjYgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSKSlcXG4gIDgxOlxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gIDgyOlxcdFxcdFxcdGJyZWFrO1xcbiAgODM6XFx0XFx0Y2FzZSBUQ0FfTVBMU19BQ1RfUFVTSDpcXG4gIDg0OlxcdFxcdFxcdG5ld19sc2UgPSB0Y2ZfbXBsc19nZXRfbHNlKE5VTEwsIHAsICFldGhfcF9tcGxzKHNrYl9wcm90b2NvbChza2IsIHRydWUpKSk7XFxuICA4NTpcXHRcXHRcXHRpZiAoc2tiX21wbHNfcHVzaChza2IsIG5ld19sc2UsIHAtXFx1MDAzZXRjZm1fcHJvdG8sIG1hY19sZW4sXFxuICA4NjpcXHRcXHRcXHRcXHRcXHQgIHNrYi1cXHUwMDNlZGV2IFxcdTAwMjZcXHUwMDI2IHNrYi1cXHUwMDNlZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUikpXFxuICA4NzpcXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuICA4ODpcXHRcXHRcXHRicmVhaztcXG4gIDg5OlxcdFxcdGNhc2UgVENBX01QTFNfQUNUX01BQ19QVVNIOlxcbiAgOTA6XFx0XFx0XFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHtcXG4gIDkxOlxcdFxcdFxcdFxcdGlmIChfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHNrYi1cXHUwMDNldmxhbl9wcm90byxcXG4gIDkyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBza2Jfdmxhbl90YWdfZ2V0KHNrYiksXFxuICA5MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgRVRIX0hMRU4pIFxcdTAwM2MgMClcXG4gIDk0OlxcdFxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gIDk1OlxcdFxcbiAgOTY6XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IHNrYi1cXHUwMDNldmxhbl9wcm90bztcXG4gIDk3OlxcdFxcdFxcdFxcdF9fdmxhbl9od2FjY2VsX2NsZWFyX3RhZyhza2IpO1xcbiAgOTg6XFx0XFx0XFx0fVxcbiAgOTk6XFx0XFxuIDEwMDpcXHRcXHRcXHRuZXdfbHNlID0gdGNmX21wbHNfZ2V0X2xzZShOVUxMLCBwLCBtYWNfbGVuIHx8XFxuIDEwMTpcXHRcXHRcXHRcXHRcXHRcXHQgICAhZXRoX3BfbXBscyhza2ItXFx1MDAzZXByb3RvY29sKSk7XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdFxcdGlmIChza2JfbXBsc19wdXNoKHNrYiwgbmV3X2xzZSwgcC1cXHUwMDNldGNmbV9wcm90bywgMCwgZmFsc2UpKVxcbiAxMDQ6XFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbiAxMDU6XFx0XFx0XFx0YnJlYWs7XFxuIDEwNjpcXHRcXHRjYXNlIFRDQV9NUExTX0FDVF9NT0RJRlk6XFxuIDEwNzpcXHRcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLFxcbiAxMDg6XFx0XFx0XFx0XFx0XFx0ICAgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikgKyBNUExTX0hMRU4pKVxcbiAxMDk6XFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbiAxMTA6XFx0XFx0XFx0bmV3X2xzZSA9IHRjZl9tcGxzX2dldF9sc2UobXBsc19oZHIoc2tiKSwgcCwgZmFsc2UpO1xcbiAxMTE6XFx0XFx0XFx0aWYgKHNrYl9tcGxzX3VwZGF0ZV9sc2Uoc2tiLCBuZXdfbHNlKSlcXG4gMTEyOlxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gMTEzOlxcdFxcdFxcdGJyZWFrO1xcbiAxMTQ6XFx0XFx0Y2FzZSBUQ0FfTVBMU19BQ1RfREVDX1RUTDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTI6NDcuNjczNTIyNDU2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQyODIwNDgwNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFZMQU4gVGFnIEluc2VydGlvbiBpbiB0aGUgS2VybmVsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIGZvY3VzZWQgb24gaG93IFZMQU4gdGFncyBhcmUgaW5zZXJ0ZWQgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBJIHNlZSBgdGNmX21wbHNfYWN0YCBkaXJlY3RseSBjYWxscyBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIOKAkyB0aGF0J3MgdGhlIGNvcmUgZnVuY3Rpb24uIEknbSBub3RpbmcgdGhlIHBhcmFtZXRlcnM6IHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlciksIHRoZSBWTEFOIHByb3RvY29sLCB0aGUgdGFnIGl0c2VsZiwgYW5kIGBFVEhfSExFTmAsIHRoZSBFdGhlcm5ldCBoZWFkZXIgbGVuZ3RoLiBJIGFsc28gc2VlIHRoYXQgYHZsYW5fZG9fcmVjZWl2ZWAgaW4gYG5ldC84MDIxcS92bGFuX2NvcmUuY2AgdXRpbGl6ZXMgYHZsYW5faW5zZXJ0X2lubmVyX3RhZ2AsIGJ1dCB3aXRoIGEgcG90ZW50aWFsbHkgdmFyaWFibGUgYG1hY19sZW5gLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuXG5cbkluIGB2bGFuX2RvX3JlY2VpdmVgLCB0aGUgYG1hY19sZW5gIHBhcmFtZXRlciBpcyBhIGZsYWcgZm9yIHBvdGVudGlhbCBpc3N1ZXMuIFRoZSBjb2RlIGNoZWNrcyB3aXRoIGBwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbilgIGJlZm9yZSBwcm9jZWVkaW5nLiBJZiB0aGF0IHB1bGwgZmFpbHMsIG1lYW5pbmcgdGhlIHBhY2tldCBpc24ndCBiaWcgZW5vdWdoLCBgdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCByZXR1cm5zIE5VTEwsIGVmZmVjdGl2ZWx5IGZyZWVpbmcgdGhlIGBza2JgIGFuZCByZXR1cm5pbmcgZmFsc2UuIFRoYXQncyBhIGdvb2Qgc2FmZWd1YXJkLCBidXQgaXQgaGlnaGxpZ2h0cyB0aGUgZGVwZW5kZW5jeSBvbiBgbWFjX2xlbmAgYmVpbmcgdmFsaWQuXG5cbk5vdywgY29tcGFyZSB0aGF0IHRvIGBza2Jfdmxhbl9wdXNoYC4gVGhpcyBmdW5jdGlvbiBjYWxscyBgX192bGFuX2luc2VydF90YWdgLCB3aGljaCwgYXMgd2Ugc2F3IGVhcmxpZXIsIHVsdGltYXRlbHkgY2FsbHMgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCBidXQgYWx3YXlzIHVzZXMgYEVUSF9ITEVOYC4gSWYgYHBza2JfbWF5X3B1bGwoc2tiLCBFVEhfSExFTilgIGZhaWxzIGhlcmUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIC1FSU5WQUwuIFRoYXQncyBhbm90aGVyIHNhZmV0eSBtZWFzdXJlLCBidXQgdGhlIGRpZmZlcmVuY2UgaW4gaGFuZGxpbmcgYmV0d2VlbiB0aGVzZSB0d28gY2FzZXMgaXMgd29ydGggcG9uZGVyaW5nLlxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb25zLiBgc2tiX3ZsYW5fcHVzaGAgcmVzaWRlcyBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBJbXBvcnRhbnRseSwgdGhpcyBjb2RlIGlzIGFsd2F5cyBidWlsdCBpZiBgQ09ORklHX05FVGAgaXMgZW5hYmxlZC4gVGhhdCdzIGEgZnVuZGFtZW50YWwgcGllY2Ugb2YgZnVuY3Rpb25hbGl0eS4gRm9yIGB2bGFuX2RvX3JlY2VpdmVgLCBJIHNlZSBpdCBsaXZlcyBpbiBgbmV0LzgwMjFxL3ZsYW5fY29yZS5jYCwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBgTWFrZWZpbGVgIG9yIEtjb25maWcgZmlsZXMgd2l0aGluIHRoYXQgZGlyZWN0b3J5LiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb25zIGFmZmVjdCBpdHMgY29tcGlsYXRpb24sIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3MjYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxMjo1MS45NTU1NzM1ODZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODQyMjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZsYW5fY29yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvODAyMXFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0LzgwMjFxL01ha2VmaWxlLTQtI1xcbm5ldC84MDIxcS9NYWtlZmlsZTo1Om9iai0kKHN1YnN0IG0seSwkKENPTkZJR19WTEFOXzgwMjFRKSlcXHQrPSB2bGFuX2NvcmUub1xcbm5ldC84MDIxcS9NYWtlZmlsZS02LW9iai0kKENPTkZJR19WTEFOXzgwMjFRKVxcdFxcdCs9IDgwMjFxLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTI6NTIuMDAzNDIzNDgyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUwNjA1ODg1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqSW52ZXN0aWdhdGluZyBWTEFOIGFuZCBNUExTIEludGVyYWN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gaG93IFZMQU5zIGFuZCBNUExTIGFyZSBwbGF5aW5nIHRvZ2V0aGVyLiBJIGtub3cgdGhhdCBgdmxhbl9jb3JlLm9gIGlzIGdvaW5nIHRvIGJlIGdvdmVybmVkIGJ5IGBDT05GSUdfVkxBTl84MDIxUWAuIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBmdW5kYW1lbnRhbCBWTEFOIGluZnJhc3RydWN0dXJlLiBOb3csIGdpdmVuIHRoYXQgY29udGV4dCwgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGlzc3VlIEknbSBsaWtlbHkgZGVidWdnaW5nLCBJIHRoaW5rIHRoZSBjcml0aWNhbCBwbGFjZSB0byBsb29rIGF0IGludGVyYWN0aW9ucyBpcyBpbiB0aGUgcXVldWluZyBkaXNjaXBsaW5lcywgYW5kIGhvdyB0aGUgTVBMUyBlbmNhcHN1bGF0aW9uIGFuZCBkZWNhcHN1bGF0aW9uIG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBWTEFOIHRhZ2dpbmcgYW5kIHVudGFnZ2luZyBpbnRlcmZhY2VzIHdpdGggTVBMUyBsYWJlbHMgaW4gdGhlIHRyYWZmaWMgc2hhcGluZyBhbmQgY2xhc3NpZmljYXRpb24gcHJvY2Vzc2VzLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBuZXQvc2NoZWQvYWN0X21wbHMuY2AgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBNUExTIGFjdGlvbnMuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBWTEFOLWF3YXJlIE1QTFMgaGFuZGxpbmcgd2lsbCBiZS4gTGV0J3Mgc2VlIGhvdyB0aGV5J3JlIGRlYWxpbmcgd2l0aCB0YWdnZWQgdnMuIHVudGFnZ2VkIGZyYW1lcyBpbiB0aGF0IGNvbnRleHQuIEl0J3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIGZvciB0aGUgaW50ZXJhY3Rpb24gdG8gYmUgaGFuZGxlZCwgb3IgdGhlIGJ1ZyB0byBiZSBsb2NhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDY5OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEyOjU3LjA2NDAxNTA3MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5OTEwODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWN0X21wbHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTgxOT1jb25maWcgTkVUX0FDVF9NUExTXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy04MjctXFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxubmV0L3NjaGVkL0tjb25maWc6ODI4OlxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9tcGxzLlxcbm5ldC9zY2hlZC9LY29uZmlnLTgyOS1cXG4tLVxcbm5ldC9zY2hlZC9NYWtlZmlsZT0yMD1vYmotJChDT05GSUdfTkVUX0FDVF9DU1VNKVxcdCs9IGFjdF9jc3VtLm9cXG5uZXQvc2NoZWQvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX05FVF9BQ1RfTVBMUylcXHQrPSBhY3RfbXBscy5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19ORVRfQUNUX1ZMQU4pXFx0Kz0gYWN0X3ZsYW4ub1xcbi0tXFxubmV0L3NjaGVkL2FjdF9tcGxzLmMtMTgtXFxubmV0L3NjaGVkL2FjdF9tcGxzLmM6MTk6c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9tcGxzX29wcztcXG5uZXQvc2NoZWQvYWN0X21wbHMuYy0yMC1cXG4tLVxcbm5ldC9zY2hlZC9hY3RfbXBscy5jPTE1OD1zdGF0aWMgaW50IHRjZl9tcGxzX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X21wbHMuYy0xNjIte1xcbm5ldC9zY2hlZC9hY3RfbXBscy5jOjE2MzpcXHRzdHJ1Y3QgdGNfYWN0aW9uX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGFjdF9tcGxzX29wcy5uZXRfaWQpO1xcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTE2NC1cXHRib29sIGJpbmQgPSBmbGFncyBcXHUwMDI2IFRDQV9BQ1RfRkxBR1NfQklORDtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTE5OC1cXHRpZiAoIWV4aXN0cykge1xcbm5ldC9zY2hlZC9hY3RfbXBscy5jOjE5OTpcXHRcXHRyZXQgPSB0Y2ZfaWRyX2NyZWF0ZSh0biwgaW5kZXgsIGVzdCwgYSwgXFx1MDAyNmFjdF9tcGxzX29wcywgYmluZCxcXG5uZXQvc2NoZWQvYWN0X21wbHMuYy0yMDAtXFx0XFx0XFx0XFx0ICAgICB0cnVlLCBmbGFncyk7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X21wbHMuYz0zODI9c3RhdGljIGludCB0Y2ZfbXBsc19vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X21wbHMuYy00NDAtXFxubmV0L3NjaGVkL2FjdF9tcGxzLmM6NDQxOnN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfbXBsc19vcHMgPSB7XFxubmV0L3NjaGVkL2FjdF9tcGxzLmMtNDQyLVxcdC5raW5kXFx0XFx0PVxcdFxcXCJtcGxzXFxcIixcXG4tLVxcbm5ldC9zY2hlZC9hY3RfbXBscy5jPTQ1ND1zdGF0aWMgX19uZXRfaW5pdCBpbnQgbXBsc19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3NjaGVkL2FjdF9tcGxzLmMtNDU1LXtcXG5uZXQvc2NoZWQvYWN0X21wbHMuYzo0NTY6XFx0c3RydWN0IHRjX2FjdGlvbl9uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCBhY3RfbXBsc19vcHMubmV0X2lkKTtcXG5uZXQvc2NoZWQvYWN0X21wbHMuYy00NTctXFxubmV0L3NjaGVkL2FjdF9tcGxzLmM6NDU4OlxcdHJldHVybiB0Y19hY3Rpb25fbmV0X2luaXQobmV0LCB0biwgXFx1MDAyNmFjdF9tcGxzX29wcyk7XFxubmV0L3NjaGVkL2FjdF9tcGxzLmMtNDU5LX1cXG4tLVxcbm5ldC9zY2hlZC9hY3RfbXBscy5jPTQ2MT1zdGF0aWMgdm9pZCBfX25ldF9leGl0IG1wbHNfZXhpdF9uZXQoc3RydWN0IGxpc3RfaGVhZCAqbmV0X2xpc3QpXFxubmV0L3NjaGVkL2FjdF9tcGxzLmMtNDYyLXtcXG5uZXQvc2NoZWQvYWN0X21wbHMuYzo0NjM6XFx0dGNfYWN0aW9uX25ldF9leGl0KG5ldF9saXN0LCBhY3RfbXBsc19vcHMubmV0X2lkKTtcXG5uZXQvc2NoZWQvYWN0X21wbHMuYy00NjQtfVxcbi0tXFxubmV0L3NjaGVkL2FjdF9tcGxzLmM9NDY2PXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgbXBsc19uZXRfb3BzID0ge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9tcGxzLmMtNDY4LVxcdC5leGl0X2JhdGNoID0gbXBsc19leGl0X25ldCxcXG5uZXQvc2NoZWQvYWN0X21wbHMuYzo0Njk6XFx0LmlkICAgPSBcXHUwMDI2YWN0X21wbHNfb3BzLm5ldF9pZCxcXG5uZXQvc2NoZWQvYWN0X21wbHMuYy00NzAtXFx0LnNpemUgPSBzaXplb2Yoc3RydWN0IHRjX2FjdGlvbl9uZXQpLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9tcGxzLmM9NDczPXN0YXRpYyBpbnQgX19pbml0IG1wbHNfaW5pdF9tb2R1bGUodm9pZClcXG5uZXQvc2NoZWQvYWN0X21wbHMuYy00NzQte1xcbm5ldC9zY2hlZC9hY3RfbXBscy5jOjQ3NTpcXHRyZXR1cm4gdGNmX3JlZ2lzdGVyX2FjdGlvbihcXHUwMDI2YWN0X21wbHNfb3BzLCBcXHUwMDI2bXBsc19uZXRfb3BzKTtcXG5uZXQvc2NoZWQvYWN0X21wbHMuYy00NzYtfVxcbi0tXFxubmV0L3NjaGVkL2FjdF9tcGxzLmM9NDc4PXN0YXRpYyB2b2lkIF9fZXhpdCBtcGxzX2NsZWFudXBfbW9kdWxlKHZvaWQpXFxubmV0L3NjaGVkL2FjdF9tcGxzLmMtNDc5LXtcXG5uZXQvc2NoZWQvYWN0X21wbHMuYzo0ODA6XFx0dGNmX3VucmVnaXN0ZXJfYWN0aW9uKFxcdTAwMjZhY3RfbXBsc19vcHMsIFxcdTAwMjZtcGxzX25ldF9vcHMpO1xcbm5ldC9zY2hlZC9hY3RfbXBscy5jLTQ4MS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEyOjU3LjExMDAxMjI4NloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODI1MDY1NzE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byBWTEFOIEFjdGlvbiBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgVkxBTiBhY3Rpb24gaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBob3cgaXQncyBpbnRlZ3JhdGVkIGludG8gdHJhZmZpYyBjb250cm9sLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY2FsbCBjaGFpbiBhbmQgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucy4gTGV0J3Mgc2VlLi4uIHRoZSBjb2RlJ3MgcG9pbnRpbmcgbWUgdG93YXJkcyBgYWN0X3ZsYW4uY2AuIFJpZ2h0LCBzbyBgdGNmX3ZsYW5fYWN0YCBpcyB0aGUgY3J1Y2lhbCBmdW5jdGlvbiBoZXJlLCBhbmQgaXQncyBjYWxsaW5nIGBza2Jfdmxhbl9wdXNoYCB3aGVuIHRoZSBgYWN0aW9uYCBpcyBgVENBX1ZMQU5fQUNUX1BVU0hgLiBUaGlzIGlzIHdoZXJlIHRoZSBWTEFOIHRhZ2dpbmcgYWN0dWFsbHkgaGFwcGVucywgc28gdGhhdCdzIHRoZSBjb3JlLiBJIHNob3VsZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBgbmV0L3NjaGVkL2FjdF92bGFuLmNgIGZpbGUgdG8gdHJhY2UgdGhlIGJlaGF2aW9yLiBJIHdhbnQgdG8gZnVsbHkgdmlzdWFsaXplIHRoZSBhcmNoaXRlY3R1cmUsIHNvIEknbGwgY29udGludWUgdG8gZXhhbWluZSB0aGUgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgaW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjA2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTM6MTUuMzYwNjcxODM1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9hY3Rfdmxhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdFxcdHAgPSByY3VfZGVyZWZlcmVuY2VfYmgodi1cXHUwMDNldmxhbl9wKTtcXG4gIDQxOlxcdFxcbiAgNDI6XFx0XFx0c3dpdGNoIChwLVxcdTAwM2V0Y2Z2X2FjdGlvbikge1xcbiAgNDM6XFx0XFx0Y2FzZSBUQ0FfVkxBTl9BQ1RfUE9QOlxcbiAgNDQ6XFx0XFx0XFx0ZXJyID0gc2tiX3ZsYW5fcG9wKHNrYik7XFxuICA0NTpcXHRcXHRcXHRpZiAoZXJyKVxcbiAgNDY6XFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbiAgNDc6XFx0XFx0XFx0YnJlYWs7XFxuICA0ODpcXHRcXHRjYXNlIFRDQV9WTEFOX0FDVF9QVVNIOlxcbiAgNDk6XFx0XFx0XFx0ZXJyID0gc2tiX3ZsYW5fcHVzaChza2IsIHAtXFx1MDAzZXRjZnZfcHVzaF9wcm90bywgcC1cXHUwMDNldGNmdl9wdXNoX3ZpZCB8XFxuICA1MDpcXHRcXHRcXHRcXHRcXHQgICAgKHAtXFx1MDAzZXRjZnZfcHVzaF9wcmlvIFxcdTAwM2NcXHUwMDNjIFZMQU5fUFJJT19TSElGVCkpO1xcbiAgNTE6XFx0XFx0XFx0aWYgKGVycilcXG4gIDUyOlxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gIDUzOlxcdFxcdFxcdGJyZWFrO1xcbiAgNTQ6XFx0XFx0Y2FzZSBUQ0FfVkxBTl9BQ1RfTU9ESUZZOlxcbiAgNTU6XFx0XFx0XFx0LyogTm8tb3AgaWYgbm8gdmxhbiB0YWcgKGVpdGhlciBody1hY2NlbCBvciBpbi1wYXlsb2FkKSAqL1xcbiAgNTY6XFx0XFx0XFx0aWYgKCFza2Jfdmxhbl90YWdnZWQoc2tiKSlcXG4gIDU3OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAgNTg6XFx0XFx0XFx0LyogZXh0cmFjdCBleGlzdGluZyB0YWcgKGFuZCBndWFyYW50ZWUgbm8gaHctYWNjZWwgdGFnKSAqL1xcbiAgNTk6XFx0XFx0XFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHtcXG4gIDYwOlxcdFxcdFxcdFxcdHRjaSA9IHNrYl92bGFuX3RhZ19nZXQoc2tiKTtcXG4gIDYxOlxcdFxcdFxcdFxcdF9fdmxhbl9od2FjY2VsX2NsZWFyX3RhZyhza2IpO1xcbiAgNjI6XFx0XFx0XFx0fSBlbHNlIHtcXG4gIDYzOlxcdFxcdFxcdFxcdC8qIGluLXBheWxvYWQgdmxhbiB0YWcsIHBvcCBpdCAqL1xcbiAgNjQ6XFx0XFx0XFx0XFx0ZXJyID0gX19za2Jfdmxhbl9wb3Aoc2tiLCBcXHUwMDI2dGNpKTtcXG4gIDY1OlxcdFxcdFxcdFxcdGlmIChlcnIpXFxuICA2NjpcXHRcXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuICA2NzpcXHRcXHRcXHR9XFxuICA2ODpcXHRcXHRcXHQvKiByZXBsYWNlIHRoZSB2aWQgKi9cXG4gIDY5OlxcdFxcdFxcdHRjaSA9ICh0Y2kgXFx1MDAyNiB+VkxBTl9WSURfTUFTSykgfCBwLVxcdTAwM2V0Y2Z2X3B1c2hfdmlkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxMzoxNS4zNjA3NTczODZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Nzg0MzA1NjYzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogVkxBTiBIZWFkZXIgSW5zZXJ0aW9uKipcblxuT2theSwgdGhpcyBsb29rcyBwcm9taXNpbmcuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJdCdzIHRvdWNoaW5nIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzLCBzcGVjaWZpY2FsbHkgdGhlIFZMQU4gaGVhZGVyIGluc2VydGlvbiBoZWxwZXIsIGFuZCBpdCdzIHVzZWQgYWNyb3NzIHNldmVyYWwgbmV0d29ya2luZyBwYXRoczogcmVjZWl2ZSBhbmQgdHJhbnNtaXQsIFRDLCBPVlMsIGFuZCBCUEYuIFRoYXQgYWxvbmUgd2FycmFudHMgYSBjbG9zZXIgbG9vay5cblxuVGhlIGZhY3QgdGhhdCB0aGlzIGludHJvZHVjZXMgYSBuZXcgaW5wdXQgdmFsaWRhdGlvbiBjaGVjaywgYGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pKSkgcmV0dXJuIC1FSU5WQUw7YCwgaXMgYSBtYWpvciBmbGFnLiBJdCBtZWFucyB3ZSBoYXZlIGEgcG90ZW50aWFsIC1FSU5WQUwgcmV0dXJuLCB3aGljaCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgcGFja2V0IHJlamVjdGlvbiBvciBiZWhhdmlvciBjaGFuZ2VzIGlmIGBtYWNfbGVuYCBpc24ndCBoYW5kbGVkIGNvcnJlY3RseS4gVGhlIHJlYWNoYWJsZSBhdHRhY2sgc3VyZmFjZSBpcyBicm9hZCwgZW5jb21wYXNzaW5nIHN0YW5kYXJkIG5ldHdvcmsgaW50ZXJmYWNlcywgQlBGLCBUQywgVkxBTiwgT1ZTLCBhbmQgZXZlbiB0dW4vdGFwLiBUaGlzIHN1Z2dlc3RzIGEgaGlnaCBwcm9iYWJpbGl0eSBvZiBmaW5kaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZy5cblxuTGV0IG1lIHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzLiBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGlzIHN0YXRpYyBpbmxpbmUsIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvaWZfdmxhbi5oYC4gVGltZSB0byBjb25maXJtIHRoYXQgZ2NjL2NsYW5nIGFyZSBpbmxpbmluZyBpdCwgYW5kIHllcCwgdGhleSBhcmUuIFNvIG5vdyBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGNhbGxpbmcgaXQgb3IgYXJlIGV4ZXJjaXNpbmcgaXQgZGlyZWN0bHkuXG5cbkFmdGVyIGNoZWNraW5nLCBJIGZpbmQ6XG5cbjEuICBgc2tiX3ZsYW5fcHVzaGAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCB3aGljaCBjYWxscyBgX192bGFuX2luc2VydF90YWdgIHdoaWNoIGNhbGxzIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AuXG4yLiAgYHZsYW5fZG9fcmVjZWl2ZWAgaW4gYG5ldC84MDIxcS92bGFuX2NvcmUuY2Agd2hpY2ggY2FsbHMgYHZsYW5faW5zZXJ0X2lubmVyX3RhZ2Agd2hpY2ggY2FsbHMgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC5cbjMuICBgdGNmX21wbHNfYWN0YCBpbiBgbmV0L3NjaGVkL2FjdF9tcGxzLmNgIHdoaWNoIGNhbGxzIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgZGlyZWN0bHkuXG40LiAgYHRjZl92bGFuX2FjdGAgaW4gYG5ldC9zY2hlZC9hY3Rfdmxhbi5jYCBjYWxscyBgc2tiX3ZsYW5fcHVzaGAuXG41LiBgYnBmX3NrYl92bGFuX3B1c2hgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgaXMgYSBCUEYgaGVscGVyLlxuXG5TbywgYWxsIG9mIHRoZSBmdW5jdGlvbnMgd2l0aCB0aGUgbmFtZXMgdGhhdCBkb24ndCBzdGFydCB3aXRoIGBfX2AgYXJlIGNhbGxlZCBmcm9tIG90aGVyIGAuY2AgZmlsZXMsIGFuZCB0aGV5IGFyZSBub3QgYHN0YXRpYyBpbmxpbmVgLiBJJ2xsIHdhbnQgdG8gcmVtZW1iZXIgdGhlc2UuXG5cbk5vdywgbGV0J3MgZGV0ZXJtaW5lIHRoZSBwcmV2YWxlbmNlIG9mIHRoZXNlIGZ1bmN0aW9ucy4gYHNrYl92bGFuX3B1c2hgIGlzIHNwZWNpZmljIHRvIFZMQU4gcHVzaGluZyBvcGVyYXRpb25zIGluIFRDL0JQRi9PVlMuIGB2bGFuX2RvX3JlY2VpdmVgIGlzIGFsc28gc3BlY2lmaWMsIG9ubHkgZm9yIDgwMi4xUSBWTEFOIHBhY2tldCBwcm9jZXNzaW5nIG9uIHJlY2VpdmUuIEFuZCBgdGNmX21wbHNfYWN0YCBpcyBub24tdWJpcXVpdG91cywgc3BlY2lmaWMgdG8gdGhlIFRDIE1QTFMgYWN0aW9uLlxuXG5Gb3IgYHZsYW5fZG9fcmVjZWl2ZWAsIHRoZSBgQ09ORklHX1ZMQU5fODAyMVFgIEtjb25maWcgZGVwZW5kZW5jeSBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kIGZvciB0ZXN0aW5nLiBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQncyBlbmFibGVkIHdoZW4gSSdtIHJ1bm5pbmcgdGhpcyBmdXp6LiBOb3cgSSBuZWVkIHRvIGNoZWNrIGBuZXQvODAyMXEvS2NvbmZpZ2AgZm9yIHRoYXQgY29uZmlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjk5NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxMzoyMy4yMDM4MTY1MzJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0LzgwMjFxL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgQ29uZmlndXJhdGlvbiBmb3IgODAyLjFRIFZMQU4gc3VwcG9ydFxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgVkxBTl84MDIxUVxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIjgwMi4xUS84MDIuMWFkIFZMQU4gU3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgU2VsZWN0IHRoaXMgYW5kIHlvdSB3aWxsIGJlIGFibGUgdG8gY3JlYXRlIDgwMi4xUSBWTEFOIGludGVyZmFjZXNcXG4gIDEwOlxcdFxcdCAgb24geW91ciBFdGhlcm5ldCBpbnRlcmZhY2VzLiA4MDIuMVEgVkxBTiBzdXBwb3J0cyBhbG1vc3RcXG4gIDExOlxcdFxcdCAgZXZlcnl0aGluZyBhIHJlZ3VsYXIgRXRoZXJuZXQgaW50ZXJmYWNlIGRvZXMsIGluY2x1ZGluZ1xcbiAgMTI6XFx0XFx0ICBmaXJld2FsbGluZywgYnJpZGdpbmcsIGFuZCBvZiBjb3Vyc2UgSVAgdHJhZmZpYy4gWW91IHdpbGwgbmVlZFxcbiAgMTM6XFx0XFx0ICB0aGUgJ2lwJyB1dGlsaXR5IGluIG9yZGVyIHRvIGVmZmVjdGl2ZWx5IHVzZSBWTEFOcy5cXG4gIDE0OlxcdFxcdCAgU2VlIHRoZSBWTEFOIHdlYiBwYWdlIGZvciBtb3JlIGluZm9ybWF0aW9uOlxcbiAgMTU6XFx0XFx0ICBcXHUwMDNjaHR0cDovL3d3dy5jYW5kZWxhdGVjaC5jb20vfmdyZWVhci92bGFuLmh0bWxcXHUwMDNlXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDE4OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgODAyMXEuXFxuICAxOTpcXHRcXG4gIDIwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0Y29uZmlnIFZMQU5fODAyMVFfR1ZSUFxcbiAgMjM6XFx0XFx0Ym9vbCBcXFwiR1ZSUCAoR0FSUCBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFxcXCJcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gVkxBTl84MDIxUVxcbiAgMjU6XFx0XFx0c2VsZWN0IEdBUlBcXG4gIDI2OlxcdFxcdGhlbHBcXG4gIDI3OlxcdFxcdCAgU2VsZWN0IHRoaXMgdG8gZW5hYmxlIEdWUlAgZW5kLXN5c3RlbSBzdXBwb3J0LiBHVlJQIGlzIHVzZWQgZm9yXFxuICAyODpcXHRcXHQgIGF1dG9tYXRpYyBwcm9wYWdhdGlvbiBvZiByZWdpc3RlcmVkIFZMQU5zIHRvIHN3aXRjaGVzLlxcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEzOjIzLjIwMzg5NDYwMloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzkyODIxOTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzcGVjaWZpY2FsbHkgYENPTkZJR19WTEFOXzgwMjFRYC4gRnJvbSB3aGF0IEkgc2VlLCBpdCBkb2Vzbid0IGFwcGVhciB0byBoYXZlIGFueSB1bnVzdWFsIGRlcGVuZGVuY2llcyBiZXlvbmQgdGhlIHN0YW5kYXJkIGBORVRgIGRlcGVuZGVuY3ksIHdoaWNoIGlzIGZhaXJseSB0eXBpY2FsLiBOb3RoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnkgdGhlcmUuXG5cbk5vdywgbGV0J3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBDT05GSUdfTkVUX0FDVF9NUExTYCBpbiB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBhcm91bmQgbGluZSA4MTkgaW4gdGhhdCBmaWxlIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBjb250ZXh0IGFuZCBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvciBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBtb2R1bGVzLiBJdCdzIGFsd2F5cyBnb29kIHRvIHNlZSB0aGUgc3Vycm91bmRpbmcgS2NvbmZpZyBzdHJ1Y3R1cmUgdG8gYmUgc3VyZSBvZiBleGFjdGx5IGhvdyB0aGluZ3MgZml0IHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTIzNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTM6MjUuNTk2NzE5MDE0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MTU6XFx0XFxuIDgxNjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gODE3OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9jc3VtLlxcbiA4MTg6XFx0XFxuIDgxOTpcXHRjb25maWcgTkVUX0FDVF9NUExTXFxuIDgyMDpcXHRcXHR0cmlzdGF0ZSBcXFwiTVBMUyBtYW5pcHVsYXRpb25cXFwiXFxuIDgyMTpcXHRcXHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXFxuIDgyMjpcXHRcXHRoZWxwXFxuIDgyMzpcXHRcXHQgIFNheSBZIGhlcmUgdG8gcHVzaCBvciBwb3AgTVBMUyBoZWFkZXJzLlxcbiA4MjQ6XFx0XFxuIDgyNTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDgyNjpcXHRcXG4gODI3OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA4Mjg6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X21wbHMuXFxuIDgyOTpcXHRcXG4gODMwOlxcdGNvbmZpZyBORVRfQUNUX1ZMQU5cXG4gODMxOlxcdFxcdHRyaXN0YXRlIFxcXCJWbGFuIG1hbmlwdWxhdGlvblxcXCJcXG4gODMyOlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcXG4gODMzOlxcdFxcdGhlbHBcXG4gODM0OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBwdXNoIG9yIHBvcCB2bGFuIGhlYWRlcnMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEzOjI1LjU5NjgzOTEwNFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMzYzMzQ1NjI5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBWTEFOIGFuZCBNUExTIENvbmZpZ3VyYXRpb24gZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGUgZGVwZW5kZW5jaWVzOiBgQ09ORklHX05FVF9BQ1RfTVBMU2AgYW5kIGBDT05GSUdfTkVUX0FDVF9WTEFOYCBib3RoIHJlbHkgb24gYENPTkZJR19ORVRfQ0xTX0FDVGAuIFdlIGFsc28gaGF2ZSBgc2tiX3ZsYW5fcHVzaGAgcmVzaWRpbmcgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCwgd2hpY2ggaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX05FVD15YCwgYW5kIGBDT05GSUdfVkxBTl84MDIxUWAuIEdvdCBpdC5cblxuTm93LCBsZXQncyB2ZXJpZnkgb3VyIGBFbmFibGVDb25maWdzYDogYFZMQU5fODAyMVFgLCBgTkVUX0FDVF9NUExTYCwgYE5FVF9BQ1RfVkxBTmAsIGFuZCBgTkVUX0NMU19BQ1RgLiBUaG9zZSBsb29rIGNvcnJlY3QgYmFzZWQgb24gdGhlIGRlcGVuZGVuY2llcy5cblxuQWxyaWdodCwgd2hhdCBkbyB0aGVzZSBjb25maWd1cmF0aW9ucyAqYWN0dWFsbHkqIGVuYWJsZT8gYFZMQU5fODAyMVFgIGVuYWJsZXMgdGhlIGNvcmUgVkxBTiBjb2RlIChgdmxhbl9jb3JlLmNgKSBhbmQgODAyLjFRIHN1cHBvcnQuIGBORVRfQ0xTX0FDVGAgYW5kIGBORVRfQUNUX01QTFNgIGVuYWJsZSBNUExTIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLCBhbmQgYE5FVF9BQ1RfVkxBTmAgZW5hYmxlcyBWTEFOIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLiBNYWtlcyBzZW5zZS5cblxuTm93LCB0aGUgY3JpdGljYWwgcGFydC4gSSBuZWVkIHRvIGRlZmluZSB0aGUgYEZvY3VzU3ltYm9sc2AuIENhbiBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGJlIGxpc3RlZCBhcyBhIGZvY3VzIHN5bWJvbD8gTm8sIGl0IGNhbid0LCBiZWNhdXNlIGl0J3MgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvaWZfdmxhbi5oYC4gU2VjdGlvbiA0IGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgbGFjayBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGFuZCB0aHVzIGNhbid0IGJlIHRhcmdldGVkIGRpcmVjdGx5LiBUaGVyZWZvcmUsIEkgbmVlZCB0byBmb2N1cyBvbiAqY2FsbGVycyogb2YgdGhlIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24uXG5cblNvLCBpbnN0ZWFkIG9mIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AsIEknbSBnb2luZyB0byBsaXN0OlxuKiAgIGBza2Jfdmxhbl9wdXNoYFxuKiAgIGB2bGFuX2RvX3JlY2VpdmVgXG4qICAgYHRjZl9tcGxzX2FjdGBcbiogICBgdGNmX3ZsYW5fYWN0YFxuXG5OZXh0LCBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgbm9uZSBvZiB0aGVzZSBjYWxsZXJzIGFyZSAqdWJpcXVpdG91cyouIExldCdzIGNoZWNrOlxuXG4qICAgYHNrYl92bGFuX3B1c2hgOiBJdCdzIG9ubHkgY2FsbGVkIHdoZW4gcHVzaGluZyBhIFZMQU4gdGFnLCBmb3IgaW5zdGFuY2UsIG5lc3RlZCBWTEFOcyBvciBWTEFOIGFjdGlvbnMgdGhyb3VnaCB0YywgYnBmLCBvciBvdnMuIFRoYXQncyBub3QgdWJpcXVpdG91cy4gR29vZC5cbiogICBgdmxhbl9kb19yZWNlaXZlYDogSXQncyBvbmx5IGNhbGxlZCB3aGVuIHJlY2VpdmluZyBwYWNrZXRzIG9uIGEgVkxBTiBpbnRlcmZhY2UuIERlZmluaXRlbHkgbm90IHViaXF1aXRvdXMuXG4qICAgYHRjZl9tcGxzX2FjdGA6IE9ubHkgY2FsbGVkIGZvciBNUExTIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLiBOb3QgdWJpcXVpdG91cy5cbiogICBgdGNmX3ZsYW5fYWN0YDogT25seSBjYWxsZWQgZm9yIFZMQU4gdHJhZmZpYyBjb250cm9sIGFjdGlvbnMuIEFsc28sIG5vdCB1YmlxdWl0b3VzLlxuXG5FeGNlbGxlbnQuIEl0IHNlZW1zIEkgaGF2ZSBzZWxlY3RlZCBhIGdvb2QgbGlzdCBvZiBub24tdWJpcXVpdG91cyBmdW5jdGlvbnMuXG5cbklzIGZ1enppbmcgd2FycmFudGVkPyBBYnNvbHV0ZWx5LiBgV29ydGhGdXp6aW5nPXRydWVgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBpbnB1dCB2YWxpZGF0aW9uIGNoZWNrIChgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pYCkgaW4gYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBpbnNlcnRpbmcgaW5uZXIgVkxBTiB0YWdzLiBUaGlzIGhlbHBlciBpcyBjYWxsZWQgYnkgdml0YWwgbmV0d29ya2luZyBwYXRocywgaW5jbHVkaW5nIDgwMi4xUSBWTEFOIHBhY2tldCByZWNlcHRpb24gKGB2bGFuX2RvX3JlY2VpdmVgKSwgcGFja2V0IG1vZGlmaWNhdGlvbiB2aWEgQlBGL1RDL09WUyAoYHNrYl92bGFuX3B1c2hgLCBgdGNmX3ZsYW5fYWN0YCksIGFuZCBUQyBNUExTIGFjdGlvbnMgKGB0Y2ZfbXBsc19hY3RgKS4gSSBuZWVkIHRvIGZ1enogdGhpcyB0aG9yb3VnaGx5IHRvIHZlcmlmeSB0aGF0IHVudXN1YWwgb3IgbWFsZm9ybWVkIHBhY2tldHMgd2l0aCBub24tbGluZWFyIGhlYWRlcnMgcHJvcGVybHkgdHJpZ2dlciB0aGUgbmV3IGNoZWNrLCB3aXRoIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgZXJyb3JzLlxuXG5BbGwgY2hlY2tzIGFyZSBjbGVhciBhbmQgdGhlIHZlcmlmaWNhdGlvbiBpcyBjb21wbGV0ZS4gSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU3NzUsIk91dHB1dFRva2VucyI6MjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTM6MzkuMjMwMjk5MTIxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAzMTg2MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZMQU5fODAyMVFcIixcbiAgICBcIk5FVF9BQ1RfTVBMU1wiLFxuICAgIFwiTkVUX0FDVF9WTEFOXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl92bGFuX3B1c2hcIixcbiAgICBcInZsYW5fZG9fcmVjZWl2ZVwiLFxuICAgIFwidGNmX21wbHNfYWN0XCIsXG4gICAgXCJ0Y2Zfdmxhbl9hY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pIGNoZWNrIHRvIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKCkgaW4gaW5jbHVkZS9saW51eC9pZl92bGFuLmggdG8gZW5zdXJlIHN1ZmZpY2llbnQgaGVhZCBkYXRhIGlzIHB1bGxlZCBiZWZvcmUgaW5zZXJ0aW5nIGFuIGlubmVyIFZMQU4gdGFnLiBUaGlzIHJlYWNoYWJsZSBoZWxwZXIgaXMgZXhlcmNpc2VkIGJ5IGNvcmUgbmV0d29ya2luZyBwYXRocyBzdWNoIGFzIDgwMi4xUSByZWNlaXZlIHByb2Nlc3NpbmcgKHZsYW5fZG9fcmVjZWl2ZSksIFZMQU4gcHVzaCBvcGVyYXRpb25zIChza2Jfdmxhbl9wdXNoKSwgYW5kIFRDIGFjdGlvbnMgKHRjZl9tcGxzX2FjdCwgdGNmX3ZsYW5fYWN0KS4gRnV6emluZyBpcyB3b3J0aHdoaWxlIHRvIHRlc3QgYmVoYXZpb3Igd2l0aCBub24tbGluZWFyLCBmcmFnbWVudGVkLCBvciBtYWxmb3JtZWQgcGFja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWTEFOXzgwMjFRXCIsXG4gICAgXCJORVRfQUNUX01QTFNcIixcbiAgICBcIk5FVF9BQ1RfVkxBTlwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza2Jfdmxhbl9wdXNoXCIsXG4gICAgXCJ2bGFuX2RvX3JlY2VpdmVcIixcbiAgICBcInRjZl9tcGxzX2FjdFwiLFxuICAgIFwidGNmX3ZsYW5fYWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHBza2JfbWF5X3B1bGwoc2tiLCBtYWNfbGVuKSBjaGVjayB0byBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZygpIGluIGluY2x1ZGUvbGludXgvaWZfdmxhbi5oIHRvIGVuc3VyZSBzdWZmaWNpZW50IGhlYWQgZGF0YSBpcyBwdWxsZWQgYmVmb3JlIGluc2VydGluZyBhbiBpbm5lciBWTEFOIHRhZy4gVGhpcyByZWFjaGFibGUgaGVscGVyIGlzIGV4ZXJjaXNlZCBieSBjb3JlIG5ldHdvcmtpbmcgcGF0aHMgc3VjaCBhcyA4MDIuMVEgcmVjZWl2ZSBwcm9jZXNzaW5nICh2bGFuX2RvX3JlY2VpdmUpLCBWTEFOIHB1c2ggb3BlcmF0aW9ucyAoc2tiX3ZsYW5fcHVzaCksIGFuZCBUQyBhY3Rpb25zICh0Y2ZfbXBsc19hY3QsIHRjZl92bGFuX2FjdCkuIEZ1enppbmcgaXMgd29ydGh3aGlsZSB0byB0ZXN0IGJlaGF2aW9yIHdpdGggbm9uLWxpbmVhciwgZnJhZ21lbnRlZCwgb3IgbWFsZm9ybWVkIHBhY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEzOjM5LjMxMDYyNzQ4OFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0Mzk5OTQzNDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTM6MzkuMzExMTQyODA5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjg0Mzk5NDIyNjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIHVzaW5nIHBza2JfbWF5X3B1bGwoc2tiLCBtYWNfbGVuKSBpbiBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZygpIHRvIGVuc3VyZSB0aGF0IHRoZSBwYWNrZXQgYnVmZmVyIGNvbnRhaW5zIGF0IGxlYXN0IG1hY19sZW4gbGluZWFyIGJ5dGVzIGJlZm9yZSBwZXJmb3JtaW5nIGhlYWRlciBtYW5pcHVsYXRpb25zIChza2JfcG9zdHB1c2hfZGF0YV9tb3ZlIGFuZCB3cml0aW5nIHZsYW5fZXRoaGRyKS4gV2l0aG91dCB0aGlzIGNoZWNrLCBwYWNrZXRzIHNob3J0ZXIgdGhhbiBtYWNfbGVuIG9yIG5vbi1saW5lYXIgYnVmZmVycyBjb3VsZCBsZWFkIHRvIG91dC1vZi1ib3VuZHMgaGVhcCBhY2Nlc3NlcyAoT09CIHJlYWQvd3JpdGUpLCB3aGljaCBhcmUgZGlyZWN0bHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZSBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBidWZmZXJzLCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMzZkY2FhMWQ5NjdlYzJiNzJlYjQzNjVmNGJmODMzOTYzYjhkYmY0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTE6MTA6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oXG5pbmRleCAyMGNjMTZlYTRlNWFiLi40ODQ2MDMyYmY0ZmZjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pZl92bGFuLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oXG5AQCAtMzY1LDYgKzM2NSw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjb25zdCB1OCBtZXRhX2xlbiA9IG1hY19sZW4gXHUwMDNlIEVUSF9UTEVOID8gc2tiX21ldGFkYXRhX2xlbihza2IpIDogMDtcbiBcdHN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aDtcbiBcbitcdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgbWV0YV9sZW4gKyBWTEFOX0hMRU4pIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEzOjM5LjMxMTE0NDE2OVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzIyMjMxMDc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZMQU4gSW5zZXJ0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgc2VlIGl0J3MgdG91Y2hpbmcgYGluY2x1ZGUvbGludXgvaWZfdmxhbi5oYCwgc3BlY2lmaWNhbGx5IHRoZSBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGZ1bmN0aW9uLiBUaGUgY29kZSBzbmlwcGV0IGlzIHN0cmFpZ2h0Zm9yd2FyZCwgYWRkaW5nIGEgY2hlY2suIE5vdywgd2hlcmUgd2FzIHRoaXMgZnVuY3Rpb24gb3JpZ2luYWxseSBpbiB0aGUgcHJvamVjdD8gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmVhZCB0aGUgd2hvbGUgZmlsZSB0byBjb25maXJtIHdoYXQgdGhlIGludGVudGlvbiBvZiB0aGUgZnVuY3Rpb24gaXMsIGFuZCBhbHNvIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBjaGFuZ2UgZml0cyBpbi5cblxuVGhlIGFkZGVkIGBpZmAgc3RhdGVtZW50IHdpdGggYHBza2JfbWF5X3B1bGwoKWAgY2F0Y2hlcyBteSBleWUgaW1tZWRpYXRlbHkuIEl0IGxvb2tzIGxpa2Ugd2UncmUgYWRkaW5nIGEgc2FmZXR5IGNoZWNrIGJlZm9yZSBwb3RlbnRpYWxseSBtb2RpZnlpbmcgdGhlIFNLQi4gVGhpcyBpcyBnb29kIHByYWN0aWNlOyBwcmV2ZW50aW5nIGlzc3VlcyB3aXRoIGRhdGEgY29ycnVwdGlvbiBvciBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWx3YXlzIGEgd2luLiBUaGUgY2hlY2sgZW5zdXJlcyB0aGF0IHdlIGhhdmUgZW5vdWdoIGRhdGEgYXZhaWxhYmxlIGluIHRoZSBTS0IgdG8gd29yayB3aXRoIHRoZSBNQUMgaGVhZGVyLiBTbywgd2UncmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBzb21lIGtpbmQgb2YgVkxBTiB0YWdnaW5nIGluc2VydGlvbi4gV2UgaGF2ZSB0aGUgZGF0YSBsZW5ndGggb2YgTUFDIGhlYWRlciwgYW5kIGFsc28gYSBsZW5ndGggY2hlY2sgd2l0aCBgRVRIX1RMRU5gLlxuXG5JJ2xsIHF1aWNrbHkgcmVmZXJlbmNlIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLCBqdXN0IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCBzaG91bGQgYmUgcHJldHR5IHNhZmUgdG8gYXNzdW1lIHRoYXQgYHBza2JfbWF5X3B1bGwoKWAgaXMgYmVpbmcgdXNlZCBjb3JyZWN0bHksIGJ1dCwgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsaW5nIGNvbnRleHRzIGluIHRoZSBwcm9qZWN0LiBUaGUgYC1FSU5WQUxgIHJldHVybiBvbiBmYWlsdXJlIGlzIHN0YW5kYXJkIHByYWN0aWNlLCBpbmRpY2F0aW5nIGFuIGludmFsaWQgYXJndW1lbnQsIHNvIHRoYXQncyBnb29kLiBUaGUgY29tbWVudCBzaG91bGQgZXhwbGFpbiB0aGUgcmVhc29ucyBmb3IgZmFpbHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExNCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjEzOjU2LjUzMzQ1NzI1OVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3Njg1NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX192bGFuX2luc2VydF9pbm5lcl90YWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9pZl92bGFuLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9pZl92bGFuLmg9MzM5PXN0YXRpYyBpbmxpbmUgYm9vbCB2bGFuX2h3X29mZmxvYWRfY2FwYWJsZShuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyxcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM0OS0vKipcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDozNTA6ICogX192bGFuX2luc2VydF9pbm5lcl90YWcgLSBpbm5lciBWTEFOIHRhZyBpbnNlcnRpbmdcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0zNTEtICogQHNrYjogc2tidWZmIHRvIHRhZ1xcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzYwLSAqL1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjM2MTpzdGF0aWMgaW5saW5lIGludCBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM2Mi1cXHRcXHRcXHRcXHRcXHQgIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl90Y2ksXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD00MTQ9c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQxNi17XFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NDE3OlxcdHJldHVybiBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHZsYW5fcHJvdG8sIHZsYW5fdGNpLCBFVEhfSExFTik7XFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDE4LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTQzNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp2bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQ0My1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDo0NDQ6XFx0ZXJyID0gX192bGFuX2luc2VydF9pbm5lcl90YWcoc2tiLCB2bGFuX3Byb3RvLCB2bGFuX3RjaSwgbWFjX2xlbik7XFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDQ1LVxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTM6NTYuNTgxMjMyODY1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk3MDIxMTE3MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQ6XG5cbioqQW5hbHl6aW5nIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgLSBEaXZpbmcgaW50byB0aGUgQ29kZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzICpyZWFsbHkqIGdvaW5nIG9uIHdpdGggYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC4gVGhlIG5hbWUgc3VnZ2VzdHMgaXQncyByZWxhdGVkIHRvIFZMQU4gaW5zZXJ0aW9uLCBsaWtlbHkgYWRkaW5nIGFuIGlubmVyIFZMQU4gdGFnLCBzbyB0aGF0J3MgdGhlIGFyZWEgb2YgZm9jdXMuIE15IGZpcnN0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIExldCdzIHN0YXJ0IHdpdGggYSBkZWVwIGRpdmUgaW50byB0aGF0IGZ1bmN0aW9uLCB0aGUgYmVzdCB3YXkgdG8gZG8gdGhhdCBpcyB0byBoYXZlIGEgZ29vZCBsb29rIGF0IGl0IHdpdGggYHJlYWQtZmlsZWAuIEkgbmVlZCBhbGwgdGhlIGRldGFpbHMuIEkgd2FudCB0byBzZWUgdGhlIGFyZ3VtZW50cywgdGhlIGxvY2FsIHZhcmlhYmxlcywgZXZlcnkgc2luZ2xlIGxpbmUgb2YgdGhhdCBjb2RlLiBOb3RoaW5nIGxlc3MuIFRoZW4gSSdsbCBiZSBhYmxlIHRvIGNvbnNpZGVyIHRoZSBhbGdvcml0aG0sIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzLiBJIHdpbGwgYWxzbyBiZSBhYmxlIHRvIHJldmlldyB3aGF0IGFzc3VtcHRpb25zIGFyZSBtYWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTM0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTQ6MDYuMjgzMzQ4NloiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzNTAsXG4gIFwiTGluZUNvdW50XCI6IDY1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNTA6XFx0ICogX192bGFuX2luc2VydF9pbm5lcl90YWcgLSBpbm5lciBWTEFOIHRhZyBpbnNlcnRpbmdcXG4gMzUxOlxcdCAqIEBza2I6IHNrYnVmZiB0byB0YWdcXG4gMzUyOlxcdCAqIEB2bGFuX3Byb3RvOiBWTEFOIGVuY2Fwc3VsYXRpb24gcHJvdG9jb2xcXG4gMzUzOlxcdCAqIEB2bGFuX3RjaTogVkxBTiBUQ0kgdG8gaW5zZXJ0XFxuIDM1NDpcXHQgKiBAbWFjX2xlbjogTUFDIGhlYWRlciBsZW5ndGggaW5jbHVkaW5nIG91dGVyIHZsYW4gaGVhZGVyc1xcbiAzNTU6XFx0ICpcXG4gMzU2OlxcdCAqIEluc2VydHMgdGhlIFZMQU4gdGFnIGludG8gQHNrYiBhcyBwYXJ0IG9mIHRoZSBwYXlsb2FkIGF0IG9mZnNldCBtYWNfbGVuXFxuIDM1NzpcXHQgKiBEb2VzIG5vdCBjaGFuZ2Ugc2tiLVxcdTAwM2Vwcm90b2NvbCBzbyB0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGR1cmluZyByZWNlaXZlLlxcbiAzNTg6XFx0ICpcXG4gMzU5OlxcdCAqIFJldHVybnM6IGVycm9yIGlmIHNrYl9jb3dfaGVhZCBmYWlscy5cXG4gMzYwOlxcdCAqL1xcbiAzNjE6XFx0c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gMzYyOlxcdFxcdFxcdFxcdFxcdFxcdCAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSxcXG4gMzYzOlxcdFxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IG1hY19sZW4pXFxuIDM2NDpcXHR7XFxuIDM2NTpcXHRcXHRjb25zdCB1OCBtZXRhX2xlbiA9IG1hY19sZW4gXFx1MDAzZSBFVEhfVExFTiA/IHNrYl9tZXRhZGF0YV9sZW4oc2tiKSA6IDA7XFxuIDM2NjpcXHRcXHRzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZldGg7XFxuIDM2NzpcXHRcXG4gMzY4OlxcdFxcdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pKSlcXG4gMzY5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzNzA6XFx0XFxuIDM3MTpcXHRcXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgbWV0YV9sZW4gKyBWTEFOX0hMRU4pIFxcdTAwM2MgMClcXG4gMzcyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzNzM6XFx0XFxuIDM3NDpcXHRcXHRza2JfcHVzaChza2IsIFZMQU5fSExFTik7XFxuIDM3NTpcXHRcXG4gMzc2OlxcdFxcdC8qIE1vdmUgdGhlIG1hYyBoZWFkZXIgc2FucyBwcm90byB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXcgaGVhZGVyLiAqL1xcbiAzNzc6XFx0XFx0aWYgKGxpa2VseShtYWNfbGVuIFxcdTAwM2UgRVRIX1RMRU4pKVxcbiAzNzg6XFx0XFx0XFx0c2tiX3Bvc3RwdXNoX2RhdGFfbW92ZShza2IsIFZMQU5fSExFTiwgbWFjX2xlbiAtIEVUSF9UTEVOKTtcXG4gMzc5OlxcdFxcdGlmIChza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikpXFxuIDM4MDpcXHRcXHRcXHRza2ItXFx1MDAzZW1hY19oZWFkZXIgLT0gVkxBTl9ITEVOO1xcbiAzODE6XFx0XFxuIDM4MjpcXHRcXHR2ZXRoID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKShza2ItXFx1MDAzZWRhdGEgKyBtYWNfbGVuIC0gRVRIX0hMRU4pO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHQvKiBmaXJzdCwgdGhlIGV0aGVybmV0IHR5cGUgKi9cXG4gMzg1OlxcdFxcdGlmIChsaWtlbHkobWFjX2xlbiBcXHUwMDNlPSBFVEhfVExFTikpIHtcXG4gMzg2OlxcdFxcdFxcdC8qIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gc2hvdWxkIGFscmVhZHkgYmUgcG9wdWxhdGVkLCBhbmRcXG4gMzg3OlxcdFxcdFxcdCAqIHNrYi1cXHUwMDNlZGF0YSBoYXMgc3BhY2UgZm9yIGhfdmxhbl9wcm90b1xcbiAzODg6XFx0XFx0XFx0ICovXFxuIDM4OTpcXHRcXHRcXHR2ZXRoLVxcdTAwM2VoX3ZsYW5fcHJvdG8gPSB2bGFuX3Byb3RvO1xcbiAzOTA6XFx0XFx0fSBlbHNlIHtcXG4gMzkxOlxcdFxcdFxcdC8qIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gc2hvdWxkIG5vdCBiZSBwb3B1bGF0ZWQsIGFuZFxcbiAzOTI6XFx0XFx0XFx0ICogc2tiLVxcdTAwM2VkYXRhIGhhcyBubyBzcGFjZSBmb3IgaF92bGFuX3Byb3RvXFxuIDM5MzpcXHRcXHRcXHQgKi9cXG4gMzk0OlxcdFxcdFxcdHZldGgtXFx1MDAzZWhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gPSBza2ItXFx1MDAzZXByb3RvY29sO1xcbiAzOTU6XFx0XFx0fVxcbiAzOTY6XFx0XFxuIDM5NzpcXHRcXHQvKiBub3csIHRoZSBUQ0kgKi9cXG4gMzk4OlxcdFxcdHZldGgtXFx1MDAzZWhfdmxhbl9UQ0kgPSBodG9ucyh2bGFuX3RjaSk7XFxuIDM5OTpcXHRcXG4gNDAwOlxcdFxcdHJldHVybiAwO1xcbiA0MDE6XFx0fVxcbiA0MDI6XFx0XFxuIDQwMzpcXHQvKipcXG4gNDA0OlxcdCAqIF9fdmxhbl9pbnNlcnRfdGFnIC0gcmVndWxhciBWTEFOIHRhZyBpbnNlcnRpbmdcXG4gNDA1OlxcdCAqIEBza2I6IHNrYnVmZiB0byB0YWdcXG4gNDA2OlxcdCAqIEB2bGFuX3Byb3RvOiBWTEFOIGVuY2Fwc3VsYXRpb24gcHJvdG9jb2xcXG4gNDA3OlxcdCAqIEB2bGFuX3RjaTogVkxBTiBUQ0kgdG8gaW5zZXJ0XFxuIDQwODpcXHQgKlxcbiA0MDk6XFx0ICogSW5zZXJ0cyB0aGUgVkxBTiB0YWcgaW50byBAc2tiIGFzIHBhcnQgb2YgdGhlIHBheWxvYWRcXG4gNDEwOlxcdCAqIERvZXMgbm90IGNoYW5nZSBza2ItXFx1MDAzZXByb3RvY29sIHNvIHRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgZHVyaW5nIHJlY2VpdmUuXFxuIDQxMTpcXHQgKlxcbiA0MTI6XFx0ICogUmV0dXJuczogZXJyb3IgaWYgc2tiX2Nvd19oZWFkIGZhaWxzLlxcbiA0MTM6XFx0ICovXFxuIDQxNDpcXHRzdGF0aWMgaW5saW5lIGludCBfX3ZsYW5faW5zZXJ0X3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxNDowNi4yODM0NDU5NloiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4ODk3MTU5ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBWdWxuZXJhYmlsaXR5IGluIFZMQU4gVGFnIEluc2VydGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgaXQncyBhZGRpbmcgYSBWTEFOIHRhZyB0byB0aGUgYHNrYmAgKHNvY2tldCBidWZmZXIpLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlIHdhc24ndCB2ZXJpZnlpbmcgdGhhdCBlbm91Z2ggYnl0ZXMsIHNwZWNpZmljYWxseSBgbWFjX2xlbmAsIHdlcmUgYWN0dWFsbHkgcHJlc2VudCBpbiB0aGUgbGluZWFyIGJ1ZmZlciBvZiB0aGUgYHNrYmAgYmVmb3JlIHByb2NlZWRpbmcuIFRoZSBgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pYCBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byBndWFyYW50ZWUgdGhhdCBgc2tiLVx1MDAzZWRhdGFgIHRvIGBza2ItXHUwMDNldGFpbGAgY29udGFpbnMgYXQgbGVhc3QgdGhhdCBtYW55IGJ5dGVzLlxuXG5UaGUgY29yZSBvZiB0aGUgaXNzdWUgaXMgaGVyZTogaWYgYHBza2JfbWF5X3B1bGxgICpmYWlscyosIHRoZW4gb3BlcmF0aW9ucyBsaWtlIGBza2JfcG9zdHB1c2hfZGF0YV9tb3ZlKHNrYiwgVkxBTl9ITEVOLCBtYWNfbGVuIC0gRVRIX1RMRU4pYCBvciBhY2Nlc3NpbmcgYHNrYi1cdTAwM2VkYXRhICsgbWFjX2xlbiAtIEVUSF9ITEVOYCB3b3VsZCByZXN1bHQgaW4gYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIGJ1ZmZlciBvdmVyZmxvdy4gSW4gcGFydGljdWxhciwgdGhhdCBgc2tiX3Bvc3RwdXNoX2RhdGFfbW92ZWAgZnVuY3Rpb24gaXMgY2FsbGluZyBgbWVtbW92ZShza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWRhdGEgKyBWTEFOX0hMRU4sIG1hY19sZW4gLSBFVEhfVExFTik7YCBXaXRob3V0IGVuc3VyaW5nIHRoYXQgYHNrYi1cdTAwM2VkYXRhYCBoYXMgYXQgbGVhc3QgYG1hY19sZW5gIGJ5dGVzIHB1bGxlZCBpbnRvIHRoZSBsaW5lYXIgYnVmZmVyLCB0aGlzIGBtZW1tb3ZlYCBiZWNvbWVzIGEgcHJvYmxlbSBiZWNhdXNlIGl0J3MgcmVhZGluZyBvciB3cml0aW5nIHBhc3QgdGhlIGxpbmVhciBhcmVhIChPT0IgYWNjZXNzLCBoZWFwIGJ1ZmZlciBvdmVyZmxvdywgc2xhYi1vdXQtb2YtYm91bmRzLCBwb3RlbnRpYWxseSkuIFRoZSBvdGhlciBvcGVyYXRpb24gSSBzZWUgaXMgYHZldGggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopKHNrYi1cdTAwM2VkYXRhICsgbWFjX2xlbiAtIEVUSF9ITEVOKTtgLCBhbmQgdGhlbiBgdmV0aC1cdTAwM2VoX3ZsYW5fcHJvdG8gPSB2bGFuX3Byb3RvO2AgaXMgd3JpdGluZyB0byBgdmV0aGAuXG5cblNvLCB0aGUgbmV4dCBzdGVwIGlzIHRvIGRpZyBpbnRvIHRoZSBjb21taXQgaGlzdG9yeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoLCBpZiBhbnksIGlzIHN1cHBvc2VkIHRvIGJlIGFkZHJlc3NpbmcuIEknbGwgbmVlZCB0byB1c2UgYGdpdCBsb2dgIG9yIHBlcmhhcHMgYSBtb3JlIHRhcmdldGVkIGdyZXBwZXIgdG8gZmluZCByZWxhdGVkIGNvbW1pdHMgb3IgYW55IGluZm9ybWF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGlzc3VlIHRoYXQgdGhpcyBwb3RlbnRpYWwgZml4IGFkZHJlc3Nlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUyNiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjE0OjE1LjE4MDYwOTc0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM0MzA0NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBza2JfbWF5X3B1bGxcXFxcKHNrYiwgbWFjX2xlblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD0zNjE9c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM2Ny1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDozNjg6XFx0aWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbikpKVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM2OS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTQ6MTcuMzE0OTIxMTI0WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUzMDgyODYzMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBWTEFOIFRhZyBJbnNlcnRpb24gQ2FsbGVycyoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCBob3cgVkxBTiB0YWdzIGFyZSBpbnNlcnRlZCwgc3BlY2lmaWNhbGx5IGJ5IHRyYWNpbmcgdGhlIGNhbGxzIHRvIHRoZSByZWxldmFudCBmdW5jdGlvbnMuIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB0aGUgZnVuY3Rpb25zIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgYW5kIHRoZW4gYWxzbyB0aGUgZmFtaWxpZXMgb2YgYHZsYW5faW5zZXJ0X2lubmVyX3RhZ2AsIGBfX3ZsYW5faW5zZXJ0X3RhZ2AsIGFuZCBgdmxhbl9pbnNlcnRfdGFnYC4gV2UgbmVlZCB0byBtYXAgb3V0IHRoZSBjYWxsIHBhdGhzIHRvIHRoZXNlIGNvcmUgcm91dGluZXMgdG8gZ2FpbiBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBWTEFOIHRhZ2dpbmcgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBJJ20gdGhpbmtpbmcgd2UgY2FuIGdldCB0byB0aGUgcm9vdCBvZiBob3cgdGhlIHBhY2tldHMgYXJlIGJlaW5nIGNvbnN0cnVjdGVkLCBhbmQgaG93IHdlIGFyZSBidWlsZGluZyB0aGUgVkxBTiB0YWdzLCBhbmQgdGhlbiBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGluZWZmaWNpZW5jaWVzIGluIHRoZSBwcm9jZXNzLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gZm9sbG93IHRoZXNlIGNhbGxzIHRocm91Z2ggdGhlIHdob2xlIHN5c3RlbS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvZiB3aGVyZSB0aGUgVkxBTiBtYW5pcHVsYXRpb24gb2NjdXJzIGFuZCBob3cgZGlmZmVyZW50IGRyaXZlcnMgYW5kIG1vZHVsZXMgaW50ZXJhY3Qgd2l0aCB0aGUgVkxBTiBpbnNlcnRpb24gbG9naWMuIFRoZW4sIHdlIGNhbiBsb29rIGF0IHRoZSBkYXRhIGZsb3dzIGFuZCBhc3Nlc3MgcGVyZm9ybWFuY2UgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDc5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTQ6MjIuNjIzMjExMzQxWiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc1NzMwNzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZsYW5faW5zZXJ0X2lubmVyX3RhZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD0zMzk9c3RhdGljIGlubGluZSBib29sIHZsYW5faHdfb2ZmbG9hZF9jYXBhYmxlKG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzQ5LS8qKlxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjM1MDogKiBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyAtIGlubmVyIFZMQU4gdGFnIGluc2VydGluZ1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTM1MS0gKiBAc2tiOiBza2J1ZmYgdG8gdGFnXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0zNjAtICovXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6MzYxOnN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzYyLVxcdFxcdFxcdFxcdFxcdCAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTQxND1zdGF0aWMgaW5saW5lIGludCBfX3ZsYW5faW5zZXJ0X3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDE2LXtcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDo0MTc6XFx0cmV0dXJuIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHNrYiwgdmxhbl9wcm90bywgdmxhbl90Y2ksIEVUSF9ITEVOKTtcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MTgtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDIwLS8qKlxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQyMTogKiB2bGFuX2luc2VydF9pbm5lcl90YWcgLSBpbm5lciBWTEFOIHRhZyBpbnNlcnRpbmdcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MjItICogQHNrYjogc2tidWZmIHRvIHRhZ1xcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDM2LSAqL1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQzNzpzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp2bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MzgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIF9fYmUxNiB2bGFuX3Byb3RvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDQzLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQ0NDpcXHRlcnIgPSBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHZsYW5fcHJvdG8sIHZsYW5fdGNpLCBtYWNfbGVuKTtcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00NDUtXFx0aWYgKGVycikge1xcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg9NDY4PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnZsYW5faW5zZXJ0X3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDcwLXtcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDo0NzE6XFx0cmV0dXJuIHZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHZsYW5fcHJvdG8sIHZsYW5fdGNpLCBFVEhfSExFTik7XFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDcyLX1cXG4tLVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYz0xMD1ib29sIHZsYW5fZG9fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqKnNrYnApXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtNTEtXFx0XFx0c2tiX3B1c2goc2tiLCBvZmZzZXQpO1xcbm5ldC84MDIxcS92bGFuX2NvcmUuYzo1MjpcXHRcXHRza2IgPSAqc2ticCA9IHZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHNrYi1cXHUwMDNldmxhbl9wcm90byxcXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtNTMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHNrYi1cXHUwMDNldmxhbl90Y2ksIHNrYi1cXHUwMDNlbWFjX2xlbik7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X21wbHMuYz01Mz1UQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX21wbHNfYWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X21wbHMuYy05MC1cXHRcXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkge1xcbm5ldC9zY2hlZC9hY3RfbXBscy5jOjkxOlxcdFxcdFxcdGlmIChfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHNrYi1cXHUwMDNldmxhbl9wcm90byxcXG5uZXQvc2NoZWQvYWN0X21wbHMuYy05Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgc2tiX3ZsYW5fdGFnX2dldChza2IpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxNDoyNC4xOTg5NTU3NjdaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjExMzg4NTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVkxBTiBUYWcgSW5zZXJ0aW9uIGluIHRoZSBOZXR3b3JrIFN0YWNrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IFZMQU4gdGFncyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHRoZSBpbnNlcnRpb24gcHJvY2Vzcy4gSSBzZWUgdGhhdCBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHR3byBpbnRlcmVzdGluZyBwbGFjZXM6IGBuZXQvc2NoZWQvYWN0X21wbHMuY2AsIHdoaWNoIGlzIGxpa2VseSByZWxhdGVkIHRvIE1QTFMgKE11bHRpcHJvdG9jb2wgTGFiZWwgU3dpdGNoaW5nKSB0cmFmZmljLCBhbmQgYG5ldC84MDIxcS92bGFuX2NvcmUuY2AgdGhyb3VnaCBgdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEknZCBleHBlY3QgZm9yIHN0YW5kYXJkIFZMQU4gY29yZSBmdW5jdGlvbmFsaXR5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2VlIGlmIGFueSB1bmV4cGVjdGVkIGNhbGxpbmcgcGF0dGVybnMgZW1lcmdlLlxuXG5Ob3csIGBfX3ZsYW5faW5zZXJ0X3RhZ2AgaXMgYWxzbyBjYWxsZWQgZWxzZXdoZXJlLCBub3QganVzdCBpbiB0aGlzIHNwZWNpZmljIGlubmVyIHRhZyBzY2VuYXJpby4gU28sIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUsIEkgbmVlZCB0byBjaGVjayB0aGUgYnJvYWRlciBjYWxsIGdyYXBoIG9mICpib3RoKiBgX192bGFuX2luc2VydF90YWdgIGFuZCBpdHMgd3JhcHBlciBmdW5jdGlvbiBgdmxhbl9pbnNlcnRfdGFnYC4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgZGlmZmVyZW50IGNvbnRleHRzIHdoZXJlIFZMQU4gdGFnIGluc2VydGlvbiBpcyB1c2VkIGFuZCBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsLiBJJ2xsIG5lZWQgdG8gdHJhY2UgYWxsIHBvdGVudGlhbCBjYWxsZXJzIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc3MSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxNDozMC4zMTI4NDQwMTdaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MDY2NTU2NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX192bGFuX2luc2VydF90YWdcXFxcYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Njc2kvcWVkaS9xZWRpX21haW4uYz02Njc9c3RhdGljIGludCBxZWRpX2xsMl9yeCh2b2lkICpjb29raWUsIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBhcmcxLCB1MzIgYXJnMilcXG4tLVxcbmRyaXZlcnMvc2NzaS9xZWRpL3FlZGlfbWFpbi5jLTcyMi1cXHRpZiAod29yay1cXHUwMDNldmxhbl9pZClcXG5kcml2ZXJzL3Njc2kvcWVkaS9xZWRpX21haW4uYzo3MjM6XFx0XFx0X192bGFuX2luc2VydF90YWcod29yay1cXHUwMDNlc2tiLCBodG9ucyhFVEhfUF84MDIxUSksIHdvcmstXFx1MDAzZXZsYW5faWQpO1xcbmRyaXZlcnMvc2NzaS9xZWRpL3FlZGlfbWFpbi5jLTcyNC1cXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTM2MT1zdGF0aWMgaW5saW5lIGludCBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDAzLS8qKlxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQwNDogKiBfX3ZsYW5faW5zZXJ0X3RhZyAtIHJlZ3VsYXIgVkxBTiB0YWcgaW5zZXJ0aW5nXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDA1LSAqIEBza2I6IHNrYnVmZiB0byB0YWdcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQxMy0gKi9cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDo0MTQ6c3RhdGljIGlubGluZSBpbnQgX192bGFuX2luc2VydF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00MTUtXFx0XFx0XFx0XFx0ICAgIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl90Y2kpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz02NDg5PWludCBza2Jfdmxhbl9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl90Y2kpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02NTAwLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjY1MDE6XFx0XFx0ZXJyID0gX192bGFuX2luc2VydF90YWcoc2tiLCBza2ItXFx1MDAzZXZsYW5fcHJvdG8sXFxubmV0L2NvcmUvc2tidWZmLmMtNjUwMi1cXHRcXHRcXHRcXHRcXHRza2Jfdmxhbl90YWdfZ2V0KHNrYikpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxNDozMy4yMTk1MjE4NjJaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTcyOTQxNjY0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgYHZsYW5faW5zZXJ0X3RhZ2AqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGEgc3BlY2lmaWMgZnVuY3Rpb24sIGB2bGFuX2luc2VydF90YWdgLiBJdCdzIHdvcnRoIGRpZ2dpbmcgaW50bywgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgY3VycmVudCBjb250ZXh0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQsIHBhcnRpY3VsYXJseSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggVkxBTiB0YWdnaW5nLiBHaXZlbiBteSBleHBlcnRpc2UsIEnigJlsbCBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGl0LiBJIHdhbnQgdG8gcXVpY2tseSBldmFsdWF0ZSB0aGlzLCB0byBlbnN1cmUgbm8gaGlkZGVuIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY0NywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjE0OjM0Ljk0ODk0MTE2NVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3ODMyNTEzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXFxcYnZsYW5faW5zZXJ0X3RhZ1xcXFxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTQzNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp2bGFuX2luc2VydF9pbm5lcl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTQ1Mi0vKipcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDo0NTM6ICogdmxhbl9pbnNlcnRfdGFnIC0gcmVndWxhciBWTEFOIHRhZyBpbnNlcnRpbmdcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00NTQtICogQHNrYjogc2tidWZmIHRvIHRhZ1xcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDY3LSAqL1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQ2ODpzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp2bGFuX2luc2VydF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00NjktXFx0XFx0XFx0XFx0XFx0ICAgICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSlcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTQ4OD1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp2bGFuX2luc2VydF90YWdfc2V0X3Byb3RvKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC00OTEte1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjQ5MjpcXHRza2IgPSB2bGFuX2luc2VydF90YWcoc2tiLCB2bGFuX3Byb3RvLCB2bGFuX3RjaSk7XFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNDkzLVxcdGlmIChza2IpXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9MTA9Ym9vbCB2bGFuX2RvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipza2JwKVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTQ2LVxcdFxcdC8qXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjQ3OlxcdFxcdCAqIHZsYW5faW5zZXJ0X3RhZyBleHBlY3Qgc2tiLVxcdTAwM2VkYXRhIHBvaW50aW5nIHRvIG1hYyBoZWFkZXIuXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTQ4LVxcdFxcdCAqIFNvIGNoYW5nZSBza2ItXFx1MDAzZWRhdGEgYmVmb3JlIGNhbGxpbmcgaXQgYW5kIGNoYW5nZSBiYWNrIHRvXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYz0zMzc9c3RhdGljIHZvaWQgYmF0YWR2X2JsYV9zZW5kX2NsYWltKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICptYWMsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYy00MjgtXFx0aWYgKHZpZCBcXHUwMDI2IEJBVEFEVl9WTEFOX0hBU19UQUcpIHtcXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYzo0Mjk6XFx0XFx0c2tiID0gdmxhbl9pbnNlcnRfdGFnKHNrYiwgaHRvbnMoRVRIX1BfODAyMVEpLFxcbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jLTQzMC1cXHRcXHRcXHRcXHQgICAgICB2aWQgXFx1MDAyNiBWTEFOX1ZJRF9NQVNLKTtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jPTExOTk9YmF0YWR2X2RhdF9hcnBfY3JlYXRlX3JlcGx5KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIF9fYmUzMiBpcF9zcmMsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy0xMjEyLVxcdGlmICh2aWQgXFx1MDAyNiBCQVRBRFZfVkxBTl9IQVNfVEFHKVxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jOjEyMTM6XFx0XFx0c2tiID0gdmxhbl9pbnNlcnRfdGFnKHNrYiwgaHRvbnMoRVRIX1BfODAyMVEpLFxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTEyMTQtXFx0XFx0XFx0XFx0ICAgICAgdmlkIFxcdTAwMjYgVkxBTl9WSURfTUFTSyk7XFxuLS1cXG5uZXQvZHNhL3RhZ184MDIxcS5jPTQ2ND1zdHJ1Y3Qgc2tfYnVmZiAqZHNhXzgwMjFxX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbm5ldC9kc2EvdGFnXzgwMjFxLmMtNDY3LVxcdC8qIHNrYi1cXHUwMDNlZGF0YSBwb2ludHMgYXQgdGhlIE1BQyBoZWFkZXIsIHdoaWNoIGlzIGZpbmVcXG5uZXQvZHNhL3RhZ184MDIxcS5jOjQ2ODpcXHQgKiBmb3Igdmxhbl9pbnNlcnRfdGFnKCkuXFxubmV0L2RzYS90YWdfODAyMXEuYy00NjktXFx0ICovXFxubmV0L2RzYS90YWdfODAyMXEuYzo0NzA6XFx0cmV0dXJuIHZsYW5faW5zZXJ0X3RhZyhza2IsIGh0b25zKHRwaWQpLCB0Y2kpO1xcbm5ldC9kc2EvdGFnXzgwMjFxLmMtNDcxLX1cXG4tLVxcbm5ldC9kc2EvdGFnX3NqYTExMDUuYz0yNDE9c3RhdGljIHN0cnVjdCBza19idWZmICpzamExMTA1X3B2aWRfdGFnX2NvbnRyb2xfcGt0KHN0cnVjdCBkc2FfcG9ydCAqZHAsXFxuLS1cXG5uZXQvZHNhL3RhZ19zamExMTA1LmMtMjYyLVxcbm5ldC9kc2EvdGFnX3NqYTExMDUuYzoyNjM6XFx0cmV0dXJuIHZsYW5faW5zZXJ0X3RhZyhza2IsIHhtaXRfdHBpZCwgKHBjcCBcXHUwMDNjXFx1MDAzYyBWTEFOX1BSSU9fU0hJRlQpIHxcXG5uZXQvZHNhL3RhZ19zamExMTA1LmMtMjY0LVxcdFxcdFxcdCAgICAgICBTSkExMTA1X0RFRkFVTFRfVkxBTik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjE0OjM2LjkyNzI3MzUwOFoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0OTkwMjM2OTk5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoJ3MgSW1wYWN0KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHVuZGVyc3RhbmQgdGhlIGJ1ZyBpdCdzIGFkZHJlc3NpbmcuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gd2hhdCB3YXMgYnJva2VuICpiZWZvcmUqIHRoZSBwYXRjaC4gU3BlY2lmaWNhbGx5LCBJJ20gZXhhbWluaW5nIHRoaXMgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCBmdW5jdGlvbiwgd2hpY2ggc2VlbXMgcmVzcG9uc2libGUgZm9yIGluamVjdGluZyBWTEFOIHRhZ3MgaW50byBhbiBgc2tfYnVmZmAuIFRoZSBjb2RlIHNuaXBwZXQncyBzdHJ1Y3R1cmUgaXMgZmFtaWxpYXIsIGJ1dCBJJ2xsIHdhbGsgdGhyb3VnaCBpdCBtZXRob2RpY2FsbHkuXG5cbkkgc2VlIGEgY2hlY2sgcmVsYXRlZCB0byBgbWFjX2xlbmAgYW5kIHRoZW4gdGhpcyBpbnRlcmVzdGluZyBgc2tiX3Bvc3RwdXNoX2RhdGFfbW92ZWAgY2FsbC4gVGhlIGludGVudCBvZiB0aGUgY29kZSBzZWVtcyB0byBiZSBwdXNoaW5nIGEgVkxBTiBoZWFkZXIgb250byB0aGUgYHNrYmAgYW5kIHRoZW4gc2hpZnRpbmcgYSBwb3J0aW9uIG9mIHRoZSBvcmlnaW5hbCBNQUMgaGVhZGVyLiBCdXQgdGhlcmUncyBhIGNvbmRpdGlvbiByZWxhdGVkIHRvIGBtYWNfbGVuYCBub3QgYmVpbmcgZnVsbHkgcHJlc2VudCBpbiB0aGUgbGluZWFyIGJ1ZmZlci4gSWYgYHNrYl9oZWFkbGVuKHNrYikgXHUwMDNjIG1hY19sZW5gLCB0aGVuIGBza2JfcG9zdHB1c2hfZGF0YV9tb3ZlYCBiZWNvbWVzIGNyaXRpY2FsLlxuXG5UbyB1bmRlcnN0YW5kIHRoZSBidWcsIEkgbmVlZCB0byBrbm93IHByZWNpc2VseSB3aGF0IGBza2JfcG9zdHB1c2hfZGF0YV9tb3ZlYCAqZG9lcyogdW5kZXIgdGhlc2UgcG90ZW50aWFsbHkgbm9uLWNvbnRpZ3VvdXMgYnVmZmVyIGNvbmRpdGlvbnMuIFRpbWUgdG8gYnJlYWsgb3V0IHRoZSBncmVwIGFuZCBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UgdG8gc2VlIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBkb2luZy4gVGhlIGJ1ZyBsaWtlbHkgaW52b2x2ZXMgaW5jb3JyZWN0IGFzc3VtcHRpb25zIGFib3V0IGRhdGEgbW92ZW1lbnQgaW4gdGhlc2Ugbm9uLWxpbmVhciBza2Igc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTcxLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjE1OjI2LjgyOTY0Njg1NVoiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2ODkxOTg2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2JfcG9zdHB1c2hfZGF0YV9tb3ZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTM2MT1zdGF0aWMgaW5saW5lIGludCBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzc3LVxcdGlmIChsaWtlbHkobWFjX2xlbiBcXHUwMDNlIEVUSF9UTEVOKSlcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDozNzg6XFx0XFx0c2tiX3Bvc3RwdXNoX2RhdGFfbW92ZShza2IsIFZMQU5fSExFTiwgbWFjX2xlbiAtIEVUSF9UTEVOKTtcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0zNzktXFx0aWYgKHNrYl9tYWNfaGVhZGVyX3dhc19zZXQoc2tiKSlcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NDYzMT1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX21ldGFkYXRhX2NsZWFyKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQ2NDctICpcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQ2NDg6ICogUHJlZmVyIHNrYl9wb3N0cHVsbF9kYXRhX21vdmUoKSBvciBza2JfcG9zdHB1c2hfZGF0YV9tb3ZlKCkgdG8gY2FsbGluZyB0aGlzXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NjQ5LSAqIGhlbHBlciBkaXJlY3RseS5cXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NDY4Nz1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Bvc3RwdWxsX2RhdGFfbW92ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00Njk1LS8qKlxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDY5NjogKiBza2JfcG9zdHB1c2hfZGF0YV9tb3ZlIC0gTW92ZSBwYWNrZXQgZGF0YSBhbmQgbWV0YWRhdGEgYWZ0ZXIgc2tiX3B1c2goKS5cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQ2OTctICogQHNrYjogcGFja2V0IHRvIG9wZXJhdGUgb25cXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNDcwMi0gKi9cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQ3MDM6c3RhdGljIGlubGluZSB2b2lkIHNrYl9wb3N0cHVzaF9kYXRhX21vdmUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQ3MDQtXFx0XFx0XFx0XFx0XFx0ICBjb25zdCB1bnNpZ25lZCBpbnQgbGVuLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MzM0ND1zdGF0aWMgaW50IGJwZl9za2JfZ2VuZXJpY19wdXNoKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmYsIHUzMiBsZW4pXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0zMzQ5LVxcdHNrYl9wdXNoKHNrYiwgbGVuKTtcXG5uZXQvY29yZS9maWx0ZXIuYzozMzUwOlxcdHNrYl9wb3N0cHVzaF9kYXRhX21vdmUoc2tiLCBsZW4sIG9mZik7XFxubmV0L2NvcmUvZmlsdGVyLmMtMzM1MS1cXHRtZW1zZXQoc2tiLVxcdTAwM2VkYXRhICsgb2ZmLCAwLCBsZW4pO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDA2Mj1zdGF0aWMgaW5saW5lIGludCBfX2JwZl9za2JfY2hhbmdlX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGhlYWRfcm9vbSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQwODYtXFx0XFx0X19za2JfcHVzaChza2IsIGhlYWRfcm9vbSk7XFxubmV0L2NvcmUvZmlsdGVyLmM6NDA4NzpcXHRcXHRza2JfcG9zdHB1c2hfZGF0YV9tb3ZlKHNrYiwgaGVhZF9yb29tLCAwKTtcXG5uZXQvY29yZS9maWx0ZXIuYy00MDg4LVxcdFxcdG1lbXNldChza2ItXFx1MDAzZWRhdGEsIDAsIGhlYWRfcm9vbSk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yMjc1PUVYUE9SVF9TWU1CT0woX19wc2tiX2NvcHlfZmNsb25lKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTIyOTItICpcXHROb3RlOiBJZiB5b3Ugc2tiX3B1c2goKSB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlciBhZnRlciByZWFsbG9jYXRpbmcgdGhlXFxubmV0L2NvcmUvc2tidWZmLmM6MjI5MzogKlxcdGhlYWRlciwgY2FsbCBza2JfcG9zdHB1c2hfZGF0YV9tb3ZlKCkgZmlyc3QgdG8gbW92ZSB0aGUgbWV0YWRhdGEgb3V0IG9mXFxubmV0L2NvcmUvc2tidWZmLmMtMjI5NC0gKlxcdHRoZSB3YXkgYmVmb3JlIHdyaXRpbmcgdG8gXFx1MDAyNnNrX2J1ZmYtXFx1MDAzZWRhdGEuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjE1OjI4LjY5ODU3Mjk5M1oiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNTEyNjkwNzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBza2JfcG9zdHB1c2hfZGF0YV9tb3ZlYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgY29uZmlybWluZyB0aGUgZGVmaW5pdGlvbiBvZiBgc2tiX3Bvc3RwdXNoX2RhdGFfbW92ZWAuIE5vIG5lZWQgdG8gcmVseSBvbiBhc3N1bXB0aW9ucyBvciBtZW1vcnkgaGVyZTsgSSdtIGhlYWRpbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSwgdGhlIGRlZmluaXRpdmUgYW5zd2VyOiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAuIFRoaXMgZnVuY3Rpb24ncyBiZWhhdmlvciBpcyBjcml0aWNhbCB0byBteSBjdXJyZW50IHRhc2ssIHNvIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIEkgaGF2ZSBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBpdCBkb2VzIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IGl0J3MgKnN1cHBvc2VkKiB0byBiZWhhdmUuIExldCdzIHNlZSB3aGF0IHRoZSBoZWFkZXIgaGFzIHRvIHNheSBhYm91dCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MzcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxNTozMS4yMTEyNjY2OThaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE1NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDcwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDcwMDpcXHQgKlxcbjQ3MDE6XFx0ICogU2VlIHNrYl9kYXRhX21vdmUoKSBmb3IgZGV0YWlscy5cXG40NzAyOlxcdCAqL1xcbjQ3MDM6XFx0c3RhdGljIGlubGluZSB2b2lkIHNrYl9wb3N0cHVzaF9kYXRhX21vdmUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG40NzA0OlxcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3QgdW5zaWduZWQgaW50IGxlbixcXG40NzA1OlxcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3QgdW5zaWduZWQgaW50IG4pXFxuNDcwNjpcXHR7XFxuNDcwNzpcXHRcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKGxlbiBcXHUwMDNlIElOVF9NQVgpO1xcbjQ3MDg6XFx0XFx0c2tiX2RhdGFfbW92ZShza2IsIC1sZW4sIG4pO1xcbjQ3MDk6XFx0fVxcbjQ3MTA6XFx0XFxuNDcxMTpcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2Nsb25lX3NrKHN0cnVjdCBza19idWZmICpza2IpO1xcbjQ3MTI6XFx0XFxuNDcxMzpcXHQjaWZkZWYgQ09ORklHX05FVFdPUktfUEhZX1RJTUVTVEFNUElOR1xcbjQ3MTQ6XFx0XFxuNDcxNTpcXHR2b2lkIHNrYl9jbG9uZV90eF90aW1lc3RhbXAoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuNDcxNjpcXHRib29sIHNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuNDcxNzpcXHRcXG40NzE4OlxcdCNlbHNlIC8qIENPTkZJR19ORVRXT1JLX1BIWV9USU1FU1RBTVBJTkcgKi9cXG40NzE5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxNTozMS4yMTE2OTM5NTlaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjA0MzQ2ODI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIGBza2JfZGF0YV9tb3ZlYCoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgc2tiX2RhdGFfbW92ZWAgYW5kIEkgd2FudCB0byB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0IGl0J3MgZG9pbmcuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgc291cmNlLiBMZXQgbWUgcHVsbCB1cCBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAgYW5kIHNjYW4gbGluZXMgNDY1MCB0byA0Njg2LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGVzZSBjb3JlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGhhdmUga2V5IGlubGluZSBkb2N1bWVudGF0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBjcnVjaWFsIGJpdHMgb2YgaW5mb3JtYXRpb246IGRvZXMgaXQgc2ltcGx5IG1vdmUgdGhlIGRhdGEgcG9pbnRlcj8gSXMgdGhlcmUgYW55IG1lbW9yeSBhbGxvY2F0aW9uIG9yIGZyZWVpbmcgaW52b2x2ZWQ/IERvZXMgaXQgY29uc2lkZXIgdGhlIHBhY2tldCdzIG1ldGFkYXRhIGFuZCBjb250cm9sIHRoZSBidWZmZXIncyByZWZlcmVuY2UgY291bnQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGZyb20gYSBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgcGVyc3BlY3RpdmUuIFRoaXMgcmVxdWlyZXMgYSB0aG9yb3VnaCBhbmFseXNpcyBvZiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgYHNrYmAgc3RydWN0dXJlLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW1wbGljYXRpb25zIGZvciBhbnkgb3RoZXIgcHJvY2Vzc2VzIHVzaW5nIHRoaXMgYHNrYmAuIEFscmlnaHQsIGxldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDY4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxNTozMy4yNTUxNjU5NDJaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzMDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDY1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDY1MDpcXHQgKi9cXG40NjUxOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZGF0YV9tb3ZlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IGludCBsZW4sXFxuNDY1MjpcXHRcXHRcXHRcXHRcXHQgY29uc3QgdW5zaWduZWQgaW50IG4pXFxuNDY1MzpcXHR7XFxuNDY1NDpcXHRcXHRjb25zdCB1OCBtZXRhX2xlbiA9IHNrYl9tZXRhZGF0YV9sZW4oc2tiKTtcXG40NjU1OlxcdFxcdHU4ICptZXRhLCAqbWV0YV9lbmQ7XFxuNDY1NjpcXHRcXG40NjU3OlxcdFxcdGlmICghbGVuIHx8ICghbiBcXHUwMDI2XFx1MDAyNiAhbWV0YV9sZW4pKVxcbjQ2NTg6XFx0XFx0XFx0cmV0dXJuO1xcbjQ2NTk6XFx0XFxuNDY2MDpcXHRcXHRpZiAoIW1ldGFfbGVuKVxcbjQ2NjE6XFx0XFx0XFx0Z290byBub19tZXRhZGF0YTtcXG40NjYyOlxcdFxcbjQ2NjM6XFx0XFx0bWV0YV9lbmQgPSBza2JfbWV0YWRhdGFfZW5kKHNrYik7XFxuNDY2NDpcXHRcXHRtZXRhID0gbWV0YV9lbmQgLSBtZXRhX2xlbjtcXG40NjY1OlxcdFxcbjQ2NjY6XFx0XFx0aWYgKFdBUk5fT05fT05DRShtZXRhX2VuZCArIGxlbiAhPSBza2ItXFx1MDAzZWRhdGEgfHxcXG40NjY3OlxcdFxcdFxcdFxcdCBtZXRhX2xlbiBcXHUwMDNlIHNrYl9oZWFkcm9vbShza2IpKSkge1xcbjQ2Njg6XFx0XFx0XFx0c2tiX21ldGFkYXRhX2NsZWFyKHNrYik7XFxuNDY2OTpcXHRcXHRcXHRnb3RvIG5vX21ldGFkYXRhO1xcbjQ2NzA6XFx0XFx0fVxcbjQ2NzE6XFx0XFxuNDY3MjpcXHRcXHRtZW1tb3ZlKG1ldGEgKyBsZW4sIG1ldGEsIG1ldGFfbGVuICsgbik7XFxuNDY3MzpcXHRcXHRyZXR1cm47XFxuNDY3NDpcXHRcXG40Njc1OlxcdG5vX21ldGFkYXRhOlxcbjQ2NzY6XFx0XFx0bWVtbW92ZShza2ItXFx1MDAzZWRhdGEsIHNrYi1cXHUwMDNlZGF0YSAtIGxlbiwgbik7XFxuNDY3NzpcXHR9XFxuNDY3ODpcXHRcXG40Njc5OlxcdC8qKlxcbjQ2ODA6XFx0ICogc2tiX3Bvc3RwdWxsX2RhdGFfbW92ZSAtIE1vdmUgcGFja2V0IGRhdGEgYW5kIG1ldGFkYXRhIGFmdGVyIHNrYl9wdWxsKCkuXFxuNDY4MTpcXHQgKiBAc2tiOiBwYWNrZXQgdG8gb3BlcmF0ZSBvblxcbjQ2ODI6XFx0ICogQGxlbjogbnVtYmVyIG9mIGJ5dGVzIHB1bGxlZCBmcm9tIFxcdTAwMjZza19idWZmLVxcdTAwM2VkYXRhXFxuNDY4MzpcXHQgKiBAbjogbnVtYmVyIG9mIGJ5dGVzIHRvIG1lbW1vdmUoKSBmcm9tIHByZS1wdWxsIFxcdTAwMjZza19idWZmLVxcdTAwM2VkYXRhXFxuNDY4NDpcXHQgKlxcbjQ2ODU6XFx0ICogU2VlIHNrYl9kYXRhX21vdmUoKSBmb3IgZGV0YWlscy5cXG40Njg2OlxcdCAqL1xcbjQ2ODc6XFx0c3RhdGljIGlubGluZSB2b2lkIHNrYl9wb3N0cHVsbF9kYXRhX21vdmUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG40Njg4OlxcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3QgdW5zaWduZWQgaW50IGxlbixcXG40Njg5OlxcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3QgdW5zaWduZWQgaW50IG4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjE1OjMzLjI1NTQzMTcwM1oiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMzk0MjQyMjgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyBpbiBWTEFOIEluc2VydGlvbioqXG5cbk9rYXksIHNvIGBza2JfZGF0YV9tb3ZlYCB1c2VzIGBtZW1tb3ZlYCwgYW5kIHRoaXMgY29kZSdzIGFjY2Vzc2luZyBgc2tiLVx1MDAzZWRhdGEgKyBtYWNfbGVuIC0gRVRIX0hMRU5gIHdoZW4gY29uc3RydWN0aW5nIHRoZSBWTEFOIGhlYWRlci4gSWYgYG1hY19sZW5gIGlzIGdyZWF0ZXIgdGhhbiBgc2tiX2hlYWRsZW4oc2tiKWAsIHdlJ3JlIHBvdGVudGlhbGx5IHJlYWRpbmcgb3Igd3JpdGluZyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIGxpbmVhciBidWZmZXIsIHBvc3NpYmx5IGludG8gdGhlIHRhaWxyb29tIG9yIGV2ZW4gaW50byBwYWdlZCBkYXRhLCB3aGljaCBpcyBhbiBPT0IgcmVhZCBvciB3cml0ZS4gS0FTQU4gc2hvdWxkIGNhdGNoIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9uIGBza2ItXHUwMDNlaGVhZGAsIGJ1dCBkb2VzIHRoaXMgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnkgc3BlY2lmaWNhbGx5P1xuXG5MZXQncyBsb29rIGF0IHRoZSBwcm92aWRlZCBjb2RlIGFnYWluOiBpdCBpbnRyb2R1Y2VzIGEgY2hlY2sgdXNpbmcgYHBza2JfbWF5X3B1bGwoc2tiLCBtYWNfbGVuKWAuICBEb2VzIHRoaXMgYWRkaXRpb24gZml4IG9yIHBvdGVudGlhbGx5IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXM/ICBgcHNrYl9tYXlfcHVsbChza2IsIGxlbilgIGNoZWNrcyBpZiBgbGVuYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHNrYl9oZWFkbGVuKHNrYilgLiBJZiBub3QsIGl0IGNhbGxzIGBfX3Bza2JfcHVsbF90YWlsYC4gSWYgdGhlIHRvdGFsIFNLQiBsZW5ndGggaXMgbGVzcyB0aGFuIGBsZW5gLCBgcHNrYl9tYXlfcHVsbGAgcmV0dXJucyAwLiBOb3csIGlmIHRoZSBwYXRjaCBjb25kaXRpb24gYCFwc2tiX21heV9wdWxsKHNrYiwgbWFjX2xlbilgIGlzIHRydWUsIGl0IHJldHVybnMgYC1FSU5WQUxgLlxuXG5CZWZvcmUgdGhlIHBhdGNoLCBpZiB0aGUgU0tCIGRpZG4ndCBoYXZlIGVub3VnaCBsaW5lYXIgYnl0ZXMgKG9yIHdhcyBzaG9ydGVyIHRoYW4gYG1hY19sZW5gKSwgdGhlIGNvZGUgd291bGQgcHJvY2VlZCB0byBgc2tiX2Nvd19oZWFkYCBhbmQgYHNrYl9wdXNoYCwgYnV0IGFsc28gYWNjZXNzIG1lbW9yeSBhdCBgc2tiLVx1MDAzZWRhdGEgKyBtYWNfbGVuIC0gRVRIX0hMRU5gIG9yIHBlcmZvcm0gYG1lbW1vdmVgIHdpdGggYG1hY19sZW4gLSBFVEhfVExFTmAuICBJZiBgbWFjX2xlbmAgZXhjZWVkcyBgc2tiLVx1MDAzZWxlbmAsIGNvdWxkIHRoaXMgb3BlcmF0aW9uIHBvdGVudGlhbGx5IHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnk/XG5cblllcywgaWYgYG1hY19sZW4gXHUwMDNlIHNrYi1cdTAwM2VsZW5gIG9yIGBtYWNfbGVuIFx1MDAzZSBza2JfaGVhZGxlbihza2IpYC4gVGhlIGBza2ItXHUwMDNlZGF0YWAgcG9pbnRzIHRvIHRoZSBwYWNrZXQgZGF0YSBpbiB0aGUgYWxsb2NhdGVkIGhlYWQgYnVmZmVyIChlaXRoZXIga21hbGxvYydkIG9yIHBhZ2UgYWxsb2NhdGVkKS4gVGhlIG1lbW9yeSBiZXlvbmQgYHNrYi1cdTAwM2V0YWlsYCB3aXRoaW4gdGhpcyBhbGxvY2F0aW9uICh0YWlscm9vbSkgaXMgKnVuaW5pdGlhbGl6ZWQqLiAgV2FpdCwgaXMgdGFpbHJvb20gdW5pbml0aWFsaXplZCBtZW1vcnk/IElmIHRoZSBjb2RlIHJlYWRzIHBhc3QgYHNrYi1cdTAwM2V0YWlsYCB3aXRoaW4gdGhlIHNsYWIgYWxsb2NhdGlvbiwgb3IgcGFzdCB0aGUgZW5kIG9mIHRoZSBzbGFiLCB0aGVuIEtBU0FOIGNhdGNoZXMgaXQgd2l0aCBhIHNsYWItb3V0LW9mLWJvdW5kcyBvciBnbG9iYWwtb3V0LW9mLWJvdW5kcyByZWFkIGVycm9yLlxuXG5Pa2F5LCBLQVNBTiB0cmFja3MgYGttYWxsb2NgIG9iamVjdHMuICBgc2tiLVx1MDAzZXRhaWxgIGlzIGEgbG9naWNhbCBtYXJrZXIgd2l0aGluIHRoZSBza2IgZGF0YSBidWZmZXIgKGBza2ItXHUwMDNlaGVhZGAgdG8gYHNrYi1cdTAwM2VlbmRgKS4gRG9lcyBLQVNBTiBvciBLTVNBTiBjYXRjaCByZWFkcyB3aXRoaW4gdGhlIFNLQiB0YWlscm9vbT8gV2FpdC4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGhhbmRsZSB0aGUgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuXG5cbldhaXQsIHRoZSBwcm9tcHQgZGlmZmVyZW50aWF0ZXMgS0FTQU4gYW5kIEtNU0FOLiAgU3RhbmRhcmQgS0FTQU4gYWxyZWFkeSBoYXMgY29tcHJlaGVuc2l2ZSBkZWJ1Z2dpbmcgdG9vbHMuIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeS4gVGhlIHByb21wdCBzdGF0ZXMgdG8gb25seSB1c2UgS01TQU4gaWYgY29kZSBjaGFuZ2VzIGludHJvZHVjZSByaXNrcyAqb25seSogZGV0ZWN0ZWQgYnkgS01TQU4uICBUaGlzIGlzIGltcG9ydGFudC4gS01TQU4gaXMgZXhwZW5zaXZlLCBhbmQgc2hvdWxkIGJlIHRoZSBsYXN0IHJlc29ydC5cblxuVGhlIHJ1bGU6IE9ubHkgc2V0IGBOZWVkc0tNU0FOPXRydWVgIGlmIHRoZSBwYXRjaCBtb2RpZmllcyBrZXJuZWwgZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UsIGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGludm9sdmVzIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgYWx0ZXJzIGJvdW5kcyBjaGVja2luZyBpbiB3YXlzIHRoYXQgYWxsb3dzIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuICBXZSAqZG9uJ3QqIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgaWYgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgKEtBU0FOIGNhdGNoZXMgdGhlc2UpIG9yIGlmIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLlxuXG5MZXQncyBmb2N1cyBvbiB3aGF0IHRoZSBwYXRjaCBkb2VzLCBhZ2Fpbi4gVGhlIHBhdGNoIGFkZHMgYGlmICghcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pKSByZXR1cm4gLUVJTlZBTDtgLiBUaGlzIGlzIGEgc3RhbmRhcmQgYm91bmRzIGNoZWNrLiBXaHkgd2FzIHRoaXMgYWRkZWQ/IEl0J3MgbGlrZWx5IGEgc2FuaXR5IGNoZWNrLCBhIHNhZmV0eSBjaGVjayB0byBhdm9pZCBPT0IgcmVhZHMuICBJIG5lZWQgdG8gZmluZCB0aGUgdXBzdHJlYW0gY29tbWl0L2ZpeC9jb250ZXh0LiAgSSBjYW4ndCBydW4gYGdpdCBsb2dgLCBvbmx5IGBncmVwcGVyYC5cblxuSSBuZWVkIHRvIHNlZSBpZiBgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pYCBpcyB1c2VkIGVsc2V3aGVyZS4gSXMgdGhlcmUgY29udGV4dCBhdmFpbGFibGUgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IG9mIHRoZSBjaGVjaz9cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NzEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTY6MDcuMTk3ODU3NTkyWiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjkyMTE3NTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBza2JfbWF5X3B1bGxcXFxcKHNrYiwgLiptYWNfbGVuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTM2MT1zdGF0aWMgaW5saW5lIGludCBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzY3LVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjM2ODpcXHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBtYWNfbGVuKSkpXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMzY5LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxNjowOS40ODk5ODI1NjZaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDU0MzYxNTE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBWTEFOIEluc2VydGlvbiBJc3N1ZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBoYXBwZW5pbmcgd2l0aCB0aGlzIGNvbW1pdC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBqb2cgbXkgbWVtb3J5IOKAkyB3aGF0IHdhcyB0aGUgY29tbWl0IGRpcmVjdGx5IGJlZm9yZSB0aGlzIG9uZT8gR290IGl0LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCB3aGVyZSBpcyBgX192bGFuX2luc2VydF9pbm5lcl90YWdgIGFjdHVhbGx5IGJlaW5nICp1c2VkKj8gVGltZSB0byB0cmFjZSB0aGF0IGZ1bmN0aW9uLiBBaCwgSSBzZWUgYSB1c2FnZSBpbiBgbmV0L3NjaGVkL2FjdF9tcGxzLmNgLiBMZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBmaWxlLlxuXG5Ib2xkIG9u4oCmIHNvbWV0aGluZydzIGNhdGNoaW5nIG15IGV5ZS4gVGhlcmUgaXQgaXMhIExpbmVzIDgwIHRvIDExMCBvZiBgbmV0L3NjaGVkL2FjdF9tcGxzLmNgIGFyZSB3aGVyZSB0aGUgYWN0aW9uIGlzIGhhcHBlbmluZy4gU3BlY2lmaWNhbGx5LCB3aXRoaW4gdGhlIGB0Y2ZfbXBsc19hY3RgIGZ1bmN0aW9uLiBUaGV5J3JlIGNoZWNraW5nIGlmIGEgVkxBTiB0YWcgaXMgcHJlc2VudCBvbiB0aGUgYHNrYmAuIElmIHNvLCB0aGV5J3JlIGF0dGVtcHRpbmcgdG8gaW5zZXJ0IGFuICppbm5lciogVkxBTiB0YWcgdXNpbmcgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBpbnNlcnRpb24sIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgTVBMUyBwcm9jZXNzaW5nIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIHRhZ3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIHRoaXMgY2FsbCBpcyBoYXBwZW5pbmcgaGVyZSwgYW5kIHdoYXQgdGhlIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzIGFyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3ODAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTY6MTQuMDMzNjAzMTE1WiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvYWN0X21wbHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXHRcXHRcXHRcXHQgc2tiLVxcdTAwM2VkZXYgXFx1MDAyNlxcdTAwMjYgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSKSlcXG4gIDgxOlxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gIDgyOlxcdFxcdFxcdGJyZWFrO1xcbiAgODM6XFx0XFx0Y2FzZSBUQ0FfTVBMU19BQ1RfUFVTSDpcXG4gIDg0OlxcdFxcdFxcdG5ld19sc2UgPSB0Y2ZfbXBsc19nZXRfbHNlKE5VTEwsIHAsICFldGhfcF9tcGxzKHNrYl9wcm90b2NvbChza2IsIHRydWUpKSk7XFxuICA4NTpcXHRcXHRcXHRpZiAoc2tiX21wbHNfcHVzaChza2IsIG5ld19sc2UsIHAtXFx1MDAzZXRjZm1fcHJvdG8sIG1hY19sZW4sXFxuICA4NjpcXHRcXHRcXHRcXHRcXHQgIHNrYi1cXHUwMDNlZGV2IFxcdTAwMjZcXHUwMDI2IHNrYi1cXHUwMDNlZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUikpXFxuICA4NzpcXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuICA4ODpcXHRcXHRcXHRicmVhaztcXG4gIDg5OlxcdFxcdGNhc2UgVENBX01QTFNfQUNUX01BQ19QVVNIOlxcbiAgOTA6XFx0XFx0XFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHtcXG4gIDkxOlxcdFxcdFxcdFxcdGlmIChfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZyhza2IsIHNrYi1cXHUwMDNldmxhbl9wcm90byxcXG4gIDkyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBza2Jfdmxhbl90YWdfZ2V0KHNrYiksXFxuICA5MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgRVRIX0hMRU4pIFxcdTAwM2MgMClcXG4gIDk0OlxcdFxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gIDk1OlxcdFxcbiAgOTY6XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IHNrYi1cXHUwMDNldmxhbl9wcm90bztcXG4gIDk3OlxcdFxcdFxcdFxcdF9fdmxhbl9od2FjY2VsX2NsZWFyX3RhZyhza2IpO1xcbiAgOTg6XFx0XFx0XFx0fVxcbiAgOTk6XFx0XFxuIDEwMDpcXHRcXHRcXHRuZXdfbHNlID0gdGNmX21wbHNfZ2V0X2xzZShOVUxMLCBwLCBtYWNfbGVuIHx8XFxuIDEwMTpcXHRcXHRcXHRcXHRcXHRcXHQgICAhZXRoX3BfbXBscyhza2ItXFx1MDAzZXByb3RvY29sKSk7XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdFxcdGlmIChza2JfbXBsc19wdXNoKHNrYiwgbmV3X2xzZSwgcC1cXHUwMDNldGNmbV9wcm90bywgMCwgZmFsc2UpKVxcbiAxMDQ6XFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbiAxMDU6XFx0XFx0XFx0YnJlYWs7XFxuIDEwNjpcXHRcXHRjYXNlIFRDQV9NUExTX0FDVF9NT0RJRlk6XFxuIDEwNzpcXHRcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLFxcbiAxMDg6XFx0XFx0XFx0XFx0XFx0ICAgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikgKyBNUExTX0hMRU4pKVxcbiAxMDk6XFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbiAxMTA6XFx0XFx0XFx0bmV3X2xzZSA9IHRjZl9tcGxzX2dldF9sc2UobXBsc19oZHIoc2tiKSwgcCwgZmFsc2UpO1xcbiAxMTE6XFx0XFx0XFx0aWYgKHNrYl9tcGxzX3VwZGF0ZV9sc2Uoc2tiLCBuZXdfbHNlKSlcXG4gMTEyOlxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gMTEzOlxcdFxcdFxcdGJyZWFrO1xcbiAxMTQ6XFx0XFx0Y2FzZSBUQ0FfTVBMU19BQ1RfREVDX1RUTDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTY6MTQuMDMzNzgwNTU1WiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY0NzY2MTMwNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWTEFOIENvcmUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBWTEFOIGNvcmUgZnVuY3Rpb25hbGl0eSwgc28gbGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBuZXQvODAyMXEvdmxhbl9jb3JlLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB6ZXJvIGluIG9uIGxpbmVzIDQwIHRocm91Z2ggNjUuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBjaHVuayBvZiBjb2RlIHRvIHJlZnJlc2guIEhvcGVmdWxseSwgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIHNlY3Rpb24gSSBuZWVkIG9uIGhvdyB0aGluZ3MgYXJlIGhhbmRsZWQuIFRpbWUgdG8gb3BlbiB0aGUgZmlsZSBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEkgZXhwZWN0IGl0IHRvIGluY2x1ZGUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9uIGNhbGxzIHJlbGF0ZWQgdG8gVkxBTiB0YWdnaW5nIGFuZCB1bnRhZ2dpbmcsIG9yIGF0IGxlYXN0IGhvdyB0aGUgVkxBTiBjb3JlIGhhbmRsZXMgdGhlIGluc2VydGlvbiBhbmQgcmVtb3ZhbCBvZiB0aGUgODAyLjFRIHRhZy4gTGV0J3Mgc2VlIGlmIG15IG1lbnRhbCBtb2RlbCBsaW5lcyB1cCB3aXRoIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkzNiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTY6MjAuNTEwMzk2ODNaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0LzgwMjFxL3ZsYW5fY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdFxcbiAgNDE6XFx0XFx0aWYgKCEodmxhbl9kZXZfcHJpdih2bGFuX2RldiktXFx1MDAzZWZsYWdzIFxcdTAwMjYgVkxBTl9GTEFHX1JFT1JERVJfSERSKSBcXHUwMDI2XFx1MDAyNlxcbiAgNDI6XFx0XFx0ICAgICFuZXRpZl9pc19tYWN2bGFuX3BvcnQodmxhbl9kZXYpIFxcdTAwMjZcXHUwMDI2XFxuICA0MzpcXHRcXHQgICAgIW5ldGlmX2lzX2JyaWRnZV9wb3J0KHZsYW5fZGV2KSkge1xcbiAgNDQ6XFx0XFx0XFx0dW5zaWduZWQgaW50IG9mZnNldCA9IHNrYi1cXHUwMDNlZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHNrYik7XFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdFxcdC8qXFxuICA0NzpcXHRcXHRcXHQgKiB2bGFuX2luc2VydF90YWcgZXhwZWN0IHNrYi1cXHUwMDNlZGF0YSBwb2ludGluZyB0byBtYWMgaGVhZGVyLlxcbiAgNDg6XFx0XFx0XFx0ICogU28gY2hhbmdlIHNrYi1cXHUwMDNlZGF0YSBiZWZvcmUgY2FsbGluZyBpdCBhbmQgY2hhbmdlIGJhY2sgdG9cXG4gIDQ5OlxcdFxcdFxcdCAqIG9yaWdpbmFsIHBvc2l0aW9uIGxhdGVyXFxuICA1MDpcXHRcXHRcXHQgKi9cXG4gIDUxOlxcdFxcdFxcdHNrYl9wdXNoKHNrYiwgb2Zmc2V0KTtcXG4gIDUyOlxcdFxcdFxcdHNrYiA9ICpza2JwID0gdmxhbl9pbnNlcnRfaW5uZXJfdGFnKHNrYiwgc2tiLVxcdTAwM2V2bGFuX3Byb3RvLFxcbiAgNTM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHNrYi1cXHUwMDNldmxhbl90Y2ksIHNrYi1cXHUwMDNlbWFjX2xlbik7XFxuICA1NDpcXHRcXHRcXHRpZiAoIXNrYilcXG4gIDU1OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gIDU2OlxcdFxcdFxcdHNrYl9wdWxsKHNrYiwgb2Zmc2V0ICsgVkxBTl9ITEVOKTtcXG4gIDU3OlxcdFxcdFxcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XFxuICA1ODpcXHRcXHR9XFxuICA1OTpcXHRcXG4gIDYwOlxcdFxcdHNrYi1cXHUwMDNlcHJpb3JpdHkgPSB2bGFuX2dldF9pbmdyZXNzX3ByaW9yaXR5KHZsYW5fZGV2LCBza2ItXFx1MDAzZXZsYW5fdGNpKTtcXG4gIDYxOlxcdFxcdF9fdmxhbl9od2FjY2VsX2NsZWFyX3RhZyhza2IpO1xcbiAgNjI6XFx0XFxuICA2MzpcXHRcXHRyeF9zdGF0cyA9IHRoaXNfY3B1X3B0cih2bGFuX2Rldl9wcml2KHZsYW5fZGV2KS1cXHUwMDNldmxhbl9wY3B1X3N0YXRzKTtcXG4gIDY0OlxcdFxcbiAgNjU6XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2cnhfc3RhdHMtXFx1MDAzZXN5bmNwKTtcXG4gIDY2OlxcdFxcdHU2NF9zdGF0c19pbmMoXFx1MDAyNnJ4X3N0YXRzLVxcdTAwM2VyeF9wYWNrZXRzKTtcXG4gIDY3OlxcdFxcdHU2NF9zdGF0c19hZGQoXFx1MDAyNnJ4X3N0YXRzLVxcdTAwM2VyeF9ieXRlcywgc2tiLVxcdTAwM2VsZW4pO1xcbiAgNjg6XFx0XFx0aWYgKHNrYi1cXHUwMDNlcGt0X3R5cGUgPT0gUEFDS0VUX01VTFRJQ0FTVClcXG4gIDY5OlxcdFxcdFxcdHU2NF9zdGF0c19pbmMoXFx1MDAyNnJ4X3N0YXRzLVxcdTAwM2VyeF9tdWx0aWNhc3QpO1xcbiAgNzA6XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnJ4X3N0YXRzLVxcdTAwM2VzeW5jcCk7XFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdHJldHVybiB0cnVlO1xcbiAgNzM6XFx0fVxcbiAgNzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjE2OjIwLjUxMDQ4Mjc4WiIsIlNlcSI6NjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5NTI1ODQ1NzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVkxBTiBUYWcgSW5zZXJ0aW9uIExvZ2ljKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYCBmdW5jdGlvbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQncyBzdXBwb3NlZCB0byBkby4gSXQgbG9va3MgbGlrZSBpdCdzIHJlc3BvbnNpYmxlIGZvciBpbnNlcnRpbmcgYSBWTEFOIHRhZyBpbnRvIGFuIGBza19idWZmYC4gIE9rYXksIGdvdCBpdC4gSXQgdGFrZXMgYW4gYHNrX2J1ZmZgLCB0aGUgVkxBTiBwcm90b2NvbCBhbmQgVENJLCBhbmQgdGhlIE1BQyBoZWFkZXIgbGVuZ3RoIGFzIGlucHV0LlxuXG5Ob3csIHRoYXQgYHBza2JfbWF5X3B1bGxgIGNhbGwuLi4gSSBrbm93IHRoYXQgZnVuY3Rpb24uICBJdOKAmXMgYSBjcnVjaWFsIHNhZmV0eSBjaGVjay4gSXQgdmVyaWZpZXMgaWYgdGhlIGBza19idWZmYCBoYXMgZW5vdWdoIGNvbnRpZ3VvdXMgZGF0YSB0byBhY2NvbW1vZGF0ZSBgbWFjX2xlbmAuICBJZiBub3QsIGl0IGF0dGVtcHRzIHRvIHB1bGwgdGhlIG5lY2Vzc2FyeSBkYXRhLCB3aGljaCBjb3VsZCBpbnZvbHZlIHJlYXNzZW1ibGluZyBmcmFnbWVudHMuIEJ1dCwgaWYgYHBza2JfbWF5X3B1bGxgIHJldHVybnMgYGZhbHNlYCwgd2hpY2ggaGFwcGVucyB3aGVuIGBza2ItXHUwMDNlbGVuIFx1MDAzYyBtYWNfbGVuYCBvciBgc2tiX2hlYWRsZW4oc2tiKSBcdTAwM2MgbWFjX2xlbmAsIHRoZW4gdGhlcmUncyBhbiBpc3N1ZS4gSXQgbWVhbnMgdGhlIGBza2JgIGRvZXNuJ3QgY29udGFpbiBlbm91Z2ggZGF0YSwgc28gYG1hY19sZW5gIGJ5dGVzIGFyZSBub3QgZ3VhcmFudGVlZCB0byBiZSBwcmVzZW50LlxuXG5UaGUgc3Vic2VxdWVudCBgc2tiX3B1c2hgIGFuZCBgc2tiX3Bvc3RwdXNoX2RhdGFfbW92ZWAgY2FsbHMgd29ycnkgbWUuIElmIGBwc2tiX21heV9wdWxsYCBmYWlsZWQsIHRoZW4gdGhlc2Ugb3BlcmF0aW9ucyBjb3VsZCB0cnkgdG8gYWNjZXNzIGRhdGEgKmJleW9uZCogdGhlIGFsbG9jYXRlZCBidWZmZXIuIGBtZW1tb3ZlYCB3aXRoIGBtYWNfbGVuIC0gRVRIX1RMRU5gIGNvdWxkIGNhdXNlIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzLiAgQW5kLCB0aGUgYXNzaWdubWVudCB0byBgdmV0aGAgd291bGQgbGVhZCB0byB3cml0aW5nIG91dCBvZiB0aGUgYm91bmRzIG9mIHRoZSBza2IgZGF0YSBidWZmZXIgb3IgYmV5b25kIGBza2ItXHUwMDNldGFpbGAuIFRoYXQncyBhIGNsYXNzaWMgaGVhcCBidWZmZXIgb3ZlcmZsb3csIGEgS0FTQU4gY2F0Y2ghXG5cblNvLCB0aGUgb3JpZ2luYWwgY29kZSBoYWQgYSB2dWxuZXJhYmlsaXR5LiBUaGUgYWJzZW5jZSBvZiB0aGUgYHBza2JfbWF5X3B1bGxgIGNoZWNrIG1lYW5zIHdyaXRlcyB0byBgdmV0aGAgY291bGQgYmUgb3V0IG9mIGJvdW5kcywgZGVwZW5kaW5nIG9uIHRoZSBsZW5ndGggb2YgYHNrYmAuXG5cbk5vdywgbGV0J3Mgc2VlIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQncyBydW4gZG93biB0aGUgY2hlY2tsaXN0LlxuMS4gIE5vdGhpbmcgaXMgc2VudCB0byB1c2Vyc3BhY2UuIEdvb2QuXG4yLiAgYG1hY19sZW5gIGlzIGEgZnVuY3Rpb24gYXJndW1lbnQsIGluaXRpYWxpemVkLiBgc2tiYCBpcyBhbiBpbml0aWFsaXplZCBgc2tfYnVmZmAuXG4zLiAgTm8gbmV3IHN0cnVjdHVyZXMgb3IgYWxsb2NhdGlvbnMuXG40LiAgQnV0Li4ud2FpdC4gRG9lcyB0aGUgY2hlY2sgKmludHJvZHVjZSogYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaz8gTm8sIHRoZSBuZXcgYHBza2JfbWF5X3B1bGxgIGNoZWNrIHByZXZlbnRzIGdvaW5nIGJleW9uZCB0aGUgYG1hY19sZW5gLiBJdCBlbnN1cmVzIGBsZW5gIGJ5dGVzIG9mIHRoZSBza2IgYXJlIGluIHRoZSBjb250aWd1b3VzIGhlYWQgYnVmZmVyIChgc2tiLVx1MDAzZWRhdGFgIHRvIGBza2ItXHUwMDNlZGF0YSArIGxlbmApLiBJdCdzIHByZXZlbnRpbmcgaXNzdWVzIVxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhc2VzIHdoZXJlIGAtRUlOVkFMYCBpcyByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uLCB0byBlbnN1cmUgdGhlICpjYWxsZXJzKiBkb24ndCB1c2UgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQncyBzZWUgd2hvIGNhbGxzIGBfX3ZsYW5faW5zZXJ0X2lubmVyX3RhZ2AuIEFoYSwgYF9fdmxhbl9pbnNlcnRfdGFnYC4gTGV0J3MgY2hlY2sgd2hlcmUgdGhhdCBpcyBjYWxsZWQuIEl0IGxvb2tzIGxpa2UgYHNrYl92bGFuX3B1c2hgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIEknbGwgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIHRoYXQgZnVuY3Rpb24gdG8gY29uZmlybSBpdCBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgZXJyb3IgY29kZS4gSXQgc2hvdWxkIGJlIGdvb2QgYmVjYXVzZSBgcHNrYl9tYXlfcHVsbGAgaXMgYSBzYWZldHkgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODAzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjE2OjQwLjAzNjMzMTExMVoiLCJTZXEiOjY0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjAyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjQ5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjQ5MDpcXHR7XFxuNjQ5MTpcXHRcXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkge1xcbjY0OTI6XFx0XFx0XFx0aW50IG9mZnNldCA9IHNrYi1cXHUwMDNlZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHNrYik7XFxuNjQ5MzpcXHRcXHRcXHRpbnQgZXJyO1xcbjY0OTQ6XFx0XFxuNjQ5NTpcXHRcXHRcXHRpZiAoV0FSTl9PTkNFKG9mZnNldCxcXG42NDk2OlxcdFxcdFxcdFxcdCAgICAgIFxcXCJza2Jfdmxhbl9wdXNoIGdvdCBza2Igd2l0aCBza2ItXFx1MDAzZWRhdGEgbm90IGF0IG1hYyBoZWFkZXIgKG9mZnNldCAlZClcXFxcblxcXCIsXFxuNjQ5NzpcXHRcXHRcXHRcXHQgICAgICBvZmZzZXQpKSB7XFxuNjQ5ODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42NDk5OlxcdFxcdFxcdH1cXG42NTAwOlxcdFxcbjY1MDE6XFx0XFx0XFx0ZXJyID0gX192bGFuX2luc2VydF90YWcoc2tiLCBza2ItXFx1MDAzZXZsYW5fcHJvdG8sXFxuNjUwMjpcXHRcXHRcXHRcXHRcXHRcXHRza2Jfdmxhbl90YWdfZ2V0KHNrYikpO1xcbjY1MDM6XFx0XFx0XFx0aWYgKGVycilcXG42NTA0OlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuNjUwNTpcXHRcXG42NTA2OlxcdFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBza2ItXFx1MDAzZXZsYW5fcHJvdG87XFxuNjUwNzpcXHRcXHRcXHRza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyIC09IFZMQU5fSExFTjtcXG42NTA4OlxcdFxcbjY1MDk6XFx0XFx0XFx0c2tiX3Bvc3RwdXNoX3Jjc3VtKHNrYiwgc2tiLVxcdTAwM2VkYXRhICsgKDIgKiBFVEhfQUxFTiksIFZMQU5fSExFTik7XFxuNjUxMDpcXHRcXHR9XFxuNjUxMTpcXHRcXHRfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgdmxhbl9wcm90bywgdmxhbl90Y2kpO1xcbjY1MTI6XFx0XFx0cmV0dXJuIDA7XFxuNjUxMzpcXHR9XFxuNjUxNDpcXHRFWFBPUlRfU1lNQk9MKHNrYl92bGFuX3B1c2gpO1xcbjY1MTU6XFx0XFxuNjUxNjpcXHQvKipcXG42NTE3OlxcdCAqIHNrYl9ldGhfcG9wKCkgLSBEcm9wIHRoZSBFdGhlcm5ldCBoZWFkZXIgYXQgdGhlIGhlYWQgb2YgYSBwYWNrZXRcXG42NTE4OlxcdCAqXFxuNjUxOTpcXHQgKiBAc2tiOiBTb2NrZXQgYnVmZmVyIHRvIG1vZGlmeVxcbjY1MjA6XFx0ICpcXG42NTIxOlxcdCAqIERyb3AgdGhlIEV0aGVybmV0IGhlYWRlciBvZiBAc2tiLlxcbjY1MjI6XFx0ICpcXG42NTIzOlxcdCAqIEV4cGVjdHMgdGhhdCBza2ItXFx1MDAzZWRhdGEgcG9pbnRzIHRvIHRoZSBtYWMgaGVhZGVyIGFuZCB0aGF0IG5vIFZMQU4gdGFncyBhcmVcXG42NTI0OlxcdCAqIHByZXNlbnQuXFxuNjUyNTpcXHQgKlxcbjY1MjY6XFx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvdGhlcndpc2UuXFxuNjUyNzpcXHQgKi9cXG42NTI4OlxcdGludCBza2JfZXRoX3BvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjY1Mjk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxNjo0MC4wMzY1OTQ0NzJaIiwiU2VxIjo2NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM1OTYzMDQzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFZMQU4gVGFnZ2luZyBpbiBhIFNDU0kgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IFZMQU4gdGFncyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIFNDU0kgZGV2aWNlcy4gTXkgaW5pdGlhbCBwb2ludCBvZiByZWZlcmVuY2UgaXMgdGhlIGBza2Jfdmxhbl9wdXNoYCBmdW5jdGlvbi4gSWYgdGhlcmUncyBhbiBlcnJvciB0aGVyZSwgaXQganVzdCByZXR1cm5zIHRoZSBlcnJvciBjb2RlLCB3aGljaCBpcyBzdHJhaWdodGZvcndhcmQuIE5vdywgSSB3YW50IHRvIHNlZSBob3cgdGhpcyBpcyB1c2VkIGluIHByYWN0aWNlLiBJJ20gZm9jdXNpbmcgb24gYGRyaXZlcnMvc2NzaS9xZWRpL3FlZGlfbWFpbi5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgYF9fdmxhbl9pbnNlcnRfdGFnYCBmdW5jdGlvbiBiZWluZyBjYWxsZWQgaGVyZSwgYW5kIGhvdyBpdCB1c2VzIHRoZSBFdGhlcm5ldCBwcm90b2NvbCBmb3IgVkxBTnMgKEVUSF9QXzgwMjFRKSBhbmQgdGhlIFZMQU4gSUQgaXRzZWxmLiBOb3csIGxldCdzIHRyYWNlIHRoaXMgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoZSByZWNlaXZlIHBhdGguIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIGBxZWRpX2xsMl9yeGAgaW4gdGhlIHNhbWUgZmlsZSB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGZsb3cuIFRoaXMgc2hvdWxkIHNob3cgbWUgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBpbmNvbWluZyBmcmFtZXMgd2l0aCBhbmQgd2l0aG91dCBWTEFOIHRhZ3MsIGFuZCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBvdmVyYWxsIFNDU0kgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5Njk3LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MTc6MDMuNjMyOTAzMDAzWiIsIlNlcSI6NjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTMwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Njc2kvcWVkaS9xZWRpX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MjA6XFx0XFx0XFx0d29yay1cXHUwMDNldmxhbl9pZCA9IHNrYl92bGFuX3RhZ19nZXQoc2tiKTtcXG4gNzIxOlxcdFxcbiA3MjI6XFx0XFx0aWYgKHdvcmstXFx1MDAzZXZsYW5faWQpXFxuIDcyMzpcXHRcXHRcXHRfX3ZsYW5faW5zZXJ0X3RhZyh3b3JrLVxcdTAwM2Vza2IsIGh0b25zKEVUSF9QXzgwMjFRKSwgd29yay1cXHUwMDNldmxhbl9pZCk7XFxuIDcyNDpcXHRcXG4gNzI1OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cWVkaS1cXHUwMDNlbGwyX2xvY2spO1xcbiA3MjY6XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2d29yay1cXHUwMDNlbGlzdCwgXFx1MDAyNnFlZGktXFx1MDAzZWxsMl9za2JfbGlzdCk7XFxuIDcyNzpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cWVkaS1cXHUwMDNlbGwyX2xvY2spO1xcbiA3Mjg6XFx0XFxuIDcyOTpcXHRcXHR3YWtlX3VwX3Byb2Nlc3MocWVkaS1cXHUwMDNlbGwyX3JlY3ZfdGhyZWFkKTtcXG4gNzMwOlxcdFxcbiA3MzE6XFx0XFx0cmV0dXJuIDA7XFxuIDczMjpcXHR9XFxuIDczMzpcXHRcXG4gNzM0OlxcdC8qIG1hcCB0aGlzIHNrYiB0byBpc2NzaXVpbyBtbWFwZWQgcmVnaW9uICovXFxuIDczNTpcXHRzdGF0aWMgaW50IHFlZGlfbGwyX3Byb2Nlc3Nfc2tiKHN0cnVjdCBxZWRpX2N0eCAqcWVkaSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gNzM2OlxcdFxcdFxcdFxcdFxcdHUxNiB2bGFuX2lkKVxcbiA3Mzc6XFx0e1xcbiA3Mzg6XFx0XFx0c3RydWN0IHFlZGlfdWlvX2RldiAqdWRldiA9IE5VTEw7XFxuIDczOTpcXHRcXHRzdHJ1Y3QgcWVkaV91aW9fY3RybCAqdWN0cmwgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxNzowMy42MzMwNDQzNTNaIiwiU2VxIjo2NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODAwNzc0OTg2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVkxBTiBUYWcgSW5zZXJ0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGNhcmVmdWxseSByZXZpZXdpbmcgdGhpcyBwYXRjaCwgZm9jdXNpbmcgb24gaXRzIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IHNhZmV0eS4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBpdCBhZGRzIGEgc2FmZXR5IGNoZWNrLCBgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pYCwgdG8gYF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnYC4gVGhpcyBjaGVjayBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgZW5zdXJlcyB0aGF0IHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgYWN0dWFsbHkgKmhhcyogZW5vdWdoIGRhdGEgdG8gYWNjb21tb2RhdGUgdGhlIFZMQU4gdGFnIGluc2VydGlvbiwgc3BlY2lmaWNhbGx5IGVuc3VyaW5nIHRoZXJlIGFyZSBhdCBsZWFzdCBgbWFjX2xlbmAgYnl0ZXMgYXZhaWxhYmxlLlxuXG5XaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBjb2RlIHdhcyB2dWxuZXJhYmxlIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIHdyaXRlcywgcG90ZW50aWFsbHkgY29ycnVwdGluZyBtZW1vcnkg4oCTIGEgY2xhc3NpYyBoZWFwIG9yIHNsYWIgb3V0LW9mLWJvdW5kcyB2dWxuZXJhYmlsaXR5LiAgVGhpcyBpcyBhIHNpZ25pZmljYW50IHByb2JsZW0gdGhhdCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU0FOaXRpemVyKSBpcyBkZXNpZ25lZCB0byBjYXRjaC4gIEl0J3MgdGhlIHByaW1hcnkgcmVhc29uIGZvciB0aGlzIHBhdGNoLlxuXG5UaGUgaW1wb3J0YW50IHBvaW50IGlzIHRoYXQgdGhpcyBwYXRjaCBvbmx5IGFkZHJlc3NlcyAqZXhpc3RpbmcqIG1lbW9yeSBzYWZldHkgaXNzdWVzLiBJdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0IGRvZXNuJ3QgaW52b2x2ZSBhbnkgY2hhbmdlcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgcmVhZCwgb3Igc3RydWN0dXJlIGZpZWxkcyBlbmRpbmcgdXAgdW5pbml0aWFsaXplZCBhbmQgbGVha2VkIHRvIHVzZXJzcGFjZS4gSSd2ZSBzcGVjaWZpY2FsbHkgY2hlY2tlZCBmb3IgdGhvc2Ugc2NlbmFyaW9zLlxuXG5UaGUgcGF0Y2gncyBsb2dpYyBpcyBjbGVhcjogaWYgYHBza2JfbWF5X3B1bGxgIGZhaWxzIChtZWFuaW5nIG5vdCBlbm91Z2ggZGF0YSksIGl0IHJldHVybnMgYC1FSU5WQUxgLiAgVGhlIGNhbGxlcnMgb2YgYHZsYW5faW5zZXJ0X2lubmVyX3RhZ2AgaGFuZGxlIHRoaXMgZXJyb3IgYnkgZHJvcHBpbmcgdGhlIGBza2JgLCB3aGljaCBpcyB0aGUgY29ycmVjdCBiZWhhdmlvci4gIFRoZXJlJ3Mgbm8gcGF0aCB3aGVyZSB3ZSBlbmQgdXAgbGVha2luZyB1bmluaXRpYWxpemVkIGRhdGEgb3IgcmV0dXJuaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBgcHNrYl9tYXlfcHVsbGAgaXMgZGVzaWduZWQgdG8gcHVsbCAqZXhpc3RpbmcqIGJ5dGVzIGludG8gdGhlIGxpbmVhciBidWZmZXIsIG5vdCBjcmVhdGUgbmV3IHVuaW5pdGlhbGl6ZWQgb25lcy4gQWxzbywgSSBoYXZlIHZlcmlmaWVkIHRoYXQgc3RydWN0dXJlcyB3cml0dGVuIHRvIGFyZSBhbHdheXMgZG9uZSBzbyBhZnRlciBgcHNrYl9tYXlfcHVsbGAgc3VjY2VlZHMsIGVuc3VyaW5nIGluaXRpYWxpemF0aW9uLlxuXG5TbywgSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBLTVNBTiAoS2VybmVsIE1lbW9yeSBTQU5pdGl6ZXIpIGNvbmNlcm5zLiBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCB0byBkZXRlY3QgdGhlIHR5cGVzIG9mIHZ1bG5lcmFiaWxpdGllcyB0aGlzIHBhdGNoIGFkZHJlc3Nlcy4gVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzOiBgTmVlZHNLTVNBTjogZmFsc2VgLiBJJ20gcmVhZHkgdG8gY29tbWl0IHRoaXMsIGJlY2F1c2UgdGhlIGNvcmUgcHJvYmxlbSB0aGlzIHBhdGNoIGFkZHJlc3NlcyBpcyBkZWZpbml0ZWx5IGEgS0FTQU4gaXNzdWUuIEknbSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQzMiwiT3V0cHV0VG9rZW5zIjoxNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMToxODoyMy43MTA1NDU0ODVaIiwiU2VxIjo2OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgdXNpbmcgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pIGluIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKCkgdG8gZW5zdXJlIHRoYXQgdGhlIHBhY2tldCBidWZmZXIgY29udGFpbnMgYXQgbGVhc3QgbWFjX2xlbiBsaW5lYXIgYnl0ZXMgYmVmb3JlIHBlcmZvcm1pbmcgaGVhZGVyIG1hbmlwdWxhdGlvbnMgKHNrYl9wb3N0cHVzaF9kYXRhX21vdmUgYW5kIHdyaXRpbmcgdmxhbl9ldGhoZHIpLiBXaXRob3V0IHRoaXMgY2hlY2ssIHBhY2tldHMgc2hvcnRlciB0aGFuIG1hY19sZW4gb3Igbm9uLWxpbmVhciBidWZmZXJzIGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBoZWFwIGFjY2Vzc2VzIChPT0IgcmVhZC93cml0ZSksIHdoaWNoIGFyZSBkaXJlY3RseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgdXNpbmcgcHNrYl9tYXlfcHVsbChza2IsIG1hY19sZW4pIGluIF9fdmxhbl9pbnNlcnRfaW5uZXJfdGFnKCkgdG8gZW5zdXJlIHRoYXQgdGhlIHBhY2tldCBidWZmZXIgY29udGFpbnMgYXQgbGVhc3QgbWFjX2xlbiBsaW5lYXIgYnl0ZXMgYmVmb3JlIHBlcmZvcm1pbmcgaGVhZGVyIG1hbmlwdWxhdGlvbnMgKHNrYl9wb3N0cHVzaF9kYXRhX21vdmUgYW5kIHdyaXRpbmcgdmxhbl9ldGhoZHIpLiBXaXRob3V0IHRoaXMgY2hlY2ssIHBhY2tldHMgc2hvcnRlciB0aGFuIG1hY19sZW4gb3Igbm9uLWxpbmVhciBidWZmZXJzIGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBoZWFwIGFjY2Vzc2VzIChPT0IgcmVhZC93cml0ZSksIHdoaWNoIGFyZSBkaXJlY3RseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowx28hh[1] Phase: Succeeded StartedAt: 2026-09-15 11:18:35 +0000 UTC FinishedAt: 2026-09-15 11:18:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx28hh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-15 11:18:35 +0000 UTC FinishedAt: 2026-09-15 11:18:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx28hh[2] Phase: Succeeded StartedAt: 2026-09-15 11:18:35 +0000 UTC FinishedAt: 2026-09-15 15:01:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:18:35 +0000 UTC FinishedAt: 2026-09-15 15:01:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:18:35 +0000 UTC FinishedAt: 2026-09-15 11:18:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:18:35 +0000 UTC FinishedAt: 2026-09-15 11:18:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"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-workflowx28hh/series-workflowx28hh-convert-artifact-4083277393/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:18:56 +0000 UTC FinishedAt: 2026-09-15 11:37:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:18:56 +0000 UTC FinishedAt: 2026-09-15 11:37:36 +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:*9cfb78b4-1dcf-4a52-b8dd-ab5d2ef3a9bd,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-workflowx28hh/series-workflowx28hh-convert-artifact-4083277393/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": "8b4d81d7-055f-438d-b079-56a817fe2271", "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-workflowx28hh/series-workflowx28hh-build-action-2657253375/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:18:56 +0000 UTC FinishedAt: 2026-09-15 11:37:26 +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:*9cfb78b4-1dcf-4a52-b8dd-ab5d2ef3a9bd,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-workflowx28hh/series-workflowx28hh-convert-artifact-4083277393/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": "8b4d81d7-055f-438d-b079-56a817fe2271", "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-workflowx28hh/series-workflowx28hh-build-action-2657253375/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:37:36 +0000 UTC FinishedAt: 2026-09-15 11:37:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:37:36 +0000 UTC FinishedAt: 2026-09-15 11:37:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:37:36 +0000 UTC FinishedAt: 2026-09-15 11:37:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:37:36 +0000 UTC FinishedAt: 2026-09-15 11:37:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-workflowx28hh/series-workflowx28hh-convert-artifact-3808421412/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:37:51 +0000 UTC FinishedAt: 2026-09-15 11:39:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:37:51 +0000 UTC FinishedAt: 2026-09-15 11:39:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8b4d81d7-055f-438d-b079-56a817fe2271,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-workflowx28hh/series-workflowx28hh-build-action-2657253375/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-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:39:49 +0000 UTC FinishedAt: 2026-09-15 11:39:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:39:49 +0000 UTC FinishedAt: 2026-09-15 11:39:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:39:49 +0000 UTC FinishedAt: 2026-09-15 11:56:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:39:49 +0000 UTC FinishedAt: 2026-09-15 11:56:29 +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:*9cfb78b4-1dcf-4a52-b8dd-ab5d2ef3a9bd,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-workflowx28hh/series-workflowx28hh-convert-artifact-3808421412/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": "bff19c10-12f5-4d55-aea3-0538d411ac29", "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-workflowx28hh/series-workflowx28hh-build-action-960388272/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:39:49 +0000 UTC FinishedAt: 2026-09-15 11:56:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*9cfb78b4-1dcf-4a52-b8dd-ab5d2ef3a9bd,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-workflowx28hh/series-workflowx28hh-convert-artifact-3808421412/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": "bff19c10-12f5-4d55-aea3-0538d411ac29", "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-workflowx28hh/series-workflowx28hh-build-action-960388272/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:56:29 +0000 UTC FinishedAt: 2026-09-15 11:56:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:56:29 +0000 UTC FinishedAt: 2026-09-15 11:56:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:56:29 +0000 UTC FinishedAt: 2026-09-15 11:58:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:56:29 +0000 UTC FinishedAt: 2026-09-15 11:58:21 +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:*bff19c10-12f5-4d55-aea3-0538d411ac29,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-workflowx28hh/series-workflowx28hh-build-action-960388272/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-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:58:31 +0000 UTC FinishedAt: 2026-09-15 15:01:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:58:31 +0000 UTC FinishedAt: 2026-09-15 15:01:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"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:*8b4d81d7-055f-438d-b079-56a817fe2271,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bff19c10-12f5-4d55-aea3-0538d411ac29,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-workflowx28hh/series-workflowx28hh-build-action-2657253375/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-workflowx28hh/series-workflowx28hh-build-action-960388272/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:58:31 +0000 UTC FinishedAt: 2026-09-15 11:58:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:58:31 +0000 UTC FinishedAt: 2026-09-15 11:58:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"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-workflowx28hh/series-workflowx28hh-convert-artifact-4233816493/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:58:31 +0000 UTC FinishedAt: 2026-09-15 11:58:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:58:31 +0000 UTC FinishedAt: 2026-09-15 11:58:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:58:31 +0000 UTC FinishedAt: 2026-09-15 11:58:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:58:41 +0000 UTC FinishedAt: 2026-09-15 15:01:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx28hh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["skb_vlan_push","vlan_do_receive","tcf_mpls_act","tcf_vlan_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7c8810c2e69c3d9ca6df870b40ae9218e50b4fb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","NET_ACT_MPLS","NET_ACT_VLAN","NET_CLS_ACT"],"series_id":"e5d7c409-5a32-4530-9bb4-754f48d61578","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-15 11:58:41 +0000 UTC FinishedAt: 2026-09-15 15:01:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8b4d81d7-055f-438d-b079-56a817fe2271,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bff19c10-12f5-4d55-aea3-0538d411ac29,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-workflowx28hh/series-workflowx28hh-build-action-2657253375/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-workflowx28hh/series-workflowx28hh-build-action-960388272/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-workflowx28hh/series-workflowx28hh-convert-artifact-4233816493/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,}