Name: series-workflow6mf59 Phase: Succeeded StartedAt: 2026-08-10 23:46:50 +0000 UTC FinishedAt: 2026-08-11 03:47:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mf59[0] Phase: Succeeded StartedAt: 2026-08-10 23:46:50 +0000 UTC FinishedAt: 2026-08-11 00:05:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mf59[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 23:46:50 +0000 UTC FinishedAt: 2026-08-11 00:05:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK" ], "series_id": "ce20e818-e79a-4e32-afb4-57e1caedc218" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__nf_ct_try_assign_helper" ], "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+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgdGhlIHByb3RvY29sIG51bWJlciBvZiBhIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIG1hdGNoZXMgdGhlIHByb3RvY29sIG51bWJlciBvZiB0aGUgY29ubmVjdGlvbiBpdCBpcyBiZWluZyBhc3NpZ25lZCB0by4gVGhpcyBwcmV2ZW50cyBhIGhlbHBlciBkZXNpZ25lZCBmb3Igb25lIHByb3RvY29sIGZyb20gYmVpbmcgaW5jb3JyZWN0bHkgYXNzaWduZWQgdG8gYSBjb25uZWN0aW9uIG9mIGFub3RoZXIgcHJvdG9jb2wuIFN1Y2ggYSBtaXNtYXRjaCBjb3VsZCBsZWFkIHRvIHR5cGUgY29uZnVzaW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgd2hlbiB0aGUgaGVscGVyIGF0dGVtcHRzIHRvIHBhcnNlIHBhY2tldHMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJgIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY2AgdG8gYWRkIGEgY2hlY2sgZm9yIHRoZSBwcm90b2NvbCBudW1iZXIgb2YgdGhlIGhlbHBlciBhbmQgdGhlIGNvbm5lY3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IHdoZW4gYXNzaWduaW5nIGEgaGVscGVyIHRvIGEgY29ubmVjdGlvbi4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSBuZXR3b3JrIHRyYWZmaWMgd2hlbiBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgYXJlIHVzZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmMTk5ODMwZDAxYzdiZjU4Y2RkOTczMzQ1ZDFhNGJkYTg3ZWVjMDg2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDA6MDQ6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xuaW5kZXggNTAwNTA5YjE3NjYzZS4uNDE5YWY2Zjc2YmQyNyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xuQEAgLTIwNSw2ICYjNDM7MjA1LDggQEAgaW50IF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCxcbiBcdGhlbHAgPSBuZmN0X2hlbHAodG1wbCk7XG4gXHRpZiAoaGVscClcbiBcdFx0aGVscGVyID0gcmN1X2RlcmVmZXJlbmNlKGhlbHAtXHUwMDNlaGVscGVyKTtcbiYjNDM7XHRpZiAoaGVscGVyIFx1MDAyNlx1MDAyNiBoZWxwZXItXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtICE9IG5mX2N0X3Byb3RvbnVtKGN0KSlcbiYjNDM7XHRcdGhlbHBlciA9IE5VTEw7XG4gXG4gXHRoZWxwID0gbmZjdF9oZWxwKGN0KTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19uZl9jdF90cnlfYXNzaWduX2hlbHBlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcmAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jYCB0byBhZGQgYSBjaGVjayBmb3IgdGhlIHByb3RvY29sIG51bWJlciBvZiB0aGUgaGVscGVyIGFuZCB0aGUgY29ubmVjdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgd2hlbiBhc3NpZ25pbmcgYSBoZWxwZXIgdG8gYSBjb25uZWN0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IG5ldHdvcmsgdHJhZmZpYyB3aGVuIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycyBhcmUgdXNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYxOTk4MzBkMDFjN2JmNThjZGQ5NzMzNDVkMWE0YmRhODdlZWMwODYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAwMDowNDoxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKaW5kZXggNTAwNTA5YjE3NjYzZS4uNDE5YWY2Zjc2YmQyNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKQEAgLTIwNSw2ICYjNDM7MjA1LDggQEAgaW50IF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCwKIAloZWxwID0gbmZjdF9oZWxwKHRtcGwpOwogCWlmIChoZWxwKQogCQloZWxwZXIgPSByY3VfZGVyZWZlcmVuY2UoaGVscC0mZ3Q7aGVscGVyKTsKJiM0MzsJaWYgKGhlbHBlciAmYW1wOyZhbXA7IGhlbHBlci0mZ3Q7dHVwbGUuZHN0LnByb3RvbnVtICE9IG5mX2N0X3Byb3RvbnVtKGN0KSkKJiM0MzsJCWhlbHBlciA9IE5VTEw7CiAKIAloZWxwID0gbmZjdF9oZWxwKGN0KTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA5CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29ubnRyYWNrIEhlbHBlciBBc3NpZ25tZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNgLiBTZWVtcyBsaWtlIHRoZXkmIzM5O3ZlIG1vZGlmaWVkIHRoZSBgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcmAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgaW50cm9kdWNlZCBhIGNoZWNrLiBMZXQgbWUgcHVsbCB1cCB0aGUgcmVsZXZhbnQgY29kZSBzbmlwcGV0OgoKYGBgYwoJaWYgKGhlbHBlciAmYW1wOyZhbXA7IGhlbHBlci0mZ3Q7dHVwbGUuZHN0LnByb3RvbnVtICE9IG5mX2N0X3Byb3RvbnVtKGN0KSkKCQloZWxwZXIgPSBOVUxMOwpgYGAKClJpZ2h0LCBnb3QgaXQuIFRoaXMgY29uZGl0aW9uYWwgaXMgY3J1Y2lhbC4gRXNzZW50aWFsbHksIHRoZSBjb2RlIGlzIHZlcmlmeWluZyB0aGF0IGlmIGEgaGVscGVyIGlzIGFscmVhZHkgYXZhaWxhYmxlLCB0aGUgcHJvdG9jb2wgbnVtYmVyIG9mIHRoYXQgaGVscGVyICptdXN0KiBtYXRjaCB0aGUgcHJvdG9jb2wgbnVtYmVyIG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5LiBJZiB0aGVyZSYjMzk7cyBhIG1pc21hdGNoIOKAkyBtZWFuaW5nLCBpZiB0aGUgaGVscGVyIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGRpZmZlcmVudCBwcm90b2NvbCB0aGFuIHRoZSBjb25uZWN0aW9uIOKAkyB0aGUgYGhlbHBlcmAgcG9pbnRlciBpcyBiZWluZyBzZXQgdG8gYE5VTExgLiBUaGlzIGltcGxpZXMgdGhhdCB0aGUgZXhpc3RpbmcgaGVscGVyIGlzIGluY29tcGF0aWJsZSBhbmQgbmVlZHMgdG8gYmUgZGlzY2FyZGVkLiBUaGlzIHByb2JhYmx5IG1lYW5zIGEgc3BlY2lmaWMgSGVscGVyIGlzbiYjMzk7dCB2YWxpZCBmb3IgdGhlIHByb3RvY29sIGluIHF1ZXN0aW9uLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgaXMgaW50ZW5kZWQgdG8gcHJldmVudCBtaXMtYXNzb2NpYXRpb24gb2YgaGVscGVycyB3aXRoIGNvbm5lY3Rpb25zIG9mIHRoZSB3cm9uZyBwcm90b2NvbCwgd2hpY2ggY291bGQgbGVhZCB0byBhbGwgc29ydHMgb2Ygd2VpcmQgYmVoYXZpb3IgYW5kIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBvdGhlciBjb21wb25lbnRzIGluIGBuZXRmaWx0ZXJgIHRvIGFzc2VzcyB0aGUgZnVsbCBpbXBhY3Qgb2YgdGhpcyBwYXRjaCBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIHRoYXQgbmVlZCBhdHRlbnRpb24uIEl0JiMzOTtzIGEgZmFpcmx5IGNvbmNpc2UgYWRkaXRpb24sIGJ1dCBwb3RlbnRpYWxseSBhIHNpZ25pZmljYW50IGJlaGF2aW9yYWwgY2hhbmdlLCBhbmQgSSYjMzk7bGwgd2FudCB0byByZXZpZXcgdGhlIGFzc29jaWF0ZWQgY29tbWl0IG1lc3NhZ2VzIGFuZCBhbnkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19uZl9jdF90cnlfYXNzaWduX2hlbHBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTE5MD1FWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9oZWxwZXJfZXh0X2FkZCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0xOTEtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzoxOTI6aW50IF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTE5My1cdFx0XHQgICAgICBnZnBfdCBmbGFncylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0yNDgtfVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6MjQ5OkVYUE9SVF9TWU1CT0xfR1BMKF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMjUwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MzcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGUgd2VlZHMuIFRoZSBpbnN0cnVjdGlvbiBpcyB0byBkZWx2ZSBpbnRvIHRoZSBmdW5jdGlvbiBgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcmAuIEkga25vdyB0aGlzIG9uZSwgaXQmIzM5O3MgdHlwaWNhbGx5IGludm9sdmVkIGluLCBhbmQgSSB0aGluayBJIHJlbWVtYmVyIHRoZSBkZXRhaWxzLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHByb2JhYmx5IHN0YXJ0IHdpdGggaXRzIHByaW1hcnkgcHVycG9zZSBhbmQgY29udGV4dC4gT2theSwgdGhpcyBoZWxwZXIgaXMgYWxtb3N0IGNlcnRhaW5seSB1c2VkIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3Vic3lzdGVtLCByaWdodD8gQW5kIHRoZSBuYW1lIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0cyByb2xlIGlzIGFib3V0IGFzc2lnbm1lbnQg4oCTIHNwZWNpZmljYWxseSwgdHJ5aW5nIHRvIGFzc2lnbiBzb21lIGRhdGEgb3IgYXR0cmlidXRlLCBtYXliZSBhIGZsb3cgbGFiZWwsIGEgc2Vzc2lvbiBvciBhIG1hcmsgdG8gYSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5LiBJdCBoYXMgYSBsb3Qgb2YgbG93LWxldmVsIGludHJpY2FjaWVzLCB0aGVyZSBtaWdodCBiZSBjb25jdXJyZW5jeSBjb25zaWRlcmF0aW9ucy4KCkkmIzM5O20gbWVudGFsbHkgcHJlcGFyaW5nIGZvciBhIGRlZXAgZGl2ZSBpbnRvIGl0cyBpbnRlcm5hbHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIHJhY2VzLCBhdG9taWNpdHksIGVycm9yIGNvbmRpdGlvbnMsIGFuZCB3aGV0aGVyIGl0IHVzZXMgYW55IHNwZWNpYWwgbG9ja2luZyBtZWNoYW5pc21zIG9yIGF0b21pYyBvcGVyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGRpc3NlY3QgaXRzIGFyZ3VtZW50cyB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB3aGF0IGl0IGlzIHRyeWluZyB0byBhc3NpZ24sIHdoYXQgY29uZGl0aW9ucyBhcmUgY2hlY2tlZCwgYW5kIHdoaWNoIGFyZSB0aGUgY29yZSBhc3BlY3RzIHRoYXQgbWFrZXMgdGhlIGZ1bmN0aW9uIGEgaGVscGVyLiBUaGlzIGlzIG9mdGVuIHdoZXJlIHRoZSB0cmlja3kgYml0cyByZXNpZGUg4oCTIHRoZSBjb25kaXRpb25hbCBicmFuY2hlcywgdGhlIGVkZ2UgY2FzZXMsIHRoZSBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGluZnJhc3RydWN0dXJlLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgdGhpcyBpcyBhIGNyaXRpY2FsIHNlY3Rpb24gdGhhdCBuZWVkcyB0byBiZSBvcHRpbWl6ZWQgZm9yIHBlcmZvcm1hbmNlLgoKSSYjMzk7bSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIGBuZl9jdGAgc3RydWN0dXJlIGFuZCBpdHMgYXNzb2NpYXRlZCBtZW1iZXJzLiBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEFuZCBob3cgZG9lcyBpdCByZWxhdGUgdG8gdGhlIG92ZXJhbGwgY29ubmVjdGlvbiB0cmFja2luZyBzdGF0ZSBtYWNoaW5lPyBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgaGVscGVyIGNvbnRyaWJ1dGVzIHRvIHRoZSBvdmVyYWxsIE5ldGZpbHRlciBhcmNoaXRlY3R1cmUuIFRpbWUgdG8gZ2V0IGRvd24gYW5kIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5MDpcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9leHRfYWRkKTtcbiAxOTE6XHRcbiAxOTI6XHRpbnQgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBuZl9jb25uICp0bXBsLFxuIDE5MzpcdFx0XHRcdCAgICAgIGdmcF90IGZsYWdzKVxuIDE5NDpcdHtcbiAxOTU6XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIgPSBOVUxMO1xuIDE5NjpcdFx0c3RydWN0IG5mX2Nvbm5faGVscCAqaGVscDtcbiAxOTc6XHRcbiAxOTg6XHRcdC8qIFdlIGFscmVhZHkgZ290IGEgaGVscGVyIGV4cGxpY2l0bHkgYXR0YWNoZWQgKGUuZy4gbmZ0X2N0KSAqL1xuIDE5OTpcdFx0aWYgKHRlc3RfYml0KElQU19IRUxQRVJfQklULCBcdTAwMjZjdC1cdTAwM2VzdGF0dXMpKVxuIDIwMDpcdFx0XHRyZXR1cm4gMDtcbiAyMDE6XHRcbiAyMDI6XHRcdGlmIChXQVJOX09OX09OQ0UoIXRtcGwpKVxuIDIwMzpcdFx0XHRyZXR1cm4gMDtcbiAyMDQ6XHRcbiAyMDU6XHRcdGhlbHAgPSBuZmN0X2hlbHAodG1wbCk7XG4gMjA2Olx0XHRpZiAoaGVscClcbiAyMDc6XHRcdFx0aGVscGVyID0gcmN1X2RlcmVmZXJlbmNlKGhlbHAtXHUwMDNlaGVscGVyKTtcbiAyMDg6XHRcdGlmIChoZWxwZXIgXHUwMDI2XHUwMDI2IGhlbHBlci1cdTAwM2V0dXBsZS5kc3QucHJvdG9udW0gIT0gbmZfY3RfcHJvdG9udW0oY3QpKVxuIDIwOTpcdFx0XHRoZWxwZXIgPSBOVUxMO1xuIDIxMDpcdFxuIDIxMTpcdFx0aGVscCA9IG5mY3RfaGVscChjdCk7XG4gMjEyOlx0XG4gMjEzOlx0XHRpZiAoaGVscGVyID09IE5VTEwpIHtcbiAyMTQ6XHRcdFx0aWYgKGhlbHApIHtcbiAyMTU6XHRcdFx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqdG1wID0gcmN1X2RlcmVmZXJlbmNlKGhlbHAtXHUwMDNlaGVscGVyKTtcbiAyMTY6XHRcbiAyMTc6XHRcdFx0XHRSQ1VfSU5JVF9QT0lOVEVSKGhlbHAtXHUwMDNlaGVscGVyLCBOVUxMKTtcbiAyMTg6XHRcdFx0XHRpZiAodG1wIFx1MDAyNlx1MDAyNiByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2dG1wLVx1MDAzZWN0X3JlZmNudCkpXG4gMjE5Olx0XHRcdFx0XHRrZnJlZV9yY3UodG1wLCByY3UpO1xuIDIyMDpcdFx0XHR9XG4gMjIxOlx0XHRcdHJldHVybiAwO1xuIDIyMjpcdFx0fVxuIDIyMzpcdFxuIDIyNDpcdFx0aWYgKGhlbHAgPT0gTlVMTCkge1xuIDIyNTpcdFx0XHRoZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIGZsYWdzKTtcbiAyMjY6XHRcdFx0aWYgKGhlbHAgPT0gTlVMTClcbiAyMjc6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyMjg6XHRcdH0gZWxzZSB7XG4gMjI5Olx0XHRcdC8qIFdlIG9ubHkgYWxsb3cgaGVscGVyIHJlLWFzc2lnbm1lbnQgb2YgdGhlIHNhbWUgc29ydCBzaW5jZVxuIDIzMDpcdFx0XHQgKiB3ZSBjYW5ub3QgcmVhbGxvY2F0ZSB0aGUgaGVscGVyIGV4dGVuc2lvbiBhcmVhLlxuIDIzMTpcdFx0XHQgKi9cbiAyMzI6XHRcdFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnRtcCA9IHJjdV9kZXJlZmVyZW5jZShoZWxwLVx1MDAzZWhlbHBlcik7XG4gMjMzOlx0XG4gMjM0Olx0XHRcdGlmICh0bXApIHtcbiAyMzU6XHRcdFx0XHRpZiAodG1wLVx1MDAzZWhlbHAgIT0gaGVscGVyLVx1MDAzZWhlbHApIHtcbiAyMzY6XHRcdFx0XHRcdFJDVV9JTklUX1BPSU5URVIoaGVscC1cdTAwM2VoZWxwZXIsIE5VTEwpO1xuIDIzNzpcdFx0XHRcdFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZ0bXAtXHUwMDNlY3RfcmVmY250KSlcbiAyMzg6XHRcdFx0XHRcdFx0a2ZyZWVfcmN1KHRtcCwgcmN1KTtcbiAyMzk6XHRcdFx0XHR9XG4gMjQwOlx0XHRcdFx0cmV0dXJuIDA7XG4gMjQxOlx0XHRcdH1cbiAyNDI6XHRcdH1cbiAyNDM6XHRcbiAyNDQ6XHRcdGlmIChyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2aGVscGVyLVx1MDAzZWN0X3JlZmNudCkpXG4gMjQ1Olx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihoZWxwLVx1MDAzZWhlbHBlciwgaGVscGVyKTtcbiAyNDY6XHRcbiAyNDc6XHRcdHJldHVybiAwO1xuIDI0ODpcdH1cbiAyNDk6XHRFWFBPUlRfU1lNQk9MX0dQTChfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDg4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGEgbmV0ZmlsdGVyIENoYW5nZSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgYSBtb2RpZmljYXRpb24gdG8gYF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJgLi4uIGludGVyZXN0aW5nLiYjMzQ7IEkga25vdyB0aGF0IGZ1bmN0aW9uIGlzIGV4cG9ydGVkLCB3aGljaCBtZWFucyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIHRob3JvdWdobHkuIE15IG5leHQgc3RlcCwgb2YgY291cnNlLCBpcyB0byBkZXRlcm1pbmUgdGhlIGNhbGwgc2l0ZXMgZm9yIGBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyYC4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzIGNyaXRpY2FsIGJlZm9yZSBJIGNhbiBhc3Nlc3MgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgbW9kaWZpY2F0aW9uIG9uIHRoZSBvdmVyYWxsIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aG9zZSBjYWxscyB0byBmdWxseSBncmFzcCB0aGUgcmFtaWZpY2F0aW9ucyBvZiB3aGF0ZXZlciBhbHRlcmF0aW9ucyBhcmUgcHJlc2VudCB3aXRoaW4gdGhpcyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jPTE3NTQ9aW5pdF9jb25udHJhY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMTgzNS1cdGlmICghZXhwIFx1MDAyNlx1MDAyNiB0bXBsKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jOjE4MzY6XHRcdF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoY3QsIHRtcGwsIEdGUF9BVE9NSUMpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTE4MzctXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9MTkwPUVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9leHRfYWRkKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTE5MS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjE5MjppbnQgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBuZl9jb25uICp0bXBsLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMTkzLVx0XHRcdCAgICAgIGdmcF90IGZsYWdzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTI0OC19XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzoyNDk6RVhQT1JUX1NZTUJPTF9HUEwoX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0yNTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcyNgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIGBpbml0X2Nvbm50cmFja2AgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgYGluaXRfY29ubnRyYWNrYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuY2AuIFRoaXMgaXMgYSBjb3JlIG5ldGZpbHRlciBmdW5jdGlvbiwgYW5kIGJhc2VkIG9uIHRoZSBjb250ZXh0LCBJIHRoaW5rIGl0JiMzOTtzIGRlZmluaXRlbHkgd29ydGggYWRkaW5nIHRvIHRoZSBmdXp6aW5nIHRhcmdldCBsaXN0LiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY29udHJvbCBpdHMgY29tcGlsYXRpb24uIEkmIzM5O20gcmVjYWxsaW5nIHRoYXQgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jYCBpcyBpbnZvbHZlZCwgYW5kIEkgc3VzcGVjdCBpdCYjMzk7cyBkZXBlbmRlbnQgb24gYENPTkZJR19ORl9DT05OVFJBQ0tgLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IGJ5IGNoZWNraW5nIHRoZSBgbmV0L25ldGZpbHRlci9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIHNldCB1cCB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Nvbm50cmFja19oZWxwZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9Mz1uZXRmaWx0ZXItJChDT05GSUdfTkVURklMVEVSX05FVExJTkspICYjNDM7PSBuZm5ldGxpbmsub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS00LVxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo1Om5mX2Nvbm50cmFjay15XHQ6PSBuZl9jb25udHJhY2tfY29yZS5vIG5mX2Nvbm50cmFja19zdGFuZGFsb25lLm8gbmZfY29ubnRyYWNrX2V4cGVjdC5vIG5mX2Nvbm50cmFja19oZWxwZXIubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS02LVx0XHQgICBuZl9jb25udHJhY2tfcHJvdG8ubyBuZl9jb25udHJhY2tfcHJvdG9fZ2VuZXJpYy5vIG5mX2Nvbm50cmFja19wcm90b190Y3AubyBuZl9jb25udHJhY2tfcHJvdG9fdWRwLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE4OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbm50cmFjayBDb25maWd1cmF0aW9uIGFuZCBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYENPTkZJR19ORl9DT05OVFJBQ0tgIGp1bXBzIG91dCDigJMgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgc3ltYm9scywgYW5kIHRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9uIGhlcmUgc2VlbXMgdG8gYmUgYF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJgLiBOb3csIEkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgaWYgYGluaXRfY29ubnRyYWNrYCBtaWdodCBhbHNvIGJlIGEgaG90LXBhdGggZnVuY3Rpb24sIGJ1dCB0aGVuIEkgcmVtZW1iZXJlZCB0aGF0IGlzIGNhbGxlZCBmb3IgZXZlcnkgbmV3IGNvbm5lY3Rpb24sIHNvIGl0IGNsZWFybHkgKmlzKiBhIGhvdC1wYXRoIGZ1bmN0aW9uLiAgSSBkb24mIzM5O3QgdGhpbmsgdGhhdCBpcyB0aGUgb25lIGluIGZvY3VzIGluIHRoaXMgcGF0Y2guCgpUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcmAsIHNvIEkgcmVhbGx5IG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgdXNlZC4gQXJlIHRoZXJlIG90aGVyIGNhbGwgc2l0ZXMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IExldCBtZSBzZWUgd2hlcmUgZWxzZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19uZl9jdF90cnlfYXNzaWduX2hlbHBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oPTEyMT1zdHJ1Y3QgbmZfY29ubl9oZWxwICpuZl9jdF9oZWxwZXJfZXh0X2FkZChzdHJ1Y3QgbmZfY29ubiAqY3QsIGdmcF90IGdmcCk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oLTEyMi1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmg6MTIzOmludCBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IG5mX2Nvbm4gKnRtcGwsXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oLTEyNC1cdFx0XHQgICAgICBnZnBfdCBmbGFncyk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jPTE3NTQ9aW5pdF9jb25udHJhY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMTgzNS1cdGlmICghZXhwIFx1MDAyNlx1MDAyNiB0bXBsKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jOjE4MzY6XHRcdF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoY3QsIHRtcGwsIEdGUF9BVE9NSUMpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTE4MzctXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9MTkwPUVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9leHRfYWRkKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTE5MS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjE5MjppbnQgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBuZl9jb25uICp0bXBsLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMTkzLVx0XHRcdCAgICAgIGdmcF90IGZsYWdzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTI0OC19XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzoyNDk6RVhQT1JUX1NZTUJPTF9HUEwoX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0yNTAtXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTcyND1zdGF0aWMgaW50IF9fb3ZzX2N0X2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy03OTgtXHRcdCAgICBpbmZvLVx1MDAzZWhlbHBlciBcdTAwMjZcdTAwMjYgIW5mY3RfaGVscChjdCkpIHtcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo3OTk6XHRcdFx0aW50IGVyciA9IF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoY3QsIGluZm8tXHUwMDNlY3QsXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtODAwLVx0XHRcdFx0XHRcdFx0ICAgIEdGUF9BVE9NSUMpO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz05Njg9VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9jdF9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTA2MS1cdGlmICghbmZfY3RfaXNfY29uZmlybWVkKGN0KSBcdTAwMjZcdTAwMjYgY29tbWl0IFx1MDAyNlx1MDAyNiBwLVx1MDAzZWhlbHBlciBcdTAwMjZcdTAwMjYgIW5mY3RfaGVscChjdCkpIHtcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMDYyOlx0XHRlcnIgPSBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKGN0LCBwLVx1MDAzZXRtcGwsIEdGUF9BVE9NSUMpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTEwNjMtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNjgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgYF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUuIEl0IGxvb2tzIGxpa2UgYF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdG8gZm9jdXMgb24uIEkgc2VlIGl0IG1lbnRpb25lZCBpbiBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYCAoYF9fb3ZzX2N0X2xvb2t1cGApIGFuZCBhbHNvIGluIGBuZXQvc2NoZWQvYWN0X2N0LmNgIChgdGNmX2N0X2FjdGApLCB3aGljaCByZWluZm9yY2VzIGl0cyBpbXBvcnRhbmNlLiBGcm9tIHRoZSB3YXkgdGhpbmdzIGxvb2ssIGl0IGFwcGVhcnMgdG8gYmUgYSBjb3JlIE5ldGZpbHRlciBmdW5jdGlvbiwgYnV0IGl0JiMzOTtzIG5vdCBvbiB0aGUgYWJzb2x1dGUgaG90dGVzdCBwYXRoLiBJdCYjMzk7cyBvbmx5IGludm9rZWQgd2hlbiBhIGhlbHBlciBpcyBhY3R1YWxseSBhc3NpZ25lZC4gVGhpcyBoYXBwZW5zIHdoZW4gdGhlcmUmIzM5O3MgYSBoZWxwZXIgaW4gdGhlIGB0bXBsYCBzdHJ1Y3R1cmUgZHVyaW5nIGBpbml0X2Nvbm50cmFja2AsIHdoZW4gYGluZm8tJmd0O2hlbHBlcmAgaXMgdXNlZCB3aXRoaW4gT1ZTLCBvciB3aGVuIGBwLSZndDtoZWxwZXJgIGlzIHVzZWQgaW4gVEMuIFNvLCBzdGlsbCBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbi4KCkxldCBtZSB0YWtlIGFub3RoZXIgbG9vayB0byBtYWtlIHN1cmUuIE9rYXksIHRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyYCwgc28gaXQmIzM5O3MgdGhlICpvbmx5KiBzeW1ib2wgdG8gZm9jdXMgb24uCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25maWcuIGBORl9DT05OVFJBQ0tgIHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBjb25maWcgdmFyaWFibGUgaGVyZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NPTk5UUkFDSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzQ9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo4Mjpjb25maWcgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTExMT1jb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTE0OmNvbmZpZyBORl9DT05OVFJBQ0tfTUFSS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTIzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0VDTUFSS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyBzZWN1cml0eSBtYXJrIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTM2OmNvbmZpZyBORl9DT05OVFJBQ0tfWk9ORVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ4OmNvbmZpZyBORl9DT05OVFJBQ0tfUFJPQ0ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5LVx0Ym9vbCBcJiMzNDtTdXBwbHkgQ1QgbGlzdCBpbiBwcm9jZnMgKE9CU09MRVRFKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU3OmNvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU4LVx0Ym9vbCBcJiMzNDtDb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50c1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTY3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRU9VVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2OC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE3Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVTVEFNUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3OC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lc3RhbXBpbmcmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTg4OmNvbmZpZyBORl9DT05OVFJBQ0tfTEFCRUxTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg5LVx0Ym9vbCBcJiMzNDtDb25uZWN0aW9uIHRyYWNraW5nIGxhYmVsc1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTk1OmNvbmZpZyBORl9DT05OVFJBQ0tfT1ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVx0Ym9vbFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjExLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMy1cdHRyaXN0YXRlIFwmIzM0O0FtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjI3OmNvbmZpZyBORl9DT05OVFJBQ0tfRlRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI4LVx0dHJpc3RhdGUgXCYjMzQ7RlRQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjM4LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIzOTpjb25maWcgTkZfQ09OTlRSQUNLX0gzMjNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXHR0cmlzdGF0ZSBcJiMzNDtILjMyMyBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI1Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNTg6Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTktXHR0cmlzdGF0ZSBcJiMzNDtJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc0OmNvbmZpZyBORl9DT05OVFJBQ0tfQlJPQURDQVNUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc1LVx0dHJpc3RhdGVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc3OmNvbmZpZyBORl9DT05OVFJBQ0tfTkVUQklPU19OU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cdHRyaXN0YXRlIFwmIzM0O05ldEJJT1MgbmFtZSBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5Njpjb25maWcgTkZfQ09OTlRSQUNLX1NOTVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTctXHR0cmlzdGF0ZSBcJiMzNDtTTk1QIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzExOmNvbmZpZyBORl9DT05OVFJBQ0tfUFBUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMi1cdHRyaXN0YXRlIFwmIzM0O1BQdFAgcHJvdG9jb2wgc3VwcG9ydCAoZGVwcmVjYXRlZClcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzI5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjMzMDpjb25maWcgTkZfQ09OTlRSQUNLX1NBTkVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMzEtXHR0cmlzdGF0ZSBcJiMzNDtTQU5FIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0NC1cdHRyaXN0YXRlIFwmIzM0O1NJUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNTU6Y29uZmlnIE5GX0NPTk5UUkFDS19URlRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU2LVx0dHJpc3RhdGUgXCYjMzQ7VEZUUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMzUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25uZWN0aW9uIFRyYWNraW5nIENvbnVuZHJ1bSoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGp1c3QgZW5hYmxpbmcgYE5GX0NPTk5UUkFDS2Agc2hvdWxkIGJlIHN1ZmZpY2llbnQuIEJ1dCB0aGVuIEkgcmVtZW1iZXJlZCwgdGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIGFzc2lnbmluZyBhIGhlbHBlciwgcmlnaHQ/IFNvLCBwZXJoYXBzIHdlIG5lZWQgdG8gYmUgbW9yZSBhZ2dyZXNzaXZlIHdpdGggaGVscGVyIGVuYWJsZW1lbnQuIE1heWJlIHRoYXQgbWVhbnMgZmxpcHBpbmcgb24gc29tZSBvZiB0aGUgbW9yZSBzcGVjaWZpYyBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgdG8gZW5zdXJlIGB0bXBsYCwgb3Igd2hhdGV2ZXIgbW9kdWxlIGlzIHRoZSB0YXJnZXQsIGNhbiBzdWNjZXNzZnVsbHkgbGV2ZXJhZ2UgYSBoZWxwZXIuIEkmIzM5O20gdGhpbmtpbmcgdGhpbmdzIGxpa2UgYE5GX0NPTk5UUkFDS19GVFBgLCBgTkZfQ09OTlRSQUNLX1NJUGAsIGFuZCB0aGUgbGlrZS4gU3RpbGwsIGBORl9DT05OVFJBQ0tgIGlzIHRoZSBmb3VuZGF0aW9uLiBJdCYjMzk7cyB0aGUgYmlnIG9uZS4gQmVmb3JlIEkgZ28gdG9vIGZhciBkb3duIHRoaXMgcm9hZCwgSSBzaG91bGQgdmVyaWZ5IGlmIGBORl9DT05OVFJBQ0tgIGl0c2VsZiByZWxpZXMgb24gYW55IG90aGVyIG1vZHVsZXMgb3IgY29uZmlndXJhdGlvbnMuIE5lZWQgdG8gY2hlY2sgaXRzIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NPTk5UUkFDSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzQ9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo4Mjpjb25maWcgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTExMT1jb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTE0OmNvbmZpZyBORl9DT05OVFJBQ0tfTUFSS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTIzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0VDTUFSS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyBzZWN1cml0eSBtYXJrIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTM2OmNvbmZpZyBORl9DT05OVFJBQ0tfWk9ORVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ4OmNvbmZpZyBORl9DT05OVFJBQ0tfUFJPQ0ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5LVx0Ym9vbCBcJiMzNDtTdXBwbHkgQ1QgbGlzdCBpbiBwcm9jZnMgKE9CU09MRVRFKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU3OmNvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU4LVx0Ym9vbCBcJiMzNDtDb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50c1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTY3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRU9VVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2OC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE3Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVTVEFNUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3OC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lc3RhbXBpbmcmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTg4OmNvbmZpZyBORl9DT05OVFJBQ0tfTEFCRUxTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg5LVx0Ym9vbCBcJiMzNDtDb25uZWN0aW9uIHRyYWNraW5nIGxhYmVsc1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTk1OmNvbmZpZyBORl9DT05OVFJBQ0tfT1ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVx0Ym9vbFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjExLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMy1cdHRyaXN0YXRlIFwmIzM0O0FtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjI3OmNvbmZpZyBORl9DT05OVFJBQ0tfRlRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI4LVx0dHJpc3RhdGUgXCYjMzQ7RlRQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjM4LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIzOTpjb25maWcgTkZfQ09OTlRSQUNLX0gzMjNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXHR0cmlzdGF0ZSBcJiMzNDtILjMyMyBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI1Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNTg6Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTktXHR0cmlzdGF0ZSBcJiMzNDtJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc0OmNvbmZpZyBORl9DT05OVFJBQ0tfQlJPQURDQVNUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc1LVx0dHJpc3RhdGVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc3OmNvbmZpZyBORl9DT05OVFJBQ0tfTkVUQklPU19OU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cdHRyaXN0YXRlIFwmIzM0O05ldEJJT1MgbmFtZSBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5Njpjb25maWcgTkZfQ09OTlRSQUNLX1NOTVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTctXHR0cmlzdGF0ZSBcJiMzNDtTTk1QIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzExOmNvbmZpZyBORl9DT05OVFJBQ0tfUFBUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMi1cdHRyaXN0YXRlIFwmIzM0O1BQdFAgcHJvdG9jb2wgc3VwcG9ydCAoZGVwcmVjYXRlZClcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzI5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjMzMDpjb25maWcgTkZfQ09OTlRSQUNLX1NBTkVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMzEtXHR0cmlzdGF0ZSBcJiMzNDtTQU5FIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0NC1cdHRyaXN0YXRlIFwmIzM0O1NJUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNTU6Y29uZmlnIE5GX0NPTk5UUkFDS19URlRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU2LVx0dHJpc3RhdGUgXCYjMzQ7VEZUUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MjIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgRGVwZW5kZW5jaWVzOiBBIEtjb25maWcgRGl2ZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5GX0NPTk5UUkFDS2Agd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbmV0ZmlsdGVyIHN1YnN5c3RlbS4gVGhlIG1vc3QgZGlyZWN0IGFwcHJvYWNoLCBhcyBhbHdheXMsIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcHVsbGluZyB1cCB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgaW5pdGlhbCBsaW5lczsgdXN1YWxseSwgdGhlIGVhcmx5IGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGxhaWQgb3V0IHRoZXJlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB3aGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBtb2R1bGVzIGFyZSBwcmVyZXF1aXNpdGVzIGZvciBgTkZfQ09OTlRSQUNLYCB0byBldmVuIGJlIGNvbnNpZGVyZWQgZm9yIGluY2x1c2lvbi4gTm8gcG9pbnQgaW4gd2FkaW5nIHRocm91Z2ggdGhlIHdob2xlIHRoaW5nIGluaXRpYWxseTsgbGV0JiMzOTtzIGdldCB0aGUgZ2lzdCBhbmQgYnVpbGQgZnJvbSB0aGVyZS4gVGhpcyBzaG91bGQgdGVsbCBtZSBxdWlja2x5IHdoZXRoZXIgSSYjMzk7bSBsb29raW5nIGF0IGEgc2ltcGxlIGRlcGVuZGVuY3kgdHJlZSBvciBhIG1vcmUgY29tcGxleCB3ZWIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdFx0ICBmb3IgcGFzc2l2ZSBPUyBmaW5nZXJwcmludCB2aWEgTkZORVRMSU5LLlxuICA4MTpcdFxuICA4MjpcdGNvbmZpZyBORl9DT05OVFJBQ0tcbiAgODM6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcJiMzNDtcbiAgODQ6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuICA4NTpcdFx0c2VsZWN0IE5GX0RFRlJBR19JUFY0XG4gIDg2Olx0XHRzZWxlY3QgTkZfREVGUkFHX0lQVjYgaWYgSVBWNiAhPSBuXG4gIDg3Olx0XHRoZWxwXG4gIDg4Olx0XHQgIENvbm5lY3Rpb24gdHJhY2tpbmcga2VlcHMgYSByZWNvcmQgb2Ygd2hhdCBwYWNrZXRzIGhhdmUgcGFzc2VkXG4gIDg5Olx0XHQgIHRocm91Z2ggeW91ciBtYWNoaW5lLCBpbiBvcmRlciB0byBmaWd1cmUgb3V0IGhvdyB0aGV5IGFyZSByZWxhdGVkXG4gIDkwOlx0XHQgIGludG8gY29ubmVjdGlvbnMuXG4gIDkxOlx0XG4gIDkyOlx0XHQgIFRoaXMgaXMgcmVxdWlyZWQgdG8gZG8gTWFzcXVlcmFkaW5nIG9yIG90aGVyIGtpbmRzIG9mIE5ldHdvcmtcbiAgOTM6XHRcdCAgQWRkcmVzcyBUcmFuc2xhdGlvbi4gIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gZW5oYW5jZSBwYWNrZXRcbiAgOTQ6XHRcdCAgZmlsdGVyaW5nIChzZWUgYENvbm5lY3Rpb24gc3RhdGUgbWF0Y2ggc3VwcG9ydCYjMzk7IGJlbG93KS5cbiAgOTU6XHRcbiAgOTY6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gIDk3Olx0XG4gIDk4Olx0Y29uZmlnIE5GX0xPR19TWVNMT0dcbiAgOTk6XHRcdHRyaXN0YXRlIFwmIzM0O1N5c2xvZyBwYWNrZXQgbG9nZ2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM3NQoJCQkJCQkJb3V0cHV0OiAxMzcKCQkJCQkJCXRob3VnaHRzOiAyNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgSW1wYWN0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgTkZfQ09OTlRSQUNLYCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24uIFRoZXJlJiMzOTtzIG5vIGRlcGVuZGVuY3kgc3BlY2lmaWVkLCBzbyBpdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGRpcmVjdCBhcHByb2FjaC4gSSYjMzk7bGwgaW5jbHVkZSBgTkVURklMVEVSYCBhcyB3ZWxsLCBqdXN0IHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIGEgbWVudWNvbmZpZyBpdGVtIGFuZCBwcm9iYWJseSBhbHJlYWR5IGltcGxpZWQuIEJ1dCByZWFsaXN0aWNhbGx5LCBgTkZfQ09OTlRSQUNLYCBzaG91bGQgYmUgdGhlIGNvcmUgcmVxdWlyZW1lbnQgaGVyZS4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIHNpZ25pZmljYW5jZSBvZiBgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcmAuIElzIGl0IHN0YXRpYywgb3IgaW5saW5lPyBIbW0sIGxvb2tzIGxpa2UgaXQmIzM5O3MgYSBkZWNsYXJlZCBhcyBgaW50IF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCwgZ2ZwX3QgZmxhZ3MpYC4gQWxyaWdodCwgaXQmIzM5O3MgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgZ29vZDsgdGhhdCBjb25maXJtcyBpdCBhcyBhIHNpZ25pZmljYW50IGZvY3VzIHN5bWJvbCBmb3IgdGhpcyBjaGFuZ2UuCgpNeSByZWFzb25pbmcgaGVyZSBpcyB0aGF0IHRoZSBwYXRjaCBpcyBkaXJlY3RseSBtb2RpZnlpbmcgdGhpcyBmdW5jdGlvbiB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBpbnRyb2R1Y2luZyBhIGNoZWNrIGZvciB0aGUgcHJvdG9jb2wgbnVtYmVyIHdpdGhpbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXIgYXNzaWdubWVudCBsb2dpYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNvcmUgTmV0ZmlsdGVyIG1vZGlmaWNhdGlvbiBkZWFsaW5nIHdpdGggaG93IGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycyBhcmUgYXNzaWduZWQgdG8gY29ubmVjdGlvbnMuIEl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIOKAkyBuZXR3b3JrIHRyYWZmaWMgY2FuIHRyaWdnZXIgdGhpcyBjb2RlIHBhdGggaWYgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycyBhcmUgaW4gdXNlLgoKU28sIHRoZSBmb2N1cyBzeW1ib2wgaXMgZGVmaW5pdGVseSBgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcmAsIGFuZCB0aGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbiwgYXMgSSBvcmlnaW5hbGx5IHRob3VnaHQsIGlzIGp1c3QgYE5GX0NPTk5UUkFDS2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyYCBpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNgIHRvIGFkZCBhIGNoZWNrIGZvciB0aGUgcHJvdG9jb2wgbnVtYmVyIG9mIHRoZSBoZWxwZXIgYW5kIHRoZSBjb25uZWN0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgbG9naWMsIHNwZWNpZmljYWxseSB3aGVuIGFzc2lnbmluZyBhIGhlbHBlciB0byBhIGNvbm5lY3Rpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgYnkgbmV0d29yayB0cmFmZmljIHdoZW4gY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzIGFyZSB1c2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyYCBpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNgIHRvIGFkZCBhIGNoZWNrIGZvciB0aGUgcHJvdG9jb2wgbnVtYmVyIG9mIHRoZSBoZWxwZXIgYW5kIHRoZSBjb25uZWN0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgbG9naWMsIHNwZWNpZmljYWxseSB3aGVuIGFzc2lnbmluZyBhIGhlbHBlciB0byBhIGNvbm5lY3Rpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgYnkgbmV0d29yayB0cmFmZmljIHdoZW4gY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzIGFyZSB1c2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBlbnN1cmUgdGhhdCB0aGUgcHJvdG9jb2wgbnVtYmVyIG9mIGEgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXIgbWF0Y2hlcyB0aGUgcHJvdG9jb2wgbnVtYmVyIG9mIHRoZSBjb25uZWN0aW9uIGl0IGlzIGJlaW5nIGFzc2lnbmVkIHRvLiBUaGlzIHByZXZlbnRzIGEgaGVscGVyIGRlc2lnbmVkIGZvciBvbmUgcHJvdG9jb2wgZnJvbSBiZWluZyBpbmNvcnJlY3RseSBhc3NpZ25lZCB0byBhIGNvbm5lY3Rpb24gb2YgYW5vdGhlciBwcm90b2NvbC4gU3VjaCBhIG1pc21hdGNoIGNvdWxkIGxlYWQgdG8gdHlwZSBjb25mdXNpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyB3aGVuIHRoZSBoZWxwZXIgYXR0ZW1wdHMgdG8gcGFyc2UgcGFja2V0cy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIG1lbW9yeSBzYWZldHkgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmMTk5ODMwZDAxYzdiZjU4Y2RkOTczMzQ1ZDFhNGJkYTg3ZWVjMDg2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMDA6MDQ6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jCmluZGV4IDUwMDUwOWIxNzY2M2UuLjQxOWFmNmY3NmJkMjcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jCkBAIC0yMDUsNiAmIzQzOzIwNSw4IEBAIGludCBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IG5mX2Nvbm4gKnRtcGwsCiAJaGVscCA9IG5mY3RfaGVscCh0bXBsKTsKIAlpZiAoaGVscCkKIAkJaGVscGVyID0gcmN1X2RlcmVmZXJlbmNlKGhlbHAtJmd0O2hlbHBlcik7CiYjNDM7CWlmIChoZWxwZXIgJmFtcDsmYW1wOyBoZWxwZXItJmd0O3R1cGxlLmRzdC5wcm90b251bSAhPSBuZl9jdF9wcm90b251bShjdCkpCiYjNDM7CQloZWxwZXIgPSBOVUxMOwogCiAJaGVscCA9IG5mY3RfaGVscChjdCk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0ZmlsdGVyIENvbm50cmFjayBIZWxwZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyYC4gVGhlIGNydWNpYWwgYWRkaXRpb24gaXMgdGhhdCBwcm90b2NvbCBudW1iZXIgY2hlY2suIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgcHJldmVudGluZyBhIGhlbHBlciBmcm9tIGJlaW5nIGFzc2lnbmVkIHRvIGEgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSBpZiB0aGUgaGVscGVyJiMzOTtzIGV4cGVjdGVkIHByb3RvY29sIChgaGVscGVyLSZndDt0dXBsZS5kc3QucHJvdG9udW1gKSBkb2VzbiYjMzk7dCBtYXRjaCB0aGUgY3VycmVudCBjb25uZWN0aW9uJiMzOTtzIHByb3RvY29sIChgbmZfY3RfcHJvdG9udW0oY3QpYCkuCgpUaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBidWcgZml4LiBUaGUgc2NlbmFyaW8gdGhleSYjMzk7cmUgYXZvaWRpbmcgaXMgcHJldHR5IGNsZWFyIHRvIG1lOiBhIGhlbHBlciBkZXNpZ25lZCBmb3IsIHNheSwgVENQIGNvbm5lY3Rpb25zIGdldHRpbmcgaW5hZHZlcnRlbnRseSBhc3NpZ25lZCB0byBhIFVEUCBjb25uZWN0aW9uIG9yIHZpY2UgdmVyc2EuIFRoZSBpbXBsaWNhdGlvbnMgYXJlIGNvbmNlcm5pbmcg4oCTIHRoaXMgY291bGQgZWFzaWx5IGxlYWQgdG8gYSByYW5nZSBvZiBuYXN0eSBpc3N1ZXMsIGxpa2Ugb3V0LW9mLWJvdW5kcyByZWFkcyBvciB3cml0ZXMsIHNvbWUga2luZCBvZiB0eXBlIGNvbmZ1c2lvbiBpZiB0aGUgaGVscGVyIGF0dGVtcHRzIHRvIGludGVycHJldCBwYWNrZXRzIHVzaW5nIHRoZSB3cm9uZyBwcm90b2NvbCBzZW1hbnRpY3MuIEkgZG9uJiMzOTt0IHRoaW5rIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHRoZSBkaXJlY3QgcHJvYmxlbSwgYWx0aG91Z2ggdGhhdCBraW5kIG9mIGJ1ZyAqY291bGQqIGFyaXNlIGZyb20gdGhpcyBraW5kIG9mIG1pcy1hc3NpZ25tZW50LiBUaGlzIGlzIGEgY2xhc3NpYyBsb2dpYyBlcnJvciwgYSB0eXBlIGNvbmZ1c2lvbiBpc3N1ZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIGBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyYCB0byBzZWUgd2hhdCBlbHNlIHRoZXkmIzM5O3JlIGRvaW5nIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTU6XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIgPSBOVUxMO1xuIDE5NjpcdFx0c3RydWN0IG5mX2Nvbm5faGVscCAqaGVscDtcbiAxOTc6XHRcbiAxOTg6XHRcdC8qIFdlIGFscmVhZHkgZ290IGEgaGVscGVyIGV4cGxpY2l0bHkgYXR0YWNoZWQgKGUuZy4gbmZ0X2N0KSAqL1xuIDE5OTpcdFx0aWYgKHRlc3RfYml0KElQU19IRUxQRVJfQklULCBcdTAwMjZjdC1cdTAwM2VzdGF0dXMpKVxuIDIwMDpcdFx0XHRyZXR1cm4gMDtcbiAyMDE6XHRcbiAyMDI6XHRcdGlmIChXQVJOX09OX09OQ0UoIXRtcGwpKVxuIDIwMzpcdFx0XHRyZXR1cm4gMDtcbiAyMDQ6XHRcbiAyMDU6XHRcdGhlbHAgPSBuZmN0X2hlbHAodG1wbCk7XG4gMjA2Olx0XHRpZiAoaGVscClcbiAyMDc6XHRcdFx0aGVscGVyID0gcmN1X2RlcmVmZXJlbmNlKGhlbHAtXHUwMDNlaGVscGVyKTtcbiAyMDg6XHRcdGlmIChoZWxwZXIgXHUwMDI2XHUwMDI2IGhlbHBlci1cdTAwM2V0dXBsZS5kc3QucHJvdG9udW0gIT0gbmZfY3RfcHJvdG9udW0oY3QpKVxuIDIwOTpcdFx0XHRoZWxwZXIgPSBOVUxMO1xuIDIxMDpcdFxuIDIxMTpcdFx0aGVscCA9IG5mY3RfaGVscChjdCk7XG4gMjEyOlx0XG4gMjEzOlx0XHRpZiAoaGVscGVyID09IE5VTEwpIHtcbiAyMTQ6XHRcdFx0aWYgKGhlbHApIHtcbiAyMTU6XHRcdFx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqdG1wID0gcmN1X2RlcmVmZXJlbmNlKGhlbHAtXHUwMDNlaGVscGVyKTtcbiAyMTY6XHRcbiAyMTc6XHRcdFx0XHRSQ1VfSU5JVF9QT0lOVEVSKGhlbHAtXHUwMDNlaGVscGVyLCBOVUxMKTtcbiAyMTg6XHRcdFx0XHRpZiAodG1wIFx1MDAyNlx1MDAyNiByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2dG1wLVx1MDAzZWN0X3JlZmNudCkpXG4gMjE5Olx0XHRcdFx0XHRrZnJlZV9yY3UodG1wLCByY3UpO1xuIDIyMDpcdFx0XHR9XG4gMjIxOlx0XHRcdHJldHVybiAwO1xuIDIyMjpcdFx0fVxuIDIyMzpcdFxuIDIyNDpcdFx0aWYgKGhlbHAgPT0gTlVMTCkge1xuIDIyNTpcdFx0XHRoZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIGZsYWdzKTtcbiAyMjY6XHRcdFx0aWYgKGhlbHAgPT0gTlVMTClcbiAyMjc6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyMjg6XHRcdH0gZWxzZSB7XG4gMjI5Olx0XHRcdC8qIFdlIG9ubHkgYWxsb3cgaGVscGVyIHJlLWFzc2lnbm1lbnQgb2YgdGhlIHNhbWUgc29ydCBzaW5jZVxuIDIzMDpcdFx0XHQgKiB3ZSBjYW5ub3QgcmVhbGxvY2F0ZSB0aGUgaGVscGVyIGV4dGVuc2lvbiBhcmVhLlxuIDIzMTpcdFx0XHQgKi9cbiAyMzI6XHRcdFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnRtcCA9IHJjdV9kZXJlZmVyZW5jZShoZWxwLVx1MDAzZWhlbHBlcik7XG4gMjMzOlx0XG4gMjM0Olx0XHRcdGlmICh0bXApIHtcbiAyMzU6XHRcdFx0XHRpZiAodG1wLVx1MDAzZWhlbHAgIT0gaGVscGVyLVx1MDAzZWhlbHApIHtcbiAyMzY6XHRcdFx0XHRcdFJDVV9JTklUX1BPSU5URVIoaGVscC1cdTAwM2VoZWxwZXIsIE5VTEwpO1xuIDIzNzpcdFx0XHRcdFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZ0bXAtXHUwMDNlY3RfcmVmY250KSlcbiAyMzg6XHRcdFx0XHRcdFx0a2ZyZWVfcmN1KHRtcCwgcmN1KTtcbiAyMzk6XHRcdFx0XHR9XG4gMjQwOlx0XHRcdFx0cmV0dXJuIDA7XG4gMjQxOlx0XHRcdH1cbiAyNDI6XHRcdH1cbiAyNDM6XHRcbiAyNDQ6XHRcdGlmIChyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2aGVscGVyLVx1MDAzZWN0X3JlZmNudCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMjYKCQkJCQkJCW91dHB1dDogMTUyCgkJCQkJCQl0aG91Z2h0czogMjQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSGVscGVyIFByb3RvY29sIENoZWNrKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IHByZXZlbnRpbmcgYSBoZWxwZXIgZnVuY3Rpb24gZnJvbSBnZXR0aW5nIGFzc2lnbmVkIHRvIGEgY29ubmVjdGlvbiB3aXRoIGEgbWlzbWF0Y2hlZCBwcm90b2NvbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7QWgsIGNsYXNzaWMgbG9naWMgYnVnIHRlcnJpdG9yeS4mIzM0OyBJZiB0aGUgaGVscGVyJiMzOTtzIHByb3RvY29sIGRvZXNuJiMzOTt0IGFsaWduIHdpdGggdGhlIGNvbm5lY3Rpb24mIzM5O3MsIHRoaW5ncyBjYW4gZ28gc2lkZXdheXMgKmZhc3QqIGR1cmluZyBwYWNrZXQgcGFyc2luZy4gV2UmIzM5O3JlIHBvdGVudGlhbGx5IGxvb2tpbmcgYXQgdHlwZSBjb25mdXNpb24sIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzIOKAkyB0aGUgdXN1YWwgc3VzcGVjdHMuIFRoYW5rZnVsbHksIHRoZXNlIGFyZSBnZW5lcmFsbHkgdGhlIGtpbmRzIG9mIGlzc3VlcyB0aGF0IEtBU0FOIGFuZCB0aG9zZSBvdGhlciBtZW1vcnkgc2FmZXR5IHRvb2xzIGFyZSBidWlsdCB0byBjYXRjaCBwcmV0dHkgcmVsaWFibHkuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6ICp3aGF0IGtpbmQgb2YgZnV6emluZyBzaG91bGQgd2UgZG8/KiBSZWFkaW5nIG9uLCBpdCBzZWVtcyB0aGVyZSYjMzk7cyBubyBldmlkZW5jZSBoZXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgd2hpY2ggYXJlIHRoZSBtYWluIHRhcmdldHMgZm9yIEtNU0FOLiBUaGUgY29yZSBwcm9ibGVtIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIHNlZW1zIHRvIGJlIGEgbG9naWMgZXJyb3IgdGhhdCBwb3RlbnRpYWxseSBsZWFkcyB0byBtZW1vcnkgY29ycnVwdGlvbiB0aHJvdWdoIGltcHJvcGVyIHBhcnNpbmcgYW5kIHR5cGUgY29uZnVzaW9uIHdoZW4gaW5jb3JyZWN0IGZ1bmN0aW9ucyBvcGVyYXRlIG9uIG1pc21hdGNoZWQgZGF0YS4gVGhlcmVmb3JlLCBJIGRvbiYjMzk7dCBzZWUgYSBjb21wZWxsaW5nIHJlYXNvbiB0byBkZWRpY2F0ZSBhIGZ1enppbmcgc2Vzc2lvbiB0byBLTVNBTi4gU3RhbmRhcmQgZnV6emluZyBhbmQgZXhpc3RpbmcgbWVtb3J5IHNhZmV0eSB0b29scyBzaG91bGQgc3VmZmljZSBmb3IgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZSBwcm90b2NvbCBudW1iZXIgb2YgYSBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlciBtYXRjaGVzIHRoZSBwcm90b2NvbCBudW1iZXIgb2YgdGhlIGNvbm5lY3Rpb24gaXQgaXMgYmVpbmcgYXNzaWduZWQgdG8uIFRoaXMgcHJldmVudHMgYSBoZWxwZXIgZGVzaWduZWQgZm9yIG9uZSBwcm90b2NvbCBmcm9tIGJlaW5nIGluY29ycmVjdGx5IGFzc2lnbmVkIHRvIGEgY29ubmVjdGlvbiBvZiBhbm90aGVyIHByb3RvY29sLiBTdWNoIGEgbWlzbWF0Y2ggY291bGQgbGVhZCB0byB0eXBlIGNvbmZ1c2lvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIHdoZW4gdGhlIGhlbHBlciBhdHRlbXB0cyB0byBwYXJzZSBwYWNrZXRzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgdGhlIHByb3RvY29sIG51bWJlciBvZiBhIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIG1hdGNoZXMgdGhlIHByb3RvY29sIG51bWJlciBvZiB0aGUgY29ubmVjdGlvbiBpdCBpcyBiZWluZyBhc3NpZ25lZCB0by4gVGhpcyBwcmV2ZW50cyBhIGhlbHBlciBkZXNpZ25lZCBmb3Igb25lIHByb3RvY29sIGZyb20gYmVpbmcgaW5jb3JyZWN0bHkgYXNzaWduZWQgdG8gYSBjb25uZWN0aW9uIG9mIGFub3RoZXIgcHJvdG9jb2wuIFN1Y2ggYSBtaXNtYXRjaCBjb3VsZCBsZWFkIHRvIHR5cGUgY29uZnVzaW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgd2hlbiB0aGUgaGVscGVyIGF0dGVtcHRzIHRvIHBhcnNlIHBhY2tldHMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MDQ6MjAuMzI1MTcwNDc0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI1MzcyODEzOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19uZl9jdF90cnlfYXNzaWduX2hlbHBlclwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZSBwcm90b2NvbCBudW1iZXIgb2YgYSBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlciBtYXRjaGVzIHRoZSBwcm90b2NvbCBudW1iZXIgb2YgdGhlIGNvbm5lY3Rpb24gaXQgaXMgYmVpbmcgYXNzaWduZWQgdG8uIFRoaXMgcHJldmVudHMgYSBoZWxwZXIgZGVzaWduZWQgZm9yIG9uZSBwcm90b2NvbCBmcm9tIGJlaW5nIGluY29ycmVjdGx5IGFzc2lnbmVkIHRvIGEgY29ubmVjdGlvbiBvZiBhbm90aGVyIHByb3RvY29sLiBTdWNoIGEgbWlzbWF0Y2ggY291bGQgbGVhZCB0byB0eXBlIGNvbmZ1c2lvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIHdoZW4gdGhlIGhlbHBlciBhdHRlbXB0cyB0byBwYXJzZSBwYWNrZXRzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJgIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY2AgdG8gYWRkIGEgY2hlY2sgZm9yIHRoZSBwcm90b2NvbCBudW1iZXIgb2YgdGhlIGhlbHBlciBhbmQgdGhlIGNvbm5lY3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IHdoZW4gYXNzaWduaW5nIGEgaGVscGVyIHRvIGEgY29ubmVjdGlvbi4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSBuZXR3b3JrIHRyYWZmaWMgd2hlbiBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgYXJlIHVzZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjA0OjIwLjMyNTE3NzA1NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI1ODI0Njc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjE5OTgzMGQwMWM3YmY1OGNkZDk3MzM0NWQxYTRiZGE4N2VlYzA4NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwMDowNDoxOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXFxuaW5kZXggNTAwNTA5YjE3NjYzZS4uNDE5YWY2Zjc2YmQyNyAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXFxuQEAgLTIwNSw2ICsyMDUsOCBAQCBpbnQgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBuZl9jb25uICp0bXBsLFxcbiBcXHRoZWxwID0gbmZjdF9oZWxwKHRtcGwpO1xcbiBcXHRpZiAoaGVscClcXG4gXFx0XFx0aGVscGVyID0gcmN1X2RlcmVmZXJlbmNlKGhlbHAtXFx1MDAzZWhlbHBlcik7XFxuK1xcdGlmIChoZWxwZXIgXFx1MDAyNlxcdTAwMjYgaGVscGVyLVxcdTAwM2V0dXBsZS5kc3QucHJvdG9udW0gIT0gbmZfY3RfcHJvdG9udW0oY3QpKVxcbitcXHRcXHRoZWxwZXIgPSBOVUxMO1xcbiBcXG4gXFx0aGVscCA9IG5mY3RfaGVscChjdCk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDowNDoyMC43NTE3MjUzNzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MDE1NzgwMjI4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9DT05OVFJBQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJgIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY2AgdG8gYWRkIGEgY2hlY2sgZm9yIHRoZSBwcm90b2NvbCBudW1iZXIgb2YgdGhlIGhlbHBlciBhbmQgdGhlIGNvbm5lY3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IHdoZW4gYXNzaWduaW5nIGEgaGVscGVyIHRvIGEgY29ubmVjdGlvbi4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSBuZXR3b3JrIHRyYWZmaWMgd2hlbiBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgYXJlIHVzZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYxOTk4MzBkMDFjN2JmNThjZGQ5NzMzNDVkMWE0YmRhODdlZWMwODZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwMDowNDoxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcbmluZGV4IDUwMDUwOWIxNzY2M2UuLjQxOWFmNmY3NmJkMjcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcbkBAIC0yMDUsNiArMjA1LDggQEAgaW50IF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCxcbiBcdGhlbHAgPSBuZmN0X2hlbHAodG1wbCk7XG4gXHRpZiAoaGVscClcbiBcdFx0aGVscGVyID0gcmN1X2RlcmVmZXJlbmNlKGhlbHAtXHUwMDNlaGVscGVyKTtcbitcdGlmIChoZWxwZXIgXHUwMDI2XHUwMDI2IGhlbHBlci1cdTAwM2V0dXBsZS5kc3QucHJvdG9udW0gIT0gbmZfY3RfcHJvdG9udW0oY3QpKVxuK1x0XHRoZWxwZXIgPSBOVUxMO1xuIFxuIFx0aGVscCA9IG5mY3RfaGVscChjdCk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDowNDoyMC43NTE3MjY2ODFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjUzMjk4NzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29ubnRyYWNrIEhlbHBlciBBc3NpZ25tZW50IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jYC4gU2VlbXMgbGlrZSB0aGV5J3ZlIG1vZGlmaWVkIHRoZSBgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcmAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIFNwZWNpZmljYWxseSwgdGhleSd2ZSBpbnRyb2R1Y2VkIGEgY2hlY2suIExldCBtZSBwdWxsIHVwIHRoZSByZWxldmFudCBjb2RlIHNuaXBwZXQ6XG5cbmBgYGNcblx0aWYgKGhlbHBlciBcdTAwMjZcdTAwMjYgaGVscGVyLVx1MDAzZXR1cGxlLmRzdC5wcm90b251bSAhPSBuZl9jdF9wcm90b251bShjdCkpXG5cdFx0aGVscGVyID0gTlVMTDtcbmBgYFxuXG5SaWdodCwgZ290IGl0LiBUaGlzIGNvbmRpdGlvbmFsIGlzIGNydWNpYWwuIEVzc2VudGlhbGx5LCB0aGUgY29kZSBpcyB2ZXJpZnlpbmcgdGhhdCBpZiBhIGhlbHBlciBpcyBhbHJlYWR5IGF2YWlsYWJsZSwgdGhlIHByb3RvY29sIG51bWJlciBvZiB0aGF0IGhlbHBlciAqbXVzdCogbWF0Y2ggdGhlIHByb3RvY29sIG51bWJlciBvZiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeS4gSWYgdGhlcmUncyBhIG1pc21hdGNoIOKAkyBtZWFuaW5nLCBpZiB0aGUgaGVscGVyIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGRpZmZlcmVudCBwcm90b2NvbCB0aGFuIHRoZSBjb25uZWN0aW9uIOKAkyB0aGUgYGhlbHBlcmAgcG9pbnRlciBpcyBiZWluZyBzZXQgdG8gYE5VTExgLiBUaGlzIGltcGxpZXMgdGhhdCB0aGUgZXhpc3RpbmcgaGVscGVyIGlzIGluY29tcGF0aWJsZSBhbmQgbmVlZHMgdG8gYmUgZGlzY2FyZGVkLiBUaGlzIHByb2JhYmx5IG1lYW5zIGEgc3BlY2lmaWMgSGVscGVyIGlzbid0IHZhbGlkIGZvciB0aGUgcHJvdG9jb2wgaW4gcXVlc3Rpb24uXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIGludGVuZGVkIHRvIHByZXZlbnQgbWlzLWFzc29jaWF0aW9uIG9mIGhlbHBlcnMgd2l0aCBjb25uZWN0aW9ucyBvZiB0aGUgd3JvbmcgcHJvdG9jb2wsIHdoaWNoIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHdlaXJkIGJlaGF2aW9yIGFuZCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBvdGhlciBjb21wb25lbnRzIGluIGBuZXRmaWx0ZXJgIHRvIGFzc2VzcyB0aGUgZnVsbCBpbXBhY3Qgb2YgdGhpcyBwYXRjaCBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIHRoYXQgbmVlZCBhdHRlbnRpb24uIEl0J3MgYSBmYWlybHkgY29uY2lzZSBhZGRpdGlvbiwgYnV0IHBvdGVudGlhbGx5IGEgc2lnbmlmaWNhbnQgYmVoYXZpb3JhbCBjaGFuZ2UsIGFuZCBJJ2xsIHdhbnQgdG8gcmV2aWV3IHRoZSBhc3NvY2lhdGVkIGNvbW1pdCBtZXNzYWdlcyBhbmQgYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA5LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MDQ6MjUuMDA1MDI4NDc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTE0Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9MTkwPUVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9leHRfYWRkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0xOTEtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6MTkyOmludCBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IG5mX2Nvbm4gKnRtcGwsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMTkzLVxcdFxcdFxcdCAgICAgIGdmcF90IGZsYWdzKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMjQ4LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzoyNDk6RVhQT1JUX1NZTUJPTF9HUEwoX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMjUwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDowNDoyNS4wNTA1NDg0OTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTkwMzEzMjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGludG8gdGhlIHdlZWRzLiBUaGUgaW5zdHJ1Y3Rpb24gaXMgdG8gZGVsdmUgaW50byB0aGUgZnVuY3Rpb24gYF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJgLiBJIGtub3cgdGhpcyBvbmUsIGl0J3MgdHlwaWNhbGx5IGludm9sdmVkIGluLCBhbmQgSSB0aGluayBJIHJlbWVtYmVyIHRoZSBkZXRhaWxzLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcHJvYmFibHkgc3RhcnQgd2l0aCBpdHMgcHJpbWFyeSBwdXJwb3NlIGFuZCBjb250ZXh0LiBPa2F5LCB0aGlzIGhlbHBlciBpcyBhbG1vc3QgY2VydGFpbmx5IHVzZWQgd2l0aGluIHRoZSBOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdWJzeXN0ZW0sIHJpZ2h0PyBBbmQgdGhlIG5hbWUgc3Ryb25nbHkgc3VnZ2VzdHMgaXRzIHJvbGUgaXMgYWJvdXQgYXNzaWdubWVudCDigJMgc3BlY2lmaWNhbGx5LCB0cnlpbmcgdG8gYXNzaWduIHNvbWUgZGF0YSBvciBhdHRyaWJ1dGUsIG1heWJlIGEgZmxvdyBsYWJlbCwgYSBzZXNzaW9uIG9yIGEgbWFyayB0byBhIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkuIEl0IGhhcyBhIGxvdCBvZiBsb3ctbGV2ZWwgaW50cmljYWNpZXMsIHRoZXJlIG1pZ2h0IGJlIGNvbmN1cnJlbmN5IGNvbnNpZGVyYXRpb25zLlxuXG5JJ20gbWVudGFsbHkgcHJlcGFyaW5nIGZvciBhIGRlZXAgZGl2ZSBpbnRvIGl0cyBpbnRlcm5hbHMuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGhhbmRsZXMgcmFjZXMsIGF0b21pY2l0eSwgZXJyb3IgY29uZGl0aW9ucywgYW5kIHdoZXRoZXIgaXQgdXNlcyBhbnkgc3BlY2lhbCBsb2NraW5nIG1lY2hhbmlzbXMgb3IgYXRvbWljIG9wZXJhdGlvbnMuIEknbGwgbmVlZCB0byBkaXNzZWN0IGl0cyBhcmd1bWVudHMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2Ygd2hhdCBpdCBpcyB0cnlpbmcgdG8gYXNzaWduLCB3aGF0IGNvbmRpdGlvbnMgYXJlIGNoZWNrZWQsIGFuZCB3aGljaCBhcmUgdGhlIGNvcmUgYXNwZWN0cyB0aGF0IG1ha2VzIHRoZSBmdW5jdGlvbiBhIGhlbHBlci4gVGhpcyBpcyBvZnRlbiB3aGVyZSB0aGUgdHJpY2t5IGJpdHMgcmVzaWRlIOKAkyB0aGUgY29uZGl0aW9uYWwgYnJhbmNoZXMsIHRoZSBlZGdlIGNhc2VzLCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBpbmZyYXN0cnVjdHVyZS4gSSdtIGFzc3VtaW5nIHRoYXQgdGhpcyBpcyBhIGNyaXRpY2FsIHNlY3Rpb24gdGhhdCBuZWVkcyB0byBiZSBvcHRpbWl6ZWQgZm9yIHBlcmZvcm1hbmNlLlxuXG5JJ20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBgbmZfY3RgIHN0cnVjdHVyZSBhbmQgaXRzIGFzc29jaWF0ZWQgbWVtYmVycy4gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBBbmQgaG93IGRvZXMgaXQgcmVsYXRlIHRvIHRoZSBvdmVyYWxsIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3RhdGUgbWFjaGluZT8gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIGhlbHBlciBjb250cmlidXRlcyB0byB0aGUgb3ZlcmFsbCBOZXRmaWx0ZXIgYXJjaGl0ZWN0dXJlLiBUaW1lIHRvIGdldCBkb3duIGFuZCBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczNywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjA0OjI5LjA0MDg2NDk3NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MDpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9oZWxwZXJfZXh0X2FkZCk7XFxuIDE5MTpcXHRcXG4gMTkyOlxcdGludCBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IG5mX2Nvbm4gKnRtcGwsXFxuIDE5MzpcXHRcXHRcXHRcXHQgICAgICBnZnBfdCBmbGFncylcXG4gMTk0OlxcdHtcXG4gMTk1OlxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIgPSBOVUxMO1xcbiAxOTY6XFx0XFx0c3RydWN0IG5mX2Nvbm5faGVscCAqaGVscDtcXG4gMTk3OlxcdFxcbiAxOTg6XFx0XFx0LyogV2UgYWxyZWFkeSBnb3QgYSBoZWxwZXIgZXhwbGljaXRseSBhdHRhY2hlZCAoZS5nLiBuZnRfY3QpICovXFxuIDE5OTpcXHRcXHRpZiAodGVzdF9iaXQoSVBTX0hFTFBFUl9CSVQsIFxcdTAwMjZjdC1cXHUwMDNlc3RhdHVzKSlcXG4gMjAwOlxcdFxcdFxcdHJldHVybiAwO1xcbiAyMDE6XFx0XFxuIDIwMjpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCF0bXBsKSlcXG4gMjAzOlxcdFxcdFxcdHJldHVybiAwO1xcbiAyMDQ6XFx0XFxuIDIwNTpcXHRcXHRoZWxwID0gbmZjdF9oZWxwKHRtcGwpO1xcbiAyMDY6XFx0XFx0aWYgKGhlbHApXFxuIDIwNzpcXHRcXHRcXHRoZWxwZXIgPSByY3VfZGVyZWZlcmVuY2UoaGVscC1cXHUwMDNlaGVscGVyKTtcXG4gMjA4OlxcdFxcdGlmIChoZWxwZXIgXFx1MDAyNlxcdTAwMjYgaGVscGVyLVxcdTAwM2V0dXBsZS5kc3QucHJvdG9udW0gIT0gbmZfY3RfcHJvdG9udW0oY3QpKVxcbiAyMDk6XFx0XFx0XFx0aGVscGVyID0gTlVMTDtcXG4gMjEwOlxcdFxcbiAyMTE6XFx0XFx0aGVscCA9IG5mY3RfaGVscChjdCk7XFxuIDIxMjpcXHRcXG4gMjEzOlxcdFxcdGlmIChoZWxwZXIgPT0gTlVMTCkge1xcbiAyMTQ6XFx0XFx0XFx0aWYgKGhlbHApIHtcXG4gMjE1OlxcdFxcdFxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICp0bXAgPSByY3VfZGVyZWZlcmVuY2UoaGVscC1cXHUwMDNlaGVscGVyKTtcXG4gMjE2OlxcdFxcbiAyMTc6XFx0XFx0XFx0XFx0UkNVX0lOSVRfUE9JTlRFUihoZWxwLVxcdTAwM2VoZWxwZXIsIE5VTEwpO1xcbiAyMTg6XFx0XFx0XFx0XFx0aWYgKHRtcCBcXHUwMDI2XFx1MDAyNiByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnRtcC1cXHUwMDNlY3RfcmVmY250KSlcXG4gMjE5OlxcdFxcdFxcdFxcdFxcdGtmcmVlX3JjdSh0bXAsIHJjdSk7XFxuIDIyMDpcXHRcXHRcXHR9XFxuIDIyMTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjIyOlxcdFxcdH1cXG4gMjIzOlxcdFxcbiAyMjQ6XFx0XFx0aWYgKGhlbHAgPT0gTlVMTCkge1xcbiAyMjU6XFx0XFx0XFx0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBmbGFncyk7XFxuIDIyNjpcXHRcXHRcXHRpZiAoaGVscCA9PSBOVUxMKVxcbiAyMjc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDIyODpcXHRcXHR9IGVsc2Uge1xcbiAyMjk6XFx0XFx0XFx0LyogV2Ugb25seSBhbGxvdyBoZWxwZXIgcmUtYXNzaWdubWVudCBvZiB0aGUgc2FtZSBzb3J0IHNpbmNlXFxuIDIzMDpcXHRcXHRcXHQgKiB3ZSBjYW5ub3QgcmVhbGxvY2F0ZSB0aGUgaGVscGVyIGV4dGVuc2lvbiBhcmVhLlxcbiAyMzE6XFx0XFx0XFx0ICovXFxuIDIzMjpcXHRcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqdG1wID0gcmN1X2RlcmVmZXJlbmNlKGhlbHAtXFx1MDAzZWhlbHBlcik7XFxuIDIzMzpcXHRcXG4gMjM0OlxcdFxcdFxcdGlmICh0bXApIHtcXG4gMjM1OlxcdFxcdFxcdFxcdGlmICh0bXAtXFx1MDAzZWhlbHAgIT0gaGVscGVyLVxcdTAwM2VoZWxwKSB7XFxuIDIzNjpcXHRcXHRcXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKGhlbHAtXFx1MDAzZWhlbHBlciwgTlVMTCk7XFxuIDIzNzpcXHRcXHRcXHRcXHRcXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZ0bXAtXFx1MDAzZWN0X3JlZmNudCkpXFxuIDIzODpcXHRcXHRcXHRcXHRcXHRcXHRrZnJlZV9yY3UodG1wLCByY3UpO1xcbiAyMzk6XFx0XFx0XFx0XFx0fVxcbiAyNDA6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDI0MTpcXHRcXHRcXHR9XFxuIDI0MjpcXHRcXHR9XFxuIDI0MzpcXHRcXG4gMjQ0OlxcdFxcdGlmIChyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNmhlbHBlci1cXHUwMDNlY3RfcmVmY250KSlcXG4gMjQ1OlxcdFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihoZWxwLVxcdTAwM2VoZWxwZXIsIGhlbHBlcik7XFxuIDI0NjpcXHRcXG4gMjQ3OlxcdFxcdHJldHVybiAwO1xcbiAyNDg6XFx0fVxcbiAyNDk6XFx0RVhQT1JUX1NZTUJPTF9HUEwoX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjA0OjI5LjA0MDk1NDk1NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTAwMDIyNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBhIG5ldGZpbHRlciBDaGFuZ2UqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCBhIG1vZGlmaWNhdGlvbiB0byBgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcmAuLi4gaW50ZXJlc3RpbmcuXCIgSSBrbm93IHRoYXQgZnVuY3Rpb24gaXMgZXhwb3J0ZWQsIHdoaWNoIG1lYW5zIGl0J3MgcGFydCBvZiB0aGUgcHVibGljIEFQSSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSB0aG9yb3VnaGx5LiBNeSBuZXh0IHN0ZXAsIG9mIGNvdXJzZSwgaXMgdG8gZGV0ZXJtaW5lIHRoZSBjYWxsIHNpdGVzIGZvciBgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcmAuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyBjcml0aWNhbCBiZWZvcmUgSSBjYW4gYXNzZXNzIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIG1vZGlmaWNhdGlvbiBvbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIEknbGwgbmVlZCB0byB0cmFjZSB0aG9zZSBjYWxscyB0byBmdWxseSBncmFzcCB0aGUgcmFtaWZpY2F0aW9ucyBvZiB3aGF0ZXZlciBhbHRlcmF0aW9ucyBhcmUgcHJlc2VudCB3aXRoaW4gdGhpcyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA4OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MDQ6MzIuNDkwOTU5MTAzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5Njk0OTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jPTE3NTQ9aW5pdF9jb25udHJhY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0xODM1LVxcdGlmICghZXhwIFxcdTAwMjZcXHUwMDI2IHRtcGwpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jOjE4MzY6XFx0XFx0X19uZl9jdF90cnlfYXNzaWduX2hlbHBlcihjdCwgdG1wbCwgR0ZQX0FUT01JQyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTE4MzctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz0xOTA9RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfaGVscGVyX2V4dF9hZGQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTE5MS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzoxOTI6aW50IF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0xOTMtXFx0XFx0XFx0ICAgICAgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0yNDgtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjI0OTpFWFBPUlRfU1lNQk9MX0dQTChfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0yNTAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjA0OjMyLjU0MDY1OTc1MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTEwMTI2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgYGluaXRfY29ubnRyYWNrYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkndmUgaWRlbnRpZmllZCB0aGUgYGluaXRfY29ubnRyYWNrYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuY2AuIFRoaXMgaXMgYSBjb3JlIG5ldGZpbHRlciBmdW5jdGlvbiwgYW5kIGJhc2VkIG9uIHRoZSBjb250ZXh0LCBJIHRoaW5rIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBhZGRpbmcgdG8gdGhlIGZ1enppbmcgdGFyZ2V0IGxpc3QuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBjb250cm9sIGl0cyBjb21waWxhdGlvbi4gSSdtIHJlY2FsbGluZyB0aGF0IGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY2AgaXMgaW52b2x2ZWQsIGFuZCBJIHN1c3BlY3QgaXQncyBkZXBlbmRlbnQgb24gYENPTkZJR19ORl9DT05OVFJBQ0tgLiBMZXQncyBjb25maXJtIHRoYXQgYnkgY2hlY2tpbmcgdGhlIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gc2V0IHVwIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcyNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjA0OjM1Ljc1MTY3NTM3NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3MDU3MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY29ubnRyYWNrX2hlbHBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9Mz1uZXRmaWx0ZXItJChDT05GSUdfTkVURklMVEVSX05FVExJTkspICs9IG5mbmV0bGluay5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS00LVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTpuZl9jb25udHJhY2steVxcdDo9IG5mX2Nvbm50cmFja19jb3JlLm8gbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUubyBuZl9jb25udHJhY2tfZXhwZWN0Lm8gbmZfY29ubnRyYWNrX2hlbHBlci5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTYtXFx0XFx0ICAgbmZfY29ubnRyYWNrX3Byb3RvLm8gbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMubyBuZl9jb25udHJhY2tfcHJvdG9fdGNwLm8gbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MDQ6MzUuNzk2Mzg1NTI1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDg0NTI3NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25udHJhY2sgQ29uZmlndXJhdGlvbiBhbmQgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgQ09ORklHX05GX0NPTk5UUkFDS2AganVtcHMgb3V0IOKAkyB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUga2V5IHN5bWJvbHMsIGFuZCB0aGUgbW9zdCByZWxldmFudCBmdW5jdGlvbiBoZXJlIHNlZW1zIHRvIGJlIGBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyYC4gTm93LCBJIGluaXRpYWxseSBjb25zaWRlcmVkIGlmIGBpbml0X2Nvbm50cmFja2AgbWlnaHQgYWxzbyBiZSBhIGhvdC1wYXRoIGZ1bmN0aW9uLCBidXQgdGhlbiBJIHJlbWVtYmVyZWQgdGhhdCBpcyBjYWxsZWQgZm9yIGV2ZXJ5IG5ldyBjb25uZWN0aW9uLCBzbyBpdCBjbGVhcmx5ICppcyogYSBob3QtcGF0aCBmdW5jdGlvbi4gIEkgZG9uJ3QgdGhpbmsgdGhhdCBpcyB0aGUgb25lIGluIGZvY3VzIGluIHRoaXMgcGF0Y2guXG5cblRoZSBwYXRjaCBzZWVtcyB0byBiZSBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyYCwgc28gSSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIHVzZWQuIEFyZSB0aGVyZSBvdGhlciBjYWxsIHNpdGVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBMZXQgbWUgc2VlIHdoZXJlIGVsc2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxODksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MDQ6NDAuMDA0ODQwNzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTg5MDE5NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19uZl9jdF90cnlfYXNzaWduX2hlbHBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaD0xMjE9c3RydWN0IG5mX2Nvbm5faGVscCAqbmZfY3RfaGVscGVyX2V4dF9hZGQoc3RydWN0IG5mX2Nvbm4gKmN0LCBnZnBfdCBnZnApO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmgtMTIyLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmg6MTIzOmludCBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IG5mX2Nvbm4gKnRtcGwsXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaC0xMjQtXFx0XFx0XFx0ICAgICAgZ2ZwX3QgZmxhZ3MpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jPTE3NTQ9aW5pdF9jb25udHJhY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0xODM1LVxcdGlmICghZXhwIFxcdTAwMjZcXHUwMDI2IHRtcGwpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jOjE4MzY6XFx0XFx0X19uZl9jdF90cnlfYXNzaWduX2hlbHBlcihjdCwgdG1wbCwgR0ZQX0FUT01JQyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTE4MzctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz0xOTA9RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfaGVscGVyX2V4dF9hZGQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTE5MS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzoxOTI6aW50IF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0xOTMtXFx0XFx0XFx0ICAgICAgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0yNDgtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjI0OTpFWFBPUlRfU1lNQk9MX0dQTChfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0yNTAtXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9NzI0PXN0YXRpYyBpbnQgX19vdnNfY3RfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtNzk4LVxcdFxcdCAgICBpbmZvLVxcdTAwM2VoZWxwZXIgXFx1MDAyNlxcdTAwMjYgIW5mY3RfaGVscChjdCkpIHtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6Nzk5OlxcdFxcdFxcdGludCBlcnIgPSBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKGN0LCBpbmZvLVxcdTAwM2VjdCxcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtODAwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBHRlBfQVRPTUlDKTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz05Njg9VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9jdF9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDYxLVxcdGlmICghbmZfY3RfaXNfY29uZmlybWVkKGN0KSBcXHUwMDI2XFx1MDAyNiBjb21taXQgXFx1MDAyNlxcdTAwMjYgcC1cXHUwMDNlaGVscGVyIFxcdTAwMjZcXHUwMDI2ICFuZmN0X2hlbHAoY3QpKSB7XFxubmV0L3NjaGVkL2FjdF9jdC5jOjEwNjI6XFx0XFx0ZXJyID0gX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcihjdCwgcC1cXHUwMDNldG1wbCwgR0ZQX0FUT01JQyk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTEwNjMtXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MDQ6NDEuNTYzNzQ3NTU0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5OTMwNjg5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgYF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlLiBJdCBsb29rcyBsaWtlIGBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRvIGZvY3VzIG9uLiBJIHNlZSBpdCBtZW50aW9uZWQgaW4gYG5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY2AgKGBfX292c19jdF9sb29rdXBgKSBhbmQgYWxzbyBpbiBgbmV0L3NjaGVkL2FjdF9jdC5jYCAoYHRjZl9jdF9hY3RgKSwgd2hpY2ggcmVpbmZvcmNlcyBpdHMgaW1wb3J0YW5jZS4gRnJvbSB0aGUgd2F5IHRoaW5ncyBsb29rLCBpdCBhcHBlYXJzIHRvIGJlIGEgY29yZSBOZXRmaWx0ZXIgZnVuY3Rpb24sIGJ1dCBpdCdzIG5vdCBvbiB0aGUgYWJzb2x1dGUgaG90dGVzdCBwYXRoLiBJdCdzIG9ubHkgaW52b2tlZCB3aGVuIGEgaGVscGVyIGlzIGFjdHVhbGx5IGFzc2lnbmVkLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGVyZSdzIGEgaGVscGVyIGluIHRoZSBgdG1wbGAgc3RydWN0dXJlIGR1cmluZyBgaW5pdF9jb25udHJhY2tgLCB3aGVuIGBpbmZvLVx1MDAzZWhlbHBlcmAgaXMgdXNlZCB3aXRoaW4gT1ZTLCBvciB3aGVuIGBwLVx1MDAzZWhlbHBlcmAgaXMgdXNlZCBpbiBUQy4gU28sIHN0aWxsIGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uLlxuXG5MZXQgbWUgdGFrZSBhbm90aGVyIGxvb2sgdG8gbWFrZSBzdXJlLiBPa2F5LCB0aGUgcGF0Y2ggb25seSBtb2RpZmllcyBgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcmAsIHNvIGl0J3MgdGhlICpvbmx5KiBzeW1ib2wgdG8gZm9jdXMgb24uXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgY29uZmlnLiBgTkZfQ09OTlRSQUNLYCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgY29uZmlnIHZhcmlhYmxlIGhlcmUuIEknbSBnb2luZyB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM2OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDowNDo0Ni41NTY4MTkwMzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjQ5NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DT05OVFJBQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03ND1jb25maWcgTkVURklMVEVSX05FVExJTktfT1NGXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjgyOmNvbmZpZyBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTExPWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cXHRib29sICAnQ29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX0NPTk5UUkFDS19TRUNNQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyBzZWN1cml0eSBtYXJrIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzY6Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDg6Y29uZmlnIE5GX0NPTk5UUkFDS19QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5LVxcdGJvb2wgXFxcIlN1cHBseSBDVCBsaXN0IGluIHByb2NmcyAoT0JTT0xFVEUpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU3OmNvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1OC1cXHRib29sIFxcXCJDb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50c1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FU1RBTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVzdGFtcGluZydcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE4ODpjb25maWcgTkZfQ09OTlRSQUNLX0xBQkVMU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODktXFx0Ym9vbCBcXFwiQ29ubmVjdGlvbiB0cmFja2luZyBsYWJlbHNcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxOTU6Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVxcdGJvb2xcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTMtXFx0dHJpc3RhdGUgXFxcIkFtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIyNzpjb25maWcgTkZfQ09OTlRSQUNLX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXFx0dHJpc3RhdGUgXFxcIkZUUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzOC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjM5OmNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXFx0dHJpc3RhdGUgXFxcIkguMzIzIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNTg6Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU5LVxcdHRyaXN0YXRlIFxcXCJJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3NDpjb25maWcgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzUtXFx0dHJpc3RhdGVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19ORVRCSU9TX05TXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cXHR0cmlzdGF0ZSBcXFwiTmV0QklPUyBuYW1lIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5Njpjb25maWcgTkZfQ09OTlRSQUNLX1NOTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk3LVxcdHRyaXN0YXRlIFxcXCJTTk1QIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjMxMTpjb25maWcgTkZfQ09OTlRSQUNLX1BQVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEyLVxcdHRyaXN0YXRlIFxcXCJQUHRQIHByb3RvY29sIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMyOS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzMwOmNvbmZpZyBORl9DT05OVFJBQ0tfU0FORVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMzEtXFx0dHJpc3RhdGUgXFxcIlNBTkUgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDQtXFx0dHJpc3RhdGUgXFxcIlNJUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzU1OmNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTYtXFx0dHJpc3RhdGUgXFxcIlRGVFAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MDQ6NDYuNjAyNDc1MzU0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDU0Njg4ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29ubmVjdGlvbiBUcmFja2luZyBDb251bmRydW0qKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGp1c3QgZW5hYmxpbmcgYE5GX0NPTk5UUkFDS2Agc2hvdWxkIGJlIHN1ZmZpY2llbnQuIEJ1dCB0aGVuIEkgcmVtZW1iZXJlZCwgdGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIGFzc2lnbmluZyBhIGhlbHBlciwgcmlnaHQ/IFNvLCBwZXJoYXBzIHdlIG5lZWQgdG8gYmUgbW9yZSBhZ2dyZXNzaXZlIHdpdGggaGVscGVyIGVuYWJsZW1lbnQuIE1heWJlIHRoYXQgbWVhbnMgZmxpcHBpbmcgb24gc29tZSBvZiB0aGUgbW9yZSBzcGVjaWZpYyBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgdG8gZW5zdXJlIGB0bXBsYCwgb3Igd2hhdGV2ZXIgbW9kdWxlIGlzIHRoZSB0YXJnZXQsIGNhbiBzdWNjZXNzZnVsbHkgbGV2ZXJhZ2UgYSBoZWxwZXIuIEknbSB0aGlua2luZyB0aGluZ3MgbGlrZSBgTkZfQ09OTlRSQUNLX0ZUUGAsIGBORl9DT05OVFJBQ0tfU0lQYCwgYW5kIHRoZSBsaWtlLiBTdGlsbCwgYE5GX0NPTk5UUkFDS2AgaXMgdGhlIGZvdW5kYXRpb24uIEl0J3MgdGhlIGJpZyBvbmUuIEJlZm9yZSBJIGdvIHRvbyBmYXIgZG93biB0aGlzIHJvYWQsIEkgc2hvdWxkIHZlcmlmeSBpZiBgTkZfQ09OTlRSQUNLYCBpdHNlbGYgcmVsaWVzIG9uIGFueSBvdGhlciBtb2R1bGVzIG9yIGNvbmZpZ3VyYXRpb25zLiBOZWVkIHRvIGNoZWNrIGl0cyBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMzUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDowNDo1MC40NDc5NDc4N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI3OTYyNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0NPTk5UUkFDS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTc0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0ZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODI6Y29uZmlnIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04My1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMTE9Y29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjExNDpjb25maWcgTkZfQ09OTlRSQUNLX01BUktcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTE1LVxcdGJvb2wgICdDb25uZWN0aW9uIG1hcmsgdHJhY2tpbmcgc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEyMzpjb25maWcgTkZfQ09OTlRSQUNLX1NFQ01BUktcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTI0LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHNlY3VyaXR5IG1hcmsgc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzNjpjb25maWcgTkZfQ09OTlRSQUNLX1pPTkVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNy1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyB6b25lcydcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE0ODpjb25maWcgTkZfQ09OTlRSQUNLX1BST0NGU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDktXFx0Ym9vbCBcXFwiU3VwcGx5IENUIGxpc3QgaW4gcHJvY2ZzIChPQlNPTEVURSlcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNTc6Y29uZmlnIE5GX0NPTk5UUkFDS19FVkVOVFNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU4LVxcdGJvb2wgXFxcIkNvbm5lY3Rpb24gdHJhY2tpbmcgZXZlbnRzXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTY3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRU9VVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjgtXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE3Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVTVEFNUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzgtXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZXN0YW1waW5nJ1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE4Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTg4OmNvbmZpZyBORl9DT05OVFJBQ0tfTEFCRUxTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE4OS1cXHRib29sIFxcXCJDb25uZWN0aW9uIHRyYWNraW5nIGxhYmVsc1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE5NTpjb25maWcgTkZfQ09OTlRSQUNLX09WU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTYtXFx0Ym9vbFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTIwMT1jb25maWcgTkZfQ1RfUFJPVE9fU0NUUFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjEyOmNvbmZpZyBORl9DT05OVFJBQ0tfQU1BTkRBXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMy1cXHR0cmlzdGF0ZSBcXFwiQW1hbmRhIGJhY2t1cCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyNi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjI3OmNvbmZpZyBORl9DT05OVFJBQ0tfRlRQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyOC1cXHR0cmlzdGF0ZSBcXFwiRlRQIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjM4LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMzk6Y29uZmlnIE5GX0NPTk5UUkFDS19IMzIzXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI0MC1cXHR0cmlzdGF0ZSBcXFwiSC4zMjMgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI1ODpjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTktXFx0dHJpc3RhdGUgXFxcIklSQyBEQ0MgcHJvdG9jb2wgc3VwcG9ydCAob2Jzb2xldGUpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3My1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc0OmNvbmZpZyBORl9DT05OVFJBQ0tfQlJPQURDQVNUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3NS1cXHR0cmlzdGF0ZVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3Nzpjb25maWcgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc4LVxcdHRyaXN0YXRlIFxcXCJOZXRCSU9TIG5hbWUgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5NS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjk2OmNvbmZpZyBORl9DT05OVFJBQ0tfU05NUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTctXFx0dHJpc3RhdGUgXFxcIlNOTVAgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzExOmNvbmZpZyBORl9DT05OVFJBQ0tfUFBUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTItXFx0dHJpc3RhdGUgXFxcIlBQdFAgcHJvdG9jb2wgc3VwcG9ydCAoZGVwcmVjYXRlZClcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzI5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMzA6Y29uZmlnIE5GX0NPTk5UUkFDS19TQU5FXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMzMS1cXHR0cmlzdGF0ZSBcXFwiU0FORSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0Mi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzQzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0lQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0NC1cXHR0cmlzdGF0ZSBcXFwiU0lQIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNTU6Y29uZmlnIE5GX0NPTk5UUkFDS19URlRQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1Ni1cXHR0cmlzdGF0ZSBcXFwiVEZUUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDowNDo1MC40OTA3NDk1MjlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzMzIzNDk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIERlcGVuZGVuY2llczogQSBLY29uZmlnIERpdmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkZfQ09OTlRSQUNLYCB3aXRoaW4gdGhlIGtlcm5lbCdzIG5ldGZpbHRlciBzdWJzeXN0ZW0uIFRoZSBtb3N0IGRpcmVjdCBhcHByb2FjaCwgYXMgYWx3YXlzLCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgcHVsbGluZyB1cCB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ2xsIGZvY3VzIG9uIHRoZSBpbml0aWFsIGxpbmVzOyB1c3VhbGx5LCB0aGUgZWFybHkgZGVmaW5pdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhcmUgbGFpZCBvdXQgdGhlcmUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIG1vZHVsZXMgYXJlIHByZXJlcXVpc2l0ZXMgZm9yIGBORl9DT05OVFJBQ0tgIHRvIGV2ZW4gYmUgY29uc2lkZXJlZCBmb3IgaW5jbHVzaW9uLiBObyBwb2ludCBpbiB3YWRpbmcgdGhyb3VnaCB0aGUgd2hvbGUgdGhpbmcgaW5pdGlhbGx5OyBsZXQncyBnZXQgdGhlIGdpc3QgYW5kIGJ1aWxkIGZyb20gdGhlcmUuIFRoaXMgc2hvdWxkIHRlbGwgbWUgcXVpY2tseSB3aGV0aGVyIEknbSBsb29raW5nIGF0IGEgc2ltcGxlIGRlcGVuZGVuY3kgdHJlZSBvciBhIG1vcmUgY29tcGxleCB3ZWIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MjIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDowNDo1My44MjM5ODc2OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdFxcdCAgZm9yIHBhc3NpdmUgT1MgZmluZ2VycHJpbnQgdmlhIE5GTkVUTElOSy5cXG4gIDgxOlxcdFxcbiAgODI6XFx0Y29uZmlnIE5GX0NPTk5UUkFDS1xcbiAgODM6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcXFwiXFxuICA4NDpcXHRcXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cXG4gIDg1OlxcdFxcdHNlbGVjdCBORl9ERUZSQUdfSVBWNFxcbiAgODY6XFx0XFx0c2VsZWN0IE5GX0RFRlJBR19JUFY2IGlmIElQVjYgIT0gblxcbiAgODc6XFx0XFx0aGVscFxcbiAgODg6XFx0XFx0ICBDb25uZWN0aW9uIHRyYWNraW5nIGtlZXBzIGEgcmVjb3JkIG9mIHdoYXQgcGFja2V0cyBoYXZlIHBhc3NlZFxcbiAgODk6XFx0XFx0ICB0aHJvdWdoIHlvdXIgbWFjaGluZSwgaW4gb3JkZXIgdG8gZmlndXJlIG91dCBob3cgdGhleSBhcmUgcmVsYXRlZFxcbiAgOTA6XFx0XFx0ICBpbnRvIGNvbm5lY3Rpb25zLlxcbiAgOTE6XFx0XFxuICA5MjpcXHRcXHQgIFRoaXMgaXMgcmVxdWlyZWQgdG8gZG8gTWFzcXVlcmFkaW5nIG9yIG90aGVyIGtpbmRzIG9mIE5ldHdvcmtcXG4gIDkzOlxcdFxcdCAgQWRkcmVzcyBUcmFuc2xhdGlvbi4gIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gZW5oYW5jZSBwYWNrZXRcXG4gIDk0OlxcdFxcdCAgZmlsdGVyaW5nIChzZWUgYENvbm5lY3Rpb24gc3RhdGUgbWF0Y2ggc3VwcG9ydCcgYmVsb3cpLlxcbiAgOTU6XFx0XFxuICA5NjpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgOTc6XFx0XFxuICA5ODpcXHRjb25maWcgTkZfTE9HX1NZU0xPR1xcbiAgOTk6XFx0XFx0dHJpc3RhdGUgXFxcIlN5c2xvZyBwYWNrZXQgbG9nZ2luZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MDQ6NTMuODI0MTM2MDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAwNDQ4Njg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEltcGFjdCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBORl9DT05OVFJBQ0tgIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbi4gVGhlcmUncyBubyBkZXBlbmRlbmN5IHNwZWNpZmllZCwgc28gaXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBkaXJlY3QgYXBwcm9hY2guIEknbGwgaW5jbHVkZSBgTkVURklMVEVSYCBhcyB3ZWxsLCBqdXN0IHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUsIGV2ZW4gdGhvdWdoIGl0J3MgYSBtZW51Y29uZmlnIGl0ZW0gYW5kIHByb2JhYmx5IGFscmVhZHkgaW1wbGllZC4gQnV0IHJlYWxpc3RpY2FsbHksIGBORl9DT05OVFJBQ0tgIHNob3VsZCBiZSB0aGUgY29yZSByZXF1aXJlbWVudCBoZXJlLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhlIHNpZ25pZmljYW5jZSBvZiBgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcmAuIElzIGl0IHN0YXRpYywgb3IgaW5saW5lPyBIbW0sIGxvb2tzIGxpa2UgaXQncyBhIGRlY2xhcmVkIGFzIGBpbnQgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBuZl9jb25uICp0bXBsLCBnZnBfdCBmbGFncylgLiBBbHJpZ2h0LCBpdCdzIGV4cG9ydGVkLiBUaGF0J3MgZ29vZDsgdGhhdCBjb25maXJtcyBpdCBhcyBhIHNpZ25pZmljYW50IGZvY3VzIHN5bWJvbCBmb3IgdGhpcyBjaGFuZ2UuXG5cbk15IHJlYXNvbmluZyBoZXJlIGlzIHRoYXQgdGhlIHBhdGNoIGlzIGRpcmVjdGx5IG1vZGlmeWluZyB0aGlzIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNgLiBTcGVjaWZpY2FsbHksIGl0J3MgaW50cm9kdWNpbmcgYSBjaGVjayBmb3IgdGhlIHByb3RvY29sIG51bWJlciB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIGFzc2lnbm1lbnQgbG9naWMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb3JlIE5ldGZpbHRlciBtb2RpZmljYXRpb24gZGVhbGluZyB3aXRoIGhvdyBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgYXJlIGFzc2lnbmVkIHRvIGNvbm5lY3Rpb25zLiBJdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIOKAkyBuZXR3b3JrIHRyYWZmaWMgY2FuIHRyaWdnZXIgdGhpcyBjb2RlIHBhdGggaWYgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycyBhcmUgaW4gdXNlLlxuXG5TbywgdGhlIGZvY3VzIHN5bWJvbCBpcyBkZWZpbml0ZWx5IGBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyYCwgYW5kIHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9uLCBhcyBJIG9yaWdpbmFsbHkgdGhvdWdodCwgaXMganVzdCBgTkZfQ09OTlRSQUNLYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNzUsIk91dHB1dFRva2VucyI6MTM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MDU6MDAuODI4NjI1OTAyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA4OTg1NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcmAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jYCB0byBhZGQgYSBjaGVjayBmb3IgdGhlIHByb3RvY29sIG51bWJlciBvZiB0aGUgaGVscGVyIGFuZCB0aGUgY29ubmVjdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgd2hlbiBhc3NpZ25pbmcgYSBoZWxwZXIgdG8gYSBjb25uZWN0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IG5ldHdvcmsgdHJhZmZpYyB3aGVuIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycyBhcmUgdXNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9DT05OVFJBQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJgIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY2AgdG8gYWRkIGEgY2hlY2sgZm9yIHRoZSBwcm90b2NvbCBudW1iZXIgb2YgdGhlIGhlbHBlciBhbmQgdGhlIGNvbm5lY3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IHdoZW4gYXNzaWduaW5nIGEgaGVscGVyIHRvIGEgY29ubmVjdGlvbi4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSBuZXR3b3JrIHRyYWZmaWMgd2hlbiBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgYXJlIHVzZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjA1OjAwLjkwOTUzMjI3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk1MjkxMDg3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjA1OjAwLjkxMDA4NDg1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExOTUyMzU0ODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgdGhlIHByb3RvY29sIG51bWJlciBvZiBhIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIG1hdGNoZXMgdGhlIHByb3RvY29sIG51bWJlciBvZiB0aGUgY29ubmVjdGlvbiBpdCBpcyBiZWluZyBhc3NpZ25lZCB0by4gVGhpcyBwcmV2ZW50cyBhIGhlbHBlciBkZXNpZ25lZCBmb3Igb25lIHByb3RvY29sIGZyb20gYmVpbmcgaW5jb3JyZWN0bHkgYXNzaWduZWQgdG8gYSBjb25uZWN0aW9uIG9mIGFub3RoZXIgcHJvdG9jb2wuIFN1Y2ggYSBtaXNtYXRjaCBjb3VsZCBsZWFkIHRvIHR5cGUgY29uZnVzaW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgd2hlbiB0aGUgaGVscGVyIGF0dGVtcHRzIHRvIHBhcnNlIHBhY2tldHMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMTk5ODMwZDAxYzdiZjU4Y2RkOTczMzQ1ZDFhNGJkYTg3ZWVjMDg2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDA6MDQ6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXG5pbmRleCA1MDA1MDliMTc2NjNlLi40MTlhZjZmNzZiZDI3IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXG5AQCAtMjA1LDYgKzIwNSw4IEBAIGludCBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IG5mX2Nvbm4gKnRtcGwsXG4gXHRoZWxwID0gbmZjdF9oZWxwKHRtcGwpO1xuIFx0aWYgKGhlbHApXG4gXHRcdGhlbHBlciA9IHJjdV9kZXJlZmVyZW5jZShoZWxwLVx1MDAzZWhlbHBlcik7XG4rXHRpZiAoaGVscGVyIFx1MDAyNlx1MDAyNiBoZWxwZXItXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtICE9IG5mX2N0X3Byb3RvbnVtKGN0KSlcbitcdFx0aGVscGVyID0gTlVMTDtcbiBcbiBcdGhlbHAgPSBuZmN0X2hlbHAoY3QpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MDU6MDAuOTEwMDg2MDNaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcwODMxMDk2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXRmaWx0ZXIgQ29ubnRyYWNrIEhlbHBlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyYC4gVGhlIGNydWNpYWwgYWRkaXRpb24gaXMgdGhhdCBwcm90b2NvbCBudW1iZXIgY2hlY2suIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBwcmV2ZW50aW5nIGEgaGVscGVyIGZyb20gYmVpbmcgYXNzaWduZWQgdG8gYSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IGlmIHRoZSBoZWxwZXIncyBleHBlY3RlZCBwcm90b2NvbCAoYGhlbHBlci1cdTAwM2V0dXBsZS5kc3QucHJvdG9udW1gKSBkb2Vzbid0IG1hdGNoIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24ncyBwcm90b2NvbCAoYG5mX2N0X3Byb3RvbnVtKGN0KWApLlxuXG5UaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBidWcgZml4LiBUaGUgc2NlbmFyaW8gdGhleSdyZSBhdm9pZGluZyBpcyBwcmV0dHkgY2xlYXIgdG8gbWU6IGEgaGVscGVyIGRlc2lnbmVkIGZvciwgc2F5LCBUQ1AgY29ubmVjdGlvbnMgZ2V0dGluZyBpbmFkdmVydGVudGx5IGFzc2lnbmVkIHRvIGEgVURQIGNvbm5lY3Rpb24gb3IgdmljZSB2ZXJzYS4gVGhlIGltcGxpY2F0aW9ucyBhcmUgY29uY2VybmluZyDigJMgdGhpcyBjb3VsZCBlYXNpbHkgbGVhZCB0byBhIHJhbmdlIG9mIG5hc3R5IGlzc3VlcywgbGlrZSBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcywgc29tZSBraW5kIG9mIHR5cGUgY29uZnVzaW9uIGlmIHRoZSBoZWxwZXIgYXR0ZW1wdHMgdG8gaW50ZXJwcmV0IHBhY2tldHMgdXNpbmcgdGhlIHdyb25nIHByb3RvY29sIHNlbWFudGljcy4gSSBkb24ndCB0aGluayB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyB0aGUgZGlyZWN0IHByb2JsZW0sIGFsdGhvdWdoIHRoYXQga2luZCBvZiBidWcgKmNvdWxkKiBhcmlzZSBmcm9tIHRoaXMga2luZCBvZiBtaXMtYXNzaWdubWVudC4gVGhpcyBpcyBhIGNsYXNzaWMgbG9naWMgZXJyb3IsIGEgdHlwZSBjb25mdXNpb24gaXNzdWUuIEknbSBnb2luZyB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIGBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyYCB0byBzZWUgd2hhdCBlbHNlIHRoZXkncmUgZG9pbmcgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDowNTowNi42MTgzOTkxOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTU6XFx0XFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlciA9IE5VTEw7XFxuIDE5NjpcXHRcXHRzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwO1xcbiAxOTc6XFx0XFxuIDE5ODpcXHRcXHQvKiBXZSBhbHJlYWR5IGdvdCBhIGhlbHBlciBleHBsaWNpdGx5IGF0dGFjaGVkIChlLmcuIG5mdF9jdCkgKi9cXG4gMTk5OlxcdFxcdGlmICh0ZXN0X2JpdChJUFNfSEVMUEVSX0JJVCwgXFx1MDAyNmN0LVxcdTAwM2VzdGF0dXMpKVxcbiAyMDA6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDIwMTpcXHRcXG4gMjAyOlxcdFxcdGlmIChXQVJOX09OX09OQ0UoIXRtcGwpKVxcbiAyMDM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDIwNDpcXHRcXG4gMjA1OlxcdFxcdGhlbHAgPSBuZmN0X2hlbHAodG1wbCk7XFxuIDIwNjpcXHRcXHRpZiAoaGVscClcXG4gMjA3OlxcdFxcdFxcdGhlbHBlciA9IHJjdV9kZXJlZmVyZW5jZShoZWxwLVxcdTAwM2VoZWxwZXIpO1xcbiAyMDg6XFx0XFx0aWYgKGhlbHBlciBcXHUwMDI2XFx1MDAyNiBoZWxwZXItXFx1MDAzZXR1cGxlLmRzdC5wcm90b251bSAhPSBuZl9jdF9wcm90b251bShjdCkpXFxuIDIwOTpcXHRcXHRcXHRoZWxwZXIgPSBOVUxMO1xcbiAyMTA6XFx0XFxuIDIxMTpcXHRcXHRoZWxwID0gbmZjdF9oZWxwKGN0KTtcXG4gMjEyOlxcdFxcbiAyMTM6XFx0XFx0aWYgKGhlbHBlciA9PSBOVUxMKSB7XFxuIDIxNDpcXHRcXHRcXHRpZiAoaGVscCkge1xcbiAyMTU6XFx0XFx0XFx0XFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnRtcCA9IHJjdV9kZXJlZmVyZW5jZShoZWxwLVxcdTAwM2VoZWxwZXIpO1xcbiAyMTY6XFx0XFxuIDIxNzpcXHRcXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKGhlbHAtXFx1MDAzZWhlbHBlciwgTlVMTCk7XFxuIDIxODpcXHRcXHRcXHRcXHRpZiAodG1wIFxcdTAwMjZcXHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2dG1wLVxcdTAwM2VjdF9yZWZjbnQpKVxcbiAyMTk6XFx0XFx0XFx0XFx0XFx0a2ZyZWVfcmN1KHRtcCwgcmN1KTtcXG4gMjIwOlxcdFxcdFxcdH1cXG4gMjIxOlxcdFxcdFxcdHJldHVybiAwO1xcbiAyMjI6XFx0XFx0fVxcbiAyMjM6XFx0XFxuIDIyNDpcXHRcXHRpZiAoaGVscCA9PSBOVUxMKSB7XFxuIDIyNTpcXHRcXHRcXHRoZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIGZsYWdzKTtcXG4gMjI2OlxcdFxcdFxcdGlmIChoZWxwID09IE5VTEwpXFxuIDIyNzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjI4OlxcdFxcdH0gZWxzZSB7XFxuIDIyOTpcXHRcXHRcXHQvKiBXZSBvbmx5IGFsbG93IGhlbHBlciByZS1hc3NpZ25tZW50IG9mIHRoZSBzYW1lIHNvcnQgc2luY2VcXG4gMjMwOlxcdFxcdFxcdCAqIHdlIGNhbm5vdCByZWFsbG9jYXRlIHRoZSBoZWxwZXIgZXh0ZW5zaW9uIGFyZWEuXFxuIDIzMTpcXHRcXHRcXHQgKi9cXG4gMjMyOlxcdFxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICp0bXAgPSByY3VfZGVyZWZlcmVuY2UoaGVscC1cXHUwMDNlaGVscGVyKTtcXG4gMjMzOlxcdFxcbiAyMzQ6XFx0XFx0XFx0aWYgKHRtcCkge1xcbiAyMzU6XFx0XFx0XFx0XFx0aWYgKHRtcC1cXHUwMDNlaGVscCAhPSBoZWxwZXItXFx1MDAzZWhlbHApIHtcXG4gMjM2OlxcdFxcdFxcdFxcdFxcdFJDVV9JTklUX1BPSU5URVIoaGVscC1cXHUwMDNlaGVscGVyLCBOVUxMKTtcXG4gMjM3OlxcdFxcdFxcdFxcdFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnRtcC1cXHUwMDNlY3RfcmVmY250KSlcXG4gMjM4OlxcdFxcdFxcdFxcdFxcdFxcdGtmcmVlX3JjdSh0bXAsIHJjdSk7XFxuIDIzOTpcXHRcXHRcXHRcXHR9XFxuIDI0MDpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjQxOlxcdFxcdFxcdH1cXG4gMjQyOlxcdFxcdH1cXG4gMjQzOlxcdFxcbiAyNDQ6XFx0XFx0aWYgKHJlZmNvdW50X2luY19ub3RfemVybyhcXHUwMDI2aGVscGVyLVxcdTAwM2VjdF9yZWZjbnQpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDowNTowNi42MTg0NzAwOVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjQzOTQ4NzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSGVscGVyIFByb3RvY29sIENoZWNrKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgcHJldmVudGluZyBhIGhlbHBlciBmdW5jdGlvbiBmcm9tIGdldHRpbmcgYXNzaWduZWQgdG8gYSBjb25uZWN0aW9uIHdpdGggYSBtaXNtYXRjaGVkIHByb3RvY29sLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJBaCwgY2xhc3NpYyBsb2dpYyBidWcgdGVycml0b3J5LlwiIElmIHRoZSBoZWxwZXIncyBwcm90b2NvbCBkb2Vzbid0IGFsaWduIHdpdGggdGhlIGNvbm5lY3Rpb24ncywgdGhpbmdzIGNhbiBnbyBzaWRld2F5cyAqZmFzdCogZHVyaW5nIHBhY2tldCBwYXJzaW5nLiBXZSdyZSBwb3RlbnRpYWxseSBsb29raW5nIGF0IHR5cGUgY29uZnVzaW9uLCBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcyDigJMgdGhlIHVzdWFsIHN1c3BlY3RzLiBUaGFua2Z1bGx5LCB0aGVzZSBhcmUgZ2VuZXJhbGx5IHRoZSBraW5kcyBvZiBpc3N1ZXMgdGhhdCBLQVNBTiBhbmQgdGhvc2Ugb3RoZXIgbWVtb3J5IHNhZmV0eSB0b29scyBhcmUgYnVpbHQgdG8gY2F0Y2ggcHJldHR5IHJlbGlhYmx5LlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6ICp3aGF0IGtpbmQgb2YgZnV6emluZyBzaG91bGQgd2UgZG8/KiBSZWFkaW5nIG9uLCBpdCBzZWVtcyB0aGVyZSdzIG5vIGV2aWRlbmNlIGhlcmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCB3aGljaCBhcmUgdGhlIG1haW4gdGFyZ2V0cyBmb3IgS01TQU4uIFRoZSBjb3JlIHByb2JsZW0gdGhpcyBwYXRjaCBhZGRyZXNzZXMgc2VlbXMgdG8gYmUgYSBsb2dpYyBlcnJvciB0aGF0IHBvdGVudGlhbGx5IGxlYWRzIHRvIG1lbW9yeSBjb3JydXB0aW9uIHRocm91Z2ggaW1wcm9wZXIgcGFyc2luZyBhbmQgdHlwZSBjb25mdXNpb24gd2hlbiBpbmNvcnJlY3QgZnVuY3Rpb25zIG9wZXJhdGUgb24gbWlzbWF0Y2hlZCBkYXRhLiBUaGVyZWZvcmUsIEkgZG9uJ3Qgc2VlIGEgY29tcGVsbGluZyByZWFzb24gdG8gZGVkaWNhdGUgYSBmdXp6aW5nIHNlc3Npb24gdG8gS01TQU4uIFN0YW5kYXJkIGZ1enppbmcgYW5kIGV4aXN0aW5nIG1lbW9yeSBzYWZldHkgdG9vbHMgc2hvdWxkIHN1ZmZpY2UgZm9yIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMjYsIk91dHB1dFRva2VucyI6MTUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MDU6MTIuODYyNDIxNDE1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgdGhlIHByb3RvY29sIG51bWJlciBvZiBhIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIG1hdGNoZXMgdGhlIHByb3RvY29sIG51bWJlciBvZiB0aGUgY29ubmVjdGlvbiBpdCBpcyBiZWluZyBhc3NpZ25lZCB0by4gVGhpcyBwcmV2ZW50cyBhIGhlbHBlciBkZXNpZ25lZCBmb3Igb25lIHByb3RvY29sIGZyb20gYmVpbmcgaW5jb3JyZWN0bHkgYXNzaWduZWQgdG8gYSBjb25uZWN0aW9uIG9mIGFub3RoZXIgcHJvdG9jb2wuIFN1Y2ggYSBtaXNtYXRjaCBjb3VsZCBsZWFkIHRvIHR5cGUgY29uZnVzaW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgd2hlbiB0aGUgaGVscGVyIGF0dGVtcHRzIHRvIHBhcnNlIHBhY2tldHMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgdGhlIHByb3RvY29sIG51bWJlciBvZiBhIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIG1hdGNoZXMgdGhlIHByb3RvY29sIG51bWJlciBvZiB0aGUgY29ubmVjdGlvbiBpdCBpcyBiZWluZyBhc3NpZ25lZCB0by4gVGhpcyBwcmV2ZW50cyBhIGhlbHBlciBkZXNpZ25lZCBmb3Igb25lIHByb3RvY29sIGZyb20gYmVpbmcgaW5jb3JyZWN0bHkgYXNzaWduZWQgdG8gYSBjb25uZWN0aW9uIG9mIGFub3RoZXIgcHJvdG9jb2wuIFN1Y2ggYSBtaXNtYXRjaCBjb3VsZCBsZWFkIHRvIHR5cGUgY29uZnVzaW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgd2hlbiB0aGUgaGVscGVyIGF0dGVtcHRzIHRvIHBhcnNlIHBhY2tldHMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow6mf59[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 23:46:50 +0000 UTC FinishedAt: 2026-08-11 00:05:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK" ], "series_id": "ce20e818-e79a-4e32-afb4-57e1caedc218" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__nf_ct_try_assign_helper" ], "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+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgdGhlIHByb3RvY29sIG51bWJlciBvZiBhIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIG1hdGNoZXMgdGhlIHByb3RvY29sIG51bWJlciBvZiB0aGUgY29ubmVjdGlvbiBpdCBpcyBiZWluZyBhc3NpZ25lZCB0by4gVGhpcyBwcmV2ZW50cyBhIGhlbHBlciBkZXNpZ25lZCBmb3Igb25lIHByb3RvY29sIGZyb20gYmVpbmcgaW5jb3JyZWN0bHkgYXNzaWduZWQgdG8gYSBjb25uZWN0aW9uIG9mIGFub3RoZXIgcHJvdG9jb2wuIFN1Y2ggYSBtaXNtYXRjaCBjb3VsZCBsZWFkIHRvIHR5cGUgY29uZnVzaW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgd2hlbiB0aGUgaGVscGVyIGF0dGVtcHRzIHRvIHBhcnNlIHBhY2tldHMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJgIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY2AgdG8gYWRkIGEgY2hlY2sgZm9yIHRoZSBwcm90b2NvbCBudW1iZXIgb2YgdGhlIGhlbHBlciBhbmQgdGhlIGNvbm5lY3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IHdoZW4gYXNzaWduaW5nIGEgaGVscGVyIHRvIGEgY29ubmVjdGlvbi4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSBuZXR3b3JrIHRyYWZmaWMgd2hlbiBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgYXJlIHVzZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmMTk5ODMwZDAxYzdiZjU4Y2RkOTczMzQ1ZDFhNGJkYTg3ZWVjMDg2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDA6MDQ6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xuaW5kZXggNTAwNTA5YjE3NjYzZS4uNDE5YWY2Zjc2YmQyNyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xuQEAgLTIwNSw2ICYjNDM7MjA1LDggQEAgaW50IF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCxcbiBcdGhlbHAgPSBuZmN0X2hlbHAodG1wbCk7XG4gXHRpZiAoaGVscClcbiBcdFx0aGVscGVyID0gcmN1X2RlcmVmZXJlbmNlKGhlbHAtXHUwMDNlaGVscGVyKTtcbiYjNDM7XHRpZiAoaGVscGVyIFx1MDAyNlx1MDAyNiBoZWxwZXItXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtICE9IG5mX2N0X3Byb3RvbnVtKGN0KSlcbiYjNDM7XHRcdGhlbHBlciA9IE5VTEw7XG4gXG4gXHRoZWxwID0gbmZjdF9oZWxwKGN0KTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19uZl9jdF90cnlfYXNzaWduX2hlbHBlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcmAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jYCB0byBhZGQgYSBjaGVjayBmb3IgdGhlIHByb3RvY29sIG51bWJlciBvZiB0aGUgaGVscGVyIGFuZCB0aGUgY29ubmVjdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgd2hlbiBhc3NpZ25pbmcgYSBoZWxwZXIgdG8gYSBjb25uZWN0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IG5ldHdvcmsgdHJhZmZpYyB3aGVuIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycyBhcmUgdXNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYxOTk4MzBkMDFjN2JmNThjZGQ5NzMzNDVkMWE0YmRhODdlZWMwODYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAwMDowNDoxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKaW5kZXggNTAwNTA5YjE3NjYzZS4uNDE5YWY2Zjc2YmQyNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKQEAgLTIwNSw2ICYjNDM7MjA1LDggQEAgaW50IF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCwKIAloZWxwID0gbmZjdF9oZWxwKHRtcGwpOwogCWlmIChoZWxwKQogCQloZWxwZXIgPSByY3VfZGVyZWZlcmVuY2UoaGVscC0mZ3Q7aGVscGVyKTsKJiM0MzsJaWYgKGhlbHBlciAmYW1wOyZhbXA7IGhlbHBlci0mZ3Q7dHVwbGUuZHN0LnByb3RvbnVtICE9IG5mX2N0X3Byb3RvbnVtKGN0KSkKJiM0MzsJCWhlbHBlciA9IE5VTEw7CiAKIAloZWxwID0gbmZjdF9oZWxwKGN0KTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA5CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29ubnRyYWNrIEhlbHBlciBBc3NpZ25tZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNgLiBTZWVtcyBsaWtlIHRoZXkmIzM5O3ZlIG1vZGlmaWVkIHRoZSBgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcmAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgaW50cm9kdWNlZCBhIGNoZWNrLiBMZXQgbWUgcHVsbCB1cCB0aGUgcmVsZXZhbnQgY29kZSBzbmlwcGV0OgoKYGBgYwoJaWYgKGhlbHBlciAmYW1wOyZhbXA7IGhlbHBlci0mZ3Q7dHVwbGUuZHN0LnByb3RvbnVtICE9IG5mX2N0X3Byb3RvbnVtKGN0KSkKCQloZWxwZXIgPSBOVUxMOwpgYGAKClJpZ2h0LCBnb3QgaXQuIFRoaXMgY29uZGl0aW9uYWwgaXMgY3J1Y2lhbC4gRXNzZW50aWFsbHksIHRoZSBjb2RlIGlzIHZlcmlmeWluZyB0aGF0IGlmIGEgaGVscGVyIGlzIGFscmVhZHkgYXZhaWxhYmxlLCB0aGUgcHJvdG9jb2wgbnVtYmVyIG9mIHRoYXQgaGVscGVyICptdXN0KiBtYXRjaCB0aGUgcHJvdG9jb2wgbnVtYmVyIG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5LiBJZiB0aGVyZSYjMzk7cyBhIG1pc21hdGNoIOKAkyBtZWFuaW5nLCBpZiB0aGUgaGVscGVyIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGRpZmZlcmVudCBwcm90b2NvbCB0aGFuIHRoZSBjb25uZWN0aW9uIOKAkyB0aGUgYGhlbHBlcmAgcG9pbnRlciBpcyBiZWluZyBzZXQgdG8gYE5VTExgLiBUaGlzIGltcGxpZXMgdGhhdCB0aGUgZXhpc3RpbmcgaGVscGVyIGlzIGluY29tcGF0aWJsZSBhbmQgbmVlZHMgdG8gYmUgZGlzY2FyZGVkLiBUaGlzIHByb2JhYmx5IG1lYW5zIGEgc3BlY2lmaWMgSGVscGVyIGlzbiYjMzk7dCB2YWxpZCBmb3IgdGhlIHByb3RvY29sIGluIHF1ZXN0aW9uLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgaXMgaW50ZW5kZWQgdG8gcHJldmVudCBtaXMtYXNzb2NpYXRpb24gb2YgaGVscGVycyB3aXRoIGNvbm5lY3Rpb25zIG9mIHRoZSB3cm9uZyBwcm90b2NvbCwgd2hpY2ggY291bGQgbGVhZCB0byBhbGwgc29ydHMgb2Ygd2VpcmQgYmVoYXZpb3IgYW5kIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBvdGhlciBjb21wb25lbnRzIGluIGBuZXRmaWx0ZXJgIHRvIGFzc2VzcyB0aGUgZnVsbCBpbXBhY3Qgb2YgdGhpcyBwYXRjaCBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIHRoYXQgbmVlZCBhdHRlbnRpb24uIEl0JiMzOTtzIGEgZmFpcmx5IGNvbmNpc2UgYWRkaXRpb24sIGJ1dCBwb3RlbnRpYWxseSBhIHNpZ25pZmljYW50IGJlaGF2aW9yYWwgY2hhbmdlLCBhbmQgSSYjMzk7bGwgd2FudCB0byByZXZpZXcgdGhlIGFzc29jaWF0ZWQgY29tbWl0IG1lc3NhZ2VzIGFuZCBhbnkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19uZl9jdF90cnlfYXNzaWduX2hlbHBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTE5MD1FWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9oZWxwZXJfZXh0X2FkZCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0xOTEtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzoxOTI6aW50IF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTE5My1cdFx0XHQgICAgICBnZnBfdCBmbGFncylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0yNDgtfVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6MjQ5OkVYUE9SVF9TWU1CT0xfR1BMKF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMjUwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MzcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGUgd2VlZHMuIFRoZSBpbnN0cnVjdGlvbiBpcyB0byBkZWx2ZSBpbnRvIHRoZSBmdW5jdGlvbiBgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcmAuIEkga25vdyB0aGlzIG9uZSwgaXQmIzM5O3MgdHlwaWNhbGx5IGludm9sdmVkIGluLCBhbmQgSSB0aGluayBJIHJlbWVtYmVyIHRoZSBkZXRhaWxzLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHByb2JhYmx5IHN0YXJ0IHdpdGggaXRzIHByaW1hcnkgcHVycG9zZSBhbmQgY29udGV4dC4gT2theSwgdGhpcyBoZWxwZXIgaXMgYWxtb3N0IGNlcnRhaW5seSB1c2VkIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3Vic3lzdGVtLCByaWdodD8gQW5kIHRoZSBuYW1lIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0cyByb2xlIGlzIGFib3V0IGFzc2lnbm1lbnQg4oCTIHNwZWNpZmljYWxseSwgdHJ5aW5nIHRvIGFzc2lnbiBzb21lIGRhdGEgb3IgYXR0cmlidXRlLCBtYXliZSBhIGZsb3cgbGFiZWwsIGEgc2Vzc2lvbiBvciBhIG1hcmsgdG8gYSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5LiBJdCBoYXMgYSBsb3Qgb2YgbG93LWxldmVsIGludHJpY2FjaWVzLCB0aGVyZSBtaWdodCBiZSBjb25jdXJyZW5jeSBjb25zaWRlcmF0aW9ucy4KCkkmIzM5O20gbWVudGFsbHkgcHJlcGFyaW5nIGZvciBhIGRlZXAgZGl2ZSBpbnRvIGl0cyBpbnRlcm5hbHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIHJhY2VzLCBhdG9taWNpdHksIGVycm9yIGNvbmRpdGlvbnMsIGFuZCB3aGV0aGVyIGl0IHVzZXMgYW55IHNwZWNpYWwgbG9ja2luZyBtZWNoYW5pc21zIG9yIGF0b21pYyBvcGVyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGRpc3NlY3QgaXRzIGFyZ3VtZW50cyB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB3aGF0IGl0IGlzIHRyeWluZyB0byBhc3NpZ24sIHdoYXQgY29uZGl0aW9ucyBhcmUgY2hlY2tlZCwgYW5kIHdoaWNoIGFyZSB0aGUgY29yZSBhc3BlY3RzIHRoYXQgbWFrZXMgdGhlIGZ1bmN0aW9uIGEgaGVscGVyLiBUaGlzIGlzIG9mdGVuIHdoZXJlIHRoZSB0cmlja3kgYml0cyByZXNpZGUg4oCTIHRoZSBjb25kaXRpb25hbCBicmFuY2hlcywgdGhlIGVkZ2UgY2FzZXMsIHRoZSBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGluZnJhc3RydWN0dXJlLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgdGhpcyBpcyBhIGNyaXRpY2FsIHNlY3Rpb24gdGhhdCBuZWVkcyB0byBiZSBvcHRpbWl6ZWQgZm9yIHBlcmZvcm1hbmNlLgoKSSYjMzk7bSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIGBuZl9jdGAgc3RydWN0dXJlIGFuZCBpdHMgYXNzb2NpYXRlZCBtZW1iZXJzLiBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEFuZCBob3cgZG9lcyBpdCByZWxhdGUgdG8gdGhlIG92ZXJhbGwgY29ubmVjdGlvbiB0cmFja2luZyBzdGF0ZSBtYWNoaW5lPyBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgaGVscGVyIGNvbnRyaWJ1dGVzIHRvIHRoZSBvdmVyYWxsIE5ldGZpbHRlciBhcmNoaXRlY3R1cmUuIFRpbWUgdG8gZ2V0IGRvd24gYW5kIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5MDpcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9leHRfYWRkKTtcbiAxOTE6XHRcbiAxOTI6XHRpbnQgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBuZl9jb25uICp0bXBsLFxuIDE5MzpcdFx0XHRcdCAgICAgIGdmcF90IGZsYWdzKVxuIDE5NDpcdHtcbiAxOTU6XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIgPSBOVUxMO1xuIDE5NjpcdFx0c3RydWN0IG5mX2Nvbm5faGVscCAqaGVscDtcbiAxOTc6XHRcbiAxOTg6XHRcdC8qIFdlIGFscmVhZHkgZ290IGEgaGVscGVyIGV4cGxpY2l0bHkgYXR0YWNoZWQgKGUuZy4gbmZ0X2N0KSAqL1xuIDE5OTpcdFx0aWYgKHRlc3RfYml0KElQU19IRUxQRVJfQklULCBcdTAwMjZjdC1cdTAwM2VzdGF0dXMpKVxuIDIwMDpcdFx0XHRyZXR1cm4gMDtcbiAyMDE6XHRcbiAyMDI6XHRcdGlmIChXQVJOX09OX09OQ0UoIXRtcGwpKVxuIDIwMzpcdFx0XHRyZXR1cm4gMDtcbiAyMDQ6XHRcbiAyMDU6XHRcdGhlbHAgPSBuZmN0X2hlbHAodG1wbCk7XG4gMjA2Olx0XHRpZiAoaGVscClcbiAyMDc6XHRcdFx0aGVscGVyID0gcmN1X2RlcmVmZXJlbmNlKGhlbHAtXHUwMDNlaGVscGVyKTtcbiAyMDg6XHRcdGlmIChoZWxwZXIgXHUwMDI2XHUwMDI2IGhlbHBlci1cdTAwM2V0dXBsZS5kc3QucHJvdG9udW0gIT0gbmZfY3RfcHJvdG9udW0oY3QpKVxuIDIwOTpcdFx0XHRoZWxwZXIgPSBOVUxMO1xuIDIxMDpcdFxuIDIxMTpcdFx0aGVscCA9IG5mY3RfaGVscChjdCk7XG4gMjEyOlx0XG4gMjEzOlx0XHRpZiAoaGVscGVyID09IE5VTEwpIHtcbiAyMTQ6XHRcdFx0aWYgKGhlbHApIHtcbiAyMTU6XHRcdFx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqdG1wID0gcmN1X2RlcmVmZXJlbmNlKGhlbHAtXHUwMDNlaGVscGVyKTtcbiAyMTY6XHRcbiAyMTc6XHRcdFx0XHRSQ1VfSU5JVF9QT0lOVEVSKGhlbHAtXHUwMDNlaGVscGVyLCBOVUxMKTtcbiAyMTg6XHRcdFx0XHRpZiAodG1wIFx1MDAyNlx1MDAyNiByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2dG1wLVx1MDAzZWN0X3JlZmNudCkpXG4gMjE5Olx0XHRcdFx0XHRrZnJlZV9yY3UodG1wLCByY3UpO1xuIDIyMDpcdFx0XHR9XG4gMjIxOlx0XHRcdHJldHVybiAwO1xuIDIyMjpcdFx0fVxuIDIyMzpcdFxuIDIyNDpcdFx0aWYgKGhlbHAgPT0gTlVMTCkge1xuIDIyNTpcdFx0XHRoZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIGZsYWdzKTtcbiAyMjY6XHRcdFx0aWYgKGhlbHAgPT0gTlVMTClcbiAyMjc6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyMjg6XHRcdH0gZWxzZSB7XG4gMjI5Olx0XHRcdC8qIFdlIG9ubHkgYWxsb3cgaGVscGVyIHJlLWFzc2lnbm1lbnQgb2YgdGhlIHNhbWUgc29ydCBzaW5jZVxuIDIzMDpcdFx0XHQgKiB3ZSBjYW5ub3QgcmVhbGxvY2F0ZSB0aGUgaGVscGVyIGV4dGVuc2lvbiBhcmVhLlxuIDIzMTpcdFx0XHQgKi9cbiAyMzI6XHRcdFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnRtcCA9IHJjdV9kZXJlZmVyZW5jZShoZWxwLVx1MDAzZWhlbHBlcik7XG4gMjMzOlx0XG4gMjM0Olx0XHRcdGlmICh0bXApIHtcbiAyMzU6XHRcdFx0XHRpZiAodG1wLVx1MDAzZWhlbHAgIT0gaGVscGVyLVx1MDAzZWhlbHApIHtcbiAyMzY6XHRcdFx0XHRcdFJDVV9JTklUX1BPSU5URVIoaGVscC1cdTAwM2VoZWxwZXIsIE5VTEwpO1xuIDIzNzpcdFx0XHRcdFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZ0bXAtXHUwMDNlY3RfcmVmY250KSlcbiAyMzg6XHRcdFx0XHRcdFx0a2ZyZWVfcmN1KHRtcCwgcmN1KTtcbiAyMzk6XHRcdFx0XHR9XG4gMjQwOlx0XHRcdFx0cmV0dXJuIDA7XG4gMjQxOlx0XHRcdH1cbiAyNDI6XHRcdH1cbiAyNDM6XHRcbiAyNDQ6XHRcdGlmIChyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2aGVscGVyLVx1MDAzZWN0X3JlZmNudCkpXG4gMjQ1Olx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihoZWxwLVx1MDAzZWhlbHBlciwgaGVscGVyKTtcbiAyNDY6XHRcbiAyNDc6XHRcdHJldHVybiAwO1xuIDI0ODpcdH1cbiAyNDk6XHRFWFBPUlRfU1lNQk9MX0dQTChfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDg4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGEgbmV0ZmlsdGVyIENoYW5nZSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgYSBtb2RpZmljYXRpb24gdG8gYF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJgLi4uIGludGVyZXN0aW5nLiYjMzQ7IEkga25vdyB0aGF0IGZ1bmN0aW9uIGlzIGV4cG9ydGVkLCB3aGljaCBtZWFucyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIHRob3JvdWdobHkuIE15IG5leHQgc3RlcCwgb2YgY291cnNlLCBpcyB0byBkZXRlcm1pbmUgdGhlIGNhbGwgc2l0ZXMgZm9yIGBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyYC4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzIGNyaXRpY2FsIGJlZm9yZSBJIGNhbiBhc3Nlc3MgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgbW9kaWZpY2F0aW9uIG9uIHRoZSBvdmVyYWxsIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aG9zZSBjYWxscyB0byBmdWxseSBncmFzcCB0aGUgcmFtaWZpY2F0aW9ucyBvZiB3aGF0ZXZlciBhbHRlcmF0aW9ucyBhcmUgcHJlc2VudCB3aXRoaW4gdGhpcyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jPTE3NTQ9aW5pdF9jb25udHJhY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMTgzNS1cdGlmICghZXhwIFx1MDAyNlx1MDAyNiB0bXBsKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jOjE4MzY6XHRcdF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoY3QsIHRtcGwsIEdGUF9BVE9NSUMpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTE4MzctXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9MTkwPUVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9leHRfYWRkKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTE5MS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjE5MjppbnQgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBuZl9jb25uICp0bXBsLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMTkzLVx0XHRcdCAgICAgIGdmcF90IGZsYWdzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTI0OC19XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzoyNDk6RVhQT1JUX1NZTUJPTF9HUEwoX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0yNTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcyNgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIGBpbml0X2Nvbm50cmFja2AgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgYGluaXRfY29ubnRyYWNrYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuY2AuIFRoaXMgaXMgYSBjb3JlIG5ldGZpbHRlciBmdW5jdGlvbiwgYW5kIGJhc2VkIG9uIHRoZSBjb250ZXh0LCBJIHRoaW5rIGl0JiMzOTtzIGRlZmluaXRlbHkgd29ydGggYWRkaW5nIHRvIHRoZSBmdXp6aW5nIHRhcmdldCBsaXN0LiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY29udHJvbCBpdHMgY29tcGlsYXRpb24uIEkmIzM5O20gcmVjYWxsaW5nIHRoYXQgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jYCBpcyBpbnZvbHZlZCwgYW5kIEkgc3VzcGVjdCBpdCYjMzk7cyBkZXBlbmRlbnQgb24gYENPTkZJR19ORl9DT05OVFJBQ0tgLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IGJ5IGNoZWNraW5nIHRoZSBgbmV0L25ldGZpbHRlci9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIHNldCB1cCB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Nvbm50cmFja19oZWxwZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9Mz1uZXRmaWx0ZXItJChDT05GSUdfTkVURklMVEVSX05FVExJTkspICYjNDM7PSBuZm5ldGxpbmsub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS00LVxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo1Om5mX2Nvbm50cmFjay15XHQ6PSBuZl9jb25udHJhY2tfY29yZS5vIG5mX2Nvbm50cmFja19zdGFuZGFsb25lLm8gbmZfY29ubnRyYWNrX2V4cGVjdC5vIG5mX2Nvbm50cmFja19oZWxwZXIubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS02LVx0XHQgICBuZl9jb25udHJhY2tfcHJvdG8ubyBuZl9jb25udHJhY2tfcHJvdG9fZ2VuZXJpYy5vIG5mX2Nvbm50cmFja19wcm90b190Y3AubyBuZl9jb25udHJhY2tfcHJvdG9fdWRwLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE4OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbm50cmFjayBDb25maWd1cmF0aW9uIGFuZCBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYENPTkZJR19ORl9DT05OVFJBQ0tgIGp1bXBzIG91dCDigJMgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgc3ltYm9scywgYW5kIHRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9uIGhlcmUgc2VlbXMgdG8gYmUgYF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJgLiBOb3csIEkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgaWYgYGluaXRfY29ubnRyYWNrYCBtaWdodCBhbHNvIGJlIGEgaG90LXBhdGggZnVuY3Rpb24sIGJ1dCB0aGVuIEkgcmVtZW1iZXJlZCB0aGF0IGlzIGNhbGxlZCBmb3IgZXZlcnkgbmV3IGNvbm5lY3Rpb24sIHNvIGl0IGNsZWFybHkgKmlzKiBhIGhvdC1wYXRoIGZ1bmN0aW9uLiAgSSBkb24mIzM5O3QgdGhpbmsgdGhhdCBpcyB0aGUgb25lIGluIGZvY3VzIGluIHRoaXMgcGF0Y2guCgpUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcmAsIHNvIEkgcmVhbGx5IG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgdXNlZC4gQXJlIHRoZXJlIG90aGVyIGNhbGwgc2l0ZXMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IExldCBtZSBzZWUgd2hlcmUgZWxzZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19uZl9jdF90cnlfYXNzaWduX2hlbHBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oPTEyMT1zdHJ1Y3QgbmZfY29ubl9oZWxwICpuZl9jdF9oZWxwZXJfZXh0X2FkZChzdHJ1Y3QgbmZfY29ubiAqY3QsIGdmcF90IGdmcCk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oLTEyMi1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmg6MTIzOmludCBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IG5mX2Nvbm4gKnRtcGwsXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oLTEyNC1cdFx0XHQgICAgICBnZnBfdCBmbGFncyk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jPTE3NTQ9aW5pdF9jb25udHJhY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMTgzNS1cdGlmICghZXhwIFx1MDAyNlx1MDAyNiB0bXBsKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jOjE4MzY6XHRcdF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoY3QsIHRtcGwsIEdGUF9BVE9NSUMpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTE4MzctXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9MTkwPUVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9leHRfYWRkKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTE5MS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjE5MjppbnQgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBuZl9jb25uICp0bXBsLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMTkzLVx0XHRcdCAgICAgIGdmcF90IGZsYWdzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTI0OC19XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzoyNDk6RVhQT1JUX1NZTUJPTF9HUEwoX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0yNTAtXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTcyND1zdGF0aWMgaW50IF9fb3ZzX2N0X2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy03OTgtXHRcdCAgICBpbmZvLVx1MDAzZWhlbHBlciBcdTAwMjZcdTAwMjYgIW5mY3RfaGVscChjdCkpIHtcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo3OTk6XHRcdFx0aW50IGVyciA9IF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoY3QsIGluZm8tXHUwMDNlY3QsXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtODAwLVx0XHRcdFx0XHRcdFx0ICAgIEdGUF9BVE9NSUMpO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz05Njg9VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9jdF9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTA2MS1cdGlmICghbmZfY3RfaXNfY29uZmlybWVkKGN0KSBcdTAwMjZcdTAwMjYgY29tbWl0IFx1MDAyNlx1MDAyNiBwLVx1MDAzZWhlbHBlciBcdTAwMjZcdTAwMjYgIW5mY3RfaGVscChjdCkpIHtcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMDYyOlx0XHRlcnIgPSBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKGN0LCBwLVx1MDAzZXRtcGwsIEdGUF9BVE9NSUMpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTEwNjMtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNjgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgYF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUuIEl0IGxvb2tzIGxpa2UgYF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdG8gZm9jdXMgb24uIEkgc2VlIGl0IG1lbnRpb25lZCBpbiBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYCAoYF9fb3ZzX2N0X2xvb2t1cGApIGFuZCBhbHNvIGluIGBuZXQvc2NoZWQvYWN0X2N0LmNgIChgdGNmX2N0X2FjdGApLCB3aGljaCByZWluZm9yY2VzIGl0cyBpbXBvcnRhbmNlLiBGcm9tIHRoZSB3YXkgdGhpbmdzIGxvb2ssIGl0IGFwcGVhcnMgdG8gYmUgYSBjb3JlIE5ldGZpbHRlciBmdW5jdGlvbiwgYnV0IGl0JiMzOTtzIG5vdCBvbiB0aGUgYWJzb2x1dGUgaG90dGVzdCBwYXRoLiBJdCYjMzk7cyBvbmx5IGludm9rZWQgd2hlbiBhIGhlbHBlciBpcyBhY3R1YWxseSBhc3NpZ25lZC4gVGhpcyBoYXBwZW5zIHdoZW4gdGhlcmUmIzM5O3MgYSBoZWxwZXIgaW4gdGhlIGB0bXBsYCBzdHJ1Y3R1cmUgZHVyaW5nIGBpbml0X2Nvbm50cmFja2AsIHdoZW4gYGluZm8tJmd0O2hlbHBlcmAgaXMgdXNlZCB3aXRoaW4gT1ZTLCBvciB3aGVuIGBwLSZndDtoZWxwZXJgIGlzIHVzZWQgaW4gVEMuIFNvLCBzdGlsbCBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbi4KCkxldCBtZSB0YWtlIGFub3RoZXIgbG9vayB0byBtYWtlIHN1cmUuIE9rYXksIHRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyYCwgc28gaXQmIzM5O3MgdGhlICpvbmx5KiBzeW1ib2wgdG8gZm9jdXMgb24uCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25maWcuIGBORl9DT05OVFJBQ0tgIHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBjb25maWcgdmFyaWFibGUgaGVyZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NPTk5UUkFDSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzQ9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo4Mjpjb25maWcgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTExMT1jb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTE0OmNvbmZpZyBORl9DT05OVFJBQ0tfTUFSS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTIzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0VDTUFSS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyBzZWN1cml0eSBtYXJrIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTM2OmNvbmZpZyBORl9DT05OVFJBQ0tfWk9ORVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ4OmNvbmZpZyBORl9DT05OVFJBQ0tfUFJPQ0ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5LVx0Ym9vbCBcJiMzNDtTdXBwbHkgQ1QgbGlzdCBpbiBwcm9jZnMgKE9CU09MRVRFKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU3OmNvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU4LVx0Ym9vbCBcJiMzNDtDb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50c1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTY3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRU9VVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2OC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE3Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVTVEFNUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3OC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lc3RhbXBpbmcmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTg4OmNvbmZpZyBORl9DT05OVFJBQ0tfTEFCRUxTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg5LVx0Ym9vbCBcJiMzNDtDb25uZWN0aW9uIHRyYWNraW5nIGxhYmVsc1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTk1OmNvbmZpZyBORl9DT05OVFJBQ0tfT1ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVx0Ym9vbFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjExLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMy1cdHRyaXN0YXRlIFwmIzM0O0FtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjI3OmNvbmZpZyBORl9DT05OVFJBQ0tfRlRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI4LVx0dHJpc3RhdGUgXCYjMzQ7RlRQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjM4LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIzOTpjb25maWcgTkZfQ09OTlRSQUNLX0gzMjNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXHR0cmlzdGF0ZSBcJiMzNDtILjMyMyBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI1Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNTg6Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTktXHR0cmlzdGF0ZSBcJiMzNDtJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc0OmNvbmZpZyBORl9DT05OVFJBQ0tfQlJPQURDQVNUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc1LVx0dHJpc3RhdGVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc3OmNvbmZpZyBORl9DT05OVFJBQ0tfTkVUQklPU19OU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cdHRyaXN0YXRlIFwmIzM0O05ldEJJT1MgbmFtZSBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5Njpjb25maWcgTkZfQ09OTlRSQUNLX1NOTVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTctXHR0cmlzdGF0ZSBcJiMzNDtTTk1QIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzExOmNvbmZpZyBORl9DT05OVFJBQ0tfUFBUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMi1cdHRyaXN0YXRlIFwmIzM0O1BQdFAgcHJvdG9jb2wgc3VwcG9ydCAoZGVwcmVjYXRlZClcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzI5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjMzMDpjb25maWcgTkZfQ09OTlRSQUNLX1NBTkVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMzEtXHR0cmlzdGF0ZSBcJiMzNDtTQU5FIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0NC1cdHRyaXN0YXRlIFwmIzM0O1NJUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNTU6Y29uZmlnIE5GX0NPTk5UUkFDS19URlRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU2LVx0dHJpc3RhdGUgXCYjMzQ7VEZUUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMzUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25uZWN0aW9uIFRyYWNraW5nIENvbnVuZHJ1bSoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGp1c3QgZW5hYmxpbmcgYE5GX0NPTk5UUkFDS2Agc2hvdWxkIGJlIHN1ZmZpY2llbnQuIEJ1dCB0aGVuIEkgcmVtZW1iZXJlZCwgdGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIGFzc2lnbmluZyBhIGhlbHBlciwgcmlnaHQ/IFNvLCBwZXJoYXBzIHdlIG5lZWQgdG8gYmUgbW9yZSBhZ2dyZXNzaXZlIHdpdGggaGVscGVyIGVuYWJsZW1lbnQuIE1heWJlIHRoYXQgbWVhbnMgZmxpcHBpbmcgb24gc29tZSBvZiB0aGUgbW9yZSBzcGVjaWZpYyBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgdG8gZW5zdXJlIGB0bXBsYCwgb3Igd2hhdGV2ZXIgbW9kdWxlIGlzIHRoZSB0YXJnZXQsIGNhbiBzdWNjZXNzZnVsbHkgbGV2ZXJhZ2UgYSBoZWxwZXIuIEkmIzM5O20gdGhpbmtpbmcgdGhpbmdzIGxpa2UgYE5GX0NPTk5UUkFDS19GVFBgLCBgTkZfQ09OTlRSQUNLX1NJUGAsIGFuZCB0aGUgbGlrZS4gU3RpbGwsIGBORl9DT05OVFJBQ0tgIGlzIHRoZSBmb3VuZGF0aW9uLiBJdCYjMzk7cyB0aGUgYmlnIG9uZS4gQmVmb3JlIEkgZ28gdG9vIGZhciBkb3duIHRoaXMgcm9hZCwgSSBzaG91bGQgdmVyaWZ5IGlmIGBORl9DT05OVFJBQ0tgIGl0c2VsZiByZWxpZXMgb24gYW55IG90aGVyIG1vZHVsZXMgb3IgY29uZmlndXJhdGlvbnMuIE5lZWQgdG8gY2hlY2sgaXRzIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NPTk5UUkFDSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzQ9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo4Mjpjb25maWcgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTExMT1jb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTE0OmNvbmZpZyBORl9DT05OVFJBQ0tfTUFSS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTIzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0VDTUFSS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyBzZWN1cml0eSBtYXJrIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTM2OmNvbmZpZyBORl9DT05OVFJBQ0tfWk9ORVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ4OmNvbmZpZyBORl9DT05OVFJBQ0tfUFJPQ0ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5LVx0Ym9vbCBcJiMzNDtTdXBwbHkgQ1QgbGlzdCBpbiBwcm9jZnMgKE9CU09MRVRFKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU3OmNvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU4LVx0Ym9vbCBcJiMzNDtDb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50c1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTY3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRU9VVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2OC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE3Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVTVEFNUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3OC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lc3RhbXBpbmcmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTg4OmNvbmZpZyBORl9DT05OVFJBQ0tfTEFCRUxTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg5LVx0Ym9vbCBcJiMzNDtDb25uZWN0aW9uIHRyYWNraW5nIGxhYmVsc1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTk1OmNvbmZpZyBORl9DT05OVFJBQ0tfT1ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVx0Ym9vbFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjExLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMy1cdHRyaXN0YXRlIFwmIzM0O0FtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjI3OmNvbmZpZyBORl9DT05OVFJBQ0tfRlRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI4LVx0dHJpc3RhdGUgXCYjMzQ7RlRQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjM4LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIzOTpjb25maWcgTkZfQ09OTlRSQUNLX0gzMjNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXHR0cmlzdGF0ZSBcJiMzNDtILjMyMyBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI1Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNTg6Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTktXHR0cmlzdGF0ZSBcJiMzNDtJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc0OmNvbmZpZyBORl9DT05OVFJBQ0tfQlJPQURDQVNUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc1LVx0dHJpc3RhdGVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc3OmNvbmZpZyBORl9DT05OVFJBQ0tfTkVUQklPU19OU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cdHRyaXN0YXRlIFwmIzM0O05ldEJJT1MgbmFtZSBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5Njpjb25maWcgTkZfQ09OTlRSQUNLX1NOTVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTctXHR0cmlzdGF0ZSBcJiMzNDtTTk1QIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzExOmNvbmZpZyBORl9DT05OVFJBQ0tfUFBUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMi1cdHRyaXN0YXRlIFwmIzM0O1BQdFAgcHJvdG9jb2wgc3VwcG9ydCAoZGVwcmVjYXRlZClcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzI5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjMzMDpjb25maWcgTkZfQ09OTlRSQUNLX1NBTkVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMzEtXHR0cmlzdGF0ZSBcJiMzNDtTQU5FIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0NC1cdHRyaXN0YXRlIFwmIzM0O1NJUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNTU6Y29uZmlnIE5GX0NPTk5UUkFDS19URlRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU2LVx0dHJpc3RhdGUgXCYjMzQ7VEZUUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MjIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgRGVwZW5kZW5jaWVzOiBBIEtjb25maWcgRGl2ZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5GX0NPTk5UUkFDS2Agd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbmV0ZmlsdGVyIHN1YnN5c3RlbS4gVGhlIG1vc3QgZGlyZWN0IGFwcHJvYWNoLCBhcyBhbHdheXMsIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcHVsbGluZyB1cCB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgaW5pdGlhbCBsaW5lczsgdXN1YWxseSwgdGhlIGVhcmx5IGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGxhaWQgb3V0IHRoZXJlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB3aGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBtb2R1bGVzIGFyZSBwcmVyZXF1aXNpdGVzIGZvciBgTkZfQ09OTlRSQUNLYCB0byBldmVuIGJlIGNvbnNpZGVyZWQgZm9yIGluY2x1c2lvbi4gTm8gcG9pbnQgaW4gd2FkaW5nIHRocm91Z2ggdGhlIHdob2xlIHRoaW5nIGluaXRpYWxseTsgbGV0JiMzOTtzIGdldCB0aGUgZ2lzdCBhbmQgYnVpbGQgZnJvbSB0aGVyZS4gVGhpcyBzaG91bGQgdGVsbCBtZSBxdWlja2x5IHdoZXRoZXIgSSYjMzk7bSBsb29raW5nIGF0IGEgc2ltcGxlIGRlcGVuZGVuY3kgdHJlZSBvciBhIG1vcmUgY29tcGxleCB3ZWIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdFx0ICBmb3IgcGFzc2l2ZSBPUyBmaW5nZXJwcmludCB2aWEgTkZORVRMSU5LLlxuICA4MTpcdFxuICA4MjpcdGNvbmZpZyBORl9DT05OVFJBQ0tcbiAgODM6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcJiMzNDtcbiAgODQ6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuICA4NTpcdFx0c2VsZWN0IE5GX0RFRlJBR19JUFY0XG4gIDg2Olx0XHRzZWxlY3QgTkZfREVGUkFHX0lQVjYgaWYgSVBWNiAhPSBuXG4gIDg3Olx0XHRoZWxwXG4gIDg4Olx0XHQgIENvbm5lY3Rpb24gdHJhY2tpbmcga2VlcHMgYSByZWNvcmQgb2Ygd2hhdCBwYWNrZXRzIGhhdmUgcGFzc2VkXG4gIDg5Olx0XHQgIHRocm91Z2ggeW91ciBtYWNoaW5lLCBpbiBvcmRlciB0byBmaWd1cmUgb3V0IGhvdyB0aGV5IGFyZSByZWxhdGVkXG4gIDkwOlx0XHQgIGludG8gY29ubmVjdGlvbnMuXG4gIDkxOlx0XG4gIDkyOlx0XHQgIFRoaXMgaXMgcmVxdWlyZWQgdG8gZG8gTWFzcXVlcmFkaW5nIG9yIG90aGVyIGtpbmRzIG9mIE5ldHdvcmtcbiAgOTM6XHRcdCAgQWRkcmVzcyBUcmFuc2xhdGlvbi4gIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gZW5oYW5jZSBwYWNrZXRcbiAgOTQ6XHRcdCAgZmlsdGVyaW5nIChzZWUgYENvbm5lY3Rpb24gc3RhdGUgbWF0Y2ggc3VwcG9ydCYjMzk7IGJlbG93KS5cbiAgOTU6XHRcbiAgOTY6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gIDk3Olx0XG4gIDk4Olx0Y29uZmlnIE5GX0xPR19TWVNMT0dcbiAgOTk6XHRcdHRyaXN0YXRlIFwmIzM0O1N5c2xvZyBwYWNrZXQgbG9nZ2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM3NQoJCQkJCQkJb3V0cHV0OiAxMzcKCQkJCQkJCXRob3VnaHRzOiAyNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgSW1wYWN0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgTkZfQ09OTlRSQUNLYCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24uIFRoZXJlJiMzOTtzIG5vIGRlcGVuZGVuY3kgc3BlY2lmaWVkLCBzbyBpdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGRpcmVjdCBhcHByb2FjaC4gSSYjMzk7bGwgaW5jbHVkZSBgTkVURklMVEVSYCBhcyB3ZWxsLCBqdXN0IHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIGEgbWVudWNvbmZpZyBpdGVtIGFuZCBwcm9iYWJseSBhbHJlYWR5IGltcGxpZWQuIEJ1dCByZWFsaXN0aWNhbGx5LCBgTkZfQ09OTlRSQUNLYCBzaG91bGQgYmUgdGhlIGNvcmUgcmVxdWlyZW1lbnQgaGVyZS4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIHNpZ25pZmljYW5jZSBvZiBgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcmAuIElzIGl0IHN0YXRpYywgb3IgaW5saW5lPyBIbW0sIGxvb2tzIGxpa2UgaXQmIzM5O3MgYSBkZWNsYXJlZCBhcyBgaW50IF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCwgZ2ZwX3QgZmxhZ3MpYC4gQWxyaWdodCwgaXQmIzM5O3MgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgZ29vZDsgdGhhdCBjb25maXJtcyBpdCBhcyBhIHNpZ25pZmljYW50IGZvY3VzIHN5bWJvbCBmb3IgdGhpcyBjaGFuZ2UuCgpNeSByZWFzb25pbmcgaGVyZSBpcyB0aGF0IHRoZSBwYXRjaCBpcyBkaXJlY3RseSBtb2RpZnlpbmcgdGhpcyBmdW5jdGlvbiB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBpbnRyb2R1Y2luZyBhIGNoZWNrIGZvciB0aGUgcHJvdG9jb2wgbnVtYmVyIHdpdGhpbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXIgYXNzaWdubWVudCBsb2dpYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNvcmUgTmV0ZmlsdGVyIG1vZGlmaWNhdGlvbiBkZWFsaW5nIHdpdGggaG93IGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycyBhcmUgYXNzaWduZWQgdG8gY29ubmVjdGlvbnMuIEl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIOKAkyBuZXR3b3JrIHRyYWZmaWMgY2FuIHRyaWdnZXIgdGhpcyBjb2RlIHBhdGggaWYgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycyBhcmUgaW4gdXNlLgoKU28sIHRoZSBmb2N1cyBzeW1ib2wgaXMgZGVmaW5pdGVseSBgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcmAsIGFuZCB0aGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbiwgYXMgSSBvcmlnaW5hbGx5IHRob3VnaHQsIGlzIGp1c3QgYE5GX0NPTk5UUkFDS2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyYCBpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNgIHRvIGFkZCBhIGNoZWNrIGZvciB0aGUgcHJvdG9jb2wgbnVtYmVyIG9mIHRoZSBoZWxwZXIgYW5kIHRoZSBjb25uZWN0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgbG9naWMsIHNwZWNpZmljYWxseSB3aGVuIGFzc2lnbmluZyBhIGhlbHBlciB0byBhIGNvbm5lY3Rpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgYnkgbmV0d29yayB0cmFmZmljIHdoZW4gY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzIGFyZSB1c2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyYCBpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNgIHRvIGFkZCBhIGNoZWNrIGZvciB0aGUgcHJvdG9jb2wgbnVtYmVyIG9mIHRoZSBoZWxwZXIgYW5kIHRoZSBjb25uZWN0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgbG9naWMsIHNwZWNpZmljYWxseSB3aGVuIGFzc2lnbmluZyBhIGhlbHBlciB0byBhIGNvbm5lY3Rpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgYnkgbmV0d29yayB0cmFmZmljIHdoZW4gY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzIGFyZSB1c2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBlbnN1cmUgdGhhdCB0aGUgcHJvdG9jb2wgbnVtYmVyIG9mIGEgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXIgbWF0Y2hlcyB0aGUgcHJvdG9jb2wgbnVtYmVyIG9mIHRoZSBjb25uZWN0aW9uIGl0IGlzIGJlaW5nIGFzc2lnbmVkIHRvLiBUaGlzIHByZXZlbnRzIGEgaGVscGVyIGRlc2lnbmVkIGZvciBvbmUgcHJvdG9jb2wgZnJvbSBiZWluZyBpbmNvcnJlY3RseSBhc3NpZ25lZCB0byBhIGNvbm5lY3Rpb24gb2YgYW5vdGhlciBwcm90b2NvbC4gU3VjaCBhIG1pc21hdGNoIGNvdWxkIGxlYWQgdG8gdHlwZSBjb25mdXNpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyB3aGVuIHRoZSBoZWxwZXIgYXR0ZW1wdHMgdG8gcGFyc2UgcGFja2V0cy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIG1lbW9yeSBzYWZldHkgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmMTk5ODMwZDAxYzdiZjU4Y2RkOTczMzQ1ZDFhNGJkYTg3ZWVjMDg2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMDA6MDQ6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jCmluZGV4IDUwMDUwOWIxNzY2M2UuLjQxOWFmNmY3NmJkMjcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jCkBAIC0yMDUsNiAmIzQzOzIwNSw4IEBAIGludCBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IG5mX2Nvbm4gKnRtcGwsCiAJaGVscCA9IG5mY3RfaGVscCh0bXBsKTsKIAlpZiAoaGVscCkKIAkJaGVscGVyID0gcmN1X2RlcmVmZXJlbmNlKGhlbHAtJmd0O2hlbHBlcik7CiYjNDM7CWlmIChoZWxwZXIgJmFtcDsmYW1wOyBoZWxwZXItJmd0O3R1cGxlLmRzdC5wcm90b251bSAhPSBuZl9jdF9wcm90b251bShjdCkpCiYjNDM7CQloZWxwZXIgPSBOVUxMOwogCiAJaGVscCA9IG5mY3RfaGVscChjdCk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0ZmlsdGVyIENvbm50cmFjayBIZWxwZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyYC4gVGhlIGNydWNpYWwgYWRkaXRpb24gaXMgdGhhdCBwcm90b2NvbCBudW1iZXIgY2hlY2suIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgcHJldmVudGluZyBhIGhlbHBlciBmcm9tIGJlaW5nIGFzc2lnbmVkIHRvIGEgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeSBpZiB0aGUgaGVscGVyJiMzOTtzIGV4cGVjdGVkIHByb3RvY29sIChgaGVscGVyLSZndDt0dXBsZS5kc3QucHJvdG9udW1gKSBkb2VzbiYjMzk7dCBtYXRjaCB0aGUgY3VycmVudCBjb25uZWN0aW9uJiMzOTtzIHByb3RvY29sIChgbmZfY3RfcHJvdG9udW0oY3QpYCkuCgpUaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBidWcgZml4LiBUaGUgc2NlbmFyaW8gdGhleSYjMzk7cmUgYXZvaWRpbmcgaXMgcHJldHR5IGNsZWFyIHRvIG1lOiBhIGhlbHBlciBkZXNpZ25lZCBmb3IsIHNheSwgVENQIGNvbm5lY3Rpb25zIGdldHRpbmcgaW5hZHZlcnRlbnRseSBhc3NpZ25lZCB0byBhIFVEUCBjb25uZWN0aW9uIG9yIHZpY2UgdmVyc2EuIFRoZSBpbXBsaWNhdGlvbnMgYXJlIGNvbmNlcm5pbmcg4oCTIHRoaXMgY291bGQgZWFzaWx5IGxlYWQgdG8gYSByYW5nZSBvZiBuYXN0eSBpc3N1ZXMsIGxpa2Ugb3V0LW9mLWJvdW5kcyByZWFkcyBvciB3cml0ZXMsIHNvbWUga2luZCBvZiB0eXBlIGNvbmZ1c2lvbiBpZiB0aGUgaGVscGVyIGF0dGVtcHRzIHRvIGludGVycHJldCBwYWNrZXRzIHVzaW5nIHRoZSB3cm9uZyBwcm90b2NvbCBzZW1hbnRpY3MuIEkgZG9uJiMzOTt0IHRoaW5rIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHRoZSBkaXJlY3QgcHJvYmxlbSwgYWx0aG91Z2ggdGhhdCBraW5kIG9mIGJ1ZyAqY291bGQqIGFyaXNlIGZyb20gdGhpcyBraW5kIG9mIG1pcy1hc3NpZ25tZW50LiBUaGlzIGlzIGEgY2xhc3NpYyBsb2dpYyBlcnJvciwgYSB0eXBlIGNvbmZ1c2lvbiBpc3N1ZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIGBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyYCB0byBzZWUgd2hhdCBlbHNlIHRoZXkmIzM5O3JlIGRvaW5nIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTU6XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIgPSBOVUxMO1xuIDE5NjpcdFx0c3RydWN0IG5mX2Nvbm5faGVscCAqaGVscDtcbiAxOTc6XHRcbiAxOTg6XHRcdC8qIFdlIGFscmVhZHkgZ290IGEgaGVscGVyIGV4cGxpY2l0bHkgYXR0YWNoZWQgKGUuZy4gbmZ0X2N0KSAqL1xuIDE5OTpcdFx0aWYgKHRlc3RfYml0KElQU19IRUxQRVJfQklULCBcdTAwMjZjdC1cdTAwM2VzdGF0dXMpKVxuIDIwMDpcdFx0XHRyZXR1cm4gMDtcbiAyMDE6XHRcbiAyMDI6XHRcdGlmIChXQVJOX09OX09OQ0UoIXRtcGwpKVxuIDIwMzpcdFx0XHRyZXR1cm4gMDtcbiAyMDQ6XHRcbiAyMDU6XHRcdGhlbHAgPSBuZmN0X2hlbHAodG1wbCk7XG4gMjA2Olx0XHRpZiAoaGVscClcbiAyMDc6XHRcdFx0aGVscGVyID0gcmN1X2RlcmVmZXJlbmNlKGhlbHAtXHUwMDNlaGVscGVyKTtcbiAyMDg6XHRcdGlmIChoZWxwZXIgXHUwMDI2XHUwMDI2IGhlbHBlci1cdTAwM2V0dXBsZS5kc3QucHJvdG9udW0gIT0gbmZfY3RfcHJvdG9udW0oY3QpKVxuIDIwOTpcdFx0XHRoZWxwZXIgPSBOVUxMO1xuIDIxMDpcdFxuIDIxMTpcdFx0aGVscCA9IG5mY3RfaGVscChjdCk7XG4gMjEyOlx0XG4gMjEzOlx0XHRpZiAoaGVscGVyID09IE5VTEwpIHtcbiAyMTQ6XHRcdFx0aWYgKGhlbHApIHtcbiAyMTU6XHRcdFx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqdG1wID0gcmN1X2RlcmVmZXJlbmNlKGhlbHAtXHUwMDNlaGVscGVyKTtcbiAyMTY6XHRcbiAyMTc6XHRcdFx0XHRSQ1VfSU5JVF9QT0lOVEVSKGhlbHAtXHUwMDNlaGVscGVyLCBOVUxMKTtcbiAyMTg6XHRcdFx0XHRpZiAodG1wIFx1MDAyNlx1MDAyNiByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2dG1wLVx1MDAzZWN0X3JlZmNudCkpXG4gMjE5Olx0XHRcdFx0XHRrZnJlZV9yY3UodG1wLCByY3UpO1xuIDIyMDpcdFx0XHR9XG4gMjIxOlx0XHRcdHJldHVybiAwO1xuIDIyMjpcdFx0fVxuIDIyMzpcdFxuIDIyNDpcdFx0aWYgKGhlbHAgPT0gTlVMTCkge1xuIDIyNTpcdFx0XHRoZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIGZsYWdzKTtcbiAyMjY6XHRcdFx0aWYgKGhlbHAgPT0gTlVMTClcbiAyMjc6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyMjg6XHRcdH0gZWxzZSB7XG4gMjI5Olx0XHRcdC8qIFdlIG9ubHkgYWxsb3cgaGVscGVyIHJlLWFzc2lnbm1lbnQgb2YgdGhlIHNhbWUgc29ydCBzaW5jZVxuIDIzMDpcdFx0XHQgKiB3ZSBjYW5ub3QgcmVhbGxvY2F0ZSB0aGUgaGVscGVyIGV4dGVuc2lvbiBhcmVhLlxuIDIzMTpcdFx0XHQgKi9cbiAyMzI6XHRcdFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnRtcCA9IHJjdV9kZXJlZmVyZW5jZShoZWxwLVx1MDAzZWhlbHBlcik7XG4gMjMzOlx0XG4gMjM0Olx0XHRcdGlmICh0bXApIHtcbiAyMzU6XHRcdFx0XHRpZiAodG1wLVx1MDAzZWhlbHAgIT0gaGVscGVyLVx1MDAzZWhlbHApIHtcbiAyMzY6XHRcdFx0XHRcdFJDVV9JTklUX1BPSU5URVIoaGVscC1cdTAwM2VoZWxwZXIsIE5VTEwpO1xuIDIzNzpcdFx0XHRcdFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZ0bXAtXHUwMDNlY3RfcmVmY250KSlcbiAyMzg6XHRcdFx0XHRcdFx0a2ZyZWVfcmN1KHRtcCwgcmN1KTtcbiAyMzk6XHRcdFx0XHR9XG4gMjQwOlx0XHRcdFx0cmV0dXJuIDA7XG4gMjQxOlx0XHRcdH1cbiAyNDI6XHRcdH1cbiAyNDM6XHRcbiAyNDQ6XHRcdGlmIChyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2aGVscGVyLVx1MDAzZWN0X3JlZmNudCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMjYKCQkJCQkJCW91dHB1dDogMTUyCgkJCQkJCQl0aG91Z2h0czogMjQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSGVscGVyIFByb3RvY29sIENoZWNrKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IHByZXZlbnRpbmcgYSBoZWxwZXIgZnVuY3Rpb24gZnJvbSBnZXR0aW5nIGFzc2lnbmVkIHRvIGEgY29ubmVjdGlvbiB3aXRoIGEgbWlzbWF0Y2hlZCBwcm90b2NvbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7QWgsIGNsYXNzaWMgbG9naWMgYnVnIHRlcnJpdG9yeS4mIzM0OyBJZiB0aGUgaGVscGVyJiMzOTtzIHByb3RvY29sIGRvZXNuJiMzOTt0IGFsaWduIHdpdGggdGhlIGNvbm5lY3Rpb24mIzM5O3MsIHRoaW5ncyBjYW4gZ28gc2lkZXdheXMgKmZhc3QqIGR1cmluZyBwYWNrZXQgcGFyc2luZy4gV2UmIzM5O3JlIHBvdGVudGlhbGx5IGxvb2tpbmcgYXQgdHlwZSBjb25mdXNpb24sIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzIOKAkyB0aGUgdXN1YWwgc3VzcGVjdHMuIFRoYW5rZnVsbHksIHRoZXNlIGFyZSBnZW5lcmFsbHkgdGhlIGtpbmRzIG9mIGlzc3VlcyB0aGF0IEtBU0FOIGFuZCB0aG9zZSBvdGhlciBtZW1vcnkgc2FmZXR5IHRvb2xzIGFyZSBidWlsdCB0byBjYXRjaCBwcmV0dHkgcmVsaWFibHkuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6ICp3aGF0IGtpbmQgb2YgZnV6emluZyBzaG91bGQgd2UgZG8/KiBSZWFkaW5nIG9uLCBpdCBzZWVtcyB0aGVyZSYjMzk7cyBubyBldmlkZW5jZSBoZXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgd2hpY2ggYXJlIHRoZSBtYWluIHRhcmdldHMgZm9yIEtNU0FOLiBUaGUgY29yZSBwcm9ibGVtIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIHNlZW1zIHRvIGJlIGEgbG9naWMgZXJyb3IgdGhhdCBwb3RlbnRpYWxseSBsZWFkcyB0byBtZW1vcnkgY29ycnVwdGlvbiB0aHJvdWdoIGltcHJvcGVyIHBhcnNpbmcgYW5kIHR5cGUgY29uZnVzaW9uIHdoZW4gaW5jb3JyZWN0IGZ1bmN0aW9ucyBvcGVyYXRlIG9uIG1pc21hdGNoZWQgZGF0YS4gVGhlcmVmb3JlLCBJIGRvbiYjMzk7dCBzZWUgYSBjb21wZWxsaW5nIHJlYXNvbiB0byBkZWRpY2F0ZSBhIGZ1enppbmcgc2Vzc2lvbiB0byBLTVNBTi4gU3RhbmRhcmQgZnV6emluZyBhbmQgZXhpc3RpbmcgbWVtb3J5IHNhZmV0eSB0b29scyBzaG91bGQgc3VmZmljZSBmb3IgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZSBwcm90b2NvbCBudW1iZXIgb2YgYSBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlciBtYXRjaGVzIHRoZSBwcm90b2NvbCBudW1iZXIgb2YgdGhlIGNvbm5lY3Rpb24gaXQgaXMgYmVpbmcgYXNzaWduZWQgdG8uIFRoaXMgcHJldmVudHMgYSBoZWxwZXIgZGVzaWduZWQgZm9yIG9uZSBwcm90b2NvbCBmcm9tIGJlaW5nIGluY29ycmVjdGx5IGFzc2lnbmVkIHRvIGEgY29ubmVjdGlvbiBvZiBhbm90aGVyIHByb3RvY29sLiBTdWNoIGEgbWlzbWF0Y2ggY291bGQgbGVhZCB0byB0eXBlIGNvbmZ1c2lvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIHdoZW4gdGhlIGhlbHBlciBhdHRlbXB0cyB0byBwYXJzZSBwYWNrZXRzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgdGhlIHByb3RvY29sIG51bWJlciBvZiBhIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIG1hdGNoZXMgdGhlIHByb3RvY29sIG51bWJlciBvZiB0aGUgY29ubmVjdGlvbiBpdCBpcyBiZWluZyBhc3NpZ25lZCB0by4gVGhpcyBwcmV2ZW50cyBhIGhlbHBlciBkZXNpZ25lZCBmb3Igb25lIHByb3RvY29sIGZyb20gYmVpbmcgaW5jb3JyZWN0bHkgYXNzaWduZWQgdG8gYSBjb25uZWN0aW9uIG9mIGFub3RoZXIgcHJvdG9jb2wuIFN1Y2ggYSBtaXNtYXRjaCBjb3VsZCBsZWFkIHRvIHR5cGUgY29uZnVzaW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgd2hlbiB0aGUgaGVscGVyIGF0dGVtcHRzIHRvIHBhcnNlIHBhY2tldHMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MDQ6MjAuMzI1MTcwNDc0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI1MzcyODEzOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19uZl9jdF90cnlfYXNzaWduX2hlbHBlclwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZSBwcm90b2NvbCBudW1iZXIgb2YgYSBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlciBtYXRjaGVzIHRoZSBwcm90b2NvbCBudW1iZXIgb2YgdGhlIGNvbm5lY3Rpb24gaXQgaXMgYmVpbmcgYXNzaWduZWQgdG8uIFRoaXMgcHJldmVudHMgYSBoZWxwZXIgZGVzaWduZWQgZm9yIG9uZSBwcm90b2NvbCBmcm9tIGJlaW5nIGluY29ycmVjdGx5IGFzc2lnbmVkIHRvIGEgY29ubmVjdGlvbiBvZiBhbm90aGVyIHByb3RvY29sLiBTdWNoIGEgbWlzbWF0Y2ggY291bGQgbGVhZCB0byB0eXBlIGNvbmZ1c2lvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIHdoZW4gdGhlIGhlbHBlciBhdHRlbXB0cyB0byBwYXJzZSBwYWNrZXRzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJgIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY2AgdG8gYWRkIGEgY2hlY2sgZm9yIHRoZSBwcm90b2NvbCBudW1iZXIgb2YgdGhlIGhlbHBlciBhbmQgdGhlIGNvbm5lY3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IHdoZW4gYXNzaWduaW5nIGEgaGVscGVyIHRvIGEgY29ubmVjdGlvbi4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSBuZXR3b3JrIHRyYWZmaWMgd2hlbiBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgYXJlIHVzZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjA0OjIwLjMyNTE3NzA1NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI1ODI0Njc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjE5OTgzMGQwMWM3YmY1OGNkZDk3MzM0NWQxYTRiZGE4N2VlYzA4NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwMDowNDoxOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXFxuaW5kZXggNTAwNTA5YjE3NjYzZS4uNDE5YWY2Zjc2YmQyNyAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXFxuQEAgLTIwNSw2ICsyMDUsOCBAQCBpbnQgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBuZl9jb25uICp0bXBsLFxcbiBcXHRoZWxwID0gbmZjdF9oZWxwKHRtcGwpO1xcbiBcXHRpZiAoaGVscClcXG4gXFx0XFx0aGVscGVyID0gcmN1X2RlcmVmZXJlbmNlKGhlbHAtXFx1MDAzZWhlbHBlcik7XFxuK1xcdGlmIChoZWxwZXIgXFx1MDAyNlxcdTAwMjYgaGVscGVyLVxcdTAwM2V0dXBsZS5kc3QucHJvdG9udW0gIT0gbmZfY3RfcHJvdG9udW0oY3QpKVxcbitcXHRcXHRoZWxwZXIgPSBOVUxMO1xcbiBcXG4gXFx0aGVscCA9IG5mY3RfaGVscChjdCk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDowNDoyMC43NTE3MjUzNzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MDE1NzgwMjI4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9DT05OVFJBQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJgIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY2AgdG8gYWRkIGEgY2hlY2sgZm9yIHRoZSBwcm90b2NvbCBudW1iZXIgb2YgdGhlIGhlbHBlciBhbmQgdGhlIGNvbm5lY3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IHdoZW4gYXNzaWduaW5nIGEgaGVscGVyIHRvIGEgY29ubmVjdGlvbi4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSBuZXR3b3JrIHRyYWZmaWMgd2hlbiBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgYXJlIHVzZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYxOTk4MzBkMDFjN2JmNThjZGQ5NzMzNDVkMWE0YmRhODdlZWMwODZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwMDowNDoxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcbmluZGV4IDUwMDUwOWIxNzY2M2UuLjQxOWFmNmY3NmJkMjcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcbkBAIC0yMDUsNiArMjA1LDggQEAgaW50IF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCxcbiBcdGhlbHAgPSBuZmN0X2hlbHAodG1wbCk7XG4gXHRpZiAoaGVscClcbiBcdFx0aGVscGVyID0gcmN1X2RlcmVmZXJlbmNlKGhlbHAtXHUwMDNlaGVscGVyKTtcbitcdGlmIChoZWxwZXIgXHUwMDI2XHUwMDI2IGhlbHBlci1cdTAwM2V0dXBsZS5kc3QucHJvdG9udW0gIT0gbmZfY3RfcHJvdG9udW0oY3QpKVxuK1x0XHRoZWxwZXIgPSBOVUxMO1xuIFxuIFx0aGVscCA9IG5mY3RfaGVscChjdCk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDowNDoyMC43NTE3MjY2ODFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjUzMjk4NzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29ubnRyYWNrIEhlbHBlciBBc3NpZ25tZW50IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jYC4gU2VlbXMgbGlrZSB0aGV5J3ZlIG1vZGlmaWVkIHRoZSBgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcmAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIFNwZWNpZmljYWxseSwgdGhleSd2ZSBpbnRyb2R1Y2VkIGEgY2hlY2suIExldCBtZSBwdWxsIHVwIHRoZSByZWxldmFudCBjb2RlIHNuaXBwZXQ6XG5cbmBgYGNcblx0aWYgKGhlbHBlciBcdTAwMjZcdTAwMjYgaGVscGVyLVx1MDAzZXR1cGxlLmRzdC5wcm90b251bSAhPSBuZl9jdF9wcm90b251bShjdCkpXG5cdFx0aGVscGVyID0gTlVMTDtcbmBgYFxuXG5SaWdodCwgZ290IGl0LiBUaGlzIGNvbmRpdGlvbmFsIGlzIGNydWNpYWwuIEVzc2VudGlhbGx5LCB0aGUgY29kZSBpcyB2ZXJpZnlpbmcgdGhhdCBpZiBhIGhlbHBlciBpcyBhbHJlYWR5IGF2YWlsYWJsZSwgdGhlIHByb3RvY29sIG51bWJlciBvZiB0aGF0IGhlbHBlciAqbXVzdCogbWF0Y2ggdGhlIHByb3RvY29sIG51bWJlciBvZiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyeS4gSWYgdGhlcmUncyBhIG1pc21hdGNoIOKAkyBtZWFuaW5nLCBpZiB0aGUgaGVscGVyIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGRpZmZlcmVudCBwcm90b2NvbCB0aGFuIHRoZSBjb25uZWN0aW9uIOKAkyB0aGUgYGhlbHBlcmAgcG9pbnRlciBpcyBiZWluZyBzZXQgdG8gYE5VTExgLiBUaGlzIGltcGxpZXMgdGhhdCB0aGUgZXhpc3RpbmcgaGVscGVyIGlzIGluY29tcGF0aWJsZSBhbmQgbmVlZHMgdG8gYmUgZGlzY2FyZGVkLiBUaGlzIHByb2JhYmx5IG1lYW5zIGEgc3BlY2lmaWMgSGVscGVyIGlzbid0IHZhbGlkIGZvciB0aGUgcHJvdG9jb2wgaW4gcXVlc3Rpb24uXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIGludGVuZGVkIHRvIHByZXZlbnQgbWlzLWFzc29jaWF0aW9uIG9mIGhlbHBlcnMgd2l0aCBjb25uZWN0aW9ucyBvZiB0aGUgd3JvbmcgcHJvdG9jb2wsIHdoaWNoIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHdlaXJkIGJlaGF2aW9yIGFuZCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBvdGhlciBjb21wb25lbnRzIGluIGBuZXRmaWx0ZXJgIHRvIGFzc2VzcyB0aGUgZnVsbCBpbXBhY3Qgb2YgdGhpcyBwYXRjaCBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIHRoYXQgbmVlZCBhdHRlbnRpb24uIEl0J3MgYSBmYWlybHkgY29uY2lzZSBhZGRpdGlvbiwgYnV0IHBvdGVudGlhbGx5IGEgc2lnbmlmaWNhbnQgYmVoYXZpb3JhbCBjaGFuZ2UsIGFuZCBJJ2xsIHdhbnQgdG8gcmV2aWV3IHRoZSBhc3NvY2lhdGVkIGNvbW1pdCBtZXNzYWdlcyBhbmQgYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA5LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MDQ6MjUuMDA1MDI4NDc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTE0Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9MTkwPUVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9leHRfYWRkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0xOTEtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6MTkyOmludCBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IG5mX2Nvbm4gKnRtcGwsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMTkzLVxcdFxcdFxcdCAgICAgIGdmcF90IGZsYWdzKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMjQ4LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzoyNDk6RVhQT1JUX1NZTUJPTF9HUEwoX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMjUwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDowNDoyNS4wNTA1NDg0OTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTkwMzEzMjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGludG8gdGhlIHdlZWRzLiBUaGUgaW5zdHJ1Y3Rpb24gaXMgdG8gZGVsdmUgaW50byB0aGUgZnVuY3Rpb24gYF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJgLiBJIGtub3cgdGhpcyBvbmUsIGl0J3MgdHlwaWNhbGx5IGludm9sdmVkIGluLCBhbmQgSSB0aGluayBJIHJlbWVtYmVyIHRoZSBkZXRhaWxzLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcHJvYmFibHkgc3RhcnQgd2l0aCBpdHMgcHJpbWFyeSBwdXJwb3NlIGFuZCBjb250ZXh0LiBPa2F5LCB0aGlzIGhlbHBlciBpcyBhbG1vc3QgY2VydGFpbmx5IHVzZWQgd2l0aGluIHRoZSBOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdWJzeXN0ZW0sIHJpZ2h0PyBBbmQgdGhlIG5hbWUgc3Ryb25nbHkgc3VnZ2VzdHMgaXRzIHJvbGUgaXMgYWJvdXQgYXNzaWdubWVudCDigJMgc3BlY2lmaWNhbGx5LCB0cnlpbmcgdG8gYXNzaWduIHNvbWUgZGF0YSBvciBhdHRyaWJ1dGUsIG1heWJlIGEgZmxvdyBsYWJlbCwgYSBzZXNzaW9uIG9yIGEgbWFyayB0byBhIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkuIEl0IGhhcyBhIGxvdCBvZiBsb3ctbGV2ZWwgaW50cmljYWNpZXMsIHRoZXJlIG1pZ2h0IGJlIGNvbmN1cnJlbmN5IGNvbnNpZGVyYXRpb25zLlxuXG5JJ20gbWVudGFsbHkgcHJlcGFyaW5nIGZvciBhIGRlZXAgZGl2ZSBpbnRvIGl0cyBpbnRlcm5hbHMuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGhhbmRsZXMgcmFjZXMsIGF0b21pY2l0eSwgZXJyb3IgY29uZGl0aW9ucywgYW5kIHdoZXRoZXIgaXQgdXNlcyBhbnkgc3BlY2lhbCBsb2NraW5nIG1lY2hhbmlzbXMgb3IgYXRvbWljIG9wZXJhdGlvbnMuIEknbGwgbmVlZCB0byBkaXNzZWN0IGl0cyBhcmd1bWVudHMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2Ygd2hhdCBpdCBpcyB0cnlpbmcgdG8gYXNzaWduLCB3aGF0IGNvbmRpdGlvbnMgYXJlIGNoZWNrZWQsIGFuZCB3aGljaCBhcmUgdGhlIGNvcmUgYXNwZWN0cyB0aGF0IG1ha2VzIHRoZSBmdW5jdGlvbiBhIGhlbHBlci4gVGhpcyBpcyBvZnRlbiB3aGVyZSB0aGUgdHJpY2t5IGJpdHMgcmVzaWRlIOKAkyB0aGUgY29uZGl0aW9uYWwgYnJhbmNoZXMsIHRoZSBlZGdlIGNhc2VzLCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBpbmZyYXN0cnVjdHVyZS4gSSdtIGFzc3VtaW5nIHRoYXQgdGhpcyBpcyBhIGNyaXRpY2FsIHNlY3Rpb24gdGhhdCBuZWVkcyB0byBiZSBvcHRpbWl6ZWQgZm9yIHBlcmZvcm1hbmNlLlxuXG5JJ20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBgbmZfY3RgIHN0cnVjdHVyZSBhbmQgaXRzIGFzc29jaWF0ZWQgbWVtYmVycy4gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBBbmQgaG93IGRvZXMgaXQgcmVsYXRlIHRvIHRoZSBvdmVyYWxsIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3RhdGUgbWFjaGluZT8gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIGhlbHBlciBjb250cmlidXRlcyB0byB0aGUgb3ZlcmFsbCBOZXRmaWx0ZXIgYXJjaGl0ZWN0dXJlLiBUaW1lIHRvIGdldCBkb3duIGFuZCBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczNywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjA0OjI5LjA0MDg2NDk3NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MDpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9oZWxwZXJfZXh0X2FkZCk7XFxuIDE5MTpcXHRcXG4gMTkyOlxcdGludCBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IG5mX2Nvbm4gKnRtcGwsXFxuIDE5MzpcXHRcXHRcXHRcXHQgICAgICBnZnBfdCBmbGFncylcXG4gMTk0OlxcdHtcXG4gMTk1OlxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIgPSBOVUxMO1xcbiAxOTY6XFx0XFx0c3RydWN0IG5mX2Nvbm5faGVscCAqaGVscDtcXG4gMTk3OlxcdFxcbiAxOTg6XFx0XFx0LyogV2UgYWxyZWFkeSBnb3QgYSBoZWxwZXIgZXhwbGljaXRseSBhdHRhY2hlZCAoZS5nLiBuZnRfY3QpICovXFxuIDE5OTpcXHRcXHRpZiAodGVzdF9iaXQoSVBTX0hFTFBFUl9CSVQsIFxcdTAwMjZjdC1cXHUwMDNlc3RhdHVzKSlcXG4gMjAwOlxcdFxcdFxcdHJldHVybiAwO1xcbiAyMDE6XFx0XFxuIDIwMjpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCF0bXBsKSlcXG4gMjAzOlxcdFxcdFxcdHJldHVybiAwO1xcbiAyMDQ6XFx0XFxuIDIwNTpcXHRcXHRoZWxwID0gbmZjdF9oZWxwKHRtcGwpO1xcbiAyMDY6XFx0XFx0aWYgKGhlbHApXFxuIDIwNzpcXHRcXHRcXHRoZWxwZXIgPSByY3VfZGVyZWZlcmVuY2UoaGVscC1cXHUwMDNlaGVscGVyKTtcXG4gMjA4OlxcdFxcdGlmIChoZWxwZXIgXFx1MDAyNlxcdTAwMjYgaGVscGVyLVxcdTAwM2V0dXBsZS5kc3QucHJvdG9udW0gIT0gbmZfY3RfcHJvdG9udW0oY3QpKVxcbiAyMDk6XFx0XFx0XFx0aGVscGVyID0gTlVMTDtcXG4gMjEwOlxcdFxcbiAyMTE6XFx0XFx0aGVscCA9IG5mY3RfaGVscChjdCk7XFxuIDIxMjpcXHRcXG4gMjEzOlxcdFxcdGlmIChoZWxwZXIgPT0gTlVMTCkge1xcbiAyMTQ6XFx0XFx0XFx0aWYgKGhlbHApIHtcXG4gMjE1OlxcdFxcdFxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICp0bXAgPSByY3VfZGVyZWZlcmVuY2UoaGVscC1cXHUwMDNlaGVscGVyKTtcXG4gMjE2OlxcdFxcbiAyMTc6XFx0XFx0XFx0XFx0UkNVX0lOSVRfUE9JTlRFUihoZWxwLVxcdTAwM2VoZWxwZXIsIE5VTEwpO1xcbiAyMTg6XFx0XFx0XFx0XFx0aWYgKHRtcCBcXHUwMDI2XFx1MDAyNiByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnRtcC1cXHUwMDNlY3RfcmVmY250KSlcXG4gMjE5OlxcdFxcdFxcdFxcdFxcdGtmcmVlX3JjdSh0bXAsIHJjdSk7XFxuIDIyMDpcXHRcXHRcXHR9XFxuIDIyMTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjIyOlxcdFxcdH1cXG4gMjIzOlxcdFxcbiAyMjQ6XFx0XFx0aWYgKGhlbHAgPT0gTlVMTCkge1xcbiAyMjU6XFx0XFx0XFx0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBmbGFncyk7XFxuIDIyNjpcXHRcXHRcXHRpZiAoaGVscCA9PSBOVUxMKVxcbiAyMjc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDIyODpcXHRcXHR9IGVsc2Uge1xcbiAyMjk6XFx0XFx0XFx0LyogV2Ugb25seSBhbGxvdyBoZWxwZXIgcmUtYXNzaWdubWVudCBvZiB0aGUgc2FtZSBzb3J0IHNpbmNlXFxuIDIzMDpcXHRcXHRcXHQgKiB3ZSBjYW5ub3QgcmVhbGxvY2F0ZSB0aGUgaGVscGVyIGV4dGVuc2lvbiBhcmVhLlxcbiAyMzE6XFx0XFx0XFx0ICovXFxuIDIzMjpcXHRcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqdG1wID0gcmN1X2RlcmVmZXJlbmNlKGhlbHAtXFx1MDAzZWhlbHBlcik7XFxuIDIzMzpcXHRcXG4gMjM0OlxcdFxcdFxcdGlmICh0bXApIHtcXG4gMjM1OlxcdFxcdFxcdFxcdGlmICh0bXAtXFx1MDAzZWhlbHAgIT0gaGVscGVyLVxcdTAwM2VoZWxwKSB7XFxuIDIzNjpcXHRcXHRcXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKGhlbHAtXFx1MDAzZWhlbHBlciwgTlVMTCk7XFxuIDIzNzpcXHRcXHRcXHRcXHRcXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZ0bXAtXFx1MDAzZWN0X3JlZmNudCkpXFxuIDIzODpcXHRcXHRcXHRcXHRcXHRcXHRrZnJlZV9yY3UodG1wLCByY3UpO1xcbiAyMzk6XFx0XFx0XFx0XFx0fVxcbiAyNDA6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDI0MTpcXHRcXHRcXHR9XFxuIDI0MjpcXHRcXHR9XFxuIDI0MzpcXHRcXG4gMjQ0OlxcdFxcdGlmIChyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNmhlbHBlci1cXHUwMDNlY3RfcmVmY250KSlcXG4gMjQ1OlxcdFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihoZWxwLVxcdTAwM2VoZWxwZXIsIGhlbHBlcik7XFxuIDI0NjpcXHRcXG4gMjQ3OlxcdFxcdHJldHVybiAwO1xcbiAyNDg6XFx0fVxcbiAyNDk6XFx0RVhQT1JUX1NZTUJPTF9HUEwoX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjA0OjI5LjA0MDk1NDk1NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTAwMDIyNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBhIG5ldGZpbHRlciBDaGFuZ2UqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCBhIG1vZGlmaWNhdGlvbiB0byBgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcmAuLi4gaW50ZXJlc3RpbmcuXCIgSSBrbm93IHRoYXQgZnVuY3Rpb24gaXMgZXhwb3J0ZWQsIHdoaWNoIG1lYW5zIGl0J3MgcGFydCBvZiB0aGUgcHVibGljIEFQSSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSB0aG9yb3VnaGx5LiBNeSBuZXh0IHN0ZXAsIG9mIGNvdXJzZSwgaXMgdG8gZGV0ZXJtaW5lIHRoZSBjYWxsIHNpdGVzIGZvciBgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcmAuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyBjcml0aWNhbCBiZWZvcmUgSSBjYW4gYXNzZXNzIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIG1vZGlmaWNhdGlvbiBvbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIEknbGwgbmVlZCB0byB0cmFjZSB0aG9zZSBjYWxscyB0byBmdWxseSBncmFzcCB0aGUgcmFtaWZpY2F0aW9ucyBvZiB3aGF0ZXZlciBhbHRlcmF0aW9ucyBhcmUgcHJlc2VudCB3aXRoaW4gdGhpcyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA4OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MDQ6MzIuNDkwOTU5MTAzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5Njk0OTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jPTE3NTQ9aW5pdF9jb25udHJhY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0xODM1LVxcdGlmICghZXhwIFxcdTAwMjZcXHUwMDI2IHRtcGwpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jOjE4MzY6XFx0XFx0X19uZl9jdF90cnlfYXNzaWduX2hlbHBlcihjdCwgdG1wbCwgR0ZQX0FUT01JQyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTE4MzctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz0xOTA9RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfaGVscGVyX2V4dF9hZGQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTE5MS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzoxOTI6aW50IF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0xOTMtXFx0XFx0XFx0ICAgICAgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0yNDgtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjI0OTpFWFBPUlRfU1lNQk9MX0dQTChfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0yNTAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjA0OjMyLjU0MDY1OTc1MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTEwMTI2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgYGluaXRfY29ubnRyYWNrYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkndmUgaWRlbnRpZmllZCB0aGUgYGluaXRfY29ubnRyYWNrYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuY2AuIFRoaXMgaXMgYSBjb3JlIG5ldGZpbHRlciBmdW5jdGlvbiwgYW5kIGJhc2VkIG9uIHRoZSBjb250ZXh0LCBJIHRoaW5rIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBhZGRpbmcgdG8gdGhlIGZ1enppbmcgdGFyZ2V0IGxpc3QuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBjb250cm9sIGl0cyBjb21waWxhdGlvbi4gSSdtIHJlY2FsbGluZyB0aGF0IGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY2AgaXMgaW52b2x2ZWQsIGFuZCBJIHN1c3BlY3QgaXQncyBkZXBlbmRlbnQgb24gYENPTkZJR19ORl9DT05OVFJBQ0tgLiBMZXQncyBjb25maXJtIHRoYXQgYnkgY2hlY2tpbmcgdGhlIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gc2V0IHVwIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcyNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjA0OjM1Ljc1MTY3NTM3NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3MDU3MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY29ubnRyYWNrX2hlbHBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9Mz1uZXRmaWx0ZXItJChDT05GSUdfTkVURklMVEVSX05FVExJTkspICs9IG5mbmV0bGluay5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS00LVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTpuZl9jb25udHJhY2steVxcdDo9IG5mX2Nvbm50cmFja19jb3JlLm8gbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUubyBuZl9jb25udHJhY2tfZXhwZWN0Lm8gbmZfY29ubnRyYWNrX2hlbHBlci5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTYtXFx0XFx0ICAgbmZfY29ubnRyYWNrX3Byb3RvLm8gbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMubyBuZl9jb25udHJhY2tfcHJvdG9fdGNwLm8gbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MDQ6MzUuNzk2Mzg1NTI1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDg0NTI3NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25udHJhY2sgQ29uZmlndXJhdGlvbiBhbmQgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgQ09ORklHX05GX0NPTk5UUkFDS2AganVtcHMgb3V0IOKAkyB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUga2V5IHN5bWJvbHMsIGFuZCB0aGUgbW9zdCByZWxldmFudCBmdW5jdGlvbiBoZXJlIHNlZW1zIHRvIGJlIGBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyYC4gTm93LCBJIGluaXRpYWxseSBjb25zaWRlcmVkIGlmIGBpbml0X2Nvbm50cmFja2AgbWlnaHQgYWxzbyBiZSBhIGhvdC1wYXRoIGZ1bmN0aW9uLCBidXQgdGhlbiBJIHJlbWVtYmVyZWQgdGhhdCBpcyBjYWxsZWQgZm9yIGV2ZXJ5IG5ldyBjb25uZWN0aW9uLCBzbyBpdCBjbGVhcmx5ICppcyogYSBob3QtcGF0aCBmdW5jdGlvbi4gIEkgZG9uJ3QgdGhpbmsgdGhhdCBpcyB0aGUgb25lIGluIGZvY3VzIGluIHRoaXMgcGF0Y2guXG5cblRoZSBwYXRjaCBzZWVtcyB0byBiZSBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyYCwgc28gSSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIHVzZWQuIEFyZSB0aGVyZSBvdGhlciBjYWxsIHNpdGVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBMZXQgbWUgc2VlIHdoZXJlIGVsc2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxODksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MDQ6NDAuMDA0ODQwNzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTg5MDE5NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19uZl9jdF90cnlfYXNzaWduX2hlbHBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaD0xMjE9c3RydWN0IG5mX2Nvbm5faGVscCAqbmZfY3RfaGVscGVyX2V4dF9hZGQoc3RydWN0IG5mX2Nvbm4gKmN0LCBnZnBfdCBnZnApO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmgtMTIyLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmg6MTIzOmludCBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IG5mX2Nvbm4gKnRtcGwsXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaC0xMjQtXFx0XFx0XFx0ICAgICAgZ2ZwX3QgZmxhZ3MpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jPTE3NTQ9aW5pdF9jb25udHJhY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0xODM1LVxcdGlmICghZXhwIFxcdTAwMjZcXHUwMDI2IHRtcGwpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jOjE4MzY6XFx0XFx0X19uZl9jdF90cnlfYXNzaWduX2hlbHBlcihjdCwgdG1wbCwgR0ZQX0FUT01JQyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTE4MzctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz0xOTA9RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfaGVscGVyX2V4dF9hZGQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTE5MS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzoxOTI6aW50IF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0xOTMtXFx0XFx0XFx0ICAgICAgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0yNDgtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjI0OTpFWFBPUlRfU1lNQk9MX0dQTChfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0yNTAtXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9NzI0PXN0YXRpYyBpbnQgX19vdnNfY3RfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtNzk4LVxcdFxcdCAgICBpbmZvLVxcdTAwM2VoZWxwZXIgXFx1MDAyNlxcdTAwMjYgIW5mY3RfaGVscChjdCkpIHtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6Nzk5OlxcdFxcdFxcdGludCBlcnIgPSBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKGN0LCBpbmZvLVxcdTAwM2VjdCxcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtODAwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBHRlBfQVRPTUlDKTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz05Njg9VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9jdF9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDYxLVxcdGlmICghbmZfY3RfaXNfY29uZmlybWVkKGN0KSBcXHUwMDI2XFx1MDAyNiBjb21taXQgXFx1MDAyNlxcdTAwMjYgcC1cXHUwMDNlaGVscGVyIFxcdTAwMjZcXHUwMDI2ICFuZmN0X2hlbHAoY3QpKSB7XFxubmV0L3NjaGVkL2FjdF9jdC5jOjEwNjI6XFx0XFx0ZXJyID0gX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcihjdCwgcC1cXHUwMDNldG1wbCwgR0ZQX0FUT01JQyk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTEwNjMtXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MDQ6NDEuNTYzNzQ3NTU0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5OTMwNjg5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgYF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlLiBJdCBsb29rcyBsaWtlIGBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRvIGZvY3VzIG9uLiBJIHNlZSBpdCBtZW50aW9uZWQgaW4gYG5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY2AgKGBfX292c19jdF9sb29rdXBgKSBhbmQgYWxzbyBpbiBgbmV0L3NjaGVkL2FjdF9jdC5jYCAoYHRjZl9jdF9hY3RgKSwgd2hpY2ggcmVpbmZvcmNlcyBpdHMgaW1wb3J0YW5jZS4gRnJvbSB0aGUgd2F5IHRoaW5ncyBsb29rLCBpdCBhcHBlYXJzIHRvIGJlIGEgY29yZSBOZXRmaWx0ZXIgZnVuY3Rpb24sIGJ1dCBpdCdzIG5vdCBvbiB0aGUgYWJzb2x1dGUgaG90dGVzdCBwYXRoLiBJdCdzIG9ubHkgaW52b2tlZCB3aGVuIGEgaGVscGVyIGlzIGFjdHVhbGx5IGFzc2lnbmVkLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGVyZSdzIGEgaGVscGVyIGluIHRoZSBgdG1wbGAgc3RydWN0dXJlIGR1cmluZyBgaW5pdF9jb25udHJhY2tgLCB3aGVuIGBpbmZvLVx1MDAzZWhlbHBlcmAgaXMgdXNlZCB3aXRoaW4gT1ZTLCBvciB3aGVuIGBwLVx1MDAzZWhlbHBlcmAgaXMgdXNlZCBpbiBUQy4gU28sIHN0aWxsIGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uLlxuXG5MZXQgbWUgdGFrZSBhbm90aGVyIGxvb2sgdG8gbWFrZSBzdXJlLiBPa2F5LCB0aGUgcGF0Y2ggb25seSBtb2RpZmllcyBgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcmAsIHNvIGl0J3MgdGhlICpvbmx5KiBzeW1ib2wgdG8gZm9jdXMgb24uXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgY29uZmlnLiBgTkZfQ09OTlRSQUNLYCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgY29uZmlnIHZhcmlhYmxlIGhlcmUuIEknbSBnb2luZyB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM2OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDowNDo0Ni41NTY4MTkwMzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjQ5NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DT05OVFJBQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03ND1jb25maWcgTkVURklMVEVSX05FVExJTktfT1NGXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjgyOmNvbmZpZyBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTExPWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cXHRib29sICAnQ29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX0NPTk5UUkFDS19TRUNNQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyBzZWN1cml0eSBtYXJrIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzY6Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDg6Y29uZmlnIE5GX0NPTk5UUkFDS19QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5LVxcdGJvb2wgXFxcIlN1cHBseSBDVCBsaXN0IGluIHByb2NmcyAoT0JTT0xFVEUpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU3OmNvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1OC1cXHRib29sIFxcXCJDb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50c1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FU1RBTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVzdGFtcGluZydcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE4ODpjb25maWcgTkZfQ09OTlRSQUNLX0xBQkVMU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODktXFx0Ym9vbCBcXFwiQ29ubmVjdGlvbiB0cmFja2luZyBsYWJlbHNcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxOTU6Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVxcdGJvb2xcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTMtXFx0dHJpc3RhdGUgXFxcIkFtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIyNzpjb25maWcgTkZfQ09OTlRSQUNLX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXFx0dHJpc3RhdGUgXFxcIkZUUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzOC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjM5OmNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXFx0dHJpc3RhdGUgXFxcIkguMzIzIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNTg6Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU5LVxcdHRyaXN0YXRlIFxcXCJJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3NDpjb25maWcgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzUtXFx0dHJpc3RhdGVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19ORVRCSU9TX05TXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cXHR0cmlzdGF0ZSBcXFwiTmV0QklPUyBuYW1lIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5Njpjb25maWcgTkZfQ09OTlRSQUNLX1NOTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk3LVxcdHRyaXN0YXRlIFxcXCJTTk1QIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjMxMTpjb25maWcgTkZfQ09OTlRSQUNLX1BQVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEyLVxcdHRyaXN0YXRlIFxcXCJQUHRQIHByb3RvY29sIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMyOS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzMwOmNvbmZpZyBORl9DT05OVFJBQ0tfU0FORVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMzEtXFx0dHJpc3RhdGUgXFxcIlNBTkUgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDQtXFx0dHJpc3RhdGUgXFxcIlNJUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzU1OmNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTYtXFx0dHJpc3RhdGUgXFxcIlRGVFAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MDQ6NDYuNjAyNDc1MzU0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDU0Njg4ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29ubmVjdGlvbiBUcmFja2luZyBDb251bmRydW0qKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGp1c3QgZW5hYmxpbmcgYE5GX0NPTk5UUkFDS2Agc2hvdWxkIGJlIHN1ZmZpY2llbnQuIEJ1dCB0aGVuIEkgcmVtZW1iZXJlZCwgdGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIGFzc2lnbmluZyBhIGhlbHBlciwgcmlnaHQ/IFNvLCBwZXJoYXBzIHdlIG5lZWQgdG8gYmUgbW9yZSBhZ2dyZXNzaXZlIHdpdGggaGVscGVyIGVuYWJsZW1lbnQuIE1heWJlIHRoYXQgbWVhbnMgZmxpcHBpbmcgb24gc29tZSBvZiB0aGUgbW9yZSBzcGVjaWZpYyBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgdG8gZW5zdXJlIGB0bXBsYCwgb3Igd2hhdGV2ZXIgbW9kdWxlIGlzIHRoZSB0YXJnZXQsIGNhbiBzdWNjZXNzZnVsbHkgbGV2ZXJhZ2UgYSBoZWxwZXIuIEknbSB0aGlua2luZyB0aGluZ3MgbGlrZSBgTkZfQ09OTlRSQUNLX0ZUUGAsIGBORl9DT05OVFJBQ0tfU0lQYCwgYW5kIHRoZSBsaWtlLiBTdGlsbCwgYE5GX0NPTk5UUkFDS2AgaXMgdGhlIGZvdW5kYXRpb24uIEl0J3MgdGhlIGJpZyBvbmUuIEJlZm9yZSBJIGdvIHRvbyBmYXIgZG93biB0aGlzIHJvYWQsIEkgc2hvdWxkIHZlcmlmeSBpZiBgTkZfQ09OTlRSQUNLYCBpdHNlbGYgcmVsaWVzIG9uIGFueSBvdGhlciBtb2R1bGVzIG9yIGNvbmZpZ3VyYXRpb25zLiBOZWVkIHRvIGNoZWNrIGl0cyBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMzUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDowNDo1MC40NDc5NDc4N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI3OTYyNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0NPTk5UUkFDS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTc0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0ZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODI6Y29uZmlnIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04My1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMTE9Y29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjExNDpjb25maWcgTkZfQ09OTlRSQUNLX01BUktcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTE1LVxcdGJvb2wgICdDb25uZWN0aW9uIG1hcmsgdHJhY2tpbmcgc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEyMzpjb25maWcgTkZfQ09OTlRSQUNLX1NFQ01BUktcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTI0LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHNlY3VyaXR5IG1hcmsgc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzNjpjb25maWcgTkZfQ09OTlRSQUNLX1pPTkVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNy1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyB6b25lcydcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE0ODpjb25maWcgTkZfQ09OTlRSQUNLX1BST0NGU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDktXFx0Ym9vbCBcXFwiU3VwcGx5IENUIGxpc3QgaW4gcHJvY2ZzIChPQlNPTEVURSlcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNTc6Y29uZmlnIE5GX0NPTk5UUkFDS19FVkVOVFNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU4LVxcdGJvb2wgXFxcIkNvbm5lY3Rpb24gdHJhY2tpbmcgZXZlbnRzXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTY3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRU9VVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjgtXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE3Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVTVEFNUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzgtXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZXN0YW1waW5nJ1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE4Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTg4OmNvbmZpZyBORl9DT05OVFJBQ0tfTEFCRUxTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE4OS1cXHRib29sIFxcXCJDb25uZWN0aW9uIHRyYWNraW5nIGxhYmVsc1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE5NTpjb25maWcgTkZfQ09OTlRSQUNLX09WU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTYtXFx0Ym9vbFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTIwMT1jb25maWcgTkZfQ1RfUFJPVE9fU0NUUFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjEyOmNvbmZpZyBORl9DT05OVFJBQ0tfQU1BTkRBXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMy1cXHR0cmlzdGF0ZSBcXFwiQW1hbmRhIGJhY2t1cCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyNi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjI3OmNvbmZpZyBORl9DT05OVFJBQ0tfRlRQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyOC1cXHR0cmlzdGF0ZSBcXFwiRlRQIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjM4LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMzk6Y29uZmlnIE5GX0NPTk5UUkFDS19IMzIzXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI0MC1cXHR0cmlzdGF0ZSBcXFwiSC4zMjMgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI1ODpjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTktXFx0dHJpc3RhdGUgXFxcIklSQyBEQ0MgcHJvdG9jb2wgc3VwcG9ydCAob2Jzb2xldGUpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3My1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc0OmNvbmZpZyBORl9DT05OVFJBQ0tfQlJPQURDQVNUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3NS1cXHR0cmlzdGF0ZVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3Nzpjb25maWcgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc4LVxcdHRyaXN0YXRlIFxcXCJOZXRCSU9TIG5hbWUgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5NS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjk2OmNvbmZpZyBORl9DT05OVFJBQ0tfU05NUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTctXFx0dHJpc3RhdGUgXFxcIlNOTVAgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzExOmNvbmZpZyBORl9DT05OVFJBQ0tfUFBUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTItXFx0dHJpc3RhdGUgXFxcIlBQdFAgcHJvdG9jb2wgc3VwcG9ydCAoZGVwcmVjYXRlZClcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzI5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMzA6Y29uZmlnIE5GX0NPTk5UUkFDS19TQU5FXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMzMS1cXHR0cmlzdGF0ZSBcXFwiU0FORSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0Mi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzQzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0lQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0NC1cXHR0cmlzdGF0ZSBcXFwiU0lQIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNTU6Y29uZmlnIE5GX0NPTk5UUkFDS19URlRQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1Ni1cXHR0cmlzdGF0ZSBcXFwiVEZUUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDowNDo1MC40OTA3NDk1MjlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzMzIzNDk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIERlcGVuZGVuY2llczogQSBLY29uZmlnIERpdmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkZfQ09OTlRSQUNLYCB3aXRoaW4gdGhlIGtlcm5lbCdzIG5ldGZpbHRlciBzdWJzeXN0ZW0uIFRoZSBtb3N0IGRpcmVjdCBhcHByb2FjaCwgYXMgYWx3YXlzLCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgcHVsbGluZyB1cCB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ2xsIGZvY3VzIG9uIHRoZSBpbml0aWFsIGxpbmVzOyB1c3VhbGx5LCB0aGUgZWFybHkgZGVmaW5pdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhcmUgbGFpZCBvdXQgdGhlcmUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIG1vZHVsZXMgYXJlIHByZXJlcXVpc2l0ZXMgZm9yIGBORl9DT05OVFJBQ0tgIHRvIGV2ZW4gYmUgY29uc2lkZXJlZCBmb3IgaW5jbHVzaW9uLiBObyBwb2ludCBpbiB3YWRpbmcgdGhyb3VnaCB0aGUgd2hvbGUgdGhpbmcgaW5pdGlhbGx5OyBsZXQncyBnZXQgdGhlIGdpc3QgYW5kIGJ1aWxkIGZyb20gdGhlcmUuIFRoaXMgc2hvdWxkIHRlbGwgbWUgcXVpY2tseSB3aGV0aGVyIEknbSBsb29raW5nIGF0IGEgc2ltcGxlIGRlcGVuZGVuY3kgdHJlZSBvciBhIG1vcmUgY29tcGxleCB3ZWIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MjIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDowNDo1My44MjM5ODc2OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdFxcdCAgZm9yIHBhc3NpdmUgT1MgZmluZ2VycHJpbnQgdmlhIE5GTkVUTElOSy5cXG4gIDgxOlxcdFxcbiAgODI6XFx0Y29uZmlnIE5GX0NPTk5UUkFDS1xcbiAgODM6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcXFwiXFxuICA4NDpcXHRcXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cXG4gIDg1OlxcdFxcdHNlbGVjdCBORl9ERUZSQUdfSVBWNFxcbiAgODY6XFx0XFx0c2VsZWN0IE5GX0RFRlJBR19JUFY2IGlmIElQVjYgIT0gblxcbiAgODc6XFx0XFx0aGVscFxcbiAgODg6XFx0XFx0ICBDb25uZWN0aW9uIHRyYWNraW5nIGtlZXBzIGEgcmVjb3JkIG9mIHdoYXQgcGFja2V0cyBoYXZlIHBhc3NlZFxcbiAgODk6XFx0XFx0ICB0aHJvdWdoIHlvdXIgbWFjaGluZSwgaW4gb3JkZXIgdG8gZmlndXJlIG91dCBob3cgdGhleSBhcmUgcmVsYXRlZFxcbiAgOTA6XFx0XFx0ICBpbnRvIGNvbm5lY3Rpb25zLlxcbiAgOTE6XFx0XFxuICA5MjpcXHRcXHQgIFRoaXMgaXMgcmVxdWlyZWQgdG8gZG8gTWFzcXVlcmFkaW5nIG9yIG90aGVyIGtpbmRzIG9mIE5ldHdvcmtcXG4gIDkzOlxcdFxcdCAgQWRkcmVzcyBUcmFuc2xhdGlvbi4gIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gZW5oYW5jZSBwYWNrZXRcXG4gIDk0OlxcdFxcdCAgZmlsdGVyaW5nIChzZWUgYENvbm5lY3Rpb24gc3RhdGUgbWF0Y2ggc3VwcG9ydCcgYmVsb3cpLlxcbiAgOTU6XFx0XFxuICA5NjpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgOTc6XFx0XFxuICA5ODpcXHRjb25maWcgTkZfTE9HX1NZU0xPR1xcbiAgOTk6XFx0XFx0dHJpc3RhdGUgXFxcIlN5c2xvZyBwYWNrZXQgbG9nZ2luZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MDQ6NTMuODI0MTM2MDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAwNDQ4Njg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEltcGFjdCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBORl9DT05OVFJBQ0tgIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbi4gVGhlcmUncyBubyBkZXBlbmRlbmN5IHNwZWNpZmllZCwgc28gaXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBkaXJlY3QgYXBwcm9hY2guIEknbGwgaW5jbHVkZSBgTkVURklMVEVSYCBhcyB3ZWxsLCBqdXN0IHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUsIGV2ZW4gdGhvdWdoIGl0J3MgYSBtZW51Y29uZmlnIGl0ZW0gYW5kIHByb2JhYmx5IGFscmVhZHkgaW1wbGllZC4gQnV0IHJlYWxpc3RpY2FsbHksIGBORl9DT05OVFJBQ0tgIHNob3VsZCBiZSB0aGUgY29yZSByZXF1aXJlbWVudCBoZXJlLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhlIHNpZ25pZmljYW5jZSBvZiBgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcmAuIElzIGl0IHN0YXRpYywgb3IgaW5saW5lPyBIbW0sIGxvb2tzIGxpa2UgaXQncyBhIGRlY2xhcmVkIGFzIGBpbnQgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBuZl9jb25uICp0bXBsLCBnZnBfdCBmbGFncylgLiBBbHJpZ2h0LCBpdCdzIGV4cG9ydGVkLiBUaGF0J3MgZ29vZDsgdGhhdCBjb25maXJtcyBpdCBhcyBhIHNpZ25pZmljYW50IGZvY3VzIHN5bWJvbCBmb3IgdGhpcyBjaGFuZ2UuXG5cbk15IHJlYXNvbmluZyBoZXJlIGlzIHRoYXQgdGhlIHBhdGNoIGlzIGRpcmVjdGx5IG1vZGlmeWluZyB0aGlzIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNgLiBTcGVjaWZpY2FsbHksIGl0J3MgaW50cm9kdWNpbmcgYSBjaGVjayBmb3IgdGhlIHByb3RvY29sIG51bWJlciB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIGFzc2lnbm1lbnQgbG9naWMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb3JlIE5ldGZpbHRlciBtb2RpZmljYXRpb24gZGVhbGluZyB3aXRoIGhvdyBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgYXJlIGFzc2lnbmVkIHRvIGNvbm5lY3Rpb25zLiBJdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIOKAkyBuZXR3b3JrIHRyYWZmaWMgY2FuIHRyaWdnZXIgdGhpcyBjb2RlIHBhdGggaWYgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycyBhcmUgaW4gdXNlLlxuXG5TbywgdGhlIGZvY3VzIHN5bWJvbCBpcyBkZWZpbml0ZWx5IGBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyYCwgYW5kIHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9uLCBhcyBJIG9yaWdpbmFsbHkgdGhvdWdodCwgaXMganVzdCBgTkZfQ09OTlRSQUNLYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNzUsIk91dHB1dFRva2VucyI6MTM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MDU6MDAuODI4NjI1OTAyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA4OTg1NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcmAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jYCB0byBhZGQgYSBjaGVjayBmb3IgdGhlIHByb3RvY29sIG51bWJlciBvZiB0aGUgaGVscGVyIGFuZCB0aGUgY29ubmVjdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgd2hlbiBhc3NpZ25pbmcgYSBoZWxwZXIgdG8gYSBjb25uZWN0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IG5ldHdvcmsgdHJhZmZpYyB3aGVuIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycyBhcmUgdXNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9DT05OVFJBQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJgIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY2AgdG8gYWRkIGEgY2hlY2sgZm9yIHRoZSBwcm90b2NvbCBudW1iZXIgb2YgdGhlIGhlbHBlciBhbmQgdGhlIGNvbm5lY3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IHdoZW4gYXNzaWduaW5nIGEgaGVscGVyIHRvIGEgY29ubmVjdGlvbi4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSBuZXR3b3JrIHRyYWZmaWMgd2hlbiBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgYXJlIHVzZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjA1OjAwLjkwOTUzMjI3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk1MjkxMDg3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjA1OjAwLjkxMDA4NDg1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExOTUyMzU0ODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgdGhlIHByb3RvY29sIG51bWJlciBvZiBhIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIG1hdGNoZXMgdGhlIHByb3RvY29sIG51bWJlciBvZiB0aGUgY29ubmVjdGlvbiBpdCBpcyBiZWluZyBhc3NpZ25lZCB0by4gVGhpcyBwcmV2ZW50cyBhIGhlbHBlciBkZXNpZ25lZCBmb3Igb25lIHByb3RvY29sIGZyb20gYmVpbmcgaW5jb3JyZWN0bHkgYXNzaWduZWQgdG8gYSBjb25uZWN0aW9uIG9mIGFub3RoZXIgcHJvdG9jb2wuIFN1Y2ggYSBtaXNtYXRjaCBjb3VsZCBsZWFkIHRvIHR5cGUgY29uZnVzaW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgd2hlbiB0aGUgaGVscGVyIGF0dGVtcHRzIHRvIHBhcnNlIHBhY2tldHMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMTk5ODMwZDAxYzdiZjU4Y2RkOTczMzQ1ZDFhNGJkYTg3ZWVjMDg2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDA6MDQ6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXG5pbmRleCA1MDA1MDliMTc2NjNlLi40MTlhZjZmNzZiZDI3IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXG5AQCAtMjA1LDYgKzIwNSw4IEBAIGludCBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IG5mX2Nvbm4gKnRtcGwsXG4gXHRoZWxwID0gbmZjdF9oZWxwKHRtcGwpO1xuIFx0aWYgKGhlbHApXG4gXHRcdGhlbHBlciA9IHJjdV9kZXJlZmVyZW5jZShoZWxwLVx1MDAzZWhlbHBlcik7XG4rXHRpZiAoaGVscGVyIFx1MDAyNlx1MDAyNiBoZWxwZXItXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtICE9IG5mX2N0X3Byb3RvbnVtKGN0KSlcbitcdFx0aGVscGVyID0gTlVMTDtcbiBcbiBcdGhlbHAgPSBuZmN0X2hlbHAoY3QpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MDU6MDAuOTEwMDg2MDNaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcwODMxMDk2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXRmaWx0ZXIgQ29ubnRyYWNrIEhlbHBlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyYC4gVGhlIGNydWNpYWwgYWRkaXRpb24gaXMgdGhhdCBwcm90b2NvbCBudW1iZXIgY2hlY2suIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBwcmV2ZW50aW5nIGEgaGVscGVyIGZyb20gYmVpbmcgYXNzaWduZWQgdG8gYSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJ5IGlmIHRoZSBoZWxwZXIncyBleHBlY3RlZCBwcm90b2NvbCAoYGhlbHBlci1cdTAwM2V0dXBsZS5kc3QucHJvdG9udW1gKSBkb2Vzbid0IG1hdGNoIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24ncyBwcm90b2NvbCAoYG5mX2N0X3Byb3RvbnVtKGN0KWApLlxuXG5UaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBidWcgZml4LiBUaGUgc2NlbmFyaW8gdGhleSdyZSBhdm9pZGluZyBpcyBwcmV0dHkgY2xlYXIgdG8gbWU6IGEgaGVscGVyIGRlc2lnbmVkIGZvciwgc2F5LCBUQ1AgY29ubmVjdGlvbnMgZ2V0dGluZyBpbmFkdmVydGVudGx5IGFzc2lnbmVkIHRvIGEgVURQIGNvbm5lY3Rpb24gb3IgdmljZSB2ZXJzYS4gVGhlIGltcGxpY2F0aW9ucyBhcmUgY29uY2VybmluZyDigJMgdGhpcyBjb3VsZCBlYXNpbHkgbGVhZCB0byBhIHJhbmdlIG9mIG5hc3R5IGlzc3VlcywgbGlrZSBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcywgc29tZSBraW5kIG9mIHR5cGUgY29uZnVzaW9uIGlmIHRoZSBoZWxwZXIgYXR0ZW1wdHMgdG8gaW50ZXJwcmV0IHBhY2tldHMgdXNpbmcgdGhlIHdyb25nIHByb3RvY29sIHNlbWFudGljcy4gSSBkb24ndCB0aGluayB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyB0aGUgZGlyZWN0IHByb2JsZW0sIGFsdGhvdWdoIHRoYXQga2luZCBvZiBidWcgKmNvdWxkKiBhcmlzZSBmcm9tIHRoaXMga2luZCBvZiBtaXMtYXNzaWdubWVudC4gVGhpcyBpcyBhIGNsYXNzaWMgbG9naWMgZXJyb3IsIGEgdHlwZSBjb25mdXNpb24gaXNzdWUuIEknbSBnb2luZyB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIGBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyYCB0byBzZWUgd2hhdCBlbHNlIHRoZXkncmUgZG9pbmcgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDowNTowNi42MTgzOTkxOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTU6XFx0XFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlciA9IE5VTEw7XFxuIDE5NjpcXHRcXHRzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwO1xcbiAxOTc6XFx0XFxuIDE5ODpcXHRcXHQvKiBXZSBhbHJlYWR5IGdvdCBhIGhlbHBlciBleHBsaWNpdGx5IGF0dGFjaGVkIChlLmcuIG5mdF9jdCkgKi9cXG4gMTk5OlxcdFxcdGlmICh0ZXN0X2JpdChJUFNfSEVMUEVSX0JJVCwgXFx1MDAyNmN0LVxcdTAwM2VzdGF0dXMpKVxcbiAyMDA6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDIwMTpcXHRcXG4gMjAyOlxcdFxcdGlmIChXQVJOX09OX09OQ0UoIXRtcGwpKVxcbiAyMDM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDIwNDpcXHRcXG4gMjA1OlxcdFxcdGhlbHAgPSBuZmN0X2hlbHAodG1wbCk7XFxuIDIwNjpcXHRcXHRpZiAoaGVscClcXG4gMjA3OlxcdFxcdFxcdGhlbHBlciA9IHJjdV9kZXJlZmVyZW5jZShoZWxwLVxcdTAwM2VoZWxwZXIpO1xcbiAyMDg6XFx0XFx0aWYgKGhlbHBlciBcXHUwMDI2XFx1MDAyNiBoZWxwZXItXFx1MDAzZXR1cGxlLmRzdC5wcm90b251bSAhPSBuZl9jdF9wcm90b251bShjdCkpXFxuIDIwOTpcXHRcXHRcXHRoZWxwZXIgPSBOVUxMO1xcbiAyMTA6XFx0XFxuIDIxMTpcXHRcXHRoZWxwID0gbmZjdF9oZWxwKGN0KTtcXG4gMjEyOlxcdFxcbiAyMTM6XFx0XFx0aWYgKGhlbHBlciA9PSBOVUxMKSB7XFxuIDIxNDpcXHRcXHRcXHRpZiAoaGVscCkge1xcbiAyMTU6XFx0XFx0XFx0XFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnRtcCA9IHJjdV9kZXJlZmVyZW5jZShoZWxwLVxcdTAwM2VoZWxwZXIpO1xcbiAyMTY6XFx0XFxuIDIxNzpcXHRcXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKGhlbHAtXFx1MDAzZWhlbHBlciwgTlVMTCk7XFxuIDIxODpcXHRcXHRcXHRcXHRpZiAodG1wIFxcdTAwMjZcXHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2dG1wLVxcdTAwM2VjdF9yZWZjbnQpKVxcbiAyMTk6XFx0XFx0XFx0XFx0XFx0a2ZyZWVfcmN1KHRtcCwgcmN1KTtcXG4gMjIwOlxcdFxcdFxcdH1cXG4gMjIxOlxcdFxcdFxcdHJldHVybiAwO1xcbiAyMjI6XFx0XFx0fVxcbiAyMjM6XFx0XFxuIDIyNDpcXHRcXHRpZiAoaGVscCA9PSBOVUxMKSB7XFxuIDIyNTpcXHRcXHRcXHRoZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIGZsYWdzKTtcXG4gMjI2OlxcdFxcdFxcdGlmIChoZWxwID09IE5VTEwpXFxuIDIyNzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjI4OlxcdFxcdH0gZWxzZSB7XFxuIDIyOTpcXHRcXHRcXHQvKiBXZSBvbmx5IGFsbG93IGhlbHBlciByZS1hc3NpZ25tZW50IG9mIHRoZSBzYW1lIHNvcnQgc2luY2VcXG4gMjMwOlxcdFxcdFxcdCAqIHdlIGNhbm5vdCByZWFsbG9jYXRlIHRoZSBoZWxwZXIgZXh0ZW5zaW9uIGFyZWEuXFxuIDIzMTpcXHRcXHRcXHQgKi9cXG4gMjMyOlxcdFxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICp0bXAgPSByY3VfZGVyZWZlcmVuY2UoaGVscC1cXHUwMDNlaGVscGVyKTtcXG4gMjMzOlxcdFxcbiAyMzQ6XFx0XFx0XFx0aWYgKHRtcCkge1xcbiAyMzU6XFx0XFx0XFx0XFx0aWYgKHRtcC1cXHUwMDNlaGVscCAhPSBoZWxwZXItXFx1MDAzZWhlbHApIHtcXG4gMjM2OlxcdFxcdFxcdFxcdFxcdFJDVV9JTklUX1BPSU5URVIoaGVscC1cXHUwMDNlaGVscGVyLCBOVUxMKTtcXG4gMjM3OlxcdFxcdFxcdFxcdFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnRtcC1cXHUwMDNlY3RfcmVmY250KSlcXG4gMjM4OlxcdFxcdFxcdFxcdFxcdFxcdGtmcmVlX3JjdSh0bXAsIHJjdSk7XFxuIDIzOTpcXHRcXHRcXHRcXHR9XFxuIDI0MDpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjQxOlxcdFxcdFxcdH1cXG4gMjQyOlxcdFxcdH1cXG4gMjQzOlxcdFxcbiAyNDQ6XFx0XFx0aWYgKHJlZmNvdW50X2luY19ub3RfemVybyhcXHUwMDI2aGVscGVyLVxcdTAwM2VjdF9yZWZjbnQpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDowNTowNi42MTg0NzAwOVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjQzOTQ4NzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSGVscGVyIFByb3RvY29sIENoZWNrKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgcHJldmVudGluZyBhIGhlbHBlciBmdW5jdGlvbiBmcm9tIGdldHRpbmcgYXNzaWduZWQgdG8gYSBjb25uZWN0aW9uIHdpdGggYSBtaXNtYXRjaGVkIHByb3RvY29sLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJBaCwgY2xhc3NpYyBsb2dpYyBidWcgdGVycml0b3J5LlwiIElmIHRoZSBoZWxwZXIncyBwcm90b2NvbCBkb2Vzbid0IGFsaWduIHdpdGggdGhlIGNvbm5lY3Rpb24ncywgdGhpbmdzIGNhbiBnbyBzaWRld2F5cyAqZmFzdCogZHVyaW5nIHBhY2tldCBwYXJzaW5nLiBXZSdyZSBwb3RlbnRpYWxseSBsb29raW5nIGF0IHR5cGUgY29uZnVzaW9uLCBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcyDigJMgdGhlIHVzdWFsIHN1c3BlY3RzLiBUaGFua2Z1bGx5LCB0aGVzZSBhcmUgZ2VuZXJhbGx5IHRoZSBraW5kcyBvZiBpc3N1ZXMgdGhhdCBLQVNBTiBhbmQgdGhvc2Ugb3RoZXIgbWVtb3J5IHNhZmV0eSB0b29scyBhcmUgYnVpbHQgdG8gY2F0Y2ggcHJldHR5IHJlbGlhYmx5LlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6ICp3aGF0IGtpbmQgb2YgZnV6emluZyBzaG91bGQgd2UgZG8/KiBSZWFkaW5nIG9uLCBpdCBzZWVtcyB0aGVyZSdzIG5vIGV2aWRlbmNlIGhlcmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCB3aGljaCBhcmUgdGhlIG1haW4gdGFyZ2V0cyBmb3IgS01TQU4uIFRoZSBjb3JlIHByb2JsZW0gdGhpcyBwYXRjaCBhZGRyZXNzZXMgc2VlbXMgdG8gYmUgYSBsb2dpYyBlcnJvciB0aGF0IHBvdGVudGlhbGx5IGxlYWRzIHRvIG1lbW9yeSBjb3JydXB0aW9uIHRocm91Z2ggaW1wcm9wZXIgcGFyc2luZyBhbmQgdHlwZSBjb25mdXNpb24gd2hlbiBpbmNvcnJlY3QgZnVuY3Rpb25zIG9wZXJhdGUgb24gbWlzbWF0Y2hlZCBkYXRhLiBUaGVyZWZvcmUsIEkgZG9uJ3Qgc2VlIGEgY29tcGVsbGluZyByZWFzb24gdG8gZGVkaWNhdGUgYSBmdXp6aW5nIHNlc3Npb24gdG8gS01TQU4uIFN0YW5kYXJkIGZ1enppbmcgYW5kIGV4aXN0aW5nIG1lbW9yeSBzYWZldHkgdG9vbHMgc2hvdWxkIHN1ZmZpY2UgZm9yIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMjYsIk91dHB1dFRva2VucyI6MTUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MDU6MTIuODYyNDIxNDE1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgdGhlIHByb3RvY29sIG51bWJlciBvZiBhIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIG1hdGNoZXMgdGhlIHByb3RvY29sIG51bWJlciBvZiB0aGUgY29ubmVjdGlvbiBpdCBpcyBiZWluZyBhc3NpZ25lZCB0by4gVGhpcyBwcmV2ZW50cyBhIGhlbHBlciBkZXNpZ25lZCBmb3Igb25lIHByb3RvY29sIGZyb20gYmVpbmcgaW5jb3JyZWN0bHkgYXNzaWduZWQgdG8gYSBjb25uZWN0aW9uIG9mIGFub3RoZXIgcHJvdG9jb2wuIFN1Y2ggYSBtaXNtYXRjaCBjb3VsZCBsZWFkIHRvIHR5cGUgY29uZnVzaW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgd2hlbiB0aGUgaGVscGVyIGF0dGVtcHRzIHRvIHBhcnNlIHBhY2tldHMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgdGhlIHByb3RvY29sIG51bWJlciBvZiBhIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIG1hdGNoZXMgdGhlIHByb3RvY29sIG51bWJlciBvZiB0aGUgY29ubmVjdGlvbiBpdCBpcyBiZWluZyBhc3NpZ25lZCB0by4gVGhpcyBwcmV2ZW50cyBhIGhlbHBlciBkZXNpZ25lZCBmb3Igb25lIHByb3RvY29sIGZyb20gYmVpbmcgaW5jb3JyZWN0bHkgYXNzaWduZWQgdG8gYSBjb25uZWN0aW9uIG9mIGFub3RoZXIgcHJvdG9jb2wuIFN1Y2ggYSBtaXNtYXRjaCBjb3VsZCBsZWFkIHRvIHR5cGUgY29uZnVzaW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgd2hlbiB0aGUgaGVscGVyIGF0dGVtcHRzIHRvIHBhcnNlIHBhY2tldHMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow6mf59[1] Phase: Succeeded StartedAt: 2026-08-11 00:05:24 +0000 UTC FinishedAt: 2026-08-11 00:05:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mf59[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-11 00:05:24 +0000 UTC FinishedAt: 2026-08-11 00:05:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mf59[2] Phase: Succeeded StartedAt: 2026-08-11 00:05:24 +0000 UTC FinishedAt: 2026-08-11 03:47:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-11 00:05:24 +0000 UTC FinishedAt: 2026-08-11 03:47:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-11 00:05:24 +0000 UTC FinishedAt: 2026-08-11 00:05:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-11 00:05:24 +0000 UTC FinishedAt: 2026-08-11 00:05:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.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-workflow6mf59/series-workflow6mf59-convert-artifact-3508697687/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-11 00:05:34 +0000 UTC FinishedAt: 2026-08-11 00:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-11 00:05:34 +0000 UTC FinishedAt: 2026-08-11 00:21:51 +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:*e0ddad90-e3ff-4fc8-aa1d-42760539dec7,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-workflow6mf59/series-workflow6mf59-convert-artifact-3508697687/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": "663fd2a5-e494-41f9-90c7-16320715fca3", "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-workflow6mf59/series-workflow6mf59-build-action-393935533/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-11 00:05:34 +0000 UTC FinishedAt: 2026-08-11 00:21:41 +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:*e0ddad90-e3ff-4fc8-aa1d-42760539dec7,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-workflow6mf59/series-workflow6mf59-convert-artifact-3508697687/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": "663fd2a5-e494-41f9-90c7-16320715fca3", "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-workflow6mf59/series-workflow6mf59-build-action-393935533/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-11 00:21:51 +0000 UTC FinishedAt: 2026-08-11 00:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-11 00:21:51 +0000 UTC FinishedAt: 2026-08-11 00:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-11 00:21:51 +0000 UTC FinishedAt: 2026-08-11 00:22:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-11 00:21:51 +0000 UTC FinishedAt: 2026-08-11 00:21:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.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-workflow6mf59/series-workflow6mf59-convert-artifact-744759430/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-11 00:22:01 +0000 UTC FinishedAt: 2026-08-11 00:24:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-11 00:22:01 +0000 UTC FinishedAt: 2026-08-11 00:24:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*663fd2a5-e494-41f9-90c7-16320715fca3,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-workflow6mf59/series-workflow6mf59-build-action-393935533/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-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-11 00:24:17 +0000 UTC FinishedAt: 2026-08-11 00:24:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-11 00:24:17 +0000 UTC FinishedAt: 2026-08-11 00:24:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-11 00:24:17 +0000 UTC FinishedAt: 2026-08-11 00:43:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-11 00:24:17 +0000 UTC FinishedAt: 2026-08-11 00:43:46 +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:*e0ddad90-e3ff-4fc8-aa1d-42760539dec7,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-workflow6mf59/series-workflow6mf59-convert-artifact-744759430/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": "b4ff519d-a785-4bfe-9cde-26d8686323f1", "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-workflow6mf59/series-workflow6mf59-build-action-3857938122/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-11 00:24:17 +0000 UTC FinishedAt: 2026-08-11 00:43:36 +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:*e0ddad90-e3ff-4fc8-aa1d-42760539dec7,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-workflow6mf59/series-workflow6mf59-convert-artifact-744759430/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": "b4ff519d-a785-4bfe-9cde-26d8686323f1", "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-workflow6mf59/series-workflow6mf59-build-action-3857938122/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-11 00:43:46 +0000 UTC FinishedAt: 2026-08-11 00:43:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-11 00:43:46 +0000 UTC FinishedAt: 2026-08-11 00:43:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-11 00:43:46 +0000 UTC FinishedAt: 2026-08-11 00:45:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-11 00:43:46 +0000 UTC FinishedAt: 2026-08-11 00:45:17 +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:*b4ff519d-a785-4bfe-9cde-26d8686323f1,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-workflow6mf59/series-workflow6mf59-build-action-3857938122/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-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-11 00:45:27 +0000 UTC FinishedAt: 2026-08-11 03:47:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-11 00:45:27 +0000 UTC FinishedAt: 2026-08-11 03:47:04 +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":["__nf_ct_try_assign_helper"],"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:*663fd2a5-e494-41f9-90c7-16320715fca3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b4ff519d-a785-4bfe-9cde-26d8686323f1,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-workflow6mf59/series-workflow6mf59-build-action-393935533/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-workflow6mf59/series-workflow6mf59-build-action-3857938122/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-11 00:45:27 +0000 UTC FinishedAt: 2026-08-11 00:45:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-11 00:45:27 +0000 UTC FinishedAt: 2026-08-11 00:45:32 +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":["__nf_ct_try_assign_helper"],"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-workflow6mf59/series-workflow6mf59-convert-artifact-2409548363/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-11 00:45:27 +0000 UTC FinishedAt: 2026-08-11 00:45:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-11 00:45:27 +0000 UTC FinishedAt: 2026-08-11 00:45:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-11 00:45:27 +0000 UTC FinishedAt: 2026-08-11 00:45:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-11 00:45:37 +0000 UTC FinishedAt: 2026-08-11 03:47:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_ct_try_assign_helper"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK"],"series_id":"ce20e818-e79a-4e32-afb4-57e1caedc218","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-11 00:45:37 +0000 UTC FinishedAt: 2026-08-11 03:46:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*663fd2a5-e494-41f9-90c7-16320715fca3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b4ff519d-a785-4bfe-9cde-26d8686323f1,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-workflow6mf59/series-workflow6mf59-build-action-393935533/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-workflow6mf59/series-workflow6mf59-build-action-3857938122/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-workflow6mf59/series-workflow6mf59-convert-artifact-2409548363/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,}