Name: series-workflow4bz5s Phase: Succeeded StartedAt: 2026-08-19 10:59:18 +0000 UTC FinishedAt: 2026-08-19 15:06:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4bz5s[0] Phase: Succeeded StartedAt: 2026-08-19 10:59:18 +0000 UTC FinishedAt: 2026-08-19 11:22:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4bz5s[0].run-triage Phase: Succeeded StartedAt: 2026-08-19 10:59:18 +0000 UTC FinishedAt: 2026-08-19 11:22:04 +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": "c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_IPIP", "MPLS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_IPIP", "MPLS" ], "series_id": "30004ace-aed2-4090-9fe7-847972a83291" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ipip_rcv", "mplsip_rcv" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDExOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9JUElQJiMzNDssCiAgICAmIzM0O01QTFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcGlwX3JjdiYjMzQ7LAogICAgJiMzNDttcGxzaXBfcmN2JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayB3aGVyZSBhbiBza19idWZmIChza2IpIHdhcyBub3QgZnJlZWQgd2hlbiBpcF90dW5fcnhfZHN0KCkgcmV0dXJuZWQgTlVMTC4gQnkgY2hhbmdpbmcgJiMzOTtyZXR1cm4gMDsmIzM5OyB0byAmIzM5O2dvdG8gZHJvcDsmIzM5OywgdGhlIHNrYiBpcyBub3cgcHJvcGVybHkgZnJlZWQgdmlhIGtmcmVlX3NrYihza2IpLiBUaGlzIGlzIGEgbWVtb3J5IGxlYWsgaXNzdWUsIHdoaWNoIGlzIHR5cGljYWxseSBkZXRlY3RlZCBieSBrbWVtbGVhay4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgd2hpY2ggYXJlIHRoZSB0YXJnZXRzIG9mIEtNU0FOLiBTdGFuZGFyZCBLQVNBTiBhbmQga21lbWxlYWsgYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgdHlwZSBvZiBpc3N1ZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgSVBJUCB0dW5uZWwgcmVjZWl2ZSBwYXRoIChgaXBpcF90dW5uZWxfcmN2YCkgYnkgcHJvcGVybHkgZnJlZWluZyB0aGUgc2tiIHdoZW4gYGlwX3R1bl9yeF9kc3RgIHJldHVybnMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgaGFuZGxlciwgd2hpY2ggaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMToyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQxZWFiZTBhN2NhYzgyMmU2ZTdhMWY0N2M2OTY5ZTg1ZjU5NzJlZjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAxMToyMDozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGlwLmMgYi9uZXQvaXB2NC9pcGlwLmNcbmluZGV4IGI2NDMxOTRmNTdkMjkuLmRkZjYyYjQ1NTY2YjYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcGlwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwaXAuY1xuQEAgLTI0OCw3ICYjNDM7MjQ4LDcgQEAgc3RhdGljIGludCBpcGlwX3R1bm5lbF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaXBwcm90bylcbiBcbiBcdFx0XHR0dW5fZHN0ID0gaXBfdHVuX3J4X2RzdChza2IsIGZsYWdzLCAwLCAwKTtcbiBcdFx0XHRpZiAoIXR1bl9kc3QpXG4tXHRcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdFx0XHRnb3RvIGRyb3A7XG4gXHRcdFx0aXBfdHVubmVsX21kX3VkcF9lbmNhcChza2IsIFx1MDAyNnR1bl9kc3QtXHUwMDNldS50dW5faW5mbyk7XG4gXHRcdH1cbiBcdFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMToyMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0lQSVAmIzM0OywKICAgICYjMzQ7TVBMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwaXBfcmN2JiMzNDssCiAgICAmIzM0O21wbHNpcF9yY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgSVBJUCB0dW5uZWwgcmVjZWl2ZSBwYXRoIChgaXBpcF90dW5uZWxfcmN2YCkgYnkgcHJvcGVybHkgZnJlZWluZyB0aGUgc2tiIHdoZW4gYGlwX3R1bl9yeF9kc3RgIHJldHVybnMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgaGFuZGxlciwgd2hpY2ggaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQxZWFiZTBhN2NhYzgyMmU2ZTdhMWY0N2M2OTY5ZTg1ZjU5NzJlZjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAxMToyMDozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuYwppbmRleCBiNjQzMTk0ZjU3ZDI5Li5kZGY2MmI0NTU2NmI2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGlwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBpcC5jCkBAIC0yNDgsNyAmIzQzOzI0OCw3IEBAIHN0YXRpYyBpbnQgaXBpcF90dW5uZWxfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHU4IGlwcHJvdG8pCiAKIAkJCXR1bl9kc3QgPSBpcF90dW5fcnhfZHN0KHNrYiwgZmxhZ3MsIDAsIDApOwogCQkJaWYgKCF0dW5fZHN0KQotCQkJCXJldHVybiAwOwomIzQzOwkJCQlnb3RvIGRyb3A7CiAJCQlpcF90dW5uZWxfbWRfdWRwX2VuY2FwKHNrYiwgJmFtcDt0dW5fZHN0LSZndDt1LnR1bl9pbmZvKTsKIAkJfQogCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIElQSVAgVHVubmVsaW5nIElzc3VlKioKCk9rYXksIHNvIHRoZXJlJiMzOTtzIGEgcGF0Y2ggZmxvYXRpbmcgYXJvdW5kIGZvciB0aGUgYG5ldC9pcHY0L2lwaXAuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBjaGFuZ2luZyB0aGUgcmV0dXJuIGxvZ2ljIHdpdGhpbiB0aGUgYGlwaXBfdHVubmVsX3JjdmAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIGZyb20gYSBzaW1wbGUgYHJldHVybiAwO2AgdG8gYSBgZ290byBkcm9wO2Agd2hlbiB0aGUgY29uZGl0aW9uIGAhdHVuX2RzdGAgaXMgbWV0LiBBbHJpZ2h0LCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBUaGUgZnVuY3Rpb24mIzM5O3MgZ29pbmcgdG8gdGhlICYjMzQ7ZHJvcCYjMzQ7IGxhYmVsLCBub3QgcmV0dXJuaW5nIGEgJiMzNDtzdWNjZXNzJiMzNDsgKGV2ZW4gaWYgdGhlIHBhY2tldCB3b3VsZCBiZSBkaXNjYXJkZWQuKQoKUmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBgaXBpcF90dW5uZWxfcmN2YCBmdW5jdGlvbiBpbiBgbmV0L2lwdjQvaXBpcC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgdHVuX2RzdGAgcmVwcmVzZW50cyBpbiB0aGlzIGNvbnRleHQuIEl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIHRoZSB0dW5uZWwgZGVzdGluYXRpb24sIHRoZSBjb25maWd1cmVkIHJlbW90ZSBlbmRwb2ludCBmb3IgdGhlIElQSVAgdHVubmVsLiBUaGUgZXhpc3RpbmcgY29kZSwgaWYgYCF0dW5fZHN0YCBldmFsdWF0ZXMgdG8gdHJ1ZSwgd2FzIGp1c3QgcmV0dXJuaW5nIGEgemVybyB2YWx1ZSwgd2hpY2ggaXMgZWZmZWN0aXZlbHkgc2lnbmFsaW5nIGEgJiMzNDtwYWNrZXQgcHJvY2Vzc2VkLCBidXQgZGlzY2FyZGVkJiMzNDsgKG9yLCBhdCBsZWFzdCwgbm90IGV4cGxpY2l0bHkgaGFuZGxlZCkuIE5vdywgdGhpcyBwYXRjaCB3YW50cyB0byAqZXhwbGljaXRseSogZHJvcCB0aGUgcGFja2V0IHVzaW5nIGEgZ290byBzdGF0ZW1lbnQuIFRoYXQgaGFzIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIEl0IGNvdWxkIGNoYW5nZSB0aGUgZXJyb3IgcmVwb3J0aW5nIG9yIHBhY2tldCBwcm9jZXNzaW5nIHBhdGggaW4gY2VydGFpbiBzY2VuYXJpb3MuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIHdpbGwgaW1wYWN0IHRoZSBlcnJvciBoYW5kbGluZywgY291bnRlcnMsIG9yIHN0YXRpc3RpY3MuIEEgcmV0dXJuIDAgbWlnaHQgYmUgaW50ZXJwcmV0ZWQgZGlmZmVyZW50bHkgYnkgdGhlIGNhbGxpbmcgZnVuY3Rpb24uIEl0JiMzOTtzIGFsc28gaW1wb3J0YW50IHRvIGNvbnNpZGVyOiB3aHkgaXMgYCF0dW5fZHN0YCBldmVuIGhhcHBlbmluZz8gSXMgdGhpcyBhbiBleHBlY3RlZCBzY2VuYXJpbyAoZS5nLiwgYSB0dW5uZWwgbm90IGZ1bGx5IGNvbmZpZ3VyZWQsIGEgbWFsZm9ybWVkIHBhY2tldCwgb3IgYSByYWNlIGNvbmRpdGlvbikgb3IgaXMgaXQgaW5kaWNhdGl2ZSBvZiBhIGJpZ2dlciBwcm9ibGVtPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhpcyBjaGFuZ2UgYWZmZWN0cyB0aGUgb3ZlcmFsbCBiZWhhdmlvciBvZiB0aGUgSVBJUCB0dW5uZWxpbmcgc3RhY2suIFRoaXMgaXMgYSBzdWJ0bGUgY2hhbmdlLCBidXQgY291bGQgaW1wYWN0IHRoaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcGlwX3R1bm5lbF9yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcGlwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBpcC5jPTIwOT1zdGF0aWMgY29uc3Qgc3RydWN0IHRubF9wdGtfaW5mbyBtcGxzaXBfdHBpID0ge1xuLS1cbm5ldC9pcHY0L2lwaXAuYy0yMTQtXG5uZXQvaXB2NC9pcGlwLmM6MjE1OnN0YXRpYyBpbnQgaXBpcF90dW5uZWxfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHU4IGlwcHJvdG8pXG5uZXQvaXB2NC9pcGlwLmMtMjE2LXtcbi0tXG5uZXQvaXB2NC9pcGlwLmM9MjY2PXN0YXRpYyBpbnQgaXBpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2lwaXAuYy0yNjcte1xubmV0L2lwdjQvaXBpcC5jOjI2ODpcdHJldHVybiBpcGlwX3R1bm5lbF9yY3Yoc2tiLCBJUFBST1RPX0lQSVApO1xubmV0L2lwdjQvaXBpcC5jLTI2OS19XG4tLVxubmV0L2lwdjQvaXBpcC5jPTI3Mj1zdGF0aWMgaW50IG1wbHNpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2lwaXAuYy0yNzMte1xubmV0L2lwdjQvaXBpcC5jOjI3NDpcdHJldHVybiBpcGlwX3R1bm5lbF9yY3Yoc2tiLCBJUFBST1RPX01QTFMpO1xubmV0L2lwdjQvaXBpcC5jLTI3NS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTE6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGlwaXBfdHVubmVsX3JjdmAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCB0aGUgYGlwaXBfdHVubmVsX3JjdmAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiBgbmV0L2lwdjQvaXBpcC5jYCBhbmQgYWltaW5nIGZvciBhcm91bmQgbGluZSAyNDguIEkgZXhwZWN0IHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBjZW50cmFsIHRvIGhvdyBJUElQIHR1bm5lbHMgcmVjZWl2ZSBkYXRhLCBhbmQgYnkgZXhhbWluaW5nIHRoaXMgc3BlY2lmaWMgc2VjdGlvbiwgSSYjMzk7bSBob3BpbmcgdG8gZ2FpbiBpbnNpZ2h0cyBpbnRvIGl0cyBpbm5lciB3b3JraW5ncyBhbmQgaG93IGl0IGhhbmRsZXMgaW5jb21pbmcgcGFja2V0cy4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IGl0IGRpZmZlcmVudGlhdGVzIGJldHdlZW4gZGlmZmVyZW50IHR1bm5lbCB0eXBlcyBhbmQgaG93IGl0IGV4dHJhY3RzIHRoZSBpbm5lciBwYXlsb2FkLiBJdCBpcyBpbXBvcnRhbnQgdG8gY29tcGFyZSB0aGlzIHdpdGggYSBiYXNlbGluZSBvZiBzdGFuZGFyZCBwYWNrZXQgcmVjZXB0aW9uIHByb2NlZHVyZXMuIEkmIzM5O20gYWxzbyBob3BpbmcgdG8gc3BvdCBhbnkgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IsIHBlcmhhcHMsIGlkZW50aWZ5IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDExOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBpcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTU6XHRzdGF0aWMgaW50IGlwaXBfdHVubmVsX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBpcHByb3RvKVxuIDIxNjpcdHtcbiAyMTc6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG4gMjE4Olx0XHRzdHJ1Y3QgaXBfdHVubmVsX25ldCAqaXRuID0gbmV0X2dlbmVyaWMobmV0LCBpcGlwX25ldF9pZCk7XG4gMjE5Olx0XHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncykgPSB7IH07XG4gMjIwOlx0XHRzdHJ1Y3QgbWV0YWRhdGFfZHN0ICp0dW5fZHN0ID0gTlVMTDtcbiAyMjE6XHRcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbDtcbiAyMjI6XHRcdGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoO1xuIDIyMzpcdFxuIDIyNDpcdFx0X19zZXRfYml0KElQX1RVTk5FTF9OT19LRVlfQklULCBmbGFncyk7XG4gMjI1Olx0XG4gMjI2Olx0XHRpcGggPSBpcF9oZHIoc2tiKTtcbiAyMjc6XHRcdHR1bm5lbCA9IGlwX3R1bm5lbF9sb29rdXAoaXRuLCBza2ItXHUwMDNlZGV2LVx1MDAzZWlmaW5kZXgsIGZsYWdzLCBpcGgtXHUwMDNlc2FkZHIsXG4gMjI4Olx0XHRcdFx0XHQgIGlwaC1cdTAwM2VkYWRkciwgMCk7XG4gMjI5Olx0XHRpZiAodHVubmVsKSB7XG4gMjMwOlx0XHRcdGNvbnN0IHN0cnVjdCB0bmxfcHRrX2luZm8gKnRwaTtcbiAyMzE6XHRcbiAyMzI6XHRcdFx0aWYgKHR1bm5lbC1cdTAwM2VwYXJtcy5pcGgucHJvdG9jb2wgIT0gaXBwcm90byBcdTAwMjZcdTAwMjZcbiAyMzM6XHRcdFx0ICAgIHR1bm5lbC1cdTAwM2VwYXJtcy5pcGgucHJvdG9jb2wgIT0gMClcbiAyMzQ6XHRcdFx0XHRnb3RvIGRyb3A7XG4gMjM1Olx0XG4gMjM2Olx0XHRcdGlmICgheGZybTRfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKVxuIDIzNzpcdFx0XHRcdGdvdG8gZHJvcDtcbiAyMzg6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTVBMUylcbiAyMzk6XHRcdFx0aWYgKGlwcHJvdG8gPT0gSVBQUk9UT19NUExTKVxuIDI0MDpcdFx0XHRcdHRwaSA9IFx1MDAyNm1wbHNpcF90cGk7XG4gMjQxOlx0XHRcdGVsc2VcbiAyNDI6XHQjZW5kaWZcbiAyNDM6XHRcdFx0XHR0cGkgPSBcdTAwMjZpcGlwX3RwaTtcbiAyNDQ6XHRcdFx0aWYgKGlwdHVubmVsX3B1bGxfaGVhZGVyKHNrYiwgMCwgdHBpLVx1MDAzZXByb3RvLCBmYWxzZSkpXG4gMjQ1Olx0XHRcdFx0Z290byBkcm9wO1xuIDI0NjpcdFx0XHRpZiAodHVubmVsLVx1MDAzZWNvbGxlY3RfbWQpIHtcbiAyNDc6XHRcdFx0XHRpcF90dW5uZWxfZmxhZ3NfemVybyhmbGFncyk7XG4gMjQ4Olx0XG4gMjQ5Olx0XHRcdFx0dHVuX2RzdCA9IGlwX3R1bl9yeF9kc3Qoc2tiLCBmbGFncywgMCwgMCk7XG4gMjUwOlx0XHRcdFx0aWYgKCF0dW5fZHN0KVxuIDI1MTpcdFx0XHRcdFx0Z290byBkcm9wO1xuIDI1MjpcdFx0XHRcdGlwX3R1bm5lbF9tZF91ZHBfZW5jYXAoc2tiLCBcdTAwMjZ0dW5fZHN0LVx1MDAzZXUudHVuX2luZm8pO1xuIDI1MzpcdFx0XHR9XG4gMjU0Olx0XHRcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4gMjU1Olx0XG4gMjU2Olx0XHRcdHJldHVybiBpcF90dW5uZWxfcmN2KHR1bm5lbCwgc2tiLCB0cGksIHR1bl9kc3QsIGxvZ19lY25fZXJyb3IpO1xuIDI1NzpcdFx0fVxuIDI1ODpcdFxuIDI1OTpcdFx0cmV0dXJuIC0xO1xuIDI2MDpcdFxuIDI2MTpcdGRyb3A6XG4gMjYyOlx0XHRrZnJlZV9za2Ioc2tiKTtcbiAyNjM6XHRcdHJldHVybiAwO1xuIDI2NDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTA1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1lbW9yeSBMZWFrIEZpeCBpbiBJUElQIFR1bm5lbGluZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBjcnVjaWFsLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBhZGRyZXNzaW5nIGEgbWVtb3J5IGxlYWsgaW4gYGlwaXBfdHVubmVsX3JjdmAuIFRoZXkmIzM5O3JlIHJlcGxhY2luZyBhIHNpbXBsZSBgcmV0dXJuIDA7YCB3aXRoIGBnb3RvIGRyb3A7YCB3aGljaCB0cmlnZ2VycyBhIGBrZnJlZV9za2Ioc2tiKTtgLiBUaGlzIG1lYW5zIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgd2FzbiYjMzk7dCBiZWluZyBwcm9wZXJseSBmcmVlZCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIG1lbW9yeSBtYW5hZ2VtZW50IG92ZXJzaWdodC4KCk5vdywgbGV0JiMzOTtzIHNlZSwgYGlwaXBfdHVubmVsX3JjdmAgaXMgaW52b2tlZCBieSBib3RoIGBpcGlwX3JjdmAgYW5kIGBtcGxzaXBfcmN2YC4gU28sIHdlJiMzOTtyZSBmaXhpbmcgYSBwb3RlbnRpYWwgbGVhayBpbiBtdWx0aXBsZSBjb250ZXh0cyBoZXJlLCB3aGljaCBpcyBnb29kIHRvIHNlZS4gTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBmaXguIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIHBhdGggaXMgYWN0dWFsbHkgZW5hYmxlZCBpbiB0aGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24uIFJpZ2h0LCB0aGUgY29kZSBpbiBgbmV0L2lwdjQvaXBpcC5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfTkVUX0lQSVBgIGlzIGVuYWJsZWQuIFRoYXQgc2hvdWxkIGJlIGEgcXVpY2sgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTE6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBpcC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX0lQX01ST1VURV9DT01NT04pICYjNDM7PSBpcG1yX2Jhc2Uub1xubmV0L2lwdjQvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX05FVF9JUElQKSAmIzQzOz0gaXBpcC5vXG5uZXQvaXB2NC9NYWtlZmlsZS0yNi1ncmUteSA6PSBncmVfZGVtdXgub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDExOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNjcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gdGhlIHRhc2sgYXQgaGFuZCwgcHJlc2VudGVkIGFzIHRob3VnaCBpdCYjMzk7cyBteSBvd24gaW50ZXJuYWwgZGlhbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIElQSVAgVHVubmVsaW5nKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gZXhhbWluZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVAtaW4tSVAgdHVubmVsaW5nLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBpcyB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBJUHY0IHNlY3Rpb24uIE15IGltbWVkaWF0ZSBodW5jaCBpcyB0aGF0IHRoZSBgQ09ORklHX05FVF9JUElQYCBvcHRpb24gd2lsbCBiZSBkZWZpbmVkIGluIGBuZXQvaXB2NC9LY29uZmlnYC4gV2UmIzM5O2xsIG5lZWQgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIGNvbmZpcm0gd2hldGhlciBpdCBleGlzdHMsIGFuZCB0aGVuIGNoZWNrIGl0cyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBoZWxwIHRleHQuIFdlIHdpbGwgd2FudCB0byB1bmRlcnN0YW5kIGFsbCB0aGUgY29uZGl0aW9ucyB0aGF0IGVuYWJsZSBvciBkaXNhYmxlIElQSVAgc3VwcG9ydCBpbiB0aGlzIHBhcnRpY3VsYXIga2VybmVsIGJ1aWxkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0lQSVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9MTQ5PWNvbmZpZyBJUF9QTlBfUkFSUFxuLS1cbm5ldC9pcHY0L0tjb25maWctMTYxLVxubmV0L2lwdjQvS2NvbmZpZzoxNjI6Y29uZmlnIE5FVF9JUElQXG5uZXQvaXB2NC9LY29uZmlnLTE2My1cdHRyaXN0YXRlIFwmIzM0O0lQOiB0dW5uZWxpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTE6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY3NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVwZW5kZW5jeSBEZWVwIERpdmUgZm9yIE5FVF9JUElQKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgTkVUX0lQSVBgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIG5vdCBqdXN0IGFzc3VtZSBpdCYjMzk7cyBzdGFuZGFsb25lLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBhbmQgdmVyaWZ5IHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcywgZWl0aGVyIGhhcmQgb3Igc29mdCwgdGhhdCBJJiMzOTttIG92ZXJsb29raW5nLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IHRoZSBvYnZpb3VzIEtjb25maWcgZGVwZW5kZW5jaWVzLCBvZiBjb3Vyc2U7IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYnJvYWRlciBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBBcmUgdGhlcmUgc3BlY2lmaWMgZmVhdHVyZXMgb3IgbW9kdWxlcyB0aGF0IGBORVRfSVBJUGAgaW50ZXJhY3RzIHdpdGggaW5kaXJlY3RseT8gQ291bGQgZW5hYmxpbmcgdGhpcyBhZmZlY3QgdGhlIGJlaGF2aW9yIG9yIHBlcmZvcm1hbmNlIG9mIG90aGVyLCBzZWVtaW5nbHkgdW5yZWxhdGVkLCBwYXJ0cyBvZiB0aGUgc3lzdGVtPyBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkmIzM5O20gdGhpbmtpbmcsIGFyZSB0aGVyZSBhbnkgaW50ZXJhY3Rpb25zIHdpdGggcm91dGluZyBwcm90b2NvbHMsIGZpcmV3YWxsIGltcGxlbWVudGF0aW9ucywgb3IgZXZlbiBsb3ctbGV2ZWwgaGFyZHdhcmUgZHJpdmVycyB0aGF0IEkgbWlnaHQgbm90IGJlIGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nPyBUaW1lIHRvIHB1bGwgdXAgdGhlIGNyb3NzLXJlZmVyZW5jZXMsIGNoZWNrIHRoZSBkb2N1bWVudGF0aW9uLCBhbmQgbWF5YmUgZXZlbiBwZWVrIGF0IHNvbWUgcmVsZXZhbnQga2VybmVsIHNvdXJjZSBjb2RlIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIEdvdHRhIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzIHdoZW4gdGhpcyB0aGluZyBpcyBlbmFibGVkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2MjpcdGNvbmZpZyBORVRfSVBJUFxuIDE2MzpcdFx0dHJpc3RhdGUgXCYjMzQ7SVA6IHR1bm5lbGluZ1wmIzM0O1xuIDE2NDpcdFx0c2VsZWN0IElORVRfVFVOTkVMXG4gMTY1Olx0XHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxuIDE2NjpcdFx0aGVscFxuIDE2NzpcdFx0ICBUdW5uZWxpbmcgbWVhbnMgZW5jYXBzdWxhdGluZyBkYXRhIG9mIG9uZSBwcm90b2NvbCB0eXBlIHdpdGhpblxuIDE2ODpcdFx0ICBhbm90aGVyIHByb3RvY29sIGFuZCBzZW5kaW5nIGl0IG92ZXIgYSBjaGFubmVsIHRoYXQgdW5kZXJzdGFuZHMgdGhlXG4gMTY5Olx0XHQgIGVuY2Fwc3VsYXRpbmcgcHJvdG9jb2wuIFRoaXMgcGFydGljdWxhciB0dW5uZWxpbmcgZHJpdmVyIGltcGxlbWVudHNcbiAxNzA6XHRcdCAgZW5jYXBzdWxhdGlvbiBvZiBJUCB3aXRoaW4gSVAsIHdoaWNoIHNvdW5kcyBraW5kIG9mIHBvaW50bGVzcywgYnV0XG4gMTcxOlx0XHQgIGNhbiBiZSB1c2VmdWwgaWYgeW91IHdhbnQgdG8gbWFrZSB5b3VyIChvciBzb21lIG90aGVyKSBtYWNoaW5lXG4gMTcyOlx0XHQgIGFwcGVhciBvbiBhIGRpZmZlcmVudCBuZXR3b3JrIHRoYW4gaXQgcGh5c2ljYWxseSBpcywgb3IgdG8gdXNlXG4gMTczOlx0XHQgIG1vYmlsZS1JUCBmYWNpbGl0aWVzIChhbGxvd2luZyBsYXB0b3BzIHRvIHNlYW1sZXNzbHkgbW92ZSBiZXR3ZWVuXG4gMTc0Olx0XHQgIG5ldHdvcmtzIHdpdGhvdXQgY2hhbmdpbmcgdGhlaXIgSVAgYWRkcmVzc2VzKS5cbiAxNzU6XHRcbiAxNzY6XHRcdCAgU2F5aW5nIFkgdG8gdGhpcyBvcHRpb24gd2lsbCBwcm9kdWNlIHR3byBtb2R1bGVzICggPSBjb2RlIHdoaWNoIGNhblxuIDE3NzpcdFx0ICBiZSBpbnNlcnRlZCBpbiBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBydW5uaW5nIGtlcm5lbCB3aGVuZXZlciB5b3VcbiAxNzg6XHRcdCAgd2FudCkuIE1vc3QgcGVvcGxlIHdvbiYjMzk7dCBuZWVkIHRoaXMgYW5kIGNhbiBzYXkgTi5cbiAxNzk6XHRcbiAxODA6XHRjb25maWcgTkVUX0lQR1JFX0RFTVVYXG4gMTgxOlx0XHR0cmlzdGF0ZSBcJiMzNDtJUDogR1JFIGRlbXVsdGlwbGV4ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTE6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMwMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBUaGlzIE5ldHdvcmsgUHJvdG9jb2wgRml4KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgbWVtb3J5IGxlYWsgd2l0aGluIGBpcGlwX3R1bm5lbF9yY3ZgLCBzcGVjaWZpY2FsbHkgd2hlbiBgaXBfdHVuX3J4X2RzdGAgcmV0dXJucyBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXgsIGFuZCBpdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIGEgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgaGFuZGxlciDigJMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhpcyBhcyBhIGNyaXRpY2FsIGFyZWEuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBmdXp6aW5nIGBpcGlwX3R1bm5lbF9yY3ZgIGl0c2VsZi4gSeKAmWxsIG1ha2Ugc3VyZSB0aGUgYE5FVF9JUElQYCBjb25maWcgaXMgZW5hYmxlZC4gSG93ZXZlciwgd2FpdCwgYGlwaXBfdHVubmVsX3JjdmAgaXMgc3RhdGljISBUaGF0IGNoYW5nZXMgdGhlIGdhbWUgYSBiaXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY2FsbHMgKml0Kiwgb3IgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBpbnZvbHZlZCB3aGljaCBhbHNvIGFyZSBwYXJ0IG9mIHRoaXMgbmV0d29yayBwYXRoIHRoYXQgbWF5IG5vdCBiZSBzdGF0aWMuIEdpdmVuIHRoYXQgYGlwaXBfdHVubmVsX3JjdmAgaXMgaW50ZXJuYWwsIEkgc2hvdWxkIGludmVzdGlnYXRlIGBpcGlwX3JjdmAgYW5kIGBtcGxzaXBfcmN2YCwgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGFyZSBhbHNvIHN0YXRpYy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY29kZSB0byBzZWUgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGFuZCB3aGV0aGVyIHRoZSBzdGF0aWMgbmF0dXJlIG9mIGBpcGlwX3R1bm5lbF9yY3ZgIGltcGxpZXMgYW55IGxpbWl0YXRpb25zIG9uIHRyaWdnZXJpbmcgdGhlIGJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTE6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBpcF9yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcGlwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBpcC5jPTIxNT1zdGF0aWMgaW50IGlwaXBfdHVubmVsX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBpcHByb3RvKVxuLS1cbm5ldC9pcHY0L2lwaXAuYy0yNjUtXG5uZXQvaXB2NC9pcGlwLmM6MjY2OnN0YXRpYyBpbnQgaXBpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2lwaXAuYy0yNjcte1xuLS1cbm5ldC9pcHY0L2lwaXAuYz02MTY9c3RhdGljIHN0cnVjdCB4ZnJtX3R1bm5lbCBpcGlwX2hhbmRsZXIgX19yZWFkX21vc3RseSA9IHtcbm5ldC9pcHY0L2lwaXAuYzo2MTc6XHQuaGFuZGxlclx0PVx0aXBpcF9yY3YsXG5uZXQvaXB2NC9pcGlwLmMtNjE4LVx0LmVycl9oYW5kbGVyXHQ9XHRpcGlwX2VycixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkzMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBIYW5kbGVyIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBzbyB0aGUgYXJjaGl0ZWN0dXJlIGRlZmluZXMgdGhlc2UgdGhpbmdzIGFzICYjMzQ7c3RhdGljLCYjMzQ7IGJ1dCB0aGV5JiMzOTtyZSAqcmVnaXN0ZXJlZCogYXMgaGFuZGxlcnMuIFRoYXQmIzM5O3MgYSBrZXkgZGlzdGluY3Rpb24gSSBuZWVkIHRvIGdyYXNwIHRob3JvdWdobHkuIE15IGZpcnN0IHF1ZXN0aW9uOiBhcmUgd2UgZGVhbGluZyB3aXRoIGV4Y2x1c2l2ZWx5IHN0YXRpYyBtZXRob2RzIGhlcmUsIG9yIGFyZSB0aGVyZSBub24tc3RhdGljIGZ1bmN0aW9ucyBsdXJraW5nIGFyb3VuZCBzb21ld2hlcmU/IFRoZSBhc3N1bXB0aW9uLCBiYXNlZCBvbiB0aGVpciBkZWNsYXJlZCBzdGF0dXMsIHdvdWxkIGJlIHRoYXQgdGhlc2UgYXJlIG1lYW50IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBjbGFzcyBtZW1iZXJzLiBCdXQgbGV0JiMzOTtzIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24gYW5kIGVuc3VyZSB3ZSBoYXZlIGZ1bGwga25vd2xlZGdlIG9mIHRoZSBjb21wb3NpdGlvbi4gSWYgdGhlcmUgKmFyZSogbm9uLXN0YXRpYyBlbGVtZW50cywgdGhhdCBpbnRyb2R1Y2VzIGEgd2hvbGUgbGF5ZXIgb2YgY29udGV4dCB0aGF0IHdvdWxkIG5lZWQgdG8gYmUgYWRkcmVzc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcGlwXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwaXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcGlwLmM9MTE3PU1PRFVMRV9QQVJNX0RFU0MobG9nX2Vjbl9lcnJvciwgXCYjMzQ7TG9nIHBhY2tldHMgcmVjZWl2ZWQgd2l0aCBjb3JydXB0ZWQgRUNOXCYjMzQ7KTtcbm5ldC9pcHY0L2lwaXAuYy0xMTgtXG5uZXQvaXB2NC9pcGlwLmM6MTE5OnN0YXRpYyB1bnNpZ25lZCBpbnQgaXBpcF9uZXRfaWQgX19yZWFkX21vc3RseTtcbm5ldC9pcHY0L2lwaXAuYy0xMjAtXG5uZXQvaXB2NC9pcGlwLmM6MTIxOnN0YXRpYyBpbnQgaXBpcF90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbm5ldC9pcHY0L2lwaXAuYzoxMjI6c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwaXBfbGlua19vcHMgX19yZWFkX21vc3RseTtcbm5ldC9pcHY0L2lwaXAuYy0xMjMtXG5uZXQvaXB2NC9pcGlwLmM6MTI0OnN0YXRpYyBpbnQgaXBpcF9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluZm8pXG5uZXQvaXB2NC9pcGlwLmMtMTI1LXtcbi0tXG5uZXQvaXB2NC9pcGlwLmMtMTMwLVx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXHUwMDNlZGV2KTtcbm5ldC9pcHY0L2lwaXAuYzoxMzE6XHRzdHJ1Y3QgaXBfdHVubmVsX25ldCAqaXRuID0gbmV0X2dlbmVyaWMobmV0LCBpcGlwX25ldF9pZCk7XG5uZXQvaXB2NC9pcGlwLmMtMTMyLVx0Y29uc3Qgc3RydWN0IGlwaGRyICppcGggPSAoY29uc3Qgc3RydWN0IGlwaGRyICopc2tiLVx1MDAzZWRhdGE7XG4tLVxubmV0L2lwdjQvaXBpcC5jLTIwMi1cbm5ldC9pcHY0L2lwaXAuYzoyMDM6c3RhdGljIGNvbnN0IHN0cnVjdCB0bmxfcHRrX2luZm8gaXBpcF90cGkgPSB7XG5uZXQvaXB2NC9pcGlwLmMtMjA0LVx0Lyogbm8gdHVubmVsIGluZm8gcmVxdWlyZWQgZm9yIGlwaXAuICovXG4tLVxubmV0L2lwdjQvaXBpcC5jPTIwOT1zdGF0aWMgY29uc3Qgc3RydWN0IHRubF9wdGtfaW5mbyBtcGxzaXBfdHBpID0ge1xuLS1cbm5ldC9pcHY0L2lwaXAuYy0yMTQtXG5uZXQvaXB2NC9pcGlwLmM6MjE1OnN0YXRpYyBpbnQgaXBpcF90dW5uZWxfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHU4IGlwcHJvdG8pXG5uZXQvaXB2NC9pcGlwLmMtMjE2LXtcbm5ldC9pcHY0L2lwaXAuYy0yMTctXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjQvaXBpcC5jOjIxODpcdHN0cnVjdCBpcF90dW5uZWxfbmV0ICppdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGlwaXBfbmV0X2lkKTtcbm5ldC9pcHY0L2lwaXAuYy0yMTktXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncykgPSB7IH07XG4tLVxubmV0L2lwdjQvaXBpcC5jLTI0Mi0jZW5kaWZcbm5ldC9pcHY0L2lwaXAuYzoyNDM6XHRcdFx0dHBpID0gXHUwMDI2aXBpcF90cGk7XG5uZXQvaXB2NC9pcGlwLmMtMjQ0LVx0XHRpZiAoaXB0dW5uZWxfcHVsbF9oZWFkZXIoc2tiLCAwLCB0cGktXHUwMDNlcHJvdG8sIGZhbHNlKSlcbi0tXG5uZXQvaXB2NC9pcGlwLmMtMjY1LVxubmV0L2lwdjQvaXBpcC5jOjI2NjpzdGF0aWMgaW50IGlwaXBfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2NC9pcGlwLmMtMjY3LXtcbm5ldC9pcHY0L2lwaXAuYzoyNjg6XHRyZXR1cm4gaXBpcF90dW5uZWxfcmN2KHNrYiwgSVBQUk9UT19JUElQKTtcbm5ldC9pcHY0L2lwaXAuYy0yNjktfVxuLS1cbm5ldC9pcHY0L2lwaXAuYz0yNzI9c3RhdGljIGludCBtcGxzaXBfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2NC9pcGlwLmMtMjczLXtcbm5ldC9pcHY0L2lwaXAuYzoyNzQ6XHRyZXR1cm4gaXBpcF90dW5uZWxfcmN2KHNrYiwgSVBQUk9UT19NUExTKTtcbm5ldC9pcHY0L2lwaXAuYy0yNzUtfVxuLS1cbm5ldC9pcHY0L2lwaXAuYy0yODEtICovXG5uZXQvaXB2NC9pcGlwLmM6MjgyOnN0YXRpYyBuZXRkZXZfdHhfdCBpcGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC9pcGlwLmMtMjgzLVx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvaXBpcC5jLTMyNS1cbm5ldC9pcHY0L2lwaXAuYzozMjY6c3RhdGljIGJvb2wgaXBpcF90dW5uZWxfaW9jdGxfdmVyaWZ5X3Byb3RvY29sKHU4IGlwcHJvdG8pXG5uZXQvaXB2NC9pcGlwLmMtMzI3LXtcbi0tXG5uZXQvaXB2NC9pcGlwLmM9MzQwPXN0YXRpYyBpbnRcbm5ldC9pcHY0L2lwaXAuYzozNDE6aXBpcF90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLCBpbnQgY21kKVxubmV0L2lwdjQvaXBpcC5jLTM0Mi17XG4tLVxubmV0L2lwdjQvaXBpcC5jLTM0NC1cdFx0aWYgKHAtXHUwMDNlaXBoLnZlcnNpb24gIT0gNCB8fFxubmV0L2lwdjQvaXBpcC5jOjM0NTpcdFx0ICAgICFpcGlwX3R1bm5lbF9pb2N0bF92ZXJpZnlfcHJvdG9jb2wocC1cdTAwM2VpcGgucHJvdG9jb2wpIHx8XG5uZXQvaXB2NC9pcGlwLmMtMzQ2LVx0XHQgICAgcC1cdTAwM2VpcGguaWhsICE9IDUgfHwgKHAtXHUwMDNlaXBoLmZyYWdfb2ZmIFx1MDAyNiBodG9ucyh+SVBfREYpKSlcbi0tXG5uZXQvaXB2NC9pcGlwLmMtMzU1LVxubmV0L2lwdjQvaXBpcC5jOjM1NjpzdGF0aWMgaW50IGlwaXBfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbm5ldC9pcHY0L2lwaXAuYy0zNTctXHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXG4tLVxubmV0L2lwdjQvaXBpcC5jLTM3OS1cbm5ldC9pcHY0L2lwaXAuYzozODA6c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcGlwX25ldGRldl9vcHMgPSB7XG5uZXQvaXB2NC9pcGlwLmM6MzgxOlx0Lm5kb19pbml0ICAgICAgID0gaXBpcF90dW5uZWxfaW5pdCxcbm5ldC9pcHY0L2lwaXAuYy0zODItXHQubmRvX3VuaW5pdCAgICAgPSBpcF90dW5uZWxfdW5pbml0LFxubmV0L2lwdjQvaXBpcC5jOjM4MzpcdC5uZG9fc3RhcnRfeG1pdFx0PSBpcGlwX3R1bm5lbF94bWl0LFxubmV0L2lwdjQvaXBpcC5jLTM4NC1cdC5uZG9fc2lvY2RldnByaXZhdGUgPSBpcF90dW5uZWxfc2lvY2RldnByaXZhdGUsXG4tLVxubmV0L2lwdjQvaXBpcC5jLTM4Ny1cdC5uZG9fZ2V0X2lmbGluayA9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxubmV0L2lwdjQvaXBpcC5jOjM4ODpcdC5uZG9fdHVubmVsX2N0bFx0PSBpcGlwX3R1bm5lbF9jdGwsXG5uZXQvaXB2NC9pcGlwLmM6Mzg5Olx0Lm5kb19maWxsX2ZvcndhcmRfcGF0aCA9IGlwaXBfZmlsbF9mb3J3YXJkX3BhdGgsXG5uZXQvaXB2NC9pcGlwLmMtMzkwLX07XG4tLVxubmV0L2lwdjQvaXBpcC5jLTM5Ny1cbm5ldC9pcHY0L2lwaXAuYzozOTg6c3RhdGljIHZvaWQgaXBpcF90dW5uZWxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9pcHY0L2lwaXAuYy0zOTkte1xubmV0L2lwdjQvaXBpcC5jOjQwMDpcdGRldi1cdTAwM2VuZXRkZXZfb3BzXHRcdD0gXHUwMDI2aXBpcF9uZXRkZXZfb3BzO1xubmV0L2lwdjQvaXBpcC5jLTQwMS1cdGRldi1cdTAwM2VoZWFkZXJfb3BzXHRcdD0gXHUwMDI2aXBfdHVubmVsX2hlYWRlcl9vcHM7XG4tLVxubmV0L2lwdjQvaXBpcC5jLTQxMC1cdGRldi1cdTAwM2Vod19mZWF0dXJlc1x0fD0gSVBJUF9GRUFUVVJFUztcbm5ldC9pcHY0L2lwaXAuYzo0MTE6XHRpcF90dW5uZWxfc2V0dXAoZGV2LCBpcGlwX25ldF9pZCk7XG5uZXQvaXB2NC9pcGlwLmMtNDEyLX1cbm5ldC9pcHY0L2lwaXAuYy00MTMtXG5uZXQvaXB2NC9pcGlwLmM6NDE0OnN0YXRpYyBpbnQgaXBpcF90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2lwdjQvaXBpcC5jLTQxNS17XG4tLVxubmV0L2lwdjQvaXBpcC5jLTQyNS1cbm5ldC9pcHY0L2lwaXAuYzo0MjY6c3RhdGljIGludCBpcGlwX3R1bm5lbF92YWxpZGF0ZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG5uZXQvaXB2NC9pcGlwLmMtNDI3LVx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9pcHY0L2lwaXAuYy00NDAtXG5uZXQvaXB2NC9pcGlwLmM6NDQxOnN0YXRpYyB2b2lkIGlwaXBfbmV0bGlua19wYXJtcyhzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG5uZXQvaXB2NC9pcGlwLmMtNDQyLVx0XHRcdCAgICAgICBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcGFybXMsXG4tLVxubmV0L2lwdjQvaXBpcC5jLTQ2My1cbm5ldC9pcHY0L2lwaXAuYzo0NjQ6c3RhdGljIGludCBpcGlwX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pcHY0L2lwaXAuYy00NjUtXHRcdFx0c3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcbi0tXG5uZXQvaXB2NC9pcGlwLmMtNDgxLVxubmV0L2lwdjQvaXBpcC5jOjQ4MjpcdGlwaXBfbmV0bGlua19wYXJtcyhkYXRhLCBcdTAwMjZwLCBcdTAwMjZ0LVx1MDAzZWNvbGxlY3RfbWQsIFx1MDAyNmZ3bWFyayk7XG5uZXQvaXB2NC9pcGlwLmMtNDgzLVx0cmV0dXJuIGlwX3R1bm5lbF9uZXdsaW5rKHBhcmFtcy1cdTAwM2VsaW5rX25ldCA/IDogZGV2X25ldChkZXYpLCBkZXYsIHRiLCBcdTAwMjZwLFxuLS1cbm5ldC9pcHY0L2lwaXAuYy00ODYtXG5uZXQvaXB2NC9pcGlwLmM6NDg3OnN0YXRpYyBpbnQgaXBpcF9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvaXB2NC9pcGlwLmMtNDg4LVx0XHRcdCAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbi0tXG5uZXQvaXB2NC9pcGlwLmMtNTA2LVxubmV0L2lwdjQvaXBpcC5jOjUwNzpcdGlwaXBfbmV0bGlua19wYXJtcyhkYXRhLCBcdTAwMjZwLCBcdTAwMjZjb2xsZWN0X21kLCBcdTAwMjZmd21hcmspO1xubmV0L2lwdjQvaXBpcC5jLTUwOC1cdGlmIChjb2xsZWN0X21kKVxuLS1cbm5ldC9pcHY0L2lwaXAuYy01MTctXG5uZXQvaXB2NC9pcGlwLmM6NTE4OnN0YXRpYyBzaXplX3QgaXBpcF9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2lwdjQvaXBpcC5jLTUxOS17XG4tLVxubmV0L2lwdjQvaXBpcC5jLTU0OS1cbm5ldC9pcHY0L2lwaXAuYzo1NTA6c3RhdGljIGludCBpcGlwX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2lwdjQvaXBpcC5jLTU1MS17XG4tLVxubmV0L2lwdjQvaXBpcC5jLTU4NC1cbm5ldC9pcHY0L2lwaXAuYzo1ODU6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGlwaXBfcG9saWN5W0lGTEFfSVBUVU5fTUFYICYjNDM7IDFdID0ge1xubmV0L2lwdjQvaXBpcC5jLTU4Ni1cdFtJRkxBX0lQVFVOX0xJTktdXHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbi0tXG5uZXQvaXB2NC9pcGlwLmMtNjAwLVxubmV0L2lwdjQvaXBpcC5jOjYwMTpzdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXBpcF9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xubmV0L2lwdjQvaXBpcC5jLTYwMi1cdC5raW5kXHRcdD0gXCYjMzQ7aXBpcFwmIzM0Oyxcbm5ldC9pcHY0L2lwaXAuYy02MDMtXHQubWF4dHlwZVx0PSBJRkxBX0lQVFVOX01BWCxcbm5ldC9pcHY0L2lwaXAuYzo2MDQ6XHQucG9saWN5XHRcdD0gaXBpcF9wb2xpY3ksXG5uZXQvaXB2NC9pcGlwLmMtNjA1LVx0LnByaXZfc2l6ZVx0PSBzaXplb2Yoc3RydWN0IGlwX3R1bm5lbCksXG5uZXQvaXB2NC9pcGlwLmM6NjA2Olx0LnNldHVwXHRcdD0gaXBpcF90dW5uZWxfc2V0dXAsXG5uZXQvaXB2NC9pcGlwLmM6NjA3Olx0LnZhbGlkYXRlXHQ9IGlwaXBfdHVubmVsX3ZhbGlkYXRlLFxubmV0L2lwdjQvaXBpcC5jOjYwODpcdC5uZXdsaW5rXHQ9IGlwaXBfbmV3bGluayxcbm5ldC9pcHY0L2lwaXAuYzo2MDk6XHQuY2hhbmdlbGlua1x0PSBpcGlwX2NoYW5nZWxpbmssXG5uZXQvaXB2NC9pcGlwLmMtNjEwLVx0LmRlbGxpbmtcdD0gaXBfdHVubmVsX2RlbGxpbmssXG5uZXQvaXB2NC9pcGlwLmM6NjExOlx0LmdldF9zaXplXHQ9IGlwaXBfZ2V0X3NpemUsXG5uZXQvaXB2NC9pcGlwLmM6NjEyOlx0LmZpbGxfaW5mb1x0PSBpcGlwX2ZpbGxfaW5mbyxcbm5ldC9pcHY0L2lwaXAuYy02MTMtXHQuZ2V0X2xpbmtfbmV0XHQ9IGlwX3R1bm5lbF9nZXRfbGlua19uZXQsXG4tLVxubmV0L2lwdjQvaXBpcC5jLTYxNS1cbm5ldC9pcHY0L2lwaXAuYzo2MTY6c3RhdGljIHN0cnVjdCB4ZnJtX3R1bm5lbCBpcGlwX2hhbmRsZXIgX19yZWFkX21vc3RseSA9IHtcbm5ldC9pcHY0L2lwaXAuYzo2MTc6XHQuaGFuZGxlclx0PVx0aXBpcF9yY3YsXG5uZXQvaXB2NC9pcGlwLmM6NjE4Olx0LmVycl9oYW5kbGVyXHQ9XHRpcGlwX2Vycixcbm5ldC9pcHY0L2lwaXAuYy02MTktXHQucHJpb3JpdHlcdD1cdDEsXG4tLVxubmV0L2lwdjQvaXBpcC5jPTYyMz1zdGF0aWMgc3RydWN0IHhmcm1fdHVubmVsIG1wbHNpcF9oYW5kbGVyIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvaXB2NC9pcGlwLmMtNjI0LVx0LmhhbmRsZXJcdD1cdG1wbHNpcF9yY3YsXG5uZXQvaXB2NC9pcGlwLmM6NjI1Olx0LmVycl9oYW5kbGVyXHQ9XHRpcGlwX2Vycixcbm5ldC9pcHY0L2lwaXAuYy02MjYtXHQucHJpb3JpdHlcdD1cdDEsXG4tLVxubmV0L2lwdjQvaXBpcC5jLTYyOS1cbm5ldC9pcHY0L2lwaXAuYzo2MzA6c3RhdGljIGludCBfX25ldF9pbml0IGlwaXBfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L2lwdjQvaXBpcC5jLTYzMS17XG5uZXQvaXB2NC9pcGlwLmM6NjMyOlx0cmV0dXJuIGlwX3R1bm5lbF9pbml0X25ldChuZXQsIGlwaXBfbmV0X2lkLCBcdTAwMjZpcGlwX2xpbmtfb3BzLCBcJiMzNDt0dW5sMFwmIzM0Oyk7XG5uZXQvaXB2NC9pcGlwLmMtNjMzLX1cbm5ldC9pcHY0L2lwaXAuYy02MzQtXG5uZXQvaXB2NC9pcGlwLmM6NjM1OnN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXBpcF9leGl0X3J0bmwoc3RydWN0IG5ldCAqbmV0LFxubmV0L2lwdjQvaXBpcC5jLTYzNi1cdFx0XHRcdCAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmRldl90b19raWxsKVxubmV0L2lwdjQvaXBpcC5jLTYzNy17XG5uZXQvaXB2NC9pcGlwLmM6NjM4Olx0aXBfdHVubmVsX2RlbGV0ZV9uZXQobmV0LCBpcGlwX25ldF9pZCwgXHUwMDI2aXBpcF9saW5rX29wcywgZGV2X3RvX2tpbGwpO1xubmV0L2lwdjQvaXBpcC5jLTYzOS19XG5uZXQvaXB2NC9pcGlwLmMtNjQwLVxubmV0L2lwdjQvaXBpcC5jOjY0MTpzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGlwaXBfbmV0X29wcyA9IHtcbm5ldC9pcHY0L2lwaXAuYzo2NDI6XHQuaW5pdCA9IGlwaXBfaW5pdF9uZXQsXG5uZXQvaXB2NC9pcGlwLmM6NjQzOlx0LmV4aXRfcnRubCA9IGlwaXBfZXhpdF9ydG5sLFxubmV0L2lwdjQvaXBpcC5jOjY0NDpcdC5pZCAgID0gXHUwMDI2aXBpcF9uZXRfaWQsXG5uZXQvaXB2NC9pcGlwLmMtNjQ1LVx0LnNpemUgPSBzaXplb2Yoc3RydWN0IGlwX3R1bm5lbF9uZXQpLFxuLS1cbm5ldC9pcHY0L2lwaXAuYy02NDctXG5uZXQvaXB2NC9pcGlwLmM6NjQ4OnN0YXRpYyBpbnQgX19pbml0IGlwaXBfaW5pdCh2b2lkKVxubmV0L2lwdjQvaXBpcC5jLTY0OS17XG4tLVxubmV0L2lwdjQvaXBpcC5jLTY1My1cbm5ldC9pcHY0L2lwaXAuYzo2NTQ6XHRlcnIgPSByZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKFx1MDAyNmlwaXBfbmV0X29wcyk7XG5uZXQvaXB2NC9pcGlwLmMtNjU1LVx0aWYgKGVyciBcdTAwM2MgMClcbm5ldC9pcHY0L2lwaXAuYy02NTYtXHRcdHJldHVybiBlcnI7XG5uZXQvaXB2NC9pcGlwLmM6NjU3Olx0ZXJyID0geGZybTRfdHVubmVsX3JlZ2lzdGVyKFx1MDAyNmlwaXBfaGFuZGxlciwgQUZfSU5FVCk7XG5uZXQvaXB2NC9pcGlwLmMtNjU4LVx0aWYgKGVyciBcdTAwM2MgMCkge1xubmV0L2lwdjQvaXBpcC5jLTY1OS1cdFx0cHJfaW5mbyhcJiMzNDslczogY2FuJiMzOTt0IHJlZ2lzdGVyIHR1bm5lbFxcblwmIzM0OywgX19mdW5jX18pO1xubmV0L2lwdjQvaXBpcC5jOjY2MDpcdFx0Z290byB4ZnJtX3R1bm5lbF9pcGlwX2ZhaWxlZDtcbm5ldC9pcHY0L2lwaXAuYy02NjEtXHR9XG4tLVxubmV0L2lwdjQvaXBpcC5jLTY2OC0jZW5kaWZcbm5ldC9pcHY0L2lwaXAuYzo2Njk6XHRlcnIgPSBydG5sX2xpbmtfcmVnaXN0ZXIoXHUwMDI2aXBpcF9saW5rX29wcyk7XG5uZXQvaXB2NC9pcGlwLmMtNjcwLVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvaXB2NC9pcGlwLmMtNjgxLSNlbmRpZlxubmV0L2lwdjQvaXBpcC5jOjY4MjpcdHhmcm00X3R1bm5lbF9kZXJlZ2lzdGVyKFx1MDAyNmlwaXBfaGFuZGxlciwgQUZfSU5FVCk7XG5uZXQvaXB2NC9pcGlwLmM6NjgzOnhmcm1fdHVubmVsX2lwaXBfZmFpbGVkOlxubmV0L2lwdjQvaXBpcC5jOjY4NDpcdHVucmVnaXN0ZXJfcGVybmV0X2RldmljZShcdTAwMjZpcGlwX25ldF9vcHMpO1xubmV0L2lwdjQvaXBpcC5jLTY4NS1cdGdvdG8gb3V0O1xuLS1cbm5ldC9pcHY0L2lwaXAuYy02ODctXG5uZXQvaXB2NC9pcGlwLmM6Njg4OnN0YXRpYyB2b2lkIF9fZXhpdCBpcGlwX2Zpbmkodm9pZClcbm5ldC9pcHY0L2lwaXAuYy02ODkte1xubmV0L2lwdjQvaXBpcC5jOjY5MDpcdHJ0bmxfbGlua191bnJlZ2lzdGVyKFx1MDAyNmlwaXBfbGlua19vcHMpO1xubmV0L2lwdjQvaXBpcC5jOjY5MTpcdGlmICh4ZnJtNF90dW5uZWxfZGVyZWdpc3RlcihcdTAwMjZpcGlwX2hhbmRsZXIsIEFGX0lORVQpKVxubmV0L2lwdjQvaXBpcC5jLTY5Mi1cdFx0cHJfaW5mbyhcJiMzNDslczogY2FuJiMzOTt0IGRlcmVnaXN0ZXIgdHVubmVsXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4tLVxubmV0L2lwdjQvaXBpcC5jLTY5Ni0jZW5kaWZcbm5ldC9pcHY0L2lwaXAuYzo2OTc6XHR1bnJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoXHUwMDI2aXBpcF9uZXRfb3BzKTtcbm5ldC9pcHY0L2lwaXAuYy02OTgtfVxubmV0L2lwdjQvaXBpcC5jLTY5OS1cbm5ldC9pcHY0L2lwaXAuYzo3MDA6bW9kdWxlX2luaXQoaXBpcF9pbml0KTtcbm5ldC9pcHY0L2lwaXAuYzo3MDE6bW9kdWxlX2V4aXQoaXBpcF9maW5pKTtcbm5ldC9pcHY0L2lwaXAuYy03MDItTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0lQL0lQIHByb3RvY29sIGRlY29kZXIgbGlicmFyeVwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDExOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTk4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIElQSVAgVHVubmVsIFJlY2VpdmVyIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBiZXN0IHRvIGZ1enogdGhlIElQSVAgdHVubmVsIHJlY2VpdmUgcGF0aCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhhdCBtZW1vcnkgbGVhayBmaXguIFRoZSBmdW5jdGlvbnMgYGlwaXBfcmN2YCBhbmQgYG1wbHNpcF9yY3ZgIGltbWVkaWF0ZWx5IGNhdWdodCBteSBleWUuIFRoZXkmIzM5O3JlIHJlZ2lzdGVyZWQgdGhyb3VnaCBgeGZybTRfdHVubmVsX3JlZ2lzdGVyYCwgd2hpY2ggbWFrZXMgdGhlbSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLiBIbW0sIGJ1dCB0aGV5JiMzOTtyZSAqc3RhdGljKi4gTm93LCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBMZXQgbWUgdGhpbmsuLi4gd2FpdCwgaWYgdGhleSBhcmUgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIGB4ZnJtNF90dW5uZWxfcmVnaXN0ZXJgLCB0aGVuIHRoZSBjb21waWxlciAqY2FuJiMzOTt0KiBpbmxpbmUgdGhlbS4gVGhleSBoYXZlIHRvIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcywgZXZlbiBpZiBzdGF0aWMuIEV4Y2VsbGVudC4gU28sIGBpcGlwX3JjdmAgYW5kIGBtcGxzaXBfcmN2YCBhcmUgYWN0dWFsbHkgZ29vZCBjYW5kaWRhdGVzIGZvciBgRm9jdXNTeW1ib2xzYC4KCkkgd2FzIGEgYml0IHdvcnJpZWQgYWJvdXQgYGlwaXBfdHVubmVsX3JjdmAsIHNpbmNlIHRoYXQgc2VlbXMgdG8gYmUgdGhlIG1haW4gZnVuY3Rpb24gd2hlcmUgdGhlIHBhdGNoIGlzLiBCdXQgc2luY2UgYGlwaXBfcmN2YCBhbmQgYG1wbHNpcF9yY3ZgIGFyZSB0aGUgaGFuZGxlcnMgdGhhdCBnZXQgcmVnaXN0ZXJlZCwgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGNhbGwgYGlwaXBfdHVubmVsX3JjdmAsIEkgdGhpbmsgdGhlc2UgYXJlIGJldHRlciBjaG9pY2VzIGZvciBmdXp6aW5nLiBgaXBpcF90dW5uZWxfcmN2YCBtaWdodCBiZSBpbmxpbmVkIHdpdGhpbiB0aGVtLCBidXQgbGV0JiMzOTtzIHN0aWNrIHdpdGggdGhlIGVudHJ5cG9pbnRzLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgaXBfdHVubmVsX3JjdmAgaXNuJiMzOTt0IGEgbm9uLXN0YXRpYyBhbHRlcm5hdGl2ZS4uLiBZZXAsIGl0JiMzOTtzIHRoZXJlIGluIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AgYnV0IHRoZSBpbXBvcnRhbnQgY2hhbmdlcyBhcmUgaW4gYGlwaXBfdHVubmVsX3JjdmAhCgpTbywgSSYjMzk7bSBnb2luZyB3aXRoIGBpcGlwX3JjdmAgYW5kIGBtcGxzaXBfcmN2YCBhcyBteSBgRm9jdXNTeW1ib2xzYC4gVGhleSBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgY292ZXJpbmcgdGhlIHBhdGguIEFzIGZvciBjb25maWd1cmF0aW9uLCBgTkVUX0lQSVBgIGlzIGNsZWFybHkgbmVlZGVkLiBJJiMzOTtsbCBhbHNvIGRvdWJsZS1jaGVjaywgYW5kIGBDT05GSUdfTVBMU2AgaXMgYWxzbyByZXF1aXJlZCBiZWNhdXNlIG9mIGBtcGxzaXBfcmN2YC4gSSBzaG91bGQgY2hlY2sgYG5ldC9pcHY0L2lwaXAuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuCgpUaGUgcmVhc29uaW5nIGhlcmUgaXMgc29saWQ6IGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBuZXR3b3JrIHByb3RvY29sIGhhbmRsZXIgcmVhY2hhYmxlIHRocm91Z2ggdGhlIHJlY2VpdmUgcGF0aCwgc28gZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3Igb3RoZXIgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTVBMUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwaXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcGlwLmM9MjAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdG5sX3B0a19pbmZvIGlwaXBfdHBpID0ge1xuLS1cbm5ldC9pcHY0L2lwaXAuYy0yMDctXG5uZXQvaXB2NC9pcGlwLmM6MjA4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUExTKVxubmV0L2lwdjQvaXBpcC5jLTIwOS1zdGF0aWMgY29uc3Qgc3RydWN0IHRubF9wdGtfaW5mbyBtcGxzaXBfdHBpID0ge1xuLS1cbm5ldC9pcHY0L2lwaXAuYz0yMTU9c3RhdGljIGludCBpcGlwX3R1bm5lbF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaXBwcm90bylcbi0tXG5uZXQvaXB2NC9pcGlwLmMtMjM3LVx0XHRcdGdvdG8gZHJvcDtcbm5ldC9pcHY0L2lwaXAuYzoyMzg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QTFMpXG5uZXQvaXB2NC9pcGlwLmMtMjM5LVx0XHRpZiAoaXBwcm90byA9PSBJUFBST1RPX01QTFMpXG4tLVxubmV0L2lwdjQvaXBpcC5jPTI2Nj1zdGF0aWMgaW50IGlwaXBfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvaXBpcC5jLTI3MC1cbm5ldC9pcHY0L2lwaXAuYzoyNzE6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QTFMpXG5uZXQvaXB2NC9pcGlwLmMtMjcyLXN0YXRpYyBpbnQgbXBsc2lwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2lwaXAuYz0yODI9c3RhdGljIG5ldGRldl90eF90IGlwaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9pcGlwLmMtMjk1LVx0XHRicmVhaztcbm5ldC9pcHY0L2lwaXAuYzoyOTY6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QTFMpXG5uZXQvaXB2NC9pcGlwLmMtMjk3LVx0Y2FzZSBodG9ucyhFVEhfUF9NUExTX1VDKTpcbi0tXG5uZXQvaXB2NC9pcGlwLmM9MzI2PXN0YXRpYyBib29sIGlwaXBfdHVubmVsX2lvY3RsX3ZlcmlmeV9wcm90b2NvbCh1OCBpcHByb3RvKVxuLS1cbm5ldC9pcHY0L2lwaXAuYy0zMzAtXHRjYXNlIElQUFJPVE9fSVBJUDpcbm5ldC9pcHY0L2lwaXAuYzozMzE6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QTFMpXG5uZXQvaXB2NC9pcGlwLmMtMzMyLVx0Y2FzZSBJUFBST1RPX01QTFM6XG4tLVxubmV0L2lwdjQvaXBpcC5jPTYxNj1zdGF0aWMgc3RydWN0IHhmcm1fdHVubmVsIGlwaXBfaGFuZGxlciBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY0L2lwaXAuYy02MjEtXG5uZXQvaXB2NC9pcGlwLmM6NjIyOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUExTKVxubmV0L2lwdjQvaXBpcC5jLTYyMy1zdGF0aWMgc3RydWN0IHhmcm1fdHVubmVsIG1wbHNpcF9oYW5kbGVyIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjQvaXBpcC5jPTY0OD1zdGF0aWMgaW50IF9faW5pdCBpcGlwX2luaXQodm9pZClcbi0tXG5uZXQvaXB2NC9pcGlwLmMtNjYxLVx0fVxubmV0L2lwdjQvaXBpcC5jOjY2MjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBMUylcbm5ldC9pcHY0L2lwaXAuYy02NjMtXHRlcnIgPSB4ZnJtNF90dW5uZWxfcmVnaXN0ZXIoXHUwMDI2bXBsc2lwX2hhbmRsZXIsIEFGX01QTFMpO1xuLS1cbm5ldC9pcHY0L2lwaXAuYy02NzYtcnRubF9saW5rX2ZhaWxlZDpcbm5ldC9pcHY0L2lwaXAuYzo2Nzc6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QTFMpXG5uZXQvaXB2NC9pcGlwLmMtNjc4LVx0eGZybTRfdHVubmVsX2RlcmVnaXN0ZXIoXHUwMDI2bXBsc2lwX2hhbmRsZXIsIEFGX01QTFMpO1xuLS1cbm5ldC9pcHY0L2lwaXAuYz02ODg9c3RhdGljIHZvaWQgX19leGl0IGlwaXBfZmluaSh2b2lkKVxuLS1cbm5ldC9pcHY0L2lwaXAuYy02OTItXHRcdHByX2luZm8oXCYjMzQ7JXM6IGNhbiYjMzk7dCBkZXJlZ2lzdGVyIHR1bm5lbFxcblwmIzM0OywgX19mdW5jX18pO1xubmV0L2lwdjQvaXBpcC5jOjY5MzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBMUylcbm5ldC9pcHY0L2lwaXAuYy02OTQtXHRpZiAoeGZybTRfdHVubmVsX2RlcmVnaXN0ZXIoXHUwMDI2bXBsc2lwX2hhbmRsZXIsIEFGX01QTFMpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU2OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE1QTFMgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgQ09ORklHX01QTFNgLiBUaGF0JiMzOTtzIGEga2V5IGtlcm5lbCBvcHRpb24sIGFuZCBpdCYjMzk7cyByZWxldmFudCB0byB0aGUgY3VycmVudCBzaXR1YXRpb24uIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gTm8gcG9pbnQgaW4gZW5hYmxpbmcgc29tZXRoaW5nIHdpdGhvdXQga25vd2luZyB3aGF0IGVsc2UgaXQgcHVsbHMgaW4sIG9yIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbWlnaHQgYmUgYWZmZWN0ZWQuIExldCYjMzk7cyBkaWcgaW50byB0aGUgS2NvbmZpZyBhbmQgc2VlIHdoYXQgdGhlIHJlbGF0aW9uc2hpcHMgYXJlLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIGhvdyBicm9hZGx5IHRoaXMgaW1wYWN0cyB0aGUgd2lkZXIgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTE6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1QTFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXBscy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcGxzL0tjb25maWctNS1cbm5ldC9tcGxzL0tjb25maWc6NjptZW51Y29uZmlnIE1QTFNcbm5ldC9tcGxzL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7TXVsdGlQcm90b2NvbCBMYWJlbCBTd2l0Y2hpbmdcJiMzNDtcbi0tXG5uZXQvbXBscy9LY29uZmlnPTE5PWNvbmZpZyBORVRfTVBMU19HU09cbi0tXG5uZXQvbXBscy9LY29uZmlnLTI1LVxubmV0L21wbHMvS2NvbmZpZzoyNjpjb25maWcgTVBMU19ST1VUSU5HXG5uZXQvbXBscy9LY29uZmlnLTI3LVx0dHJpc3RhdGUgXCYjMzQ7TVBMUzogcm91dGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L21wbHMvS2NvbmZpZy0zMi1cbm5ldC9tcGxzL0tjb25maWc6MzM6Y29uZmlnIE1QTFNfSVBUVU5ORUxcbm5ldC9tcGxzL0tjb25maWctMzQtXHR0cmlzdGF0ZSBcJiMzNDtNUExTOiBJUCBvdmVyIE1QTFMgdHVubmVsIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MzkKCQkJCQkJCW91dHB1dDogMTE2CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqTXkgQ29uZmlndXJhdGlvbiBMb2dpYyBmb3IgTmV0d29yayBQcm90b2NvbHMqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBkZWFsaW5nIHdpdGggY29uZmlndXJhdGlvbiBvcHRpb25zIGhlcmUsIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3Mgc2V0IHVwIGNvcnJlY3RseS4gRmlyc3QgdGhpbmcmIzM5O3MgZmlyc3Q6IGBDT05GSUdfTVBMU2AgaXMgYSBib29sZWFuLCB3aGljaCBpcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBTbywgSSYjMzk7bGwgYWRkIGBNUExTYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIFRoYXQgZW5zdXJlcyBpdCYjMzk7cyBwcm9wZXJseSBjb25zaWRlcmVkIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuCgpOb3csIGxldCYjMzk7cyBjYXN0IGEgd2lkZXIgbmV0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoZSBuZXR3b3JrIHNldHVwLiBBaCwgeWVzLCBgTkVUX0lQSVBgIGlzIHN0YW5kaW5nIG91dCBhcyBhIGtleSBjYW5kaWRhdGUuIFRoaXMgY291bGQgYmUgaW1wb3J0YW50LgoKT2theSwgbGV0JiMzOTtzIGhvbWUgaW4gb24gdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gbG9vayBhdC4gRnJvbSB0aGUgc3ltYm9scyBJJiMzOTttIHNlZWluZywgYGlwaXBfcmN2YCBhbmQgYG1wbHNpcF9yY3ZgIGFyZSB0aGUgcmVhbCBmb2N1cy4gSSYjMzk7bGwgbmVlZCB0byBmb2xsb3cgdGhlIGV4ZWN1dGlvbiBmbG93cyB0aGF0IHRvdWNoIHRoZXNlLgoKQWxyaWdodCwgd2l0aCB0aGUgbWFpbiBwaWVjZXMgaW4gcGxhY2UsIEkgYmVsaWV2ZSBpdCYjMzk7cyB0aW1lIHRvIHNldC1yZXN1bHRzLiBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBpdCBhbGwgcHV0IHRvZ2V0aGVyIGFmdGVyIGEgcXVpY2sgZXZhbHVhdGlvbiBvZiB0aGVzZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDExOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfSVBJUCYjMzQ7LAogICAgJiMzNDtNUExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBpcF9yY3YmIzM0OywKICAgICYjMzQ7bXBsc2lwX3JjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBJUElQIHR1bm5lbCByZWNlaXZlIHBhdGggKGBpcGlwX3R1bm5lbF9yY3ZgKSBieSBwcm9wZXJseSBmcmVlaW5nIHRoZSBza2Igd2hlbiBgaXBfdHVuX3J4X2RzdGAgcmV0dXJucyBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgbmV0d29yayBwcm90b2NvbCBoYW5kbGVyLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfSVBJUCYjMzQ7LAogICAgJiMzNDtNUExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBpcF9yY3YmIzM0OywKICAgICYjMzQ7bXBsc2lwX3JjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBJUElQIHR1bm5lbCByZWNlaXZlIHBhdGggKGBpcGlwX3R1bm5lbF9yY3ZgKSBieSBwcm9wZXJseSBmcmVlaW5nIHRoZSBza2Igd2hlbiBgaXBfdHVuX3J4X2RzdGAgcmV0dXJucyBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgbmV0d29yayBwcm90b2NvbCBoYW5kbGVyLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMToyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDExOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgd2hlcmUgYW4gc2tfYnVmZiAoc2tiKSB3YXMgbm90IGZyZWVkIHdoZW4gaXBfdHVuX3J4X2RzdCgpIHJldHVybmVkIE5VTEwuIEJ5IGNoYW5naW5nICYjMzk7cmV0dXJuIDA7JiMzOTsgdG8gJiMzOTtnb3RvIGRyb3A7JiMzOTssIHRoZSBza2IgaXMgbm93IHByb3Blcmx5IGZyZWVkIHZpYSBrZnJlZV9za2Ioc2tiKS4gVGhpcyBpcyBhIG1lbW9yeSBsZWFrIGlzc3VlLCB3aGljaCBpcyB0eXBpY2FsbHkgZGV0ZWN0ZWQgYnkga21lbWxlYWsuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MsIHdoaWNoIGFyZSB0aGUgdGFyZ2V0cyBvZiBLTVNBTi4gU3RhbmRhcmQgS0FTQU4gYW5kIGttZW1sZWFrIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIHR5cGUgb2YgaXNzdWUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQxZWFiZTBhN2NhYzgyMmU2ZTdhMWY0N2M2OTY5ZTg1ZjU5NzJlZjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAxMToyMDozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuYwppbmRleCBiNjQzMTk0ZjU3ZDI5Li5kZGY2MmI0NTU2NmI2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGlwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBpcC5jCkBAIC0yNDgsNyAmIzQzOzI0OCw3IEBAIHN0YXRpYyBpbnQgaXBpcF90dW5uZWxfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHU4IGlwcHJvdG8pCiAKIAkJCXR1bl9kc3QgPSBpcF90dW5fcnhfZHN0KHNrYiwgZmxhZ3MsIDAsIDApOwogCQkJaWYgKCF0dW5fZHN0KQotCQkJCXJldHVybiAwOwomIzQzOwkJCQlnb3RvIGRyb3A7CiAJCQlpcF90dW5uZWxfbWRfdWRwX2VuY2FwKHNrYiwgJmFtcDt0dW5fZHN0LSZndDt1LnR1bl9pbmZvKTsKIAkJfQogCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvZGUgUGF0Y2g6IElQSVAgVHVubmVsIFJlY2VpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvaXB2NC9pcGlwLmNgLiBJdCYjMzk7cyBhIHNpbXBsZSwgc2VlbWluZ2x5IGRpcmVjdCBjaGFuZ2U6IGl0IHN3YXBzIGByZXR1cm4gMDtgIGZvciBgZ290byBkcm9wO2Agd2l0aGluIHRoZSBgaXBpcF90dW5uZWxfcmN2YCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O3doeSB0aGUganVtcD8gV2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlPyYjMzQ7IFJlcGxhY2luZyBhIHNpbXBsZSByZXR1cm4gd2l0aCBhIGBnb3RvYCBpcyB1bnVzdWFsLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIHRob3JvdWdobHkuIFRoZSBjb21tZW50IGluIHRoZSBjb2RlIGRvZXNuJiMzOTt0IGV4cGxhaW4gdGhlIHJlYXNvbi4KCk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvaXB2NC9pcGlwLmNgIHRvIHNlZSBwcmVjaXNlbHkgd2hhdCBgZ290byBkcm9wO2AgaXMgcmVmZXJlbmNpbmcuIFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgb2YgdGhpcyAmIzM0O2Ryb3AmIzM0OyBsYWJlbD8gSXMgaXQgYSBjb21tb24gZXhpdCBwb2ludCBmb3IgZXJyb3IgaGFuZGxpbmc/IElzIGl0IHJlbGF0ZWQgdG8gc29tZSByZXNvdXJjZSBtYW5hZ2VtZW50PyBPciBpcyBpdCBjaGFuZ2luZyB0aGUgY29udHJvbCBmbG93IGluIGEgd2F5IEkgbmVlZCB0byBkZWVwbHkgdW5kZXJzdGFuZD8gSSBzdXNwZWN0IHRoaXMgaXMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gaGFuZGxpbmcgaW5ib3VuZCBwYWNrZXRzIGFuZCBsaWtlbHkgcGVydGFpbnMgdG8gYSBwYWNrZXQgYmVpbmcgaW52YWxpZCBvciB1bnByb2Nlc3NhYmxlLiBCdXQgSSBtdXN0IGJlIHN1cmUhIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgZmxvdyBsb2dpYyBhcm91bmQgYGRyb3BgIGxhYmVsIHRvIGJlIHN1cmUuIEFueSBjaGFuZ2UgdG8gdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgYWx0ZXJzIHRoZSBmbG93IGZyb20gYW4gZXJyb3IgcmV0dXJuIHRvIGEganVtcCBpcyB3b3J0aCB0aGUgZXh0cmEgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcGlwX3R1bm5lbF9yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcGlwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBpcC5jPTIwOT1zdGF0aWMgY29uc3Qgc3RydWN0IHRubF9wdGtfaW5mbyBtcGxzaXBfdHBpID0ge1xuLS1cbm5ldC9pcHY0L2lwaXAuYy0yMTQtXG5uZXQvaXB2NC9pcGlwLmM6MjE1OnN0YXRpYyBpbnQgaXBpcF90dW5uZWxfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHU4IGlwcHJvdG8pXG5uZXQvaXB2NC9pcGlwLmMtMjE2LXtcbi0tXG5uZXQvaXB2NC9pcGlwLmM9MjY2PXN0YXRpYyBpbnQgaXBpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2lwaXAuYy0yNjcte1xubmV0L2lwdjQvaXBpcC5jOjI2ODpcdHJldHVybiBpcGlwX3R1bm5lbF9yY3Yoc2tiLCBJUFBST1RPX0lQSVApO1xubmV0L2lwdjQvaXBpcC5jLTI2OS19XG4tLVxubmV0L2lwdjQvaXBpcC5jPTI3Mj1zdGF0aWMgaW50IG1wbHNpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2lwaXAuYy0yNzMte1xubmV0L2lwdjQvaXBpcC5jOjI3NDpcdHJldHVybiBpcGlwX3R1bm5lbF9yY3Yoc2tiLCBJUFBST1RPX01QTFMpO1xubmV0L2lwdjQvaXBpcC5jLTI3NS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDExOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBgaXBpcF90dW5uZWxfcmN2YCBmdW5jdGlvbiwgZm9jdXNpbmcgb24gbGluZXMgMjE1LTI2NSwgYXMgaWYgdGhlc2UgYXJlIG15IGltbWVkaWF0ZSB0aG91Z2h0czoKCioqRGlzc2VjdGluZyBgaXBpcF90dW5uZWxfcmN2YCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGlwaXBfdHVubmVsX3JjdmAgZnVuY3Rpb24gd2l0aGluIGBuZXQvaXB2NC9pcGlwLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY3JpdGljYWwgc2VjdGlvbiBmcm9tIGxpbmUgMjE1IHRvIDI2NS4gUmlnaHQsIHRoaXMgaXMgd2hlcmUgdGhlICpyZWFsKiBwYWNrZXQgcHJvY2Vzc2luZyBoYXBwZW5zIHdpdGhpbiB0aGUgSVBJUCB0dW5uZWwuCgpSaWdodCwgbGluZSAyMTUgbWFya3MgdGhlIHN0YXJ0Li4uIGFoLCBJIHJlbWVtYmVyLCB3ZSYjMzk7cmUgaW5zaWRlIHRoZSBtYWluIHdvcmsgbG9vcC4gRmlyc3QgdGhpbmcsIHdlJiMzOTtyZSBsaWtlbHkgZ3JhYmJpbmcgdGhlIGlubmVyIElQIGhlYWRlcjsgY29uZmlybWluZyB0aGF0IGl0IGhhcyBiZWVuIGNoZWNrZWQgYWdhaW5zdCBhbGwgdmFsaWQgY3JpdGVyaWEgYmVmb3JlIGdldHRpbmcgdG8gdGhpcyBzdGFnZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZXNzZW50aWFsIHByb2Nlc3Npbmcgc3RlcHMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgZW5jYXBzdWxhdGlvbiBiZWluZyBzdHJpcHBlZCwgdGhlIGlubmVyIGhlYWRlciBiZWluZyBleGFtaW5lZCwgYW5kIHRoZW4gdGhlIHBhY2tldCBiZWluZyByb3V0ZWQgb3IgZGVsaXZlcmVkLgoKTGluZXMgMjIwLTIzMDogbm93IHRoZSBjb3JlIG9mIGl0LCBJIHNlZSB0aGF0IHdlIGFyZSBoYW5kbGluZyB0aGUgdHVubmVsIG1vZGUgZW5jYXBzdWxhdGlvbiBmb3IgdGhlIHBhY2tldCB3aXRoIHRoZSBgaXBpcF90dW5uZWxfcmN2X2NvcmVgIGZ1bmN0aW9uLiAKCkxpbmVzIDIzMC0yNDAuIEkgc2VlIHRoYXQgdGhlcmUgbXVzdCBiZSBzb21ldGhpbmcgYmVpbmcgaGFuZGxlZCB3aGVuIHRoZSBJUCBoZWFkZXIgaGFzIGJlZW4gc3RyaXBwZWQgZnJvbSB0aGUgcGFja2V0LCBhbmQgd2UgY2FuIGNoZWNrIHdoZXRoZXIgdGhlIHRoZSBwYWNrZXQgc2hvdWxkIGJlIGRlbGl2ZXJlZCBsb2NhbGx5IG9yIGlzIHRvIGJlIHJlcm91dGVkLiBXZSBhcmUgZGV0ZXJtaW5pbmcgaG93IHRvIGhhbmQgb2ZmIHRoZSBwYWNrZXQsIGFuZCBJJiMzOTttIHJlYWxseSBjdXJpb3VzIGlmIHRoaXMgaW52b2x2ZXMgYW55IHNwZWNpZmljIHR1bm5lbC1yZWxhdGVkIGNoZWNrcyB0aGF0IGFyZSBkaWZmZXJlbnQgdGhhbiBub3JtYWwgcm91dGluZyBsb2dpYy4KCkxpbmVzIDI0MC0yNTA6IFRoaXMgc2VlbXMgdG8gYmUgdGhlIHBsYWNlIHdoZXJlIHdlIGRlYWwgd2l0aCB0dW5uZWwtc3BlY2lmaWMgTVRVIGlzc3VlcyBvciBmcmFnbWVudGF0aW9uIGhhbmRsaW5nLiBJJiMzOTtkIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZGl0aW9ucyBmb3IgdGhlIHBhY2tldCB0byBiZSByZXJvdXRlZC4gSSYjMzk7bSBzZWVpbmcgY2hlY2tzIHJlbGF0ZWQgdG8gTVRVLgoKTGluZXMgMjUwLTI2MDogSSB0aGluayB0aGlzIHNlY3Rpb24gaXMgZGVhbGluZyB3aXRoIHRoZSBwYWNrZXQgYmVpbmcgZW5xdWV1ZWQgdG8gYmUgZGVhbHQgd2l0aCwgYW5kIHRoZSB0dW5uZWwgaXMgcmVjZWl2aW5nIHRoZSBwYWNrZXQgdG8gYmUgZGVhbHQgd2l0aCBmb3IgdGhlIG5leHQgc3RhZ2Ugb2YgcHJvY2Vzc2luZy4KCkZpbmFsbHksIGxpbmVzIDI2MC0yNjUgc2VlbSB0byBjb25jbHVkZSB3aXRoIHNvbWUga2luZCBvZiBjb3VudGVyIG9yIHN0YXRpc3RpY3MgdXBkYXRlcy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhvc2UgY291bnRlcnMsIGFzIEkgYWx3YXlzIGNhcmUgYWJvdXQgdGhlIHBlcmZvcm1hbmNlIG92ZXJoZWFkIG9mIHR1bm5lbCBwcm9jZXNzaW5nLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgcXVpY2sgdW5kZXJzdGFuZGluZyBvZiB0aGUgd29yayBiZWluZyBkb25lLgoKQWxyaWdodCwgdGhhdCYjMzk7cyBhIGdvb2QgZmlyc3QgcGFzcy4gSSYjMzk7bGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBjb2RlIG1vcmUgbGluZS1ieS1saW5lIG5vdyB0byBncmFzcCB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTE6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcGlwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxNTpcdHN0YXRpYyBpbnQgaXBpcF90dW5uZWxfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHU4IGlwcHJvdG8pXG4gMjE2Olx0e1xuIDIxNzpcdFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXHUwMDNlZGV2KTtcbiAyMTg6XHRcdHN0cnVjdCBpcF90dW5uZWxfbmV0ICppdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGlwaXBfbmV0X2lkKTtcbiAyMTk6XHRcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKSA9IHsgfTtcbiAyMjA6XHRcdHN0cnVjdCBtZXRhZGF0YV9kc3QgKnR1bl9kc3QgPSBOVUxMO1xuIDIyMTpcdFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsO1xuIDIyMjpcdFx0Y29uc3Qgc3RydWN0IGlwaGRyICppcGg7XG4gMjIzOlx0XG4gMjI0Olx0XHRfX3NldF9iaXQoSVBfVFVOTkVMX05PX0tFWV9CSVQsIGZsYWdzKTtcbiAyMjU6XHRcbiAyMjY6XHRcdGlwaCA9IGlwX2hkcihza2IpO1xuIDIyNzpcdFx0dHVubmVsID0gaXBfdHVubmVsX2xvb2t1cChpdG4sIHNrYi1cdTAwM2VkZXYtXHUwMDNlaWZpbmRleCwgZmxhZ3MsIGlwaC1cdTAwM2VzYWRkcixcbiAyMjg6XHRcdFx0XHRcdCAgaXBoLVx1MDAzZWRhZGRyLCAwKTtcbiAyMjk6XHRcdGlmICh0dW5uZWwpIHtcbiAyMzA6XHRcdFx0Y29uc3Qgc3RydWN0IHRubF9wdGtfaW5mbyAqdHBpO1xuIDIzMTpcdFxuIDIzMjpcdFx0XHRpZiAodHVubmVsLVx1MDAzZXBhcm1zLmlwaC5wcm90b2NvbCAhPSBpcHByb3RvIFx1MDAyNlx1MDAyNlxuIDIzMzpcdFx0XHQgICAgdHVubmVsLVx1MDAzZXBhcm1zLmlwaC5wcm90b2NvbCAhPSAwKVxuIDIzNDpcdFx0XHRcdGdvdG8gZHJvcDtcbiAyMzU6XHRcbiAyMzY6XHRcdFx0aWYgKCF4ZnJtNF9wb2xpY3lfY2hlY2soTlVMTCwgWEZSTV9QT0xJQ1lfSU4sIHNrYikpXG4gMjM3Olx0XHRcdFx0Z290byBkcm9wO1xuIDIzODpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19NUExTKVxuIDIzOTpcdFx0XHRpZiAoaXBwcm90byA9PSBJUFBST1RPX01QTFMpXG4gMjQwOlx0XHRcdFx0dHBpID0gXHUwMDI2bXBsc2lwX3RwaTtcbiAyNDE6XHRcdFx0ZWxzZVxuIDI0MjpcdCNlbmRpZlxuIDI0MzpcdFx0XHRcdHRwaSA9IFx1MDAyNmlwaXBfdHBpO1xuIDI0NDpcdFx0XHRpZiAoaXB0dW5uZWxfcHVsbF9oZWFkZXIoc2tiLCAwLCB0cGktXHUwMDNlcHJvdG8sIGZhbHNlKSlcbiAyNDU6XHRcdFx0XHRnb3RvIGRyb3A7XG4gMjQ2Olx0XHRcdGlmICh0dW5uZWwtXHUwMDNlY29sbGVjdF9tZCkge1xuIDI0NzpcdFx0XHRcdGlwX3R1bm5lbF9mbGFnc196ZXJvKGZsYWdzKTtcbiAyNDg6XHRcbiAyNDk6XHRcdFx0XHR0dW5fZHN0ID0gaXBfdHVuX3J4X2RzdChza2IsIGZsYWdzLCAwLCAwKTtcbiAyNTA6XHRcdFx0XHRpZiAoIXR1bl9kc3QpXG4gMjUxOlx0XHRcdFx0XHRnb3RvIGRyb3A7XG4gMjUyOlx0XHRcdFx0aXBfdHVubmVsX21kX3VkcF9lbmNhcChza2IsIFx1MDAyNnR1bl9kc3QtXHUwMDNldS50dW5faW5mbyk7XG4gMjUzOlx0XHRcdH1cbiAyNTQ6XHRcdFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiAyNTU6XHRcbiAyNTY6XHRcdFx0cmV0dXJuIGlwX3R1bm5lbF9yY3YodHVubmVsLCBza2IsIHRwaSwgdHVuX2RzdCwgbG9nX2Vjbl9lcnJvcik7XG4gMjU3Olx0XHR9XG4gMjU4Olx0XG4gMjU5Olx0XHRyZXR1cm4gLTE7XG4gMjYwOlx0XG4gMjYxOlx0ZHJvcDpcbiAyNjI6XHRcdGtmcmVlX3NrYihza2IpO1xuIDI2MzpcdFx0cmV0dXJuIDA7XG4gMjY0Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTE0CgkJCQkJCQlvdXRwdXQ6IDEzNwoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhpcyBDb2RlIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgY2hhbmdpbmcgYSBgcmV0dXJuIDA7YCB0byBgZ290byBkcm9wO2Agd2hlbiBgIXR1bl9kc3RgLiBUaGUgYGdvdG8gZHJvcDtgIGJpdCBpcyBjcnVjaWFsIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgYGtmcmVlX3NrYihza2IpOyByZXR1cm4gMDtgIGhhcHBlbnMuIFJpZ2h0LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgYSBtZW1vcnkgbGVhayBmaXguIEl0IGxvb2tzIGxpa2UgdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSB3YXNuJiMzOTt0IGJlaW5nIGZyZWVkIHByb3Blcmx5IGJlZm9yZS4gR29vZCBjYXRjaCEKCk5vdywgbXkgbWluZCBuYXR1cmFsbHkgZ29lcyB0byB0aGUgZGlhZ25vc3RpYyB0b29scy4gSSBrbm93IHRoYXQga21lbWxlYWsgaXMgdGhlIHVzdWFsIHN1c3BlY3QgZm9yIHNuaWZmaW5nIG91dCBtZW1vcnkgbGVha3MsIGFuZCB0aGF0JiMzOTtzIHByZWNpc2VseSB3aGF0IHRoaXMgcGF0Y2ggYWRkcmVzc2VzLiBJJiMzOTttIHByZXR0eSBzdXJlIEtBU0FOLCBvciBLZXJuZWwgQWRkcmVzcyBTQU5pdGl6ZXIsIHdvdWxkIGJlIGxvb2tpbmcgZm9yIGEgZGlmZmVyZW50IGNsYXNzIG9mIGVycm9yc+KAlHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzIGFjY2VzcywgdGhpbmdzIGxpa2UgdGhhdC4gS01TQU4sIEtlcm5lbCBNZW1vcnkgU0FOaXRpemVyLCBpcyB0aGUgb25lIHRoYXQgZmxhZ3MgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuCgpHaXZlbiB0aGUgbmF0dXJlIG9mIHRoaXMgY2hhbmdlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yLCBmb3IgdGhhdCBtYXR0ZXIsIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEl0JiMzOTtzIHNvbGVseSBhYm91dCBwbHVnZ2luZyBhIG1lbW9yeSBsZWFrLiBTbywgd2hlbiBpdCBjb21lcyB0byB0aGUgYE5lZWRzS01TQU5gIHRhZywgSSYjMzk7bSB0aGlua2luZywgJiMzNDtOb3BlLCBub3QgbmVlZGVkIGhlcmUuJiMzNDsgVGhpcyBpcyBhIHN0cmFpZ2h0LXVwIG1lbW9yeSBsZWFrIHJlcGFpciwgbm8gS01TQU4gaW52b2x2ZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDExOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgd2hlcmUgYW4gc2tfYnVmZiAoc2tiKSB3YXMgbm90IGZyZWVkIHdoZW4gaXBfdHVuX3J4X2RzdCgpIHJldHVybmVkIE5VTEwuIEJ5IGNoYW5naW5nICYjMzk7cmV0dXJuIDA7JiMzOTsgdG8gJiMzOTtnb3RvIGRyb3A7JiMzOTssIHRoZSBza2IgaXMgbm93IHByb3Blcmx5IGZyZWVkIHZpYSBrZnJlZV9za2Ioc2tiKS4gVGhpcyBpcyBhIG1lbW9yeSBsZWFrIGlzc3VlLCB3aGljaCBpcyB0eXBpY2FsbHkgZGV0ZWN0ZWQgYnkga21lbWxlYWsuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MsIHdoaWNoIGFyZSB0aGUgdGFyZ2V0cyBvZiBLTVNBTi4gU3RhbmRhcmQgS0FTQU4gYW5kIGttZW1sZWFrIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIHR5cGUgb2YgaXNzdWUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIHdoZXJlIGFuIHNrX2J1ZmYgKHNrYikgd2FzIG5vdCBmcmVlZCB3aGVuIGlwX3R1bl9yeF9kc3QoKSByZXR1cm5lZCBOVUxMLiBCeSBjaGFuZ2luZyAmIzM5O3JldHVybiAwOyYjMzk7IHRvICYjMzk7Z290byBkcm9wOyYjMzk7LCB0aGUgc2tiIGlzIG5vdyBwcm9wZXJseSBmcmVlZCB2aWEga2ZyZWVfc2tiKHNrYikuIFRoaXMgaXMgYSBtZW1vcnkgbGVhayBpc3N1ZSwgd2hpY2ggaXMgdHlwaWNhbGx5IGRldGVjdGVkIGJ5IGttZW1sZWFrLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCB3aGljaCBhcmUgdGhlIHRhcmdldHMgb2YgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGFuZCBrbWVtbGVhayBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyB0eXBlIG9mIGlzc3VlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMDo0MC4wNTQ4OTY5MDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTMyNzU5NTAzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfSVBJUFwiLFxuICAgIFwiTVBMU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwaXBfcmN2XCIsXG4gICAgXCJtcGxzaXBfcmN2XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIHdoZXJlIGFuIHNrX2J1ZmYgKHNrYikgd2FzIG5vdCBmcmVlZCB3aGVuIGlwX3R1bl9yeF9kc3QoKSByZXR1cm5lZCBOVUxMLiBCeSBjaGFuZ2luZyAncmV0dXJuIDA7JyB0byAnZ290byBkcm9wOycsIHRoZSBza2IgaXMgbm93IHByb3Blcmx5IGZyZWVkIHZpYSBrZnJlZV9za2Ioc2tiKS4gVGhpcyBpcyBhIG1lbW9yeSBsZWFrIGlzc3VlLCB3aGljaCBpcyB0eXBpY2FsbHkgZGV0ZWN0ZWQgYnkga21lbWxlYWsuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MsIHdoaWNoIGFyZSB0aGUgdGFyZ2V0cyBvZiBLTVNBTi4gU3RhbmRhcmQgS0FTQU4gYW5kIGttZW1sZWFrIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIHR5cGUgb2YgaXNzdWUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgSVBJUCB0dW5uZWwgcmVjZWl2ZSBwYXRoIChgaXBpcF90dW5uZWxfcmN2YCkgYnkgcHJvcGVybHkgZnJlZWluZyB0aGUgc2tiIHdoZW4gYGlwX3R1bl9yeF9kc3RgIHJldHVybnMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgaGFuZGxlciwgd2hpY2ggaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTE6MjA6NDAuMDU0OTAxODQ3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQ0NDgwNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0MWVhYmUwYTdjYWM4MjJlNmU3YTFmNDdjNjk2OWU4NWY1OTcyZWYyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDE5IDExOjIwOjM5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuY1xcbmluZGV4IGI2NDMxOTRmNTdkMjkuLmRkZjYyYjQ1NTY2YjYgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBpcC5jXFxuKysrIGIvbmV0L2lwdjQvaXBpcC5jXFxuQEAgLTI0OCw3ICsyNDgsNyBAQCBzdGF0aWMgaW50IGlwaXBfdHVubmVsX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBpcHByb3RvKVxcbiBcXG4gXFx0XFx0XFx0dHVuX2RzdCA9IGlwX3R1bl9yeF9kc3Qoc2tiLCBmbGFncywgMCwgMCk7XFxuIFxcdFxcdFxcdGlmICghdHVuX2RzdClcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gXFx0XFx0XFx0aXBfdHVubmVsX21kX3VkcF9lbmNhcChza2IsIFxcdTAwMjZ0dW5fZHN0LVxcdTAwM2V1LnR1bl9pbmZvKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMDo0MC40OTAwODgzMDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MjY0OTI5MDk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfSVBJUFwiLFxuICAgIFwiTVBMU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwaXBfcmN2XCIsXG4gICAgXCJtcGxzaXBfcmN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgSVBJUCB0dW5uZWwgcmVjZWl2ZSBwYXRoIChgaXBpcF90dW5uZWxfcmN2YCkgYnkgcHJvcGVybHkgZnJlZWluZyB0aGUgc2tiIHdoZW4gYGlwX3R1bl9yeF9kc3RgIHJldHVybnMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgaGFuZGxlciwgd2hpY2ggaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDFlYWJlMGE3Y2FjODIyZTZlN2ExZjQ3YzY5NjllODVmNTk3MmVmMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDExOjIwOjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBpcC5jIGIvbmV0L2lwdjQvaXBpcC5jXG5pbmRleCBiNjQzMTk0ZjU3ZDI5Li5kZGY2MmI0NTU2NmI2IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBpcC5jXG4rKysgYi9uZXQvaXB2NC9pcGlwLmNcbkBAIC0yNDgsNyArMjQ4LDcgQEAgc3RhdGljIGludCBpcGlwX3R1bm5lbF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaXBwcm90bylcbiBcbiBcdFx0XHR0dW5fZHN0ID0gaXBfdHVuX3J4X2RzdChza2IsIGZsYWdzLCAwLCAwKTtcbiBcdFx0XHRpZiAoIXR1bl9kc3QpXG4tXHRcdFx0XHRyZXR1cm4gMDtcbitcdFx0XHRcdGdvdG8gZHJvcDtcbiBcdFx0XHRpcF90dW5uZWxfbWRfdWRwX2VuY2FwKHNrYiwgXHUwMDI2dHVuX2RzdC1cdTAwM2V1LnR1bl9pbmZvKTtcbiBcdFx0fVxuIFx0XHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTE6MjA6NDAuNDkwMDkwMTUyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgzMDM0ODQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipBbmFseXppbmcgYSBQb3RlbnRpYWwgSVBJUCBUdW5uZWxpbmcgSXNzdWUqKlxuXG5Pa2F5LCBzbyB0aGVyZSdzIGEgcGF0Y2ggZmxvYXRpbmcgYXJvdW5kIGZvciB0aGUgYG5ldC9pcHY0L2lwaXAuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBjaGFuZ2luZyB0aGUgcmV0dXJuIGxvZ2ljIHdpdGhpbiB0aGUgYGlwaXBfdHVubmVsX3JjdmAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIGZyb20gYSBzaW1wbGUgYHJldHVybiAwO2AgdG8gYSBgZ290byBkcm9wO2Agd2hlbiB0aGUgY29uZGl0aW9uIGAhdHVuX2RzdGAgaXMgbWV0LiBBbHJpZ2h0LCB0aGF0J3MgaW50ZXJlc3RpbmcuIFRoZSBmdW5jdGlvbidzIGdvaW5nIHRvIHRoZSBcImRyb3BcIiBsYWJlbCwgbm90IHJldHVybmluZyBhIFwic3VjY2Vzc1wiIChldmVuIGlmIHRoZSBwYWNrZXQgd291bGQgYmUgZGlzY2FyZGVkLilcblxuUmlnaHQsIGxldCdzIHB1bGwgdXAgdGhlIGBpcGlwX3R1bm5lbF9yY3ZgIGZ1bmN0aW9uIGluIGBuZXQvaXB2NC9pcGlwLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGB0dW5fZHN0YCByZXByZXNlbnRzIGluIHRoaXMgY29udGV4dC4gSXQncyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgdHVubmVsIGRlc3RpbmF0aW9uLCB0aGUgY29uZmlndXJlZCByZW1vdGUgZW5kcG9pbnQgZm9yIHRoZSBJUElQIHR1bm5lbC4gVGhlIGV4aXN0aW5nIGNvZGUsIGlmIGAhdHVuX2RzdGAgZXZhbHVhdGVzIHRvIHRydWUsIHdhcyBqdXN0IHJldHVybmluZyBhIHplcm8gdmFsdWUsIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IHNpZ25hbGluZyBhIFwicGFja2V0IHByb2Nlc3NlZCwgYnV0IGRpc2NhcmRlZFwiIChvciwgYXQgbGVhc3QsIG5vdCBleHBsaWNpdGx5IGhhbmRsZWQpLiBOb3csIHRoaXMgcGF0Y2ggd2FudHMgdG8gKmV4cGxpY2l0bHkqIGRyb3AgdGhlIHBhY2tldCB1c2luZyBhIGdvdG8gc3RhdGVtZW50LiBUaGF0IGhhcyBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBJdCBjb3VsZCBjaGFuZ2UgdGhlIGVycm9yIHJlcG9ydGluZyBvciBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoIGluIGNlcnRhaW4gc2NlbmFyaW9zLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIHdpbGwgaW1wYWN0IHRoZSBlcnJvciBoYW5kbGluZywgY291bnRlcnMsIG9yIHN0YXRpc3RpY3MuIEEgcmV0dXJuIDAgbWlnaHQgYmUgaW50ZXJwcmV0ZWQgZGlmZmVyZW50bHkgYnkgdGhlIGNhbGxpbmcgZnVuY3Rpb24uIEl0J3MgYWxzbyBpbXBvcnRhbnQgdG8gY29uc2lkZXI6IHdoeSBpcyBgIXR1bl9kc3RgIGV2ZW4gaGFwcGVuaW5nPyBJcyB0aGlzIGFuIGV4cGVjdGVkIHNjZW5hcmlvIChlLmcuLCBhIHR1bm5lbCBub3QgZnVsbHkgY29uZmlndXJlZCwgYSBtYWxmb3JtZWQgcGFja2V0LCBvciBhIHJhY2UgY29uZGl0aW9uKSBvciBpcyBpdCBpbmRpY2F0aXZlIG9mIGEgYmlnZ2VyIHByb2JsZW0/IEkgbmVlZCB0byBhbmFseXplIGhvdyB0aGlzIGNoYW5nZSBhZmZlY3RzIHRoZSBvdmVyYWxsIGJlaGF2aW9yIG9mIHRoZSBJUElQIHR1bm5lbGluZyBzdGFjay4gVGhpcyBpcyBhIHN1YnRsZSBjaGFuZ2UsIGJ1dCBjb3VsZCBpbXBhY3QgdGhpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDAyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMDo0NS4zMjA0NDA3NTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4MTM0NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwaXBfdHVubmVsX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcGlwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBpcC5jPTIwOT1zdGF0aWMgY29uc3Qgc3RydWN0IHRubF9wdGtfaW5mbyBtcGxzaXBfdHBpID0ge1xcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTIxNC1cXG5uZXQvaXB2NC9pcGlwLmM6MjE1OnN0YXRpYyBpbnQgaXBpcF90dW5uZWxfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHU4IGlwcHJvdG8pXFxubmV0L2lwdjQvaXBpcC5jLTIxNi17XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmM9MjY2PXN0YXRpYyBpbnQgaXBpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9pcGlwLmMtMjY3LXtcXG5uZXQvaXB2NC9pcGlwLmM6MjY4OlxcdHJldHVybiBpcGlwX3R1bm5lbF9yY3Yoc2tiLCBJUFBST1RPX0lQSVApO1xcbm5ldC9pcHY0L2lwaXAuYy0yNjktfVxcbi0tXFxubmV0L2lwdjQvaXBpcC5jPTI3Mj1zdGF0aWMgaW50IG1wbHNpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9pcGlwLmMtMjczLXtcXG5uZXQvaXB2NC9pcGlwLmM6Mjc0OlxcdHJldHVybiBpcGlwX3R1bm5lbF9yY3Yoc2tiLCBJUFBST1RPX01QTFMpO1xcbm5ldC9pcHY0L2lwaXAuYy0yNzUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMDo0NS41MTg1Nzk1MTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDM5OTY1NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBpcGlwX3R1bm5lbF9yY3ZgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IHRoZSBgaXBpcF90dW5uZWxfcmN2YCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gYG5ldC9pcHY0L2lwaXAuY2AgYW5kIGFpbWluZyBmb3IgYXJvdW5kIGxpbmUgMjQ4LiBJIGV4cGVjdCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgZ29pbmcgdG8gYmUgY2VudHJhbCB0byBob3cgSVBJUCB0dW5uZWxzIHJlY2VpdmUgZGF0YSwgYW5kIGJ5IGV4YW1pbmluZyB0aGlzIHNwZWNpZmljIHNlY3Rpb24sIEknbSBob3BpbmcgdG8gZ2FpbiBpbnNpZ2h0cyBpbnRvIGl0cyBpbm5lciB3b3JraW5ncyBhbmQgaG93IGl0IGhhbmRsZXMgaW5jb21pbmcgcGFja2V0cy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgaXQgZGlmZmVyZW50aWF0ZXMgYmV0d2VlbiBkaWZmZXJlbnQgdHVubmVsIHR5cGVzIGFuZCBob3cgaXQgZXh0cmFjdHMgdGhlIGlubmVyIHBheWxvYWQuIEl0IGlzIGltcG9ydGFudCB0byBjb21wYXJlIHRoaXMgd2l0aCBhIGJhc2VsaW5lIG9mIHN0YW5kYXJkIHBhY2tldCByZWNlcHRpb24gcHJvY2VkdXJlcy4gSSdtIGFsc28gaG9waW5nIHRvIHNwb3QgYW55IHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yLCBwZXJoYXBzLCBpZGVudGlmeSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyODI5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTE6MjA6NDguNTU4NTQ3OTQ0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBpcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxNTpcXHRzdGF0aWMgaW50IGlwaXBfdHVubmVsX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBpcHByb3RvKVxcbiAyMTY6XFx0e1xcbiAyMTc6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXFx1MDAzZWRldik7XFxuIDIxODpcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsX25ldCAqaXRuID0gbmV0X2dlbmVyaWMobmV0LCBpcGlwX25ldF9pZCk7XFxuIDIxOTpcXHRcXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncykgPSB7IH07XFxuIDIyMDpcXHRcXHRzdHJ1Y3QgbWV0YWRhdGFfZHN0ICp0dW5fZHN0ID0gTlVMTDtcXG4gMjIxOlxcdFxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbDtcXG4gMjIyOlxcdFxcdGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoO1xcbiAyMjM6XFx0XFxuIDIyNDpcXHRcXHRfX3NldF9iaXQoSVBfVFVOTkVMX05PX0tFWV9CSVQsIGZsYWdzKTtcXG4gMjI1OlxcdFxcbiAyMjY6XFx0XFx0aXBoID0gaXBfaGRyKHNrYik7XFxuIDIyNzpcXHRcXHR0dW5uZWwgPSBpcF90dW5uZWxfbG9va3VwKGl0biwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXgsIGZsYWdzLCBpcGgtXFx1MDAzZXNhZGRyLFxcbiAyMjg6XFx0XFx0XFx0XFx0XFx0ICBpcGgtXFx1MDAzZWRhZGRyLCAwKTtcXG4gMjI5OlxcdFxcdGlmICh0dW5uZWwpIHtcXG4gMjMwOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCB0bmxfcHRrX2luZm8gKnRwaTtcXG4gMjMxOlxcdFxcbiAyMzI6XFx0XFx0XFx0aWYgKHR1bm5lbC1cXHUwMDNlcGFybXMuaXBoLnByb3RvY29sICE9IGlwcHJvdG8gXFx1MDAyNlxcdTAwMjZcXG4gMjMzOlxcdFxcdFxcdCAgICB0dW5uZWwtXFx1MDAzZXBhcm1zLmlwaC5wcm90b2NvbCAhPSAwKVxcbiAyMzQ6XFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbiAyMzU6XFx0XFxuIDIzNjpcXHRcXHRcXHRpZiAoIXhmcm00X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSlcXG4gMjM3OlxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gMjM4OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19NUExTKVxcbiAyMzk6XFx0XFx0XFx0aWYgKGlwcHJvdG8gPT0gSVBQUk9UT19NUExTKVxcbiAyNDA6XFx0XFx0XFx0XFx0dHBpID0gXFx1MDAyNm1wbHNpcF90cGk7XFxuIDI0MTpcXHRcXHRcXHRlbHNlXFxuIDI0MjpcXHQjZW5kaWZcXG4gMjQzOlxcdFxcdFxcdFxcdHRwaSA9IFxcdTAwMjZpcGlwX3RwaTtcXG4gMjQ0OlxcdFxcdFxcdGlmIChpcHR1bm5lbF9wdWxsX2hlYWRlcihza2IsIDAsIHRwaS1cXHUwMDNlcHJvdG8sIGZhbHNlKSlcXG4gMjQ1OlxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gMjQ2OlxcdFxcdFxcdGlmICh0dW5uZWwtXFx1MDAzZWNvbGxlY3RfbWQpIHtcXG4gMjQ3OlxcdFxcdFxcdFxcdGlwX3R1bm5lbF9mbGFnc196ZXJvKGZsYWdzKTtcXG4gMjQ4OlxcdFxcbiAyNDk6XFx0XFx0XFx0XFx0dHVuX2RzdCA9IGlwX3R1bl9yeF9kc3Qoc2tiLCBmbGFncywgMCwgMCk7XFxuIDI1MDpcXHRcXHRcXHRcXHRpZiAoIXR1bl9kc3QpXFxuIDI1MTpcXHRcXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDI1MjpcXHRcXHRcXHRcXHRpcF90dW5uZWxfbWRfdWRwX2VuY2FwKHNrYiwgXFx1MDAyNnR1bl9kc3QtXFx1MDAzZXUudHVuX2luZm8pO1xcbiAyNTM6XFx0XFx0XFx0fVxcbiAyNTQ6XFx0XFx0XFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4gMjU1OlxcdFxcbiAyNTY6XFx0XFx0XFx0cmV0dXJuIGlwX3R1bm5lbF9yY3YodHVubmVsLCBza2IsIHRwaSwgdHVuX2RzdCwgbG9nX2Vjbl9lcnJvcik7XFxuIDI1NzpcXHRcXHR9XFxuIDI1ODpcXHRcXG4gMjU5OlxcdFxcdHJldHVybiAtMTtcXG4gMjYwOlxcdFxcbiAyNjE6XFx0ZHJvcDpcXG4gMjYyOlxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAyNjM6XFx0XFx0cmV0dXJuIDA7XFxuIDI2NDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDExOjIwOjQ4LjU1ODYzMTM3NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDk1MzMwNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTWVtb3J5IExlYWsgRml4IGluIElQSVAgVHVubmVsaW5nKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgY3J1Y2lhbC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBhZGRyZXNzaW5nIGEgbWVtb3J5IGxlYWsgaW4gYGlwaXBfdHVubmVsX3JjdmAuIFRoZXkncmUgcmVwbGFjaW5nIGEgc2ltcGxlIGByZXR1cm4gMDtgIHdpdGggYGdvdG8gZHJvcDtgIHdoaWNoIHRyaWdnZXJzIGEgYGtmcmVlX3NrYihza2IpO2AuIFRoaXMgbWVhbnMgdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSB3YXNuJ3QgYmVpbmcgcHJvcGVybHkgZnJlZWQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLiBUaGF0J3MgYSBjbGFzc2ljIG1lbW9yeSBtYW5hZ2VtZW50IG92ZXJzaWdodC5cblxuTm93LCBsZXQncyBzZWUsIGBpcGlwX3R1bm5lbF9yY3ZgIGlzIGludm9rZWQgYnkgYm90aCBgaXBpcF9yY3ZgIGFuZCBgbXBsc2lwX3JjdmAuIFNvLCB3ZSdyZSBmaXhpbmcgYSBwb3RlbnRpYWwgbGVhayBpbiBtdWx0aXBsZSBjb250ZXh0cyBoZXJlLCB3aGljaCBpcyBnb29kIHRvIHNlZS4gTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBmaXguIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIHBhdGggaXMgYWN0dWFsbHkgZW5hYmxlZCBpbiB0aGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24uIFJpZ2h0LCB0aGUgY29kZSBpbiBgbmV0L2lwdjQvaXBpcC5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfTkVUX0lQSVBgIGlzIGVuYWJsZWQuIFRoYXQgc2hvdWxkIGJlIGEgcXVpY2sgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMDo1Mi45NjgxNjc0NzdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMxNDc0Njk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwaXAub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfSVBfTVJPVVRFX0NPTU1PTikgKz0gaXBtcl9iYXNlLm9cXG5uZXQvaXB2NC9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfTkVUX0lQSVApICs9IGlwaXAub1xcbm5ldC9pcHY0L01ha2VmaWxlLTI2LWdyZS15IDo9IGdyZV9kZW11eC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDExOjIwOjUzLjI5OTY0NzY1M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NjgwNTQ4MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gdGhlIHRhc2sgYXQgaGFuZCwgcHJlc2VudGVkIGFzIHRob3VnaCBpdCdzIG15IG93biBpbnRlcm5hbCBkaWFsb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBJUElQIFR1bm5lbGluZyoqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gZXhhbWluZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVAtaW4tSVAgdHVubmVsaW5nLiBMZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIGlzIHdpdGhpbiB0aGUgbmV0d29ya2luZyBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIElQdjQgc2VjdGlvbi4gTXkgaW1tZWRpYXRlIGh1bmNoIGlzIHRoYXQgdGhlIGBDT05GSUdfTkVUX0lQSVBgIG9wdGlvbiB3aWxsIGJlIGRlZmluZWQgaW4gYG5ldC9pcHY0L0tjb25maWdgLiBXZSdsbCBuZWVkIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBjb25maXJtIHdoZXRoZXIgaXQgZXhpc3RzLCBhbmQgdGhlbiBjaGVjayBpdHMgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgaGVscCB0ZXh0LiBXZSB3aWxsIHdhbnQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGNvbmRpdGlvbnMgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSBJUElQIHN1cHBvcnQgaW4gdGhpcyBwYXJ0aWN1bGFyIGtlcm5lbCBidWlsZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM2NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDExOjIwOjU2LjI2NzcwNTA0MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4ODE0MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9JUElQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0xNDk9Y29uZmlnIElQX1BOUF9SQVJQXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTE2MS1cXG5uZXQvaXB2NC9LY29uZmlnOjE2Mjpjb25maWcgTkVUX0lQSVBcXG5uZXQvaXB2NC9LY29uZmlnLTE2My1cXHR0cmlzdGF0ZSBcXFwiSVA6IHR1bm5lbGluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTE6MjA6NTYuMzEzNTkyMzA4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTMyOTE3NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmUgZm9yIE5FVF9JUElQKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYE5FVF9JUElQYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIG5vdCBqdXN0IGFzc3VtZSBpdCdzIHN0YW5kYWxvbmUuIExldCdzIGRpZyBkZWVwZXIgYW5kIHZlcmlmeSB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcywgZWl0aGVyIGhhcmQgb3Igc29mdCwgdGhhdCBJJ20gb3Zlcmxvb2tpbmcuIFRoaXMgaXNuJ3QganVzdCBhYm91dCB0aGUgb2J2aW91cyBLY29uZmlnIGRlcGVuZGVuY2llcywgb2YgY291cnNlOyBJJ20gdGhpbmtpbmcgYWJvdXQgYnJvYWRlciBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBBcmUgdGhlcmUgc3BlY2lmaWMgZmVhdHVyZXMgb3IgbW9kdWxlcyB0aGF0IGBORVRfSVBJUGAgaW50ZXJhY3RzIHdpdGggaW5kaXJlY3RseT8gQ291bGQgZW5hYmxpbmcgdGhpcyBhZmZlY3QgdGhlIGJlaGF2aW9yIG9yIHBlcmZvcm1hbmNlIG9mIG90aGVyLCBzZWVtaW5nbHkgdW5yZWxhdGVkLCBwYXJ0cyBvZiB0aGUgc3lzdGVtPyBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEknbSB0aGlua2luZywgYXJlIHRoZXJlIGFueSBpbnRlcmFjdGlvbnMgd2l0aCByb3V0aW5nIHByb3RvY29scywgZmlyZXdhbGwgaW1wbGVtZW50YXRpb25zLCBvciBldmVuIGxvdy1sZXZlbCBoYXJkd2FyZSBkcml2ZXJzIHRoYXQgSSBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgY29uc2lkZXJpbmc/IFRpbWUgdG8gcHVsbCB1cCB0aGUgY3Jvc3MtcmVmZXJlbmNlcywgY2hlY2sgdGhlIGRvY3VtZW50YXRpb24sIGFuZCBtYXliZSBldmVuIHBlZWsgYXQgc29tZSByZWxldmFudCBrZXJuZWwgc291cmNlIGNvZGUgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gR290dGEgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgd2hlbiB0aGlzIHRoaW5nIGlzIGVuYWJsZWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NzUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMDo1OS44MjY4ODc2MTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjIsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjI6XFx0Y29uZmlnIE5FVF9JUElQXFxuIDE2MzpcXHRcXHR0cmlzdGF0ZSBcXFwiSVA6IHR1bm5lbGluZ1xcXCJcXG4gMTY0OlxcdFxcdHNlbGVjdCBJTkVUX1RVTk5FTFxcbiAxNjU6XFx0XFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG4gMTY2OlxcdFxcdGhlbHBcXG4gMTY3OlxcdFxcdCAgVHVubmVsaW5nIG1lYW5zIGVuY2Fwc3VsYXRpbmcgZGF0YSBvZiBvbmUgcHJvdG9jb2wgdHlwZSB3aXRoaW5cXG4gMTY4OlxcdFxcdCAgYW5vdGhlciBwcm90b2NvbCBhbmQgc2VuZGluZyBpdCBvdmVyIGEgY2hhbm5lbCB0aGF0IHVuZGVyc3RhbmRzIHRoZVxcbiAxNjk6XFx0XFx0ICBlbmNhcHN1bGF0aW5nIHByb3RvY29sLiBUaGlzIHBhcnRpY3VsYXIgdHVubmVsaW5nIGRyaXZlciBpbXBsZW1lbnRzXFxuIDE3MDpcXHRcXHQgIGVuY2Fwc3VsYXRpb24gb2YgSVAgd2l0aGluIElQLCB3aGljaCBzb3VuZHMga2luZCBvZiBwb2ludGxlc3MsIGJ1dFxcbiAxNzE6XFx0XFx0ICBjYW4gYmUgdXNlZnVsIGlmIHlvdSB3YW50IHRvIG1ha2UgeW91ciAob3Igc29tZSBvdGhlcikgbWFjaGluZVxcbiAxNzI6XFx0XFx0ICBhcHBlYXIgb24gYSBkaWZmZXJlbnQgbmV0d29yayB0aGFuIGl0IHBoeXNpY2FsbHkgaXMsIG9yIHRvIHVzZVxcbiAxNzM6XFx0XFx0ICBtb2JpbGUtSVAgZmFjaWxpdGllcyAoYWxsb3dpbmcgbGFwdG9wcyB0byBzZWFtbGVzc2x5IG1vdmUgYmV0d2VlblxcbiAxNzQ6XFx0XFx0ICBuZXR3b3JrcyB3aXRob3V0IGNoYW5naW5nIHRoZWlyIElQIGFkZHJlc3NlcykuXFxuIDE3NTpcXHRcXG4gMTc2OlxcdFxcdCAgU2F5aW5nIFkgdG8gdGhpcyBvcHRpb24gd2lsbCBwcm9kdWNlIHR3byBtb2R1bGVzICggPSBjb2RlIHdoaWNoIGNhblxcbiAxNzc6XFx0XFx0ICBiZSBpbnNlcnRlZCBpbiBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBydW5uaW5nIGtlcm5lbCB3aGVuZXZlciB5b3VcXG4gMTc4OlxcdFxcdCAgd2FudCkuIE1vc3QgcGVvcGxlIHdvbid0IG5lZWQgdGhpcyBhbmQgY2FuIHNheSBOLlxcbiAxNzk6XFx0XFxuIDE4MDpcXHRjb25maWcgTkVUX0lQR1JFX0RFTVVYXFxuIDE4MTpcXHRcXHR0cmlzdGF0ZSBcXFwiSVA6IEdSRSBkZW11bHRpcGxleGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMDo1OS44MjY5NzkzNDFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI0MzM5OTg3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBUaGlzIE5ldHdvcmsgUHJvdG9jb2wgRml4KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBtZW1vcnkgbGVhayB3aXRoaW4gYGlwaXBfdHVubmVsX3JjdmAsIHNwZWNpZmljYWxseSB3aGVuIGBpcF90dW5fcnhfZHN0YCByZXR1cm5zIE5VTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCwgYW5kIGl0J3MgaGFwcGVuaW5nIHdpdGhpbiBhIHJlYWNoYWJsZSBuZXR3b3JrIHByb3RvY29sIGhhbmRsZXIg4oCTIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoaXMgYXMgYSBjcml0aWNhbCBhcmVhLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBmdXp6aW5nIGBpcGlwX3R1bm5lbF9yY3ZgIGl0c2VsZi4gSeKAmWxsIG1ha2Ugc3VyZSB0aGUgYE5FVF9JUElQYCBjb25maWcgaXMgZW5hYmxlZC4gSG93ZXZlciwgd2FpdCwgYGlwaXBfdHVubmVsX3JjdmAgaXMgc3RhdGljISBUaGF0IGNoYW5nZXMgdGhlIGdhbWUgYSBiaXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY2FsbHMgKml0Kiwgb3IgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBpbnZvbHZlZCB3aGljaCBhbHNvIGFyZSBwYXJ0IG9mIHRoaXMgbmV0d29yayBwYXRoIHRoYXQgbWF5IG5vdCBiZSBzdGF0aWMuIEdpdmVuIHRoYXQgYGlwaXBfdHVubmVsX3JjdmAgaXMgaW50ZXJuYWwsIEkgc2hvdWxkIGludmVzdGlnYXRlIGBpcGlwX3JjdmAgYW5kIGBtcGxzaXBfcmN2YCwgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGFyZSBhbHNvIHN0YXRpYy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIHRvIHNlZSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYW5kIHdoZXRoZXIgdGhlIHN0YXRpYyBuYXR1cmUgb2YgYGlwaXBfdHVubmVsX3JjdmAgaW1wbGllcyBhbnkgbGltaXRhdGlvbnMgb24gdHJpZ2dlcmluZyB0aGUgYnVnLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzAwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTE6MjE6MDQuMDcwMzgxODMxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTU5MjU4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcGlwX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcGlwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBpcC5jPTIxNT1zdGF0aWMgaW50IGlwaXBfdHVubmVsX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBpcHByb3RvKVxcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTI2NS1cXG5uZXQvaXB2NC9pcGlwLmM6MjY2OnN0YXRpYyBpbnQgaXBpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9pcGlwLmMtMjY3LXtcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYz02MTY9c3RhdGljIHN0cnVjdCB4ZnJtX3R1bm5lbCBpcGlwX2hhbmRsZXIgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvaXB2NC9pcGlwLmM6NjE3OlxcdC5oYW5kbGVyXFx0PVxcdGlwaXBfcmN2LFxcbm5ldC9pcHY0L2lwaXAuYy02MTgtXFx0LmVycl9oYW5kbGVyXFx0PVxcdGlwaXBfZXJyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMTowNC4xMTk5ODMyMjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0OTM5Mjk2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIEhhbmRsZXIgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgc28gdGhlIGFyY2hpdGVjdHVyZSBkZWZpbmVzIHRoZXNlIHRoaW5ncyBhcyBcInN0YXRpYyxcIiBidXQgdGhleSdyZSAqcmVnaXN0ZXJlZCogYXMgaGFuZGxlcnMuIFRoYXQncyBhIGtleSBkaXN0aW5jdGlvbiBJIG5lZWQgdG8gZ3Jhc3AgdGhvcm91Z2hseS4gTXkgZmlyc3QgcXVlc3Rpb246IGFyZSB3ZSBkZWFsaW5nIHdpdGggZXhjbHVzaXZlbHkgc3RhdGljIG1ldGhvZHMgaGVyZSwgb3IgYXJlIHRoZXJlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGx1cmtpbmcgYXJvdW5kIHNvbWV3aGVyZT8gVGhlIGFzc3VtcHRpb24sIGJhc2VkIG9uIHRoZWlyIGRlY2xhcmVkIHN0YXR1cywgd291bGQgYmUgdGhhdCB0aGVzZSBhcmUgbWVhbnQgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGNsYXNzIG1lbWJlcnMuIEJ1dCBsZXQncyB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uIGFuZCBlbnN1cmUgd2UgaGF2ZSBmdWxsIGtub3dsZWRnZSBvZiB0aGUgY29tcG9zaXRpb24uIElmIHRoZXJlICphcmUqIG5vbi1zdGF0aWMgZWxlbWVudHMsIHRoYXQgaW50cm9kdWNlcyBhIHdob2xlIGxheWVyIG9mIGNvbnRleHQgdGhhdCB3b3VsZCBuZWVkIHRvIGJlIGFkZHJlc3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkzMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDExOjIxOjA3LjU2OTM3ODYwNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4OTcwOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBpcF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBpcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwaXAuYz0xMTc9TU9EVUxFX1BBUk1fREVTQyhsb2dfZWNuX2Vycm9yLCBcXFwiTG9nIHBhY2tldHMgcmVjZWl2ZWQgd2l0aCBjb3JydXB0ZWQgRUNOXFxcIik7XFxubmV0L2lwdjQvaXBpcC5jLTExOC1cXG5uZXQvaXB2NC9pcGlwLmM6MTE5OnN0YXRpYyB1bnNpZ25lZCBpbnQgaXBpcF9uZXRfaWQgX19yZWFkX21vc3RseTtcXG5uZXQvaXB2NC9pcGlwLmMtMTIwLVxcbm5ldC9pcHY0L2lwaXAuYzoxMjE6c3RhdGljIGludCBpcGlwX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbm5ldC9pcHY0L2lwaXAuYzoxMjI6c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwaXBfbGlua19vcHMgX19yZWFkX21vc3RseTtcXG5uZXQvaXB2NC9pcGlwLmMtMTIzLVxcbm5ldC9pcHY0L2lwaXAuYzoxMjQ6c3RhdGljIGludCBpcGlwX2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5mbylcXG5uZXQvaXB2NC9pcGlwLmMtMTI1LXtcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYy0xMzAtXFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXFx1MDAzZWRldik7XFxubmV0L2lwdjQvaXBpcC5jOjEzMTpcXHRzdHJ1Y3QgaXBfdHVubmVsX25ldCAqaXRuID0gbmV0X2dlbmVyaWMobmV0LCBpcGlwX25ldF9pZCk7XFxubmV0L2lwdjQvaXBpcC5jLTEzMi1cXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9IChjb25zdCBzdHJ1Y3QgaXBoZHIgKilza2ItXFx1MDAzZWRhdGE7XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtMjAyLVxcbm5ldC9pcHY0L2lwaXAuYzoyMDM6c3RhdGljIGNvbnN0IHN0cnVjdCB0bmxfcHRrX2luZm8gaXBpcF90cGkgPSB7XFxubmV0L2lwdjQvaXBpcC5jLTIwNC1cXHQvKiBubyB0dW5uZWwgaW5mbyByZXF1aXJlZCBmb3IgaXBpcC4gKi9cXG4tLVxcbm5ldC9pcHY0L2lwaXAuYz0yMDk9c3RhdGljIGNvbnN0IHN0cnVjdCB0bmxfcHRrX2luZm8gbXBsc2lwX3RwaSA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYy0yMTQtXFxubmV0L2lwdjQvaXBpcC5jOjIxNTpzdGF0aWMgaW50IGlwaXBfdHVubmVsX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBpcHByb3RvKVxcbm5ldC9pcHY0L2lwaXAuYy0yMTYte1xcbm5ldC9pcHY0L2lwaXAuYy0yMTctXFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXFx1MDAzZWRldik7XFxubmV0L2lwdjQvaXBpcC5jOjIxODpcXHRzdHJ1Y3QgaXBfdHVubmVsX25ldCAqaXRuID0gbmV0X2dlbmVyaWMobmV0LCBpcGlwX25ldF9pZCk7XFxubmV0L2lwdjQvaXBpcC5jLTIxOS1cXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncykgPSB7IH07XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtMjQyLSNlbmRpZlxcbm5ldC9pcHY0L2lwaXAuYzoyNDM6XFx0XFx0XFx0dHBpID0gXFx1MDAyNmlwaXBfdHBpO1xcbm5ldC9pcHY0L2lwaXAuYy0yNDQtXFx0XFx0aWYgKGlwdHVubmVsX3B1bGxfaGVhZGVyKHNrYiwgMCwgdHBpLVxcdTAwM2Vwcm90bywgZmFsc2UpKVxcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTI2NS1cXG5uZXQvaXB2NC9pcGlwLmM6MjY2OnN0YXRpYyBpbnQgaXBpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9pcGlwLmMtMjY3LXtcXG5uZXQvaXB2NC9pcGlwLmM6MjY4OlxcdHJldHVybiBpcGlwX3R1bm5lbF9yY3Yoc2tiLCBJUFBST1RPX0lQSVApO1xcbm5ldC9pcHY0L2lwaXAuYy0yNjktfVxcbi0tXFxubmV0L2lwdjQvaXBpcC5jPTI3Mj1zdGF0aWMgaW50IG1wbHNpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9pcGlwLmMtMjczLXtcXG5uZXQvaXB2NC9pcGlwLmM6Mjc0OlxcdHJldHVybiBpcGlwX3R1bm5lbF9yY3Yoc2tiLCBJUFBST1RPX01QTFMpO1xcbm5ldC9pcHY0L2lwaXAuYy0yNzUtfVxcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTI4MS0gKi9cXG5uZXQvaXB2NC9pcGlwLmM6MjgyOnN0YXRpYyBuZXRkZXZfdHhfdCBpcGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvaXBpcC5jLTI4My1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYy0zMjUtXFxubmV0L2lwdjQvaXBpcC5jOjMyNjpzdGF0aWMgYm9vbCBpcGlwX3R1bm5lbF9pb2N0bF92ZXJpZnlfcHJvdG9jb2wodTggaXBwcm90bylcXG5uZXQvaXB2NC9pcGlwLmMtMzI3LXtcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYz0zNDA9c3RhdGljIGludFxcbm5ldC9pcHY0L2lwaXAuYzozNDE6aXBpcF90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLCBpbnQgY21kKVxcbm5ldC9pcHY0L2lwaXAuYy0zNDIte1xcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTM0NC1cXHRcXHRpZiAocC1cXHUwMDNlaXBoLnZlcnNpb24gIT0gNCB8fFxcbm5ldC9pcHY0L2lwaXAuYzozNDU6XFx0XFx0ICAgICFpcGlwX3R1bm5lbF9pb2N0bF92ZXJpZnlfcHJvdG9jb2wocC1cXHUwMDNlaXBoLnByb3RvY29sKSB8fFxcbm5ldC9pcHY0L2lwaXAuYy0zNDYtXFx0XFx0ICAgIHAtXFx1MDAzZWlwaC5paGwgIT0gNSB8fCAocC1cXHUwMDNlaXBoLmZyYWdfb2ZmIFxcdTAwMjYgaHRvbnMofklQX0RGKSkpXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtMzU1LVxcbm5ldC9pcHY0L2lwaXAuYzozNTY6c3RhdGljIGludCBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxubmV0L2lwdjQvaXBpcC5jLTM1Ny1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtMzc5LVxcbm5ldC9pcHY0L2lwaXAuYzozODA6c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcGlwX25ldGRldl9vcHMgPSB7XFxubmV0L2lwdjQvaXBpcC5jOjM4MTpcXHQubmRvX2luaXQgICAgICAgPSBpcGlwX3R1bm5lbF9pbml0LFxcbm5ldC9pcHY0L2lwaXAuYy0zODItXFx0Lm5kb191bmluaXQgICAgID0gaXBfdHVubmVsX3VuaW5pdCxcXG5uZXQvaXB2NC9pcGlwLmM6MzgzOlxcdC5uZG9fc3RhcnRfeG1pdFxcdD0gaXBpcF90dW5uZWxfeG1pdCxcXG5uZXQvaXB2NC9pcGlwLmMtMzg0LVxcdC5uZG9fc2lvY2RldnByaXZhdGUgPSBpcF90dW5uZWxfc2lvY2RldnByaXZhdGUsXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtMzg3LVxcdC5uZG9fZ2V0X2lmbGluayA9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxcbm5ldC9pcHY0L2lwaXAuYzozODg6XFx0Lm5kb190dW5uZWxfY3RsXFx0PSBpcGlwX3R1bm5lbF9jdGwsXFxubmV0L2lwdjQvaXBpcC5jOjM4OTpcXHQubmRvX2ZpbGxfZm9yd2FyZF9wYXRoID0gaXBpcF9maWxsX2ZvcndhcmRfcGF0aCxcXG5uZXQvaXB2NC9pcGlwLmMtMzkwLX07XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtMzk3LVxcbm5ldC9pcHY0L2lwaXAuYzozOTg6c3RhdGljIHZvaWQgaXBpcF90dW5uZWxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvaXB2NC9pcGlwLmMtMzk5LXtcXG5uZXQvaXB2NC9pcGlwLmM6NDAwOlxcdGRldi1cXHUwMDNlbmV0ZGV2X29wc1xcdFxcdD0gXFx1MDAyNmlwaXBfbmV0ZGV2X29wcztcXG5uZXQvaXB2NC9pcGlwLmMtNDAxLVxcdGRldi1cXHUwMDNlaGVhZGVyX29wc1xcdFxcdD0gXFx1MDAyNmlwX3R1bm5lbF9oZWFkZXJfb3BzO1xcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTQxMC1cXHRkZXYtXFx1MDAzZWh3X2ZlYXR1cmVzXFx0fD0gSVBJUF9GRUFUVVJFUztcXG5uZXQvaXB2NC9pcGlwLmM6NDExOlxcdGlwX3R1bm5lbF9zZXR1cChkZXYsIGlwaXBfbmV0X2lkKTtcXG5uZXQvaXB2NC9pcGlwLmMtNDEyLX1cXG5uZXQvaXB2NC9pcGlwLmMtNDEzLVxcbm5ldC9pcHY0L2lwaXAuYzo0MTQ6c3RhdGljIGludCBpcGlwX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2lwdjQvaXBpcC5jLTQxNS17XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNDI1LVxcbm5ldC9pcHY0L2lwaXAuYzo0MjY6c3RhdGljIGludCBpcGlwX3R1bm5lbF92YWxpZGF0ZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxubmV0L2lwdjQvaXBpcC5jLTQyNy1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNDQwLVxcbm5ldC9pcHY0L2lwaXAuYzo0NDE6c3RhdGljIHZvaWQgaXBpcF9uZXRsaW5rX3Bhcm1zKHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcXG5uZXQvaXB2NC9pcGlwLmMtNDQyLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcGFybXMsXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNDYzLVxcbm5ldC9pcHY0L2lwaXAuYzo0NjQ6c3RhdGljIGludCBpcGlwX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXB2NC9pcGlwLmMtNDY1LVxcdFxcdFxcdHN0cnVjdCBydG5sX25ld2xpbmtfcGFyYW1zICpwYXJhbXMsXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNDgxLVxcbm5ldC9pcHY0L2lwaXAuYzo0ODI6XFx0aXBpcF9uZXRsaW5rX3Bhcm1zKGRhdGEsIFxcdTAwMjZwLCBcXHUwMDI2dC1cXHUwMDNlY29sbGVjdF9tZCwgXFx1MDAyNmZ3bWFyayk7XFxubmV0L2lwdjQvaXBpcC5jLTQ4My1cXHRyZXR1cm4gaXBfdHVubmVsX25ld2xpbmsocGFyYW1zLVxcdTAwM2VsaW5rX25ldCA/IDogZGV2X25ldChkZXYpLCBkZXYsIHRiLCBcXHUwMDI2cCxcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYy00ODYtXFxubmV0L2lwdjQvaXBpcC5jOjQ4NzpzdGF0aWMgaW50IGlwaXBfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbm5ldC9pcHY0L2lwaXAuYy00ODgtXFx0XFx0XFx0ICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTUwNi1cXG5uZXQvaXB2NC9pcGlwLmM6NTA3OlxcdGlwaXBfbmV0bGlua19wYXJtcyhkYXRhLCBcXHUwMDI2cCwgXFx1MDAyNmNvbGxlY3RfbWQsIFxcdTAwMjZmd21hcmspO1xcbm5ldC9pcHY0L2lwaXAuYy01MDgtXFx0aWYgKGNvbGxlY3RfbWQpXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNTE3LVxcbm5ldC9pcHY0L2lwaXAuYzo1MTg6c3RhdGljIHNpemVfdCBpcGlwX2dldF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2lwdjQvaXBpcC5jLTUxOS17XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNTQ5LVxcbm5ldC9pcHY0L2lwaXAuYzo1NTA6c3RhdGljIGludCBpcGlwX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9pcHY0L2lwaXAuYy01NTEte1xcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTU4NC1cXG5uZXQvaXB2NC9pcGlwLmM6NTg1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBpcGlwX3BvbGljeVtJRkxBX0lQVFVOX01BWCArIDFdID0ge1xcbm5ldC9pcHY0L2lwaXAuYy01ODYtXFx0W0lGTEFfSVBUVU5fTElOS11cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNjAwLVxcbm5ldC9pcHY0L2lwaXAuYzo2MDE6c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwaXBfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvaXB2NC9pcGlwLmMtNjAyLVxcdC5raW5kXFx0XFx0PSBcXFwiaXBpcFxcXCIsXFxubmV0L2lwdjQvaXBpcC5jLTYwMy1cXHQubWF4dHlwZVxcdD0gSUZMQV9JUFRVTl9NQVgsXFxubmV0L2lwdjQvaXBpcC5jOjYwNDpcXHQucG9saWN5XFx0XFx0PSBpcGlwX3BvbGljeSxcXG5uZXQvaXB2NC9pcGlwLmMtNjA1LVxcdC5wcml2X3NpemVcXHQ9IHNpemVvZihzdHJ1Y3QgaXBfdHVubmVsKSxcXG5uZXQvaXB2NC9pcGlwLmM6NjA2OlxcdC5zZXR1cFxcdFxcdD0gaXBpcF90dW5uZWxfc2V0dXAsXFxubmV0L2lwdjQvaXBpcC5jOjYwNzpcXHQudmFsaWRhdGVcXHQ9IGlwaXBfdHVubmVsX3ZhbGlkYXRlLFxcbm5ldC9pcHY0L2lwaXAuYzo2MDg6XFx0Lm5ld2xpbmtcXHQ9IGlwaXBfbmV3bGluayxcXG5uZXQvaXB2NC9pcGlwLmM6NjA5OlxcdC5jaGFuZ2VsaW5rXFx0PSBpcGlwX2NoYW5nZWxpbmssXFxubmV0L2lwdjQvaXBpcC5jLTYxMC1cXHQuZGVsbGlua1xcdD0gaXBfdHVubmVsX2RlbGxpbmssXFxubmV0L2lwdjQvaXBpcC5jOjYxMTpcXHQuZ2V0X3NpemVcXHQ9IGlwaXBfZ2V0X3NpemUsXFxubmV0L2lwdjQvaXBpcC5jOjYxMjpcXHQuZmlsbF9pbmZvXFx0PSBpcGlwX2ZpbGxfaW5mbyxcXG5uZXQvaXB2NC9pcGlwLmMtNjEzLVxcdC5nZXRfbGlua19uZXRcXHQ9IGlwX3R1bm5lbF9nZXRfbGlua19uZXQsXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNjE1LVxcbm5ldC9pcHY0L2lwaXAuYzo2MTY6c3RhdGljIHN0cnVjdCB4ZnJtX3R1bm5lbCBpcGlwX2hhbmRsZXIgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvaXB2NC9pcGlwLmM6NjE3OlxcdC5oYW5kbGVyXFx0PVxcdGlwaXBfcmN2LFxcbm5ldC9pcHY0L2lwaXAuYzo2MTg6XFx0LmVycl9oYW5kbGVyXFx0PVxcdGlwaXBfZXJyLFxcbm5ldC9pcHY0L2lwaXAuYy02MTktXFx0LnByaW9yaXR5XFx0PVxcdDEsXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmM9NjIzPXN0YXRpYyBzdHJ1Y3QgeGZybV90dW5uZWwgbXBsc2lwX2hhbmRsZXIgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvaXB2NC9pcGlwLmMtNjI0LVxcdC5oYW5kbGVyXFx0PVxcdG1wbHNpcF9yY3YsXFxubmV0L2lwdjQvaXBpcC5jOjYyNTpcXHQuZXJyX2hhbmRsZXJcXHQ9XFx0aXBpcF9lcnIsXFxubmV0L2lwdjQvaXBpcC5jLTYyNi1cXHQucHJpb3JpdHlcXHQ9XFx0MSxcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYy02MjktXFxubmV0L2lwdjQvaXBpcC5jOjYzMDpzdGF0aWMgaW50IF9fbmV0X2luaXQgaXBpcF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L2lwdjQvaXBpcC5jLTYzMS17XFxubmV0L2lwdjQvaXBpcC5jOjYzMjpcXHRyZXR1cm4gaXBfdHVubmVsX2luaXRfbmV0KG5ldCwgaXBpcF9uZXRfaWQsIFxcdTAwMjZpcGlwX2xpbmtfb3BzLCBcXFwidHVubDBcXFwiKTtcXG5uZXQvaXB2NC9pcGlwLmMtNjMzLX1cXG5uZXQvaXB2NC9pcGlwLmMtNjM0LVxcbm5ldC9pcHY0L2lwaXAuYzo2MzU6c3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcGlwX2V4aXRfcnRubChzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L2lwdjQvaXBpcC5jLTYzNi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpkZXZfdG9fa2lsbClcXG5uZXQvaXB2NC9pcGlwLmMtNjM3LXtcXG5uZXQvaXB2NC9pcGlwLmM6NjM4OlxcdGlwX3R1bm5lbF9kZWxldGVfbmV0KG5ldCwgaXBpcF9uZXRfaWQsIFxcdTAwMjZpcGlwX2xpbmtfb3BzLCBkZXZfdG9fa2lsbCk7XFxubmV0L2lwdjQvaXBpcC5jLTYzOS19XFxubmV0L2lwdjQvaXBpcC5jLTY0MC1cXG5uZXQvaXB2NC9pcGlwLmM6NjQxOnN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXBpcF9uZXRfb3BzID0ge1xcbm5ldC9pcHY0L2lwaXAuYzo2NDI6XFx0LmluaXQgPSBpcGlwX2luaXRfbmV0LFxcbm5ldC9pcHY0L2lwaXAuYzo2NDM6XFx0LmV4aXRfcnRubCA9IGlwaXBfZXhpdF9ydG5sLFxcbm5ldC9pcHY0L2lwaXAuYzo2NDQ6XFx0LmlkICAgPSBcXHUwMDI2aXBpcF9uZXRfaWQsXFxubmV0L2lwdjQvaXBpcC5jLTY0NS1cXHQuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXBfdHVubmVsX25ldCksXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNjQ3LVxcbm5ldC9pcHY0L2lwaXAuYzo2NDg6c3RhdGljIGludCBfX2luaXQgaXBpcF9pbml0KHZvaWQpXFxubmV0L2lwdjQvaXBpcC5jLTY0OS17XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNjUzLVxcbm5ldC9pcHY0L2lwaXAuYzo2NTQ6XFx0ZXJyID0gcmVnaXN0ZXJfcGVybmV0X2RldmljZShcXHUwMDI2aXBpcF9uZXRfb3BzKTtcXG5uZXQvaXB2NC9pcGlwLmMtNjU1LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbm5ldC9pcHY0L2lwaXAuYy02NTYtXFx0XFx0cmV0dXJuIGVycjtcXG5uZXQvaXB2NC9pcGlwLmM6NjU3OlxcdGVyciA9IHhmcm00X3R1bm5lbF9yZWdpc3RlcihcXHUwMDI2aXBpcF9oYW5kbGVyLCBBRl9JTkVUKTtcXG5uZXQvaXB2NC9pcGlwLmMtNjU4LVxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxubmV0L2lwdjQvaXBpcC5jLTY1OS1cXHRcXHRwcl9pbmZvKFxcXCIlczogY2FuJ3QgcmVnaXN0ZXIgdHVubmVsXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxubmV0L2lwdjQvaXBpcC5jOjY2MDpcXHRcXHRnb3RvIHhmcm1fdHVubmVsX2lwaXBfZmFpbGVkO1xcbm5ldC9pcHY0L2lwaXAuYy02NjEtXFx0fVxcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTY2OC0jZW5kaWZcXG5uZXQvaXB2NC9pcGlwLmM6NjY5OlxcdGVyciA9IHJ0bmxfbGlua19yZWdpc3RlcihcXHUwMDI2aXBpcF9saW5rX29wcyk7XFxubmV0L2lwdjQvaXBpcC5jLTY3MC1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYy02ODEtI2VuZGlmXFxubmV0L2lwdjQvaXBpcC5jOjY4MjpcXHR4ZnJtNF90dW5uZWxfZGVyZWdpc3RlcihcXHUwMDI2aXBpcF9oYW5kbGVyLCBBRl9JTkVUKTtcXG5uZXQvaXB2NC9pcGlwLmM6NjgzOnhmcm1fdHVubmVsX2lwaXBfZmFpbGVkOlxcbm5ldC9pcHY0L2lwaXAuYzo2ODQ6XFx0dW5yZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKFxcdTAwMjZpcGlwX25ldF9vcHMpO1xcbm5ldC9pcHY0L2lwaXAuYy02ODUtXFx0Z290byBvdXQ7XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNjg3LVxcbm5ldC9pcHY0L2lwaXAuYzo2ODg6c3RhdGljIHZvaWQgX19leGl0IGlwaXBfZmluaSh2b2lkKVxcbm5ldC9pcHY0L2lwaXAuYy02ODkte1xcbm5ldC9pcHY0L2lwaXAuYzo2OTA6XFx0cnRubF9saW5rX3VucmVnaXN0ZXIoXFx1MDAyNmlwaXBfbGlua19vcHMpO1xcbm5ldC9pcHY0L2lwaXAuYzo2OTE6XFx0aWYgKHhmcm00X3R1bm5lbF9kZXJlZ2lzdGVyKFxcdTAwMjZpcGlwX2hhbmRsZXIsIEFGX0lORVQpKVxcbm5ldC9pcHY0L2lwaXAuYy02OTItXFx0XFx0cHJfaW5mbyhcXFwiJXM6IGNhbid0IGRlcmVnaXN0ZXIgdHVubmVsXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNjk2LSNlbmRpZlxcbm5ldC9pcHY0L2lwaXAuYzo2OTc6XFx0dW5yZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKFxcdTAwMjZpcGlwX25ldF9vcHMpO1xcbm5ldC9pcHY0L2lwaXAuYy02OTgtfVxcbm5ldC9pcHY0L2lwaXAuYy02OTktXFxubmV0L2lwdjQvaXBpcC5jOjcwMDptb2R1bGVfaW5pdChpcGlwX2luaXQpO1xcbm5ldC9pcHY0L2lwaXAuYzo3MDE6bW9kdWxlX2V4aXQoaXBpcF9maW5pKTtcXG5uZXQvaXB2NC9pcGlwLmMtNzAyLU1PRFVMRV9ERVNDUklQVElPTihcXFwiSVAvSVAgcHJvdG9jb2wgZGVjb2RlciBsaWJyYXJ5XFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDExOjIxOjA3LjYxNzI4MDUzMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjczNjIxMTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIElQSVAgVHVubmVsIFJlY2VpdmVyIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYmVzdCB0byBmdXp6IHRoZSBJUElQIHR1bm5lbCByZWNlaXZlIHBhdGgsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoYXQgbWVtb3J5IGxlYWsgZml4LiBUaGUgZnVuY3Rpb25zIGBpcGlwX3JjdmAgYW5kIGBtcGxzaXBfcmN2YCBpbW1lZGlhdGVseSBjYXVnaHQgbXkgZXllLiBUaGV5J3JlIHJlZ2lzdGVyZWQgdGhyb3VnaCBgeGZybTRfdHVubmVsX3JlZ2lzdGVyYCwgd2hpY2ggbWFrZXMgdGhlbSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLiBIbW0sIGJ1dCB0aGV5J3JlICpzdGF0aWMqLiBOb3csIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIExldCBtZSB0aGluay4uLiB3YWl0LCBpZiB0aGV5IGFyZSBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgdG8gYHhmcm00X3R1bm5lbF9yZWdpc3RlcmAsIHRoZW4gdGhlIGNvbXBpbGVyICpjYW4ndCogaW5saW5lIHRoZW0uIFRoZXkgaGF2ZSB0byBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIGV2ZW4gaWYgc3RhdGljLiBFeGNlbGxlbnQuIFNvLCBgaXBpcF9yY3ZgIGFuZCBgbXBsc2lwX3JjdmAgYXJlIGFjdHVhbGx5IGdvb2QgY2FuZGlkYXRlcyBmb3IgYEZvY3VzU3ltYm9sc2AuXG5cbkkgd2FzIGEgYml0IHdvcnJpZWQgYWJvdXQgYGlwaXBfdHVubmVsX3JjdmAsIHNpbmNlIHRoYXQgc2VlbXMgdG8gYmUgdGhlIG1haW4gZnVuY3Rpb24gd2hlcmUgdGhlIHBhdGNoIGlzLiBCdXQgc2luY2UgYGlwaXBfcmN2YCBhbmQgYG1wbHNpcF9yY3ZgIGFyZSB0aGUgaGFuZGxlcnMgdGhhdCBnZXQgcmVnaXN0ZXJlZCwgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGNhbGwgYGlwaXBfdHVubmVsX3JjdmAsIEkgdGhpbmsgdGhlc2UgYXJlIGJldHRlciBjaG9pY2VzIGZvciBmdXp6aW5nLiBgaXBpcF90dW5uZWxfcmN2YCBtaWdodCBiZSBpbmxpbmVkIHdpdGhpbiB0aGVtLCBidXQgbGV0J3Mgc3RpY2sgd2l0aCB0aGUgZW50cnlwb2ludHMuIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGBpcF90dW5uZWxfcmN2YCBpc24ndCBhIG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmUuLi4gWWVwLCBpdCdzIHRoZXJlIGluIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AgYnV0IHRoZSBpbXBvcnRhbnQgY2hhbmdlcyBhcmUgaW4gYGlwaXBfdHVubmVsX3JjdmAhXG5cblNvLCBJJ20gZ29pbmcgd2l0aCBgaXBpcF9yY3ZgIGFuZCBgbXBsc2lwX3JjdmAgYXMgbXkgYEZvY3VzU3ltYm9sc2AuIFRoZXkgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIGNvdmVyaW5nIHRoZSBwYXRoLiBBcyBmb3IgY29uZmlndXJhdGlvbiwgYE5FVF9JUElQYCBpcyBjbGVhcmx5IG5lZWRlZC4gSSdsbCBhbHNvIGRvdWJsZS1jaGVjaywgYW5kIGBDT05GSUdfTVBMU2AgaXMgYWxzbyByZXF1aXJlZCBiZWNhdXNlIG9mIGBtcGxzaXBfcmN2YC4gSSBzaG91bGQgY2hlY2sgYG5ldC9pcHY0L2lwaXAuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuXG5cblRoZSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZDogaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgbmV0d29yayBwcm90b2NvbCBoYW5kbGVyIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSByZWNlaXZlIHBhdGgsIHNvIGRlZmluaXRlbHkgd29ydGggZnV6emluZyB0byBkZXRlY3QgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIG90aGVyIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1OTgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTE6MjE6MTQuODkwOTA0MTY0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQ2MzUxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTVBMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcGlwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBpcC5jPTIwMz1zdGF0aWMgY29uc3Qgc3RydWN0IHRubF9wdGtfaW5mbyBpcGlwX3RwaSA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYy0yMDctXFxubmV0L2lwdjQvaXBpcC5jOjIwODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBMUylcXG5uZXQvaXB2NC9pcGlwLmMtMjA5LXN0YXRpYyBjb25zdCBzdHJ1Y3QgdG5sX3B0a19pbmZvIG1wbHNpcF90cGkgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmM9MjE1PXN0YXRpYyBpbnQgaXBpcF90dW5uZWxfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHU4IGlwcHJvdG8pXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtMjM3LVxcdFxcdFxcdGdvdG8gZHJvcDtcXG5uZXQvaXB2NC9pcGlwLmM6MjM4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUExTKVxcbm5ldC9pcHY0L2lwaXAuYy0yMzktXFx0XFx0aWYgKGlwcHJvdG8gPT0gSVBQUk9UT19NUExTKVxcbi0tXFxubmV0L2lwdjQvaXBpcC5jPTI2Nj1zdGF0aWMgaW50IGlwaXBfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtMjcwLVxcbm5ldC9pcHY0L2lwaXAuYzoyNzE6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QTFMpXFxubmV0L2lwdjQvaXBpcC5jLTI3Mi1zdGF0aWMgaW50IG1wbHNpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYz0yODI9c3RhdGljIG5ldGRldl90eF90IGlwaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYy0yOTUtXFx0XFx0YnJlYWs7XFxubmV0L2lwdjQvaXBpcC5jOjI5NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBMUylcXG5uZXQvaXB2NC9pcGlwLmMtMjk3LVxcdGNhc2UgaHRvbnMoRVRIX1BfTVBMU19VQyk6XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmM9MzI2PXN0YXRpYyBib29sIGlwaXBfdHVubmVsX2lvY3RsX3ZlcmlmeV9wcm90b2NvbCh1OCBpcHByb3RvKVxcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTMzMC1cXHRjYXNlIElQUFJPVE9fSVBJUDpcXG5uZXQvaXB2NC9pcGlwLmM6MzMxOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUExTKVxcbm5ldC9pcHY0L2lwaXAuYy0zMzItXFx0Y2FzZSBJUFBST1RPX01QTFM6XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmM9NjE2PXN0YXRpYyBzdHJ1Y3QgeGZybV90dW5uZWwgaXBpcF9oYW5kbGVyIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNjIxLVxcbm5ldC9pcHY0L2lwaXAuYzo2MjI6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QTFMpXFxubmV0L2lwdjQvaXBpcC5jLTYyMy1zdGF0aWMgc3RydWN0IHhmcm1fdHVubmVsIG1wbHNpcF9oYW5kbGVyIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmM9NjQ4PXN0YXRpYyBpbnQgX19pbml0IGlwaXBfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTY2MS1cXHR9XFxubmV0L2lwdjQvaXBpcC5jOjY2MjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBMUylcXG5uZXQvaXB2NC9pcGlwLmMtNjYzLVxcdGVyciA9IHhmcm00X3R1bm5lbF9yZWdpc3RlcihcXHUwMDI2bXBsc2lwX2hhbmRsZXIsIEFGX01QTFMpO1xcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTY3Ni1ydG5sX2xpbmtfZmFpbGVkOlxcbm5ldC9pcHY0L2lwaXAuYzo2Nzc6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QTFMpXFxubmV0L2lwdjQvaXBpcC5jLTY3OC1cXHR4ZnJtNF90dW5uZWxfZGVyZWdpc3RlcihcXHUwMDI2bXBsc2lwX2hhbmRsZXIsIEFGX01QTFMpO1xcbi0tXFxubmV0L2lwdjQvaXBpcC5jPTY4OD1zdGF0aWMgdm9pZCBfX2V4aXQgaXBpcF9maW5pKHZvaWQpXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNjkyLVxcdFxcdHByX2luZm8oXFxcIiVzOiBjYW4ndCBkZXJlZ2lzdGVyIHR1bm5lbFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbm5ldC9pcHY0L2lwaXAuYzo2OTM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QTFMpXFxubmV0L2lwdjQvaXBpcC5jLTY5NC1cXHRpZiAoeGZybTRfdHVubmVsX2RlcmVnaXN0ZXIoXFx1MDAyNm1wbHNpcF9oYW5kbGVyLCBBRl9NUExTKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTE6MjE6MTQuOTM1MzcyMzk5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDg4OTExNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgTVBMUyBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBgQ09ORklHX01QTFNgLiBUaGF0J3MgYSBrZXkga2VybmVsIG9wdGlvbiwgYW5kIGl0J3MgcmVsZXZhbnQgdG8gdGhlIGN1cnJlbnQgc2l0dWF0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cyB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIE5vIHBvaW50IGluIGVuYWJsaW5nIHNvbWV0aGluZyB3aXRob3V0IGtub3dpbmcgd2hhdCBlbHNlIGl0IHB1bGxzIGluLCBvciB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGJlIGFmZmVjdGVkLiBMZXQncyBkaWcgaW50byB0aGUgS2NvbmZpZyBhbmQgc2VlIHdoYXQgdGhlIHJlbGF0aW9uc2hpcHMgYXJlLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIGhvdyBicm9hZGx5IHRoaXMgaW1wYWN0cyB0aGUgd2lkZXIgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NjgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMToxOC4zODQyNjU4MDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzkxNTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNUExTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcGxzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wbHMvS2NvbmZpZy01LVxcbm5ldC9tcGxzL0tjb25maWc6NjptZW51Y29uZmlnIE1QTFNcXG5uZXQvbXBscy9LY29uZmlnLTctXFx0Ym9vbCBcXFwiTXVsdGlQcm90b2NvbCBMYWJlbCBTd2l0Y2hpbmdcXFwiXFxuLS1cXG5uZXQvbXBscy9LY29uZmlnPTE5PWNvbmZpZyBORVRfTVBMU19HU09cXG4tLVxcbm5ldC9tcGxzL0tjb25maWctMjUtXFxubmV0L21wbHMvS2NvbmZpZzoyNjpjb25maWcgTVBMU19ST1VUSU5HXFxubmV0L21wbHMvS2NvbmZpZy0yNy1cXHR0cmlzdGF0ZSBcXFwiTVBMUzogcm91dGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L21wbHMvS2NvbmZpZy0zMi1cXG5uZXQvbXBscy9LY29uZmlnOjMzOmNvbmZpZyBNUExTX0lQVFVOTkVMXFxubmV0L21wbHMvS2NvbmZpZy0zNC1cXHR0cmlzdGF0ZSBcXFwiTVBMUzogSVAgb3ZlciBNUExTIHR1bm5lbCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMToxOC40MjgwNjIzOTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzMTY4MDEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqTXkgQ29uZmlndXJhdGlvbiBMb2dpYyBmb3IgTmV0d29yayBQcm90b2NvbHMqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBkZWFsaW5nIHdpdGggY29uZmlndXJhdGlvbiBvcHRpb25zIGhlcmUsIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcncyBzZXQgdXAgY29ycmVjdGx5LiBGaXJzdCB0aGluZydzIGZpcnN0OiBgQ09ORklHX01QTFNgIGlzIGEgYm9vbGVhbiwgd2hpY2ggaXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gU28sIEknbGwgYWRkIGBNUExTYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIFRoYXQgZW5zdXJlcyBpdCdzIHByb3Blcmx5IGNvbnNpZGVyZWQgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS5cblxuTm93LCBsZXQncyBjYXN0IGEgd2lkZXIgbmV0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG90aGVyIGNydWNpYWwgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIG5ldHdvcmsgc2V0dXAuIEFoLCB5ZXMsIGBORVRfSVBJUGAgaXMgc3RhbmRpbmcgb3V0IGFzIGEga2V5IGNhbmRpZGF0ZS4gVGhpcyBjb3VsZCBiZSBpbXBvcnRhbnQuXG5cbk9rYXksIGxldCdzIGhvbWUgaW4gb24gdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gbG9vayBhdC4gRnJvbSB0aGUgc3ltYm9scyBJJ20gc2VlaW5nLCBgaXBpcF9yY3ZgIGFuZCBgbXBsc2lwX3JjdmAgYXJlIHRoZSByZWFsIGZvY3VzLiBJJ2xsIG5lZWQgdG8gZm9sbG93IHRoZSBleGVjdXRpb24gZmxvd3MgdGhhdCB0b3VjaCB0aGVzZS5cblxuQWxyaWdodCwgd2l0aCB0aGUgbWFpbiBwaWVjZXMgaW4gcGxhY2UsIEkgYmVsaWV2ZSBpdCdzIHRpbWUgdG8gc2V0LXJlc3VsdHMuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGl0IGFsbCBwdXQgdG9nZXRoZXIgYWZ0ZXIgYSBxdWljayBldmFsdWF0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5MzksIk91dHB1dFRva2VucyI6MTE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTE6MjE6MjMuMDU5NzQ0NTc1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk2MzExOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9JUElQXCIsXG4gICAgXCJNUExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBpcF9yY3ZcIixcbiAgICBcIm1wbHNpcF9yY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBJUElQIHR1bm5lbCByZWNlaXZlIHBhdGggKGBpcGlwX3R1bm5lbF9yY3ZgKSBieSBwcm9wZXJseSBmcmVlaW5nIHRoZSBza2Igd2hlbiBgaXBfdHVuX3J4X2RzdGAgcmV0dXJucyBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgbmV0d29yayBwcm90b2NvbCBoYW5kbGVyLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9JUElQXCIsXG4gICAgXCJNUExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBpcF9yY3ZcIixcbiAgICBcIm1wbHNpcF9yY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBJUElQIHR1bm5lbCByZWNlaXZlIHBhdGggKGBpcGlwX3R1bm5lbF9yY3ZgKSBieSBwcm9wZXJseSBmcmVlaW5nIHRoZSBza2Igd2hlbiBgaXBfdHVuX3J4X2RzdGAgcmV0dXJucyBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgbmV0d29yayBwcm90b2NvbCBoYW5kbGVyLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMToyMy4xMzkzODI3ODdaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjQzMDgzODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTE6MjE6MjMuMTM5ODI3Mzg3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE2MjQyNjM1NzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIHdoZXJlIGFuIHNrX2J1ZmYgKHNrYikgd2FzIG5vdCBmcmVlZCB3aGVuIGlwX3R1bl9yeF9kc3QoKSByZXR1cm5lZCBOVUxMLiBCeSBjaGFuZ2luZyAncmV0dXJuIDA7JyB0byAnZ290byBkcm9wOycsIHRoZSBza2IgaXMgbm93IHByb3Blcmx5IGZyZWVkIHZpYSBrZnJlZV9za2Ioc2tiKS4gVGhpcyBpcyBhIG1lbW9yeSBsZWFrIGlzc3VlLCB3aGljaCBpcyB0eXBpY2FsbHkgZGV0ZWN0ZWQgYnkga21lbWxlYWsuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MsIHdoaWNoIGFyZSB0aGUgdGFyZ2V0cyBvZiBLTVNBTi4gU3RhbmRhcmQgS0FTQU4gYW5kIGttZW1sZWFrIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIHR5cGUgb2YgaXNzdWUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDFlYWJlMGE3Y2FjODIyZTZlN2ExZjQ3YzY5NjllODVmNTk3MmVmMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDExOjIwOjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBpcC5jIGIvbmV0L2lwdjQvaXBpcC5jXG5pbmRleCBiNjQzMTk0ZjU3ZDI5Li5kZGY2MmI0NTU2NmI2IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBpcC5jXG4rKysgYi9uZXQvaXB2NC9pcGlwLmNcbkBAIC0yNDgsNyArMjQ4LDcgQEAgc3RhdGljIGludCBpcGlwX3R1bm5lbF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaXBwcm90bylcbiBcbiBcdFx0XHR0dW5fZHN0ID0gaXBfdHVuX3J4X2RzdChza2IsIGZsYWdzLCAwLCAwKTtcbiBcdFx0XHRpZiAoIXR1bl9kc3QpXG4tXHRcdFx0XHRyZXR1cm4gMDtcbitcdFx0XHRcdGdvdG8gZHJvcDtcbiBcdFx0XHRpcF90dW5uZWxfbWRfdWRwX2VuY2FwKHNrYiwgXHUwMDI2dHVuX2RzdC1cdTAwM2V1LnR1bl9pbmZvKTtcbiBcdFx0fVxuIFx0XHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTE6MjE6MjMuMTM5ODI4OTI3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTAwNDA0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ29kZSBQYXRjaDogSVBJUCBUdW5uZWwgUmVjZWl2ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvaXB2NC9pcGlwLmNgLiBJdCdzIGEgc2ltcGxlLCBzZWVtaW5nbHkgZGlyZWN0IGNoYW5nZTogaXQgc3dhcHMgYHJldHVybiAwO2AgZm9yIGBnb3RvIGRyb3A7YCB3aXRoaW4gdGhlIGBpcGlwX3R1bm5lbF9yY3ZgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwid2h5IHRoZSBqdW1wPyBXaGF0J3MgZ29pbmcgb24gaGVyZT9cIiBSZXBsYWNpbmcgYSBzaW1wbGUgcmV0dXJuIHdpdGggYSBgZ290b2AgaXMgdW51c3VhbCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyB0aG9yb3VnaGx5LiBUaGUgY29tbWVudCBpbiB0aGUgY29kZSBkb2Vzbid0IGV4cGxhaW4gdGhlIHJlYXNvbi5cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG5ldC9pcHY0L2lwaXAuY2AgdG8gc2VlIHByZWNpc2VseSB3aGF0IGBnb3RvIGRyb3A7YCBpcyByZWZlcmVuY2luZy4gV2hhdCdzIHRoZSBjb250ZXh0IG9mIHRoaXMgXCJkcm9wXCIgbGFiZWw/IElzIGl0IGEgY29tbW9uIGV4aXQgcG9pbnQgZm9yIGVycm9yIGhhbmRsaW5nPyBJcyBpdCByZWxhdGVkIHRvIHNvbWUgcmVzb3VyY2UgbWFuYWdlbWVudD8gT3IgaXMgaXQgY2hhbmdpbmcgdGhlIGNvbnRyb2wgZmxvdyBpbiBhIHdheSBJIG5lZWQgdG8gZGVlcGx5IHVuZGVyc3RhbmQ/IEkgc3VzcGVjdCB0aGlzIGlzIHNvbWV0aGluZyByZWxhdGVkIHRvIGhhbmRsaW5nIGluYm91bmQgcGFja2V0cyBhbmQgbGlrZWx5IHBlcnRhaW5zIHRvIGEgcGFja2V0IGJlaW5nIGludmFsaWQgb3IgdW5wcm9jZXNzYWJsZS4gQnV0IEkgbXVzdCBiZSBzdXJlISBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgZmxvdyBsb2dpYyBhcm91bmQgYGRyb3BgIGxhYmVsIHRvIGJlIHN1cmUuIEFueSBjaGFuZ2UgdG8gdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgYWx0ZXJzIHRoZSBmbG93IGZyb20gYW4gZXJyb3IgcmV0dXJuIHRvIGEganVtcCBpcyB3b3J0aCB0aGUgZXh0cmEgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTk5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMToyNi43NDk4NzI5NjFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTAwNDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwaXBfdHVubmVsX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcGlwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBpcC5jPTIwOT1zdGF0aWMgY29uc3Qgc3RydWN0IHRubF9wdGtfaW5mbyBtcGxzaXBfdHBpID0ge1xcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTIxNC1cXG5uZXQvaXB2NC9pcGlwLmM6MjE1OnN0YXRpYyBpbnQgaXBpcF90dW5uZWxfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHU4IGlwcHJvdG8pXFxubmV0L2lwdjQvaXBpcC5jLTIxNi17XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmM9MjY2PXN0YXRpYyBpbnQgaXBpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9pcGlwLmMtMjY3LXtcXG5uZXQvaXB2NC9pcGlwLmM6MjY4OlxcdHJldHVybiBpcGlwX3R1bm5lbF9yY3Yoc2tiLCBJUFBST1RPX0lQSVApO1xcbm5ldC9pcHY0L2lwaXAuYy0yNjktfVxcbi0tXFxubmV0L2lwdjQvaXBpcC5jPTI3Mj1zdGF0aWMgaW50IG1wbHNpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9pcGlwLmMtMjczLXtcXG5uZXQvaXB2NC9pcGlwLmM6Mjc0OlxcdHJldHVybiBpcGlwX3R1bm5lbF9yY3Yoc2tiLCBJUFBST1RPX01QTFMpO1xcbm5ldC9pcHY0L2lwaXAuYy0yNzUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMToyNi43OTY3Nzg5NjdaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkyODk3MTgwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGBpcGlwX3R1bm5lbF9yY3ZgIGZ1bmN0aW9uLCBmb2N1c2luZyBvbiBsaW5lcyAyMTUtMjY1LCBhcyBpZiB0aGVzZSBhcmUgbXkgaW1tZWRpYXRlIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgYGlwaXBfdHVubmVsX3JjdmAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgaXBpcF90dW5uZWxfcmN2YCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9pcHY0L2lwaXAuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjcml0aWNhbCBzZWN0aW9uIGZyb20gbGluZSAyMTUgdG8gMjY1LiBSaWdodCwgdGhpcyBpcyB3aGVyZSB0aGUgKnJlYWwqIHBhY2tldCBwcm9jZXNzaW5nIGhhcHBlbnMgd2l0aGluIHRoZSBJUElQIHR1bm5lbC5cblxuUmlnaHQsIGxpbmUgMjE1IG1hcmtzIHRoZSBzdGFydC4uLiBhaCwgSSByZW1lbWJlciwgd2UncmUgaW5zaWRlIHRoZSBtYWluIHdvcmsgbG9vcC4gRmlyc3QgdGhpbmcsIHdlJ3JlIGxpa2VseSBncmFiYmluZyB0aGUgaW5uZXIgSVAgaGVhZGVyOyBjb25maXJtaW5nIHRoYXQgaXQgaGFzIGJlZW4gY2hlY2tlZCBhZ2FpbnN0IGFsbCB2YWxpZCBjcml0ZXJpYSBiZWZvcmUgZ2V0dGluZyB0byB0aGlzIHN0YWdlLiBJJ20gbG9va2luZyBmb3IgdGhlIGVzc2VudGlhbCBwcm9jZXNzaW5nIHN0ZXBzLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgZW5jYXBzdWxhdGlvbiBiZWluZyBzdHJpcHBlZCwgdGhlIGlubmVyIGhlYWRlciBiZWluZyBleGFtaW5lZCwgYW5kIHRoZW4gdGhlIHBhY2tldCBiZWluZyByb3V0ZWQgb3IgZGVsaXZlcmVkLlxuXG5MaW5lcyAyMjAtMjMwOiBub3cgdGhlIGNvcmUgb2YgaXQsIEkgc2VlIHRoYXQgd2UgYXJlIGhhbmRsaW5nIHRoZSB0dW5uZWwgbW9kZSBlbmNhcHN1bGF0aW9uIGZvciB0aGUgcGFja2V0IHdpdGggdGhlIGBpcGlwX3R1bm5lbF9yY3ZfY29yZWAgZnVuY3Rpb24uIFxuXG5MaW5lcyAyMzAtMjQwLiBJIHNlZSB0aGF0IHRoZXJlIG11c3QgYmUgc29tZXRoaW5nIGJlaW5nIGhhbmRsZWQgd2hlbiB0aGUgSVAgaGVhZGVyIGhhcyBiZWVuIHN0cmlwcGVkIGZyb20gdGhlIHBhY2tldCwgYW5kIHdlIGNhbiBjaGVjayB3aGV0aGVyIHRoZSB0aGUgcGFja2V0IHNob3VsZCBiZSBkZWxpdmVyZWQgbG9jYWxseSBvciBpcyB0byBiZSByZXJvdXRlZC4gV2UgYXJlIGRldGVybWluaW5nIGhvdyB0byBoYW5kIG9mZiB0aGUgcGFja2V0LCBhbmQgSSdtIHJlYWxseSBjdXJpb3VzIGlmIHRoaXMgaW52b2x2ZXMgYW55IHNwZWNpZmljIHR1bm5lbC1yZWxhdGVkIGNoZWNrcyB0aGF0IGFyZSBkaWZmZXJlbnQgdGhhbiBub3JtYWwgcm91dGluZyBsb2dpYy5cblxuTGluZXMgMjQwLTI1MDogVGhpcyBzZWVtcyB0byBiZSB0aGUgcGxhY2Ugd2hlcmUgd2UgZGVhbCB3aXRoIHR1bm5lbC1zcGVjaWZpYyBNVFUgaXNzdWVzIG9yIGZyYWdtZW50YXRpb24gaGFuZGxpbmcuIEknZCBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmRpdGlvbnMgZm9yIHRoZSBwYWNrZXQgdG8gYmUgcmVyb3V0ZWQuIEknbSBzZWVpbmcgY2hlY2tzIHJlbGF0ZWQgdG8gTVRVLlxuXG5MaW5lcyAyNTAtMjYwOiBJIHRoaW5rIHRoaXMgc2VjdGlvbiBpcyBkZWFsaW5nIHdpdGggdGhlIHBhY2tldCBiZWluZyBlbnF1ZXVlZCB0byBiZSBkZWFsdCB3aXRoLCBhbmQgdGhlIHR1bm5lbCBpcyByZWNlaXZpbmcgdGhlIHBhY2tldCB0byBiZSBkZWFsdCB3aXRoIGZvciB0aGUgbmV4dCBzdGFnZSBvZiBwcm9jZXNzaW5nLlxuXG5GaW5hbGx5LCBsaW5lcyAyNjAtMjY1IHNlZW0gdG8gY29uY2x1ZGUgd2l0aCBzb21lIGtpbmQgb2YgY291bnRlciBvciBzdGF0aXN0aWNzIHVwZGF0ZXMuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhvc2UgY291bnRlcnMsIGFzIEkgYWx3YXlzIGNhcmUgYWJvdXQgdGhlIHBlcmZvcm1hbmNlIG92ZXJoZWFkIG9mIHR1bm5lbCBwcm9jZXNzaW5nLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgcXVpY2sgdW5kZXJzdGFuZGluZyBvZiB0aGUgd29yayBiZWluZyBkb25lLlxuXG5BbHJpZ2h0LCB0aGF0J3MgYSBnb29kIGZpcnN0IHBhc3MuIEknbGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBjb2RlIG1vcmUgbGluZS1ieS1saW5lIG5vdyB0byBncmFzcCB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY5MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDExOjIxOjMxLjcyNTc1MzI0N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcGlwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjE1OlxcdHN0YXRpYyBpbnQgaXBpcF90dW5uZWxfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHU4IGlwcHJvdG8pXFxuIDIxNjpcXHR7XFxuIDIxNzpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KTtcXG4gMjE4OlxcdFxcdHN0cnVjdCBpcF90dW5uZWxfbmV0ICppdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGlwaXBfbmV0X2lkKTtcXG4gMjE5OlxcdFxcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKSA9IHsgfTtcXG4gMjIwOlxcdFxcdHN0cnVjdCBtZXRhZGF0YV9kc3QgKnR1bl9kc3QgPSBOVUxMO1xcbiAyMjE6XFx0XFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsO1xcbiAyMjI6XFx0XFx0Y29uc3Qgc3RydWN0IGlwaGRyICppcGg7XFxuIDIyMzpcXHRcXG4gMjI0OlxcdFxcdF9fc2V0X2JpdChJUF9UVU5ORUxfTk9fS0VZX0JJVCwgZmxhZ3MpO1xcbiAyMjU6XFx0XFxuIDIyNjpcXHRcXHRpcGggPSBpcF9oZHIoc2tiKTtcXG4gMjI3OlxcdFxcdHR1bm5lbCA9IGlwX3R1bm5lbF9sb29rdXAoaXRuLCBza2ItXFx1MDAzZWRldi1cXHUwMDNlaWZpbmRleCwgZmxhZ3MsIGlwaC1cXHUwMDNlc2FkZHIsXFxuIDIyODpcXHRcXHRcXHRcXHRcXHQgIGlwaC1cXHUwMDNlZGFkZHIsIDApO1xcbiAyMjk6XFx0XFx0aWYgKHR1bm5lbCkge1xcbiAyMzA6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHRubF9wdGtfaW5mbyAqdHBpO1xcbiAyMzE6XFx0XFxuIDIzMjpcXHRcXHRcXHRpZiAodHVubmVsLVxcdTAwM2VwYXJtcy5pcGgucHJvdG9jb2wgIT0gaXBwcm90byBcXHUwMDI2XFx1MDAyNlxcbiAyMzM6XFx0XFx0XFx0ICAgIHR1bm5lbC1cXHUwMDNlcGFybXMuaXBoLnByb3RvY29sICE9IDApXFxuIDIzNDpcXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDIzNTpcXHRcXG4gMjM2OlxcdFxcdFxcdGlmICgheGZybTRfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKVxcbiAyMzc6XFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbiAyMzg6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX01QTFMpXFxuIDIzOTpcXHRcXHRcXHRpZiAoaXBwcm90byA9PSBJUFBST1RPX01QTFMpXFxuIDI0MDpcXHRcXHRcXHRcXHR0cGkgPSBcXHUwMDI2bXBsc2lwX3RwaTtcXG4gMjQxOlxcdFxcdFxcdGVsc2VcXG4gMjQyOlxcdCNlbmRpZlxcbiAyNDM6XFx0XFx0XFx0XFx0dHBpID0gXFx1MDAyNmlwaXBfdHBpO1xcbiAyNDQ6XFx0XFx0XFx0aWYgKGlwdHVubmVsX3B1bGxfaGVhZGVyKHNrYiwgMCwgdHBpLVxcdTAwM2Vwcm90bywgZmFsc2UpKVxcbiAyNDU6XFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbiAyNDY6XFx0XFx0XFx0aWYgKHR1bm5lbC1cXHUwMDNlY29sbGVjdF9tZCkge1xcbiAyNDc6XFx0XFx0XFx0XFx0aXBfdHVubmVsX2ZsYWdzX3plcm8oZmxhZ3MpO1xcbiAyNDg6XFx0XFxuIDI0OTpcXHRcXHRcXHRcXHR0dW5fZHN0ID0gaXBfdHVuX3J4X2RzdChza2IsIGZsYWdzLCAwLCAwKTtcXG4gMjUwOlxcdFxcdFxcdFxcdGlmICghdHVuX2RzdClcXG4gMjUxOlxcdFxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gMjUyOlxcdFxcdFxcdFxcdGlwX3R1bm5lbF9tZF91ZHBfZW5jYXAoc2tiLCBcXHUwMDI2dHVuX2RzdC1cXHUwMDNldS50dW5faW5mbyk7XFxuIDI1MzpcXHRcXHRcXHR9XFxuIDI1NDpcXHRcXHRcXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcbiAyNTU6XFx0XFxuIDI1NjpcXHRcXHRcXHRyZXR1cm4gaXBfdHVubmVsX3Jjdih0dW5uZWwsIHNrYiwgdHBpLCB0dW5fZHN0LCBsb2dfZWNuX2Vycm9yKTtcXG4gMjU3OlxcdFxcdH1cXG4gMjU4OlxcdFxcbiAyNTk6XFx0XFx0cmV0dXJuIC0xO1xcbiAyNjA6XFx0XFxuIDI2MTpcXHRkcm9wOlxcbiAyNjI6XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDI2MzpcXHRcXHRyZXR1cm4gMDtcXG4gMjY0OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTE6MjE6MzEuNzI1ODI5NzQ3WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2NTY2MTUxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoaXMgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEl0J3MgZXNzZW50aWFsbHkgY2hhbmdpbmcgYSBgcmV0dXJuIDA7YCB0byBgZ290byBkcm9wO2Agd2hlbiBgIXR1bl9kc3RgLiBUaGUgYGdvdG8gZHJvcDtgIGJpdCBpcyBjcnVjaWFsIGJlY2F1c2UgdGhhdCdzIHdoZXJlIHRoZSBga2ZyZWVfc2tiKHNrYik7IHJldHVybiAwO2AgaGFwcGVucy4gUmlnaHQsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIG1lbW9yeSBsZWFrIGZpeC4gSXQgbG9va3MgbGlrZSB0aGUgYHNrYmAgKHNvY2tldCBidWZmZXIpIHdhc24ndCBiZWluZyBmcmVlZCBwcm9wZXJseSBiZWZvcmUuIEdvb2QgY2F0Y2ghXG5cbk5vdywgbXkgbWluZCBuYXR1cmFsbHkgZ29lcyB0byB0aGUgZGlhZ25vc3RpYyB0b29scy4gSSBrbm93IHRoYXQga21lbWxlYWsgaXMgdGhlIHVzdWFsIHN1c3BlY3QgZm9yIHNuaWZmaW5nIG91dCBtZW1vcnkgbGVha3MsIGFuZCB0aGF0J3MgcHJlY2lzZWx5IHdoYXQgdGhpcyBwYXRjaCBhZGRyZXNzZXMuIEknbSBwcmV0dHkgc3VyZSBLQVNBTiwgb3IgS2VybmVsIEFkZHJlc3MgU0FOaXRpemVyLCB3b3VsZCBiZSBsb29raW5nIGZvciBhIGRpZmZlcmVudCBjbGFzcyBvZiBlcnJvcnPigJR1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHRoaW5ncyBsaWtlIHRoYXQuIEtNU0FOLCBLZXJuZWwgTWVtb3J5IFNBTml0aXplciwgaXMgdGhlIG9uZSB0aGF0IGZsYWdzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoaXMgY2hhbmdlLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciwgZm9yIHRoYXQgbWF0dGVyLCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJdCdzIHNvbGVseSBhYm91dCBwbHVnZ2luZyBhIG1lbW9yeSBsZWFrLiBTbywgd2hlbiBpdCBjb21lcyB0byB0aGUgYE5lZWRzS01TQU5gIHRhZywgSSdtIHRoaW5raW5nLCBcIk5vcGUsIG5vdCBuZWVkZWQgaGVyZS5cIiBUaGlzIGlzIGEgc3RyYWlnaHQtdXAgbWVtb3J5IGxlYWsgcmVwYWlyLCBubyBLTVNBTiBpbnZvbHZlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDExNCwiT3V0cHV0VG9rZW5zIjoxMzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMTozOS4zODI0NDY5NloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayB3aGVyZSBhbiBza19idWZmIChza2IpIHdhcyBub3QgZnJlZWQgd2hlbiBpcF90dW5fcnhfZHN0KCkgcmV0dXJuZWQgTlVMTC4gQnkgY2hhbmdpbmcgJ3JldHVybiAwOycgdG8gJ2dvdG8gZHJvcDsnLCB0aGUgc2tiIGlzIG5vdyBwcm9wZXJseSBmcmVlZCB2aWEga2ZyZWVfc2tiKHNrYikuIFRoaXMgaXMgYSBtZW1vcnkgbGVhayBpc3N1ZSwgd2hpY2ggaXMgdHlwaWNhbGx5IGRldGVjdGVkIGJ5IGttZW1sZWFrLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCB3aGljaCBhcmUgdGhlIHRhcmdldHMgb2YgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGFuZCBrbWVtbGVhayBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyB0eXBlIG9mIGlzc3VlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgd2hlcmUgYW4gc2tfYnVmZiAoc2tiKSB3YXMgbm90IGZyZWVkIHdoZW4gaXBfdHVuX3J4X2RzdCgpIHJldHVybmVkIE5VTEwuIEJ5IGNoYW5naW5nICdyZXR1cm4gMDsnIHRvICdnb3RvIGRyb3A7JywgdGhlIHNrYiBpcyBub3cgcHJvcGVybHkgZnJlZWQgdmlhIGtmcmVlX3NrYihza2IpLiBUaGlzIGlzIGEgbWVtb3J5IGxlYWsgaXNzdWUsIHdoaWNoIGlzIHR5cGljYWxseSBkZXRlY3RlZCBieSBrbWVtbGVhay4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgd2hpY2ggYXJlIHRoZSB0YXJnZXRzIG9mIEtNU0FOLiBTdGFuZGFyZCBLQVNBTiBhbmQga21lbWxlYWsgYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgdHlwZSBvZiBpc3N1ZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4bz5s[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-19 10:59:18 +0000 UTC FinishedAt: 2026-08-19 11:21:40 +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": "c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_IPIP", "MPLS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_IPIP", "MPLS" ], "series_id": "30004ace-aed2-4090-9fe7-847972a83291" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ipip_rcv", "mplsip_rcv" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDExOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9JUElQJiMzNDssCiAgICAmIzM0O01QTFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcGlwX3JjdiYjMzQ7LAogICAgJiMzNDttcGxzaXBfcmN2JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayB3aGVyZSBhbiBza19idWZmIChza2IpIHdhcyBub3QgZnJlZWQgd2hlbiBpcF90dW5fcnhfZHN0KCkgcmV0dXJuZWQgTlVMTC4gQnkgY2hhbmdpbmcgJiMzOTtyZXR1cm4gMDsmIzM5OyB0byAmIzM5O2dvdG8gZHJvcDsmIzM5OywgdGhlIHNrYiBpcyBub3cgcHJvcGVybHkgZnJlZWQgdmlhIGtmcmVlX3NrYihza2IpLiBUaGlzIGlzIGEgbWVtb3J5IGxlYWsgaXNzdWUsIHdoaWNoIGlzIHR5cGljYWxseSBkZXRlY3RlZCBieSBrbWVtbGVhay4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgd2hpY2ggYXJlIHRoZSB0YXJnZXRzIG9mIEtNU0FOLiBTdGFuZGFyZCBLQVNBTiBhbmQga21lbWxlYWsgYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgdHlwZSBvZiBpc3N1ZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgSVBJUCB0dW5uZWwgcmVjZWl2ZSBwYXRoIChgaXBpcF90dW5uZWxfcmN2YCkgYnkgcHJvcGVybHkgZnJlZWluZyB0aGUgc2tiIHdoZW4gYGlwX3R1bl9yeF9kc3RgIHJldHVybnMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgaGFuZGxlciwgd2hpY2ggaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMToyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQxZWFiZTBhN2NhYzgyMmU2ZTdhMWY0N2M2OTY5ZTg1ZjU5NzJlZjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAxMToyMDozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGlwLmMgYi9uZXQvaXB2NC9pcGlwLmNcbmluZGV4IGI2NDMxOTRmNTdkMjkuLmRkZjYyYjQ1NTY2YjYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcGlwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwaXAuY1xuQEAgLTI0OCw3ICYjNDM7MjQ4LDcgQEAgc3RhdGljIGludCBpcGlwX3R1bm5lbF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaXBwcm90bylcbiBcbiBcdFx0XHR0dW5fZHN0ID0gaXBfdHVuX3J4X2RzdChza2IsIGZsYWdzLCAwLCAwKTtcbiBcdFx0XHRpZiAoIXR1bl9kc3QpXG4tXHRcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdFx0XHRnb3RvIGRyb3A7XG4gXHRcdFx0aXBfdHVubmVsX21kX3VkcF9lbmNhcChza2IsIFx1MDAyNnR1bl9kc3QtXHUwMDNldS50dW5faW5mbyk7XG4gXHRcdH1cbiBcdFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMToyMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0lQSVAmIzM0OywKICAgICYjMzQ7TVBMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwaXBfcmN2JiMzNDssCiAgICAmIzM0O21wbHNpcF9yY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgSVBJUCB0dW5uZWwgcmVjZWl2ZSBwYXRoIChgaXBpcF90dW5uZWxfcmN2YCkgYnkgcHJvcGVybHkgZnJlZWluZyB0aGUgc2tiIHdoZW4gYGlwX3R1bl9yeF9kc3RgIHJldHVybnMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgaGFuZGxlciwgd2hpY2ggaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQxZWFiZTBhN2NhYzgyMmU2ZTdhMWY0N2M2OTY5ZTg1ZjU5NzJlZjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAxMToyMDozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuYwppbmRleCBiNjQzMTk0ZjU3ZDI5Li5kZGY2MmI0NTU2NmI2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGlwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBpcC5jCkBAIC0yNDgsNyAmIzQzOzI0OCw3IEBAIHN0YXRpYyBpbnQgaXBpcF90dW5uZWxfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHU4IGlwcHJvdG8pCiAKIAkJCXR1bl9kc3QgPSBpcF90dW5fcnhfZHN0KHNrYiwgZmxhZ3MsIDAsIDApOwogCQkJaWYgKCF0dW5fZHN0KQotCQkJCXJldHVybiAwOwomIzQzOwkJCQlnb3RvIGRyb3A7CiAJCQlpcF90dW5uZWxfbWRfdWRwX2VuY2FwKHNrYiwgJmFtcDt0dW5fZHN0LSZndDt1LnR1bl9pbmZvKTsKIAkJfQogCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIElQSVAgVHVubmVsaW5nIElzc3VlKioKCk9rYXksIHNvIHRoZXJlJiMzOTtzIGEgcGF0Y2ggZmxvYXRpbmcgYXJvdW5kIGZvciB0aGUgYG5ldC9pcHY0L2lwaXAuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBjaGFuZ2luZyB0aGUgcmV0dXJuIGxvZ2ljIHdpdGhpbiB0aGUgYGlwaXBfdHVubmVsX3JjdmAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIGZyb20gYSBzaW1wbGUgYHJldHVybiAwO2AgdG8gYSBgZ290byBkcm9wO2Agd2hlbiB0aGUgY29uZGl0aW9uIGAhdHVuX2RzdGAgaXMgbWV0LiBBbHJpZ2h0LCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBUaGUgZnVuY3Rpb24mIzM5O3MgZ29pbmcgdG8gdGhlICYjMzQ7ZHJvcCYjMzQ7IGxhYmVsLCBub3QgcmV0dXJuaW5nIGEgJiMzNDtzdWNjZXNzJiMzNDsgKGV2ZW4gaWYgdGhlIHBhY2tldCB3b3VsZCBiZSBkaXNjYXJkZWQuKQoKUmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBgaXBpcF90dW5uZWxfcmN2YCBmdW5jdGlvbiBpbiBgbmV0L2lwdjQvaXBpcC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgdHVuX2RzdGAgcmVwcmVzZW50cyBpbiB0aGlzIGNvbnRleHQuIEl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIHRoZSB0dW5uZWwgZGVzdGluYXRpb24sIHRoZSBjb25maWd1cmVkIHJlbW90ZSBlbmRwb2ludCBmb3IgdGhlIElQSVAgdHVubmVsLiBUaGUgZXhpc3RpbmcgY29kZSwgaWYgYCF0dW5fZHN0YCBldmFsdWF0ZXMgdG8gdHJ1ZSwgd2FzIGp1c3QgcmV0dXJuaW5nIGEgemVybyB2YWx1ZSwgd2hpY2ggaXMgZWZmZWN0aXZlbHkgc2lnbmFsaW5nIGEgJiMzNDtwYWNrZXQgcHJvY2Vzc2VkLCBidXQgZGlzY2FyZGVkJiMzNDsgKG9yLCBhdCBsZWFzdCwgbm90IGV4cGxpY2l0bHkgaGFuZGxlZCkuIE5vdywgdGhpcyBwYXRjaCB3YW50cyB0byAqZXhwbGljaXRseSogZHJvcCB0aGUgcGFja2V0IHVzaW5nIGEgZ290byBzdGF0ZW1lbnQuIFRoYXQgaGFzIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIEl0IGNvdWxkIGNoYW5nZSB0aGUgZXJyb3IgcmVwb3J0aW5nIG9yIHBhY2tldCBwcm9jZXNzaW5nIHBhdGggaW4gY2VydGFpbiBzY2VuYXJpb3MuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIHdpbGwgaW1wYWN0IHRoZSBlcnJvciBoYW5kbGluZywgY291bnRlcnMsIG9yIHN0YXRpc3RpY3MuIEEgcmV0dXJuIDAgbWlnaHQgYmUgaW50ZXJwcmV0ZWQgZGlmZmVyZW50bHkgYnkgdGhlIGNhbGxpbmcgZnVuY3Rpb24uIEl0JiMzOTtzIGFsc28gaW1wb3J0YW50IHRvIGNvbnNpZGVyOiB3aHkgaXMgYCF0dW5fZHN0YCBldmVuIGhhcHBlbmluZz8gSXMgdGhpcyBhbiBleHBlY3RlZCBzY2VuYXJpbyAoZS5nLiwgYSB0dW5uZWwgbm90IGZ1bGx5IGNvbmZpZ3VyZWQsIGEgbWFsZm9ybWVkIHBhY2tldCwgb3IgYSByYWNlIGNvbmRpdGlvbikgb3IgaXMgaXQgaW5kaWNhdGl2ZSBvZiBhIGJpZ2dlciBwcm9ibGVtPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhpcyBjaGFuZ2UgYWZmZWN0cyB0aGUgb3ZlcmFsbCBiZWhhdmlvciBvZiB0aGUgSVBJUCB0dW5uZWxpbmcgc3RhY2suIFRoaXMgaXMgYSBzdWJ0bGUgY2hhbmdlLCBidXQgY291bGQgaW1wYWN0IHRoaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcGlwX3R1bm5lbF9yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcGlwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBpcC5jPTIwOT1zdGF0aWMgY29uc3Qgc3RydWN0IHRubF9wdGtfaW5mbyBtcGxzaXBfdHBpID0ge1xuLS1cbm5ldC9pcHY0L2lwaXAuYy0yMTQtXG5uZXQvaXB2NC9pcGlwLmM6MjE1OnN0YXRpYyBpbnQgaXBpcF90dW5uZWxfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHU4IGlwcHJvdG8pXG5uZXQvaXB2NC9pcGlwLmMtMjE2LXtcbi0tXG5uZXQvaXB2NC9pcGlwLmM9MjY2PXN0YXRpYyBpbnQgaXBpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2lwaXAuYy0yNjcte1xubmV0L2lwdjQvaXBpcC5jOjI2ODpcdHJldHVybiBpcGlwX3R1bm5lbF9yY3Yoc2tiLCBJUFBST1RPX0lQSVApO1xubmV0L2lwdjQvaXBpcC5jLTI2OS19XG4tLVxubmV0L2lwdjQvaXBpcC5jPTI3Mj1zdGF0aWMgaW50IG1wbHNpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2lwaXAuYy0yNzMte1xubmV0L2lwdjQvaXBpcC5jOjI3NDpcdHJldHVybiBpcGlwX3R1bm5lbF9yY3Yoc2tiLCBJUFBST1RPX01QTFMpO1xubmV0L2lwdjQvaXBpcC5jLTI3NS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTE6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGlwaXBfdHVubmVsX3JjdmAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCB0aGUgYGlwaXBfdHVubmVsX3JjdmAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiBgbmV0L2lwdjQvaXBpcC5jYCBhbmQgYWltaW5nIGZvciBhcm91bmQgbGluZSAyNDguIEkgZXhwZWN0IHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBjZW50cmFsIHRvIGhvdyBJUElQIHR1bm5lbHMgcmVjZWl2ZSBkYXRhLCBhbmQgYnkgZXhhbWluaW5nIHRoaXMgc3BlY2lmaWMgc2VjdGlvbiwgSSYjMzk7bSBob3BpbmcgdG8gZ2FpbiBpbnNpZ2h0cyBpbnRvIGl0cyBpbm5lciB3b3JraW5ncyBhbmQgaG93IGl0IGhhbmRsZXMgaW5jb21pbmcgcGFja2V0cy4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IGl0IGRpZmZlcmVudGlhdGVzIGJldHdlZW4gZGlmZmVyZW50IHR1bm5lbCB0eXBlcyBhbmQgaG93IGl0IGV4dHJhY3RzIHRoZSBpbm5lciBwYXlsb2FkLiBJdCBpcyBpbXBvcnRhbnQgdG8gY29tcGFyZSB0aGlzIHdpdGggYSBiYXNlbGluZSBvZiBzdGFuZGFyZCBwYWNrZXQgcmVjZXB0aW9uIHByb2NlZHVyZXMuIEkmIzM5O20gYWxzbyBob3BpbmcgdG8gc3BvdCBhbnkgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IsIHBlcmhhcHMsIGlkZW50aWZ5IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDExOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBpcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTU6XHRzdGF0aWMgaW50IGlwaXBfdHVubmVsX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBpcHByb3RvKVxuIDIxNjpcdHtcbiAyMTc6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG4gMjE4Olx0XHRzdHJ1Y3QgaXBfdHVubmVsX25ldCAqaXRuID0gbmV0X2dlbmVyaWMobmV0LCBpcGlwX25ldF9pZCk7XG4gMjE5Olx0XHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncykgPSB7IH07XG4gMjIwOlx0XHRzdHJ1Y3QgbWV0YWRhdGFfZHN0ICp0dW5fZHN0ID0gTlVMTDtcbiAyMjE6XHRcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbDtcbiAyMjI6XHRcdGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoO1xuIDIyMzpcdFxuIDIyNDpcdFx0X19zZXRfYml0KElQX1RVTk5FTF9OT19LRVlfQklULCBmbGFncyk7XG4gMjI1Olx0XG4gMjI2Olx0XHRpcGggPSBpcF9oZHIoc2tiKTtcbiAyMjc6XHRcdHR1bm5lbCA9IGlwX3R1bm5lbF9sb29rdXAoaXRuLCBza2ItXHUwMDNlZGV2LVx1MDAzZWlmaW5kZXgsIGZsYWdzLCBpcGgtXHUwMDNlc2FkZHIsXG4gMjI4Olx0XHRcdFx0XHQgIGlwaC1cdTAwM2VkYWRkciwgMCk7XG4gMjI5Olx0XHRpZiAodHVubmVsKSB7XG4gMjMwOlx0XHRcdGNvbnN0IHN0cnVjdCB0bmxfcHRrX2luZm8gKnRwaTtcbiAyMzE6XHRcbiAyMzI6XHRcdFx0aWYgKHR1bm5lbC1cdTAwM2VwYXJtcy5pcGgucHJvdG9jb2wgIT0gaXBwcm90byBcdTAwMjZcdTAwMjZcbiAyMzM6XHRcdFx0ICAgIHR1bm5lbC1cdTAwM2VwYXJtcy5pcGgucHJvdG9jb2wgIT0gMClcbiAyMzQ6XHRcdFx0XHRnb3RvIGRyb3A7XG4gMjM1Olx0XG4gMjM2Olx0XHRcdGlmICgheGZybTRfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKVxuIDIzNzpcdFx0XHRcdGdvdG8gZHJvcDtcbiAyMzg6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTVBMUylcbiAyMzk6XHRcdFx0aWYgKGlwcHJvdG8gPT0gSVBQUk9UT19NUExTKVxuIDI0MDpcdFx0XHRcdHRwaSA9IFx1MDAyNm1wbHNpcF90cGk7XG4gMjQxOlx0XHRcdGVsc2VcbiAyNDI6XHQjZW5kaWZcbiAyNDM6XHRcdFx0XHR0cGkgPSBcdTAwMjZpcGlwX3RwaTtcbiAyNDQ6XHRcdFx0aWYgKGlwdHVubmVsX3B1bGxfaGVhZGVyKHNrYiwgMCwgdHBpLVx1MDAzZXByb3RvLCBmYWxzZSkpXG4gMjQ1Olx0XHRcdFx0Z290byBkcm9wO1xuIDI0NjpcdFx0XHRpZiAodHVubmVsLVx1MDAzZWNvbGxlY3RfbWQpIHtcbiAyNDc6XHRcdFx0XHRpcF90dW5uZWxfZmxhZ3NfemVybyhmbGFncyk7XG4gMjQ4Olx0XG4gMjQ5Olx0XHRcdFx0dHVuX2RzdCA9IGlwX3R1bl9yeF9kc3Qoc2tiLCBmbGFncywgMCwgMCk7XG4gMjUwOlx0XHRcdFx0aWYgKCF0dW5fZHN0KVxuIDI1MTpcdFx0XHRcdFx0Z290byBkcm9wO1xuIDI1MjpcdFx0XHRcdGlwX3R1bm5lbF9tZF91ZHBfZW5jYXAoc2tiLCBcdTAwMjZ0dW5fZHN0LVx1MDAzZXUudHVuX2luZm8pO1xuIDI1MzpcdFx0XHR9XG4gMjU0Olx0XHRcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4gMjU1Olx0XG4gMjU2Olx0XHRcdHJldHVybiBpcF90dW5uZWxfcmN2KHR1bm5lbCwgc2tiLCB0cGksIHR1bl9kc3QsIGxvZ19lY25fZXJyb3IpO1xuIDI1NzpcdFx0fVxuIDI1ODpcdFxuIDI1OTpcdFx0cmV0dXJuIC0xO1xuIDI2MDpcdFxuIDI2MTpcdGRyb3A6XG4gMjYyOlx0XHRrZnJlZV9za2Ioc2tiKTtcbiAyNjM6XHRcdHJldHVybiAwO1xuIDI2NDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTA1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1lbW9yeSBMZWFrIEZpeCBpbiBJUElQIFR1bm5lbGluZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBjcnVjaWFsLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBhZGRyZXNzaW5nIGEgbWVtb3J5IGxlYWsgaW4gYGlwaXBfdHVubmVsX3JjdmAuIFRoZXkmIzM5O3JlIHJlcGxhY2luZyBhIHNpbXBsZSBgcmV0dXJuIDA7YCB3aXRoIGBnb3RvIGRyb3A7YCB3aGljaCB0cmlnZ2VycyBhIGBrZnJlZV9za2Ioc2tiKTtgLiBUaGlzIG1lYW5zIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgd2FzbiYjMzk7dCBiZWluZyBwcm9wZXJseSBmcmVlZCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIG1lbW9yeSBtYW5hZ2VtZW50IG92ZXJzaWdodC4KCk5vdywgbGV0JiMzOTtzIHNlZSwgYGlwaXBfdHVubmVsX3JjdmAgaXMgaW52b2tlZCBieSBib3RoIGBpcGlwX3JjdmAgYW5kIGBtcGxzaXBfcmN2YC4gU28sIHdlJiMzOTtyZSBmaXhpbmcgYSBwb3RlbnRpYWwgbGVhayBpbiBtdWx0aXBsZSBjb250ZXh0cyBoZXJlLCB3aGljaCBpcyBnb29kIHRvIHNlZS4gTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBmaXguIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIHBhdGggaXMgYWN0dWFsbHkgZW5hYmxlZCBpbiB0aGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24uIFJpZ2h0LCB0aGUgY29kZSBpbiBgbmV0L2lwdjQvaXBpcC5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfTkVUX0lQSVBgIGlzIGVuYWJsZWQuIFRoYXQgc2hvdWxkIGJlIGEgcXVpY2sgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTE6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBpcC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX0lQX01ST1VURV9DT01NT04pICYjNDM7PSBpcG1yX2Jhc2Uub1xubmV0L2lwdjQvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX05FVF9JUElQKSAmIzQzOz0gaXBpcC5vXG5uZXQvaXB2NC9NYWtlZmlsZS0yNi1ncmUteSA6PSBncmVfZGVtdXgub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDExOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNjcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gdGhlIHRhc2sgYXQgaGFuZCwgcHJlc2VudGVkIGFzIHRob3VnaCBpdCYjMzk7cyBteSBvd24gaW50ZXJuYWwgZGlhbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIElQSVAgVHVubmVsaW5nKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gZXhhbWluZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVAtaW4tSVAgdHVubmVsaW5nLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBpcyB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBJUHY0IHNlY3Rpb24uIE15IGltbWVkaWF0ZSBodW5jaCBpcyB0aGF0IHRoZSBgQ09ORklHX05FVF9JUElQYCBvcHRpb24gd2lsbCBiZSBkZWZpbmVkIGluIGBuZXQvaXB2NC9LY29uZmlnYC4gV2UmIzM5O2xsIG5lZWQgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIGNvbmZpcm0gd2hldGhlciBpdCBleGlzdHMsIGFuZCB0aGVuIGNoZWNrIGl0cyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBoZWxwIHRleHQuIFdlIHdpbGwgd2FudCB0byB1bmRlcnN0YW5kIGFsbCB0aGUgY29uZGl0aW9ucyB0aGF0IGVuYWJsZSBvciBkaXNhYmxlIElQSVAgc3VwcG9ydCBpbiB0aGlzIHBhcnRpY3VsYXIga2VybmVsIGJ1aWxkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0lQSVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9MTQ5PWNvbmZpZyBJUF9QTlBfUkFSUFxuLS1cbm5ldC9pcHY0L0tjb25maWctMTYxLVxubmV0L2lwdjQvS2NvbmZpZzoxNjI6Y29uZmlnIE5FVF9JUElQXG5uZXQvaXB2NC9LY29uZmlnLTE2My1cdHRyaXN0YXRlIFwmIzM0O0lQOiB0dW5uZWxpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTE6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY3NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVwZW5kZW5jeSBEZWVwIERpdmUgZm9yIE5FVF9JUElQKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgTkVUX0lQSVBgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIG5vdCBqdXN0IGFzc3VtZSBpdCYjMzk7cyBzdGFuZGFsb25lLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBhbmQgdmVyaWZ5IHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcywgZWl0aGVyIGhhcmQgb3Igc29mdCwgdGhhdCBJJiMzOTttIG92ZXJsb29raW5nLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IHRoZSBvYnZpb3VzIEtjb25maWcgZGVwZW5kZW5jaWVzLCBvZiBjb3Vyc2U7IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYnJvYWRlciBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBBcmUgdGhlcmUgc3BlY2lmaWMgZmVhdHVyZXMgb3IgbW9kdWxlcyB0aGF0IGBORVRfSVBJUGAgaW50ZXJhY3RzIHdpdGggaW5kaXJlY3RseT8gQ291bGQgZW5hYmxpbmcgdGhpcyBhZmZlY3QgdGhlIGJlaGF2aW9yIG9yIHBlcmZvcm1hbmNlIG9mIG90aGVyLCBzZWVtaW5nbHkgdW5yZWxhdGVkLCBwYXJ0cyBvZiB0aGUgc3lzdGVtPyBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkmIzM5O20gdGhpbmtpbmcsIGFyZSB0aGVyZSBhbnkgaW50ZXJhY3Rpb25zIHdpdGggcm91dGluZyBwcm90b2NvbHMsIGZpcmV3YWxsIGltcGxlbWVudGF0aW9ucywgb3IgZXZlbiBsb3ctbGV2ZWwgaGFyZHdhcmUgZHJpdmVycyB0aGF0IEkgbWlnaHQgbm90IGJlIGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nPyBUaW1lIHRvIHB1bGwgdXAgdGhlIGNyb3NzLXJlZmVyZW5jZXMsIGNoZWNrIHRoZSBkb2N1bWVudGF0aW9uLCBhbmQgbWF5YmUgZXZlbiBwZWVrIGF0IHNvbWUgcmVsZXZhbnQga2VybmVsIHNvdXJjZSBjb2RlIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIEdvdHRhIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzIHdoZW4gdGhpcyB0aGluZyBpcyBlbmFibGVkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2MjpcdGNvbmZpZyBORVRfSVBJUFxuIDE2MzpcdFx0dHJpc3RhdGUgXCYjMzQ7SVA6IHR1bm5lbGluZ1wmIzM0O1xuIDE2NDpcdFx0c2VsZWN0IElORVRfVFVOTkVMXG4gMTY1Olx0XHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxuIDE2NjpcdFx0aGVscFxuIDE2NzpcdFx0ICBUdW5uZWxpbmcgbWVhbnMgZW5jYXBzdWxhdGluZyBkYXRhIG9mIG9uZSBwcm90b2NvbCB0eXBlIHdpdGhpblxuIDE2ODpcdFx0ICBhbm90aGVyIHByb3RvY29sIGFuZCBzZW5kaW5nIGl0IG92ZXIgYSBjaGFubmVsIHRoYXQgdW5kZXJzdGFuZHMgdGhlXG4gMTY5Olx0XHQgIGVuY2Fwc3VsYXRpbmcgcHJvdG9jb2wuIFRoaXMgcGFydGljdWxhciB0dW5uZWxpbmcgZHJpdmVyIGltcGxlbWVudHNcbiAxNzA6XHRcdCAgZW5jYXBzdWxhdGlvbiBvZiBJUCB3aXRoaW4gSVAsIHdoaWNoIHNvdW5kcyBraW5kIG9mIHBvaW50bGVzcywgYnV0XG4gMTcxOlx0XHQgIGNhbiBiZSB1c2VmdWwgaWYgeW91IHdhbnQgdG8gbWFrZSB5b3VyIChvciBzb21lIG90aGVyKSBtYWNoaW5lXG4gMTcyOlx0XHQgIGFwcGVhciBvbiBhIGRpZmZlcmVudCBuZXR3b3JrIHRoYW4gaXQgcGh5c2ljYWxseSBpcywgb3IgdG8gdXNlXG4gMTczOlx0XHQgIG1vYmlsZS1JUCBmYWNpbGl0aWVzIChhbGxvd2luZyBsYXB0b3BzIHRvIHNlYW1sZXNzbHkgbW92ZSBiZXR3ZWVuXG4gMTc0Olx0XHQgIG5ldHdvcmtzIHdpdGhvdXQgY2hhbmdpbmcgdGhlaXIgSVAgYWRkcmVzc2VzKS5cbiAxNzU6XHRcbiAxNzY6XHRcdCAgU2F5aW5nIFkgdG8gdGhpcyBvcHRpb24gd2lsbCBwcm9kdWNlIHR3byBtb2R1bGVzICggPSBjb2RlIHdoaWNoIGNhblxuIDE3NzpcdFx0ICBiZSBpbnNlcnRlZCBpbiBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBydW5uaW5nIGtlcm5lbCB3aGVuZXZlciB5b3VcbiAxNzg6XHRcdCAgd2FudCkuIE1vc3QgcGVvcGxlIHdvbiYjMzk7dCBuZWVkIHRoaXMgYW5kIGNhbiBzYXkgTi5cbiAxNzk6XHRcbiAxODA6XHRjb25maWcgTkVUX0lQR1JFX0RFTVVYXG4gMTgxOlx0XHR0cmlzdGF0ZSBcJiMzNDtJUDogR1JFIGRlbXVsdGlwbGV4ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTE6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMwMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBUaGlzIE5ldHdvcmsgUHJvdG9jb2wgRml4KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgbWVtb3J5IGxlYWsgd2l0aGluIGBpcGlwX3R1bm5lbF9yY3ZgLCBzcGVjaWZpY2FsbHkgd2hlbiBgaXBfdHVuX3J4X2RzdGAgcmV0dXJucyBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXgsIGFuZCBpdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIGEgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgaGFuZGxlciDigJMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhpcyBhcyBhIGNyaXRpY2FsIGFyZWEuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBmdXp6aW5nIGBpcGlwX3R1bm5lbF9yY3ZgIGl0c2VsZi4gSeKAmWxsIG1ha2Ugc3VyZSB0aGUgYE5FVF9JUElQYCBjb25maWcgaXMgZW5hYmxlZC4gSG93ZXZlciwgd2FpdCwgYGlwaXBfdHVubmVsX3JjdmAgaXMgc3RhdGljISBUaGF0IGNoYW5nZXMgdGhlIGdhbWUgYSBiaXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY2FsbHMgKml0Kiwgb3IgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBpbnZvbHZlZCB3aGljaCBhbHNvIGFyZSBwYXJ0IG9mIHRoaXMgbmV0d29yayBwYXRoIHRoYXQgbWF5IG5vdCBiZSBzdGF0aWMuIEdpdmVuIHRoYXQgYGlwaXBfdHVubmVsX3JjdmAgaXMgaW50ZXJuYWwsIEkgc2hvdWxkIGludmVzdGlnYXRlIGBpcGlwX3JjdmAgYW5kIGBtcGxzaXBfcmN2YCwgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGFyZSBhbHNvIHN0YXRpYy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY29kZSB0byBzZWUgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGFuZCB3aGV0aGVyIHRoZSBzdGF0aWMgbmF0dXJlIG9mIGBpcGlwX3R1bm5lbF9yY3ZgIGltcGxpZXMgYW55IGxpbWl0YXRpb25zIG9uIHRyaWdnZXJpbmcgdGhlIGJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTE6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBpcF9yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcGlwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBpcC5jPTIxNT1zdGF0aWMgaW50IGlwaXBfdHVubmVsX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBpcHByb3RvKVxuLS1cbm5ldC9pcHY0L2lwaXAuYy0yNjUtXG5uZXQvaXB2NC9pcGlwLmM6MjY2OnN0YXRpYyBpbnQgaXBpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2lwaXAuYy0yNjcte1xuLS1cbm5ldC9pcHY0L2lwaXAuYz02MTY9c3RhdGljIHN0cnVjdCB4ZnJtX3R1bm5lbCBpcGlwX2hhbmRsZXIgX19yZWFkX21vc3RseSA9IHtcbm5ldC9pcHY0L2lwaXAuYzo2MTc6XHQuaGFuZGxlclx0PVx0aXBpcF9yY3YsXG5uZXQvaXB2NC9pcGlwLmMtNjE4LVx0LmVycl9oYW5kbGVyXHQ9XHRpcGlwX2VycixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkzMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBIYW5kbGVyIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBzbyB0aGUgYXJjaGl0ZWN0dXJlIGRlZmluZXMgdGhlc2UgdGhpbmdzIGFzICYjMzQ7c3RhdGljLCYjMzQ7IGJ1dCB0aGV5JiMzOTtyZSAqcmVnaXN0ZXJlZCogYXMgaGFuZGxlcnMuIFRoYXQmIzM5O3MgYSBrZXkgZGlzdGluY3Rpb24gSSBuZWVkIHRvIGdyYXNwIHRob3JvdWdobHkuIE15IGZpcnN0IHF1ZXN0aW9uOiBhcmUgd2UgZGVhbGluZyB3aXRoIGV4Y2x1c2l2ZWx5IHN0YXRpYyBtZXRob2RzIGhlcmUsIG9yIGFyZSB0aGVyZSBub24tc3RhdGljIGZ1bmN0aW9ucyBsdXJraW5nIGFyb3VuZCBzb21ld2hlcmU/IFRoZSBhc3N1bXB0aW9uLCBiYXNlZCBvbiB0aGVpciBkZWNsYXJlZCBzdGF0dXMsIHdvdWxkIGJlIHRoYXQgdGhlc2UgYXJlIG1lYW50IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBjbGFzcyBtZW1iZXJzLiBCdXQgbGV0JiMzOTtzIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24gYW5kIGVuc3VyZSB3ZSBoYXZlIGZ1bGwga25vd2xlZGdlIG9mIHRoZSBjb21wb3NpdGlvbi4gSWYgdGhlcmUgKmFyZSogbm9uLXN0YXRpYyBlbGVtZW50cywgdGhhdCBpbnRyb2R1Y2VzIGEgd2hvbGUgbGF5ZXIgb2YgY29udGV4dCB0aGF0IHdvdWxkIG5lZWQgdG8gYmUgYWRkcmVzc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcGlwXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwaXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcGlwLmM9MTE3PU1PRFVMRV9QQVJNX0RFU0MobG9nX2Vjbl9lcnJvciwgXCYjMzQ7TG9nIHBhY2tldHMgcmVjZWl2ZWQgd2l0aCBjb3JydXB0ZWQgRUNOXCYjMzQ7KTtcbm5ldC9pcHY0L2lwaXAuYy0xMTgtXG5uZXQvaXB2NC9pcGlwLmM6MTE5OnN0YXRpYyB1bnNpZ25lZCBpbnQgaXBpcF9uZXRfaWQgX19yZWFkX21vc3RseTtcbm5ldC9pcHY0L2lwaXAuYy0xMjAtXG5uZXQvaXB2NC9pcGlwLmM6MTIxOnN0YXRpYyBpbnQgaXBpcF90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbm5ldC9pcHY0L2lwaXAuYzoxMjI6c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwaXBfbGlua19vcHMgX19yZWFkX21vc3RseTtcbm5ldC9pcHY0L2lwaXAuYy0xMjMtXG5uZXQvaXB2NC9pcGlwLmM6MTI0OnN0YXRpYyBpbnQgaXBpcF9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluZm8pXG5uZXQvaXB2NC9pcGlwLmMtMTI1LXtcbi0tXG5uZXQvaXB2NC9pcGlwLmMtMTMwLVx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXHUwMDNlZGV2KTtcbm5ldC9pcHY0L2lwaXAuYzoxMzE6XHRzdHJ1Y3QgaXBfdHVubmVsX25ldCAqaXRuID0gbmV0X2dlbmVyaWMobmV0LCBpcGlwX25ldF9pZCk7XG5uZXQvaXB2NC9pcGlwLmMtMTMyLVx0Y29uc3Qgc3RydWN0IGlwaGRyICppcGggPSAoY29uc3Qgc3RydWN0IGlwaGRyICopc2tiLVx1MDAzZWRhdGE7XG4tLVxubmV0L2lwdjQvaXBpcC5jLTIwMi1cbm5ldC9pcHY0L2lwaXAuYzoyMDM6c3RhdGljIGNvbnN0IHN0cnVjdCB0bmxfcHRrX2luZm8gaXBpcF90cGkgPSB7XG5uZXQvaXB2NC9pcGlwLmMtMjA0LVx0Lyogbm8gdHVubmVsIGluZm8gcmVxdWlyZWQgZm9yIGlwaXAuICovXG4tLVxubmV0L2lwdjQvaXBpcC5jPTIwOT1zdGF0aWMgY29uc3Qgc3RydWN0IHRubF9wdGtfaW5mbyBtcGxzaXBfdHBpID0ge1xuLS1cbm5ldC9pcHY0L2lwaXAuYy0yMTQtXG5uZXQvaXB2NC9pcGlwLmM6MjE1OnN0YXRpYyBpbnQgaXBpcF90dW5uZWxfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHU4IGlwcHJvdG8pXG5uZXQvaXB2NC9pcGlwLmMtMjE2LXtcbm5ldC9pcHY0L2lwaXAuYy0yMTctXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjQvaXBpcC5jOjIxODpcdHN0cnVjdCBpcF90dW5uZWxfbmV0ICppdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGlwaXBfbmV0X2lkKTtcbm5ldC9pcHY0L2lwaXAuYy0yMTktXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncykgPSB7IH07XG4tLVxubmV0L2lwdjQvaXBpcC5jLTI0Mi0jZW5kaWZcbm5ldC9pcHY0L2lwaXAuYzoyNDM6XHRcdFx0dHBpID0gXHUwMDI2aXBpcF90cGk7XG5uZXQvaXB2NC9pcGlwLmMtMjQ0LVx0XHRpZiAoaXB0dW5uZWxfcHVsbF9oZWFkZXIoc2tiLCAwLCB0cGktXHUwMDNlcHJvdG8sIGZhbHNlKSlcbi0tXG5uZXQvaXB2NC9pcGlwLmMtMjY1LVxubmV0L2lwdjQvaXBpcC5jOjI2NjpzdGF0aWMgaW50IGlwaXBfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2NC9pcGlwLmMtMjY3LXtcbm5ldC9pcHY0L2lwaXAuYzoyNjg6XHRyZXR1cm4gaXBpcF90dW5uZWxfcmN2KHNrYiwgSVBQUk9UT19JUElQKTtcbm5ldC9pcHY0L2lwaXAuYy0yNjktfVxuLS1cbm5ldC9pcHY0L2lwaXAuYz0yNzI9c3RhdGljIGludCBtcGxzaXBfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2NC9pcGlwLmMtMjczLXtcbm5ldC9pcHY0L2lwaXAuYzoyNzQ6XHRyZXR1cm4gaXBpcF90dW5uZWxfcmN2KHNrYiwgSVBQUk9UT19NUExTKTtcbm5ldC9pcHY0L2lwaXAuYy0yNzUtfVxuLS1cbm5ldC9pcHY0L2lwaXAuYy0yODEtICovXG5uZXQvaXB2NC9pcGlwLmM6MjgyOnN0YXRpYyBuZXRkZXZfdHhfdCBpcGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC9pcGlwLmMtMjgzLVx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvaXBpcC5jLTMyNS1cbm5ldC9pcHY0L2lwaXAuYzozMjY6c3RhdGljIGJvb2wgaXBpcF90dW5uZWxfaW9jdGxfdmVyaWZ5X3Byb3RvY29sKHU4IGlwcHJvdG8pXG5uZXQvaXB2NC9pcGlwLmMtMzI3LXtcbi0tXG5uZXQvaXB2NC9pcGlwLmM9MzQwPXN0YXRpYyBpbnRcbm5ldC9pcHY0L2lwaXAuYzozNDE6aXBpcF90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLCBpbnQgY21kKVxubmV0L2lwdjQvaXBpcC5jLTM0Mi17XG4tLVxubmV0L2lwdjQvaXBpcC5jLTM0NC1cdFx0aWYgKHAtXHUwMDNlaXBoLnZlcnNpb24gIT0gNCB8fFxubmV0L2lwdjQvaXBpcC5jOjM0NTpcdFx0ICAgICFpcGlwX3R1bm5lbF9pb2N0bF92ZXJpZnlfcHJvdG9jb2wocC1cdTAwM2VpcGgucHJvdG9jb2wpIHx8XG5uZXQvaXB2NC9pcGlwLmMtMzQ2LVx0XHQgICAgcC1cdTAwM2VpcGguaWhsICE9IDUgfHwgKHAtXHUwMDNlaXBoLmZyYWdfb2ZmIFx1MDAyNiBodG9ucyh+SVBfREYpKSlcbi0tXG5uZXQvaXB2NC9pcGlwLmMtMzU1LVxubmV0L2lwdjQvaXBpcC5jOjM1NjpzdGF0aWMgaW50IGlwaXBfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbm5ldC9pcHY0L2lwaXAuYy0zNTctXHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXG4tLVxubmV0L2lwdjQvaXBpcC5jLTM3OS1cbm5ldC9pcHY0L2lwaXAuYzozODA6c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcGlwX25ldGRldl9vcHMgPSB7XG5uZXQvaXB2NC9pcGlwLmM6MzgxOlx0Lm5kb19pbml0ICAgICAgID0gaXBpcF90dW5uZWxfaW5pdCxcbm5ldC9pcHY0L2lwaXAuYy0zODItXHQubmRvX3VuaW5pdCAgICAgPSBpcF90dW5uZWxfdW5pbml0LFxubmV0L2lwdjQvaXBpcC5jOjM4MzpcdC5uZG9fc3RhcnRfeG1pdFx0PSBpcGlwX3R1bm5lbF94bWl0LFxubmV0L2lwdjQvaXBpcC5jLTM4NC1cdC5uZG9fc2lvY2RldnByaXZhdGUgPSBpcF90dW5uZWxfc2lvY2RldnByaXZhdGUsXG4tLVxubmV0L2lwdjQvaXBpcC5jLTM4Ny1cdC5uZG9fZ2V0X2lmbGluayA9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxubmV0L2lwdjQvaXBpcC5jOjM4ODpcdC5uZG9fdHVubmVsX2N0bFx0PSBpcGlwX3R1bm5lbF9jdGwsXG5uZXQvaXB2NC9pcGlwLmM6Mzg5Olx0Lm5kb19maWxsX2ZvcndhcmRfcGF0aCA9IGlwaXBfZmlsbF9mb3J3YXJkX3BhdGgsXG5uZXQvaXB2NC9pcGlwLmMtMzkwLX07XG4tLVxubmV0L2lwdjQvaXBpcC5jLTM5Ny1cbm5ldC9pcHY0L2lwaXAuYzozOTg6c3RhdGljIHZvaWQgaXBpcF90dW5uZWxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9pcHY0L2lwaXAuYy0zOTkte1xubmV0L2lwdjQvaXBpcC5jOjQwMDpcdGRldi1cdTAwM2VuZXRkZXZfb3BzXHRcdD0gXHUwMDI2aXBpcF9uZXRkZXZfb3BzO1xubmV0L2lwdjQvaXBpcC5jLTQwMS1cdGRldi1cdTAwM2VoZWFkZXJfb3BzXHRcdD0gXHUwMDI2aXBfdHVubmVsX2hlYWRlcl9vcHM7XG4tLVxubmV0L2lwdjQvaXBpcC5jLTQxMC1cdGRldi1cdTAwM2Vod19mZWF0dXJlc1x0fD0gSVBJUF9GRUFUVVJFUztcbm5ldC9pcHY0L2lwaXAuYzo0MTE6XHRpcF90dW5uZWxfc2V0dXAoZGV2LCBpcGlwX25ldF9pZCk7XG5uZXQvaXB2NC9pcGlwLmMtNDEyLX1cbm5ldC9pcHY0L2lwaXAuYy00MTMtXG5uZXQvaXB2NC9pcGlwLmM6NDE0OnN0YXRpYyBpbnQgaXBpcF90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2lwdjQvaXBpcC5jLTQxNS17XG4tLVxubmV0L2lwdjQvaXBpcC5jLTQyNS1cbm5ldC9pcHY0L2lwaXAuYzo0MjY6c3RhdGljIGludCBpcGlwX3R1bm5lbF92YWxpZGF0ZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG5uZXQvaXB2NC9pcGlwLmMtNDI3LVx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9pcHY0L2lwaXAuYy00NDAtXG5uZXQvaXB2NC9pcGlwLmM6NDQxOnN0YXRpYyB2b2lkIGlwaXBfbmV0bGlua19wYXJtcyhzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG5uZXQvaXB2NC9pcGlwLmMtNDQyLVx0XHRcdCAgICAgICBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcGFybXMsXG4tLVxubmV0L2lwdjQvaXBpcC5jLTQ2My1cbm5ldC9pcHY0L2lwaXAuYzo0NjQ6c3RhdGljIGludCBpcGlwX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pcHY0L2lwaXAuYy00NjUtXHRcdFx0c3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcbi0tXG5uZXQvaXB2NC9pcGlwLmMtNDgxLVxubmV0L2lwdjQvaXBpcC5jOjQ4MjpcdGlwaXBfbmV0bGlua19wYXJtcyhkYXRhLCBcdTAwMjZwLCBcdTAwMjZ0LVx1MDAzZWNvbGxlY3RfbWQsIFx1MDAyNmZ3bWFyayk7XG5uZXQvaXB2NC9pcGlwLmMtNDgzLVx0cmV0dXJuIGlwX3R1bm5lbF9uZXdsaW5rKHBhcmFtcy1cdTAwM2VsaW5rX25ldCA/IDogZGV2X25ldChkZXYpLCBkZXYsIHRiLCBcdTAwMjZwLFxuLS1cbm5ldC9pcHY0L2lwaXAuYy00ODYtXG5uZXQvaXB2NC9pcGlwLmM6NDg3OnN0YXRpYyBpbnQgaXBpcF9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvaXB2NC9pcGlwLmMtNDg4LVx0XHRcdCAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbi0tXG5uZXQvaXB2NC9pcGlwLmMtNTA2LVxubmV0L2lwdjQvaXBpcC5jOjUwNzpcdGlwaXBfbmV0bGlua19wYXJtcyhkYXRhLCBcdTAwMjZwLCBcdTAwMjZjb2xsZWN0X21kLCBcdTAwMjZmd21hcmspO1xubmV0L2lwdjQvaXBpcC5jLTUwOC1cdGlmIChjb2xsZWN0X21kKVxuLS1cbm5ldC9pcHY0L2lwaXAuYy01MTctXG5uZXQvaXB2NC9pcGlwLmM6NTE4OnN0YXRpYyBzaXplX3QgaXBpcF9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2lwdjQvaXBpcC5jLTUxOS17XG4tLVxubmV0L2lwdjQvaXBpcC5jLTU0OS1cbm5ldC9pcHY0L2lwaXAuYzo1NTA6c3RhdGljIGludCBpcGlwX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2lwdjQvaXBpcC5jLTU1MS17XG4tLVxubmV0L2lwdjQvaXBpcC5jLTU4NC1cbm5ldC9pcHY0L2lwaXAuYzo1ODU6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGlwaXBfcG9saWN5W0lGTEFfSVBUVU5fTUFYICYjNDM7IDFdID0ge1xubmV0L2lwdjQvaXBpcC5jLTU4Ni1cdFtJRkxBX0lQVFVOX0xJTktdXHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbi0tXG5uZXQvaXB2NC9pcGlwLmMtNjAwLVxubmV0L2lwdjQvaXBpcC5jOjYwMTpzdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXBpcF9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xubmV0L2lwdjQvaXBpcC5jLTYwMi1cdC5raW5kXHRcdD0gXCYjMzQ7aXBpcFwmIzM0Oyxcbm5ldC9pcHY0L2lwaXAuYy02MDMtXHQubWF4dHlwZVx0PSBJRkxBX0lQVFVOX01BWCxcbm5ldC9pcHY0L2lwaXAuYzo2MDQ6XHQucG9saWN5XHRcdD0gaXBpcF9wb2xpY3ksXG5uZXQvaXB2NC9pcGlwLmMtNjA1LVx0LnByaXZfc2l6ZVx0PSBzaXplb2Yoc3RydWN0IGlwX3R1bm5lbCksXG5uZXQvaXB2NC9pcGlwLmM6NjA2Olx0LnNldHVwXHRcdD0gaXBpcF90dW5uZWxfc2V0dXAsXG5uZXQvaXB2NC9pcGlwLmM6NjA3Olx0LnZhbGlkYXRlXHQ9IGlwaXBfdHVubmVsX3ZhbGlkYXRlLFxubmV0L2lwdjQvaXBpcC5jOjYwODpcdC5uZXdsaW5rXHQ9IGlwaXBfbmV3bGluayxcbm5ldC9pcHY0L2lwaXAuYzo2MDk6XHQuY2hhbmdlbGlua1x0PSBpcGlwX2NoYW5nZWxpbmssXG5uZXQvaXB2NC9pcGlwLmMtNjEwLVx0LmRlbGxpbmtcdD0gaXBfdHVubmVsX2RlbGxpbmssXG5uZXQvaXB2NC9pcGlwLmM6NjExOlx0LmdldF9zaXplXHQ9IGlwaXBfZ2V0X3NpemUsXG5uZXQvaXB2NC9pcGlwLmM6NjEyOlx0LmZpbGxfaW5mb1x0PSBpcGlwX2ZpbGxfaW5mbyxcbm5ldC9pcHY0L2lwaXAuYy02MTMtXHQuZ2V0X2xpbmtfbmV0XHQ9IGlwX3R1bm5lbF9nZXRfbGlua19uZXQsXG4tLVxubmV0L2lwdjQvaXBpcC5jLTYxNS1cbm5ldC9pcHY0L2lwaXAuYzo2MTY6c3RhdGljIHN0cnVjdCB4ZnJtX3R1bm5lbCBpcGlwX2hhbmRsZXIgX19yZWFkX21vc3RseSA9IHtcbm5ldC9pcHY0L2lwaXAuYzo2MTc6XHQuaGFuZGxlclx0PVx0aXBpcF9yY3YsXG5uZXQvaXB2NC9pcGlwLmM6NjE4Olx0LmVycl9oYW5kbGVyXHQ9XHRpcGlwX2Vycixcbm5ldC9pcHY0L2lwaXAuYy02MTktXHQucHJpb3JpdHlcdD1cdDEsXG4tLVxubmV0L2lwdjQvaXBpcC5jPTYyMz1zdGF0aWMgc3RydWN0IHhmcm1fdHVubmVsIG1wbHNpcF9oYW5kbGVyIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvaXB2NC9pcGlwLmMtNjI0LVx0LmhhbmRsZXJcdD1cdG1wbHNpcF9yY3YsXG5uZXQvaXB2NC9pcGlwLmM6NjI1Olx0LmVycl9oYW5kbGVyXHQ9XHRpcGlwX2Vycixcbm5ldC9pcHY0L2lwaXAuYy02MjYtXHQucHJpb3JpdHlcdD1cdDEsXG4tLVxubmV0L2lwdjQvaXBpcC5jLTYyOS1cbm5ldC9pcHY0L2lwaXAuYzo2MzA6c3RhdGljIGludCBfX25ldF9pbml0IGlwaXBfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L2lwdjQvaXBpcC5jLTYzMS17XG5uZXQvaXB2NC9pcGlwLmM6NjMyOlx0cmV0dXJuIGlwX3R1bm5lbF9pbml0X25ldChuZXQsIGlwaXBfbmV0X2lkLCBcdTAwMjZpcGlwX2xpbmtfb3BzLCBcJiMzNDt0dW5sMFwmIzM0Oyk7XG5uZXQvaXB2NC9pcGlwLmMtNjMzLX1cbm5ldC9pcHY0L2lwaXAuYy02MzQtXG5uZXQvaXB2NC9pcGlwLmM6NjM1OnN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXBpcF9leGl0X3J0bmwoc3RydWN0IG5ldCAqbmV0LFxubmV0L2lwdjQvaXBpcC5jLTYzNi1cdFx0XHRcdCAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmRldl90b19raWxsKVxubmV0L2lwdjQvaXBpcC5jLTYzNy17XG5uZXQvaXB2NC9pcGlwLmM6NjM4Olx0aXBfdHVubmVsX2RlbGV0ZV9uZXQobmV0LCBpcGlwX25ldF9pZCwgXHUwMDI2aXBpcF9saW5rX29wcywgZGV2X3RvX2tpbGwpO1xubmV0L2lwdjQvaXBpcC5jLTYzOS19XG5uZXQvaXB2NC9pcGlwLmMtNjQwLVxubmV0L2lwdjQvaXBpcC5jOjY0MTpzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGlwaXBfbmV0X29wcyA9IHtcbm5ldC9pcHY0L2lwaXAuYzo2NDI6XHQuaW5pdCA9IGlwaXBfaW5pdF9uZXQsXG5uZXQvaXB2NC9pcGlwLmM6NjQzOlx0LmV4aXRfcnRubCA9IGlwaXBfZXhpdF9ydG5sLFxubmV0L2lwdjQvaXBpcC5jOjY0NDpcdC5pZCAgID0gXHUwMDI2aXBpcF9uZXRfaWQsXG5uZXQvaXB2NC9pcGlwLmMtNjQ1LVx0LnNpemUgPSBzaXplb2Yoc3RydWN0IGlwX3R1bm5lbF9uZXQpLFxuLS1cbm5ldC9pcHY0L2lwaXAuYy02NDctXG5uZXQvaXB2NC9pcGlwLmM6NjQ4OnN0YXRpYyBpbnQgX19pbml0IGlwaXBfaW5pdCh2b2lkKVxubmV0L2lwdjQvaXBpcC5jLTY0OS17XG4tLVxubmV0L2lwdjQvaXBpcC5jLTY1My1cbm5ldC9pcHY0L2lwaXAuYzo2NTQ6XHRlcnIgPSByZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKFx1MDAyNmlwaXBfbmV0X29wcyk7XG5uZXQvaXB2NC9pcGlwLmMtNjU1LVx0aWYgKGVyciBcdTAwM2MgMClcbm5ldC9pcHY0L2lwaXAuYy02NTYtXHRcdHJldHVybiBlcnI7XG5uZXQvaXB2NC9pcGlwLmM6NjU3Olx0ZXJyID0geGZybTRfdHVubmVsX3JlZ2lzdGVyKFx1MDAyNmlwaXBfaGFuZGxlciwgQUZfSU5FVCk7XG5uZXQvaXB2NC9pcGlwLmMtNjU4LVx0aWYgKGVyciBcdTAwM2MgMCkge1xubmV0L2lwdjQvaXBpcC5jLTY1OS1cdFx0cHJfaW5mbyhcJiMzNDslczogY2FuJiMzOTt0IHJlZ2lzdGVyIHR1bm5lbFxcblwmIzM0OywgX19mdW5jX18pO1xubmV0L2lwdjQvaXBpcC5jOjY2MDpcdFx0Z290byB4ZnJtX3R1bm5lbF9pcGlwX2ZhaWxlZDtcbm5ldC9pcHY0L2lwaXAuYy02NjEtXHR9XG4tLVxubmV0L2lwdjQvaXBpcC5jLTY2OC0jZW5kaWZcbm5ldC9pcHY0L2lwaXAuYzo2Njk6XHRlcnIgPSBydG5sX2xpbmtfcmVnaXN0ZXIoXHUwMDI2aXBpcF9saW5rX29wcyk7XG5uZXQvaXB2NC9pcGlwLmMtNjcwLVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvaXB2NC9pcGlwLmMtNjgxLSNlbmRpZlxubmV0L2lwdjQvaXBpcC5jOjY4MjpcdHhmcm00X3R1bm5lbF9kZXJlZ2lzdGVyKFx1MDAyNmlwaXBfaGFuZGxlciwgQUZfSU5FVCk7XG5uZXQvaXB2NC9pcGlwLmM6NjgzOnhmcm1fdHVubmVsX2lwaXBfZmFpbGVkOlxubmV0L2lwdjQvaXBpcC5jOjY4NDpcdHVucmVnaXN0ZXJfcGVybmV0X2RldmljZShcdTAwMjZpcGlwX25ldF9vcHMpO1xubmV0L2lwdjQvaXBpcC5jLTY4NS1cdGdvdG8gb3V0O1xuLS1cbm5ldC9pcHY0L2lwaXAuYy02ODctXG5uZXQvaXB2NC9pcGlwLmM6Njg4OnN0YXRpYyB2b2lkIF9fZXhpdCBpcGlwX2Zpbmkodm9pZClcbm5ldC9pcHY0L2lwaXAuYy02ODkte1xubmV0L2lwdjQvaXBpcC5jOjY5MDpcdHJ0bmxfbGlua191bnJlZ2lzdGVyKFx1MDAyNmlwaXBfbGlua19vcHMpO1xubmV0L2lwdjQvaXBpcC5jOjY5MTpcdGlmICh4ZnJtNF90dW5uZWxfZGVyZWdpc3RlcihcdTAwMjZpcGlwX2hhbmRsZXIsIEFGX0lORVQpKVxubmV0L2lwdjQvaXBpcC5jLTY5Mi1cdFx0cHJfaW5mbyhcJiMzNDslczogY2FuJiMzOTt0IGRlcmVnaXN0ZXIgdHVubmVsXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4tLVxubmV0L2lwdjQvaXBpcC5jLTY5Ni0jZW5kaWZcbm5ldC9pcHY0L2lwaXAuYzo2OTc6XHR1bnJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoXHUwMDI2aXBpcF9uZXRfb3BzKTtcbm5ldC9pcHY0L2lwaXAuYy02OTgtfVxubmV0L2lwdjQvaXBpcC5jLTY5OS1cbm5ldC9pcHY0L2lwaXAuYzo3MDA6bW9kdWxlX2luaXQoaXBpcF9pbml0KTtcbm5ldC9pcHY0L2lwaXAuYzo3MDE6bW9kdWxlX2V4aXQoaXBpcF9maW5pKTtcbm5ldC9pcHY0L2lwaXAuYy03MDItTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0lQL0lQIHByb3RvY29sIGRlY29kZXIgbGlicmFyeVwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDExOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTk4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIElQSVAgVHVubmVsIFJlY2VpdmVyIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBiZXN0IHRvIGZ1enogdGhlIElQSVAgdHVubmVsIHJlY2VpdmUgcGF0aCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhhdCBtZW1vcnkgbGVhayBmaXguIFRoZSBmdW5jdGlvbnMgYGlwaXBfcmN2YCBhbmQgYG1wbHNpcF9yY3ZgIGltbWVkaWF0ZWx5IGNhdWdodCBteSBleWUuIFRoZXkmIzM5O3JlIHJlZ2lzdGVyZWQgdGhyb3VnaCBgeGZybTRfdHVubmVsX3JlZ2lzdGVyYCwgd2hpY2ggbWFrZXMgdGhlbSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLiBIbW0sIGJ1dCB0aGV5JiMzOTtyZSAqc3RhdGljKi4gTm93LCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBMZXQgbWUgdGhpbmsuLi4gd2FpdCwgaWYgdGhleSBhcmUgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIGB4ZnJtNF90dW5uZWxfcmVnaXN0ZXJgLCB0aGVuIHRoZSBjb21waWxlciAqY2FuJiMzOTt0KiBpbmxpbmUgdGhlbS4gVGhleSBoYXZlIHRvIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcywgZXZlbiBpZiBzdGF0aWMuIEV4Y2VsbGVudC4gU28sIGBpcGlwX3JjdmAgYW5kIGBtcGxzaXBfcmN2YCBhcmUgYWN0dWFsbHkgZ29vZCBjYW5kaWRhdGVzIGZvciBgRm9jdXNTeW1ib2xzYC4KCkkgd2FzIGEgYml0IHdvcnJpZWQgYWJvdXQgYGlwaXBfdHVubmVsX3JjdmAsIHNpbmNlIHRoYXQgc2VlbXMgdG8gYmUgdGhlIG1haW4gZnVuY3Rpb24gd2hlcmUgdGhlIHBhdGNoIGlzLiBCdXQgc2luY2UgYGlwaXBfcmN2YCBhbmQgYG1wbHNpcF9yY3ZgIGFyZSB0aGUgaGFuZGxlcnMgdGhhdCBnZXQgcmVnaXN0ZXJlZCwgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGNhbGwgYGlwaXBfdHVubmVsX3JjdmAsIEkgdGhpbmsgdGhlc2UgYXJlIGJldHRlciBjaG9pY2VzIGZvciBmdXp6aW5nLiBgaXBpcF90dW5uZWxfcmN2YCBtaWdodCBiZSBpbmxpbmVkIHdpdGhpbiB0aGVtLCBidXQgbGV0JiMzOTtzIHN0aWNrIHdpdGggdGhlIGVudHJ5cG9pbnRzLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgaXBfdHVubmVsX3JjdmAgaXNuJiMzOTt0IGEgbm9uLXN0YXRpYyBhbHRlcm5hdGl2ZS4uLiBZZXAsIGl0JiMzOTtzIHRoZXJlIGluIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AgYnV0IHRoZSBpbXBvcnRhbnQgY2hhbmdlcyBhcmUgaW4gYGlwaXBfdHVubmVsX3JjdmAhCgpTbywgSSYjMzk7bSBnb2luZyB3aXRoIGBpcGlwX3JjdmAgYW5kIGBtcGxzaXBfcmN2YCBhcyBteSBgRm9jdXNTeW1ib2xzYC4gVGhleSBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgY292ZXJpbmcgdGhlIHBhdGguIEFzIGZvciBjb25maWd1cmF0aW9uLCBgTkVUX0lQSVBgIGlzIGNsZWFybHkgbmVlZGVkLiBJJiMzOTtsbCBhbHNvIGRvdWJsZS1jaGVjaywgYW5kIGBDT05GSUdfTVBMU2AgaXMgYWxzbyByZXF1aXJlZCBiZWNhdXNlIG9mIGBtcGxzaXBfcmN2YC4gSSBzaG91bGQgY2hlY2sgYG5ldC9pcHY0L2lwaXAuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuCgpUaGUgcmVhc29uaW5nIGhlcmUgaXMgc29saWQ6IGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBuZXR3b3JrIHByb3RvY29sIGhhbmRsZXIgcmVhY2hhYmxlIHRocm91Z2ggdGhlIHJlY2VpdmUgcGF0aCwgc28gZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3Igb3RoZXIgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTVBMUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwaXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcGlwLmM9MjAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdG5sX3B0a19pbmZvIGlwaXBfdHBpID0ge1xuLS1cbm5ldC9pcHY0L2lwaXAuYy0yMDctXG5uZXQvaXB2NC9pcGlwLmM6MjA4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUExTKVxubmV0L2lwdjQvaXBpcC5jLTIwOS1zdGF0aWMgY29uc3Qgc3RydWN0IHRubF9wdGtfaW5mbyBtcGxzaXBfdHBpID0ge1xuLS1cbm5ldC9pcHY0L2lwaXAuYz0yMTU9c3RhdGljIGludCBpcGlwX3R1bm5lbF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaXBwcm90bylcbi0tXG5uZXQvaXB2NC9pcGlwLmMtMjM3LVx0XHRcdGdvdG8gZHJvcDtcbm5ldC9pcHY0L2lwaXAuYzoyMzg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QTFMpXG5uZXQvaXB2NC9pcGlwLmMtMjM5LVx0XHRpZiAoaXBwcm90byA9PSBJUFBST1RPX01QTFMpXG4tLVxubmV0L2lwdjQvaXBpcC5jPTI2Nj1zdGF0aWMgaW50IGlwaXBfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvaXBpcC5jLTI3MC1cbm5ldC9pcHY0L2lwaXAuYzoyNzE6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QTFMpXG5uZXQvaXB2NC9pcGlwLmMtMjcyLXN0YXRpYyBpbnQgbXBsc2lwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2lwaXAuYz0yODI9c3RhdGljIG5ldGRldl90eF90IGlwaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9pcGlwLmMtMjk1LVx0XHRicmVhaztcbm5ldC9pcHY0L2lwaXAuYzoyOTY6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QTFMpXG5uZXQvaXB2NC9pcGlwLmMtMjk3LVx0Y2FzZSBodG9ucyhFVEhfUF9NUExTX1VDKTpcbi0tXG5uZXQvaXB2NC9pcGlwLmM9MzI2PXN0YXRpYyBib29sIGlwaXBfdHVubmVsX2lvY3RsX3ZlcmlmeV9wcm90b2NvbCh1OCBpcHByb3RvKVxuLS1cbm5ldC9pcHY0L2lwaXAuYy0zMzAtXHRjYXNlIElQUFJPVE9fSVBJUDpcbm5ldC9pcHY0L2lwaXAuYzozMzE6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QTFMpXG5uZXQvaXB2NC9pcGlwLmMtMzMyLVx0Y2FzZSBJUFBST1RPX01QTFM6XG4tLVxubmV0L2lwdjQvaXBpcC5jPTYxNj1zdGF0aWMgc3RydWN0IHhmcm1fdHVubmVsIGlwaXBfaGFuZGxlciBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY0L2lwaXAuYy02MjEtXG5uZXQvaXB2NC9pcGlwLmM6NjIyOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUExTKVxubmV0L2lwdjQvaXBpcC5jLTYyMy1zdGF0aWMgc3RydWN0IHhmcm1fdHVubmVsIG1wbHNpcF9oYW5kbGVyIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjQvaXBpcC5jPTY0OD1zdGF0aWMgaW50IF9faW5pdCBpcGlwX2luaXQodm9pZClcbi0tXG5uZXQvaXB2NC9pcGlwLmMtNjYxLVx0fVxubmV0L2lwdjQvaXBpcC5jOjY2MjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBMUylcbm5ldC9pcHY0L2lwaXAuYy02NjMtXHRlcnIgPSB4ZnJtNF90dW5uZWxfcmVnaXN0ZXIoXHUwMDI2bXBsc2lwX2hhbmRsZXIsIEFGX01QTFMpO1xuLS1cbm5ldC9pcHY0L2lwaXAuYy02NzYtcnRubF9saW5rX2ZhaWxlZDpcbm5ldC9pcHY0L2lwaXAuYzo2Nzc6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QTFMpXG5uZXQvaXB2NC9pcGlwLmMtNjc4LVx0eGZybTRfdHVubmVsX2RlcmVnaXN0ZXIoXHUwMDI2bXBsc2lwX2hhbmRsZXIsIEFGX01QTFMpO1xuLS1cbm5ldC9pcHY0L2lwaXAuYz02ODg9c3RhdGljIHZvaWQgX19leGl0IGlwaXBfZmluaSh2b2lkKVxuLS1cbm5ldC9pcHY0L2lwaXAuYy02OTItXHRcdHByX2luZm8oXCYjMzQ7JXM6IGNhbiYjMzk7dCBkZXJlZ2lzdGVyIHR1bm5lbFxcblwmIzM0OywgX19mdW5jX18pO1xubmV0L2lwdjQvaXBpcC5jOjY5MzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBMUylcbm5ldC9pcHY0L2lwaXAuYy02OTQtXHRpZiAoeGZybTRfdHVubmVsX2RlcmVnaXN0ZXIoXHUwMDI2bXBsc2lwX2hhbmRsZXIsIEFGX01QTFMpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU2OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE1QTFMgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgQ09ORklHX01QTFNgLiBUaGF0JiMzOTtzIGEga2V5IGtlcm5lbCBvcHRpb24sIGFuZCBpdCYjMzk7cyByZWxldmFudCB0byB0aGUgY3VycmVudCBzaXR1YXRpb24uIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gTm8gcG9pbnQgaW4gZW5hYmxpbmcgc29tZXRoaW5nIHdpdGhvdXQga25vd2luZyB3aGF0IGVsc2UgaXQgcHVsbHMgaW4sIG9yIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbWlnaHQgYmUgYWZmZWN0ZWQuIExldCYjMzk7cyBkaWcgaW50byB0aGUgS2NvbmZpZyBhbmQgc2VlIHdoYXQgdGhlIHJlbGF0aW9uc2hpcHMgYXJlLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIGhvdyBicm9hZGx5IHRoaXMgaW1wYWN0cyB0aGUgd2lkZXIgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTE6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1QTFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXBscy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcGxzL0tjb25maWctNS1cbm5ldC9tcGxzL0tjb25maWc6NjptZW51Y29uZmlnIE1QTFNcbm5ldC9tcGxzL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7TXVsdGlQcm90b2NvbCBMYWJlbCBTd2l0Y2hpbmdcJiMzNDtcbi0tXG5uZXQvbXBscy9LY29uZmlnPTE5PWNvbmZpZyBORVRfTVBMU19HU09cbi0tXG5uZXQvbXBscy9LY29uZmlnLTI1LVxubmV0L21wbHMvS2NvbmZpZzoyNjpjb25maWcgTVBMU19ST1VUSU5HXG5uZXQvbXBscy9LY29uZmlnLTI3LVx0dHJpc3RhdGUgXCYjMzQ7TVBMUzogcm91dGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L21wbHMvS2NvbmZpZy0zMi1cbm5ldC9tcGxzL0tjb25maWc6MzM6Y29uZmlnIE1QTFNfSVBUVU5ORUxcbm5ldC9tcGxzL0tjb25maWctMzQtXHR0cmlzdGF0ZSBcJiMzNDtNUExTOiBJUCBvdmVyIE1QTFMgdHVubmVsIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MzkKCQkJCQkJCW91dHB1dDogMTE2CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqTXkgQ29uZmlndXJhdGlvbiBMb2dpYyBmb3IgTmV0d29yayBQcm90b2NvbHMqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBkZWFsaW5nIHdpdGggY29uZmlndXJhdGlvbiBvcHRpb25zIGhlcmUsIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3Mgc2V0IHVwIGNvcnJlY3RseS4gRmlyc3QgdGhpbmcmIzM5O3MgZmlyc3Q6IGBDT05GSUdfTVBMU2AgaXMgYSBib29sZWFuLCB3aGljaCBpcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBTbywgSSYjMzk7bGwgYWRkIGBNUExTYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIFRoYXQgZW5zdXJlcyBpdCYjMzk7cyBwcm9wZXJseSBjb25zaWRlcmVkIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuCgpOb3csIGxldCYjMzk7cyBjYXN0IGEgd2lkZXIgbmV0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoZSBuZXR3b3JrIHNldHVwLiBBaCwgeWVzLCBgTkVUX0lQSVBgIGlzIHN0YW5kaW5nIG91dCBhcyBhIGtleSBjYW5kaWRhdGUuIFRoaXMgY291bGQgYmUgaW1wb3J0YW50LgoKT2theSwgbGV0JiMzOTtzIGhvbWUgaW4gb24gdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gbG9vayBhdC4gRnJvbSB0aGUgc3ltYm9scyBJJiMzOTttIHNlZWluZywgYGlwaXBfcmN2YCBhbmQgYG1wbHNpcF9yY3ZgIGFyZSB0aGUgcmVhbCBmb2N1cy4gSSYjMzk7bGwgbmVlZCB0byBmb2xsb3cgdGhlIGV4ZWN1dGlvbiBmbG93cyB0aGF0IHRvdWNoIHRoZXNlLgoKQWxyaWdodCwgd2l0aCB0aGUgbWFpbiBwaWVjZXMgaW4gcGxhY2UsIEkgYmVsaWV2ZSBpdCYjMzk7cyB0aW1lIHRvIHNldC1yZXN1bHRzLiBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBpdCBhbGwgcHV0IHRvZ2V0aGVyIGFmdGVyIGEgcXVpY2sgZXZhbHVhdGlvbiBvZiB0aGVzZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDExOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfSVBJUCYjMzQ7LAogICAgJiMzNDtNUExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBpcF9yY3YmIzM0OywKICAgICYjMzQ7bXBsc2lwX3JjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBJUElQIHR1bm5lbCByZWNlaXZlIHBhdGggKGBpcGlwX3R1bm5lbF9yY3ZgKSBieSBwcm9wZXJseSBmcmVlaW5nIHRoZSBza2Igd2hlbiBgaXBfdHVuX3J4X2RzdGAgcmV0dXJucyBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgbmV0d29yayBwcm90b2NvbCBoYW5kbGVyLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfSVBJUCYjMzQ7LAogICAgJiMzNDtNUExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBpcF9yY3YmIzM0OywKICAgICYjMzQ7bXBsc2lwX3JjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBJUElQIHR1bm5lbCByZWNlaXZlIHBhdGggKGBpcGlwX3R1bm5lbF9yY3ZgKSBieSBwcm9wZXJseSBmcmVlaW5nIHRoZSBza2Igd2hlbiBgaXBfdHVuX3J4X2RzdGAgcmV0dXJucyBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgbmV0d29yayBwcm90b2NvbCBoYW5kbGVyLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMToyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDExOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgd2hlcmUgYW4gc2tfYnVmZiAoc2tiKSB3YXMgbm90IGZyZWVkIHdoZW4gaXBfdHVuX3J4X2RzdCgpIHJldHVybmVkIE5VTEwuIEJ5IGNoYW5naW5nICYjMzk7cmV0dXJuIDA7JiMzOTsgdG8gJiMzOTtnb3RvIGRyb3A7JiMzOTssIHRoZSBza2IgaXMgbm93IHByb3Blcmx5IGZyZWVkIHZpYSBrZnJlZV9za2Ioc2tiKS4gVGhpcyBpcyBhIG1lbW9yeSBsZWFrIGlzc3VlLCB3aGljaCBpcyB0eXBpY2FsbHkgZGV0ZWN0ZWQgYnkga21lbWxlYWsuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MsIHdoaWNoIGFyZSB0aGUgdGFyZ2V0cyBvZiBLTVNBTi4gU3RhbmRhcmQgS0FTQU4gYW5kIGttZW1sZWFrIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIHR5cGUgb2YgaXNzdWUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQxZWFiZTBhN2NhYzgyMmU2ZTdhMWY0N2M2OTY5ZTg1ZjU5NzJlZjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAxMToyMDozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuYwppbmRleCBiNjQzMTk0ZjU3ZDI5Li5kZGY2MmI0NTU2NmI2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGlwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBpcC5jCkBAIC0yNDgsNyAmIzQzOzI0OCw3IEBAIHN0YXRpYyBpbnQgaXBpcF90dW5uZWxfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHU4IGlwcHJvdG8pCiAKIAkJCXR1bl9kc3QgPSBpcF90dW5fcnhfZHN0KHNrYiwgZmxhZ3MsIDAsIDApOwogCQkJaWYgKCF0dW5fZHN0KQotCQkJCXJldHVybiAwOwomIzQzOwkJCQlnb3RvIGRyb3A7CiAJCQlpcF90dW5uZWxfbWRfdWRwX2VuY2FwKHNrYiwgJmFtcDt0dW5fZHN0LSZndDt1LnR1bl9pbmZvKTsKIAkJfQogCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvZGUgUGF0Y2g6IElQSVAgVHVubmVsIFJlY2VpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvaXB2NC9pcGlwLmNgLiBJdCYjMzk7cyBhIHNpbXBsZSwgc2VlbWluZ2x5IGRpcmVjdCBjaGFuZ2U6IGl0IHN3YXBzIGByZXR1cm4gMDtgIGZvciBgZ290byBkcm9wO2Agd2l0aGluIHRoZSBgaXBpcF90dW5uZWxfcmN2YCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O3doeSB0aGUganVtcD8gV2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlPyYjMzQ7IFJlcGxhY2luZyBhIHNpbXBsZSByZXR1cm4gd2l0aCBhIGBnb3RvYCBpcyB1bnVzdWFsLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIHRob3JvdWdobHkuIFRoZSBjb21tZW50IGluIHRoZSBjb2RlIGRvZXNuJiMzOTt0IGV4cGxhaW4gdGhlIHJlYXNvbi4KCk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvaXB2NC9pcGlwLmNgIHRvIHNlZSBwcmVjaXNlbHkgd2hhdCBgZ290byBkcm9wO2AgaXMgcmVmZXJlbmNpbmcuIFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgb2YgdGhpcyAmIzM0O2Ryb3AmIzM0OyBsYWJlbD8gSXMgaXQgYSBjb21tb24gZXhpdCBwb2ludCBmb3IgZXJyb3IgaGFuZGxpbmc/IElzIGl0IHJlbGF0ZWQgdG8gc29tZSByZXNvdXJjZSBtYW5hZ2VtZW50PyBPciBpcyBpdCBjaGFuZ2luZyB0aGUgY29udHJvbCBmbG93IGluIGEgd2F5IEkgbmVlZCB0byBkZWVwbHkgdW5kZXJzdGFuZD8gSSBzdXNwZWN0IHRoaXMgaXMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gaGFuZGxpbmcgaW5ib3VuZCBwYWNrZXRzIGFuZCBsaWtlbHkgcGVydGFpbnMgdG8gYSBwYWNrZXQgYmVpbmcgaW52YWxpZCBvciB1bnByb2Nlc3NhYmxlLiBCdXQgSSBtdXN0IGJlIHN1cmUhIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgZmxvdyBsb2dpYyBhcm91bmQgYGRyb3BgIGxhYmVsIHRvIGJlIHN1cmUuIEFueSBjaGFuZ2UgdG8gdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgYWx0ZXJzIHRoZSBmbG93IGZyb20gYW4gZXJyb3IgcmV0dXJuIHRvIGEganVtcCBpcyB3b3J0aCB0aGUgZXh0cmEgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcGlwX3R1bm5lbF9yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcGlwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBpcC5jPTIwOT1zdGF0aWMgY29uc3Qgc3RydWN0IHRubF9wdGtfaW5mbyBtcGxzaXBfdHBpID0ge1xuLS1cbm5ldC9pcHY0L2lwaXAuYy0yMTQtXG5uZXQvaXB2NC9pcGlwLmM6MjE1OnN0YXRpYyBpbnQgaXBpcF90dW5uZWxfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHU4IGlwcHJvdG8pXG5uZXQvaXB2NC9pcGlwLmMtMjE2LXtcbi0tXG5uZXQvaXB2NC9pcGlwLmM9MjY2PXN0YXRpYyBpbnQgaXBpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2lwaXAuYy0yNjcte1xubmV0L2lwdjQvaXBpcC5jOjI2ODpcdHJldHVybiBpcGlwX3R1bm5lbF9yY3Yoc2tiLCBJUFBST1RPX0lQSVApO1xubmV0L2lwdjQvaXBpcC5jLTI2OS19XG4tLVxubmV0L2lwdjQvaXBpcC5jPTI3Mj1zdGF0aWMgaW50IG1wbHNpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2lwaXAuYy0yNzMte1xubmV0L2lwdjQvaXBpcC5jOjI3NDpcdHJldHVybiBpcGlwX3R1bm5lbF9yY3Yoc2tiLCBJUFBST1RPX01QTFMpO1xubmV0L2lwdjQvaXBpcC5jLTI3NS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDExOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBgaXBpcF90dW5uZWxfcmN2YCBmdW5jdGlvbiwgZm9jdXNpbmcgb24gbGluZXMgMjE1LTI2NSwgYXMgaWYgdGhlc2UgYXJlIG15IGltbWVkaWF0ZSB0aG91Z2h0czoKCioqRGlzc2VjdGluZyBgaXBpcF90dW5uZWxfcmN2YCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGlwaXBfdHVubmVsX3JjdmAgZnVuY3Rpb24gd2l0aGluIGBuZXQvaXB2NC9pcGlwLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY3JpdGljYWwgc2VjdGlvbiBmcm9tIGxpbmUgMjE1IHRvIDI2NS4gUmlnaHQsIHRoaXMgaXMgd2hlcmUgdGhlICpyZWFsKiBwYWNrZXQgcHJvY2Vzc2luZyBoYXBwZW5zIHdpdGhpbiB0aGUgSVBJUCB0dW5uZWwuCgpSaWdodCwgbGluZSAyMTUgbWFya3MgdGhlIHN0YXJ0Li4uIGFoLCBJIHJlbWVtYmVyLCB3ZSYjMzk7cmUgaW5zaWRlIHRoZSBtYWluIHdvcmsgbG9vcC4gRmlyc3QgdGhpbmcsIHdlJiMzOTtyZSBsaWtlbHkgZ3JhYmJpbmcgdGhlIGlubmVyIElQIGhlYWRlcjsgY29uZmlybWluZyB0aGF0IGl0IGhhcyBiZWVuIGNoZWNrZWQgYWdhaW5zdCBhbGwgdmFsaWQgY3JpdGVyaWEgYmVmb3JlIGdldHRpbmcgdG8gdGhpcyBzdGFnZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZXNzZW50aWFsIHByb2Nlc3Npbmcgc3RlcHMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgZW5jYXBzdWxhdGlvbiBiZWluZyBzdHJpcHBlZCwgdGhlIGlubmVyIGhlYWRlciBiZWluZyBleGFtaW5lZCwgYW5kIHRoZW4gdGhlIHBhY2tldCBiZWluZyByb3V0ZWQgb3IgZGVsaXZlcmVkLgoKTGluZXMgMjIwLTIzMDogbm93IHRoZSBjb3JlIG9mIGl0LCBJIHNlZSB0aGF0IHdlIGFyZSBoYW5kbGluZyB0aGUgdHVubmVsIG1vZGUgZW5jYXBzdWxhdGlvbiBmb3IgdGhlIHBhY2tldCB3aXRoIHRoZSBgaXBpcF90dW5uZWxfcmN2X2NvcmVgIGZ1bmN0aW9uLiAKCkxpbmVzIDIzMC0yNDAuIEkgc2VlIHRoYXQgdGhlcmUgbXVzdCBiZSBzb21ldGhpbmcgYmVpbmcgaGFuZGxlZCB3aGVuIHRoZSBJUCBoZWFkZXIgaGFzIGJlZW4gc3RyaXBwZWQgZnJvbSB0aGUgcGFja2V0LCBhbmQgd2UgY2FuIGNoZWNrIHdoZXRoZXIgdGhlIHRoZSBwYWNrZXQgc2hvdWxkIGJlIGRlbGl2ZXJlZCBsb2NhbGx5IG9yIGlzIHRvIGJlIHJlcm91dGVkLiBXZSBhcmUgZGV0ZXJtaW5pbmcgaG93IHRvIGhhbmQgb2ZmIHRoZSBwYWNrZXQsIGFuZCBJJiMzOTttIHJlYWxseSBjdXJpb3VzIGlmIHRoaXMgaW52b2x2ZXMgYW55IHNwZWNpZmljIHR1bm5lbC1yZWxhdGVkIGNoZWNrcyB0aGF0IGFyZSBkaWZmZXJlbnQgdGhhbiBub3JtYWwgcm91dGluZyBsb2dpYy4KCkxpbmVzIDI0MC0yNTA6IFRoaXMgc2VlbXMgdG8gYmUgdGhlIHBsYWNlIHdoZXJlIHdlIGRlYWwgd2l0aCB0dW5uZWwtc3BlY2lmaWMgTVRVIGlzc3VlcyBvciBmcmFnbWVudGF0aW9uIGhhbmRsaW5nLiBJJiMzOTtkIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZGl0aW9ucyBmb3IgdGhlIHBhY2tldCB0byBiZSByZXJvdXRlZC4gSSYjMzk7bSBzZWVpbmcgY2hlY2tzIHJlbGF0ZWQgdG8gTVRVLgoKTGluZXMgMjUwLTI2MDogSSB0aGluayB0aGlzIHNlY3Rpb24gaXMgZGVhbGluZyB3aXRoIHRoZSBwYWNrZXQgYmVpbmcgZW5xdWV1ZWQgdG8gYmUgZGVhbHQgd2l0aCwgYW5kIHRoZSB0dW5uZWwgaXMgcmVjZWl2aW5nIHRoZSBwYWNrZXQgdG8gYmUgZGVhbHQgd2l0aCBmb3IgdGhlIG5leHQgc3RhZ2Ugb2YgcHJvY2Vzc2luZy4KCkZpbmFsbHksIGxpbmVzIDI2MC0yNjUgc2VlbSB0byBjb25jbHVkZSB3aXRoIHNvbWUga2luZCBvZiBjb3VudGVyIG9yIHN0YXRpc3RpY3MgdXBkYXRlcy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhvc2UgY291bnRlcnMsIGFzIEkgYWx3YXlzIGNhcmUgYWJvdXQgdGhlIHBlcmZvcm1hbmNlIG92ZXJoZWFkIG9mIHR1bm5lbCBwcm9jZXNzaW5nLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgcXVpY2sgdW5kZXJzdGFuZGluZyBvZiB0aGUgd29yayBiZWluZyBkb25lLgoKQWxyaWdodCwgdGhhdCYjMzk7cyBhIGdvb2QgZmlyc3QgcGFzcy4gSSYjMzk7bGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBjb2RlIG1vcmUgbGluZS1ieS1saW5lIG5vdyB0byBncmFzcCB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTE6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcGlwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxNTpcdHN0YXRpYyBpbnQgaXBpcF90dW5uZWxfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHU4IGlwcHJvdG8pXG4gMjE2Olx0e1xuIDIxNzpcdFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXHUwMDNlZGV2KTtcbiAyMTg6XHRcdHN0cnVjdCBpcF90dW5uZWxfbmV0ICppdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGlwaXBfbmV0X2lkKTtcbiAyMTk6XHRcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKSA9IHsgfTtcbiAyMjA6XHRcdHN0cnVjdCBtZXRhZGF0YV9kc3QgKnR1bl9kc3QgPSBOVUxMO1xuIDIyMTpcdFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsO1xuIDIyMjpcdFx0Y29uc3Qgc3RydWN0IGlwaGRyICppcGg7XG4gMjIzOlx0XG4gMjI0Olx0XHRfX3NldF9iaXQoSVBfVFVOTkVMX05PX0tFWV9CSVQsIGZsYWdzKTtcbiAyMjU6XHRcbiAyMjY6XHRcdGlwaCA9IGlwX2hkcihza2IpO1xuIDIyNzpcdFx0dHVubmVsID0gaXBfdHVubmVsX2xvb2t1cChpdG4sIHNrYi1cdTAwM2VkZXYtXHUwMDNlaWZpbmRleCwgZmxhZ3MsIGlwaC1cdTAwM2VzYWRkcixcbiAyMjg6XHRcdFx0XHRcdCAgaXBoLVx1MDAzZWRhZGRyLCAwKTtcbiAyMjk6XHRcdGlmICh0dW5uZWwpIHtcbiAyMzA6XHRcdFx0Y29uc3Qgc3RydWN0IHRubF9wdGtfaW5mbyAqdHBpO1xuIDIzMTpcdFxuIDIzMjpcdFx0XHRpZiAodHVubmVsLVx1MDAzZXBhcm1zLmlwaC5wcm90b2NvbCAhPSBpcHByb3RvIFx1MDAyNlx1MDAyNlxuIDIzMzpcdFx0XHQgICAgdHVubmVsLVx1MDAzZXBhcm1zLmlwaC5wcm90b2NvbCAhPSAwKVxuIDIzNDpcdFx0XHRcdGdvdG8gZHJvcDtcbiAyMzU6XHRcbiAyMzY6XHRcdFx0aWYgKCF4ZnJtNF9wb2xpY3lfY2hlY2soTlVMTCwgWEZSTV9QT0xJQ1lfSU4sIHNrYikpXG4gMjM3Olx0XHRcdFx0Z290byBkcm9wO1xuIDIzODpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19NUExTKVxuIDIzOTpcdFx0XHRpZiAoaXBwcm90byA9PSBJUFBST1RPX01QTFMpXG4gMjQwOlx0XHRcdFx0dHBpID0gXHUwMDI2bXBsc2lwX3RwaTtcbiAyNDE6XHRcdFx0ZWxzZVxuIDI0MjpcdCNlbmRpZlxuIDI0MzpcdFx0XHRcdHRwaSA9IFx1MDAyNmlwaXBfdHBpO1xuIDI0NDpcdFx0XHRpZiAoaXB0dW5uZWxfcHVsbF9oZWFkZXIoc2tiLCAwLCB0cGktXHUwMDNlcHJvdG8sIGZhbHNlKSlcbiAyNDU6XHRcdFx0XHRnb3RvIGRyb3A7XG4gMjQ2Olx0XHRcdGlmICh0dW5uZWwtXHUwMDNlY29sbGVjdF9tZCkge1xuIDI0NzpcdFx0XHRcdGlwX3R1bm5lbF9mbGFnc196ZXJvKGZsYWdzKTtcbiAyNDg6XHRcbiAyNDk6XHRcdFx0XHR0dW5fZHN0ID0gaXBfdHVuX3J4X2RzdChza2IsIGZsYWdzLCAwLCAwKTtcbiAyNTA6XHRcdFx0XHRpZiAoIXR1bl9kc3QpXG4gMjUxOlx0XHRcdFx0XHRnb3RvIGRyb3A7XG4gMjUyOlx0XHRcdFx0aXBfdHVubmVsX21kX3VkcF9lbmNhcChza2IsIFx1MDAyNnR1bl9kc3QtXHUwMDNldS50dW5faW5mbyk7XG4gMjUzOlx0XHRcdH1cbiAyNTQ6XHRcdFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiAyNTU6XHRcbiAyNTY6XHRcdFx0cmV0dXJuIGlwX3R1bm5lbF9yY3YodHVubmVsLCBza2IsIHRwaSwgdHVuX2RzdCwgbG9nX2Vjbl9lcnJvcik7XG4gMjU3Olx0XHR9XG4gMjU4Olx0XG4gMjU5Olx0XHRyZXR1cm4gLTE7XG4gMjYwOlx0XG4gMjYxOlx0ZHJvcDpcbiAyNjI6XHRcdGtmcmVlX3NrYihza2IpO1xuIDI2MzpcdFx0cmV0dXJuIDA7XG4gMjY0Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTE0CgkJCQkJCQlvdXRwdXQ6IDEzNwoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhpcyBDb2RlIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgY2hhbmdpbmcgYSBgcmV0dXJuIDA7YCB0byBgZ290byBkcm9wO2Agd2hlbiBgIXR1bl9kc3RgLiBUaGUgYGdvdG8gZHJvcDtgIGJpdCBpcyBjcnVjaWFsIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgYGtmcmVlX3NrYihza2IpOyByZXR1cm4gMDtgIGhhcHBlbnMuIFJpZ2h0LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgYSBtZW1vcnkgbGVhayBmaXguIEl0IGxvb2tzIGxpa2UgdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSB3YXNuJiMzOTt0IGJlaW5nIGZyZWVkIHByb3Blcmx5IGJlZm9yZS4gR29vZCBjYXRjaCEKCk5vdywgbXkgbWluZCBuYXR1cmFsbHkgZ29lcyB0byB0aGUgZGlhZ25vc3RpYyB0b29scy4gSSBrbm93IHRoYXQga21lbWxlYWsgaXMgdGhlIHVzdWFsIHN1c3BlY3QgZm9yIHNuaWZmaW5nIG91dCBtZW1vcnkgbGVha3MsIGFuZCB0aGF0JiMzOTtzIHByZWNpc2VseSB3aGF0IHRoaXMgcGF0Y2ggYWRkcmVzc2VzLiBJJiMzOTttIHByZXR0eSBzdXJlIEtBU0FOLCBvciBLZXJuZWwgQWRkcmVzcyBTQU5pdGl6ZXIsIHdvdWxkIGJlIGxvb2tpbmcgZm9yIGEgZGlmZmVyZW50IGNsYXNzIG9mIGVycm9yc+KAlHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzIGFjY2VzcywgdGhpbmdzIGxpa2UgdGhhdC4gS01TQU4sIEtlcm5lbCBNZW1vcnkgU0FOaXRpemVyLCBpcyB0aGUgb25lIHRoYXQgZmxhZ3MgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuCgpHaXZlbiB0aGUgbmF0dXJlIG9mIHRoaXMgY2hhbmdlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yLCBmb3IgdGhhdCBtYXR0ZXIsIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEl0JiMzOTtzIHNvbGVseSBhYm91dCBwbHVnZ2luZyBhIG1lbW9yeSBsZWFrLiBTbywgd2hlbiBpdCBjb21lcyB0byB0aGUgYE5lZWRzS01TQU5gIHRhZywgSSYjMzk7bSB0aGlua2luZywgJiMzNDtOb3BlLCBub3QgbmVlZGVkIGhlcmUuJiMzNDsgVGhpcyBpcyBhIHN0cmFpZ2h0LXVwIG1lbW9yeSBsZWFrIHJlcGFpciwgbm8gS01TQU4gaW52b2x2ZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDExOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgd2hlcmUgYW4gc2tfYnVmZiAoc2tiKSB3YXMgbm90IGZyZWVkIHdoZW4gaXBfdHVuX3J4X2RzdCgpIHJldHVybmVkIE5VTEwuIEJ5IGNoYW5naW5nICYjMzk7cmV0dXJuIDA7JiMzOTsgdG8gJiMzOTtnb3RvIGRyb3A7JiMzOTssIHRoZSBza2IgaXMgbm93IHByb3Blcmx5IGZyZWVkIHZpYSBrZnJlZV9za2Ioc2tiKS4gVGhpcyBpcyBhIG1lbW9yeSBsZWFrIGlzc3VlLCB3aGljaCBpcyB0eXBpY2FsbHkgZGV0ZWN0ZWQgYnkga21lbWxlYWsuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MsIHdoaWNoIGFyZSB0aGUgdGFyZ2V0cyBvZiBLTVNBTi4gU3RhbmRhcmQgS0FTQU4gYW5kIGttZW1sZWFrIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIHR5cGUgb2YgaXNzdWUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIHdoZXJlIGFuIHNrX2J1ZmYgKHNrYikgd2FzIG5vdCBmcmVlZCB3aGVuIGlwX3R1bl9yeF9kc3QoKSByZXR1cm5lZCBOVUxMLiBCeSBjaGFuZ2luZyAmIzM5O3JldHVybiAwOyYjMzk7IHRvICYjMzk7Z290byBkcm9wOyYjMzk7LCB0aGUgc2tiIGlzIG5vdyBwcm9wZXJseSBmcmVlZCB2aWEga2ZyZWVfc2tiKHNrYikuIFRoaXMgaXMgYSBtZW1vcnkgbGVhayBpc3N1ZSwgd2hpY2ggaXMgdHlwaWNhbGx5IGRldGVjdGVkIGJ5IGttZW1sZWFrLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCB3aGljaCBhcmUgdGhlIHRhcmdldHMgb2YgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGFuZCBrbWVtbGVhayBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyB0eXBlIG9mIGlzc3VlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMDo0MC4wNTQ4OTY5MDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTMyNzU5NTAzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfSVBJUFwiLFxuICAgIFwiTVBMU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwaXBfcmN2XCIsXG4gICAgXCJtcGxzaXBfcmN2XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIHdoZXJlIGFuIHNrX2J1ZmYgKHNrYikgd2FzIG5vdCBmcmVlZCB3aGVuIGlwX3R1bl9yeF9kc3QoKSByZXR1cm5lZCBOVUxMLiBCeSBjaGFuZ2luZyAncmV0dXJuIDA7JyB0byAnZ290byBkcm9wOycsIHRoZSBza2IgaXMgbm93IHByb3Blcmx5IGZyZWVkIHZpYSBrZnJlZV9za2Ioc2tiKS4gVGhpcyBpcyBhIG1lbW9yeSBsZWFrIGlzc3VlLCB3aGljaCBpcyB0eXBpY2FsbHkgZGV0ZWN0ZWQgYnkga21lbWxlYWsuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MsIHdoaWNoIGFyZSB0aGUgdGFyZ2V0cyBvZiBLTVNBTi4gU3RhbmRhcmQgS0FTQU4gYW5kIGttZW1sZWFrIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIHR5cGUgb2YgaXNzdWUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgSVBJUCB0dW5uZWwgcmVjZWl2ZSBwYXRoIChgaXBpcF90dW5uZWxfcmN2YCkgYnkgcHJvcGVybHkgZnJlZWluZyB0aGUgc2tiIHdoZW4gYGlwX3R1bl9yeF9kc3RgIHJldHVybnMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgaGFuZGxlciwgd2hpY2ggaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTE6MjA6NDAuMDU0OTAxODQ3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQ0NDgwNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0MWVhYmUwYTdjYWM4MjJlNmU3YTFmNDdjNjk2OWU4NWY1OTcyZWYyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDE5IDExOjIwOjM5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuY1xcbmluZGV4IGI2NDMxOTRmNTdkMjkuLmRkZjYyYjQ1NTY2YjYgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBpcC5jXFxuKysrIGIvbmV0L2lwdjQvaXBpcC5jXFxuQEAgLTI0OCw3ICsyNDgsNyBAQCBzdGF0aWMgaW50IGlwaXBfdHVubmVsX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBpcHByb3RvKVxcbiBcXG4gXFx0XFx0XFx0dHVuX2RzdCA9IGlwX3R1bl9yeF9kc3Qoc2tiLCBmbGFncywgMCwgMCk7XFxuIFxcdFxcdFxcdGlmICghdHVuX2RzdClcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gXFx0XFx0XFx0aXBfdHVubmVsX21kX3VkcF9lbmNhcChza2IsIFxcdTAwMjZ0dW5fZHN0LVxcdTAwM2V1LnR1bl9pbmZvKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMDo0MC40OTAwODgzMDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MjY0OTI5MDk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfSVBJUFwiLFxuICAgIFwiTVBMU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwaXBfcmN2XCIsXG4gICAgXCJtcGxzaXBfcmN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgSVBJUCB0dW5uZWwgcmVjZWl2ZSBwYXRoIChgaXBpcF90dW5uZWxfcmN2YCkgYnkgcHJvcGVybHkgZnJlZWluZyB0aGUgc2tiIHdoZW4gYGlwX3R1bl9yeF9kc3RgIHJldHVybnMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgaGFuZGxlciwgd2hpY2ggaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDFlYWJlMGE3Y2FjODIyZTZlN2ExZjQ3YzY5NjllODVmNTk3MmVmMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDExOjIwOjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBpcC5jIGIvbmV0L2lwdjQvaXBpcC5jXG5pbmRleCBiNjQzMTk0ZjU3ZDI5Li5kZGY2MmI0NTU2NmI2IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBpcC5jXG4rKysgYi9uZXQvaXB2NC9pcGlwLmNcbkBAIC0yNDgsNyArMjQ4LDcgQEAgc3RhdGljIGludCBpcGlwX3R1bm5lbF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaXBwcm90bylcbiBcbiBcdFx0XHR0dW5fZHN0ID0gaXBfdHVuX3J4X2RzdChza2IsIGZsYWdzLCAwLCAwKTtcbiBcdFx0XHRpZiAoIXR1bl9kc3QpXG4tXHRcdFx0XHRyZXR1cm4gMDtcbitcdFx0XHRcdGdvdG8gZHJvcDtcbiBcdFx0XHRpcF90dW5uZWxfbWRfdWRwX2VuY2FwKHNrYiwgXHUwMDI2dHVuX2RzdC1cdTAwM2V1LnR1bl9pbmZvKTtcbiBcdFx0fVxuIFx0XHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTE6MjA6NDAuNDkwMDkwMTUyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgzMDM0ODQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipBbmFseXppbmcgYSBQb3RlbnRpYWwgSVBJUCBUdW5uZWxpbmcgSXNzdWUqKlxuXG5Pa2F5LCBzbyB0aGVyZSdzIGEgcGF0Y2ggZmxvYXRpbmcgYXJvdW5kIGZvciB0aGUgYG5ldC9pcHY0L2lwaXAuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBjaGFuZ2luZyB0aGUgcmV0dXJuIGxvZ2ljIHdpdGhpbiB0aGUgYGlwaXBfdHVubmVsX3JjdmAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIGZyb20gYSBzaW1wbGUgYHJldHVybiAwO2AgdG8gYSBgZ290byBkcm9wO2Agd2hlbiB0aGUgY29uZGl0aW9uIGAhdHVuX2RzdGAgaXMgbWV0LiBBbHJpZ2h0LCB0aGF0J3MgaW50ZXJlc3RpbmcuIFRoZSBmdW5jdGlvbidzIGdvaW5nIHRvIHRoZSBcImRyb3BcIiBsYWJlbCwgbm90IHJldHVybmluZyBhIFwic3VjY2Vzc1wiIChldmVuIGlmIHRoZSBwYWNrZXQgd291bGQgYmUgZGlzY2FyZGVkLilcblxuUmlnaHQsIGxldCdzIHB1bGwgdXAgdGhlIGBpcGlwX3R1bm5lbF9yY3ZgIGZ1bmN0aW9uIGluIGBuZXQvaXB2NC9pcGlwLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGB0dW5fZHN0YCByZXByZXNlbnRzIGluIHRoaXMgY29udGV4dC4gSXQncyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgdHVubmVsIGRlc3RpbmF0aW9uLCB0aGUgY29uZmlndXJlZCByZW1vdGUgZW5kcG9pbnQgZm9yIHRoZSBJUElQIHR1bm5lbC4gVGhlIGV4aXN0aW5nIGNvZGUsIGlmIGAhdHVuX2RzdGAgZXZhbHVhdGVzIHRvIHRydWUsIHdhcyBqdXN0IHJldHVybmluZyBhIHplcm8gdmFsdWUsIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IHNpZ25hbGluZyBhIFwicGFja2V0IHByb2Nlc3NlZCwgYnV0IGRpc2NhcmRlZFwiIChvciwgYXQgbGVhc3QsIG5vdCBleHBsaWNpdGx5IGhhbmRsZWQpLiBOb3csIHRoaXMgcGF0Y2ggd2FudHMgdG8gKmV4cGxpY2l0bHkqIGRyb3AgdGhlIHBhY2tldCB1c2luZyBhIGdvdG8gc3RhdGVtZW50LiBUaGF0IGhhcyBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBJdCBjb3VsZCBjaGFuZ2UgdGhlIGVycm9yIHJlcG9ydGluZyBvciBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoIGluIGNlcnRhaW4gc2NlbmFyaW9zLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIHdpbGwgaW1wYWN0IHRoZSBlcnJvciBoYW5kbGluZywgY291bnRlcnMsIG9yIHN0YXRpc3RpY3MuIEEgcmV0dXJuIDAgbWlnaHQgYmUgaW50ZXJwcmV0ZWQgZGlmZmVyZW50bHkgYnkgdGhlIGNhbGxpbmcgZnVuY3Rpb24uIEl0J3MgYWxzbyBpbXBvcnRhbnQgdG8gY29uc2lkZXI6IHdoeSBpcyBgIXR1bl9kc3RgIGV2ZW4gaGFwcGVuaW5nPyBJcyB0aGlzIGFuIGV4cGVjdGVkIHNjZW5hcmlvIChlLmcuLCBhIHR1bm5lbCBub3QgZnVsbHkgY29uZmlndXJlZCwgYSBtYWxmb3JtZWQgcGFja2V0LCBvciBhIHJhY2UgY29uZGl0aW9uKSBvciBpcyBpdCBpbmRpY2F0aXZlIG9mIGEgYmlnZ2VyIHByb2JsZW0/IEkgbmVlZCB0byBhbmFseXplIGhvdyB0aGlzIGNoYW5nZSBhZmZlY3RzIHRoZSBvdmVyYWxsIGJlaGF2aW9yIG9mIHRoZSBJUElQIHR1bm5lbGluZyBzdGFjay4gVGhpcyBpcyBhIHN1YnRsZSBjaGFuZ2UsIGJ1dCBjb3VsZCBpbXBhY3QgdGhpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDAyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMDo0NS4zMjA0NDA3NTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4MTM0NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwaXBfdHVubmVsX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcGlwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBpcC5jPTIwOT1zdGF0aWMgY29uc3Qgc3RydWN0IHRubF9wdGtfaW5mbyBtcGxzaXBfdHBpID0ge1xcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTIxNC1cXG5uZXQvaXB2NC9pcGlwLmM6MjE1OnN0YXRpYyBpbnQgaXBpcF90dW5uZWxfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHU4IGlwcHJvdG8pXFxubmV0L2lwdjQvaXBpcC5jLTIxNi17XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmM9MjY2PXN0YXRpYyBpbnQgaXBpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9pcGlwLmMtMjY3LXtcXG5uZXQvaXB2NC9pcGlwLmM6MjY4OlxcdHJldHVybiBpcGlwX3R1bm5lbF9yY3Yoc2tiLCBJUFBST1RPX0lQSVApO1xcbm5ldC9pcHY0L2lwaXAuYy0yNjktfVxcbi0tXFxubmV0L2lwdjQvaXBpcC5jPTI3Mj1zdGF0aWMgaW50IG1wbHNpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9pcGlwLmMtMjczLXtcXG5uZXQvaXB2NC9pcGlwLmM6Mjc0OlxcdHJldHVybiBpcGlwX3R1bm5lbF9yY3Yoc2tiLCBJUFBST1RPX01QTFMpO1xcbm5ldC9pcHY0L2lwaXAuYy0yNzUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMDo0NS41MTg1Nzk1MTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDM5OTY1NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBpcGlwX3R1bm5lbF9yY3ZgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IHRoZSBgaXBpcF90dW5uZWxfcmN2YCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gYG5ldC9pcHY0L2lwaXAuY2AgYW5kIGFpbWluZyBmb3IgYXJvdW5kIGxpbmUgMjQ4LiBJIGV4cGVjdCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgZ29pbmcgdG8gYmUgY2VudHJhbCB0byBob3cgSVBJUCB0dW5uZWxzIHJlY2VpdmUgZGF0YSwgYW5kIGJ5IGV4YW1pbmluZyB0aGlzIHNwZWNpZmljIHNlY3Rpb24sIEknbSBob3BpbmcgdG8gZ2FpbiBpbnNpZ2h0cyBpbnRvIGl0cyBpbm5lciB3b3JraW5ncyBhbmQgaG93IGl0IGhhbmRsZXMgaW5jb21pbmcgcGFja2V0cy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgaXQgZGlmZmVyZW50aWF0ZXMgYmV0d2VlbiBkaWZmZXJlbnQgdHVubmVsIHR5cGVzIGFuZCBob3cgaXQgZXh0cmFjdHMgdGhlIGlubmVyIHBheWxvYWQuIEl0IGlzIGltcG9ydGFudCB0byBjb21wYXJlIHRoaXMgd2l0aCBhIGJhc2VsaW5lIG9mIHN0YW5kYXJkIHBhY2tldCByZWNlcHRpb24gcHJvY2VkdXJlcy4gSSdtIGFsc28gaG9waW5nIHRvIHNwb3QgYW55IHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yLCBwZXJoYXBzLCBpZGVudGlmeSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyODI5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTE6MjA6NDguNTU4NTQ3OTQ0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBpcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxNTpcXHRzdGF0aWMgaW50IGlwaXBfdHVubmVsX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBpcHByb3RvKVxcbiAyMTY6XFx0e1xcbiAyMTc6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXFx1MDAzZWRldik7XFxuIDIxODpcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsX25ldCAqaXRuID0gbmV0X2dlbmVyaWMobmV0LCBpcGlwX25ldF9pZCk7XFxuIDIxOTpcXHRcXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncykgPSB7IH07XFxuIDIyMDpcXHRcXHRzdHJ1Y3QgbWV0YWRhdGFfZHN0ICp0dW5fZHN0ID0gTlVMTDtcXG4gMjIxOlxcdFxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbDtcXG4gMjIyOlxcdFxcdGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoO1xcbiAyMjM6XFx0XFxuIDIyNDpcXHRcXHRfX3NldF9iaXQoSVBfVFVOTkVMX05PX0tFWV9CSVQsIGZsYWdzKTtcXG4gMjI1OlxcdFxcbiAyMjY6XFx0XFx0aXBoID0gaXBfaGRyKHNrYik7XFxuIDIyNzpcXHRcXHR0dW5uZWwgPSBpcF90dW5uZWxfbG9va3VwKGl0biwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXgsIGZsYWdzLCBpcGgtXFx1MDAzZXNhZGRyLFxcbiAyMjg6XFx0XFx0XFx0XFx0XFx0ICBpcGgtXFx1MDAzZWRhZGRyLCAwKTtcXG4gMjI5OlxcdFxcdGlmICh0dW5uZWwpIHtcXG4gMjMwOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCB0bmxfcHRrX2luZm8gKnRwaTtcXG4gMjMxOlxcdFxcbiAyMzI6XFx0XFx0XFx0aWYgKHR1bm5lbC1cXHUwMDNlcGFybXMuaXBoLnByb3RvY29sICE9IGlwcHJvdG8gXFx1MDAyNlxcdTAwMjZcXG4gMjMzOlxcdFxcdFxcdCAgICB0dW5uZWwtXFx1MDAzZXBhcm1zLmlwaC5wcm90b2NvbCAhPSAwKVxcbiAyMzQ6XFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbiAyMzU6XFx0XFxuIDIzNjpcXHRcXHRcXHRpZiAoIXhmcm00X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSlcXG4gMjM3OlxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gMjM4OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19NUExTKVxcbiAyMzk6XFx0XFx0XFx0aWYgKGlwcHJvdG8gPT0gSVBQUk9UT19NUExTKVxcbiAyNDA6XFx0XFx0XFx0XFx0dHBpID0gXFx1MDAyNm1wbHNpcF90cGk7XFxuIDI0MTpcXHRcXHRcXHRlbHNlXFxuIDI0MjpcXHQjZW5kaWZcXG4gMjQzOlxcdFxcdFxcdFxcdHRwaSA9IFxcdTAwMjZpcGlwX3RwaTtcXG4gMjQ0OlxcdFxcdFxcdGlmIChpcHR1bm5lbF9wdWxsX2hlYWRlcihza2IsIDAsIHRwaS1cXHUwMDNlcHJvdG8sIGZhbHNlKSlcXG4gMjQ1OlxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gMjQ2OlxcdFxcdFxcdGlmICh0dW5uZWwtXFx1MDAzZWNvbGxlY3RfbWQpIHtcXG4gMjQ3OlxcdFxcdFxcdFxcdGlwX3R1bm5lbF9mbGFnc196ZXJvKGZsYWdzKTtcXG4gMjQ4OlxcdFxcbiAyNDk6XFx0XFx0XFx0XFx0dHVuX2RzdCA9IGlwX3R1bl9yeF9kc3Qoc2tiLCBmbGFncywgMCwgMCk7XFxuIDI1MDpcXHRcXHRcXHRcXHRpZiAoIXR1bl9kc3QpXFxuIDI1MTpcXHRcXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDI1MjpcXHRcXHRcXHRcXHRpcF90dW5uZWxfbWRfdWRwX2VuY2FwKHNrYiwgXFx1MDAyNnR1bl9kc3QtXFx1MDAzZXUudHVuX2luZm8pO1xcbiAyNTM6XFx0XFx0XFx0fVxcbiAyNTQ6XFx0XFx0XFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4gMjU1OlxcdFxcbiAyNTY6XFx0XFx0XFx0cmV0dXJuIGlwX3R1bm5lbF9yY3YodHVubmVsLCBza2IsIHRwaSwgdHVuX2RzdCwgbG9nX2Vjbl9lcnJvcik7XFxuIDI1NzpcXHRcXHR9XFxuIDI1ODpcXHRcXG4gMjU5OlxcdFxcdHJldHVybiAtMTtcXG4gMjYwOlxcdFxcbiAyNjE6XFx0ZHJvcDpcXG4gMjYyOlxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAyNjM6XFx0XFx0cmV0dXJuIDA7XFxuIDI2NDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDExOjIwOjQ4LjU1ODYzMTM3NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDk1MzMwNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTWVtb3J5IExlYWsgRml4IGluIElQSVAgVHVubmVsaW5nKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgY3J1Y2lhbC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBhZGRyZXNzaW5nIGEgbWVtb3J5IGxlYWsgaW4gYGlwaXBfdHVubmVsX3JjdmAuIFRoZXkncmUgcmVwbGFjaW5nIGEgc2ltcGxlIGByZXR1cm4gMDtgIHdpdGggYGdvdG8gZHJvcDtgIHdoaWNoIHRyaWdnZXJzIGEgYGtmcmVlX3NrYihza2IpO2AuIFRoaXMgbWVhbnMgdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSB3YXNuJ3QgYmVpbmcgcHJvcGVybHkgZnJlZWQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLiBUaGF0J3MgYSBjbGFzc2ljIG1lbW9yeSBtYW5hZ2VtZW50IG92ZXJzaWdodC5cblxuTm93LCBsZXQncyBzZWUsIGBpcGlwX3R1bm5lbF9yY3ZgIGlzIGludm9rZWQgYnkgYm90aCBgaXBpcF9yY3ZgIGFuZCBgbXBsc2lwX3JjdmAuIFNvLCB3ZSdyZSBmaXhpbmcgYSBwb3RlbnRpYWwgbGVhayBpbiBtdWx0aXBsZSBjb250ZXh0cyBoZXJlLCB3aGljaCBpcyBnb29kIHRvIHNlZS4gTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBmaXguIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIHBhdGggaXMgYWN0dWFsbHkgZW5hYmxlZCBpbiB0aGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24uIFJpZ2h0LCB0aGUgY29kZSBpbiBgbmV0L2lwdjQvaXBpcC5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfTkVUX0lQSVBgIGlzIGVuYWJsZWQuIFRoYXQgc2hvdWxkIGJlIGEgcXVpY2sgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMDo1Mi45NjgxNjc0NzdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMxNDc0Njk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwaXAub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfSVBfTVJPVVRFX0NPTU1PTikgKz0gaXBtcl9iYXNlLm9cXG5uZXQvaXB2NC9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfTkVUX0lQSVApICs9IGlwaXAub1xcbm5ldC9pcHY0L01ha2VmaWxlLTI2LWdyZS15IDo9IGdyZV9kZW11eC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDExOjIwOjUzLjI5OTY0NzY1M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NjgwNTQ4MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gdGhlIHRhc2sgYXQgaGFuZCwgcHJlc2VudGVkIGFzIHRob3VnaCBpdCdzIG15IG93biBpbnRlcm5hbCBkaWFsb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBJUElQIFR1bm5lbGluZyoqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gZXhhbWluZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVAtaW4tSVAgdHVubmVsaW5nLiBMZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIGlzIHdpdGhpbiB0aGUgbmV0d29ya2luZyBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIElQdjQgc2VjdGlvbi4gTXkgaW1tZWRpYXRlIGh1bmNoIGlzIHRoYXQgdGhlIGBDT05GSUdfTkVUX0lQSVBgIG9wdGlvbiB3aWxsIGJlIGRlZmluZWQgaW4gYG5ldC9pcHY0L0tjb25maWdgLiBXZSdsbCBuZWVkIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBjb25maXJtIHdoZXRoZXIgaXQgZXhpc3RzLCBhbmQgdGhlbiBjaGVjayBpdHMgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgaGVscCB0ZXh0LiBXZSB3aWxsIHdhbnQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGNvbmRpdGlvbnMgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSBJUElQIHN1cHBvcnQgaW4gdGhpcyBwYXJ0aWN1bGFyIGtlcm5lbCBidWlsZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM2NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDExOjIwOjU2LjI2NzcwNTA0MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4ODE0MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9JUElQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0xNDk9Y29uZmlnIElQX1BOUF9SQVJQXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTE2MS1cXG5uZXQvaXB2NC9LY29uZmlnOjE2Mjpjb25maWcgTkVUX0lQSVBcXG5uZXQvaXB2NC9LY29uZmlnLTE2My1cXHR0cmlzdGF0ZSBcXFwiSVA6IHR1bm5lbGluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTE6MjA6NTYuMzEzNTkyMzA4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTMyOTE3NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmUgZm9yIE5FVF9JUElQKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYE5FVF9JUElQYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIG5vdCBqdXN0IGFzc3VtZSBpdCdzIHN0YW5kYWxvbmUuIExldCdzIGRpZyBkZWVwZXIgYW5kIHZlcmlmeSB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcywgZWl0aGVyIGhhcmQgb3Igc29mdCwgdGhhdCBJJ20gb3Zlcmxvb2tpbmcuIFRoaXMgaXNuJ3QganVzdCBhYm91dCB0aGUgb2J2aW91cyBLY29uZmlnIGRlcGVuZGVuY2llcywgb2YgY291cnNlOyBJJ20gdGhpbmtpbmcgYWJvdXQgYnJvYWRlciBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBBcmUgdGhlcmUgc3BlY2lmaWMgZmVhdHVyZXMgb3IgbW9kdWxlcyB0aGF0IGBORVRfSVBJUGAgaW50ZXJhY3RzIHdpdGggaW5kaXJlY3RseT8gQ291bGQgZW5hYmxpbmcgdGhpcyBhZmZlY3QgdGhlIGJlaGF2aW9yIG9yIHBlcmZvcm1hbmNlIG9mIG90aGVyLCBzZWVtaW5nbHkgdW5yZWxhdGVkLCBwYXJ0cyBvZiB0aGUgc3lzdGVtPyBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEknbSB0aGlua2luZywgYXJlIHRoZXJlIGFueSBpbnRlcmFjdGlvbnMgd2l0aCByb3V0aW5nIHByb3RvY29scywgZmlyZXdhbGwgaW1wbGVtZW50YXRpb25zLCBvciBldmVuIGxvdy1sZXZlbCBoYXJkd2FyZSBkcml2ZXJzIHRoYXQgSSBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgY29uc2lkZXJpbmc/IFRpbWUgdG8gcHVsbCB1cCB0aGUgY3Jvc3MtcmVmZXJlbmNlcywgY2hlY2sgdGhlIGRvY3VtZW50YXRpb24sIGFuZCBtYXliZSBldmVuIHBlZWsgYXQgc29tZSByZWxldmFudCBrZXJuZWwgc291cmNlIGNvZGUgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gR290dGEgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgd2hlbiB0aGlzIHRoaW5nIGlzIGVuYWJsZWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NzUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMDo1OS44MjY4ODc2MTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjIsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjI6XFx0Y29uZmlnIE5FVF9JUElQXFxuIDE2MzpcXHRcXHR0cmlzdGF0ZSBcXFwiSVA6IHR1bm5lbGluZ1xcXCJcXG4gMTY0OlxcdFxcdHNlbGVjdCBJTkVUX1RVTk5FTFxcbiAxNjU6XFx0XFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG4gMTY2OlxcdFxcdGhlbHBcXG4gMTY3OlxcdFxcdCAgVHVubmVsaW5nIG1lYW5zIGVuY2Fwc3VsYXRpbmcgZGF0YSBvZiBvbmUgcHJvdG9jb2wgdHlwZSB3aXRoaW5cXG4gMTY4OlxcdFxcdCAgYW5vdGhlciBwcm90b2NvbCBhbmQgc2VuZGluZyBpdCBvdmVyIGEgY2hhbm5lbCB0aGF0IHVuZGVyc3RhbmRzIHRoZVxcbiAxNjk6XFx0XFx0ICBlbmNhcHN1bGF0aW5nIHByb3RvY29sLiBUaGlzIHBhcnRpY3VsYXIgdHVubmVsaW5nIGRyaXZlciBpbXBsZW1lbnRzXFxuIDE3MDpcXHRcXHQgIGVuY2Fwc3VsYXRpb24gb2YgSVAgd2l0aGluIElQLCB3aGljaCBzb3VuZHMga2luZCBvZiBwb2ludGxlc3MsIGJ1dFxcbiAxNzE6XFx0XFx0ICBjYW4gYmUgdXNlZnVsIGlmIHlvdSB3YW50IHRvIG1ha2UgeW91ciAob3Igc29tZSBvdGhlcikgbWFjaGluZVxcbiAxNzI6XFx0XFx0ICBhcHBlYXIgb24gYSBkaWZmZXJlbnQgbmV0d29yayB0aGFuIGl0IHBoeXNpY2FsbHkgaXMsIG9yIHRvIHVzZVxcbiAxNzM6XFx0XFx0ICBtb2JpbGUtSVAgZmFjaWxpdGllcyAoYWxsb3dpbmcgbGFwdG9wcyB0byBzZWFtbGVzc2x5IG1vdmUgYmV0d2VlblxcbiAxNzQ6XFx0XFx0ICBuZXR3b3JrcyB3aXRob3V0IGNoYW5naW5nIHRoZWlyIElQIGFkZHJlc3NlcykuXFxuIDE3NTpcXHRcXG4gMTc2OlxcdFxcdCAgU2F5aW5nIFkgdG8gdGhpcyBvcHRpb24gd2lsbCBwcm9kdWNlIHR3byBtb2R1bGVzICggPSBjb2RlIHdoaWNoIGNhblxcbiAxNzc6XFx0XFx0ICBiZSBpbnNlcnRlZCBpbiBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBydW5uaW5nIGtlcm5lbCB3aGVuZXZlciB5b3VcXG4gMTc4OlxcdFxcdCAgd2FudCkuIE1vc3QgcGVvcGxlIHdvbid0IG5lZWQgdGhpcyBhbmQgY2FuIHNheSBOLlxcbiAxNzk6XFx0XFxuIDE4MDpcXHRjb25maWcgTkVUX0lQR1JFX0RFTVVYXFxuIDE4MTpcXHRcXHR0cmlzdGF0ZSBcXFwiSVA6IEdSRSBkZW11bHRpcGxleGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMDo1OS44MjY5NzkzNDFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI0MzM5OTg3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBUaGlzIE5ldHdvcmsgUHJvdG9jb2wgRml4KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBtZW1vcnkgbGVhayB3aXRoaW4gYGlwaXBfdHVubmVsX3JjdmAsIHNwZWNpZmljYWxseSB3aGVuIGBpcF90dW5fcnhfZHN0YCByZXR1cm5zIE5VTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCwgYW5kIGl0J3MgaGFwcGVuaW5nIHdpdGhpbiBhIHJlYWNoYWJsZSBuZXR3b3JrIHByb3RvY29sIGhhbmRsZXIg4oCTIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoaXMgYXMgYSBjcml0aWNhbCBhcmVhLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBmdXp6aW5nIGBpcGlwX3R1bm5lbF9yY3ZgIGl0c2VsZi4gSeKAmWxsIG1ha2Ugc3VyZSB0aGUgYE5FVF9JUElQYCBjb25maWcgaXMgZW5hYmxlZC4gSG93ZXZlciwgd2FpdCwgYGlwaXBfdHVubmVsX3JjdmAgaXMgc3RhdGljISBUaGF0IGNoYW5nZXMgdGhlIGdhbWUgYSBiaXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY2FsbHMgKml0Kiwgb3IgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBpbnZvbHZlZCB3aGljaCBhbHNvIGFyZSBwYXJ0IG9mIHRoaXMgbmV0d29yayBwYXRoIHRoYXQgbWF5IG5vdCBiZSBzdGF0aWMuIEdpdmVuIHRoYXQgYGlwaXBfdHVubmVsX3JjdmAgaXMgaW50ZXJuYWwsIEkgc2hvdWxkIGludmVzdGlnYXRlIGBpcGlwX3JjdmAgYW5kIGBtcGxzaXBfcmN2YCwgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGFyZSBhbHNvIHN0YXRpYy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIHRvIHNlZSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYW5kIHdoZXRoZXIgdGhlIHN0YXRpYyBuYXR1cmUgb2YgYGlwaXBfdHVubmVsX3JjdmAgaW1wbGllcyBhbnkgbGltaXRhdGlvbnMgb24gdHJpZ2dlcmluZyB0aGUgYnVnLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzAwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTE6MjE6MDQuMDcwMzgxODMxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTU5MjU4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcGlwX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcGlwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBpcC5jPTIxNT1zdGF0aWMgaW50IGlwaXBfdHVubmVsX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBpcHByb3RvKVxcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTI2NS1cXG5uZXQvaXB2NC9pcGlwLmM6MjY2OnN0YXRpYyBpbnQgaXBpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9pcGlwLmMtMjY3LXtcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYz02MTY9c3RhdGljIHN0cnVjdCB4ZnJtX3R1bm5lbCBpcGlwX2hhbmRsZXIgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvaXB2NC9pcGlwLmM6NjE3OlxcdC5oYW5kbGVyXFx0PVxcdGlwaXBfcmN2LFxcbm5ldC9pcHY0L2lwaXAuYy02MTgtXFx0LmVycl9oYW5kbGVyXFx0PVxcdGlwaXBfZXJyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMTowNC4xMTk5ODMyMjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0OTM5Mjk2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIEhhbmRsZXIgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgc28gdGhlIGFyY2hpdGVjdHVyZSBkZWZpbmVzIHRoZXNlIHRoaW5ncyBhcyBcInN0YXRpYyxcIiBidXQgdGhleSdyZSAqcmVnaXN0ZXJlZCogYXMgaGFuZGxlcnMuIFRoYXQncyBhIGtleSBkaXN0aW5jdGlvbiBJIG5lZWQgdG8gZ3Jhc3AgdGhvcm91Z2hseS4gTXkgZmlyc3QgcXVlc3Rpb246IGFyZSB3ZSBkZWFsaW5nIHdpdGggZXhjbHVzaXZlbHkgc3RhdGljIG1ldGhvZHMgaGVyZSwgb3IgYXJlIHRoZXJlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGx1cmtpbmcgYXJvdW5kIHNvbWV3aGVyZT8gVGhlIGFzc3VtcHRpb24sIGJhc2VkIG9uIHRoZWlyIGRlY2xhcmVkIHN0YXR1cywgd291bGQgYmUgdGhhdCB0aGVzZSBhcmUgbWVhbnQgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGNsYXNzIG1lbWJlcnMuIEJ1dCBsZXQncyB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uIGFuZCBlbnN1cmUgd2UgaGF2ZSBmdWxsIGtub3dsZWRnZSBvZiB0aGUgY29tcG9zaXRpb24uIElmIHRoZXJlICphcmUqIG5vbi1zdGF0aWMgZWxlbWVudHMsIHRoYXQgaW50cm9kdWNlcyBhIHdob2xlIGxheWVyIG9mIGNvbnRleHQgdGhhdCB3b3VsZCBuZWVkIHRvIGJlIGFkZHJlc3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkzMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDExOjIxOjA3LjU2OTM3ODYwNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4OTcwOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBpcF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBpcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwaXAuYz0xMTc9TU9EVUxFX1BBUk1fREVTQyhsb2dfZWNuX2Vycm9yLCBcXFwiTG9nIHBhY2tldHMgcmVjZWl2ZWQgd2l0aCBjb3JydXB0ZWQgRUNOXFxcIik7XFxubmV0L2lwdjQvaXBpcC5jLTExOC1cXG5uZXQvaXB2NC9pcGlwLmM6MTE5OnN0YXRpYyB1bnNpZ25lZCBpbnQgaXBpcF9uZXRfaWQgX19yZWFkX21vc3RseTtcXG5uZXQvaXB2NC9pcGlwLmMtMTIwLVxcbm5ldC9pcHY0L2lwaXAuYzoxMjE6c3RhdGljIGludCBpcGlwX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbm5ldC9pcHY0L2lwaXAuYzoxMjI6c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwaXBfbGlua19vcHMgX19yZWFkX21vc3RseTtcXG5uZXQvaXB2NC9pcGlwLmMtMTIzLVxcbm5ldC9pcHY0L2lwaXAuYzoxMjQ6c3RhdGljIGludCBpcGlwX2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5mbylcXG5uZXQvaXB2NC9pcGlwLmMtMTI1LXtcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYy0xMzAtXFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXFx1MDAzZWRldik7XFxubmV0L2lwdjQvaXBpcC5jOjEzMTpcXHRzdHJ1Y3QgaXBfdHVubmVsX25ldCAqaXRuID0gbmV0X2dlbmVyaWMobmV0LCBpcGlwX25ldF9pZCk7XFxubmV0L2lwdjQvaXBpcC5jLTEzMi1cXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9IChjb25zdCBzdHJ1Y3QgaXBoZHIgKilza2ItXFx1MDAzZWRhdGE7XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtMjAyLVxcbm5ldC9pcHY0L2lwaXAuYzoyMDM6c3RhdGljIGNvbnN0IHN0cnVjdCB0bmxfcHRrX2luZm8gaXBpcF90cGkgPSB7XFxubmV0L2lwdjQvaXBpcC5jLTIwNC1cXHQvKiBubyB0dW5uZWwgaW5mbyByZXF1aXJlZCBmb3IgaXBpcC4gKi9cXG4tLVxcbm5ldC9pcHY0L2lwaXAuYz0yMDk9c3RhdGljIGNvbnN0IHN0cnVjdCB0bmxfcHRrX2luZm8gbXBsc2lwX3RwaSA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYy0yMTQtXFxubmV0L2lwdjQvaXBpcC5jOjIxNTpzdGF0aWMgaW50IGlwaXBfdHVubmVsX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBpcHByb3RvKVxcbm5ldC9pcHY0L2lwaXAuYy0yMTYte1xcbm5ldC9pcHY0L2lwaXAuYy0yMTctXFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXFx1MDAzZWRldik7XFxubmV0L2lwdjQvaXBpcC5jOjIxODpcXHRzdHJ1Y3QgaXBfdHVubmVsX25ldCAqaXRuID0gbmV0X2dlbmVyaWMobmV0LCBpcGlwX25ldF9pZCk7XFxubmV0L2lwdjQvaXBpcC5jLTIxOS1cXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncykgPSB7IH07XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtMjQyLSNlbmRpZlxcbm5ldC9pcHY0L2lwaXAuYzoyNDM6XFx0XFx0XFx0dHBpID0gXFx1MDAyNmlwaXBfdHBpO1xcbm5ldC9pcHY0L2lwaXAuYy0yNDQtXFx0XFx0aWYgKGlwdHVubmVsX3B1bGxfaGVhZGVyKHNrYiwgMCwgdHBpLVxcdTAwM2Vwcm90bywgZmFsc2UpKVxcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTI2NS1cXG5uZXQvaXB2NC9pcGlwLmM6MjY2OnN0YXRpYyBpbnQgaXBpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9pcGlwLmMtMjY3LXtcXG5uZXQvaXB2NC9pcGlwLmM6MjY4OlxcdHJldHVybiBpcGlwX3R1bm5lbF9yY3Yoc2tiLCBJUFBST1RPX0lQSVApO1xcbm5ldC9pcHY0L2lwaXAuYy0yNjktfVxcbi0tXFxubmV0L2lwdjQvaXBpcC5jPTI3Mj1zdGF0aWMgaW50IG1wbHNpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9pcGlwLmMtMjczLXtcXG5uZXQvaXB2NC9pcGlwLmM6Mjc0OlxcdHJldHVybiBpcGlwX3R1bm5lbF9yY3Yoc2tiLCBJUFBST1RPX01QTFMpO1xcbm5ldC9pcHY0L2lwaXAuYy0yNzUtfVxcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTI4MS0gKi9cXG5uZXQvaXB2NC9pcGlwLmM6MjgyOnN0YXRpYyBuZXRkZXZfdHhfdCBpcGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvaXBpcC5jLTI4My1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYy0zMjUtXFxubmV0L2lwdjQvaXBpcC5jOjMyNjpzdGF0aWMgYm9vbCBpcGlwX3R1bm5lbF9pb2N0bF92ZXJpZnlfcHJvdG9jb2wodTggaXBwcm90bylcXG5uZXQvaXB2NC9pcGlwLmMtMzI3LXtcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYz0zNDA9c3RhdGljIGludFxcbm5ldC9pcHY0L2lwaXAuYzozNDE6aXBpcF90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLCBpbnQgY21kKVxcbm5ldC9pcHY0L2lwaXAuYy0zNDIte1xcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTM0NC1cXHRcXHRpZiAocC1cXHUwMDNlaXBoLnZlcnNpb24gIT0gNCB8fFxcbm5ldC9pcHY0L2lwaXAuYzozNDU6XFx0XFx0ICAgICFpcGlwX3R1bm5lbF9pb2N0bF92ZXJpZnlfcHJvdG9jb2wocC1cXHUwMDNlaXBoLnByb3RvY29sKSB8fFxcbm5ldC9pcHY0L2lwaXAuYy0zNDYtXFx0XFx0ICAgIHAtXFx1MDAzZWlwaC5paGwgIT0gNSB8fCAocC1cXHUwMDNlaXBoLmZyYWdfb2ZmIFxcdTAwMjYgaHRvbnMofklQX0RGKSkpXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtMzU1LVxcbm5ldC9pcHY0L2lwaXAuYzozNTY6c3RhdGljIGludCBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxubmV0L2lwdjQvaXBpcC5jLTM1Ny1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtMzc5LVxcbm5ldC9pcHY0L2lwaXAuYzozODA6c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcGlwX25ldGRldl9vcHMgPSB7XFxubmV0L2lwdjQvaXBpcC5jOjM4MTpcXHQubmRvX2luaXQgICAgICAgPSBpcGlwX3R1bm5lbF9pbml0LFxcbm5ldC9pcHY0L2lwaXAuYy0zODItXFx0Lm5kb191bmluaXQgICAgID0gaXBfdHVubmVsX3VuaW5pdCxcXG5uZXQvaXB2NC9pcGlwLmM6MzgzOlxcdC5uZG9fc3RhcnRfeG1pdFxcdD0gaXBpcF90dW5uZWxfeG1pdCxcXG5uZXQvaXB2NC9pcGlwLmMtMzg0LVxcdC5uZG9fc2lvY2RldnByaXZhdGUgPSBpcF90dW5uZWxfc2lvY2RldnByaXZhdGUsXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtMzg3LVxcdC5uZG9fZ2V0X2lmbGluayA9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxcbm5ldC9pcHY0L2lwaXAuYzozODg6XFx0Lm5kb190dW5uZWxfY3RsXFx0PSBpcGlwX3R1bm5lbF9jdGwsXFxubmV0L2lwdjQvaXBpcC5jOjM4OTpcXHQubmRvX2ZpbGxfZm9yd2FyZF9wYXRoID0gaXBpcF9maWxsX2ZvcndhcmRfcGF0aCxcXG5uZXQvaXB2NC9pcGlwLmMtMzkwLX07XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtMzk3LVxcbm5ldC9pcHY0L2lwaXAuYzozOTg6c3RhdGljIHZvaWQgaXBpcF90dW5uZWxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvaXB2NC9pcGlwLmMtMzk5LXtcXG5uZXQvaXB2NC9pcGlwLmM6NDAwOlxcdGRldi1cXHUwMDNlbmV0ZGV2X29wc1xcdFxcdD0gXFx1MDAyNmlwaXBfbmV0ZGV2X29wcztcXG5uZXQvaXB2NC9pcGlwLmMtNDAxLVxcdGRldi1cXHUwMDNlaGVhZGVyX29wc1xcdFxcdD0gXFx1MDAyNmlwX3R1bm5lbF9oZWFkZXJfb3BzO1xcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTQxMC1cXHRkZXYtXFx1MDAzZWh3X2ZlYXR1cmVzXFx0fD0gSVBJUF9GRUFUVVJFUztcXG5uZXQvaXB2NC9pcGlwLmM6NDExOlxcdGlwX3R1bm5lbF9zZXR1cChkZXYsIGlwaXBfbmV0X2lkKTtcXG5uZXQvaXB2NC9pcGlwLmMtNDEyLX1cXG5uZXQvaXB2NC9pcGlwLmMtNDEzLVxcbm5ldC9pcHY0L2lwaXAuYzo0MTQ6c3RhdGljIGludCBpcGlwX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2lwdjQvaXBpcC5jLTQxNS17XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNDI1LVxcbm5ldC9pcHY0L2lwaXAuYzo0MjY6c3RhdGljIGludCBpcGlwX3R1bm5lbF92YWxpZGF0ZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxubmV0L2lwdjQvaXBpcC5jLTQyNy1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNDQwLVxcbm5ldC9pcHY0L2lwaXAuYzo0NDE6c3RhdGljIHZvaWQgaXBpcF9uZXRsaW5rX3Bhcm1zKHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcXG5uZXQvaXB2NC9pcGlwLmMtNDQyLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcGFybXMsXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNDYzLVxcbm5ldC9pcHY0L2lwaXAuYzo0NjQ6c3RhdGljIGludCBpcGlwX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXB2NC9pcGlwLmMtNDY1LVxcdFxcdFxcdHN0cnVjdCBydG5sX25ld2xpbmtfcGFyYW1zICpwYXJhbXMsXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNDgxLVxcbm5ldC9pcHY0L2lwaXAuYzo0ODI6XFx0aXBpcF9uZXRsaW5rX3Bhcm1zKGRhdGEsIFxcdTAwMjZwLCBcXHUwMDI2dC1cXHUwMDNlY29sbGVjdF9tZCwgXFx1MDAyNmZ3bWFyayk7XFxubmV0L2lwdjQvaXBpcC5jLTQ4My1cXHRyZXR1cm4gaXBfdHVubmVsX25ld2xpbmsocGFyYW1zLVxcdTAwM2VsaW5rX25ldCA/IDogZGV2X25ldChkZXYpLCBkZXYsIHRiLCBcXHUwMDI2cCxcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYy00ODYtXFxubmV0L2lwdjQvaXBpcC5jOjQ4NzpzdGF0aWMgaW50IGlwaXBfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbm5ldC9pcHY0L2lwaXAuYy00ODgtXFx0XFx0XFx0ICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTUwNi1cXG5uZXQvaXB2NC9pcGlwLmM6NTA3OlxcdGlwaXBfbmV0bGlua19wYXJtcyhkYXRhLCBcXHUwMDI2cCwgXFx1MDAyNmNvbGxlY3RfbWQsIFxcdTAwMjZmd21hcmspO1xcbm5ldC9pcHY0L2lwaXAuYy01MDgtXFx0aWYgKGNvbGxlY3RfbWQpXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNTE3LVxcbm5ldC9pcHY0L2lwaXAuYzo1MTg6c3RhdGljIHNpemVfdCBpcGlwX2dldF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2lwdjQvaXBpcC5jLTUxOS17XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNTQ5LVxcbm5ldC9pcHY0L2lwaXAuYzo1NTA6c3RhdGljIGludCBpcGlwX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9pcHY0L2lwaXAuYy01NTEte1xcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTU4NC1cXG5uZXQvaXB2NC9pcGlwLmM6NTg1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBpcGlwX3BvbGljeVtJRkxBX0lQVFVOX01BWCArIDFdID0ge1xcbm5ldC9pcHY0L2lwaXAuYy01ODYtXFx0W0lGTEFfSVBUVU5fTElOS11cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNjAwLVxcbm5ldC9pcHY0L2lwaXAuYzo2MDE6c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwaXBfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvaXB2NC9pcGlwLmMtNjAyLVxcdC5raW5kXFx0XFx0PSBcXFwiaXBpcFxcXCIsXFxubmV0L2lwdjQvaXBpcC5jLTYwMy1cXHQubWF4dHlwZVxcdD0gSUZMQV9JUFRVTl9NQVgsXFxubmV0L2lwdjQvaXBpcC5jOjYwNDpcXHQucG9saWN5XFx0XFx0PSBpcGlwX3BvbGljeSxcXG5uZXQvaXB2NC9pcGlwLmMtNjA1LVxcdC5wcml2X3NpemVcXHQ9IHNpemVvZihzdHJ1Y3QgaXBfdHVubmVsKSxcXG5uZXQvaXB2NC9pcGlwLmM6NjA2OlxcdC5zZXR1cFxcdFxcdD0gaXBpcF90dW5uZWxfc2V0dXAsXFxubmV0L2lwdjQvaXBpcC5jOjYwNzpcXHQudmFsaWRhdGVcXHQ9IGlwaXBfdHVubmVsX3ZhbGlkYXRlLFxcbm5ldC9pcHY0L2lwaXAuYzo2MDg6XFx0Lm5ld2xpbmtcXHQ9IGlwaXBfbmV3bGluayxcXG5uZXQvaXB2NC9pcGlwLmM6NjA5OlxcdC5jaGFuZ2VsaW5rXFx0PSBpcGlwX2NoYW5nZWxpbmssXFxubmV0L2lwdjQvaXBpcC5jLTYxMC1cXHQuZGVsbGlua1xcdD0gaXBfdHVubmVsX2RlbGxpbmssXFxubmV0L2lwdjQvaXBpcC5jOjYxMTpcXHQuZ2V0X3NpemVcXHQ9IGlwaXBfZ2V0X3NpemUsXFxubmV0L2lwdjQvaXBpcC5jOjYxMjpcXHQuZmlsbF9pbmZvXFx0PSBpcGlwX2ZpbGxfaW5mbyxcXG5uZXQvaXB2NC9pcGlwLmMtNjEzLVxcdC5nZXRfbGlua19uZXRcXHQ9IGlwX3R1bm5lbF9nZXRfbGlua19uZXQsXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNjE1LVxcbm5ldC9pcHY0L2lwaXAuYzo2MTY6c3RhdGljIHN0cnVjdCB4ZnJtX3R1bm5lbCBpcGlwX2hhbmRsZXIgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvaXB2NC9pcGlwLmM6NjE3OlxcdC5oYW5kbGVyXFx0PVxcdGlwaXBfcmN2LFxcbm5ldC9pcHY0L2lwaXAuYzo2MTg6XFx0LmVycl9oYW5kbGVyXFx0PVxcdGlwaXBfZXJyLFxcbm5ldC9pcHY0L2lwaXAuYy02MTktXFx0LnByaW9yaXR5XFx0PVxcdDEsXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmM9NjIzPXN0YXRpYyBzdHJ1Y3QgeGZybV90dW5uZWwgbXBsc2lwX2hhbmRsZXIgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvaXB2NC9pcGlwLmMtNjI0LVxcdC5oYW5kbGVyXFx0PVxcdG1wbHNpcF9yY3YsXFxubmV0L2lwdjQvaXBpcC5jOjYyNTpcXHQuZXJyX2hhbmRsZXJcXHQ9XFx0aXBpcF9lcnIsXFxubmV0L2lwdjQvaXBpcC5jLTYyNi1cXHQucHJpb3JpdHlcXHQ9XFx0MSxcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYy02MjktXFxubmV0L2lwdjQvaXBpcC5jOjYzMDpzdGF0aWMgaW50IF9fbmV0X2luaXQgaXBpcF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L2lwdjQvaXBpcC5jLTYzMS17XFxubmV0L2lwdjQvaXBpcC5jOjYzMjpcXHRyZXR1cm4gaXBfdHVubmVsX2luaXRfbmV0KG5ldCwgaXBpcF9uZXRfaWQsIFxcdTAwMjZpcGlwX2xpbmtfb3BzLCBcXFwidHVubDBcXFwiKTtcXG5uZXQvaXB2NC9pcGlwLmMtNjMzLX1cXG5uZXQvaXB2NC9pcGlwLmMtNjM0LVxcbm5ldC9pcHY0L2lwaXAuYzo2MzU6c3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcGlwX2V4aXRfcnRubChzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L2lwdjQvaXBpcC5jLTYzNi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpkZXZfdG9fa2lsbClcXG5uZXQvaXB2NC9pcGlwLmMtNjM3LXtcXG5uZXQvaXB2NC9pcGlwLmM6NjM4OlxcdGlwX3R1bm5lbF9kZWxldGVfbmV0KG5ldCwgaXBpcF9uZXRfaWQsIFxcdTAwMjZpcGlwX2xpbmtfb3BzLCBkZXZfdG9fa2lsbCk7XFxubmV0L2lwdjQvaXBpcC5jLTYzOS19XFxubmV0L2lwdjQvaXBpcC5jLTY0MC1cXG5uZXQvaXB2NC9pcGlwLmM6NjQxOnN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXBpcF9uZXRfb3BzID0ge1xcbm5ldC9pcHY0L2lwaXAuYzo2NDI6XFx0LmluaXQgPSBpcGlwX2luaXRfbmV0LFxcbm5ldC9pcHY0L2lwaXAuYzo2NDM6XFx0LmV4aXRfcnRubCA9IGlwaXBfZXhpdF9ydG5sLFxcbm5ldC9pcHY0L2lwaXAuYzo2NDQ6XFx0LmlkICAgPSBcXHUwMDI2aXBpcF9uZXRfaWQsXFxubmV0L2lwdjQvaXBpcC5jLTY0NS1cXHQuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXBfdHVubmVsX25ldCksXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNjQ3LVxcbm5ldC9pcHY0L2lwaXAuYzo2NDg6c3RhdGljIGludCBfX2luaXQgaXBpcF9pbml0KHZvaWQpXFxubmV0L2lwdjQvaXBpcC5jLTY0OS17XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNjUzLVxcbm5ldC9pcHY0L2lwaXAuYzo2NTQ6XFx0ZXJyID0gcmVnaXN0ZXJfcGVybmV0X2RldmljZShcXHUwMDI2aXBpcF9uZXRfb3BzKTtcXG5uZXQvaXB2NC9pcGlwLmMtNjU1LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbm5ldC9pcHY0L2lwaXAuYy02NTYtXFx0XFx0cmV0dXJuIGVycjtcXG5uZXQvaXB2NC9pcGlwLmM6NjU3OlxcdGVyciA9IHhmcm00X3R1bm5lbF9yZWdpc3RlcihcXHUwMDI2aXBpcF9oYW5kbGVyLCBBRl9JTkVUKTtcXG5uZXQvaXB2NC9pcGlwLmMtNjU4LVxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxubmV0L2lwdjQvaXBpcC5jLTY1OS1cXHRcXHRwcl9pbmZvKFxcXCIlczogY2FuJ3QgcmVnaXN0ZXIgdHVubmVsXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxubmV0L2lwdjQvaXBpcC5jOjY2MDpcXHRcXHRnb3RvIHhmcm1fdHVubmVsX2lwaXBfZmFpbGVkO1xcbm5ldC9pcHY0L2lwaXAuYy02NjEtXFx0fVxcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTY2OC0jZW5kaWZcXG5uZXQvaXB2NC9pcGlwLmM6NjY5OlxcdGVyciA9IHJ0bmxfbGlua19yZWdpc3RlcihcXHUwMDI2aXBpcF9saW5rX29wcyk7XFxubmV0L2lwdjQvaXBpcC5jLTY3MC1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYy02ODEtI2VuZGlmXFxubmV0L2lwdjQvaXBpcC5jOjY4MjpcXHR4ZnJtNF90dW5uZWxfZGVyZWdpc3RlcihcXHUwMDI2aXBpcF9oYW5kbGVyLCBBRl9JTkVUKTtcXG5uZXQvaXB2NC9pcGlwLmM6NjgzOnhmcm1fdHVubmVsX2lwaXBfZmFpbGVkOlxcbm5ldC9pcHY0L2lwaXAuYzo2ODQ6XFx0dW5yZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKFxcdTAwMjZpcGlwX25ldF9vcHMpO1xcbm5ldC9pcHY0L2lwaXAuYy02ODUtXFx0Z290byBvdXQ7XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNjg3LVxcbm5ldC9pcHY0L2lwaXAuYzo2ODg6c3RhdGljIHZvaWQgX19leGl0IGlwaXBfZmluaSh2b2lkKVxcbm5ldC9pcHY0L2lwaXAuYy02ODkte1xcbm5ldC9pcHY0L2lwaXAuYzo2OTA6XFx0cnRubF9saW5rX3VucmVnaXN0ZXIoXFx1MDAyNmlwaXBfbGlua19vcHMpO1xcbm5ldC9pcHY0L2lwaXAuYzo2OTE6XFx0aWYgKHhmcm00X3R1bm5lbF9kZXJlZ2lzdGVyKFxcdTAwMjZpcGlwX2hhbmRsZXIsIEFGX0lORVQpKVxcbm5ldC9pcHY0L2lwaXAuYy02OTItXFx0XFx0cHJfaW5mbyhcXFwiJXM6IGNhbid0IGRlcmVnaXN0ZXIgdHVubmVsXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNjk2LSNlbmRpZlxcbm5ldC9pcHY0L2lwaXAuYzo2OTc6XFx0dW5yZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKFxcdTAwMjZpcGlwX25ldF9vcHMpO1xcbm5ldC9pcHY0L2lwaXAuYy02OTgtfVxcbm5ldC9pcHY0L2lwaXAuYy02OTktXFxubmV0L2lwdjQvaXBpcC5jOjcwMDptb2R1bGVfaW5pdChpcGlwX2luaXQpO1xcbm5ldC9pcHY0L2lwaXAuYzo3MDE6bW9kdWxlX2V4aXQoaXBpcF9maW5pKTtcXG5uZXQvaXB2NC9pcGlwLmMtNzAyLU1PRFVMRV9ERVNDUklQVElPTihcXFwiSVAvSVAgcHJvdG9jb2wgZGVjb2RlciBsaWJyYXJ5XFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDExOjIxOjA3LjYxNzI4MDUzMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjczNjIxMTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIElQSVAgVHVubmVsIFJlY2VpdmVyIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYmVzdCB0byBmdXp6IHRoZSBJUElQIHR1bm5lbCByZWNlaXZlIHBhdGgsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoYXQgbWVtb3J5IGxlYWsgZml4LiBUaGUgZnVuY3Rpb25zIGBpcGlwX3JjdmAgYW5kIGBtcGxzaXBfcmN2YCBpbW1lZGlhdGVseSBjYXVnaHQgbXkgZXllLiBUaGV5J3JlIHJlZ2lzdGVyZWQgdGhyb3VnaCBgeGZybTRfdHVubmVsX3JlZ2lzdGVyYCwgd2hpY2ggbWFrZXMgdGhlbSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLiBIbW0sIGJ1dCB0aGV5J3JlICpzdGF0aWMqLiBOb3csIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIExldCBtZSB0aGluay4uLiB3YWl0LCBpZiB0aGV5IGFyZSBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgdG8gYHhmcm00X3R1bm5lbF9yZWdpc3RlcmAsIHRoZW4gdGhlIGNvbXBpbGVyICpjYW4ndCogaW5saW5lIHRoZW0uIFRoZXkgaGF2ZSB0byBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIGV2ZW4gaWYgc3RhdGljLiBFeGNlbGxlbnQuIFNvLCBgaXBpcF9yY3ZgIGFuZCBgbXBsc2lwX3JjdmAgYXJlIGFjdHVhbGx5IGdvb2QgY2FuZGlkYXRlcyBmb3IgYEZvY3VzU3ltYm9sc2AuXG5cbkkgd2FzIGEgYml0IHdvcnJpZWQgYWJvdXQgYGlwaXBfdHVubmVsX3JjdmAsIHNpbmNlIHRoYXQgc2VlbXMgdG8gYmUgdGhlIG1haW4gZnVuY3Rpb24gd2hlcmUgdGhlIHBhdGNoIGlzLiBCdXQgc2luY2UgYGlwaXBfcmN2YCBhbmQgYG1wbHNpcF9yY3ZgIGFyZSB0aGUgaGFuZGxlcnMgdGhhdCBnZXQgcmVnaXN0ZXJlZCwgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGNhbGwgYGlwaXBfdHVubmVsX3JjdmAsIEkgdGhpbmsgdGhlc2UgYXJlIGJldHRlciBjaG9pY2VzIGZvciBmdXp6aW5nLiBgaXBpcF90dW5uZWxfcmN2YCBtaWdodCBiZSBpbmxpbmVkIHdpdGhpbiB0aGVtLCBidXQgbGV0J3Mgc3RpY2sgd2l0aCB0aGUgZW50cnlwb2ludHMuIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGBpcF90dW5uZWxfcmN2YCBpc24ndCBhIG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmUuLi4gWWVwLCBpdCdzIHRoZXJlIGluIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AgYnV0IHRoZSBpbXBvcnRhbnQgY2hhbmdlcyBhcmUgaW4gYGlwaXBfdHVubmVsX3JjdmAhXG5cblNvLCBJJ20gZ29pbmcgd2l0aCBgaXBpcF9yY3ZgIGFuZCBgbXBsc2lwX3JjdmAgYXMgbXkgYEZvY3VzU3ltYm9sc2AuIFRoZXkgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIGNvdmVyaW5nIHRoZSBwYXRoLiBBcyBmb3IgY29uZmlndXJhdGlvbiwgYE5FVF9JUElQYCBpcyBjbGVhcmx5IG5lZWRlZC4gSSdsbCBhbHNvIGRvdWJsZS1jaGVjaywgYW5kIGBDT05GSUdfTVBMU2AgaXMgYWxzbyByZXF1aXJlZCBiZWNhdXNlIG9mIGBtcGxzaXBfcmN2YC4gSSBzaG91bGQgY2hlY2sgYG5ldC9pcHY0L2lwaXAuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuXG5cblRoZSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZDogaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgbmV0d29yayBwcm90b2NvbCBoYW5kbGVyIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSByZWNlaXZlIHBhdGgsIHNvIGRlZmluaXRlbHkgd29ydGggZnV6emluZyB0byBkZXRlY3QgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIG90aGVyIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1OTgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTE6MjE6MTQuODkwOTA0MTY0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQ2MzUxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTVBMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcGlwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBpcC5jPTIwMz1zdGF0aWMgY29uc3Qgc3RydWN0IHRubF9wdGtfaW5mbyBpcGlwX3RwaSA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYy0yMDctXFxubmV0L2lwdjQvaXBpcC5jOjIwODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBMUylcXG5uZXQvaXB2NC9pcGlwLmMtMjA5LXN0YXRpYyBjb25zdCBzdHJ1Y3QgdG5sX3B0a19pbmZvIG1wbHNpcF90cGkgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmM9MjE1PXN0YXRpYyBpbnQgaXBpcF90dW5uZWxfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHU4IGlwcHJvdG8pXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtMjM3LVxcdFxcdFxcdGdvdG8gZHJvcDtcXG5uZXQvaXB2NC9pcGlwLmM6MjM4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUExTKVxcbm5ldC9pcHY0L2lwaXAuYy0yMzktXFx0XFx0aWYgKGlwcHJvdG8gPT0gSVBQUk9UT19NUExTKVxcbi0tXFxubmV0L2lwdjQvaXBpcC5jPTI2Nj1zdGF0aWMgaW50IGlwaXBfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtMjcwLVxcbm5ldC9pcHY0L2lwaXAuYzoyNzE6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QTFMpXFxubmV0L2lwdjQvaXBpcC5jLTI3Mi1zdGF0aWMgaW50IG1wbHNpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYz0yODI9c3RhdGljIG5ldGRldl90eF90IGlwaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYy0yOTUtXFx0XFx0YnJlYWs7XFxubmV0L2lwdjQvaXBpcC5jOjI5NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBMUylcXG5uZXQvaXB2NC9pcGlwLmMtMjk3LVxcdGNhc2UgaHRvbnMoRVRIX1BfTVBMU19VQyk6XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmM9MzI2PXN0YXRpYyBib29sIGlwaXBfdHVubmVsX2lvY3RsX3ZlcmlmeV9wcm90b2NvbCh1OCBpcHByb3RvKVxcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTMzMC1cXHRjYXNlIElQUFJPVE9fSVBJUDpcXG5uZXQvaXB2NC9pcGlwLmM6MzMxOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUExTKVxcbm5ldC9pcHY0L2lwaXAuYy0zMzItXFx0Y2FzZSBJUFBST1RPX01QTFM6XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmM9NjE2PXN0YXRpYyBzdHJ1Y3QgeGZybV90dW5uZWwgaXBpcF9oYW5kbGVyIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNjIxLVxcbm5ldC9pcHY0L2lwaXAuYzo2MjI6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QTFMpXFxubmV0L2lwdjQvaXBpcC5jLTYyMy1zdGF0aWMgc3RydWN0IHhmcm1fdHVubmVsIG1wbHNpcF9oYW5kbGVyIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmM9NjQ4PXN0YXRpYyBpbnQgX19pbml0IGlwaXBfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTY2MS1cXHR9XFxubmV0L2lwdjQvaXBpcC5jOjY2MjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBMUylcXG5uZXQvaXB2NC9pcGlwLmMtNjYzLVxcdGVyciA9IHhmcm00X3R1bm5lbF9yZWdpc3RlcihcXHUwMDI2bXBsc2lwX2hhbmRsZXIsIEFGX01QTFMpO1xcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTY3Ni1ydG5sX2xpbmtfZmFpbGVkOlxcbm5ldC9pcHY0L2lwaXAuYzo2Nzc6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QTFMpXFxubmV0L2lwdjQvaXBpcC5jLTY3OC1cXHR4ZnJtNF90dW5uZWxfZGVyZWdpc3RlcihcXHUwMDI2bXBsc2lwX2hhbmRsZXIsIEFGX01QTFMpO1xcbi0tXFxubmV0L2lwdjQvaXBpcC5jPTY4OD1zdGF0aWMgdm9pZCBfX2V4aXQgaXBpcF9maW5pKHZvaWQpXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNjkyLVxcdFxcdHByX2luZm8oXFxcIiVzOiBjYW4ndCBkZXJlZ2lzdGVyIHR1bm5lbFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbm5ldC9pcHY0L2lwaXAuYzo2OTM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QTFMpXFxubmV0L2lwdjQvaXBpcC5jLTY5NC1cXHRpZiAoeGZybTRfdHVubmVsX2RlcmVnaXN0ZXIoXFx1MDAyNm1wbHNpcF9oYW5kbGVyLCBBRl9NUExTKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTE6MjE6MTQuOTM1MzcyMzk5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDg4OTExNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgTVBMUyBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBgQ09ORklHX01QTFNgLiBUaGF0J3MgYSBrZXkga2VybmVsIG9wdGlvbiwgYW5kIGl0J3MgcmVsZXZhbnQgdG8gdGhlIGN1cnJlbnQgc2l0dWF0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cyB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIE5vIHBvaW50IGluIGVuYWJsaW5nIHNvbWV0aGluZyB3aXRob3V0IGtub3dpbmcgd2hhdCBlbHNlIGl0IHB1bGxzIGluLCBvciB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGJlIGFmZmVjdGVkLiBMZXQncyBkaWcgaW50byB0aGUgS2NvbmZpZyBhbmQgc2VlIHdoYXQgdGhlIHJlbGF0aW9uc2hpcHMgYXJlLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIGhvdyBicm9hZGx5IHRoaXMgaW1wYWN0cyB0aGUgd2lkZXIgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NjgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMToxOC4zODQyNjU4MDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzkxNTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNUExTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcGxzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wbHMvS2NvbmZpZy01LVxcbm5ldC9tcGxzL0tjb25maWc6NjptZW51Y29uZmlnIE1QTFNcXG5uZXQvbXBscy9LY29uZmlnLTctXFx0Ym9vbCBcXFwiTXVsdGlQcm90b2NvbCBMYWJlbCBTd2l0Y2hpbmdcXFwiXFxuLS1cXG5uZXQvbXBscy9LY29uZmlnPTE5PWNvbmZpZyBORVRfTVBMU19HU09cXG4tLVxcbm5ldC9tcGxzL0tjb25maWctMjUtXFxubmV0L21wbHMvS2NvbmZpZzoyNjpjb25maWcgTVBMU19ST1VUSU5HXFxubmV0L21wbHMvS2NvbmZpZy0yNy1cXHR0cmlzdGF0ZSBcXFwiTVBMUzogcm91dGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L21wbHMvS2NvbmZpZy0zMi1cXG5uZXQvbXBscy9LY29uZmlnOjMzOmNvbmZpZyBNUExTX0lQVFVOTkVMXFxubmV0L21wbHMvS2NvbmZpZy0zNC1cXHR0cmlzdGF0ZSBcXFwiTVBMUzogSVAgb3ZlciBNUExTIHR1bm5lbCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMToxOC40MjgwNjIzOTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzMTY4MDEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqTXkgQ29uZmlndXJhdGlvbiBMb2dpYyBmb3IgTmV0d29yayBQcm90b2NvbHMqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBkZWFsaW5nIHdpdGggY29uZmlndXJhdGlvbiBvcHRpb25zIGhlcmUsIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcncyBzZXQgdXAgY29ycmVjdGx5LiBGaXJzdCB0aGluZydzIGZpcnN0OiBgQ09ORklHX01QTFNgIGlzIGEgYm9vbGVhbiwgd2hpY2ggaXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gU28sIEknbGwgYWRkIGBNUExTYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIFRoYXQgZW5zdXJlcyBpdCdzIHByb3Blcmx5IGNvbnNpZGVyZWQgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS5cblxuTm93LCBsZXQncyBjYXN0IGEgd2lkZXIgbmV0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG90aGVyIGNydWNpYWwgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIG5ldHdvcmsgc2V0dXAuIEFoLCB5ZXMsIGBORVRfSVBJUGAgaXMgc3RhbmRpbmcgb3V0IGFzIGEga2V5IGNhbmRpZGF0ZS4gVGhpcyBjb3VsZCBiZSBpbXBvcnRhbnQuXG5cbk9rYXksIGxldCdzIGhvbWUgaW4gb24gdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gbG9vayBhdC4gRnJvbSB0aGUgc3ltYm9scyBJJ20gc2VlaW5nLCBgaXBpcF9yY3ZgIGFuZCBgbXBsc2lwX3JjdmAgYXJlIHRoZSByZWFsIGZvY3VzLiBJJ2xsIG5lZWQgdG8gZm9sbG93IHRoZSBleGVjdXRpb24gZmxvd3MgdGhhdCB0b3VjaCB0aGVzZS5cblxuQWxyaWdodCwgd2l0aCB0aGUgbWFpbiBwaWVjZXMgaW4gcGxhY2UsIEkgYmVsaWV2ZSBpdCdzIHRpbWUgdG8gc2V0LXJlc3VsdHMuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGl0IGFsbCBwdXQgdG9nZXRoZXIgYWZ0ZXIgYSBxdWljayBldmFsdWF0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5MzksIk91dHB1dFRva2VucyI6MTE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTE6MjE6MjMuMDU5NzQ0NTc1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk2MzExOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9JUElQXCIsXG4gICAgXCJNUExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBpcF9yY3ZcIixcbiAgICBcIm1wbHNpcF9yY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBJUElQIHR1bm5lbCByZWNlaXZlIHBhdGggKGBpcGlwX3R1bm5lbF9yY3ZgKSBieSBwcm9wZXJseSBmcmVlaW5nIHRoZSBza2Igd2hlbiBgaXBfdHVuX3J4X2RzdGAgcmV0dXJucyBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgbmV0d29yayBwcm90b2NvbCBoYW5kbGVyLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9JUElQXCIsXG4gICAgXCJNUExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBpcF9yY3ZcIixcbiAgICBcIm1wbHNpcF9yY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBJUElQIHR1bm5lbCByZWNlaXZlIHBhdGggKGBpcGlwX3R1bm5lbF9yY3ZgKSBieSBwcm9wZXJseSBmcmVlaW5nIHRoZSBza2Igd2hlbiBgaXBfdHVuX3J4X2RzdGAgcmV0dXJucyBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgbmV0d29yayBwcm90b2NvbCBoYW5kbGVyLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMToyMy4xMzkzODI3ODdaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjQzMDgzODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTE6MjE6MjMuMTM5ODI3Mzg3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE2MjQyNjM1NzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIHdoZXJlIGFuIHNrX2J1ZmYgKHNrYikgd2FzIG5vdCBmcmVlZCB3aGVuIGlwX3R1bl9yeF9kc3QoKSByZXR1cm5lZCBOVUxMLiBCeSBjaGFuZ2luZyAncmV0dXJuIDA7JyB0byAnZ290byBkcm9wOycsIHRoZSBza2IgaXMgbm93IHByb3Blcmx5IGZyZWVkIHZpYSBrZnJlZV9za2Ioc2tiKS4gVGhpcyBpcyBhIG1lbW9yeSBsZWFrIGlzc3VlLCB3aGljaCBpcyB0eXBpY2FsbHkgZGV0ZWN0ZWQgYnkga21lbWxlYWsuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MsIHdoaWNoIGFyZSB0aGUgdGFyZ2V0cyBvZiBLTVNBTi4gU3RhbmRhcmQgS0FTQU4gYW5kIGttZW1sZWFrIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIHR5cGUgb2YgaXNzdWUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDFlYWJlMGE3Y2FjODIyZTZlN2ExZjQ3YzY5NjllODVmNTk3MmVmMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDExOjIwOjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBpcC5jIGIvbmV0L2lwdjQvaXBpcC5jXG5pbmRleCBiNjQzMTk0ZjU3ZDI5Li5kZGY2MmI0NTU2NmI2IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBpcC5jXG4rKysgYi9uZXQvaXB2NC9pcGlwLmNcbkBAIC0yNDgsNyArMjQ4LDcgQEAgc3RhdGljIGludCBpcGlwX3R1bm5lbF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaXBwcm90bylcbiBcbiBcdFx0XHR0dW5fZHN0ID0gaXBfdHVuX3J4X2RzdChza2IsIGZsYWdzLCAwLCAwKTtcbiBcdFx0XHRpZiAoIXR1bl9kc3QpXG4tXHRcdFx0XHRyZXR1cm4gMDtcbitcdFx0XHRcdGdvdG8gZHJvcDtcbiBcdFx0XHRpcF90dW5uZWxfbWRfdWRwX2VuY2FwKHNrYiwgXHUwMDI2dHVuX2RzdC1cdTAwM2V1LnR1bl9pbmZvKTtcbiBcdFx0fVxuIFx0XHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTE6MjE6MjMuMTM5ODI4OTI3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTAwNDA0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ29kZSBQYXRjaDogSVBJUCBUdW5uZWwgUmVjZWl2ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvaXB2NC9pcGlwLmNgLiBJdCdzIGEgc2ltcGxlLCBzZWVtaW5nbHkgZGlyZWN0IGNoYW5nZTogaXQgc3dhcHMgYHJldHVybiAwO2AgZm9yIGBnb3RvIGRyb3A7YCB3aXRoaW4gdGhlIGBpcGlwX3R1bm5lbF9yY3ZgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwid2h5IHRoZSBqdW1wPyBXaGF0J3MgZ29pbmcgb24gaGVyZT9cIiBSZXBsYWNpbmcgYSBzaW1wbGUgcmV0dXJuIHdpdGggYSBgZ290b2AgaXMgdW51c3VhbCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyB0aG9yb3VnaGx5LiBUaGUgY29tbWVudCBpbiB0aGUgY29kZSBkb2Vzbid0IGV4cGxhaW4gdGhlIHJlYXNvbi5cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG5ldC9pcHY0L2lwaXAuY2AgdG8gc2VlIHByZWNpc2VseSB3aGF0IGBnb3RvIGRyb3A7YCBpcyByZWZlcmVuY2luZy4gV2hhdCdzIHRoZSBjb250ZXh0IG9mIHRoaXMgXCJkcm9wXCIgbGFiZWw/IElzIGl0IGEgY29tbW9uIGV4aXQgcG9pbnQgZm9yIGVycm9yIGhhbmRsaW5nPyBJcyBpdCByZWxhdGVkIHRvIHNvbWUgcmVzb3VyY2UgbWFuYWdlbWVudD8gT3IgaXMgaXQgY2hhbmdpbmcgdGhlIGNvbnRyb2wgZmxvdyBpbiBhIHdheSBJIG5lZWQgdG8gZGVlcGx5IHVuZGVyc3RhbmQ/IEkgc3VzcGVjdCB0aGlzIGlzIHNvbWV0aGluZyByZWxhdGVkIHRvIGhhbmRsaW5nIGluYm91bmQgcGFja2V0cyBhbmQgbGlrZWx5IHBlcnRhaW5zIHRvIGEgcGFja2V0IGJlaW5nIGludmFsaWQgb3IgdW5wcm9jZXNzYWJsZS4gQnV0IEkgbXVzdCBiZSBzdXJlISBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgZmxvdyBsb2dpYyBhcm91bmQgYGRyb3BgIGxhYmVsIHRvIGJlIHN1cmUuIEFueSBjaGFuZ2UgdG8gdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgYWx0ZXJzIHRoZSBmbG93IGZyb20gYW4gZXJyb3IgcmV0dXJuIHRvIGEganVtcCBpcyB3b3J0aCB0aGUgZXh0cmEgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTk5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMToyNi43NDk4NzI5NjFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTAwNDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwaXBfdHVubmVsX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcGlwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBpcC5jPTIwOT1zdGF0aWMgY29uc3Qgc3RydWN0IHRubF9wdGtfaW5mbyBtcGxzaXBfdHBpID0ge1xcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTIxNC1cXG5uZXQvaXB2NC9pcGlwLmM6MjE1OnN0YXRpYyBpbnQgaXBpcF90dW5uZWxfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHU4IGlwcHJvdG8pXFxubmV0L2lwdjQvaXBpcC5jLTIxNi17XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmM9MjY2PXN0YXRpYyBpbnQgaXBpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9pcGlwLmMtMjY3LXtcXG5uZXQvaXB2NC9pcGlwLmM6MjY4OlxcdHJldHVybiBpcGlwX3R1bm5lbF9yY3Yoc2tiLCBJUFBST1RPX0lQSVApO1xcbm5ldC9pcHY0L2lwaXAuYy0yNjktfVxcbi0tXFxubmV0L2lwdjQvaXBpcC5jPTI3Mj1zdGF0aWMgaW50IG1wbHNpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9pcGlwLmMtMjczLXtcXG5uZXQvaXB2NC9pcGlwLmM6Mjc0OlxcdHJldHVybiBpcGlwX3R1bm5lbF9yY3Yoc2tiLCBJUFBST1RPX01QTFMpO1xcbm5ldC9pcHY0L2lwaXAuYy0yNzUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMToyNi43OTY3Nzg5NjdaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkyODk3MTgwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGBpcGlwX3R1bm5lbF9yY3ZgIGZ1bmN0aW9uLCBmb2N1c2luZyBvbiBsaW5lcyAyMTUtMjY1LCBhcyBpZiB0aGVzZSBhcmUgbXkgaW1tZWRpYXRlIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgYGlwaXBfdHVubmVsX3JjdmAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgaXBpcF90dW5uZWxfcmN2YCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9pcHY0L2lwaXAuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjcml0aWNhbCBzZWN0aW9uIGZyb20gbGluZSAyMTUgdG8gMjY1LiBSaWdodCwgdGhpcyBpcyB3aGVyZSB0aGUgKnJlYWwqIHBhY2tldCBwcm9jZXNzaW5nIGhhcHBlbnMgd2l0aGluIHRoZSBJUElQIHR1bm5lbC5cblxuUmlnaHQsIGxpbmUgMjE1IG1hcmtzIHRoZSBzdGFydC4uLiBhaCwgSSByZW1lbWJlciwgd2UncmUgaW5zaWRlIHRoZSBtYWluIHdvcmsgbG9vcC4gRmlyc3QgdGhpbmcsIHdlJ3JlIGxpa2VseSBncmFiYmluZyB0aGUgaW5uZXIgSVAgaGVhZGVyOyBjb25maXJtaW5nIHRoYXQgaXQgaGFzIGJlZW4gY2hlY2tlZCBhZ2FpbnN0IGFsbCB2YWxpZCBjcml0ZXJpYSBiZWZvcmUgZ2V0dGluZyB0byB0aGlzIHN0YWdlLiBJJ20gbG9va2luZyBmb3IgdGhlIGVzc2VudGlhbCBwcm9jZXNzaW5nIHN0ZXBzLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgZW5jYXBzdWxhdGlvbiBiZWluZyBzdHJpcHBlZCwgdGhlIGlubmVyIGhlYWRlciBiZWluZyBleGFtaW5lZCwgYW5kIHRoZW4gdGhlIHBhY2tldCBiZWluZyByb3V0ZWQgb3IgZGVsaXZlcmVkLlxuXG5MaW5lcyAyMjAtMjMwOiBub3cgdGhlIGNvcmUgb2YgaXQsIEkgc2VlIHRoYXQgd2UgYXJlIGhhbmRsaW5nIHRoZSB0dW5uZWwgbW9kZSBlbmNhcHN1bGF0aW9uIGZvciB0aGUgcGFja2V0IHdpdGggdGhlIGBpcGlwX3R1bm5lbF9yY3ZfY29yZWAgZnVuY3Rpb24uIFxuXG5MaW5lcyAyMzAtMjQwLiBJIHNlZSB0aGF0IHRoZXJlIG11c3QgYmUgc29tZXRoaW5nIGJlaW5nIGhhbmRsZWQgd2hlbiB0aGUgSVAgaGVhZGVyIGhhcyBiZWVuIHN0cmlwcGVkIGZyb20gdGhlIHBhY2tldCwgYW5kIHdlIGNhbiBjaGVjayB3aGV0aGVyIHRoZSB0aGUgcGFja2V0IHNob3VsZCBiZSBkZWxpdmVyZWQgbG9jYWxseSBvciBpcyB0byBiZSByZXJvdXRlZC4gV2UgYXJlIGRldGVybWluaW5nIGhvdyB0byBoYW5kIG9mZiB0aGUgcGFja2V0LCBhbmQgSSdtIHJlYWxseSBjdXJpb3VzIGlmIHRoaXMgaW52b2x2ZXMgYW55IHNwZWNpZmljIHR1bm5lbC1yZWxhdGVkIGNoZWNrcyB0aGF0IGFyZSBkaWZmZXJlbnQgdGhhbiBub3JtYWwgcm91dGluZyBsb2dpYy5cblxuTGluZXMgMjQwLTI1MDogVGhpcyBzZWVtcyB0byBiZSB0aGUgcGxhY2Ugd2hlcmUgd2UgZGVhbCB3aXRoIHR1bm5lbC1zcGVjaWZpYyBNVFUgaXNzdWVzIG9yIGZyYWdtZW50YXRpb24gaGFuZGxpbmcuIEknZCBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmRpdGlvbnMgZm9yIHRoZSBwYWNrZXQgdG8gYmUgcmVyb3V0ZWQuIEknbSBzZWVpbmcgY2hlY2tzIHJlbGF0ZWQgdG8gTVRVLlxuXG5MaW5lcyAyNTAtMjYwOiBJIHRoaW5rIHRoaXMgc2VjdGlvbiBpcyBkZWFsaW5nIHdpdGggdGhlIHBhY2tldCBiZWluZyBlbnF1ZXVlZCB0byBiZSBkZWFsdCB3aXRoLCBhbmQgdGhlIHR1bm5lbCBpcyByZWNlaXZpbmcgdGhlIHBhY2tldCB0byBiZSBkZWFsdCB3aXRoIGZvciB0aGUgbmV4dCBzdGFnZSBvZiBwcm9jZXNzaW5nLlxuXG5GaW5hbGx5LCBsaW5lcyAyNjAtMjY1IHNlZW0gdG8gY29uY2x1ZGUgd2l0aCBzb21lIGtpbmQgb2YgY291bnRlciBvciBzdGF0aXN0aWNzIHVwZGF0ZXMuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhvc2UgY291bnRlcnMsIGFzIEkgYWx3YXlzIGNhcmUgYWJvdXQgdGhlIHBlcmZvcm1hbmNlIG92ZXJoZWFkIG9mIHR1bm5lbCBwcm9jZXNzaW5nLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgcXVpY2sgdW5kZXJzdGFuZGluZyBvZiB0aGUgd29yayBiZWluZyBkb25lLlxuXG5BbHJpZ2h0LCB0aGF0J3MgYSBnb29kIGZpcnN0IHBhc3MuIEknbGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBjb2RlIG1vcmUgbGluZS1ieS1saW5lIG5vdyB0byBncmFzcCB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY5MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDExOjIxOjMxLjcyNTc1MzI0N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcGlwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjE1OlxcdHN0YXRpYyBpbnQgaXBpcF90dW5uZWxfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHU4IGlwcHJvdG8pXFxuIDIxNjpcXHR7XFxuIDIxNzpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KTtcXG4gMjE4OlxcdFxcdHN0cnVjdCBpcF90dW5uZWxfbmV0ICppdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGlwaXBfbmV0X2lkKTtcXG4gMjE5OlxcdFxcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKSA9IHsgfTtcXG4gMjIwOlxcdFxcdHN0cnVjdCBtZXRhZGF0YV9kc3QgKnR1bl9kc3QgPSBOVUxMO1xcbiAyMjE6XFx0XFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsO1xcbiAyMjI6XFx0XFx0Y29uc3Qgc3RydWN0IGlwaGRyICppcGg7XFxuIDIyMzpcXHRcXG4gMjI0OlxcdFxcdF9fc2V0X2JpdChJUF9UVU5ORUxfTk9fS0VZX0JJVCwgZmxhZ3MpO1xcbiAyMjU6XFx0XFxuIDIyNjpcXHRcXHRpcGggPSBpcF9oZHIoc2tiKTtcXG4gMjI3OlxcdFxcdHR1bm5lbCA9IGlwX3R1bm5lbF9sb29rdXAoaXRuLCBza2ItXFx1MDAzZWRldi1cXHUwMDNlaWZpbmRleCwgZmxhZ3MsIGlwaC1cXHUwMDNlc2FkZHIsXFxuIDIyODpcXHRcXHRcXHRcXHRcXHQgIGlwaC1cXHUwMDNlZGFkZHIsIDApO1xcbiAyMjk6XFx0XFx0aWYgKHR1bm5lbCkge1xcbiAyMzA6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHRubF9wdGtfaW5mbyAqdHBpO1xcbiAyMzE6XFx0XFxuIDIzMjpcXHRcXHRcXHRpZiAodHVubmVsLVxcdTAwM2VwYXJtcy5pcGgucHJvdG9jb2wgIT0gaXBwcm90byBcXHUwMDI2XFx1MDAyNlxcbiAyMzM6XFx0XFx0XFx0ICAgIHR1bm5lbC1cXHUwMDNlcGFybXMuaXBoLnByb3RvY29sICE9IDApXFxuIDIzNDpcXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDIzNTpcXHRcXG4gMjM2OlxcdFxcdFxcdGlmICgheGZybTRfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKVxcbiAyMzc6XFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbiAyMzg6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX01QTFMpXFxuIDIzOTpcXHRcXHRcXHRpZiAoaXBwcm90byA9PSBJUFBST1RPX01QTFMpXFxuIDI0MDpcXHRcXHRcXHRcXHR0cGkgPSBcXHUwMDI2bXBsc2lwX3RwaTtcXG4gMjQxOlxcdFxcdFxcdGVsc2VcXG4gMjQyOlxcdCNlbmRpZlxcbiAyNDM6XFx0XFx0XFx0XFx0dHBpID0gXFx1MDAyNmlwaXBfdHBpO1xcbiAyNDQ6XFx0XFx0XFx0aWYgKGlwdHVubmVsX3B1bGxfaGVhZGVyKHNrYiwgMCwgdHBpLVxcdTAwM2Vwcm90bywgZmFsc2UpKVxcbiAyNDU6XFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbiAyNDY6XFx0XFx0XFx0aWYgKHR1bm5lbC1cXHUwMDNlY29sbGVjdF9tZCkge1xcbiAyNDc6XFx0XFx0XFx0XFx0aXBfdHVubmVsX2ZsYWdzX3plcm8oZmxhZ3MpO1xcbiAyNDg6XFx0XFxuIDI0OTpcXHRcXHRcXHRcXHR0dW5fZHN0ID0gaXBfdHVuX3J4X2RzdChza2IsIGZsYWdzLCAwLCAwKTtcXG4gMjUwOlxcdFxcdFxcdFxcdGlmICghdHVuX2RzdClcXG4gMjUxOlxcdFxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gMjUyOlxcdFxcdFxcdFxcdGlwX3R1bm5lbF9tZF91ZHBfZW5jYXAoc2tiLCBcXHUwMDI2dHVuX2RzdC1cXHUwMDNldS50dW5faW5mbyk7XFxuIDI1MzpcXHRcXHRcXHR9XFxuIDI1NDpcXHRcXHRcXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcbiAyNTU6XFx0XFxuIDI1NjpcXHRcXHRcXHRyZXR1cm4gaXBfdHVubmVsX3Jjdih0dW5uZWwsIHNrYiwgdHBpLCB0dW5fZHN0LCBsb2dfZWNuX2Vycm9yKTtcXG4gMjU3OlxcdFxcdH1cXG4gMjU4OlxcdFxcbiAyNTk6XFx0XFx0cmV0dXJuIC0xO1xcbiAyNjA6XFx0XFxuIDI2MTpcXHRkcm9wOlxcbiAyNjI6XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDI2MzpcXHRcXHRyZXR1cm4gMDtcXG4gMjY0OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTE6MjE6MzEuNzI1ODI5NzQ3WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2NTY2MTUxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoaXMgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEl0J3MgZXNzZW50aWFsbHkgY2hhbmdpbmcgYSBgcmV0dXJuIDA7YCB0byBgZ290byBkcm9wO2Agd2hlbiBgIXR1bl9kc3RgLiBUaGUgYGdvdG8gZHJvcDtgIGJpdCBpcyBjcnVjaWFsIGJlY2F1c2UgdGhhdCdzIHdoZXJlIHRoZSBga2ZyZWVfc2tiKHNrYik7IHJldHVybiAwO2AgaGFwcGVucy4gUmlnaHQsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIG1lbW9yeSBsZWFrIGZpeC4gSXQgbG9va3MgbGlrZSB0aGUgYHNrYmAgKHNvY2tldCBidWZmZXIpIHdhc24ndCBiZWluZyBmcmVlZCBwcm9wZXJseSBiZWZvcmUuIEdvb2QgY2F0Y2ghXG5cbk5vdywgbXkgbWluZCBuYXR1cmFsbHkgZ29lcyB0byB0aGUgZGlhZ25vc3RpYyB0b29scy4gSSBrbm93IHRoYXQga21lbWxlYWsgaXMgdGhlIHVzdWFsIHN1c3BlY3QgZm9yIHNuaWZmaW5nIG91dCBtZW1vcnkgbGVha3MsIGFuZCB0aGF0J3MgcHJlY2lzZWx5IHdoYXQgdGhpcyBwYXRjaCBhZGRyZXNzZXMuIEknbSBwcmV0dHkgc3VyZSBLQVNBTiwgb3IgS2VybmVsIEFkZHJlc3MgU0FOaXRpemVyLCB3b3VsZCBiZSBsb29raW5nIGZvciBhIGRpZmZlcmVudCBjbGFzcyBvZiBlcnJvcnPigJR1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHRoaW5ncyBsaWtlIHRoYXQuIEtNU0FOLCBLZXJuZWwgTWVtb3J5IFNBTml0aXplciwgaXMgdGhlIG9uZSB0aGF0IGZsYWdzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoaXMgY2hhbmdlLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciwgZm9yIHRoYXQgbWF0dGVyLCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJdCdzIHNvbGVseSBhYm91dCBwbHVnZ2luZyBhIG1lbW9yeSBsZWFrLiBTbywgd2hlbiBpdCBjb21lcyB0byB0aGUgYE5lZWRzS01TQU5gIHRhZywgSSdtIHRoaW5raW5nLCBcIk5vcGUsIG5vdCBuZWVkZWQgaGVyZS5cIiBUaGlzIGlzIGEgc3RyYWlnaHQtdXAgbWVtb3J5IGxlYWsgcmVwYWlyLCBubyBLTVNBTiBpbnZvbHZlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDExNCwiT3V0cHV0VG9rZW5zIjoxMzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMToyMTozOS4zODI0NDY5NloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayB3aGVyZSBhbiBza19idWZmIChza2IpIHdhcyBub3QgZnJlZWQgd2hlbiBpcF90dW5fcnhfZHN0KCkgcmV0dXJuZWQgTlVMTC4gQnkgY2hhbmdpbmcgJ3JldHVybiAwOycgdG8gJ2dvdG8gZHJvcDsnLCB0aGUgc2tiIGlzIG5vdyBwcm9wZXJseSBmcmVlZCB2aWEga2ZyZWVfc2tiKHNrYikuIFRoaXMgaXMgYSBtZW1vcnkgbGVhayBpc3N1ZSwgd2hpY2ggaXMgdHlwaWNhbGx5IGRldGVjdGVkIGJ5IGttZW1sZWFrLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCB3aGljaCBhcmUgdGhlIHRhcmdldHMgb2YgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGFuZCBrbWVtbGVhayBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyB0eXBlIG9mIGlzc3VlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgd2hlcmUgYW4gc2tfYnVmZiAoc2tiKSB3YXMgbm90IGZyZWVkIHdoZW4gaXBfdHVuX3J4X2RzdCgpIHJldHVybmVkIE5VTEwuIEJ5IGNoYW5naW5nICdyZXR1cm4gMDsnIHRvICdnb3RvIGRyb3A7JywgdGhlIHNrYiBpcyBub3cgcHJvcGVybHkgZnJlZWQgdmlhIGtmcmVlX3NrYihza2IpLiBUaGlzIGlzIGEgbWVtb3J5IGxlYWsgaXNzdWUsIHdoaWNoIGlzIHR5cGljYWxseSBkZXRlY3RlZCBieSBrbWVtbGVhay4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgd2hpY2ggYXJlIHRoZSB0YXJnZXRzIG9mIEtNU0FOLiBTdGFuZGFyZCBLQVNBTiBhbmQga21lbWxlYWsgYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgdHlwZSBvZiBpc3N1ZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4bz5s[1] Phase: Succeeded StartedAt: 2026-08-19 11:22:04 +0000 UTC FinishedAt: 2026-08-19 11:22:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4bz5s[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-19 11:22:04 +0000 UTC FinishedAt: 2026-08-19 11:22:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4bz5s[2] Phase: Succeeded StartedAt: 2026-08-19 11:22:04 +0000 UTC FinishedAt: 2026-08-19 15:06:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 11:22:04 +0000 UTC FinishedAt: 2026-08-19 15:06:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 11:22:04 +0000 UTC FinishedAt: 2026-08-19 11:22:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 11:22:04 +0000 UTC FinishedAt: 2026-08-19 11:22:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"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-workflow4bz5s/series-workflow4bz5s-convert-artifact-2600956759/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 11:22:14 +0000 UTC FinishedAt: 2026-08-19 11:42:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 11:22:14 +0000 UTC FinishedAt: 2026-08-19 11:42:42 +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:*49a659d3-e0c9-4c78-b3ce-0b0e740d0463,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-workflow4bz5s/series-workflow4bz5s-convert-artifact-2600956759/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": "1f500f4d-6518-4bc1-9d0d-5e2098f69aa7", "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-workflow4bz5s/series-workflow4bz5s-build-action-3781161901/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 11:22:14 +0000 UTC FinishedAt: 2026-08-19 11:42:32 +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:*49a659d3-e0c9-4c78-b3ce-0b0e740d0463,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-workflow4bz5s/series-workflow4bz5s-convert-artifact-2600956759/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": "1f500f4d-6518-4bc1-9d0d-5e2098f69aa7", "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-workflow4bz5s/series-workflow4bz5s-build-action-3781161901/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 11:42:42 +0000 UTC FinishedAt: 2026-08-19 11:42:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 11:42:42 +0000 UTC FinishedAt: 2026-08-19 11:42:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 11:42:42 +0000 UTC FinishedAt: 2026-08-19 11:42:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 11:42:42 +0000 UTC FinishedAt: 2026-08-19 11:42:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-workflow4bz5s/series-workflow4bz5s-convert-artifact-580129670/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 11:42:52 +0000 UTC FinishedAt: 2026-08-19 11:45:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 11:42:52 +0000 UTC FinishedAt: 2026-08-19 11:44:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1f500f4d-6518-4bc1-9d0d-5e2098f69aa7,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-workflow4bz5s/series-workflow4bz5s-build-action-3781161901/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-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 11:45:02 +0000 UTC FinishedAt: 2026-08-19 11:45:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 11:45:02 +0000 UTC FinishedAt: 2026-08-19 11:45:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 11:45:02 +0000 UTC FinishedAt: 2026-08-19 12:02:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 11:45:02 +0000 UTC FinishedAt: 2026-08-19 12:02:23 +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:*49a659d3-e0c9-4c78-b3ce-0b0e740d0463,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-workflow4bz5s/series-workflow4bz5s-convert-artifact-580129670/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": "191b4fa8-abd5-4191-841a-ae4abc3d549c", "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-workflow4bz5s/series-workflow4bz5s-build-action-3693308362/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 11:45:02 +0000 UTC FinishedAt: 2026-08-19 12:02:13 +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:*49a659d3-e0c9-4c78-b3ce-0b0e740d0463,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-workflow4bz5s/series-workflow4bz5s-convert-artifact-580129670/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": "191b4fa8-abd5-4191-841a-ae4abc3d549c", "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-workflow4bz5s/series-workflow4bz5s-build-action-3693308362/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 12:02:23 +0000 UTC FinishedAt: 2026-08-19 12:02:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 12:02:23 +0000 UTC FinishedAt: 2026-08-19 12:02:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 12:02:23 +0000 UTC FinishedAt: 2026-08-19 12:04:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 12:02:23 +0000 UTC FinishedAt: 2026-08-19 12:04: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:*191b4fa8-abd5-4191-841a-ae4abc3d549c,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-workflow4bz5s/series-workflow4bz5s-build-action-3693308362/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-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 12:04:31 +0000 UTC FinishedAt: 2026-08-19 15:06:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 12:04:31 +0000 UTC FinishedAt: 2026-08-19 15:06:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"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:*1f500f4d-6518-4bc1-9d0d-5e2098f69aa7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*191b4fa8-abd5-4191-841a-ae4abc3d549c,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-workflow4bz5s/series-workflow4bz5s-build-action-3781161901/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-workflow4bz5s/series-workflow4bz5s-build-action-3693308362/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 12:04:31 +0000 UTC FinishedAt: 2026-08-19 12:04:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 12:04:31 +0000 UTC FinishedAt: 2026-08-19 12:04:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"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-workflow4bz5s/series-workflow4bz5s-convert-artifact-2620654411/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 12:04:31 +0000 UTC FinishedAt: 2026-08-19 12:04:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 12:04:31 +0000 UTC FinishedAt: 2026-08-19 12:04:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 12:04:31 +0000 UTC FinishedAt: 2026-08-19 12:04:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 12:04:41 +0000 UTC FinishedAt: 2026-08-19 15:06:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4bz5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip_rcv","mplsip_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPIP","MPLS"],"series_id":"30004ace-aed2-4090-9fe7-847972a83291","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-08-19 12:04:41 +0000 UTC FinishedAt: 2026-08-19 15:06:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1f500f4d-6518-4bc1-9d0d-5e2098f69aa7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*191b4fa8-abd5-4191-841a-ae4abc3d549c,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-workflow4bz5s/series-workflow4bz5s-build-action-3781161901/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-workflow4bz5s/series-workflow4bz5s-build-action-3693308362/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-workflow4bz5s/series-workflow4bz5s-convert-artifact-2620654411/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,}