Name: series-workflowmx86t Phase: Succeeded StartedAt: 2026-08-27 05:26:37 +0000 UTC FinishedAt: 2026-08-27 09:22:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmx86t[0] Phase: Succeeded StartedAt: 2026-08-27 05:26:37 +0000 UTC FinishedAt: 2026-08-27 05:43:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmx86t[0].run-triage Phase: Succeeded StartedAt: 2026-08-27 05:26:37 +0000 UTC FinishedAt: 2026-08-27 05:43:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d2796ffe38cb4155afe0eab23636295b096c27a5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_NS", "NET_NS_REFCNT_TRACKER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d2796ffe38cb4155afe0eab23636295b096c27a5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_NS", "NET_NS_REFCNT_TRACKER" ], "series_id": "88b7f5a3-4ecc-4029-a925-3b49a3976627" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "copy_net_ns" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9OUyYjMzQ7LAogICAgJiMzNDtORVRfTlNfUkVGQ05UX1RSQUNLRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb3B5X25ldF9ucyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBtaXNzaW5nIGNhbGwgdG8gYHJlZl90cmFja2VyX2Rpcl9leGl0KClgIGluIHRoZSBlcnJvciBwYXRoIG9mIGBjb3B5X25ldF9ucygpYCB0byBwcmV2ZW50IGEgcmVzb3VyY2UgbGVhayAoc3BlY2lmaWNhbGx5LCBhIGRlYnVnZnMgZmlsZSBhbmQgcmVmY250X3RyYWNrZXIgcmVzb3VyY2VzKSB3aGVuIGBzZXR1cF9uZXQoKWAgZmFpbHMuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbm9yIGRvZXMgaXQgbW9kaWZ5IGFueSBkYXRhIHNlbnQgdG8gdXNlciBzcGFjZSBvciBhbHRlciBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFJlc291cmNlIGxlYWtzIGFuZCBtZW1vcnkgbGVha3MgYXJlIHR5cGljYWxseSBkZXRlY3RlZCBieSBLTUVNTEVBSywgd2hpbGUgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIChyZWZjbnRfdHJhY2tlciBhbmQgaXRzIGRlYnVnZnMgZmlsZSkgaW4gdGhlIGVycm9yIHBhdGggb2YgY29weV9uZXRfbnMoKSB3aGVuIHNldHVwX25ldCgpIGZhaWxzLiBGdXp6aW5nIGNvcHlfbmV0X25zIHdpdGggZmF1bHQgaW5qZWN0aW9uIGNhbiBoZWxwIHZlcmlmeSB0aGUgZml4LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDUwZjgyZGZiMjJlODkzZDgyYmM5YTYzMDY0Mjg5MGJlMDM3Y2ZiMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDA1OjQxOjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1xuaW5kZXggYTkxZDJiNThhYWRkZi4uMGMzZjE2OWQ5YWZiYyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jXG5AQCAtNTkxLDYgJiM0Mzs1OTEsMTAgQEAgc3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxuIFx0XHRrZXlfcmVtb3ZlX2RvbWFpbihuZXQtXHUwMDNla2V5X2RvbWFpbik7XG4gI2VuZGlmXG4gXHRcdHB1dF91c2VyX25zKHVzZXJfbnMpO1xuJiM0MztcdFx0Lyogc2V0dXBfbmV0KCkgZmFpbHVyZSBpcyBub3Qgcm91dGVkIHRocm91Z2ggX19wdXRfbmV0KCksIHNvIHRoZVxuJiM0MztcdFx0ICogcmVmY250X3RyYWNrZXIgKGFuZCBpdHMgZGVidWdmcyBmaWxlKSBoYXMgdG8gYmUgcmVsZWFzZWQgaGVyZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmVmX3RyYWNrZXJfZGlyX2V4aXQoXHUwMDI2bmV0LVx1MDAzZXJlZmNudF90cmFja2VyKTtcbiBcdFx0bmV0X3Bhc3NpdmVfZGVjKG5ldCk7XG4gZGVjX3Vjb3VudHM6XG4gXHRcdGRlY19uZXRfbmFtZXNwYWNlcyh1Y291bnRzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX05TJiMzNDssCiAgICAmIzM0O05FVF9OU19SRUZDTlRfVFJBQ0tFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvcHlfbmV0X25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmVzb3VyY2UgbGVhayAocmVmY250X3RyYWNrZXIgYW5kIGl0cyBkZWJ1Z2ZzIGZpbGUpIGluIHRoZSBlcnJvciBwYXRoIG9mIGNvcHlfbmV0X25zKCkgd2hlbiBzZXR1cF9uZXQoKSBmYWlscy4gRnV6emluZyBjb3B5X25ldF9ucyB3aXRoIGZhdWx0IGluamVjdGlvbiBjYW4gaGVscCB2ZXJpZnkgdGhlIGZpeC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ1MGY4MmRmYjIyZTg5M2Q4MmJjOWE2MzA2NDI4OTBiZTAzN2NmYjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAwNTo0MToyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYwppbmRleCBhOTFkMmI1OGFhZGRmLi4wYzNmMTY5ZDlhZmJjIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jCkBAIC01OTEsNiAmIzQzOzU5MSwxMCBAQCBzdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsCiAJCWtleV9yZW1vdmVfZG9tYWluKG5ldC0mZ3Q7a2V5X2RvbWFpbik7CiAjZW5kaWYKIAkJcHV0X3VzZXJfbnModXNlcl9ucyk7CiYjNDM7CQkvKiBzZXR1cF9uZXQoKSBmYWlsdXJlIGlzIG5vdCByb3V0ZWQgdGhyb3VnaCBfX3B1dF9uZXQoKSwgc28gdGhlCiYjNDM7CQkgKiByZWZjbnRfdHJhY2tlciAoYW5kIGl0cyBkZWJ1Z2ZzIGZpbGUpIGhhcyB0byBiZSByZWxlYXNlZCBoZXJlLgomIzQzOwkJICovCiYjNDM7CQlyZWZfdHJhY2tlcl9kaXJfZXhpdCgmYW1wO25ldC0mZ3Q7cmVmY250X3RyYWNrZXIpOwogCQluZXRfcGFzc2l2ZV9kZWMobmV0KTsKIGRlY191Y291bnRzOgogCQlkZWNfbmV0X25hbWVzcGFjZXModWNvdW50cyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldCBOYW1lc3BhY2UgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNgLiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSBhZGRlZCBgcmVmX3RyYWNrZXJfZGlyX2V4aXQoJmFtcDtuZXQtJmd0O3JlZmNudF90cmFja2VyKTtgIHRvIHRoZSBlcnJvciBwYXRoIG9mIGBjb3B5X25ldF9ucygpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCByaWdodCwgcmVzb3VyY2UgdHJhY2tpbmcg4oCTIGdvb2QuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgYWRkaXRpb24gaXMgbmVjZXNzYXJ5LiBPYnZpb3VzbHksIHRoaXMgaXMgYWJvdXQgaGFuZGxpbmcgcmVmZXJlbmNlIGNvdW50cyB3aXRoaW4gdGhlIG5ldHdvcmsgbmFtZXNwYWNlIGFuZCBjbGVhbmluZyB1cCBjb3JyZWN0bHkgd2hlbiB0aGVyZSYjMzk7cyBhIGZhaWx1cmUgZHVyaW5nIHRoZSBjb3B5LiBJIGJldHRlciBkaWcgaW50byB0aGUgYGNvcHlfbmV0X25zKClgIGZ1bmN0aW9uIGl0c2VsZiB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBjb250ZXh0IGFuZCB3aGF0IGNvdWxkIGhhdmUgYmVlbiBtaXNzZWQgcHJldmlvdXNseSB0aGF0IHRyaWdnZXJlZCB0aGlzIGZpeC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvcHlfbmV0X25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYz01NDc9dm9pZCBuZXRfZHJvcF9ucyhzdHJ1Y3QgbnNfY29tbW9uICpucylcbi0tXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNTUyLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jOjU1MzpzdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNTU0LVx0XHRcdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywgc3RydWN0IG5ldCAqb2xkX25ldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzk2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgY29weV9uZXRfbnMoKWAqKgoKT2theSwgdGltZSB0byBkaXNzZWN0IGBjb3B5X25ldF9ucygpYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2Qgd2hlbiBhIG5ldHdvcmsgbmFtZXNwYWNlIGlzIGR1cGxpY2F0ZWQsIHNvIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCBmb3IgdGhlIHNvdXJjZSBjb2RlIGluIGBuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNgLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIHRoZSBjb3JlIG9mIHRoZSBkdXBsaWNhdGlvbiBwcm9jZXNzLCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZToKCiogICAqKlJlc291cmNlIER1cGxpY2F0aW9uIHZzLiBTaGFyaW5nOioqIElzIGl0IGEgZnVsbCBkZWVwIGNvcHksIG9yIGRvZXMgaXQgY2xldmVybHkgc2hhcmUgY2VydGFpbiByZXNvdXJjZXMgd2hlcmUgcG9zc2libGUgdG8gbWluaW1pemUgb3ZlcmhlYWQ/IEkmIzM5O20gcGFydGljdWxhcmx5IGN1cmlvdXMgYWJvdXQgdGhpbmdzIGxpa2Ugcm91dGVzLCBhZGRyZXNzZXMsIGFuZCBvdGhlciBuZXR3b3JrIHN0YXRlLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgdHJhZGUtb2ZmcyBiZXR3ZWVuIGEgY29tcGxldGUgY29weSBhbmQgcG90ZW50aWFsIHNoYXJlZCBzdGF0ZS4KKiAgICoqUElEIGFuZCBOYW1lc3BhY2UgQXNzb2NpYXRpb246KiogSG93IGlzIHRoZSBuZXcgbmFtZXNwYWNlIGxpbmtlZCB0byBwcm9jZXNzZXM/IElzIHRoZXJlIGEgY2xlYW4gc2VwYXJhdGlvbiwgb3IgYXJlIHRoZXJlIHBvdGVudGlhbCBnb3RjaGFzIHJlbGF0ZWQgdG8gcHJvY2VzcyBsaWZldGltZXMgYW5kIG5hbWVzcGFjZSBtZW1iZXJzaGlwPyBXaGF0IGlzIGdvaW5nIG9uIGZvciB0YXNrcyB0aGF0IG1pZ3JhdGUgYmV0d2VlbiBuYW1lc3BhY2VzPwoqICAgKipTeW5jaHJvbml6YXRpb246KiogR2l2ZW4gdGhlIG11bHRpLXRocmVhZGVkIG5hdHVyZSBvZiB0aGUga2VybmVsLCBJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgb3IgYXRvbWljIG9wZXJhdGlvbnMgdXNlZCB0byBlbnN1cmUgY29uc2lzdGVuY3kgZHVyaW5nIHRoZSBjb3B5LiBBbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhcmUgYSBiaWcgcmVkIGZsYWcgaW4gdGhpcyBhcmVhLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVtIGZ1bGx5LgoqICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0IGtpbmQgb2YgZXJyb3IgY2hlY2tpbmcgaXMgaW1wbGVtZW50ZWQsIGFuZCBob3cgYXJlIGZhaWx1cmVzIGhhbmRsZWQ/IFRoZSBuZXR3b3JrIG5hbWVzcGFjZSBtZWNoYW5pc20gaXMgcHJldHR5IGNvbXBsZXgsIHNvIEkgaW1hZ2luZSB0aGVyZSBhcmUgYSBsb3Qgb2YgcG90ZW50aWFsIGZhaWx1cmUgcG9pbnRzLiBIb3cgZ3JhY2VmdWxseSBkb2VzIHRoaXMgZnVuY3Rpb24gZGVhbCB3aXRoIHRoZW0/CiogICAqKkhvb2tzIGFuZCBFeHRlbnNpb25zOioqIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9ucyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgZXh0ZW5zaWJsZSwgcGVyaGFwcyB0aHJvdWdoIGhvb2tzIG9yIGNhbGxiYWNrcy4gVGhpcyB3b3VsZCBnaXZlIGNsdWVzIHRvIGhvdyBvdGhlciBtb2R1bGVzIGNhbiBpbnRlZ3JhdGUgd2l0aCBuZXR3b3JrIG5hbWVzcGFjZSBjcmVhdGlvbi4KKiAgICoqTWVtb3J5IE1hbmFnZW1lbnQ6KiogSG93IGRvZXMgbWVtb3J5IGdldCBoYW5kbGVkPyBJcyB0aGVyZSBwb3RlbnRpYWwgZm9yIGZyYWdtZW50YXRpb24gb3IgbWVtb3J5IGxlYWtzPyBJZiBhbnl0aGluZyBpcyBhbGxvY2F0ZWQsIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlbGF0ZWQgYGtmcmVlKClgIGNvdW50ZXJwYXJ0cy4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdGhvcm91Z2hseSwgYXMgYW55IHdlYWtuZXNzIGluIHRoaXMgZnVuY3Rpb24gY291bGQgaGF2ZSByaXBwbGUgZWZmZWN0cy4gVGhpcyBpcyBhIGNydWNpYWwgY29tcG9uZW50IHRoYXQgZGlyZWN0bHkgaW5mbHVlbmNlcyB0aGUgc3RhYmlsaXR5LCBwZXJmb3JtYW5jZSwgYW5kIHNlY3VyaXR5IG9mIGNvbnRhaW5lcml6ZWQgZW52aXJvbm1lbnRzIGFuZCBvdGhlciBtb2Rlcm4gbmV0d29ya2luZyBhcHBsaWNhdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTUzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTUzOlx0c3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxuIDU1NDpcdFx0XHRcdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywgc3RydWN0IG5ldCAqb2xkX25ldClcbiA1NTU6XHR7XG4gNTU2Olx0XHRzdHJ1Y3QgdWNvdW50cyAqdWNvdW50cztcbiA1NTc6XHRcdHN0cnVjdCBuZXQgKm5ldDtcbiA1NTg6XHRcdGludCBydjtcbiA1NTk6XHRcbiA1NjA6XHRcdGlmICghKGZsYWdzIFx1MDAyNiBDTE9ORV9ORVdORVQpKVxuIDU2MTpcdFx0XHRyZXR1cm4gZ2V0X25ldChvbGRfbmV0KTtcbiA1NjI6XHRcbiA1NjM6XHRcdHVjb3VudHMgPSBpbmNfbmV0X25hbWVzcGFjZXModXNlcl9ucyk7XG4gNTY0Olx0XHRpZiAoIXVjb3VudHMpXG4gNTY1Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xuIDU2NjpcdFxuIDU2NzpcdFx0bmV0ID0gbmV0X2FsbG9jKCk7XG4gNTY4Olx0XHRpZiAoIW5ldCkge1xuIDU2OTpcdFx0XHRydiA9IC1FTk9NRU07XG4gNTcwOlx0XHRcdGdvdG8gZGVjX3Vjb3VudHM7XG4gNTcxOlx0XHR9XG4gNTcyOlx0XG4gNTczOlx0XHRydiA9IHByZWluaXRfbmV0KG5ldCwgdXNlcl9ucyk7XG4gNTc0Olx0XHRpZiAocnYgXHUwMDNjIDApXG4gNTc1Olx0XHRcdGdvdG8gZGVjX3Vjb3VudHM7XG4gNTc2Olx0XHRuZXQtXHUwMDNldWNvdW50cyA9IHVjb3VudHM7XG4gNTc3Olx0XHRnZXRfdXNlcl9ucyh1c2VyX25zKTtcbiA1Nzg6XHRcbiA1Nzk6XHRcdHJ2ID0gZG93bl9yZWFkX2tpbGxhYmxlKFx1MDAyNnBlcm5ldF9vcHNfcndzZW0pO1xuIDU4MDpcdFx0aWYgKHJ2IFx1MDAzYyAwKVxuIDU4MTpcdFx0XHRnb3RvIHB1dF91c2VybnM7XG4gNTgyOlx0XG4gNTgzOlx0XHRydiA9IHNldHVwX25ldChuZXQpO1xuIDU4NDpcdFxuIDU4NTpcdFx0dXBfcmVhZChcdTAwMjZwZXJuZXRfb3BzX3J3c2VtKTtcbiA1ODY6XHRcbiA1ODc6XHRcdGlmIChydiBcdTAwM2MgMCkge1xuIDU4ODpcdHB1dF91c2VybnM6XG4gNTg5Olx0XHRcdG5zX2NvbW1vbl9mcmVlKG5ldCk7XG4gNTkwOlx0I2lmZGVmIENPTkZJR19LRVlTXG4gNTkxOlx0XHRcdGtleV9yZW1vdmVfZG9tYWluKG5ldC1cdTAwM2VrZXlfZG9tYWluKTtcbiA1OTI6XHQjZW5kaWZcbiA1OTM6XHRcdFx0cHV0X3VzZXJfbnModXNlcl9ucyk7XG4gNTk0Olx0XHRcdC8qIHNldHVwX25ldCgpIGZhaWx1cmUgaXMgbm90IHJvdXRlZCB0aHJvdWdoIF9fcHV0X25ldCgpLCBzbyB0aGVcbiA1OTU6XHRcdFx0ICogcmVmY250X3RyYWNrZXIgKGFuZCBpdHMgZGVidWdmcyBmaWxlKSBoYXMgdG8gYmUgcmVsZWFzZWQgaGVyZS5cbiA1OTY6XHRcdFx0ICovXG4gNTk3Olx0XHRcdHJlZl90cmFja2VyX2Rpcl9leGl0KFx1MDAyNm5ldC1cdTAwM2VyZWZjbnRfdHJhY2tlcik7XG4gNTk4Olx0XHRcdG5ldF9wYXNzaXZlX2RlYyhuZXQpO1xuIDU5OTpcdGRlY191Y291bnRzOlxuIDYwMDpcdFx0XHRkZWNfbmV0X25hbWVzcGFjZXModWNvdW50cyk7XG4gNjAxOlx0XHRcdHJldHVybiBFUlJfUFRSKHJ2KTtcbiA2MDI6XHRcdH1cbiA2MDM6XHRcdHJldHVybiBuZXQ7XG4gNjA0Olx0fVxuIDYwNTpcdFxuIDYwNjpcdC8qKlxuIDYwNzpcdCAqIG5ldF9uc19nZXRfb3duZXJzaGlwIC0gZ2V0IHN5c2ZzIG93bmVyc2hpcCBkYXRhIGZvciBAbmV0XG4gNjA4Olx0ICogQG5ldDogbmV0d29yayBuYW1lc3BhY2UgaW4gcXVlc3Rpb24gKGNhbiBiZSBOVUxMKVxuIDYwOTpcdCAqIEB1aWQ6IGtlcm5lbCB1c2VyIElEIGZvciBzeXNmcyBvYmplY3RzXG4gNjEwOlx0ICogQGdpZDoga2VybmVsIGdyb3VwIElEIGZvciBzeXNmcyBvYmplY3RzXG4gNjExOlx0ICpcbiA2MTI6XHQgKiBSZXR1cm5zIHRoZSB1aWQvZ2lkIHBhaXIgb2Ygcm9vdCBpbiB0aGUgdXNlciBuYW1lc3BhY2UgYXNzb2NpYXRlZCB3aXRoIHRoZVxuIDYxMzpcdCAqIGdpdmVuIG5ldHdvcmsgbmFtZXNwYWNlLlxuIDYxNDpcdCAqL1xuIDYxNTpcdHZvaWQgbmV0X25zX2dldF9vd25lcnNoaXAoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBrdWlkX3QgKnVpZCwga2dpZF90ICpnaWQpXG4gNjE2Olx0e1xuIDYxNzpcdFx0aWYgKG5ldCkge1xuIDYxODpcdFx0XHRrdWlkX3QgbnNfcm9vdF91aWQgPSBtYWtlX2t1aWQobmV0LVx1MDAzZXVzZXJfbnMsIDApO1xuIDYxOTpcdFx0XHRrZ2lkX3QgbnNfcm9vdF9naWQgPSBtYWtlX2tnaWQobmV0LVx1MDAzZXVzZXJfbnMsIDApO1xuIDYyMDpcdFxuIDYyMTpcdFx0XHRpZiAodWlkX3ZhbGlkKG5zX3Jvb3RfdWlkKSlcbiA2MjI6XHRcdFx0XHQqdWlkID0gbnNfcm9vdF91aWQ7XG4gNjIzOlx0XG4gNjI0Olx0XHRcdGlmIChnaWRfdmFsaWQobnNfcm9vdF9naWQpKVxuIDYyNTpcdFx0XHRcdCpnaWQgPSBuc19yb290X2dpZDtcbiA2MjY6XHRcdH0gZWxzZSB7XG4gNjI3Olx0XHRcdCp1aWQgPSBHTE9CQUxfUk9PVF9VSUQ7XG4gNjI4Olx0XHRcdCpnaWQgPSBHTE9CQUxfUk9PVF9HSUQ7XG4gNjI5Olx0XHR9XG4gNjMwOlx0fVxuIDYzMTpcdEVYUE9SVF9TWU1CT0xfR1BMKG5ldF9uc19nZXRfb3duZXJzaGlwKTtcbiA2MzI6XHRcbiA2MzM6XHRzdGF0aWMgdm9pZCB1bmhhc2hfbnNpZChzdHJ1Y3QgbmV0ICpsYXN0KVxuIDYzNDpcdHtcbiA2MzU6XHRcdHN0cnVjdCBuZXQgKnRtcCwgKnBlZXI7XG4gNjM2Olx0XG4gNjM3Olx0XHQvKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGZyb20gY2xlYW51cF9uZXQoKSB3b3JrLFxuIDYzODpcdFx0ICogYW5kIHRoaXMgd29yayBpcyB0aGUgb25seSBwcm9jZXNzLCB0aGF0IG1heSBkZWxldGVcbiA2Mzk6XHRcdCAqIGEgbmV0IGZyb20gbmV0X25hbWVzcGFjZV9saXN0LiBTbywgd2hlbiB0aGUgYmVsb3dcbiA2NDA6XHRcdCAqIGlzIGV4ZWN1dGluZywgdGhlIGxpc3QgbWF5IG9ubHkgZ3Jvdy4gVGh1cywgd2UgZG8gbm90XG4gNjQxOlx0XHQgKiB1c2UgZm9yX2VhY2hfbmV0X3JjdSgpIG9yIG5ldF9yd3NlbS5cbiA2NDI6XHRcdCAqL1xuIDY0MzpcdFx0Zm9yX2VhY2hfbmV0KHRtcCkge1xuIDY0NDpcdFx0XHRpbnQgaWQgPSAwO1xuIDY0NTpcdFxuIDY0NjpcdFx0XHRzcGluX2xvY2soXHUwMDI2dG1wLVx1MDAzZW5zaWRfbG9jayk7XG4gNjQ3Olx0XHRcdHdoaWxlICgocGVlciA9IGlkcl9nZXRfbmV4dChcdTAwMjZ0bXAtXHUwMDNlbmV0bnNfaWRzLCBcdTAwMjZpZCkpKSB7XG4gNjQ4Olx0XHRcdFx0aW50IGN1cnJfaWQgPSBpZDtcbiA2NDk6XHRcbiA2NTA6XHRcdFx0XHRpZCYjNDM7JiM0Mzs7XG4gNjUxOlx0XHRcdFx0aWYgKCFwZWVyLVx1MDAzZWlzX2R5aW5nKVxuIDY1MjpcdFx0XHRcdFx0Y29udGludWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQwNwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDY1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFdvcnRoaW5lc3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBhZGRzIGByZWZfdHJhY2tlcl9kaXJfZXhpdGAgdG8gdGhlIGVycm9yIHBhdGggaW4gYGNvcHlfbmV0X25zKClgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7bWVtb3J5L3Jlc291cmNlIGxlYWsgZml4LCBpbnRlcmVzdGluZy4mIzM0OyBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIGNvcmUga2VybmVsIGZ1bmN0aW9uLCBgY29weV9uZXRfbnMoKWAsIHdoaWNoIGlzIGNydWNpYWwgZm9yIG5ldHdvcmsgbmFtZXNwYWNlIGNyZWF0aW9uIHZpYSBgY2xvbmUoQ0xPTkVfTkVXTkVUKWAgb3IgYHVuc2hhcmUoQ0xPTkVfTkVXTkVUKWAuIFRoZSBlcnJvciBwYXRoIHdlJiMzOTtyZSB0YXJnZXRpbmcgaXMgaGl0IHdoZW4gYHNldHVwX25ldChuZXQpYCBmYWlscywgcG90ZW50aWFsbHkgZHVlIHRvIG1lbW9yeSBpc3N1ZXMgb3Igc3Vic3lzdGVtIGluaXRpYWxpemF0aW9uIGZhaWx1cmVzIHdpdGhpbiB0aGUgbmV0d29yayBuYW1lc3BhY2UuCgpTbywgdGhlIGNoYWxsZW5nZSBoZXJlIGlzIHRoYXQgdHJpZ2dlcmluZyB0aGlzIHNwZWNpZmljIGVycm9yIHBhdGggcmVxdWlyZXMgZWl0aGVyIGZhdWx0IGluamVjdGlvbiBvciBjcmVhdGluZyBjb25kaXRpb25zIHdoZXJlIGBzZXR1cF9uZXQoKWAgZGVsaWJlcmF0ZWx5IGZhaWxzLiBOb3QgYSB3YWxrIGluIHRoZSBwYXJrLCBidXQgbm90IGltcG9zc2libGUuIGByZWZfdHJhY2tlcl9kaXJfZXhpdGAsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgZXNzZW50aWFsbHkgYSBjbGVhbnVwIGZ1bmN0aW9uIHRvIHByZXZlbnQgYSBsZWFrIG9mIHRoZSBgcmVmY250X3RyYWNrZXJgIGFuZCBpdHMgYXNzb2NpYXRlZCBkZWJ1Z2ZzIGZpbGUuIEl0JiMzOTtzIG5vdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBzZW5zZSB0aGF0IGl0IGRvZXNuJiMzOTt0ICphZGQqIG5ldyBmZWF0dXJlcywgYnV0IGl0ICpmaXhlcyogYSByZXNvdXJjZSBsZWFrLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnQuCgpUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgZnV6emFibGU/IEFic29sdXRlbHkuIEl0JiMzOTtzIGEgcmVhY2hhYmxlIGVycm9yIHBhdGggd2l0aGluIGEgY29yZSBrZXJuZWwgZnVuY3Rpb24uIEZ1enppbmcgY291bGQgaGVscCBjb25maXJtIHRoYXQgdGhlIGxlYWsgaXMgdHJ1bHkgZml4ZWQgYW5kLCBpbXBvcnRhbnRseSwgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgY3Jhc2hlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbiYjMzk7dCBhIHRlYXJkb3duIGNhbGxiYWNrLCBzbyBsZXQgbWUgY2hlY2sgd2hhdCB0aGUgaW5zdHJ1Y3Rpb25zIHN0YXRlLi4uT2theSwgdGhpcyBpc24mIzM5O3QgYSBkcml2ZXIgdGVhcmRvd24sIGl0JiMzOTtzIGEgY29yZSBrZXJuZWwgZnVuY3Rpb24uCgpOb3csIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBpbnN0cnVjdGlvbnMsIGl0JiMzOTtzIGNsZWFyIHRoaXMgaXMgTk9UIGEgZG9jdW1lbnRhdGlvbiBjaGFuZ2UsIGEgbG9nZ2luZyBtb2RpZmljYXRpb24sIGEgbnVtZXJpYyBjb25zdGFudCwgdW5yZWFjaGFibGUgY29kZSwgb3IgYSBkcml2ZXIgdGVhcmRvd24gY2FsbGJhY2suIEl0JiMzOTtzIGEgY2xlYW51cCBvbiBhbiBlcnJvciBwYXRoIHdpdGhpbiBjb3JlIGNvZGUsIGFuZCB0aHVzLCBJJiMzOTttIGNvbmZpZGVudCBpdCYjMzk7cyAqV29ydGhGdXp6aW5nPXRydWUqLgoKTXkgZm9jdXMgZm9yIGZ1enppbmcgd2lsbCBiZSBgY29weV9uZXRfbnNgIHRvIGVuc3VyZSB0aGF0IHRoaXMgY2xlYW51cCBoYXBwZW5zIGFzIGV4cGVjdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX05FVF9OU2AgaXMgZW5hYmxlZC4gSWYgYGNvcHlfbmV0X25zYCByZWxpZXMgb24gaXQsIEkmIzM5O2xsIG5lZWQgdG8gc2V0IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvcHlfbmV0X25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYz01NDc9dm9pZCBuZXRfZHJvcF9ucyhzdHJ1Y3QgbnNfY29tbW9uICpucylcbi0tXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNTUyLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jOjU1MzpzdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNTU0LVx0XHRcdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywgc3RydWN0IG5ldCAqb2xkX25ldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Njk0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIEtjb25maWcgRGVwZW5kZW5jaWVzKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIGEgc3BlY2lmaWMgbmV0d29yayBzdWJzeXN0ZW0uIEZpcnN0LCBJJiMzOTttIHRoaW5raW5nLCB3aGVyZSB3b3VsZCB0aGlzIGluZm9ybWF0aW9uIGJlIG1vc3QgcmVsZXZhbnQ/IEdpdmVuIHRoZSB0YXNrLCBJJiMzOTtsbCBzdGFydCB3aXRoIGBuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIGEgbG90IG9mIHRoZSBjb3JlIG5ldHdvcmsgbmFtZXNwYWNlIHN0dWZmIHJlc2lkZXMuIE5vdywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgYmFjayB0byB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBzaG93IG1lIHRoZSByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIga2VybmVsIGZlYXR1cmVzLiBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHdoYXQgb3RoZXIgZnVuY3Rpb25hbGl0aWVzIGFyZSB0aWVkIHRvIHRoZSBiYXNlIG5ldHdvcmsgbmFtZXNwYWNlLiBTbywgSSBuZWVkIHRvIHNlZSB3aGF0IG9wdGlvbnMgY29udHJvbCB3aGV0aGVyIGBuZXRfbmFtZXNwYWNlLmNgIGlzIGV2ZW4gY29tcGlsZWQsIGFuZCB3aGF0LCBpZiBhbnksIGRlcGVuZGVuY2llcyBjYXNjYWRlIGZyb20gaXQuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRfbmFtZXNwYWNlXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT02PW9iai15IDo9IHNvY2subyBza2J1ZmYubyBkYXRhZ3JhbS5vIHN0cmVhbS5vIHNjbS5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZTo3Olx0IGdlbl9zdGF0cy5vIGdlbl9lc3RpbWF0b3IubyBuZXRfbmFtZXNwYWNlLm8gc2VjdXJlX3NlcS5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZS04LVx0IGZsb3dfZGlzc2VjdG9yLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAwOQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWw6CgoqKkRpZ2dpbmcgaW50byB0aGUgS2VybmVsIENvbXBpbGF0aW9uKioKCkFscmlnaHQsIHNvIEkgc2VlIHRoYXQgYG5ldF9uYW1lc3BhY2Uub2AgaXMgYmVpbmcgYnVpbHQgdW5jb25kaXRpb25hbGx5IOKAkyBpdCYjMzk7cyBhbiBgb2JqLXlgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBiZWNhdXNlIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgYG5ldF9uYW1lc3BhY2VgICpzaG91bGQqIGJlIGNvbnRyb2xsZWQgYnkgYSBjb25maWcgb3B0aW9uLCBzcGVjaWZpY2FsbHkgYENPTkZJR19ORVRfTlNgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIGlzIGNvcnJlY3QsIHNpbmNlIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIGNhbiBzb21ldGltZXMgZG8gdW5leHBlY3RlZCB0aGluZ3MuIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBydWxlcyBkaWN0YXRlIHRoZXJlLiBJdCYjMzk7cyB0aW1lIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIHVuY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgaW50ZW5kZWQgb3IgYSBwb3RlbnRpYWwgb3ZlcnNpZ2h0LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGF0IG9iamVjdCBmaWxlIGlzIGhhbmRsZWQgaW4gcmVsYXRpb24gdG8gdGhhdCBjb25maWcgc3ltYm9sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfTlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9MjE3Mz1zdGF0aWMgdm9pZCBydG5sX25ldF9kZXZfbG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTIxODktXG5uZXQvY29yZS9kZXYuYzoyMTkwOiNpZmRlZiBDT05GSUdfTkVUX05TXG5uZXQvY29yZS9kZXYuYy0yMTkxLVx0XHQvKiBkZXYgbWlnaHQgaGF2ZSBiZWVuIG1vdmVkIHRvIGFub3RoZXIgbmV0bnMuICovXG4tLVxubmV0L2NvcmUvZGV2LmM9MTA4ODY9c3RhdGljIGJvb2wgZnJvbV9jbGVhbnVwX25ldCh2b2lkKVxubmV0L2NvcmUvZGV2LmMtMTA4ODcte1xubmV0L2NvcmUvZGV2LmM6MTA4ODg6I2lmZGVmIENPTkZJR19ORVRfTlNcbm5ldC9jb3JlL2Rldi5jLTEwODg5LVx0cmV0dXJuIGN1cnJlbnQgPT0gUkVBRF9PTkNFKGNsZWFudXBfbmV0X3Rhc2spO1xuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIxNjc9c3RhdGljIHN0cnVjdCBuc19jb21tb24gKm5ldF9ncmFiX2N1cnJlbnRfbnModm9pZClcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTY5LVx0c3RydWN0IG5ldCAqbmV0ID0gY3VycmVudC1cdTAwM2Vuc3Byb3h5LVx1MDAzZW5ldF9ucztcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIxNzA6I2lmZGVmIENPTkZJR19ORVRfTlNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxNzEtXHRpZiAobmV0KVxuLS1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYz00NDA9c3RhdGljIF9fbmV0X2luaXQgaW50IHNldHVwX25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTQ3MC1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo0NzE6I2lmZGVmIENPTkZJR19ORVRfTlNcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy00NzItc3RhdGljIHN0cnVjdCB1Y291bnRzICppbmNfbmV0X25hbWVzcGFjZXMoc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucylcbi0tXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9ODE3PUVYUE9SVF9TWU1CT0xfR1BMKGdldF9uZXRfbnNfYnlfcGlkKTtcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy04MTgtXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6ODE5OiNpZmRlZiBDT05GSUdfTkVUX05TX1JFRkNOVF9UUkFDS0VSXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtODIwLXN0YXRpYyB2b2lkIG5ldF9uc19uZXRfZGVidWdmcyhzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTExODc9c3RhdGljIHZvaWQgcnRubF9uZXRfbm90aWZ5aWQoc3RydWN0IG5ldCAqbmV0LCBpbnQgY21kLCBpbnQgaWQsIHUzMiBwb3J0aWQsXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEyMTUtXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6MTIxNjojaWZkZWYgQ09ORklHX05FVF9OU1xubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEyMTctc3RhdGljIHZvaWQgX19pbml0IG5ldG5zX2lwdjRfc3RydWN0X2NoZWNrKHZvaWQpXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTEyNjc9dm9pZCBfX2luaXQgbmV0X25zX2luaXQodm9pZClcbi0tXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTI3MC1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzoxMjcxOiNpZmRlZiBDT05GSUdfTkVUX05TXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTI3Mi1cdG5ldG5zX2lwdjRfc3RydWN0X2NoZWNrKCk7XG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEzMTEtXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6MTMxMjojaWZkZWYgQ09ORklHX05FVF9OU1xubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEzMTMtc3RhdGljIGludCBfX3JlZ2lzdGVyX3Blcm5ldF9vcGVyYXRpb25zKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTEzNjc9c3RhdGljIHZvaWQgX191bnJlZ2lzdGVyX3Blcm5ldF9vcGVyYXRpb25zKHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyAqb3BzKVxuLS1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMzc4LVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jOjEzNzk6I2VuZGlmIC8qIENPTkZJR19ORVRfTlMgKi9cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMzgwLVxuLS1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYz0xNTE1PUVYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfcGVybmV0X2RldmljZSk7XG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTUxNi1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzoxNTE3OiNpZmRlZiBDT05GSUdfTkVUX05TXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTUxOC1zdGF0aWMgc3RydWN0IG5zX2NvbW1vbiAqbmV0bnNfZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yMjkwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBpZmxhX3BvbGljeVtJRkxBX01BWCYjNDM7MV0gPSB7XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjMwNC1cdFtJRkxBX0xJTktJTkZPXVx0XHQ9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyMzA1Olx0W0lGTEFfTkVUX05TX1BJRF1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjIzMDY6XHRbSUZMQV9ORVRfTlNfRkRdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMzA3LVx0LyogSUZMQV9JRkFMSUFTIGlzIGEgc3RyaW5nLCBidXQgcG9saWN5IGlzIHNldCB0byBOTEFfQklOQVJZIHRvXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MjY2Nz1zdGF0aWMgc3RydWN0IG5ldCAqcnRubF9saW5rX2dldF9uZXRfaWZsYShzdHJ1Y3QgbmxhdHRyICp0YltdKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTI2NzMtXHQgKi9cbm5ldC9jb3JlL3J0bmV0bGluay5jOjI2NzQ6XHRpZiAodGJbSUZMQV9ORVRfTlNfUElEXSlcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI2NzU6XHRcdG5ldCA9IGdldF9uZXRfbnNfYnlfcGlkKG5sYV9nZXRfdTMyKHRiW0lGTEFfTkVUX05TX1BJRF0pKTtcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI2NzY6XHRlbHNlIGlmICh0YltJRkxBX05FVF9OU19GRF0pXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyNjc3Olx0XHRuZXQgPSBnZXRfbmV0X25zX2J5X2ZkKG5sYV9nZXRfdTMyKHRiW0lGTEFfTkVUX05TX0ZEXSkpO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjY3OC1cbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yNjkxPUVYUE9SVF9TWU1CT0wocnRubF9saW5rX2dldF9uZXQpO1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTI2OTUtICpcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI2OTY6ICogMS4gSUZMQV9ORVRfTlNfUElEXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyNjk3OiAqIDIuIElGTEFfTkVUX05TX0ZEXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNjk4LSAqIDMuIElGTEFfVEFSR0VUX05FVE5TSURcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yNzAwPXN0YXRpYyBzdHJ1Y3QgbmV0ICpydG5sX2xpbmtfZ2V0X25ldF9ieV9ubGF0dHIoc3RydWN0IG5ldCAqc3JjX25ldCxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNzA0LVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjcwNTpcdGlmICh0YltJRkxBX05FVF9OU19QSURdIHx8IHRiW0lGTEFfTkVUX05TX0ZEXSlcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI3MDYtXHRcdHJldHVybiBydG5sX2xpbmtfZ2V0X25ldChzcmNfbmV0LCB0Yik7XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MjczOT1zdGF0aWMgaW50IHJ0bmxfZW5zdXJlX3VuaXF1ZV9uZXRucyhzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTI3NDQtXHRpZiAobmV0bnNfaWRfb25seSkge1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6Mjc0NTpcdFx0aWYgKCF0YltJRkxBX05FVF9OU19QSURdIFx1MDAyNlx1MDAyNiAhdGJbSUZMQV9ORVRfTlNfRkRdKVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjc0Ni1cdFx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNzUxLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6Mjc1MjpcdGlmICh0YltJRkxBX1RBUkdFVF9ORVROU0lEXSBcdTAwMjZcdTAwMjYgKHRiW0lGTEFfTkVUX05TX1BJRF0gfHwgdGJbSUZMQV9ORVRfTlNfRkRdKSlcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI3NTMtXHRcdGdvdG8gaW52YWxpZF9hdHRyO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjc1NC1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjI3NTU6XHRpZiAodGJbSUZMQV9ORVRfTlNfUElEXSBcdTAwMjZcdTAwMjYgKHRiW0lGTEFfVEFSR0VUX05FVE5TSURdIHx8IHRiW0lGTEFfTkVUX05TX0ZEXSkpXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNzU2LVx0XHRnb3RvIGludmFsaWRfYXR0cjtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI3NTctXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyNzU4Olx0aWYgKHRiW0lGTEFfTkVUX05TX0ZEXSBcdTAwMjZcdTAwMjYgKHRiW0lGTEFfVEFSR0VUX05FVE5TSURdIHx8IHRiW0lGTEFfTkVUX05TX1BJRF0pKVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjc1OS1cdFx0Z290byBpbnZhbGlkX2F0dHI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNzAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfTkVUX05TYCBhbmQgUmVmZXJlbmNlIENvdW50aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgQ09ORklHX05FVF9OU2AsIHdoaWNoIEkgdW5kZXJzdGFuZCBpcyBhIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBob3cgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBtZWNoYW5pc20gd29ya3MgaW4gcmVsYXRpb24gdG8gdGhpcy4gSSYjMzk7dmUgbm90aWNlZCB0aGF0IGByZWZfdHJhY2tlcl9kaXJfZXhpdGAgaXMgY2FsbGVkIG9uIGBuZXQtJmd0O3JlZmNudF90cmFja2VyYCwgd2hpY2ggbWFrZXMgbWUgdGhpbmsgdGhlcmUgbWlnaHQgYmUgYSBkZXBlbmRlbmN5IHRvIGV4cGxvcmUuIFRoZSBxdWVzdGlvbiBpcywgaXMgYHJlZmNudF90cmFja2VyYCBpdHNlbGYgY29udGluZ2VudCBvbiBgQ09ORklHX05FVF9OU19SRUZDTlRfVFJBQ0tFUmA/IEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlc2UgdHlwZXMgb2YgY2hlY2tzLCBJIHRoaW5rIHRoZSBtb3N0IGRpcmVjdCB3YXkgdG8gZ2V0IGFuIGFuc3dlciBxdWlja2x5IGlzIHRvIGRpdmUgaW50byBgaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oYC4gVGhhdCBoZWFkZXIgZmlsZSBpcyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhlIGRldGFpbHMgb24gdGhlIHN0cnVjdCBkZWZpbml0aW9ucyBhbmQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGludm9sdmVkIHdpdGggbmV0IG5hbWVzcGFjZXMuIExldCYjMzk7cyBzZWUgd2hhdCBpdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWZjbnRfdHJhY2tlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg9NjI9c3RydWN0IG5ldCB7XG4tLVxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTk3LVx0c3RydWN0IG5zX2NvbW1vblx0bnM7XG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg6OTg6XHRzdHJ1Y3QgcmVmX3RyYWNrZXJfZGlyICByZWZjbnRfdHJhY2tlcjtcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDo5OTpcdHN0cnVjdCByZWZfdHJhY2tlcl9kaXIgIG5vdHJlZmNudF90cmFja2VyOyAvKiB0cmFja2VyIGZvciBvYmplY3RzIG5vdFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTEwMC1cdFx0XHRcdFx0XHQgICAgKiByZWZjb3VudGVkIGFnYWluc3QgbmV0bnNcbi0tXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg9MzY0PXN0YXRpYyBpbmxpbmUgdm9pZCBfX25ldG5zX3RyYWNrZXJfYWxsb2Moc3RydWN0IG5ldCAqbmV0LFxuLS1cbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0zNjktI2lmZGVmIENPTkZJR19ORVRfTlNfUkVGQ05UX1RSQUNLRVJcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDozNzA6XHRyZWZfdHJhY2tlcl9hbGxvYyhyZWZjb3VudGVkID8gXHUwMDI2bmV0LVx1MDAzZXJlZmNudF90cmFja2VyIDpcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDozNzE6XHRcdFx0XHQgICAgICAgXHUwMDI2bmV0LVx1MDAzZW5vdHJlZmNudF90cmFja2VyLFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTM3Mi1cdFx0XHQgIHRyYWNrZXIsIGdmcCk7XG4tLVxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oPTM4Mj1zdGF0aWMgaW5saW5lIHZvaWQgX19uZXRuc190cmFja2VyX2ZyZWUoc3RydWN0IG5ldCAqbmV0LFxuLS1cbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0zODYtI2lmZGVmIENPTkZJR19ORVRfTlNfUkVGQ05UX1RSQUNLRVJcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDozODc6ICAgICAgIHJlZl90cmFja2VyX2ZyZWUocmVmY291bnRlZCA/IFx1MDAyNm5ldC1cdTAwM2VyZWZjbnRfdHJhY2tlciA6XG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg6Mzg4Olx0XHRcdFx0ICAgICBcdTAwMjZuZXQtXHUwMDNlbm90cmVmY250X3RyYWNrZXIsIHRyYWNrZXIpO1xuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTM4OS0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA4MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmNudCBUcmFja2VyIENvbmZpZ3VyYXRpb24gJmFtcDsgVXNhZ2UqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGByZWZjbnRfdHJhY2tlcmAgc2l0dWF0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBgQ09ORklHX05FVF9OU19SRUZDTlRfVFJBQ0tFUmAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0ICplbmFibGVzKiB0aGUgd2hvbGUgcmVmY291bnQgdHJhY2tpbmcgbWVjaGFuaXNtLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIGdvdCBpdC4mIzM0OyBCdXQgdGhlbiBJIHNlZSB0aGF0IGByZWZfdHJhY2tlcl9kaXJfZXhpdGAgZ2V0cyBjYWxsZWQgdW5jb25kaXRpb25hbGx5IHdpdGhpbiBgY29weV9uZXRfbnNgLiBUaGF0JiMzOTtzIGEgYml0IG9mIGEgaGVhZC1zY3JhdGNoZXIuCgpUaGUgY29yZSBxdWVzdGlvbiB0aGF0IGp1bXBzIG91dCBhdCBtZSBub3cgaXMsICYjMzQ7RG9lcyBgcmVmX3RyYWNrZXJfZGlyX2V4aXRgIGFjdHVhbGx5ICpkbyogYW55dGhpbmcgbWVhbmluZ2Z1bCBpZiB0aGF0IGBDT05GSUdfTkVUX05TX1JFRkNOVF9UUkFDS0VSYCBpc24mIzM5O3Qgc2V0PyYjMzQ7IEkgbWVhbiwgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBwb3RlbnRpYWxseSBwZXJmb3JtYW5jZS1pbXBhY3RpbmcgY2FsbCBoZXJlLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzLgoKVG8gZ2V0IGEgZGVmaW5pdGl2ZSBhbnN3ZXIsIEkgbmVlZCB0byBjaGVjayB0aGUgc291cmNlLiBUaW1lIHRvIGhlYWQgb3ZlciB0byBgaW5jbHVkZS9saW51eC9yZWZfdHJhY2tlci5oYCBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4gVGhhdCBoZWFkZXIgZmlsZSBzaG91bGQgaGF2ZSB0aGUgY3J1Y2lhbCBkZXRhaWxzLCBkZWZpbml0aW9ucywgYW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGxvZ2ljIEkmIzM5O20gYWZ0ZXIuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGlmIGl0JiMzOTtzIHByb3RlY3RlZCBieSBhbiBgI2lmZGVmIENPTkZJR19ORVRfTlNfUkVGQ05UX1RSQUNLRVJgIGd1YXJkLCBvciBpZiB0aGVyZSYjMzk7cyBzb21lIHNvcnQgb2Ygbm8tb3Agb3IgcGxhY2Vob2xkZXIgYmVoYXZpb3IgZGVmaW5lZCBmb3IgdGhlIGRpc2FibGVkIGNhc2UuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZl90cmFja2VyX2Rpcl9leGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9yZWZfdHJhY2tlci5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcmVmX3RyYWNrZXIuaD01OD1zdGF0aWMgaW5saW5lIHZvaWQgcmVmX3RyYWNrZXJfZGlyX2luaXQoc3RydWN0IHJlZl90cmFja2VyX2RpciAqZGlyLFxuLS1cbmluY2x1ZGUvbGludXgvcmVmX3RyYWNrZXIuaC03My1cbmluY2x1ZGUvbGludXgvcmVmX3RyYWNrZXIuaDo3NDp2b2lkIHJlZl90cmFja2VyX2Rpcl9leGl0KHN0cnVjdCByZWZfdHJhY2tlcl9kaXIgKmRpcik7XG5pbmNsdWRlL2xpbnV4L3JlZl90cmFja2VyLmgtNzUtXG4tLVxuaW5jbHVkZS9saW51eC9yZWZfdHJhY2tlci5oPTEwMz12b2lkIHJlZl90cmFja2VyX2Rpcl9zeW1saW5rKHN0cnVjdCByZWZfdHJhY2tlcl9kaXIgKmRpciwgY29uc3QgY2hhciAqZm10LCAuLi4pXG4tLVxuaW5jbHVkZS9saW51eC9yZWZfdHJhY2tlci5oLTEwNi1cbmluY2x1ZGUvbGludXgvcmVmX3RyYWNrZXIuaDoxMDc6c3RhdGljIGlubGluZSB2b2lkIHJlZl90cmFja2VyX2Rpcl9leGl0KHN0cnVjdCByZWZfdHJhY2tlcl9kaXIgKmRpcilcbmluY2x1ZGUvbGludXgvcmVmX3RyYWNrZXIuaC0xMDgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzI1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgUmVhc29uaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhpcyByZWZlcmVuY2UgdHJhY2tpbmcgdGhpbmcgd29ya3MsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zLiAgSSBzZWUgYHJlZl90cmFja2VyX2Rpcl9leGl0YCBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L3JlZl90cmFja2VyLmhgLiAgUmlnaHQsIHRoYXQmIzM5O3MgdGhlIGNvcmUuICBJZiBgQ09ORklHX1JFRl9UUkFDS0VSYCBpcyBlbmFibGVkLCBpdCBkb2VzIHNvbWV0aGluZzsgaWYgbm90LCBpdCYjMzk7cyBqdXN0IGEgZGVhZCBlbmQuICBOb3csIEkgcmVjYWxsIHRoYXQgYENPTkZJR19ORVRfTlNfUkVGQ05UX1RSQUNLRVJgIHNlbGVjdHMgYENPTkZJR19SRUZfVFJBQ0tFUmAuIEFoYSwgc28gYENPTkZJR19ORVRfTlNfUkVGQ05UX1RSQUNLRVJgIGlzIHRoZSBwcmltYXJ5IG9wdGlvbiB0byBmb2N1cyBvbi4gQnV0IHdhaXQsIHRoZXJl4oCZcyBhIGNhdGNoLiBMb29raW5nIGF0IHRoZSBjb2RlIGFyb3VuZCBgY29weV9uZXRfbnNgLCBgQ09ORklHX05FVF9OU2AgaXMgYWxzbyBuZWVkZWQgZm9yIGNvbXBpbGF0aW9uLiBHb3R0YSBtYWtlIHN1cmUgYm90aCBhcmUgc2V0LiAgTGV0IG1lIGRvdWJsZS1jaGVjayBgQ09ORklHX05FVF9OU2AgYW5kIGBDT05GSUdfTkVUX05TX1JFRkNOVF9UUkFDS0VSYCBpbiB0aGUgY29uZmlnLiBIb2xkIG9uLi4uIGRvZXMgYGNvcHlfbmV0X25zYCAqb25seSogZ2V0IGNvbXBpbGVkIGlmIGBDT05GSUdfTkVUX05TYCBpcyBzZXQ/IEkmIzM5O2QgYmV0dGVyIGNvbmZpcm0gdGhhdDsgbGV0JiMzOTtzIGdvIGJhY2sgYW5kIGxvb2sgYXQgYG5ldC9jb3JlL25ldF9uYW1lc3BhY2UuY2AgYWdhaW4gYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29weV9uZXRfbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTU0Nz12b2lkIG5ldF9kcm9wX25zKHN0cnVjdCBuc19jb21tb24gKm5zKVxuLS1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy01NTItXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6NTUzOnN0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHU2NCBmbGFncyxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy01NTQtXHRcdFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBzdHJ1Y3QgbmV0ICpvbGRfbmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM1MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3Mgc2VsZi1yZWZsZWN0aW9uOgoKKipEZWVwIERpdmU6IE5ldCBOYW1lc3BhY2UgQ29udGV4dCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgYGNvcHlfbmV0X25zYCBpcyBndWFyZGVkIGJ5IGEgYCNpZmRlZiBDT05GSUdfTkVUX05TYCBjb25kaXRpb25hbC4gVGhhdCYjMzk7cyBhIGNydWNpYWwgY2hlY2suIElmIGl0ICppc24mIzM5O3QqLCB0aGF0JiMzOTtzIGEgcmVkIGZsYWcuIEl0IGltcGxpZXMgdGhlIGZ1bmN0aW9uJiMzOTtzIHBvdGVudGlhbGx5IGJlaW5nIHVzZWQgaW4gcGFydHMgb2YgdGhlIGtlcm5lbCB3aGVyZSBuZXR3b3JrIG5hbWVzcGFjZXMgYXJlbiYjMzk7dCBldmVuIGVuYWJsZWQsIHdoaWNoIHdvdWxkIGJlIGEgcmVjaXBlIGZvciB1bmV4cGVjdGVkIGJlaGF2aW9yLCBjb21waWxlIGVycm9ycywgb3IgZXZlbiwgaGVhdmVuIGZvcmJpZCwgcnVudGltZSBjcmFzaGVzLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZSBjb2RlJiMzOTtzIGRlc2lnbmVkIHRvIGJlIHJvYnVzdCB1bmRlciBkaWZmZXJlbnQgYnVpbGQgY29uZmlndXJhdGlvbnMuIElzIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBjb2RlIHByb3Blcmx5IG1vZHVsYXJpemVkLCBvciBpcyB0aGVyZSBhIGxlYWt5IGFic3RyYWN0aW9uPyBUaGlzIHJlcXVpcmVzIGEgcXVpY2sgY29kZSBpbnNwZWN0aW9uIHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDA6XHRcdGlmICghbmV0LVx1MDAzZWtleV9kb21haW4pXG4gNTAxOlx0XHRcdGdvdG8gb3V0X2ZyZWVfMjtcbiA1MDI6XHRcdHJlZmNvdW50X3NldChcdTAwMjZuZXQtXHUwMDNla2V5X2RvbWFpbi1cdTAwM2V1c2FnZSwgMSk7XG4gNTAzOlx0I2VuZGlmXG4gNTA0Olx0XG4gNTA1Olx0XHRyY3VfYXNzaWduX3BvaW50ZXIobmV0LVx1MDAzZWdlbiwgbmcpO1xuIDUwNjpcdG91dDpcbiA1MDc6XHRcdHJldHVybiBuZXQ7XG4gNTA4Olx0XG4gNTA5Olx0I2lmZGVmIENPTkZJR19LRVlTXG4gNTEwOlx0b3V0X2ZyZWVfMjpcbiA1MTE6XHRcdGttZW1fY2FjaGVfZnJlZShuZXRfY2FjaGVwLCBuZXQpO1xuIDUxMjpcdFx0bmV0ID0gTlVMTDtcbiA1MTM6XHQjZW5kaWZcbiA1MTQ6XHRvdXRfZnJlZTpcbiA1MTU6XHRcdGtmcmVlKG5nKTtcbiA1MTY6XHRcdGdvdG8gb3V0O1xuIDUxNzpcdH1cbiA1MTg6XHRcbiA1MTk6XHRzdGF0aWMgTExJU1RfSEVBRChkZWZlcl9mcmVlX2xpc3QpO1xuIDUyMDpcdFxuIDUyMTpcdHN0YXRpYyB2b2lkIG5ldF9jb21wbGV0ZV9mcmVlKHZvaWQpXG4gNTIyOlx0e1xuIDUyMzpcdFx0c3RydWN0IGxsaXN0X25vZGUgKmtpbGxfbGlzdDtcbiA1MjQ6XHRcdHN0cnVjdCBuZXQgKm5ldCwgKm5leHQ7XG4gNTI1Olx0XG4gNTI2Olx0XHQvKiBHZXQgdGhlIGxpc3Qgb2YgbmFtZXNwYWNlcyB0byBmcmVlIGZyb20gbGFzdCByb3VuZC4gKi9cbiA1Mjc6XHRcdGtpbGxfbGlzdCA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2ZGVmZXJfZnJlZV9saXN0KTtcbiA1Mjg6XHRcbiA1Mjk6XHRcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmV0LCBuZXh0LCBraWxsX2xpc3QsIGRlZmVyX2ZyZWVfbGlzdClcbiA1MzA6XHRcdFx0a21lbV9jYWNoZV9mcmVlKG5ldF9jYWNoZXAsIG5ldCk7XG4gNTMxOlx0XG4gNTMyOlx0fVxuIDUzMzpcdFxuIDUzNDpcdHZvaWQgbmV0X3Bhc3NpdmVfZGVjKHN0cnVjdCBuZXQgKm5ldClcbiA1MzU6XHR7XG4gNTM2Olx0XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNm5ldC1cdTAwM2VwYXNzaXZlKSkge1xuIDUzNzpcdFx0XHRrZnJlZShyY3VfYWNjZXNzX3BvaW50ZXIobmV0LVx1MDAzZWdlbikpO1xuIDUzODpcdFxuIDUzOTpcdFx0XHQvKiBUaGVyZSBzaG91bGQgbm90IGJlIGFueSB0cmFja2VycyBsZWZ0IHRoZXJlLiAqL1xuIDU0MDpcdFx0XHRyZWZfdHJhY2tlcl9kaXJfZXhpdChcdTAwMjZuZXQtXHUwMDNlbm90cmVmY250X3RyYWNrZXIpO1xuIDU0MTpcdFxuIDU0MjpcdFx0XHQvKiBXYWl0IGZvciBhbiBleHRyYSByY3VfYmFycmllcigpIGJlZm9yZSBmaW5hbCBmcmVlLiAqL1xuIDU0MzpcdFx0XHRsbGlzdF9hZGQoXHUwMDI2bmV0LVx1MDAzZWRlZmVyX2ZyZWVfbGlzdCwgXHUwMDI2ZGVmZXJfZnJlZV9saXN0KTtcbiA1NDQ6XHRcdH1cbiA1NDU6XHR9XG4gNTQ2Olx0XG4gNTQ3Olx0dm9pZCBuZXRfZHJvcF9ucyhzdHJ1Y3QgbnNfY29tbW9uICpucylcbiA1NDg6XHR7XG4gNTQ5Olx0XHRpZiAobnMpXG4gNTUwOlx0XHRcdG5ldF9wYXNzaXZlX2RlYyh0b19uZXRfbnMobnMpKTtcbiA1NTE6XHR9XG4gNTUyOlx0XG4gNTUzOlx0c3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxuIDU1NDpcdFx0XHRcdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywgc3RydWN0IG5ldCAqb2xkX25ldClcbiA1NTU6XHR7XG4gNTU2Olx0XHRzdHJ1Y3QgdWNvdW50cyAqdWNvdW50cztcbiA1NTc6XHRcdHN0cnVjdCBuZXQgKm5ldDtcbiA1NTg6XHRcdGludCBydjtcbiA1NTk6XHRcbiA1NjA6XHRcdGlmICghKGZsYWdzIFx1MDAyNiBDTE9ORV9ORVdORVQpKVxuIDU2MTpcdFx0XHRyZXR1cm4gZ2V0X25ldChvbGRfbmV0KTtcbiA1NjI6XHRcbiA1NjM6XHRcdHVjb3VudHMgPSBpbmNfbmV0X25hbWVzcGFjZXModXNlcl9ucyk7XG4gNTY0Olx0XHRpZiAoIXVjb3VudHMpXG4gNTY1Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xuIDU2NjpcdFxuIDU2NzpcdFx0bmV0ID0gbmV0X2FsbG9jKCk7XG4gNTY4Olx0XHRpZiAoIW5ldCkge1xuIDU2OTpcdFx0XHRydiA9IC1FTk9NRU07XG4gNTcwOlx0XHRcdGdvdG8gZGVjX3Vjb3VudHM7XG4gNTcxOlx0XHR9XG4gNTcyOlx0XG4gNTczOlx0XHRydiA9IHByZWluaXRfbmV0KG5ldCwgdXNlcl9ucyk7XG4gNTc0Olx0XHRpZiAocnYgXHUwMDNjIDApXG4gNTc1Olx0XHRcdGdvdG8gZGVjX3Vjb3VudHM7XG4gNTc2Olx0XHRuZXQtXHUwMDNldWNvdW50cyA9IHVjb3VudHM7XG4gNTc3Olx0XHRnZXRfdXNlcl9ucyh1c2VyX25zKTtcbiA1Nzg6XHRcbiA1Nzk6XHRcdHJ2ID0gZG93bl9yZWFkX2tpbGxhYmxlKFx1MDAyNnBlcm5ldF9vcHNfcndzZW0pO1xuIDU4MDpcdFx0aWYgKHJ2IFx1MDAzYyAwKVxuIDU4MTpcdFx0XHRnb3RvIHB1dF91c2VybnM7XG4gNTgyOlx0XG4gNTgzOlx0XHRydiA9IHNldHVwX25ldChuZXQpO1xuIDU4NDpcdFxuIDU4NTpcdFx0dXBfcmVhZChcdTAwMjZwZXJuZXRfb3BzX3J3c2VtKTtcbiA1ODY6XHRcbiA1ODc6XHRcdGlmIChydiBcdTAwM2MgMCkge1xuIDU4ODpcdHB1dF91c2VybnM6XG4gNTg5Olx0XHRcdG5zX2NvbW1vbl9mcmVlKG5ldCk7XG4gNTkwOlx0I2lmZGVmIENPTkZJR19LRVlTXG4gNTkxOlx0XHRcdGtleV9yZW1vdmVfZG9tYWluKG5ldC1cdTAwM2VrZXlfZG9tYWluKTtcbiA1OTI6XHQjZW5kaWZcbiA1OTM6XHRcdFx0cHV0X3VzZXJfbnModXNlcl9ucyk7XG4gNTk0Olx0XHRcdC8qIHNldHVwX25ldCgpIGZhaWx1cmUgaXMgbm90IHJvdXRlZCB0aHJvdWdoIF9fcHV0X25ldCgpLCBzbyB0aGVcbiA1OTU6XHRcdFx0ICogcmVmY250X3RyYWNrZXIgKGFuZCBpdHMgZGVidWdmcyBmaWxlKSBoYXMgdG8gYmUgcmVsZWFzZWQgaGVyZS5cbiA1OTY6XHRcdFx0ICovXG4gNTk3Olx0XHRcdHJlZl90cmFja2VyX2Rpcl9leGl0KFx1MDAyNm5ldC1cdTAwM2VyZWZjbnRfdHJhY2tlcik7XG4gNTk4Olx0XHRcdG5ldF9wYXNzaXZlX2RlYyhuZXQpO1xuIDU5OTpcdGRlY191Y291bnRzOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk3NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBjb3B5X25ldF9uc2AgRnVuY3Rpb24qKgoKT2theSwgc28gYGNvcHlfbmV0X25zYCBpc24mIzM5O3Qgd3JhcHBlZCBpbiBhIGNvbmRpdGlvbmFsIGJhc2VkIG9uIGBDT05GSUdfTkVUX05TYCwgd2hpY2ggaXMgYSBiaXQgdW51c3VhbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MganVzdCBhbHdheXMgY29tcGlsZWQsIHdoaWNoIGlzIHRoZSBleHBlY3RlZCBhcHByb2FjaCBmb3IgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMuIEJ1dCB3YWl0LCBgbmV0X25hbWVzcGFjZS5jYCBpcyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHksIHdoaWNoICpzaG91bGQqIG1lYW4gYGNvcHlfbmV0X25zYCBpcyBhbHdheXMgYXZhaWxhYmxlLiBIb3dldmVyLCB3aGF0IGhhcHBlbnMgd2hlbiBgQ09ORklHX05FVF9OU2AgaXMgKm5vdCogZW5hYmxlZD8gRG9lcyB0aGUgY29tcGlsZXIgb3B0aW1pemUgaXQgb3V0IGVudGlyZWx5PyBPciBkb2VzIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBzdGlsbCBleGlzdCwgZXZlbiBpZiB0aGUgZGVmaW5pdGlvbiBpcyBlZmZlY3RpdmVseSBlbXB0eSBvciBoYW5kbGVkIGRpZmZlcmVudGx5PyBUbyBiZSBjZXJ0YWluLCBJIG5lZWQgdG8gY2hlY2sgYGluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaGAgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgQ09ORklHX05FVF9OU2AgaW4gZGV0YWlsIGFuZCB0byBzZWUgaG93IHRoZSBmdW5jdGlvbiBpdHNlbGYgaXMgaGFuZGxlZCB3aXRoIGFuZCB3aXRob3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29weV9uZXRfbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oPTIxMj1leHRlcm4gc3RydWN0IG5ldCBpbml0X25ldDtcbi0tXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtMjE0LSNpZmRlZiBDT05GSUdfTkVUX05TXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg6MjE1OnN0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHU2NCBmbGFncywgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTIxNi1cdFx0XHRzdHJ1Y3QgbmV0ICpvbGRfbmV0KTtcbi0tXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg9MjI0PWV4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNsZWFudXBfbmV0X3Rhc2s7XG4tLVxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTIyOC0jaW5jbHVkZSBcdTAwM2NsaW51eC9uc3Byb3h5LmhcdTAwM2VcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDoyMjk6c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtMjMwLVx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBzdHJ1Y3QgbmV0ICpvbGRfbmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUxNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBjb3B5X25ldF9uc2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGNvcHlfbmV0X25zYCBmdW5jdGlvbiwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGRlZmluZWQgd2l0aGluIGBuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNgLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCwgdGhlIGltbWVkaWF0ZSBjYXZlYXQgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB0aGUgcG90ZW50aWFsIHJlbGlhbmNlIG9uIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIHNwZWNpZmljYWxseSBgQ09ORklHX05FVF9OU2AuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgZnVuY3Rpb24gaXMgY29tcGlsZWQgaW4gYWxsIHNjZW5hcmlvcyBvciBpcyBjb25kaXRpb25hbCB1cG9uIHRoYXQgc3BlY2lmaWMgS2NvbmZpZyBvcHRpb24gYmVpbmcgZW5hYmxlZC4gSWYgYG5ldC9jb3JlL25ldF9uYW1lc3BhY2UuY2AgaXMgYWx3YXlzIGNvbXBpbGVkLCBob3cgaXMgYGNvcHlfbmV0X25zYCBjb250cm9sbGVkPyBUaGUgYW5zd2VyIG11c3QgYmUgaW4gdGhhdCBzb3VyY2UgZmlsZSBpdHNlbGYuIFRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNgIGFuZCBzZWFyY2ggZm9yIHRoYXQgYCNpZmRlZiBDT05GSUdfTkVUX05TYCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTkVUX05TJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYz00NDA9c3RhdGljIF9fbmV0X2luaXQgaW50IHNldHVwX25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTQ3MC1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo0NzE6I2lmZGVmIENPTkZJR19ORVRfTlNcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy00NzItc3RhdGljIHN0cnVjdCB1Y291bnRzICppbmNfbmV0X25hbWVzcGFjZXMoc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucylcbi0tXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9ODE3PUVYUE9SVF9TWU1CT0xfR1BMKGdldF9uZXRfbnNfYnlfcGlkKTtcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy04MTgtXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6ODE5OiNpZmRlZiBDT05GSUdfTkVUX05TX1JFRkNOVF9UUkFDS0VSXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtODIwLXN0YXRpYyB2b2lkIG5ldF9uc19uZXRfZGVidWdmcyhzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTExODc9c3RhdGljIHZvaWQgcnRubF9uZXRfbm90aWZ5aWQoc3RydWN0IG5ldCAqbmV0LCBpbnQgY21kLCBpbnQgaWQsIHUzMiBwb3J0aWQsXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEyMTUtXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6MTIxNjojaWZkZWYgQ09ORklHX05FVF9OU1xubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEyMTctc3RhdGljIHZvaWQgX19pbml0IG5ldG5zX2lwdjRfc3RydWN0X2NoZWNrKHZvaWQpXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTEyNjc9dm9pZCBfX2luaXQgbmV0X25zX2luaXQodm9pZClcbi0tXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTI3MC1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzoxMjcxOiNpZmRlZiBDT05GSUdfTkVUX05TXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTI3Mi1cdG5ldG5zX2lwdjRfc3RydWN0X2NoZWNrKCk7XG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEzMTEtXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6MTMxMjojaWZkZWYgQ09ORklHX05FVF9OU1xubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEzMTMtc3RhdGljIGludCBfX3JlZ2lzdGVyX3Blcm5ldF9vcGVyYXRpb25zKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTEzNjc9c3RhdGljIHZvaWQgX191bnJlZ2lzdGVyX3Blcm5ldF9vcGVyYXRpb25zKHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyAqb3BzKVxuLS1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMzc4LVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jOjEzNzk6I2VuZGlmIC8qIENPTkZJR19ORVRfTlMgKi9cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMzgwLVxuLS1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYz0xNTE1PUVYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfcGVybmV0X2RldmljZSk7XG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTUxNi1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzoxNTE3OiNpZmRlZiBDT05GSUdfTkVUX05TXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTUxOC1zdGF0aWMgc3RydWN0IG5zX2NvbW1vbiAqbmV0bnNfZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MzgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbml0aWFsIENvbmZ1c2lvbiBhbmQgSW52ZXN0aWdhdGlvbioqCgpIYW5nIG9uIGEgc2Vjb25k4oCmIEkgY291bGQgaGF2ZSBzd29ybiBgY29weV9uZXRfbnNgIHdhcyBzdXBwb3NlZCB0byBiZSBjb25kaXRpb25hbGl6ZWQgYnkgdGhlIGBDT05GSUdfTkVUX05TYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCBhbmQgbm93IEkmIzM5O20gZG91YnRpbmcgdGhhdC4gTXkgbWVudGFsIG1vZGVsIG9mIGBuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNgIHN1Z2dlc3RzIGl0JiMzOTtzIHN1cHBvc2VkIHRvIGJlIGVuY2xvc2VkIHdpdGhpbiB0aGF0IGNvbmRpdGlvbmFsIGJsb2NrLiBUaGlzIGZlZWxzIHdyb25nLgoKUmlnaHQsIHRpbWUgdG8gZ2V0IHRoaXMgc3RyYWlnaHQuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGUgYm91bmRhcmllcyBvZiB0aGF0IGAjaWZkZWYgQ09ORklHX05FVF9OU2AgYmxvY2sgaW4gdGhlIHNvdXJjZSBjb2RlLiBUaGUgbG9jYXRpb24gb2YgdGhlIGNsb3NpbmcgYCNlbmRpZmAgaXMgY3JpdGljYWwgaGVyZS4gSXQmIzM5O3MgcG9zc2libGUgSSYjMzk7bSBtaXNyZW1lbWJlcmluZywgYW5kIGBjb3B5X25ldF9uc2AgKmlzKiBhY3R1YWxseSBvdXRzaWRlIHRoZSBwcm90ZWN0ZWQgc2VjdGlvbiwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoZSBleGFjdCBwbGFjZW1lbnQgYmVmb3JlIEkgY2FuIHByb2NlZWQgd2l0aCBhbnkgdHJvdWJsZXNob290aW5nIG9yIGRlYnVnZ2luZy4gVGhlIGltcGxpY2F0aW9ucyBhcmUgc2lnbmlmaWNhbnQsIGRlcGVuZGluZyBvbiB3aGV0aGVyIGl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3IgYWx3YXlzIHBhcnQgb2YgdGhlIGJ1aWxkLiBUaGlzIHJlcXVpcmVzIGEgcmFwaWQgdmVyaWZpY2F0aW9uIG9mIHRoZSBjb2RlJiMzOTtzIHN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NzEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NzE6XHQjaWZkZWYgQ09ORklHX05FVF9OU1xuIDQ3MjpcdHN0YXRpYyBzdHJ1Y3QgdWNvdW50cyAqaW5jX25ldF9uYW1lc3BhY2VzKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMpXG4gNDczOlx0e1xuIDQ3NDpcdFx0cmV0dXJuIGluY191Y291bnQobnMsIGN1cnJlbnRfZXVpZCgpLCBVQ09VTlRfTkVUX05BTUVTUEFDRVMpO1xuIDQ3NTpcdH1cbiA0NzY6XHRcbiA0Nzc6XHRzdGF0aWMgdm9pZCBkZWNfbmV0X25hbWVzcGFjZXMoc3RydWN0IHVjb3VudHMgKnVjb3VudHMpXG4gNDc4Olx0e1xuIDQ3OTpcdFx0ZGVjX3Vjb3VudCh1Y291bnRzLCBVQ09VTlRfTkVUX05BTUVTUEFDRVMpO1xuIDQ4MDpcdH1cbiA0ODE6XHRcbiA0ODI6XHRzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm5ldF9jYWNoZXAgX19yb19hZnRlcl9pbml0O1xuIDQ4MzpcdHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbmV0bnNfd3E7XG4gNDg0Olx0XG4gNDg1Olx0c3RhdGljIHN0cnVjdCBuZXQgKm5ldF9hbGxvYyh2b2lkKVxuIDQ4NjpcdHtcbiA0ODc6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IE5VTEw7XG4gNDg4Olx0XHRzdHJ1Y3QgbmV0X2dlbmVyaWMgKm5nO1xuIDQ4OTpcdFxuIDQ5MDpcdFx0bmcgPSBuZXRfYWxsb2NfZ2VuZXJpYygpO1xuIDQ5MTpcdFx0aWYgKCFuZylcbiA0OTI6XHRcdFx0Z290byBvdXQ7XG4gNDkzOlx0XG4gNDk0Olx0XHRuZXQgPSBrbWVtX2NhY2hlX3phbGxvYyhuZXRfY2FjaGVwLCBHRlBfS0VSTkVMKTtcbiA0OTU6XHRcdGlmICghbmV0KVxuIDQ5NjpcdFx0XHRnb3RvIG91dF9mcmVlO1xuIDQ5NzpcdFxuIDQ5ODpcdCNpZmRlZiBDT05GSUdfS0VZU1xuIDQ5OTpcdFx0bmV0LVx1MDAzZWtleV9kb21haW4gPSBremFsbG9jX29iaihzdHJ1Y3Qga2V5X3RhZyk7XG4gNTAwOlx0XHRpZiAoIW5ldC1cdTAwM2VrZXlfZG9tYWluKVxuIDUwMTpcdFx0XHRnb3RvIG91dF9mcmVlXzI7XG4gNTAyOlx0XHRyZWZjb3VudF9zZXQoXHUwMDI2bmV0LVx1MDAzZWtleV9kb21haW4tXHUwMDNldXNhZ2UsIDEpO1xuIDUwMzpcdCNlbmRpZlxuIDUwNDpcdFxuIDUwNTpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKG5ldC1cdTAwM2VnZW4sIG5nKTtcbiA1MDY6XHRvdXQ6XG4gNTA3Olx0XHRyZXR1cm4gbmV0O1xuIDUwODpcdFxuIDUwOTpcdCNpZmRlZiBDT05GSUdfS0VZU1xuIDUxMDpcdG91dF9mcmVlXzI6XG4gNTExOlx0XHRrbWVtX2NhY2hlX2ZyZWUobmV0X2NhY2hlcCwgbmV0KTtcbiA1MTI6XHRcdG5ldCA9IE5VTEw7XG4gNTEzOlx0I2VuZGlmXG4gNTE0Olx0b3V0X2ZyZWU6XG4gNTE1Olx0XHRrZnJlZShuZyk7XG4gNTE2Olx0XHRnb3RvIG91dDtcbiA1MTc6XHR9XG4gNTE4Olx0XG4gNTE5Olx0c3RhdGljIExMSVNUX0hFQUQoZGVmZXJfZnJlZV9saXN0KTtcbiA1MjA6XHRcbiA1MjE6XHRzdGF0aWMgdm9pZCBuZXRfY29tcGxldGVfZnJlZSh2b2lkKVxuIDUyMjpcdHtcbiA1MjM6XHRcdHN0cnVjdCBsbGlzdF9ub2RlICpraWxsX2xpc3Q7XG4gNTI0Olx0XHRzdHJ1Y3QgbmV0ICpuZXQsICpuZXh0O1xuIDUyNTpcdFxuIDUyNjpcdFx0LyogR2V0IHRoZSBsaXN0IG9mIG5hbWVzcGFjZXMgdG8gZnJlZSBmcm9tIGxhc3Qgcm91bmQuICovXG4gNTI3Olx0XHRraWxsX2xpc3QgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNmRlZmVyX2ZyZWVfbGlzdCk7XG4gNTI4Olx0XG4gNTI5Olx0XHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5ldCwgbmV4dCwga2lsbF9saXN0LCBkZWZlcl9mcmVlX2xpc3QpXG4gNTMwOlx0XHRcdGttZW1fY2FjaGVfZnJlZShuZXRfY2FjaGVwLCBuZXQpO1xuIDUzMTpcdFxuIDUzMjpcdH1cbiA1MzM6XHRcbiA1MzQ6XHR2b2lkIG5ldF9wYXNzaXZlX2RlYyhzdHJ1Y3QgbmV0ICpuZXQpXG4gNTM1Olx0e1xuIDUzNjpcdFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZuZXQtXHUwMDNlcGFzc2l2ZSkpIHtcbiA1Mzc6XHRcdFx0a2ZyZWUocmN1X2FjY2Vzc19wb2ludGVyKG5ldC1cdTAwM2VnZW4pKTtcbiA1Mzg6XHRcbiA1Mzk6XHRcdFx0LyogVGhlcmUgc2hvdWxkIG5vdCBiZSBhbnkgdHJhY2tlcnMgbGVmdCB0aGVyZS4gKi9cbiA1NDA6XHRcdFx0cmVmX3RyYWNrZXJfZGlyX2V4aXQoXHUwMDI2bmV0LVx1MDAzZW5vdHJlZmNudF90cmFja2VyKTtcbiA1NDE6XHRcbiA1NDI6XHRcdFx0LyogV2FpdCBmb3IgYW4gZXh0cmEgcmN1X2JhcnJpZXIoKSBiZWZvcmUgZmluYWwgZnJlZS4gKi9cbiA1NDM6XHRcdFx0bGxpc3RfYWRkKFx1MDAyNm5ldC1cdTAwM2VkZWZlcl9mcmVlX2xpc3QsIFx1MDAyNmRlZmVyX2ZyZWVfbGlzdCk7XG4gNTQ0Olx0XHR9XG4gNTQ1Olx0fVxuIDU0NjpcdFxuIDU0NzpcdHZvaWQgbmV0X2Ryb3BfbnMoc3RydWN0IG5zX2NvbW1vbiAqbnMpXG4gNTQ4Olx0e1xuIDU0OTpcdFx0aWYgKG5zKVxuIDU1MDpcdFx0XHRuZXRfcGFzc2l2ZV9kZWModG9fbmV0X25zKG5zKSk7XG4gNTUxOlx0fVxuIDU1MjpcdFxuIDU1MzpcdHN0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHU2NCBmbGFncyxcbiA1NTQ6XHRcdFx0XHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsIHN0cnVjdCBuZXQgKm9sZF9uZXQpXG4gNTU1Olx0e1xuIDU1NjpcdFx0c3RydWN0IHVjb3VudHMgKnVjb3VudHM7XG4gNTU3Olx0XHRzdHJ1Y3QgbmV0ICpuZXQ7XG4gNTU4Olx0XHRpbnQgcnY7XG4gNTU5Olx0XG4gNTYwOlx0XHRpZiAoIShmbGFncyBcdTAwMjYgQ0xPTkVfTkVXTkVUKSlcbiA1NjE6XHRcdFx0cmV0dXJuIGdldF9uZXQob2xkX25ldCk7XG4gNTYyOlx0XG4gNTYzOlx0XHR1Y291bnRzID0gaW5jX25ldF9uYW1lc3BhY2VzKHVzZXJfbnMpO1xuIDU2NDpcdFx0aWYgKCF1Y291bnRzKVxuIDU2NTpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTtcbiA1NjY6XHRcbiA1Njc6XHRcdG5ldCA9IG5ldF9hbGxvYygpO1xuIDU2ODpcdFx0aWYgKCFuZXQpIHtcbiA1Njk6XHRcdFx0cnYgPSAtRU5PTUVNO1xuIDU3MDpcdFx0XHRnb3RvIGRlY191Y291bnRzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTIzMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIE11c2luZ3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGNvcHlfbmV0X25zYCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIHdyYXBwZWQgaW4gYW4gYCNpZmRlZiBDT05GSUdfTkVUX05TYCBibG9jayBzdGFydGluZyB3YXkgYmFjayBvbiBsaW5lIDQ3MS4gVGhhdCYjMzk7cyBjbGVhciBlbm91Z2g7IGBDT05GSUdfTkVUX05TYCBpcyBhICpyZXF1aXJlbWVudCogZm9yIHRoaXMgZnVuY3Rpb24gdG8gZXZlbiBleGlzdCBpbiB0aGUgY29tcGlsZWQgY29kZS4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgcmVmX3RyYWNrZXJfZGlyX2V4aXRgIGFuZCB3aGV0aGVyIGl0IGlzIGdvaW5nIHRvIGRvIGFueXRoaW5nIHVzZWZ1bC4gQWgsIGJ1dCB0aGF0JiMzOTtzIGdvaW5nIHRvIGJlIHVzZWxlc3MgdW5sZXNzIHdlIGhhdmUgYENPTkZJR19ORVRfTlNfUkVGQ05UX1RSQUNLRVJgIGRlZmluZWQuIE90aGVyd2lzZSwgaXQgZW5kcyB1cCBiZWluZyB0aGlzIGVtcHR5IGlubGluZSBmdW5jdGlvbi4gQW5kLCBzaW5jZSBJJiMzOTttIGNvbmNlcm5lZCBhYm91dCB0aGF0IGZ1bmN0aW9uLCBsZXQgbWUganVzdCBkb3VibGUgY2hlY2ssIGByZWZfdHJhY2tlcl9kaXJfZXhpdGAgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9yZWZfdHJhY2tlci5oYC4KCkkmIzM5O2QgYmV0dGVyIG1ha2Ugc3VyZSBJIGhhdmUgdGhlICpyaWdodCogY29uZmlnIHNlbGVjdGVkLiBJIG5lZWQgdG8gY29uZmlybSBgQ09ORklHX05FVF9OU19SRUZDTlRfVFJBQ0tFUmAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX05TX1JFRkNOVF9UUkFDS0VSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTYzNgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgTkVUX05TX1JFRkNOVF9UUkFDS0VSYCBpbiB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHRyYWNrIGRvd24gYE5FVF9OU19SRUZDTlRfVFJBQ0tFUmAuIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBpdCYjMzk7cyByZWxhdGVkIHRvIHNvbWUga2luZCBvZiByZWZlcmVuY2UgY291bnQgdHJhY2tpbmcsIGxpa2VseSB3aXRoaW4gbmV0d29yayBuYW1lc3BhY2VzLiBJJiMzOTtsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIHNlYXJjaCB0aHJvdWdoIHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIHdpbGwgYmUgdGhlIGZvdW5kYXRpb25hbCBzdGFydGluZyBwb2ludC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQuIEZyb20gdGhlIEtjb25maWcgY29udGV4dCwgSSBzaG91bGQgZ2V0IHRoZSBpbW1lZGlhdGUgY2x1ZXMgYWJvdXQgd2h5IGl0IGV4aXN0cyBhbmQgd2h5IHNvbWVvbmUgbWlnaHQgd2FudCB0byB1c2UgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfTlNfUkVGQ05UX1RSQUNLRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWcuZGVidWc9Mz1jb25maWcgTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUlxuLS1cbm5ldC9LY29uZmlnLmRlYnVnLTExLVxubmV0L0tjb25maWcuZGVidWc6MTI6Y29uZmlnIE5FVF9OU19SRUZDTlRfVFJBQ0tFUlxubmV0L0tjb25maWcuZGVidWctMTMtXHRib29sIFwmIzM0O0VuYWJsZSBuZXR3b3JraW5nIG5hbWVzcGFjZSByZWZjb3VudCB0cmFja2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTk0MgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRpZ2dpbmcgaW50byBOZXR3b3JrIE5hbWVzcGFjZXMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgaG93IG5ldHdvcmsgbmFtZXNwYWNlIHJlZmVyZW5jZSBjb3VudGluZyBpcyBoYW5kbGVkLiBJIGltbWVkaWF0ZWx5IHNlZSBgTkVUX05TX1JFRkNOVF9UUkFDS0VSYCBtZW50aW9uZWQsIHdoaWNoIGlzIGxpa2VseSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBCdXQgaG9sZCBvbiwgaXNuJiMzOTt0IHRoZXJlIGFub3RoZXIgY29uZmlnIHJlbGF0ZWQgdG8gbmFtZXNwYWNlcywgc29tZXRoaW5nIGZ1bmRhbWVudGFsPyBBaCB5ZXMsIGBORVRfTlNgISBJdCYjMzk7cyBnb3QgdG8gYmUuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhvc2UgdHdvLiBMZXQmIzM5O3Mgc2VlIGhvdyBgTkVUX05TYCBpcyBkZWZpbmVkIGFuZCB3aGF0IGl0IGVuYWJsZXMsIHdoaWNoIHdpbGwgZ2l2ZSBjcnVjaWFsIGNvbnRleHQgdG8gdW5kZXJzdGFuZCBgTkVUX05TX1JFRkNOVF9UUkFDS0VSYC4gVGhpcyBuZWVkcyB0byBiZSB1bmRlcnN0b29kIGlmIEkmIzM5O20gZ29pbmcgdG8gZGV0ZXJtaW5lIHdoaWNoIHBhcnRzIGFyZSBhY3R1YWxseSByZWxldmFudC4gSXQmIzM5O3MgdGltZSB0byBidWlsZCBhIHNvbGlkIGZvdW5kYXRpb24gYmVmb3JlIEkgbG9vayBhdCBhbnl0aGluZyBlbHNlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX05TJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xNDUyPWNvbmZpZyBQSURfTlNcbi0tXG5pbml0L0tjb25maWctMTQ1OS1cbmluaXQvS2NvbmZpZzoxNDYwOmNvbmZpZyBORVRfTlNcbmluaXQvS2NvbmZpZy0xNDYxLVx0Ym9vbCBcJiMzNDtOZXR3b3JrIG5hbWVzcGFjZVwmIzM0O1xuLS1cbm5ldC9LY29uZmlnLmRlYnVnPTM9Y29uZmlnIE5FVF9ERVZfUkVGQ05UX1RSQUNLRVJcbi0tXG5uZXQvS2NvbmZpZy5kZWJ1Zy0xMS1cbm5ldC9LY29uZmlnLmRlYnVnOjEyOmNvbmZpZyBORVRfTlNfUkVGQ05UX1RSQUNLRVJcbm5ldC9LY29uZmlnLmRlYnVnLTEzLVx0Ym9vbCBcJiMzNDtFbmFibGUgbmV0d29ya2luZyBuYW1lc3BhY2UgcmVmY291bnQgdHJhY2tpbmdcJiMzNDtcbi0tXG5uZXQvbnNoL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9uc2gvS2NvbmZpZzoyOm1lbnVjb25maWcgTkVUX05TSFxubmV0L25zaC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIFNlcnZpY2UgSGVhZGVyIChOU0gpIHByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDE1CgkJCQkJCQlvdXRwdXQ6IDEwNwoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBsYW4gZm9yIE5ldCBOYW1lc3BhY2UgUmVzb3VyY2UgTGVhayoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgTkVUX05TYCBhbmQgYE5FVF9OU19SRUZDTlRfVFJBQ0tFUmAuIFRoZSBjb3JlIG9mIHRoZSBpc3N1ZSwgYW5kIHRoZSBmdW5jdGlvbiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgZGlyZWN0bHkgYWRkcmVzc2luZywgaXMgYGNvcHlfbmV0X25zYC4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0b3VjaGVkIGhlcmU/IE5vcGUsIGl0JiMzOTtzIGp1c3QgYGNvcHlfbmV0X25zYC4KCkFscmlnaHQsIGlzIHRoaXMgZXZlbiB3b3J0aCB0aGUgZnV6emluZyBlZmZvcnQ/IEFic29sdXRlbHksIHllcy4gSXQmIzM5O3MgZml4aW5nIGEgY29yZSBrZXJuZWwgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBhIHJlc291cmNlIGxlYWsuIFRoZSBsZWFrIG9jY3VycyB3aGVuIGBzZXR1cF9uZXRgIGZhaWxzLCBhbmQgdGhpcyBwYXRjaCBhaW1zIHRvIGNsZWFuIHRoYXQgdXAuIFRoZSBlcnJvciBwYXRoIG9mIGBjb3B5X25ldF9uc2AsIHRyaWdnZXJlZCBwb3RlbnRpYWxseSBieSBmYXVsdCBpbmplY3Rpb24sIGlzIHdoZXJlIHRoaXMgcHJvYmxlbSByZXNpZGVzLgoKU28sIGhlcmUmIzM5O3MgdGhlIHBsYW4sIGluIHNob3J0IGZvcm06CgoqICAgKipXb3J0aEZ1enppbmcqKjogVHJ1ZS4gQWJzb2x1dGVseS4KKiAgICoqRm9jdXNTeW1ib2xzKio6IGBjb3B5X25ldF9uc2AuIFRoYXQmIzM5O3MgdGhlIHByaW1hcnkgdGFyZ2V0LgoqICAgKipFbmFibGVDb25maWdzKio6IGBORVRfTlNgIGFuZCBgTkVUX05TX1JFRkNOVF9UUkFDS0VSYC4gV2UgbmVlZCB0aGVzZSBlbmFibGVkIGZvciB0aGUgcmVsZXZhbnQgY29kZSB0byBldmVuIGJlIGFjdGl2ZS4KKiAgICoqUmVhc29uaW5nKio6IFRoaXMgcGF0Y2ggaXMgYSBmaXggZm9yIGEgcmVzb3VyY2UgbGVhayAoc3BlY2lmaWNhbGx5IHRoZSByZWZjbnRfdHJhY2tlciBhbmQgaXRzIGRlYnVnZnMgZmlsZSkuIFRoZSBsZWFrIGFwcGVhcnMgaW4gdGhlIGVycm9yIHBhdGggb2YgYGNvcHlfbmV0X25zYCB3aGVuIGBzZXR1cF9uZXRgIGlzIHVuYWJsZSB0byBjb21wbGV0ZSBpdHMgc2V0dXAuIEZhdWx0IGluamVjdGlvbiB3aGVuIGZ1enppbmcgYGNvcHlfbmV0X25zYCBzaG91bGQgcmV2ZWFsIHRoZSBlZmZpY2FjeSBvZiB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX05TJiMzNDssCiAgICAmIzM0O05FVF9OU19SRUZDTlRfVFJBQ0tFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvcHlfbmV0X25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmVzb3VyY2UgbGVhayAocmVmY250X3RyYWNrZXIgYW5kIGl0cyBkZWJ1Z2ZzIGZpbGUpIGluIHRoZSBlcnJvciBwYXRoIG9mIGNvcHlfbmV0X25zKCkgd2hlbiBzZXR1cF9uZXQoKSBmYWlscy4gRnV6emluZyBjb3B5X25ldF9ucyB3aXRoIGZhdWx0IGluamVjdGlvbiBjYW4gaGVscCB2ZXJpZnkgdGhlIGZpeC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX05TJiMzNDssCiAgICAmIzM0O05FVF9OU19SRUZDTlRfVFJBQ0tFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvcHlfbmV0X25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmVzb3VyY2UgbGVhayAocmVmY250X3RyYWNrZXIgYW5kIGl0cyBkZWJ1Z2ZzIGZpbGUpIGluIHRoZSBlcnJvciBwYXRoIG9mIGNvcHlfbmV0X25zKCkgd2hlbiBzZXR1cF9uZXQoKSBmYWlscy4gRnV6emluZyBjb3B5X25ldF9ucyB3aXRoIGZhdWx0IGluamVjdGlvbiBjYW4gaGVscCB2ZXJpZnkgdGhlIGZpeC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBjYWxsIHRvIGByZWZfdHJhY2tlcl9kaXJfZXhpdCgpYCBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgY29weV9uZXRfbnMoKWAgdG8gcHJldmVudCBhIHJlc291cmNlIGxlYWsgKHNwZWNpZmljYWxseSwgYSBkZWJ1Z2ZzIGZpbGUgYW5kIHJlZmNudF90cmFja2VyIHJlc291cmNlcykgd2hlbiBgc2V0dXBfbmV0KClgIGZhaWxzLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IG1vZGlmeSBhbnkgZGF0YSBzZW50IHRvIHVzZXIgc3BhY2Ugb3IgYWx0ZXIgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBSZXNvdXJjZSBsZWFrcyBhbmQgbWVtb3J5IGxlYWtzIGFyZSB0eXBpY2FsbHkgZGV0ZWN0ZWQgYnkgS01FTUxFQUssIHdoaWxlIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYnVncyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ1MGY4MmRmYjIyZTg5M2Q4MmJjOWE2MzA2NDI4OTBiZTAzN2NmYjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAwNTo0MToyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYwppbmRleCBhOTFkMmI1OGFhZGRmLi4wYzNmMTY5ZDlhZmJjIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jCkBAIC01OTEsNiAmIzQzOzU5MSwxMCBAQCBzdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsCiAJCWtleV9yZW1vdmVfZG9tYWluKG5ldC0mZ3Q7a2V5X2RvbWFpbik7CiAjZW5kaWYKIAkJcHV0X3VzZXJfbnModXNlcl9ucyk7CiYjNDM7CQkvKiBzZXR1cF9uZXQoKSBmYWlsdXJlIGlzIG5vdCByb3V0ZWQgdGhyb3VnaCBfX3B1dF9uZXQoKSwgc28gdGhlCiYjNDM7CQkgKiByZWZjbnRfdHJhY2tlciAoYW5kIGl0cyBkZWJ1Z2ZzIGZpbGUpIGhhcyB0byBiZSByZWxlYXNlZCBoZXJlLgomIzQzOwkJICovCiYjNDM7CQlyZWZfdHJhY2tlcl9kaXJfZXhpdCgmYW1wO25ldC0mZ3Q7cmVmY250X3RyYWNrZXIpOwogCQluZXRfcGFzc2l2ZV9kZWMobmV0KTsKIGRlY191Y291bnRzOgogCQlkZWNfbmV0X25hbWVzcGFjZXModWNvdW50cyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE2CgkJCQkJCQlvdXRwdXQ6IDE3OQoJCQkJCQkJdGhvdWdodHM6IDUzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jYCwgd2hpY2ggYWRkcyBgcmVmX3RyYWNrZXJfZGlyX2V4aXQoJmFtcDtuZXQtJmd0O3JlZmNudF90cmFja2VyKTtgIHRvIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgY29weV9uZXRfbnMoKWAuICBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgcmVzb3VyY2UgY2xlYW51cCDigJMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhaywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGByZWZjbnRfdHJhY2tlcmAmIzM5O3MgZGVidWdmcyBmaWxlLCB3aGVuIGBzZXR1cF9uZXQoKWAgZmFpbHMuIEl0IHNlZW1zIGEgYml0IGxpa2UgYSBzdGFuZGFyZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgYXBwcm9hY2gsIHdoaWNoIGlzIGdvb2QgdG8gc2VlLgoKTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQnV0LCByZXZpZXdpbmcgdGhlIGNvZGUsIGl0JiMzOTtzIGNsZWFyIHRoaXMgcGF0Y2ggc2ltcGx5ICpmcmVlcyogb3IgY2xlYW5zIHVwIGEgcmVzb3VyY2Ugd2l0aCBgcmVmX3RyYWNrZXJfZGlyX2V4aXQoKWAuIEl0JiMzOTtzIGEgY2xlYW51cCwgbm90IGFuIGFsbG9jYXRpb24gb3IgdXNhZ2UuIFRoZXJlJiMzOTtzIG5vIGNyZWF0aW9uIG9mIG5ldyBkYXRhIHN0cnVjdHVyZXMgdGhhdCBtaWdodCBoYXJib3IgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBhbnkgbW9kaWZpY2F0aW9uIG9mIGRhdGEgdGhhdCYjMzk7cyB0aGVuIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gIEl0JiMzOTtzIGp1c3QgcmVsZWFzaW5nIHJlc291cmNlcywgdGhhdCBmYWlsZWQgZHVyaW5nIGluaXRpYWwgc2V0dXAuICBTbywgbm8sIHRoaXMgZG9lc24mIzM5O3Qgc2VlbSB0byBpbnRyb2R1Y2UgYW55IEtNU0FOIGlzc3Vlcy4KCkkgcXVpY2tseSBkb3VibGUtY2hlY2tlZCBgcmVmX3RyYWNrZXJfZGlyX2V4aXRgIGl0c2VsZiB0byBjb25maXJtIG15IGluaXRpYWwgaW1wcmVzc2lvbjogaXQmIzM5O3MgYWxsIGFib3V0IGZyZWVpbmcsIG5vdCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGxlYWtpbmcgaXQgdG8gdXNlciBzcGFjZS4gVGhhdCBzb2xpZGlmaWVzIG15IGNvbmNsdXNpb24gdGhhdCB0aGlzIHBhdGNoIGlzIEtNU0FOLXNhZmUuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHByZXZlbnRpbmcgYSBsZWFrLCBub3QgaW50cm9kdWNpbmcgYSB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyByZWFkLCBvciBvdGhlciBzaW1pbGFyIGlzc3VlIEtBU0FOIGFuZCBLTUVNTEVBSyBhcmUgZGVzaWduZWQgdG8gaGFuZGxlLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2gmIzM5O3MgcHVycG9zZSBpcyB0byBwcmV2ZW50IGEgcmVzb3VyY2UgbGVhay4gVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBjYWxsIHRvIGByZWZfdHJhY2tlcl9kaXJfZXhpdCgpYCBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgY29weV9uZXRfbnMoKWAgdG8gcHJldmVudCBhIHJlc291cmNlIGxlYWsgd2hlbiBgc2V0dXBfbmV0KClgIGZhaWxzLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IG1vZGlmeSBhbnkgZGF0YSBzZW50IHRvIHVzZXIgc3BhY2Ugb3IgYWx0ZXIgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBSZXNvdXJjZSBsZWFrcyBhbmQgbWVtb3J5IGxlYWtzIGFyZSB0eXBpY2FsbHkgZGV0ZWN0ZWQgYnkgS01FTUxFQUssIHdoaWxlIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYnVncyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIENvbnNlcXVlbnRseSwgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeSBmb3IgdGhpcyBwYXRjaC4gSSB0aGluayB0aGlzIG9uZSYjMzk7cyBhIGNsZWFuICYjMzQ7TmVlZHNLTVNBTjogZmFsc2UmIzM0Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgY2FsbCB0byBgcmVmX3RyYWNrZXJfZGlyX2V4aXQoKWAgaW4gdGhlIGVycm9yIHBhdGggb2YgYGNvcHlfbmV0X25zKClgIHRvIHByZXZlbnQgYSByZXNvdXJjZSBsZWFrIChzcGVjaWZpY2FsbHksIGEgZGVidWdmcyBmaWxlIGFuZCByZWZjbnRfdHJhY2tlciByZXNvdXJjZXMpIHdoZW4gYHNldHVwX25ldCgpYCBmYWlscy4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBub3IgZG9lcyBpdCBtb2RpZnkgYW55IGRhdGEgc2VudCB0byB1c2VyIHNwYWNlIG9yIGFsdGVyIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gUmVzb3VyY2UgbGVha3MgYW5kIG1lbW9yeSBsZWFrcyBhcmUgdHlwaWNhbGx5IGRldGVjdGVkIGJ5IEtNRU1MRUFLLCB3aGlsZSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGJ1Z3Mgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgY2FsbCB0byBgcmVmX3RyYWNrZXJfZGlyX2V4aXQoKWAgaW4gdGhlIGVycm9yIHBhdGggb2YgYGNvcHlfbmV0X25zKClgIHRvIHByZXZlbnQgYSByZXNvdXJjZSBsZWFrIChzcGVjaWZpY2FsbHksIGEgZGVidWdmcyBmaWxlIGFuZCByZWZjbnRfdHJhY2tlciByZXNvdXJjZXMpIHdoZW4gYHNldHVwX25ldCgpYCBmYWlscy4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBub3IgZG9lcyBpdCBtb2RpZnkgYW55IGRhdGEgc2VudCB0byB1c2VyIHNwYWNlIG9yIGFsdGVyIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gUmVzb3VyY2UgbGVha3MgYW5kIG1lbW9yeSBsZWFrcyBhcmUgdHlwaWNhbGx5IGRldGVjdGVkIGJ5IEtNRU1MRUFLLCB3aGlsZSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGJ1Z3Mgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MToyMy4zNDA0NzUyOTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTY1OTU5NDY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfTlNcIixcbiAgICBcIk5FVF9OU19SRUZDTlRfVFJBQ0tFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvcHlfbmV0X25zXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBjYWxsIHRvIGByZWZfdHJhY2tlcl9kaXJfZXhpdCgpYCBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgY29weV9uZXRfbnMoKWAgdG8gcHJldmVudCBhIHJlc291cmNlIGxlYWsgKHNwZWNpZmljYWxseSwgYSBkZWJ1Z2ZzIGZpbGUgYW5kIHJlZmNudF90cmFja2VyIHJlc291cmNlcykgd2hlbiBgc2V0dXBfbmV0KClgIGZhaWxzLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IG1vZGlmeSBhbnkgZGF0YSBzZW50IHRvIHVzZXIgc3BhY2Ugb3IgYWx0ZXIgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBSZXNvdXJjZSBsZWFrcyBhbmQgbWVtb3J5IGxlYWtzIGFyZSB0eXBpY2FsbHkgZGV0ZWN0ZWQgYnkgS01FTUxFQUssIHdoaWxlIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYnVncyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIChyZWZjbnRfdHJhY2tlciBhbmQgaXRzIGRlYnVnZnMgZmlsZSkgaW4gdGhlIGVycm9yIHBhdGggb2YgY29weV9uZXRfbnMoKSB3aGVuIHNldHVwX25ldCgpIGZhaWxzLiBGdXp6aW5nIGNvcHlfbmV0X25zIHdpdGggZmF1bHQgaW5qZWN0aW9uIGNhbiBoZWxwIHZlcmlmeSB0aGUgZml4LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MToyMy4zNDA0Nzk3NDZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NzAyMDMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ1MGY4MmRmYjIyZTg5M2Q4MmJjOWE2MzA2NDI4OTBiZTAzN2NmYjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjcgMDU6NDE6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jIGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jXFxuaW5kZXggYTkxZDJiNThhYWRkZi4uMGMzZjE2OWQ5YWZiYyAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcXG4rKysgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcXG5AQCAtNTkxLDYgKzU5MSwxMCBAQCBzdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsXFxuIFxcdFxcdGtleV9yZW1vdmVfZG9tYWluKG5ldC1cXHUwMDNla2V5X2RvbWFpbik7XFxuICNlbmRpZlxcbiBcXHRcXHRwdXRfdXNlcl9ucyh1c2VyX25zKTtcXG4rXFx0XFx0Lyogc2V0dXBfbmV0KCkgZmFpbHVyZSBpcyBub3Qgcm91dGVkIHRocm91Z2ggX19wdXRfbmV0KCksIHNvIHRoZVxcbitcXHRcXHQgKiByZWZjbnRfdHJhY2tlciAoYW5kIGl0cyBkZWJ1Z2ZzIGZpbGUpIGhhcyB0byBiZSByZWxlYXNlZCBoZXJlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmVmX3RyYWNrZXJfZGlyX2V4aXQoXFx1MDAyNm5ldC1cXHUwMDNlcmVmY250X3RyYWNrZXIpO1xcbiBcXHRcXHRuZXRfcGFzc2l2ZV9kZWMobmV0KTtcXG4gZGVjX3Vjb3VudHM6XFxuIFxcdFxcdGRlY19uZXRfbmFtZXNwYWNlcyh1Y291bnRzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDE6MjMuOTI4MzUyOTg1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODQ0NTU3OTU0NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX05TXCIsXG4gICAgXCJORVRfTlNfUkVGQ05UX1RSQUNLRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb3B5X25ldF9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmVzb3VyY2UgbGVhayAocmVmY250X3RyYWNrZXIgYW5kIGl0cyBkZWJ1Z2ZzIGZpbGUpIGluIHRoZSBlcnJvciBwYXRoIG9mIGNvcHlfbmV0X25zKCkgd2hlbiBzZXR1cF9uZXQoKSBmYWlscy4gRnV6emluZyBjb3B5X25ldF9ucyB3aXRoIGZhdWx0IGluamVjdGlvbiBjYW4gaGVscCB2ZXJpZnkgdGhlIGZpeC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDUwZjgyZGZiMjJlODkzZDgyYmM5YTYzMDY0Mjg5MGJlMDM3Y2ZiMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDA1OjQxOjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jIGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jXG5pbmRleCBhOTFkMmI1OGFhZGRmLi4wYzNmMTY5ZDlhZmJjIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jXG4rKysgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcbkBAIC01OTEsNiArNTkxLDEwIEBAIHN0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHU2NCBmbGFncyxcbiBcdFx0a2V5X3JlbW92ZV9kb21haW4obmV0LVx1MDAzZWtleV9kb21haW4pO1xuICNlbmRpZlxuIFx0XHRwdXRfdXNlcl9ucyh1c2VyX25zKTtcbitcdFx0Lyogc2V0dXBfbmV0KCkgZmFpbHVyZSBpcyBub3Qgcm91dGVkIHRocm91Z2ggX19wdXRfbmV0KCksIHNvIHRoZVxuK1x0XHQgKiByZWZjbnRfdHJhY2tlciAoYW5kIGl0cyBkZWJ1Z2ZzIGZpbGUpIGhhcyB0byBiZSByZWxlYXNlZCBoZXJlLlxuK1x0XHQgKi9cbitcdFx0cmVmX3RyYWNrZXJfZGlyX2V4aXQoXHUwMDI2bmV0LVx1MDAzZXJlZmNudF90cmFja2VyKTtcbiBcdFx0bmV0X3Bhc3NpdmVfZGVjKG5ldCk7XG4gZGVjX3Vjb3VudHM6XG4gXHRcdGRlY19uZXRfbmFtZXNwYWNlcyh1Y291bnRzKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjQxOjIzLjkyODM1NDUwNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNjQ2NjY2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXQgTmFtZXNwYWNlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9jb3JlL25ldF9uYW1lc3BhY2UuY2AuIEl0IHNlZW1zIHRoZXkndmUgYWRkZWQgYHJlZl90cmFja2VyX2Rpcl9leGl0KFx1MDAyNm5ldC1cdTAwM2VyZWZjbnRfdHJhY2tlcik7YCB0byB0aGUgZXJyb3IgcGF0aCBvZiBgY29weV9uZXRfbnMoKWAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJBaCwgcmlnaHQsIHJlc291cmNlIHRyYWNraW5nIOKAkyBnb29kLlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGFkZGl0aW9uIGlzIG5lY2Vzc2FyeS4gT2J2aW91c2x5LCB0aGlzIGlzIGFib3V0IGhhbmRsaW5nIHJlZmVyZW5jZSBjb3VudHMgd2l0aGluIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBhbmQgY2xlYW5pbmcgdXAgY29ycmVjdGx5IHdoZW4gdGhlcmUncyBhIGZhaWx1cmUgZHVyaW5nIHRoZSBjb3B5LiBJIGJldHRlciBkaWcgaW50byB0aGUgYGNvcHlfbmV0X25zKClgIGZ1bmN0aW9uIGl0c2VsZiB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBjb250ZXh0IGFuZCB3aGF0IGNvdWxkIGhhdmUgYmVlbiBtaXNzZWQgcHJldmlvdXNseSB0aGF0IHRyaWdnZXJlZCB0aGlzIGZpeC4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDE6MjguMjkzMDIzNzAxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTA1Njg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvcHlfbmV0X25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9NTQ3PXZvaWQgbmV0X2Ryb3BfbnMoc3RydWN0IG5zX2NvbW1vbiAqbnMpXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNTUyLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo1NTM6c3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy01NTQtXFx0XFx0XFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBzdHJ1Y3QgbmV0ICpvbGRfbmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MToyOC4zNDA5MzQ0NDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTA3MTg0NDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBjb3B5X25ldF9ucygpYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgY29weV9uZXRfbnMoKWAuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2Qgd2hlbiBhIG5ldHdvcmsgbmFtZXNwYWNlIGlzIGR1cGxpY2F0ZWQsIHNvIEknbSBoZWFkaW5nIHN0cmFpZ2h0IGZvciB0aGUgc291cmNlIGNvZGUgaW4gYG5ldC9jb3JlL25ldF9uYW1lc3BhY2UuY2AuIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSB0aGUgY29yZSBvZiB0aGUgZHVwbGljYXRpb24gcHJvY2Vzcywgc28gSSdsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZTpcblxuKiAgICoqUmVzb3VyY2UgRHVwbGljYXRpb24gdnMuIFNoYXJpbmc6KiogSXMgaXQgYSBmdWxsIGRlZXAgY29weSwgb3IgZG9lcyBpdCBjbGV2ZXJseSBzaGFyZSBjZXJ0YWluIHJlc291cmNlcyB3aGVyZSBwb3NzaWJsZSB0byBtaW5pbWl6ZSBvdmVyaGVhZD8gSSdtIHBhcnRpY3VsYXJseSBjdXJpb3VzIGFib3V0IHRoaW5ncyBsaWtlIHJvdXRlcywgYWRkcmVzc2VzLCBhbmQgb3RoZXIgbmV0d29yayBzdGF0ZS4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgdHJhZGUtb2ZmcyBiZXR3ZWVuIGEgY29tcGxldGUgY29weSBhbmQgcG90ZW50aWFsIHNoYXJlZCBzdGF0ZS5cbiogICAqKlBJRCBhbmQgTmFtZXNwYWNlIEFzc29jaWF0aW9uOioqIEhvdyBpcyB0aGUgbmV3IG5hbWVzcGFjZSBsaW5rZWQgdG8gcHJvY2Vzc2VzPyBJcyB0aGVyZSBhIGNsZWFuIHNlcGFyYXRpb24sIG9yIGFyZSB0aGVyZSBwb3RlbnRpYWwgZ290Y2hhcyByZWxhdGVkIHRvIHByb2Nlc3MgbGlmZXRpbWVzIGFuZCBuYW1lc3BhY2UgbWVtYmVyc2hpcD8gV2hhdCBpcyBnb2luZyBvbiBmb3IgdGFza3MgdGhhdCBtaWdyYXRlIGJldHdlZW4gbmFtZXNwYWNlcz9cbiogICAqKlN5bmNocm9uaXphdGlvbjoqKiBHaXZlbiB0aGUgbXVsdGktdGhyZWFkZWQgbmF0dXJlIG9mIHRoZSBrZXJuZWwsIEknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgbG9ja2luZyBtZWNoYW5pc21zIG9yIGF0b21pYyBvcGVyYXRpb25zIHVzZWQgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IGR1cmluZyB0aGUgY29weS4gQW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYXJlIGEgYmlnIHJlZCBmbGFnIGluIHRoaXMgYXJlYSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlbSBmdWxseS5cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQga2luZCBvZiBlcnJvciBjaGVja2luZyBpcyBpbXBsZW1lbnRlZCwgYW5kIGhvdyBhcmUgZmFpbHVyZXMgaGFuZGxlZD8gVGhlIG5ldHdvcmsgbmFtZXNwYWNlIG1lY2hhbmlzbSBpcyBwcmV0dHkgY29tcGxleCwgc28gSSBpbWFnaW5lIHRoZXJlIGFyZSBhIGxvdCBvZiBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMuIEhvdyBncmFjZWZ1bGx5IGRvZXMgdGhpcyBmdW5jdGlvbiBkZWFsIHdpdGggdGhlbT9cbiogICAqKkhvb2tzIGFuZCBFeHRlbnNpb25zOioqIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBleHRlbnNpYmxlLCBwZXJoYXBzIHRocm91Z2ggaG9va3Mgb3IgY2FsbGJhY2tzLiBUaGlzIHdvdWxkIGdpdmUgY2x1ZXMgdG8gaG93IG90aGVyIG1vZHVsZXMgY2FuIGludGVncmF0ZSB3aXRoIG5ldHdvcmsgbmFtZXNwYWNlIGNyZWF0aW9uLlxuKiAgICoqTWVtb3J5IE1hbmFnZW1lbnQ6KiogSG93IGRvZXMgbWVtb3J5IGdldCBoYW5kbGVkPyBJcyB0aGVyZSBwb3RlbnRpYWwgZm9yIGZyYWdtZW50YXRpb24gb3IgbWVtb3J5IGxlYWtzPyBJZiBhbnl0aGluZyBpcyBhbGxvY2F0ZWQsIEknbGwgYmUgbG9va2luZyBmb3IgcmVsYXRlZCBga2ZyZWUoKWAgY291bnRlcnBhcnRzLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRob3JvdWdobHksIGFzIGFueSB3ZWFrbmVzcyBpbiB0aGlzIGZ1bmN0aW9uIGNvdWxkIGhhdmUgcmlwcGxlIGVmZmVjdHMuIFRoaXMgaXMgYSBjcnVjaWFsIGNvbXBvbmVudCB0aGF0IGRpcmVjdGx5IGluZmx1ZW5jZXMgdGhlIHN0YWJpbGl0eSwgcGVyZm9ybWFuY2UsIGFuZCBzZWN1cml0eSBvZiBjb250YWluZXJpemVkIGVudmlyb25tZW50cyBhbmQgb3RoZXIgbW9kZXJuIG5ldHdvcmtpbmcgYXBwbGljYXRpb25zLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzOTYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MTozMy40NDgxMjE0MjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU1MyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NTM6XFx0c3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxcbiA1NTQ6XFx0XFx0XFx0XFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBzdHJ1Y3QgbmV0ICpvbGRfbmV0KVxcbiA1NTU6XFx0e1xcbiA1NTY6XFx0XFx0c3RydWN0IHVjb3VudHMgKnVjb3VudHM7XFxuIDU1NzpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQ7XFxuIDU1ODpcXHRcXHRpbnQgcnY7XFxuIDU1OTpcXHRcXG4gNTYwOlxcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgQ0xPTkVfTkVXTkVUKSlcXG4gNTYxOlxcdFxcdFxcdHJldHVybiBnZXRfbmV0KG9sZF9uZXQpO1xcbiA1NjI6XFx0XFxuIDU2MzpcXHRcXHR1Y291bnRzID0gaW5jX25ldF9uYW1lc3BhY2VzKHVzZXJfbnMpO1xcbiA1NjQ6XFx0XFx0aWYgKCF1Y291bnRzKVxcbiA1NjU6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7XFxuIDU2NjpcXHRcXG4gNTY3OlxcdFxcdG5ldCA9IG5ldF9hbGxvYygpO1xcbiA1Njg6XFx0XFx0aWYgKCFuZXQpIHtcXG4gNTY5OlxcdFxcdFxcdHJ2ID0gLUVOT01FTTtcXG4gNTcwOlxcdFxcdFxcdGdvdG8gZGVjX3Vjb3VudHM7XFxuIDU3MTpcXHRcXHR9XFxuIDU3MjpcXHRcXG4gNTczOlxcdFxcdHJ2ID0gcHJlaW5pdF9uZXQobmV0LCB1c2VyX25zKTtcXG4gNTc0OlxcdFxcdGlmIChydiBcXHUwMDNjIDApXFxuIDU3NTpcXHRcXHRcXHRnb3RvIGRlY191Y291bnRzO1xcbiA1NzY6XFx0XFx0bmV0LVxcdTAwM2V1Y291bnRzID0gdWNvdW50cztcXG4gNTc3OlxcdFxcdGdldF91c2VyX25zKHVzZXJfbnMpO1xcbiA1Nzg6XFx0XFxuIDU3OTpcXHRcXHRydiA9IGRvd25fcmVhZF9raWxsYWJsZShcXHUwMDI2cGVybmV0X29wc19yd3NlbSk7XFxuIDU4MDpcXHRcXHRpZiAocnYgXFx1MDAzYyAwKVxcbiA1ODE6XFx0XFx0XFx0Z290byBwdXRfdXNlcm5zO1xcbiA1ODI6XFx0XFxuIDU4MzpcXHRcXHRydiA9IHNldHVwX25ldChuZXQpO1xcbiA1ODQ6XFx0XFxuIDU4NTpcXHRcXHR1cF9yZWFkKFxcdTAwMjZwZXJuZXRfb3BzX3J3c2VtKTtcXG4gNTg2OlxcdFxcbiA1ODc6XFx0XFx0aWYgKHJ2IFxcdTAwM2MgMCkge1xcbiA1ODg6XFx0cHV0X3VzZXJuczpcXG4gNTg5OlxcdFxcdFxcdG5zX2NvbW1vbl9mcmVlKG5ldCk7XFxuIDU5MDpcXHQjaWZkZWYgQ09ORklHX0tFWVNcXG4gNTkxOlxcdFxcdFxcdGtleV9yZW1vdmVfZG9tYWluKG5ldC1cXHUwMDNla2V5X2RvbWFpbik7XFxuIDU5MjpcXHQjZW5kaWZcXG4gNTkzOlxcdFxcdFxcdHB1dF91c2VyX25zKHVzZXJfbnMpO1xcbiA1OTQ6XFx0XFx0XFx0Lyogc2V0dXBfbmV0KCkgZmFpbHVyZSBpcyBub3Qgcm91dGVkIHRocm91Z2ggX19wdXRfbmV0KCksIHNvIHRoZVxcbiA1OTU6XFx0XFx0XFx0ICogcmVmY250X3RyYWNrZXIgKGFuZCBpdHMgZGVidWdmcyBmaWxlKSBoYXMgdG8gYmUgcmVsZWFzZWQgaGVyZS5cXG4gNTk2OlxcdFxcdFxcdCAqL1xcbiA1OTc6XFx0XFx0XFx0cmVmX3RyYWNrZXJfZGlyX2V4aXQoXFx1MDAyNm5ldC1cXHUwMDNlcmVmY250X3RyYWNrZXIpO1xcbiA1OTg6XFx0XFx0XFx0bmV0X3Bhc3NpdmVfZGVjKG5ldCk7XFxuIDU5OTpcXHRkZWNfdWNvdW50czpcXG4gNjAwOlxcdFxcdFxcdGRlY19uZXRfbmFtZXNwYWNlcyh1Y291bnRzKTtcXG4gNjAxOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKHJ2KTtcXG4gNjAyOlxcdFxcdH1cXG4gNjAzOlxcdFxcdHJldHVybiBuZXQ7XFxuIDYwNDpcXHR9XFxuIDYwNTpcXHRcXG4gNjA2OlxcdC8qKlxcbiA2MDc6XFx0ICogbmV0X25zX2dldF9vd25lcnNoaXAgLSBnZXQgc3lzZnMgb3duZXJzaGlwIGRhdGEgZm9yIEBuZXRcXG4gNjA4OlxcdCAqIEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlIGluIHF1ZXN0aW9uIChjYW4gYmUgTlVMTClcXG4gNjA5OlxcdCAqIEB1aWQ6IGtlcm5lbCB1c2VyIElEIGZvciBzeXNmcyBvYmplY3RzXFxuIDYxMDpcXHQgKiBAZ2lkOiBrZXJuZWwgZ3JvdXAgSUQgZm9yIHN5c2ZzIG9iamVjdHNcXG4gNjExOlxcdCAqXFxuIDYxMjpcXHQgKiBSZXR1cm5zIHRoZSB1aWQvZ2lkIHBhaXIgb2Ygcm9vdCBpbiB0aGUgdXNlciBuYW1lc3BhY2UgYXNzb2NpYXRlZCB3aXRoIHRoZVxcbiA2MTM6XFx0ICogZ2l2ZW4gbmV0d29yayBuYW1lc3BhY2UuXFxuIDYxNDpcXHQgKi9cXG4gNjE1OlxcdHZvaWQgbmV0X25zX2dldF9vd25lcnNoaXAoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBrdWlkX3QgKnVpZCwga2dpZF90ICpnaWQpXFxuIDYxNjpcXHR7XFxuIDYxNzpcXHRcXHRpZiAobmV0KSB7XFxuIDYxODpcXHRcXHRcXHRrdWlkX3QgbnNfcm9vdF91aWQgPSBtYWtlX2t1aWQobmV0LVxcdTAwM2V1c2VyX25zLCAwKTtcXG4gNjE5OlxcdFxcdFxcdGtnaWRfdCBuc19yb290X2dpZCA9IG1ha2Vfa2dpZChuZXQtXFx1MDAzZXVzZXJfbnMsIDApO1xcbiA2MjA6XFx0XFxuIDYyMTpcXHRcXHRcXHRpZiAodWlkX3ZhbGlkKG5zX3Jvb3RfdWlkKSlcXG4gNjIyOlxcdFxcdFxcdFxcdCp1aWQgPSBuc19yb290X3VpZDtcXG4gNjIzOlxcdFxcbiA2MjQ6XFx0XFx0XFx0aWYgKGdpZF92YWxpZChuc19yb290X2dpZCkpXFxuIDYyNTpcXHRcXHRcXHRcXHQqZ2lkID0gbnNfcm9vdF9naWQ7XFxuIDYyNjpcXHRcXHR9IGVsc2Uge1xcbiA2Mjc6XFx0XFx0XFx0KnVpZCA9IEdMT0JBTF9ST09UX1VJRDtcXG4gNjI4OlxcdFxcdFxcdCpnaWQgPSBHTE9CQUxfUk9PVF9HSUQ7XFxuIDYyOTpcXHRcXHR9XFxuIDYzMDpcXHR9XFxuIDYzMTpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZXRfbnNfZ2V0X293bmVyc2hpcCk7XFxuIDYzMjpcXHRcXG4gNjMzOlxcdHN0YXRpYyB2b2lkIHVuaGFzaF9uc2lkKHN0cnVjdCBuZXQgKmxhc3QpXFxuIDYzNDpcXHR7XFxuIDYzNTpcXHRcXHRzdHJ1Y3QgbmV0ICp0bXAsICpwZWVyO1xcbiA2MzY6XFx0XFxuIDYzNzpcXHRcXHQvKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGZyb20gY2xlYW51cF9uZXQoKSB3b3JrLFxcbiA2Mzg6XFx0XFx0ICogYW5kIHRoaXMgd29yayBpcyB0aGUgb25seSBwcm9jZXNzLCB0aGF0IG1heSBkZWxldGVcXG4gNjM5OlxcdFxcdCAqIGEgbmV0IGZyb20gbmV0X25hbWVzcGFjZV9saXN0LiBTbywgd2hlbiB0aGUgYmVsb3dcXG4gNjQwOlxcdFxcdCAqIGlzIGV4ZWN1dGluZywgdGhlIGxpc3QgbWF5IG9ubHkgZ3Jvdy4gVGh1cywgd2UgZG8gbm90XFxuIDY0MTpcXHRcXHQgKiB1c2UgZm9yX2VhY2hfbmV0X3JjdSgpIG9yIG5ldF9yd3NlbS5cXG4gNjQyOlxcdFxcdCAqL1xcbiA2NDM6XFx0XFx0Zm9yX2VhY2hfbmV0KHRtcCkge1xcbiA2NDQ6XFx0XFx0XFx0aW50IGlkID0gMDtcXG4gNjQ1OlxcdFxcbiA2NDY6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZ0bXAtXFx1MDAzZW5zaWRfbG9jayk7XFxuIDY0NzpcXHRcXHRcXHR3aGlsZSAoKHBlZXIgPSBpZHJfZ2V0X25leHQoXFx1MDAyNnRtcC1cXHUwMDNlbmV0bnNfaWRzLCBcXHUwMDI2aWQpKSkge1xcbiA2NDg6XFx0XFx0XFx0XFx0aW50IGN1cnJfaWQgPSBpZDtcXG4gNjQ5OlxcdFxcbiA2NTA6XFx0XFx0XFx0XFx0aWQrKztcXG4gNjUxOlxcdFxcdFxcdFxcdGlmICghcGVlci1cXHUwMDNlaXNfZHlpbmcpXFxuIDY1MjpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDE6MzMuNDQ4MjQxNjM2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM3ODM2OTA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBhZGRzIGByZWZfdHJhY2tlcl9kaXJfZXhpdGAgdG8gdGhlIGVycm9yIHBhdGggaW4gYGNvcHlfbmV0X25zKClgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwibWVtb3J5L3Jlc291cmNlIGxlYWsgZml4LCBpbnRlcmVzdGluZy5cIiBXZSdyZSB0YWxraW5nIGFib3V0IGEgY29yZSBrZXJuZWwgZnVuY3Rpb24sIGBjb3B5X25ldF9ucygpYCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgbmV0d29yayBuYW1lc3BhY2UgY3JlYXRpb24gdmlhIGBjbG9uZShDTE9ORV9ORVdORVQpYCBvciBgdW5zaGFyZShDTE9ORV9ORVdORVQpYC4gVGhlIGVycm9yIHBhdGggd2UncmUgdGFyZ2V0aW5nIGlzIGhpdCB3aGVuIGBzZXR1cF9uZXQobmV0KWAgZmFpbHMsIHBvdGVudGlhbGx5IGR1ZSB0byBtZW1vcnkgaXNzdWVzIG9yIHN1YnN5c3RlbSBpbml0aWFsaXphdGlvbiBmYWlsdXJlcyB3aXRoaW4gdGhlIG5ldHdvcmsgbmFtZXNwYWNlLlxuXG5TbywgdGhlIGNoYWxsZW5nZSBoZXJlIGlzIHRoYXQgdHJpZ2dlcmluZyB0aGlzIHNwZWNpZmljIGVycm9yIHBhdGggcmVxdWlyZXMgZWl0aGVyIGZhdWx0IGluamVjdGlvbiBvciBjcmVhdGluZyBjb25kaXRpb25zIHdoZXJlIGBzZXR1cF9uZXQoKWAgZGVsaWJlcmF0ZWx5IGZhaWxzLiBOb3QgYSB3YWxrIGluIHRoZSBwYXJrLCBidXQgbm90IGltcG9zc2libGUuIGByZWZfdHJhY2tlcl9kaXJfZXhpdGAsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgZXNzZW50aWFsbHkgYSBjbGVhbnVwIGZ1bmN0aW9uIHRvIHByZXZlbnQgYSBsZWFrIG9mIHRoZSBgcmVmY250X3RyYWNrZXJgIGFuZCBpdHMgYXNzb2NpYXRlZCBkZWJ1Z2ZzIGZpbGUuIEl0J3Mgbm90IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHNlbnNlIHRoYXQgaXQgZG9lc24ndCAqYWRkKiBuZXcgZmVhdHVyZXMsIGJ1dCBpdCAqZml4ZXMqIGEgcmVzb3VyY2UgbGVhaywgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGltcHJvdmVtZW50LlxuXG5UaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgZnV6emFibGU/IEFic29sdXRlbHkuIEl0J3MgYSByZWFjaGFibGUgZXJyb3IgcGF0aCB3aXRoaW4gYSBjb3JlIGtlcm5lbCBmdW5jdGlvbi4gRnV6emluZyBjb3VsZCBoZWxwIGNvbmZpcm0gdGhhdCB0aGUgbGVhayBpcyB0cnVseSBmaXhlZCBhbmQsIGltcG9ydGFudGx5LCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGNyYXNoZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpc24ndCBhIHRlYXJkb3duIGNhbGxiYWNrLCBzbyBsZXQgbWUgY2hlY2sgd2hhdCB0aGUgaW5zdHJ1Y3Rpb25zIHN0YXRlLi4uT2theSwgdGhpcyBpc24ndCBhIGRyaXZlciB0ZWFyZG93biwgaXQncyBhIGNvcmUga2VybmVsIGZ1bmN0aW9uLlxuXG5Ob3csIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBpbnN0cnVjdGlvbnMsIGl0J3MgY2xlYXIgdGhpcyBpcyBOT1QgYSBkb2N1bWVudGF0aW9uIGNoYW5nZSwgYSBsb2dnaW5nIG1vZGlmaWNhdGlvbiwgYSBudW1lcmljIGNvbnN0YW50LCB1bnJlYWNoYWJsZSBjb2RlLCBvciBhIGRyaXZlciB0ZWFyZG93biBjYWxsYmFjay4gSXQncyBhIGNsZWFudXAgb24gYW4gZXJyb3IgcGF0aCB3aXRoaW4gY29yZSBjb2RlLCBhbmQgdGh1cywgSSdtIGNvbmZpZGVudCBpdCdzICpXb3J0aEZ1enppbmc9dHJ1ZSouXG5cbk15IGZvY3VzIGZvciBmdXp6aW5nIHdpbGwgYmUgYGNvcHlfbmV0X25zYCB0byBlbnN1cmUgdGhhdCB0aGlzIGNsZWFudXAgaGFwcGVucyBhcyBleHBlY3RlZC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX05FVF9OU2AgaXMgZW5hYmxlZC4gSWYgYGNvcHlfbmV0X25zYCByZWxpZXMgb24gaXQsIEknbGwgbmVlZCB0byBzZXQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MDcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MTo0Mi44MjY2MTQxMTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUzMTMzNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29weV9uZXRfbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYz01NDc9dm9pZCBuZXRfZHJvcF9ucyhzdHJ1Y3QgbnNfY29tbW9uICpucylcXG4tLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy01NTItXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jOjU1MzpzdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTU1NC1cXHRcXHRcXHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsIHN0cnVjdCBuZXQgKm9sZF9uZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjQxOjQyLjg4MTkzMTk3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk2NzYxNzkyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gS2NvbmZpZyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBhIHNwZWNpZmljIG5ldHdvcmsgc3Vic3lzdGVtLiBGaXJzdCwgSSdtIHRoaW5raW5nLCB3aGVyZSB3b3VsZCB0aGlzIGluZm9ybWF0aW9uIGJlIG1vc3QgcmVsZXZhbnQ/IEdpdmVuIHRoZSB0YXNrLCBJJ2xsIHN0YXJ0IHdpdGggYG5ldC9jb3JlL25ldF9uYW1lc3BhY2UuY2AuIFRoYXQncyB3aGVyZSBhIGxvdCBvZiB0aGUgY29yZSBuZXR3b3JrIG5hbWVzcGFjZSBzdHVmZiByZXNpZGVzLiBOb3csIGxldCdzIHRyYWNlIHRoaXMgYmFjayB0byB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBzaG93IG1lIHRoZSByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIga2VybmVsIGZlYXR1cmVzLiBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHdoYXQgb3RoZXIgZnVuY3Rpb25hbGl0aWVzIGFyZSB0aWVkIHRvIHRoZSBiYXNlIG5ldHdvcmsgbmFtZXNwYWNlLiBTbywgSSBuZWVkIHRvIHNlZSB3aGF0IG9wdGlvbnMgY29udHJvbCB3aGV0aGVyIGBuZXRfbmFtZXNwYWNlLmNgIGlzIGV2ZW4gY29tcGlsZWQsIGFuZCB3aGF0LCBpZiBhbnksIGRlcGVuZGVuY2llcyBjYXNjYWRlIGZyb20gaXQuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1Njk0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDE6NDcuODQ5NTUyNzdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjExMzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldF9uYW1lc3BhY2VcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTY9b2JqLXkgOj0gc29jay5vIHNrYnVmZi5vIGRhdGFncmFtLm8gc3RyZWFtLm8gc2NtLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlOjc6XFx0IGdlbl9zdGF0cy5vIGdlbl9lc3RpbWF0b3IubyBuZXRfbmFtZXNwYWNlLm8gc2VjdXJlX3NlcS5vIFxcXFxcXG5uZXQvY29yZS9NYWtlZmlsZS04LVxcdCBmbG93X2Rpc3NlY3Rvci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjQxOjQ3Ljg5NjE3MDQ2NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDEzMzY4NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNlYXNvbmVkIHByb2Zlc3Npb25hbDpcblxuKipEaWdnaW5nIGludG8gdGhlIEtlcm5lbCBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsIHNvIEkgc2VlIHRoYXQgYG5ldF9uYW1lc3BhY2Uub2AgaXMgYmVpbmcgYnVpbHQgdW5jb25kaXRpb25hbGx5IOKAkyBpdCdzIGFuIGBvYmoteWAuIFRoYXQncyBpbnRlcmVzdGluZywgYmVjYXVzZSBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IGBuZXRfbmFtZXNwYWNlYCAqc2hvdWxkKiBiZSBjb250cm9sbGVkIGJ5IGEgY29uZmlnIG9wdGlvbiwgc3BlY2lmaWNhbGx5IGBDT05GSUdfTkVUX05TYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgZGVmYXVsdCBiZWhhdmlvciBpcyBjb3JyZWN0LCBzaW5jZSB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBjYW4gc29tZXRpbWVzIGRvIHVuZXhwZWN0ZWQgdGhpbmdzLiBMZXQncyBoZWFkIG92ZXIgdG8gdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBydWxlcyBkaWN0YXRlIHRoZXJlLiBJdCdzIHRpbWUgdG8gY29uZmlybSB3aGV0aGVyIHRoaXMgdW5jb25kaXRpb25hbCBjb21waWxhdGlvbiBpcyBpbnRlbmRlZCBvciBhIHBvdGVudGlhbCBvdmVyc2lnaHQuIEkgd2FudCB0byBzZWUgaG93IHRoYXQgb2JqZWN0IGZpbGUgaXMgaGFuZGxlZCBpbiByZWxhdGlvbiB0byB0aGF0IGNvbmZpZyBzeW1ib2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMDksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MTo1MS4zMDk1NDE5NDRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTQwNzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9OU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9MjE3Mz1zdGF0aWMgdm9pZCBydG5sX25ldF9kZXZfbG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMjE4OS1cXG5uZXQvY29yZS9kZXYuYzoyMTkwOiNpZmRlZiBDT05GSUdfTkVUX05TXFxubmV0L2NvcmUvZGV2LmMtMjE5MS1cXHRcXHQvKiBkZXYgbWlnaHQgaGF2ZSBiZWVuIG1vdmVkIHRvIGFub3RoZXIgbmV0bnMuICovXFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMDg4Nj1zdGF0aWMgYm9vbCBmcm9tX2NsZWFudXBfbmV0KHZvaWQpXFxubmV0L2NvcmUvZGV2LmMtMTA4ODcte1xcbm5ldC9jb3JlL2Rldi5jOjEwODg4OiNpZmRlZiBDT05GSUdfTkVUX05TXFxubmV0L2NvcmUvZGV2LmMtMTA4ODktXFx0cmV0dXJuIGN1cnJlbnQgPT0gUkVBRF9PTkNFKGNsZWFudXBfbmV0X3Rhc2spO1xcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MjE2Nz1zdGF0aWMgc3RydWN0IG5zX2NvbW1vbiAqbmV0X2dyYWJfY3VycmVudF9ucyh2b2lkKVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjE2OS1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBjdXJyZW50LVxcdTAwM2Vuc3Byb3h5LVxcdTAwM2VuZXRfbnM7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjE3MDojaWZkZWYgQ09ORklHX05FVF9OU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxNzEtXFx0aWYgKG5ldClcXG4tLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYz00NDA9c3RhdGljIF9fbmV0X2luaXQgaW50IHNldHVwX25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNDcwLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo0NzE6I2lmZGVmIENPTkZJR19ORVRfTlNcXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNDcyLXN0YXRpYyBzdHJ1Y3QgdWNvdW50cyAqaW5jX25ldF9uYW1lc3BhY2VzKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMpXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9ODE3PUVYUE9SVF9TWU1CT0xfR1BMKGdldF9uZXRfbnNfYnlfcGlkKTtcXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtODE4LVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo4MTk6I2lmZGVmIENPTkZJR19ORVRfTlNfUkVGQ05UX1RSQUNLRVJcXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtODIwLXN0YXRpYyB2b2lkIG5ldF9uc19uZXRfZGVidWdmcyhzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9MTE4Nz1zdGF0aWMgdm9pZCBydG5sX25ldF9ub3RpZnlpZChzdHJ1Y3QgbmV0ICpuZXQsIGludCBjbWQsIGludCBpZCwgdTMyIHBvcnRpZCxcXG4tLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMjE1LVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzoxMjE2OiNpZmRlZiBDT05GSUdfTkVUX05TXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEyMTctc3RhdGljIHZvaWQgX19pbml0IG5ldG5zX2lwdjRfc3RydWN0X2NoZWNrKHZvaWQpXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9MTI2Nz12b2lkIF9faW5pdCBuZXRfbnNfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEyNzAtXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jOjEyNzE6I2lmZGVmIENPTkZJR19ORVRfTlNcXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTI3Mi1cXHRuZXRuc19pcHY0X3N0cnVjdF9jaGVjaygpO1xcbi0tXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEzMTEtXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jOjEzMTI6I2lmZGVmIENPTkZJR19ORVRfTlNcXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTMxMy1zdGF0aWMgaW50IF9fcmVnaXN0ZXJfcGVybmV0X29wZXJhdGlvbnMoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4tLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYz0xMzY3PXN0YXRpYyB2b2lkIF9fdW5yZWdpc3Rlcl9wZXJuZXRfb3BlcmF0aW9ucyhzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgKm9wcylcXG4tLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMzc4LVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzoxMzc5OiNlbmRpZiAvKiBDT05GSUdfTkVUX05TICovXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEzODAtXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9MTUxNT1FWFBPUlRfU1lNQk9MX0dQTCh1bnJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UpO1xcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xNTE2LVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzoxNTE3OiNpZmRlZiBDT05GSUdfTkVUX05TXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTE1MTgtc3RhdGljIHN0cnVjdCBuc19jb21tb24gKm5ldG5zX2dldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yMjkwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBpZmxhX3BvbGljeVtJRkxBX01BWCsxXSA9IHtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIzMDQtXFx0W0lGTEFfTElOS0lORk9dXFx0XFx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjIzMDU6XFx0W0lGTEFfTkVUX05TX1BJRF1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjMwNjpcXHRbSUZMQV9ORVRfTlNfRkRdXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIzMDctXFx0LyogSUZMQV9JRkFMSUFTIGlzIGEgc3RyaW5nLCBidXQgcG9saWN5IGlzIHNldCB0byBOTEFfQklOQVJZIHRvXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yNjY3PXN0YXRpYyBzdHJ1Y3QgbmV0ICpydG5sX2xpbmtfZ2V0X25ldF9pZmxhKHN0cnVjdCBubGF0dHIgKnRiW10pXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNjczLVxcdCAqL1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI2NzQ6XFx0aWYgKHRiW0lGTEFfTkVUX05TX1BJRF0pXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjY3NTpcXHRcXHRuZXQgPSBnZXRfbmV0X25zX2J5X3BpZChubGFfZ2V0X3UzMih0YltJRkxBX05FVF9OU19QSURdKSk7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjY3NjpcXHRlbHNlIGlmICh0YltJRkxBX05FVF9OU19GRF0pXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjY3NzpcXHRcXHRuZXQgPSBnZXRfbmV0X25zX2J5X2ZkKG5sYV9nZXRfdTMyKHRiW0lGTEFfTkVUX05TX0ZEXSkpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI2NzgtXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yNjkxPUVYUE9SVF9TWU1CT0wocnRubF9saW5rX2dldF9uZXQpO1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjY5NS0gKlxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI2OTY6ICogMS4gSUZMQV9ORVRfTlNfUElEXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjY5NzogKiAyLiBJRkxBX05FVF9OU19GRFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI2OTgtICogMy4gSUZMQV9UQVJHRVRfTkVUTlNJRFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MjcwMD1zdGF0aWMgc3RydWN0IG5ldCAqcnRubF9saW5rX2dldF9uZXRfYnlfbmxhdHRyKHN0cnVjdCBuZXQgKnNyY19uZXQsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNzA0LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI3MDU6XFx0aWYgKHRiW0lGTEFfTkVUX05TX1BJRF0gfHwgdGJbSUZMQV9ORVRfTlNfRkRdKVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI3MDYtXFx0XFx0cmV0dXJuIHJ0bmxfbGlua19nZXRfbmV0KHNyY19uZXQsIHRiKTtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTI3Mzk9c3RhdGljIGludCBydG5sX2Vuc3VyZV91bmlxdWVfbmV0bnMoc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI3NDQtXFx0aWYgKG5ldG5zX2lkX29ubHkpIHtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyNzQ1OlxcdFxcdGlmICghdGJbSUZMQV9ORVRfTlNfUElEXSBcXHUwMDI2XFx1MDAyNiAhdGJbSUZMQV9ORVRfTlNfRkRdKVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI3NDYtXFx0XFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNzUxLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI3NTI6XFx0aWYgKHRiW0lGTEFfVEFSR0VUX05FVE5TSURdIFxcdTAwMjZcXHUwMDI2ICh0YltJRkxBX05FVF9OU19QSURdIHx8IHRiW0lGTEFfTkVUX05TX0ZEXSkpXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjc1My1cXHRcXHRnb3RvIGludmFsaWRfYXR0cjtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNzU0LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI3NTU6XFx0aWYgKHRiW0lGTEFfTkVUX05TX1BJRF0gXFx1MDAyNlxcdTAwMjYgKHRiW0lGTEFfVEFSR0VUX05FVE5TSURdIHx8IHRiW0lGTEFfTkVUX05TX0ZEXSkpXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjc1Ni1cXHRcXHRnb3RvIGludmFsaWRfYXR0cjtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNzU3LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI3NTg6XFx0aWYgKHRiW0lGTEFfTkVUX05TX0ZEXSBcXHUwMDI2XFx1MDAyNiAodGJbSUZMQV9UQVJHRVRfTkVUTlNJRF0gfHwgdGJbSUZMQV9ORVRfTlNfUElEXSkpXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjc1OS1cXHRcXHRnb3RvIGludmFsaWRfYXR0cjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDE6NTEuMzU0Njg3NTExWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MzcxMDI2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBgQ09ORklHX05FVF9OU2AgYW5kIFJlZmVyZW5jZSBDb3VudGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBDT05GSUdfTkVUX05TYCwgd2hpY2ggSSB1bmRlcnN0YW5kIGlzIGEgY3JpdGljYWwgY29uZmlndXJhdGlvbiBvcHRpb24uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGhvdyB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIG1lY2hhbmlzbSB3b3JrcyBpbiByZWxhdGlvbiB0byB0aGlzLiBJJ3ZlIG5vdGljZWQgdGhhdCBgcmVmX3RyYWNrZXJfZGlyX2V4aXRgIGlzIGNhbGxlZCBvbiBgbmV0LVx1MDAzZXJlZmNudF90cmFja2VyYCwgd2hpY2ggbWFrZXMgbWUgdGhpbmsgdGhlcmUgbWlnaHQgYmUgYSBkZXBlbmRlbmN5IHRvIGV4cGxvcmUuIFRoZSBxdWVzdGlvbiBpcywgaXMgYHJlZmNudF90cmFja2VyYCBpdHNlbGYgY29udGluZ2VudCBvbiBgQ09ORklHX05FVF9OU19SRUZDTlRfVFJBQ0tFUmA/IEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlc2UgdHlwZXMgb2YgY2hlY2tzLCBJIHRoaW5rIHRoZSBtb3N0IGRpcmVjdCB3YXkgdG8gZ2V0IGFuIGFuc3dlciBxdWlja2x5IGlzIHRvIGRpdmUgaW50byBgaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oYC4gVGhhdCBoZWFkZXIgZmlsZSBpcyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhlIGRldGFpbHMgb24gdGhlIHN0cnVjdCBkZWZpbml0aW9ucyBhbmQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGludm9sdmVkIHdpdGggbmV0IG5hbWVzcGFjZXMuIExldCdzIHNlZSB3aGF0IGl0IHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNzAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MTo1Ni4wOTE3OTQ0MjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODI4NzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlZmNudF90cmFja2VyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg9NjI9c3RydWN0IG5ldCB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtOTctXFx0c3RydWN0IG5zX2NvbW1vblxcdG5zO1xcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDo5ODpcXHRzdHJ1Y3QgcmVmX3RyYWNrZXJfZGlyICByZWZjbnRfdHJhY2tlcjtcXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg6OTk6XFx0c3RydWN0IHJlZl90cmFja2VyX2RpciAgbm90cmVmY250X3RyYWNrZXI7IC8qIHRyYWNrZXIgZm9yIG9iamVjdHMgbm90XFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTEwMC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgKiByZWZjb3VudGVkIGFnYWluc3QgbmV0bnNcXG4tLVxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaD0zNjQ9c3RhdGljIGlubGluZSB2b2lkIF9fbmV0bnNfdHJhY2tlcl9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtMzY5LSNpZmRlZiBDT05GSUdfTkVUX05TX1JFRkNOVF9UUkFDS0VSXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oOjM3MDpcXHRyZWZfdHJhY2tlcl9hbGxvYyhyZWZjb3VudGVkID8gXFx1MDAyNm5ldC1cXHUwMDNlcmVmY250X3RyYWNrZXIgOlxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDozNzE6XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZuZXQtXFx1MDAzZW5vdHJlZmNudF90cmFja2VyLFxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0zNzItXFx0XFx0XFx0ICB0cmFja2VyLCBnZnApO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oPTM4Mj1zdGF0aWMgaW5saW5lIHZvaWQgX19uZXRuc190cmFja2VyX2ZyZWUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTM4Ni0jaWZkZWYgQ09ORklHX05FVF9OU19SRUZDTlRfVFJBQ0tFUlxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDozODc6ICAgICAgIHJlZl90cmFja2VyX2ZyZWUocmVmY291bnRlZCA/IFxcdTAwMjZuZXQtXFx1MDAzZXJlZmNudF90cmFja2VyIDpcXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg6Mzg4OlxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNm5ldC1cXHUwMDNlbm90cmVmY250X3RyYWNrZXIsIHRyYWNrZXIpO1xcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0zODktI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjQxOjU2LjEzNzYyOTgxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MzA4ODYxODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmY250IFRyYWNrZXIgQ29uZmlndXJhdGlvbiBcdTAwMjYgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgcmVmY250X3RyYWNrZXJgIHNpdHVhdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgYENPTkZJR19ORVRfTlNfUkVGQ05UX1RSQUNLRVJgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCAqZW5hYmxlcyogdGhlIHdob2xlIHJlZmNvdW50IHRyYWNraW5nIG1lY2hhbmlzbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBnb3QgaXQuXCIgQnV0IHRoZW4gSSBzZWUgdGhhdCBgcmVmX3RyYWNrZXJfZGlyX2V4aXRgIGdldHMgY2FsbGVkIHVuY29uZGl0aW9uYWxseSB3aXRoaW4gYGNvcHlfbmV0X25zYC4gVGhhdCdzIGEgYml0IG9mIGEgaGVhZC1zY3JhdGNoZXIuXG5cblRoZSBjb3JlIHF1ZXN0aW9uIHRoYXQganVtcHMgb3V0IGF0IG1lIG5vdyBpcywgXCJEb2VzIGByZWZfdHJhY2tlcl9kaXJfZXhpdGAgYWN0dWFsbHkgKmRvKiBhbnl0aGluZyBtZWFuaW5nZnVsIGlmIHRoYXQgYENPTkZJR19ORVRfTlNfUkVGQ05UX1RSQUNLRVJgIGlzbid0IHNldD9cIiBJIG1lYW4sIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBwb3RlbnRpYWxseSBwZXJmb3JtYW5jZS1pbXBhY3RpbmcgY2FsbCBoZXJlLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzLlxuXG5UbyBnZXQgYSBkZWZpbml0aXZlIGFuc3dlciwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzb3VyY2UuIFRpbWUgdG8gaGVhZCBvdmVyIHRvIGBpbmNsdWRlL2xpbnV4L3JlZl90cmFja2VyLmhgIGFuZCBzZWUgd2hhdCdzIHdoYXQuIFRoYXQgaGVhZGVyIGZpbGUgc2hvdWxkIGhhdmUgdGhlIGNydWNpYWwgZGV0YWlscywgZGVmaW5pdGlvbnMsIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYyBJJ20gYWZ0ZXIuIEknbGwgbmVlZCB0byBzZWUgaWYgaXQncyBwcm90ZWN0ZWQgYnkgYW4gYCNpZmRlZiBDT05GSUdfTkVUX05TX1JFRkNOVF9UUkFDS0VSYCBndWFyZCwgb3IgaWYgdGhlcmUncyBzb21lIHNvcnQgb2Ygbm8tb3Agb3IgcGxhY2Vob2xkZXIgYmVoYXZpb3IgZGVmaW5lZCBmb3IgdGhlIGRpc2FibGVkIGNhc2UuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA4MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjQyOjAwLjc2ODUxODE0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg2MzEyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWZfdHJhY2tlcl9kaXJfZXhpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3JlZl90cmFja2VyLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9yZWZfdHJhY2tlci5oPTU4PXN0YXRpYyBpbmxpbmUgdm9pZCByZWZfdHJhY2tlcl9kaXJfaW5pdChzdHJ1Y3QgcmVmX3RyYWNrZXJfZGlyICpkaXIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JlZl90cmFja2VyLmgtNzMtXFxuaW5jbHVkZS9saW51eC9yZWZfdHJhY2tlci5oOjc0OnZvaWQgcmVmX3RyYWNrZXJfZGlyX2V4aXQoc3RydWN0IHJlZl90cmFja2VyX2RpciAqZGlyKTtcXG5pbmNsdWRlL2xpbnV4L3JlZl90cmFja2VyLmgtNzUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JlZl90cmFja2VyLmg9MTAzPXZvaWQgcmVmX3RyYWNrZXJfZGlyX3N5bWxpbmsoc3RydWN0IHJlZl90cmFja2VyX2RpciAqZGlyLCBjb25zdCBjaGFyICpmbXQsIC4uLilcXG4tLVxcbmluY2x1ZGUvbGludXgvcmVmX3RyYWNrZXIuaC0xMDYtXFxuaW5jbHVkZS9saW51eC9yZWZfdHJhY2tlci5oOjEwNzpzdGF0aWMgaW5saW5lIHZvaWQgcmVmX3RyYWNrZXJfZGlyX2V4aXQoc3RydWN0IHJlZl90cmFja2VyX2RpciAqZGlyKVxcbmluY2x1ZGUvbGludXgvcmVmX3RyYWNrZXIuaC0xMDgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MjowMC44MTUzODU2NzdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ5NDY1NDc5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBMaW5lIG9mIFJlYXNvbmluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGlzIHJlZmVyZW5jZSB0cmFja2luZyB0aGluZyB3b3JrcywgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMuICBJIHNlZSBgcmVmX3RyYWNrZXJfZGlyX2V4aXRgIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvcmVmX3RyYWNrZXIuaGAuICBSaWdodCwgdGhhdCdzIHRoZSBjb3JlLiAgSWYgYENPTkZJR19SRUZfVFJBQ0tFUmAgaXMgZW5hYmxlZCwgaXQgZG9lcyBzb21ldGhpbmc7IGlmIG5vdCwgaXQncyBqdXN0IGEgZGVhZCBlbmQuICBOb3csIEkgcmVjYWxsIHRoYXQgYENPTkZJR19ORVRfTlNfUkVGQ05UX1RSQUNLRVJgIHNlbGVjdHMgYENPTkZJR19SRUZfVFJBQ0tFUmAuIEFoYSwgc28gYENPTkZJR19ORVRfTlNfUkVGQ05UX1RSQUNLRVJgIGlzIHRoZSBwcmltYXJ5IG9wdGlvbiB0byBmb2N1cyBvbi4gQnV0IHdhaXQsIHRoZXJl4oCZcyBhIGNhdGNoLiBMb29raW5nIGF0IHRoZSBjb2RlIGFyb3VuZCBgY29weV9uZXRfbnNgLCBgQ09ORklHX05FVF9OU2AgaXMgYWxzbyBuZWVkZWQgZm9yIGNvbXBpbGF0aW9uLiBHb3R0YSBtYWtlIHN1cmUgYm90aCBhcmUgc2V0LiAgTGV0IG1lIGRvdWJsZS1jaGVjayBgQ09ORklHX05FVF9OU2AgYW5kIGBDT05GSUdfTkVUX05TX1JFRkNOVF9UUkFDS0VSYCBpbiB0aGUgY29uZmlnLiBIb2xkIG9uLi4uIGRvZXMgYGNvcHlfbmV0X25zYCAqb25seSogZ2V0IGNvbXBpbGVkIGlmIGBDT05GSUdfTkVUX05TYCBpcyBzZXQ/IEknZCBiZXR0ZXIgY29uZmlybSB0aGF0OyBsZXQncyBnbyBiYWNrIGFuZCBsb29rIGF0IGBuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNgIGFnYWluIGFuZCBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcyNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MjowNS4zMTAwNDI4MjdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzU2NTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvcHlfbmV0X25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9NTQ3PXZvaWQgbmV0X2Ryb3BfbnMoc3RydWN0IG5zX2NvbW1vbiAqbnMpXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNTUyLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo1NTM6c3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy01NTQtXFx0XFx0XFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBzdHJ1Y3QgbmV0ICpvbGRfbmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MjowNS4zNTY0MDUxMjRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0NzM0MzM5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBzZWxmLXJlZmxlY3Rpb246XG5cbioqRGVlcCBEaXZlOiBOZXQgTmFtZXNwYWNlIENvbnRleHQqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBgY29weV9uZXRfbnNgIGlzIGd1YXJkZWQgYnkgYSBgI2lmZGVmIENPTkZJR19ORVRfTlNgIGNvbmRpdGlvbmFsLiBUaGF0J3MgYSBjcnVjaWFsIGNoZWNrLiBJZiBpdCAqaXNuJ3QqLCB0aGF0J3MgYSByZWQgZmxhZy4gSXQgaW1wbGllcyB0aGUgZnVuY3Rpb24ncyBwb3RlbnRpYWxseSBiZWluZyB1c2VkIGluIHBhcnRzIG9mIHRoZSBrZXJuZWwgd2hlcmUgbmV0d29yayBuYW1lc3BhY2VzIGFyZW4ndCBldmVuIGVuYWJsZWQsIHdoaWNoIHdvdWxkIGJlIGEgcmVjaXBlIGZvciB1bmV4cGVjdGVkIGJlaGF2aW9yLCBjb21waWxlIGVycm9ycywgb3IgZXZlbiwgaGVhdmVuIGZvcmJpZCwgcnVudGltZSBjcmFzaGVzLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZSBjb2RlJ3MgZGVzaWduZWQgdG8gYmUgcm9idXN0IHVuZGVyIGRpZmZlcmVudCBidWlsZCBjb25maWd1cmF0aW9ucy4gSXMgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIGNvZGUgcHJvcGVybHkgbW9kdWxhcml6ZWQsIG9yIGlzIHRoZXJlIGEgbGVha3kgYWJzdHJhY3Rpb24/IFRoaXMgcmVxdWlyZXMgYSBxdWljayBjb2RlIGluc3BlY3Rpb24gdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM1MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjQyOjA4LjgwMzc1MDg5OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MDA6XFx0XFx0aWYgKCFuZXQtXFx1MDAzZWtleV9kb21haW4pXFxuIDUwMTpcXHRcXHRcXHRnb3RvIG91dF9mcmVlXzI7XFxuIDUwMjpcXHRcXHRyZWZjb3VudF9zZXQoXFx1MDAyNm5ldC1cXHUwMDNla2V5X2RvbWFpbi1cXHUwMDNldXNhZ2UsIDEpO1xcbiA1MDM6XFx0I2VuZGlmXFxuIDUwNDpcXHRcXG4gNTA1OlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihuZXQtXFx1MDAzZWdlbiwgbmcpO1xcbiA1MDY6XFx0b3V0OlxcbiA1MDc6XFx0XFx0cmV0dXJuIG5ldDtcXG4gNTA4OlxcdFxcbiA1MDk6XFx0I2lmZGVmIENPTkZJR19LRVlTXFxuIDUxMDpcXHRvdXRfZnJlZV8yOlxcbiA1MTE6XFx0XFx0a21lbV9jYWNoZV9mcmVlKG5ldF9jYWNoZXAsIG5ldCk7XFxuIDUxMjpcXHRcXHRuZXQgPSBOVUxMO1xcbiA1MTM6XFx0I2VuZGlmXFxuIDUxNDpcXHRvdXRfZnJlZTpcXG4gNTE1OlxcdFxcdGtmcmVlKG5nKTtcXG4gNTE2OlxcdFxcdGdvdG8gb3V0O1xcbiA1MTc6XFx0fVxcbiA1MTg6XFx0XFxuIDUxOTpcXHRzdGF0aWMgTExJU1RfSEVBRChkZWZlcl9mcmVlX2xpc3QpO1xcbiA1MjA6XFx0XFxuIDUyMTpcXHRzdGF0aWMgdm9pZCBuZXRfY29tcGxldGVfZnJlZSh2b2lkKVxcbiA1MjI6XFx0e1xcbiA1MjM6XFx0XFx0c3RydWN0IGxsaXN0X25vZGUgKmtpbGxfbGlzdDtcXG4gNTI0OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCwgKm5leHQ7XFxuIDUyNTpcXHRcXG4gNTI2OlxcdFxcdC8qIEdldCB0aGUgbGlzdCBvZiBuYW1lc3BhY2VzIHRvIGZyZWUgZnJvbSBsYXN0IHJvdW5kLiAqL1xcbiA1Mjc6XFx0XFx0a2lsbF9saXN0ID0gbGxpc3RfZGVsX2FsbChcXHUwMDI2ZGVmZXJfZnJlZV9saXN0KTtcXG4gNTI4OlxcdFxcbiA1Mjk6XFx0XFx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZXQsIG5leHQsIGtpbGxfbGlzdCwgZGVmZXJfZnJlZV9saXN0KVxcbiA1MzA6XFx0XFx0XFx0a21lbV9jYWNoZV9mcmVlKG5ldF9jYWNoZXAsIG5ldCk7XFxuIDUzMTpcXHRcXG4gNTMyOlxcdH1cXG4gNTMzOlxcdFxcbiA1MzQ6XFx0dm9pZCBuZXRfcGFzc2l2ZV9kZWMoc3RydWN0IG5ldCAqbmV0KVxcbiA1MzU6XFx0e1xcbiA1MzY6XFx0XFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2bmV0LVxcdTAwM2VwYXNzaXZlKSkge1xcbiA1Mzc6XFx0XFx0XFx0a2ZyZWUocmN1X2FjY2Vzc19wb2ludGVyKG5ldC1cXHUwMDNlZ2VuKSk7XFxuIDUzODpcXHRcXG4gNTM5OlxcdFxcdFxcdC8qIFRoZXJlIHNob3VsZCBub3QgYmUgYW55IHRyYWNrZXJzIGxlZnQgdGhlcmUuICovXFxuIDU0MDpcXHRcXHRcXHRyZWZfdHJhY2tlcl9kaXJfZXhpdChcXHUwMDI2bmV0LVxcdTAwM2Vub3RyZWZjbnRfdHJhY2tlcik7XFxuIDU0MTpcXHRcXG4gNTQyOlxcdFxcdFxcdC8qIFdhaXQgZm9yIGFuIGV4dHJhIHJjdV9iYXJyaWVyKCkgYmVmb3JlIGZpbmFsIGZyZWUuICovXFxuIDU0MzpcXHRcXHRcXHRsbGlzdF9hZGQoXFx1MDAyNm5ldC1cXHUwMDNlZGVmZXJfZnJlZV9saXN0LCBcXHUwMDI2ZGVmZXJfZnJlZV9saXN0KTtcXG4gNTQ0OlxcdFxcdH1cXG4gNTQ1OlxcdH1cXG4gNTQ2OlxcdFxcbiA1NDc6XFx0dm9pZCBuZXRfZHJvcF9ucyhzdHJ1Y3QgbnNfY29tbW9uICpucylcXG4gNTQ4OlxcdHtcXG4gNTQ5OlxcdFxcdGlmIChucylcXG4gNTUwOlxcdFxcdFxcdG5ldF9wYXNzaXZlX2RlYyh0b19uZXRfbnMobnMpKTtcXG4gNTUxOlxcdH1cXG4gNTUyOlxcdFxcbiA1NTM6XFx0c3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxcbiA1NTQ6XFx0XFx0XFx0XFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBzdHJ1Y3QgbmV0ICpvbGRfbmV0KVxcbiA1NTU6XFx0e1xcbiA1NTY6XFx0XFx0c3RydWN0IHVjb3VudHMgKnVjb3VudHM7XFxuIDU1NzpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQ7XFxuIDU1ODpcXHRcXHRpbnQgcnY7XFxuIDU1OTpcXHRcXG4gNTYwOlxcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgQ0xPTkVfTkVXTkVUKSlcXG4gNTYxOlxcdFxcdFxcdHJldHVybiBnZXRfbmV0KG9sZF9uZXQpO1xcbiA1NjI6XFx0XFxuIDU2MzpcXHRcXHR1Y291bnRzID0gaW5jX25ldF9uYW1lc3BhY2VzKHVzZXJfbnMpO1xcbiA1NjQ6XFx0XFx0aWYgKCF1Y291bnRzKVxcbiA1NjU6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7XFxuIDU2NjpcXHRcXG4gNTY3OlxcdFxcdG5ldCA9IG5ldF9hbGxvYygpO1xcbiA1Njg6XFx0XFx0aWYgKCFuZXQpIHtcXG4gNTY5OlxcdFxcdFxcdHJ2ID0gLUVOT01FTTtcXG4gNTcwOlxcdFxcdFxcdGdvdG8gZGVjX3Vjb3VudHM7XFxuIDU3MTpcXHRcXHR9XFxuIDU3MjpcXHRcXG4gNTczOlxcdFxcdHJ2ID0gcHJlaW5pdF9uZXQobmV0LCB1c2VyX25zKTtcXG4gNTc0OlxcdFxcdGlmIChydiBcXHUwMDNjIDApXFxuIDU3NTpcXHRcXHRcXHRnb3RvIGRlY191Y291bnRzO1xcbiA1NzY6XFx0XFx0bmV0LVxcdTAwM2V1Y291bnRzID0gdWNvdW50cztcXG4gNTc3OlxcdFxcdGdldF91c2VyX25zKHVzZXJfbnMpO1xcbiA1Nzg6XFx0XFxuIDU3OTpcXHRcXHRydiA9IGRvd25fcmVhZF9raWxsYWJsZShcXHUwMDI2cGVybmV0X29wc19yd3NlbSk7XFxuIDU4MDpcXHRcXHRpZiAocnYgXFx1MDAzYyAwKVxcbiA1ODE6XFx0XFx0XFx0Z290byBwdXRfdXNlcm5zO1xcbiA1ODI6XFx0XFxuIDU4MzpcXHRcXHRydiA9IHNldHVwX25ldChuZXQpO1xcbiA1ODQ6XFx0XFxuIDU4NTpcXHRcXHR1cF9yZWFkKFxcdTAwMjZwZXJuZXRfb3BzX3J3c2VtKTtcXG4gNTg2OlxcdFxcbiA1ODc6XFx0XFx0aWYgKHJ2IFxcdTAwM2MgMCkge1xcbiA1ODg6XFx0cHV0X3VzZXJuczpcXG4gNTg5OlxcdFxcdFxcdG5zX2NvbW1vbl9mcmVlKG5ldCk7XFxuIDU5MDpcXHQjaWZkZWYgQ09ORklHX0tFWVNcXG4gNTkxOlxcdFxcdFxcdGtleV9yZW1vdmVfZG9tYWluKG5ldC1cXHUwMDNla2V5X2RvbWFpbik7XFxuIDU5MjpcXHQjZW5kaWZcXG4gNTkzOlxcdFxcdFxcdHB1dF91c2VyX25zKHVzZXJfbnMpO1xcbiA1OTQ6XFx0XFx0XFx0Lyogc2V0dXBfbmV0KCkgZmFpbHVyZSBpcyBub3Qgcm91dGVkIHRocm91Z2ggX19wdXRfbmV0KCksIHNvIHRoZVxcbiA1OTU6XFx0XFx0XFx0ICogcmVmY250X3RyYWNrZXIgKGFuZCBpdHMgZGVidWdmcyBmaWxlKSBoYXMgdG8gYmUgcmVsZWFzZWQgaGVyZS5cXG4gNTk2OlxcdFxcdFxcdCAqL1xcbiA1OTc6XFx0XFx0XFx0cmVmX3RyYWNrZXJfZGlyX2V4aXQoXFx1MDAyNm5ldC1cXHUwMDNlcmVmY250X3RyYWNrZXIpO1xcbiA1OTg6XFx0XFx0XFx0bmV0X3Bhc3NpdmVfZGVjKG5ldCk7XFxuIDU5OTpcXHRkZWNfdWNvdW50czpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDI6MDguODAzODg5NjE4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2MDE2MzYwMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYGNvcHlfbmV0X25zYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIGBjb3B5X25ldF9uc2AgaXNuJ3Qgd3JhcHBlZCBpbiBhIGNvbmRpdGlvbmFsIGJhc2VkIG9uIGBDT05GSUdfTkVUX05TYCwgd2hpY2ggaXMgYSBiaXQgdW51c3VhbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBqdXN0IGFsd2F5cyBjb21waWxlZCwgd2hpY2ggaXMgdGhlIGV4cGVjdGVkIGFwcHJvYWNoIGZvciBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cy4gQnV0IHdhaXQsIGBuZXRfbmFtZXNwYWNlLmNgIGlzIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSwgd2hpY2ggKnNob3VsZCogbWVhbiBgY29weV9uZXRfbnNgIGlzIGFsd2F5cyBhdmFpbGFibGUuIEhvd2V2ZXIsIHdoYXQgaGFwcGVucyB3aGVuIGBDT05GSUdfTkVUX05TYCBpcyAqbm90KiBlbmFibGVkPyBEb2VzIHRoZSBjb21waWxlciBvcHRpbWl6ZSBpdCBvdXQgZW50aXJlbHk/IE9yIGRvZXMgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIHN0aWxsIGV4aXN0LCBldmVuIGlmIHRoZSBkZWZpbml0aW9uIGlzIGVmZmVjdGl2ZWx5IGVtcHR5IG9yIGhhbmRsZWQgZGlmZmVyZW50bHk/IFRvIGJlIGNlcnRhaW4sIEkgbmVlZCB0byBjaGVjayBgaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oYCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBDT05GSUdfTkVUX05TYCBpbiBkZXRhaWwgYW5kIHRvIHNlZSBob3cgdGhlIGZ1bmN0aW9uIGl0c2VsZiBpcyBoYW5kbGVkIHdpdGggYW5kIHdpdGhvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk3NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDI6MTcuNDA1NTI4MzE1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjgxNjM4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb3B5X25ldF9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oPTIxMj1leHRlcm4gc3RydWN0IG5ldCBpbml0X25ldDtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0yMTQtI2lmZGVmIENPTkZJR19ORVRfTlNcXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg6MjE1OnN0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHU2NCBmbGFncywgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLFxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0yMTYtXFx0XFx0XFx0c3RydWN0IG5ldCAqb2xkX25ldCk7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg9MjI0PWV4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNsZWFudXBfbmV0X3Rhc2s7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtMjI4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9uc3Byb3h5LmhcXHUwMDNlXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oOjIyOTpzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHU2NCBmbGFncyxcXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtMjMwLVxcdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywgc3RydWN0IG5ldCAqb2xkX25ldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDI6MTcuNDU4MzQ5ODExWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwODIyMTA5MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgYGNvcHlfbmV0X25zYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGNvcHlfbmV0X25zYCBmdW5jdGlvbiwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgZGVmaW5lZCB3aXRoaW4gYG5ldC9jb3JlL25ldF9uYW1lc3BhY2UuY2AuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gQnV0LCB0aGUgaW1tZWRpYXRlIGNhdmVhdCB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIHRoZSBwb3RlbnRpYWwgcmVsaWFuY2Ugb24gYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgc3BlY2lmaWNhbGx5IGBDT05GSUdfTkVUX05TYC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBmdW5jdGlvbiBpcyBjb21waWxlZCBpbiBhbGwgc2NlbmFyaW9zIG9yIGlzIGNvbmRpdGlvbmFsIHVwb24gdGhhdCBzcGVjaWZpYyBLY29uZmlnIG9wdGlvbiBiZWluZyBlbmFibGVkLiBJZiBgbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jYCBpcyBhbHdheXMgY29tcGlsZWQsIGhvdyBpcyBgY29weV9uZXRfbnNgIGNvbnRyb2xsZWQ/IFRoZSBhbnN3ZXIgbXVzdCBiZSBpbiB0aGF0IHNvdXJjZSBmaWxlIGl0c2VsZi4gVGltZSB0byBkaXZlIGludG8gYG5ldC9jb3JlL25ldF9uYW1lc3BhY2UuY2AgYW5kIHNlYXJjaCBmb3IgdGhhdCBgI2lmZGVmIENPTkZJR19ORVRfTlNgIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MjoyMi41NDA1NjI4NTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNjU2NDYwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTkVUX05TXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9NDQwPXN0YXRpYyBfX25ldF9pbml0IGludCBzZXR1cF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTQ3MC1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6NDcxOiNpZmRlZiBDT05GSUdfTkVUX05TXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTQ3Mi1zdGF0aWMgc3RydWN0IHVjb3VudHMgKmluY19uZXRfbmFtZXNwYWNlcyhzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zKVxcbi0tXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTgxNz1FWFBPUlRfU1lNQk9MX0dQTChnZXRfbmV0X25zX2J5X3BpZCk7XFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTgxOC1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6ODE5OiNpZmRlZiBDT05GSUdfTkVUX05TX1JFRkNOVF9UUkFDS0VSXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTgyMC1zdGF0aWMgdm9pZCBuZXRfbnNfbmV0X2RlYnVnZnMoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTExODc9c3RhdGljIHZvaWQgcnRubF9uZXRfbm90aWZ5aWQoc3RydWN0IG5ldCAqbmV0LCBpbnQgY21kLCBpbnQgaWQsIHUzMiBwb3J0aWQsXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTIxNS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6MTIxNjojaWZkZWYgQ09ORklHX05FVF9OU1xcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMjE3LXN0YXRpYyB2b2lkIF9faW5pdCBuZXRuc19pcHY0X3N0cnVjdF9jaGVjayh2b2lkKVxcbi0tXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTEyNjc9dm9pZCBfX2luaXQgbmV0X25zX2luaXQodm9pZClcXG4tLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMjcwLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzoxMjcxOiNpZmRlZiBDT05GSUdfTkVUX05TXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEyNzItXFx0bmV0bnNfaXB2NF9zdHJ1Y3RfY2hlY2soKTtcXG4tLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMzExLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzoxMzEyOiNpZmRlZiBDT05GSUdfTkVUX05TXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEzMTMtc3RhdGljIGludCBfX3JlZ2lzdGVyX3Blcm5ldF9vcGVyYXRpb25zKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9MTM2Nz1zdGF0aWMgdm9pZCBfX3VucmVnaXN0ZXJfcGVybmV0X29wZXJhdGlvbnMoc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zICpvcHMpXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTM3OC1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6MTM3OTojZW5kaWYgLyogQ09ORklHX05FVF9OUyAqL1xcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMzgwLVxcbi0tXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTE1MTU9RVhQT1JUX1NZTUJPTF9HUEwodW5yZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKTtcXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTUxNi1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6MTUxNzojaWZkZWYgQ09ORklHX05FVF9OU1xcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xNTE4LXN0YXRpYyBzdHJ1Y3QgbnNfY29tbW9uICpuZXRuc19nZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MjoyMy4wNTcxMzE4NDRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI3Mzg0NjEzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW5pdGlhbCBDb25mdXNpb24gYW5kIEludmVzdGlnYXRpb24qKlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmIEkgY291bGQgaGF2ZSBzd29ybiBgY29weV9uZXRfbnNgIHdhcyBzdXBwb3NlZCB0byBiZSBjb25kaXRpb25hbGl6ZWQgYnkgdGhlIGBDT05GSUdfTkVUX05TYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCBhbmQgbm93IEknbSBkb3VidGluZyB0aGF0LiBNeSBtZW50YWwgbW9kZWwgb2YgYG5ldC9jb3JlL25ldF9uYW1lc3BhY2UuY2Agc3VnZ2VzdHMgaXQncyBzdXBwb3NlZCB0byBiZSBlbmNsb3NlZCB3aXRoaW4gdGhhdCBjb25kaXRpb25hbCBibG9jay4gVGhpcyBmZWVscyB3cm9uZy5cblxuUmlnaHQsIHRpbWUgdG8gZ2V0IHRoaXMgc3RyYWlnaHQuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGUgYm91bmRhcmllcyBvZiB0aGF0IGAjaWZkZWYgQ09ORklHX05FVF9OU2AgYmxvY2sgaW4gdGhlIHNvdXJjZSBjb2RlLiBUaGUgbG9jYXRpb24gb2YgdGhlIGNsb3NpbmcgYCNlbmRpZmAgaXMgY3JpdGljYWwgaGVyZS4gSXQncyBwb3NzaWJsZSBJJ20gbWlzcmVtZW1iZXJpbmcsIGFuZCBgY29weV9uZXRfbnNgICppcyogYWN0dWFsbHkgb3V0c2lkZSB0aGUgcHJvdGVjdGVkIHNlY3Rpb24sIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGUgZXhhY3QgcGxhY2VtZW50IGJlZm9yZSBJIGNhbiBwcm9jZWVkIHdpdGggYW55IHRyb3VibGVzaG9vdGluZyBvciBkZWJ1Z2dpbmcuIFRoZSBpbXBsaWNhdGlvbnMgYXJlIHNpZ25pZmljYW50LCBkZXBlbmRpbmcgb24gd2hldGhlciBpdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3IgYWx3YXlzIHBhcnQgb2YgdGhlIGJ1aWxkLiBUaGlzIHJlcXVpcmVzIGEgcmFwaWQgdmVyaWZpY2F0aW9uIG9mIHRoZSBjb2RlJ3Mgc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUzOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjQyOjI3LjMzMDk4NDc2NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzU0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3MSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzE6XFx0I2lmZGVmIENPTkZJR19ORVRfTlNcXG4gNDcyOlxcdHN0YXRpYyBzdHJ1Y3QgdWNvdW50cyAqaW5jX25ldF9uYW1lc3BhY2VzKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMpXFxuIDQ3MzpcXHR7XFxuIDQ3NDpcXHRcXHRyZXR1cm4gaW5jX3Vjb3VudChucywgY3VycmVudF9ldWlkKCksIFVDT1VOVF9ORVRfTkFNRVNQQUNFUyk7XFxuIDQ3NTpcXHR9XFxuIDQ3NjpcXHRcXG4gNDc3OlxcdHN0YXRpYyB2b2lkIGRlY19uZXRfbmFtZXNwYWNlcyhzdHJ1Y3QgdWNvdW50cyAqdWNvdW50cylcXG4gNDc4OlxcdHtcXG4gNDc5OlxcdFxcdGRlY191Y291bnQodWNvdW50cywgVUNPVU5UX05FVF9OQU1FU1BBQ0VTKTtcXG4gNDgwOlxcdH1cXG4gNDgxOlxcdFxcbiA0ODI6XFx0c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpuZXRfY2FjaGVwIF9fcm9fYWZ0ZXJfaW5pdDtcXG4gNDgzOlxcdHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbmV0bnNfd3E7XFxuIDQ4NDpcXHRcXG4gNDg1OlxcdHN0YXRpYyBzdHJ1Y3QgbmV0ICpuZXRfYWxsb2Modm9pZClcXG4gNDg2OlxcdHtcXG4gNDg3OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IE5VTEw7XFxuIDQ4ODpcXHRcXHRzdHJ1Y3QgbmV0X2dlbmVyaWMgKm5nO1xcbiA0ODk6XFx0XFxuIDQ5MDpcXHRcXHRuZyA9IG5ldF9hbGxvY19nZW5lcmljKCk7XFxuIDQ5MTpcXHRcXHRpZiAoIW5nKVxcbiA0OTI6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDQ5MzpcXHRcXG4gNDk0OlxcdFxcdG5ldCA9IGttZW1fY2FjaGVfemFsbG9jKG5ldF9jYWNoZXAsIEdGUF9LRVJORUwpO1xcbiA0OTU6XFx0XFx0aWYgKCFuZXQpXFxuIDQ5NjpcXHRcXHRcXHRnb3RvIG91dF9mcmVlO1xcbiA0OTc6XFx0XFxuIDQ5ODpcXHQjaWZkZWYgQ09ORklHX0tFWVNcXG4gNDk5OlxcdFxcdG5ldC1cXHUwMDNla2V5X2RvbWFpbiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBrZXlfdGFnKTtcXG4gNTAwOlxcdFxcdGlmICghbmV0LVxcdTAwM2VrZXlfZG9tYWluKVxcbiA1MDE6XFx0XFx0XFx0Z290byBvdXRfZnJlZV8yO1xcbiA1MDI6XFx0XFx0cmVmY291bnRfc2V0KFxcdTAwMjZuZXQtXFx1MDAzZWtleV9kb21haW4tXFx1MDAzZXVzYWdlLCAxKTtcXG4gNTAzOlxcdCNlbmRpZlxcbiA1MDQ6XFx0XFxuIDUwNTpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIobmV0LVxcdTAwM2VnZW4sIG5nKTtcXG4gNTA2OlxcdG91dDpcXG4gNTA3OlxcdFxcdHJldHVybiBuZXQ7XFxuIDUwODpcXHRcXG4gNTA5OlxcdCNpZmRlZiBDT05GSUdfS0VZU1xcbiA1MTA6XFx0b3V0X2ZyZWVfMjpcXG4gNTExOlxcdFxcdGttZW1fY2FjaGVfZnJlZShuZXRfY2FjaGVwLCBuZXQpO1xcbiA1MTI6XFx0XFx0bmV0ID0gTlVMTDtcXG4gNTEzOlxcdCNlbmRpZlxcbiA1MTQ6XFx0b3V0X2ZyZWU6XFxuIDUxNTpcXHRcXHRrZnJlZShuZyk7XFxuIDUxNjpcXHRcXHRnb3RvIG91dDtcXG4gNTE3OlxcdH1cXG4gNTE4OlxcdFxcbiA1MTk6XFx0c3RhdGljIExMSVNUX0hFQUQoZGVmZXJfZnJlZV9saXN0KTtcXG4gNTIwOlxcdFxcbiA1MjE6XFx0c3RhdGljIHZvaWQgbmV0X2NvbXBsZXRlX2ZyZWUodm9pZClcXG4gNTIyOlxcdHtcXG4gNTIzOlxcdFxcdHN0cnVjdCBsbGlzdF9ub2RlICpraWxsX2xpc3Q7XFxuIDUyNDpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQsICpuZXh0O1xcbiA1MjU6XFx0XFxuIDUyNjpcXHRcXHQvKiBHZXQgdGhlIGxpc3Qgb2YgbmFtZXNwYWNlcyB0byBmcmVlIGZyb20gbGFzdCByb3VuZC4gKi9cXG4gNTI3OlxcdFxcdGtpbGxfbGlzdCA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNmRlZmVyX2ZyZWVfbGlzdCk7XFxuIDUyODpcXHRcXG4gNTI5OlxcdFxcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmV0LCBuZXh0LCBraWxsX2xpc3QsIGRlZmVyX2ZyZWVfbGlzdClcXG4gNTMwOlxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShuZXRfY2FjaGVwLCBuZXQpO1xcbiA1MzE6XFx0XFxuIDUzMjpcXHR9XFxuIDUzMzpcXHRcXG4gNTM0OlxcdHZvaWQgbmV0X3Bhc3NpdmVfZGVjKHN0cnVjdCBuZXQgKm5ldClcXG4gNTM1OlxcdHtcXG4gNTM2OlxcdFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNm5ldC1cXHUwMDNlcGFzc2l2ZSkpIHtcXG4gNTM3OlxcdFxcdFxcdGtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihuZXQtXFx1MDAzZWdlbikpO1xcbiA1Mzg6XFx0XFxuIDUzOTpcXHRcXHRcXHQvKiBUaGVyZSBzaG91bGQgbm90IGJlIGFueSB0cmFja2VycyBsZWZ0IHRoZXJlLiAqL1xcbiA1NDA6XFx0XFx0XFx0cmVmX3RyYWNrZXJfZGlyX2V4aXQoXFx1MDAyNm5ldC1cXHUwMDNlbm90cmVmY250X3RyYWNrZXIpO1xcbiA1NDE6XFx0XFxuIDU0MjpcXHRcXHRcXHQvKiBXYWl0IGZvciBhbiBleHRyYSByY3VfYmFycmllcigpIGJlZm9yZSBmaW5hbCBmcmVlLiAqL1xcbiA1NDM6XFx0XFx0XFx0bGxpc3RfYWRkKFxcdTAwMjZuZXQtXFx1MDAzZWRlZmVyX2ZyZWVfbGlzdCwgXFx1MDAyNmRlZmVyX2ZyZWVfbGlzdCk7XFxuIDU0NDpcXHRcXHR9XFxuIDU0NTpcXHR9XFxuIDU0NjpcXHRcXG4gNTQ3OlxcdHZvaWQgbmV0X2Ryb3BfbnMoc3RydWN0IG5zX2NvbW1vbiAqbnMpXFxuIDU0ODpcXHR7XFxuIDU0OTpcXHRcXHRpZiAobnMpXFxuIDU1MDpcXHRcXHRcXHRuZXRfcGFzc2l2ZV9kZWModG9fbmV0X25zKG5zKSk7XFxuIDU1MTpcXHR9XFxuIDU1MjpcXHRcXG4gNTUzOlxcdHN0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHU2NCBmbGFncyxcXG4gNTU0OlxcdFxcdFxcdFxcdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywgc3RydWN0IG5ldCAqb2xkX25ldClcXG4gNTU1OlxcdHtcXG4gNTU2OlxcdFxcdHN0cnVjdCB1Y291bnRzICp1Y291bnRzO1xcbiA1NTc6XFx0XFx0c3RydWN0IG5ldCAqbmV0O1xcbiA1NTg6XFx0XFx0aW50IHJ2O1xcbiA1NTk6XFx0XFxuIDU2MDpcXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IENMT05FX05FV05FVCkpXFxuIDU2MTpcXHRcXHRcXHRyZXR1cm4gZ2V0X25ldChvbGRfbmV0KTtcXG4gNTYyOlxcdFxcbiA1NjM6XFx0XFx0dWNvdW50cyA9IGluY19uZXRfbmFtZXNwYWNlcyh1c2VyX25zKTtcXG4gNTY0OlxcdFxcdGlmICghdWNvdW50cylcXG4gNTY1OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xcbiA1NjY6XFx0XFxuIDU2NzpcXHRcXHRuZXQgPSBuZXRfYWxsb2MoKTtcXG4gNTY4OlxcdFxcdGlmICghbmV0KSB7XFxuIDU2OTpcXHRcXHRcXHRydiA9IC1FTk9NRU07XFxuIDU3MDpcXHRcXHRcXHRnb3RvIGRlY191Y291bnRzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MjoyNy4zMzEyNjIyNjZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzMTQ1NTQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIE11c2luZ3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBjb3B5X25ldF9uc2AgZnVuY3Rpb24sIGFuZCBpdCdzIHdyYXBwZWQgaW4gYW4gYCNpZmRlZiBDT05GSUdfTkVUX05TYCBibG9jayBzdGFydGluZyB3YXkgYmFjayBvbiBsaW5lIDQ3MS4gVGhhdCdzIGNsZWFyIGVub3VnaDsgYENPTkZJR19ORVRfTlNgIGlzIGEgKnJlcXVpcmVtZW50KiBmb3IgdGhpcyBmdW5jdGlvbiB0byBldmVuIGV4aXN0IGluIHRoZSBjb21waWxlZCBjb2RlLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCBgcmVmX3RyYWNrZXJfZGlyX2V4aXRgIGFuZCB3aGV0aGVyIGl0IGlzIGdvaW5nIHRvIGRvIGFueXRoaW5nIHVzZWZ1bC4gQWgsIGJ1dCB0aGF0J3MgZ29pbmcgdG8gYmUgdXNlbGVzcyB1bmxlc3Mgd2UgaGF2ZSBgQ09ORklHX05FVF9OU19SRUZDTlRfVFJBQ0tFUmAgZGVmaW5lZC4gT3RoZXJ3aXNlLCBpdCBlbmRzIHVwIGJlaW5nIHRoaXMgZW1wdHkgaW5saW5lIGZ1bmN0aW9uLiBBbmQsIHNpbmNlIEknbSBjb25jZXJuZWQgYWJvdXQgdGhhdCBmdW5jdGlvbiwgbGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrLCBgcmVmX3RyYWNrZXJfZGlyX2V4aXRgIGlzIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvcmVmX3RyYWNrZXIuaGAuXG5cbkknZCBiZXR0ZXIgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgKnJpZ2h0KiBjb25maWcgc2VsZWN0ZWQuIEkgbmVlZCB0byBjb25maXJtIGBDT05GSUdfTkVUX05TX1JFRkNOVF9UUkFDS0VSYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3Qgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTIzMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjQyOjMxLjk2MjcyMDc5MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5NDI2NTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfTlNfUkVGQ05UX1RSQUNLRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjQyOjMyLjAxMTY3MTc3OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjIxMjg3NzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYE5FVF9OU19SRUZDTlRfVFJBQ0tFUmAgaW4gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHRyYWNrIGRvd24gYE5FVF9OU19SRUZDTlRfVFJBQ0tFUmAuIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBpdCdzIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIHJlZmVyZW5jZSBjb3VudCB0cmFja2luZywgbGlrZWx5IHdpdGhpbiBuZXR3b3JrIG5hbWVzcGFjZXMuIEknbGwgc3RhcnQgd2l0aCBhIHN0cmFpZ2h0Zm9yd2FyZCBzZWFyY2ggdGhyb3VnaCB0aGUgS2NvbmZpZyBmaWxlcy4gVGhpcyB3aWxsIGJlIHRoZSBmb3VuZGF0aW9uYWwgc3RhcnRpbmcgcG9pbnQuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0J3MgZW5hYmxlZCBieSBkZWZhdWx0LCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMsIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdC4gRnJvbSB0aGUgS2NvbmZpZyBjb250ZXh0LCBJIHNob3VsZCBnZXQgdGhlIGltbWVkaWF0ZSBjbHVlcyBhYm91dCB3aHkgaXQgZXhpc3RzIGFuZCB3aHkgc29tZW9uZSBtaWdodCB3YW50IHRvIHVzZSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MzYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MjozNS42MzI5NjI2MDFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODgyOTgxNzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9OU19SRUZDTlRfVFJBQ0tFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWcuZGVidWc9Mz1jb25maWcgTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUlxcbi0tXFxubmV0L0tjb25maWcuZGVidWctMTEtXFxubmV0L0tjb25maWcuZGVidWc6MTI6Y29uZmlnIE5FVF9OU19SRUZDTlRfVFJBQ0tFUlxcbm5ldC9LY29uZmlnLmRlYnVnLTEzLVxcdGJvb2wgXFxcIkVuYWJsZSBuZXR3b3JraW5nIG5hbWVzcGFjZSByZWZjb3VudCB0cmFja2luZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDI6MzcuMzIxMjY3MTUzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTk0NjczOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkRpZ2dpbmcgaW50byBOZXR3b3JrIE5hbWVzcGFjZXMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNlIGhvdyBuZXR3b3JrIG5hbWVzcGFjZSByZWZlcmVuY2UgY291bnRpbmcgaXMgaGFuZGxlZC4gSSBpbW1lZGlhdGVseSBzZWUgYE5FVF9OU19SRUZDTlRfVFJBQ0tFUmAgbWVudGlvbmVkLCB3aGljaCBpcyBsaWtlbHkgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbi4gQnV0IGhvbGQgb24sIGlzbid0IHRoZXJlIGFub3RoZXIgY29uZmlnIHJlbGF0ZWQgdG8gbmFtZXNwYWNlcywgc29tZXRoaW5nIGZ1bmRhbWVudGFsPyBBaCB5ZXMsIGBORVRfTlNgISBJdCdzIGdvdCB0byBiZS4gVGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aG9zZSB0d28uIExldCdzIHNlZSBob3cgYE5FVF9OU2AgaXMgZGVmaW5lZCBhbmQgd2hhdCBpdCBlbmFibGVzLCB3aGljaCB3aWxsIGdpdmUgY3J1Y2lhbCBjb250ZXh0IHRvIHVuZGVyc3RhbmQgYE5FVF9OU19SRUZDTlRfVFJBQ0tFUmAuIFRoaXMgbmVlZHMgdG8gYmUgdW5kZXJzdG9vZCBpZiBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIHdoaWNoIHBhcnRzIGFyZSBhY3R1YWxseSByZWxldmFudC4gSXQncyB0aW1lIHRvIGJ1aWxkIGEgc29saWQgZm91bmRhdGlvbiBiZWZvcmUgSSBsb29rIGF0IGFueXRoaW5nIGVsc2UhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTQyLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDI6NDAuNzgwNzM3MDM1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQxNjU0MzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfTlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xNDUyPWNvbmZpZyBQSURfTlNcXG4tLVxcbmluaXQvS2NvbmZpZy0xNDU5LVxcbmluaXQvS2NvbmZpZzoxNDYwOmNvbmZpZyBORVRfTlNcXG5pbml0L0tjb25maWctMTQ2MS1cXHRib29sIFxcXCJOZXR3b3JrIG5hbWVzcGFjZVxcXCJcXG4tLVxcbm5ldC9LY29uZmlnLmRlYnVnPTM9Y29uZmlnIE5FVF9ERVZfUkVGQ05UX1RSQUNLRVJcXG4tLVxcbm5ldC9LY29uZmlnLmRlYnVnLTExLVxcbm5ldC9LY29uZmlnLmRlYnVnOjEyOmNvbmZpZyBORVRfTlNfUkVGQ05UX1RSQUNLRVJcXG5uZXQvS2NvbmZpZy5kZWJ1Zy0xMy1cXHRib29sIFxcXCJFbmFibGUgbmV0d29ya2luZyBuYW1lc3BhY2UgcmVmY291bnQgdHJhY2tpbmdcXFwiXFxuLS1cXG5uZXQvbnNoL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbnNoL0tjb25maWc6MjptZW51Y29uZmlnIE5FVF9OU0hcXG5uZXQvbnNoL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBTZXJ2aWNlIEhlYWRlciAoTlNIKSBwcm90b2NvbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDI6NDIuNDIyMzk3NzI5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4OTM5NjIwMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBQbGFuIGZvciBOZXQgTmFtZXNwYWNlIFJlc291cmNlIExlYWsqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBORVRfTlNgIGFuZCBgTkVUX05TX1JFRkNOVF9UUkFDS0VSYC4gVGhlIGNvcmUgb2YgdGhlIGlzc3VlLCBhbmQgdGhlIGZ1bmN0aW9uIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBkaXJlY3RseSBhZGRyZXNzaW5nLCBpcyBgY29weV9uZXRfbnNgLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRvdWNoZWQgaGVyZT8gTm9wZSwgaXQncyBqdXN0IGBjb3B5X25ldF9uc2AuXG5cbkFscmlnaHQsIGlzIHRoaXMgZXZlbiB3b3J0aCB0aGUgZnV6emluZyBlZmZvcnQ/IEFic29sdXRlbHksIHllcy4gSXQncyBmaXhpbmcgYSBjb3JlIGtlcm5lbCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGEgcmVzb3VyY2UgbGVhay4gVGhlIGxlYWsgb2NjdXJzIHdoZW4gYHNldHVwX25ldGAgZmFpbHMsIGFuZCB0aGlzIHBhdGNoIGFpbXMgdG8gY2xlYW4gdGhhdCB1cC4gVGhlIGVycm9yIHBhdGggb2YgYGNvcHlfbmV0X25zYCwgdHJpZ2dlcmVkIHBvdGVudGlhbGx5IGJ5IGZhdWx0IGluamVjdGlvbiwgaXMgd2hlcmUgdGhpcyBwcm9ibGVtIHJlc2lkZXMuXG5cblNvLCBoZXJlJ3MgdGhlIHBsYW4sIGluIHNob3J0IGZvcm06XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBUcnVlLiBBYnNvbHV0ZWx5LlxuKiAgICoqRm9jdXNTeW1ib2xzKio6IGBjb3B5X25ldF9uc2AuIFRoYXQncyB0aGUgcHJpbWFyeSB0YXJnZXQuXG4qICAgKipFbmFibGVDb25maWdzKio6IGBORVRfTlNgIGFuZCBgTkVUX05TX1JFRkNOVF9UUkFDS0VSYC4gV2UgbmVlZCB0aGVzZSBlbmFibGVkIGZvciB0aGUgcmVsZXZhbnQgY29kZSB0byBldmVuIGJlIGFjdGl2ZS5cbiogICAqKlJlYXNvbmluZyoqOiBUaGlzIHBhdGNoIGlzIGEgZml4IGZvciBhIHJlc291cmNlIGxlYWsgKHNwZWNpZmljYWxseSB0aGUgcmVmY250X3RyYWNrZXIgYW5kIGl0cyBkZWJ1Z2ZzIGZpbGUpLiBUaGUgbGVhayBhcHBlYXJzIGluIHRoZSBlcnJvciBwYXRoIG9mIGBjb3B5X25ldF9uc2Agd2hlbiBgc2V0dXBfbmV0YCBpcyB1bmFibGUgdG8gY29tcGxldGUgaXRzIHNldHVwLiBGYXVsdCBpbmplY3Rpb24gd2hlbiBmdXp6aW5nIGBjb3B5X25ldF9uc2Agc2hvdWxkIHJldmVhbCB0aGUgZWZmaWNhY3kgb2YgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MTUsIk91dHB1dFRva2VucyI6MTA3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjQyOjQ4LjMxNjM2MTk4OVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NzgzODk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfTlNcIixcbiAgICBcIk5FVF9OU19SRUZDTlRfVFJBQ0tFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvcHlfbmV0X25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIChyZWZjbnRfdHJhY2tlciBhbmQgaXRzIGRlYnVnZnMgZmlsZSkgaW4gdGhlIGVycm9yIHBhdGggb2YgY29weV9uZXRfbnMoKSB3aGVuIHNldHVwX25ldCgpIGZhaWxzLiBGdXp6aW5nIGNvcHlfbmV0X25zIHdpdGggZmF1bHQgaW5qZWN0aW9uIGNhbiBoZWxwIHZlcmlmeSB0aGUgZml4LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9OU1wiLFxuICAgIFwiTkVUX05TX1JFRkNOVF9UUkFDS0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29weV9uZXRfbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJlc291cmNlIGxlYWsgKHJlZmNudF90cmFja2VyIGFuZCBpdHMgZGVidWdmcyBmaWxlKSBpbiB0aGUgZXJyb3IgcGF0aCBvZiBjb3B5X25ldF9ucygpIHdoZW4gc2V0dXBfbmV0KCkgZmFpbHMuIEZ1enppbmcgY29weV9uZXRfbnMgd2l0aCBmYXVsdCBpbmplY3Rpb24gY2FuIGhlbHAgdmVyaWZ5IHRoZSBmaXguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjQyOjQ4LjM4NDE1MTYwNFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MTU4ODU4OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0Mjo0OC4zODQ2MTQwMTVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA2MTU0MTkyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBtaXNzaW5nIGNhbGwgdG8gYHJlZl90cmFja2VyX2Rpcl9leGl0KClgIGluIHRoZSBlcnJvciBwYXRoIG9mIGBjb3B5X25ldF9ucygpYCB0byBwcmV2ZW50IGEgcmVzb3VyY2UgbGVhayAoc3BlY2lmaWNhbGx5LCBhIGRlYnVnZnMgZmlsZSBhbmQgcmVmY250X3RyYWNrZXIgcmVzb3VyY2VzKSB3aGVuIGBzZXR1cF9uZXQoKWAgZmFpbHMuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbm9yIGRvZXMgaXQgbW9kaWZ5IGFueSBkYXRhIHNlbnQgdG8gdXNlciBzcGFjZSBvciBhbHRlciBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFJlc291cmNlIGxlYWtzIGFuZCBtZW1vcnkgbGVha3MgYXJlIHR5cGljYWxseSBkZXRlY3RlZCBieSBLTUVNTEVBSywgd2hpbGUgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NTBmODJkZmIyMmU4OTNkODJiYzlhNjMwNjQyODkwYmUwMzdjZmIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMDU6NDE6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcbmluZGV4IGE5MWQyYjU4YWFkZGYuLjBjM2YxNjlkOWFmYmMgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcbisrKyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1xuQEAgLTU5MSw2ICs1OTEsMTAgQEAgc3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxuIFx0XHRrZXlfcmVtb3ZlX2RvbWFpbihuZXQtXHUwMDNla2V5X2RvbWFpbik7XG4gI2VuZGlmXG4gXHRcdHB1dF91c2VyX25zKHVzZXJfbnMpO1xuK1x0XHQvKiBzZXR1cF9uZXQoKSBmYWlsdXJlIGlzIG5vdCByb3V0ZWQgdGhyb3VnaCBfX3B1dF9uZXQoKSwgc28gdGhlXG4rXHRcdCAqIHJlZmNudF90cmFja2VyIChhbmQgaXRzIGRlYnVnZnMgZmlsZSkgaGFzIHRvIGJlIHJlbGVhc2VkIGhlcmUuXG4rXHRcdCAqL1xuK1x0XHRyZWZfdHJhY2tlcl9kaXJfZXhpdChcdTAwMjZuZXQtXHUwMDNlcmVmY250X3RyYWNrZXIpO1xuIFx0XHRuZXRfcGFzc2l2ZV9kZWMobmV0KTtcbiBkZWNfdWNvdW50czpcbiBcdFx0ZGVjX25ldF9uYW1lc3BhY2VzKHVjb3VudHMpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDI6NDguMzg0NjE0ODI0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjE1Mzk2MTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNgIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jYCwgd2hpY2ggYWRkcyBgcmVmX3RyYWNrZXJfZGlyX2V4aXQoXHUwMDI2bmV0LVx1MDAzZXJlZmNudF90cmFja2VyKTtgIHRvIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgY29weV9uZXRfbnMoKWAuICBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgcmVzb3VyY2UgY2xlYW51cCDigJMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhaywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGByZWZjbnRfdHJhY2tlcmAncyBkZWJ1Z2ZzIGZpbGUsIHdoZW4gYHNldHVwX25ldCgpYCBmYWlscy4gSXQgc2VlbXMgYSBiaXQgbGlrZSBhIHN0YW5kYXJkIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBhcHByb2FjaCwgd2hpY2ggaXMgZ29vZCB0byBzZWUuXG5cbk15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEJ1dCwgcmV2aWV3aW5nIHRoZSBjb2RlLCBpdCdzIGNsZWFyIHRoaXMgcGF0Y2ggc2ltcGx5ICpmcmVlcyogb3IgY2xlYW5zIHVwIGEgcmVzb3VyY2Ugd2l0aCBgcmVmX3RyYWNrZXJfZGlyX2V4aXQoKWAuIEl0J3MgYSBjbGVhbnVwLCBub3QgYW4gYWxsb2NhdGlvbiBvciB1c2FnZS4gVGhlcmUncyBubyBjcmVhdGlvbiBvZiBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgbWlnaHQgaGFyYm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgYW55IG1vZGlmaWNhdGlvbiBvZiBkYXRhIHRoYXQncyB0aGVuIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gIEl0J3MganVzdCByZWxlYXNpbmcgcmVzb3VyY2VzLCB0aGF0IGZhaWxlZCBkdXJpbmcgaW5pdGlhbCBzZXR1cC4gIFNvLCBubywgdGhpcyBkb2Vzbid0IHNlZW0gdG8gaW50cm9kdWNlIGFueSBLTVNBTiBpc3N1ZXMuXG5cbkkgcXVpY2tseSBkb3VibGUtY2hlY2tlZCBgcmVmX3RyYWNrZXJfZGlyX2V4aXRgIGl0c2VsZiB0byBjb25maXJtIG15IGluaXRpYWwgaW1wcmVzc2lvbjogaXQncyBhbGwgYWJvdXQgZnJlZWluZywgbm90IHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgbGVha2luZyBpdCB0byB1c2VyIHNwYWNlLiBUaGF0IHNvbGlkaWZpZXMgbXkgY29uY2x1c2lvbiB0aGF0IHRoaXMgcGF0Y2ggaXMgS01TQU4tc2FmZS4gV2UncmUgdGFsa2luZyBhYm91dCBwcmV2ZW50aW5nIGEgbGVhaywgbm90IGludHJvZHVjaW5nIGEgdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMgcmVhZCwgb3Igb3RoZXIgc2ltaWxhciBpc3N1ZSBLQVNBTiBhbmQgS01FTUxFQUsgYXJlIGRlc2lnbmVkIHRvIGhhbmRsZS5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2gncyBwdXJwb3NlIGlzIHRvIHByZXZlbnQgYSByZXNvdXJjZSBsZWFrLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlIHBhdGNoIGFkZHMgYSBtaXNzaW5nIGNhbGwgdG8gYHJlZl90cmFja2VyX2Rpcl9leGl0KClgIGluIHRoZSBlcnJvciBwYXRoIG9mIGBjb3B5X25ldF9ucygpYCB0byBwcmV2ZW50IGEgcmVzb3VyY2UgbGVhayB3aGVuIGBzZXR1cF9uZXQoKWAgZmFpbHMuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbm9yIGRvZXMgaXQgbW9kaWZ5IGFueSBkYXRhIHNlbnQgdG8gdXNlciBzcGFjZSBvciBhbHRlciBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFJlc291cmNlIGxlYWtzIGFuZCBtZW1vcnkgbGVha3MgYXJlIHR5cGljYWxseSBkZXRlY3RlZCBieSBLTUVNTEVBSywgd2hpbGUgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gQ29uc2VxdWVudGx5LCBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5IGZvciB0aGlzIHBhdGNoLiBJIHRoaW5rIHRoaXMgb25lJ3MgYSBjbGVhbiBcIk5lZWRzS01TQU46IGZhbHNlXCIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTYsIk91dHB1dFRva2VucyI6MTc5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDI6NTkuMDAwMDE0NDIyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBjYWxsIHRvIGByZWZfdHJhY2tlcl9kaXJfZXhpdCgpYCBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgY29weV9uZXRfbnMoKWAgdG8gcHJldmVudCBhIHJlc291cmNlIGxlYWsgKHNwZWNpZmljYWxseSwgYSBkZWJ1Z2ZzIGZpbGUgYW5kIHJlZmNudF90cmFja2VyIHJlc291cmNlcykgd2hlbiBgc2V0dXBfbmV0KClgIGZhaWxzLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IG1vZGlmeSBhbnkgZGF0YSBzZW50IHRvIHVzZXIgc3BhY2Ugb3IgYWx0ZXIgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBSZXNvdXJjZSBsZWFrcyBhbmQgbWVtb3J5IGxlYWtzIGFyZSB0eXBpY2FsbHkgZGV0ZWN0ZWQgYnkgS01FTUxFQUssIHdoaWxlIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYnVncyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgY2FsbCB0byBgcmVmX3RyYWNrZXJfZGlyX2V4aXQoKWAgaW4gdGhlIGVycm9yIHBhdGggb2YgYGNvcHlfbmV0X25zKClgIHRvIHByZXZlbnQgYSByZXNvdXJjZSBsZWFrIChzcGVjaWZpY2FsbHksIGEgZGVidWdmcyBmaWxlIGFuZCByZWZjbnRfdHJhY2tlciByZXNvdXJjZXMpIHdoZW4gYHNldHVwX25ldCgpYCBmYWlscy4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBub3IgZG9lcyBpdCBtb2RpZnkgYW55IGRhdGEgc2VudCB0byB1c2VyIHNwYWNlIG9yIGFsdGVyIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gUmVzb3VyY2UgbGVha3MgYW5kIG1lbW9yeSBsZWFrcyBhcmUgdHlwaWNhbGx5IGRldGVjdGVkIGJ5IEtNRU1MRUFLLCB3aGlsZSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGJ1Z3Mgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmx86t[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-27 05:26:37 +0000 UTC FinishedAt: 2026-08-27 05:43:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d2796ffe38cb4155afe0eab23636295b096c27a5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_NS", "NET_NS_REFCNT_TRACKER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d2796ffe38cb4155afe0eab23636295b096c27a5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_NS", "NET_NS_REFCNT_TRACKER" ], "series_id": "88b7f5a3-4ecc-4029-a925-3b49a3976627" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "copy_net_ns" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9OUyYjMzQ7LAogICAgJiMzNDtORVRfTlNfUkVGQ05UX1RSQUNLRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb3B5X25ldF9ucyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBtaXNzaW5nIGNhbGwgdG8gYHJlZl90cmFja2VyX2Rpcl9leGl0KClgIGluIHRoZSBlcnJvciBwYXRoIG9mIGBjb3B5X25ldF9ucygpYCB0byBwcmV2ZW50IGEgcmVzb3VyY2UgbGVhayAoc3BlY2lmaWNhbGx5LCBhIGRlYnVnZnMgZmlsZSBhbmQgcmVmY250X3RyYWNrZXIgcmVzb3VyY2VzKSB3aGVuIGBzZXR1cF9uZXQoKWAgZmFpbHMuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbm9yIGRvZXMgaXQgbW9kaWZ5IGFueSBkYXRhIHNlbnQgdG8gdXNlciBzcGFjZSBvciBhbHRlciBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFJlc291cmNlIGxlYWtzIGFuZCBtZW1vcnkgbGVha3MgYXJlIHR5cGljYWxseSBkZXRlY3RlZCBieSBLTUVNTEVBSywgd2hpbGUgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIChyZWZjbnRfdHJhY2tlciBhbmQgaXRzIGRlYnVnZnMgZmlsZSkgaW4gdGhlIGVycm9yIHBhdGggb2YgY29weV9uZXRfbnMoKSB3aGVuIHNldHVwX25ldCgpIGZhaWxzLiBGdXp6aW5nIGNvcHlfbmV0X25zIHdpdGggZmF1bHQgaW5qZWN0aW9uIGNhbiBoZWxwIHZlcmlmeSB0aGUgZml4LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDUwZjgyZGZiMjJlODkzZDgyYmM5YTYzMDY0Mjg5MGJlMDM3Y2ZiMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDA1OjQxOjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1xuaW5kZXggYTkxZDJiNThhYWRkZi4uMGMzZjE2OWQ5YWZiYyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jXG5AQCAtNTkxLDYgJiM0Mzs1OTEsMTAgQEAgc3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxuIFx0XHRrZXlfcmVtb3ZlX2RvbWFpbihuZXQtXHUwMDNla2V5X2RvbWFpbik7XG4gI2VuZGlmXG4gXHRcdHB1dF91c2VyX25zKHVzZXJfbnMpO1xuJiM0MztcdFx0Lyogc2V0dXBfbmV0KCkgZmFpbHVyZSBpcyBub3Qgcm91dGVkIHRocm91Z2ggX19wdXRfbmV0KCksIHNvIHRoZVxuJiM0MztcdFx0ICogcmVmY250X3RyYWNrZXIgKGFuZCBpdHMgZGVidWdmcyBmaWxlKSBoYXMgdG8gYmUgcmVsZWFzZWQgaGVyZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmVmX3RyYWNrZXJfZGlyX2V4aXQoXHUwMDI2bmV0LVx1MDAzZXJlZmNudF90cmFja2VyKTtcbiBcdFx0bmV0X3Bhc3NpdmVfZGVjKG5ldCk7XG4gZGVjX3Vjb3VudHM6XG4gXHRcdGRlY19uZXRfbmFtZXNwYWNlcyh1Y291bnRzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX05TJiMzNDssCiAgICAmIzM0O05FVF9OU19SRUZDTlRfVFJBQ0tFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvcHlfbmV0X25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmVzb3VyY2UgbGVhayAocmVmY250X3RyYWNrZXIgYW5kIGl0cyBkZWJ1Z2ZzIGZpbGUpIGluIHRoZSBlcnJvciBwYXRoIG9mIGNvcHlfbmV0X25zKCkgd2hlbiBzZXR1cF9uZXQoKSBmYWlscy4gRnV6emluZyBjb3B5X25ldF9ucyB3aXRoIGZhdWx0IGluamVjdGlvbiBjYW4gaGVscCB2ZXJpZnkgdGhlIGZpeC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ1MGY4MmRmYjIyZTg5M2Q4MmJjOWE2MzA2NDI4OTBiZTAzN2NmYjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAwNTo0MToyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYwppbmRleCBhOTFkMmI1OGFhZGRmLi4wYzNmMTY5ZDlhZmJjIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jCkBAIC01OTEsNiAmIzQzOzU5MSwxMCBAQCBzdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsCiAJCWtleV9yZW1vdmVfZG9tYWluKG5ldC0mZ3Q7a2V5X2RvbWFpbik7CiAjZW5kaWYKIAkJcHV0X3VzZXJfbnModXNlcl9ucyk7CiYjNDM7CQkvKiBzZXR1cF9uZXQoKSBmYWlsdXJlIGlzIG5vdCByb3V0ZWQgdGhyb3VnaCBfX3B1dF9uZXQoKSwgc28gdGhlCiYjNDM7CQkgKiByZWZjbnRfdHJhY2tlciAoYW5kIGl0cyBkZWJ1Z2ZzIGZpbGUpIGhhcyB0byBiZSByZWxlYXNlZCBoZXJlLgomIzQzOwkJICovCiYjNDM7CQlyZWZfdHJhY2tlcl9kaXJfZXhpdCgmYW1wO25ldC0mZ3Q7cmVmY250X3RyYWNrZXIpOwogCQluZXRfcGFzc2l2ZV9kZWMobmV0KTsKIGRlY191Y291bnRzOgogCQlkZWNfbmV0X25hbWVzcGFjZXModWNvdW50cyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldCBOYW1lc3BhY2UgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNgLiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSBhZGRlZCBgcmVmX3RyYWNrZXJfZGlyX2V4aXQoJmFtcDtuZXQtJmd0O3JlZmNudF90cmFja2VyKTtgIHRvIHRoZSBlcnJvciBwYXRoIG9mIGBjb3B5X25ldF9ucygpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCByaWdodCwgcmVzb3VyY2UgdHJhY2tpbmcg4oCTIGdvb2QuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgYWRkaXRpb24gaXMgbmVjZXNzYXJ5LiBPYnZpb3VzbHksIHRoaXMgaXMgYWJvdXQgaGFuZGxpbmcgcmVmZXJlbmNlIGNvdW50cyB3aXRoaW4gdGhlIG5ldHdvcmsgbmFtZXNwYWNlIGFuZCBjbGVhbmluZyB1cCBjb3JyZWN0bHkgd2hlbiB0aGVyZSYjMzk7cyBhIGZhaWx1cmUgZHVyaW5nIHRoZSBjb3B5LiBJIGJldHRlciBkaWcgaW50byB0aGUgYGNvcHlfbmV0X25zKClgIGZ1bmN0aW9uIGl0c2VsZiB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBjb250ZXh0IGFuZCB3aGF0IGNvdWxkIGhhdmUgYmVlbiBtaXNzZWQgcHJldmlvdXNseSB0aGF0IHRyaWdnZXJlZCB0aGlzIGZpeC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvcHlfbmV0X25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYz01NDc9dm9pZCBuZXRfZHJvcF9ucyhzdHJ1Y3QgbnNfY29tbW9uICpucylcbi0tXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNTUyLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jOjU1MzpzdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNTU0LVx0XHRcdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywgc3RydWN0IG5ldCAqb2xkX25ldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzk2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgY29weV9uZXRfbnMoKWAqKgoKT2theSwgdGltZSB0byBkaXNzZWN0IGBjb3B5X25ldF9ucygpYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2Qgd2hlbiBhIG5ldHdvcmsgbmFtZXNwYWNlIGlzIGR1cGxpY2F0ZWQsIHNvIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCBmb3IgdGhlIHNvdXJjZSBjb2RlIGluIGBuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNgLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIHRoZSBjb3JlIG9mIHRoZSBkdXBsaWNhdGlvbiBwcm9jZXNzLCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZToKCiogICAqKlJlc291cmNlIER1cGxpY2F0aW9uIHZzLiBTaGFyaW5nOioqIElzIGl0IGEgZnVsbCBkZWVwIGNvcHksIG9yIGRvZXMgaXQgY2xldmVybHkgc2hhcmUgY2VydGFpbiByZXNvdXJjZXMgd2hlcmUgcG9zc2libGUgdG8gbWluaW1pemUgb3ZlcmhlYWQ/IEkmIzM5O20gcGFydGljdWxhcmx5IGN1cmlvdXMgYWJvdXQgdGhpbmdzIGxpa2Ugcm91dGVzLCBhZGRyZXNzZXMsIGFuZCBvdGhlciBuZXR3b3JrIHN0YXRlLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgdHJhZGUtb2ZmcyBiZXR3ZWVuIGEgY29tcGxldGUgY29weSBhbmQgcG90ZW50aWFsIHNoYXJlZCBzdGF0ZS4KKiAgICoqUElEIGFuZCBOYW1lc3BhY2UgQXNzb2NpYXRpb246KiogSG93IGlzIHRoZSBuZXcgbmFtZXNwYWNlIGxpbmtlZCB0byBwcm9jZXNzZXM/IElzIHRoZXJlIGEgY2xlYW4gc2VwYXJhdGlvbiwgb3IgYXJlIHRoZXJlIHBvdGVudGlhbCBnb3RjaGFzIHJlbGF0ZWQgdG8gcHJvY2VzcyBsaWZldGltZXMgYW5kIG5hbWVzcGFjZSBtZW1iZXJzaGlwPyBXaGF0IGlzIGdvaW5nIG9uIGZvciB0YXNrcyB0aGF0IG1pZ3JhdGUgYmV0d2VlbiBuYW1lc3BhY2VzPwoqICAgKipTeW5jaHJvbml6YXRpb246KiogR2l2ZW4gdGhlIG11bHRpLXRocmVhZGVkIG5hdHVyZSBvZiB0aGUga2VybmVsLCBJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgb3IgYXRvbWljIG9wZXJhdGlvbnMgdXNlZCB0byBlbnN1cmUgY29uc2lzdGVuY3kgZHVyaW5nIHRoZSBjb3B5LiBBbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhcmUgYSBiaWcgcmVkIGZsYWcgaW4gdGhpcyBhcmVhLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVtIGZ1bGx5LgoqICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0IGtpbmQgb2YgZXJyb3IgY2hlY2tpbmcgaXMgaW1wbGVtZW50ZWQsIGFuZCBob3cgYXJlIGZhaWx1cmVzIGhhbmRsZWQ/IFRoZSBuZXR3b3JrIG5hbWVzcGFjZSBtZWNoYW5pc20gaXMgcHJldHR5IGNvbXBsZXgsIHNvIEkgaW1hZ2luZSB0aGVyZSBhcmUgYSBsb3Qgb2YgcG90ZW50aWFsIGZhaWx1cmUgcG9pbnRzLiBIb3cgZ3JhY2VmdWxseSBkb2VzIHRoaXMgZnVuY3Rpb24gZGVhbCB3aXRoIHRoZW0/CiogICAqKkhvb2tzIGFuZCBFeHRlbnNpb25zOioqIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9ucyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgZXh0ZW5zaWJsZSwgcGVyaGFwcyB0aHJvdWdoIGhvb2tzIG9yIGNhbGxiYWNrcy4gVGhpcyB3b3VsZCBnaXZlIGNsdWVzIHRvIGhvdyBvdGhlciBtb2R1bGVzIGNhbiBpbnRlZ3JhdGUgd2l0aCBuZXR3b3JrIG5hbWVzcGFjZSBjcmVhdGlvbi4KKiAgICoqTWVtb3J5IE1hbmFnZW1lbnQ6KiogSG93IGRvZXMgbWVtb3J5IGdldCBoYW5kbGVkPyBJcyB0aGVyZSBwb3RlbnRpYWwgZm9yIGZyYWdtZW50YXRpb24gb3IgbWVtb3J5IGxlYWtzPyBJZiBhbnl0aGluZyBpcyBhbGxvY2F0ZWQsIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlbGF0ZWQgYGtmcmVlKClgIGNvdW50ZXJwYXJ0cy4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdGhvcm91Z2hseSwgYXMgYW55IHdlYWtuZXNzIGluIHRoaXMgZnVuY3Rpb24gY291bGQgaGF2ZSByaXBwbGUgZWZmZWN0cy4gVGhpcyBpcyBhIGNydWNpYWwgY29tcG9uZW50IHRoYXQgZGlyZWN0bHkgaW5mbHVlbmNlcyB0aGUgc3RhYmlsaXR5LCBwZXJmb3JtYW5jZSwgYW5kIHNlY3VyaXR5IG9mIGNvbnRhaW5lcml6ZWQgZW52aXJvbm1lbnRzIGFuZCBvdGhlciBtb2Rlcm4gbmV0d29ya2luZyBhcHBsaWNhdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTUzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTUzOlx0c3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxuIDU1NDpcdFx0XHRcdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywgc3RydWN0IG5ldCAqb2xkX25ldClcbiA1NTU6XHR7XG4gNTU2Olx0XHRzdHJ1Y3QgdWNvdW50cyAqdWNvdW50cztcbiA1NTc6XHRcdHN0cnVjdCBuZXQgKm5ldDtcbiA1NTg6XHRcdGludCBydjtcbiA1NTk6XHRcbiA1NjA6XHRcdGlmICghKGZsYWdzIFx1MDAyNiBDTE9ORV9ORVdORVQpKVxuIDU2MTpcdFx0XHRyZXR1cm4gZ2V0X25ldChvbGRfbmV0KTtcbiA1NjI6XHRcbiA1NjM6XHRcdHVjb3VudHMgPSBpbmNfbmV0X25hbWVzcGFjZXModXNlcl9ucyk7XG4gNTY0Olx0XHRpZiAoIXVjb3VudHMpXG4gNTY1Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xuIDU2NjpcdFxuIDU2NzpcdFx0bmV0ID0gbmV0X2FsbG9jKCk7XG4gNTY4Olx0XHRpZiAoIW5ldCkge1xuIDU2OTpcdFx0XHRydiA9IC1FTk9NRU07XG4gNTcwOlx0XHRcdGdvdG8gZGVjX3Vjb3VudHM7XG4gNTcxOlx0XHR9XG4gNTcyOlx0XG4gNTczOlx0XHRydiA9IHByZWluaXRfbmV0KG5ldCwgdXNlcl9ucyk7XG4gNTc0Olx0XHRpZiAocnYgXHUwMDNjIDApXG4gNTc1Olx0XHRcdGdvdG8gZGVjX3Vjb3VudHM7XG4gNTc2Olx0XHRuZXQtXHUwMDNldWNvdW50cyA9IHVjb3VudHM7XG4gNTc3Olx0XHRnZXRfdXNlcl9ucyh1c2VyX25zKTtcbiA1Nzg6XHRcbiA1Nzk6XHRcdHJ2ID0gZG93bl9yZWFkX2tpbGxhYmxlKFx1MDAyNnBlcm5ldF9vcHNfcndzZW0pO1xuIDU4MDpcdFx0aWYgKHJ2IFx1MDAzYyAwKVxuIDU4MTpcdFx0XHRnb3RvIHB1dF91c2VybnM7XG4gNTgyOlx0XG4gNTgzOlx0XHRydiA9IHNldHVwX25ldChuZXQpO1xuIDU4NDpcdFxuIDU4NTpcdFx0dXBfcmVhZChcdTAwMjZwZXJuZXRfb3BzX3J3c2VtKTtcbiA1ODY6XHRcbiA1ODc6XHRcdGlmIChydiBcdTAwM2MgMCkge1xuIDU4ODpcdHB1dF91c2VybnM6XG4gNTg5Olx0XHRcdG5zX2NvbW1vbl9mcmVlKG5ldCk7XG4gNTkwOlx0I2lmZGVmIENPTkZJR19LRVlTXG4gNTkxOlx0XHRcdGtleV9yZW1vdmVfZG9tYWluKG5ldC1cdTAwM2VrZXlfZG9tYWluKTtcbiA1OTI6XHQjZW5kaWZcbiA1OTM6XHRcdFx0cHV0X3VzZXJfbnModXNlcl9ucyk7XG4gNTk0Olx0XHRcdC8qIHNldHVwX25ldCgpIGZhaWx1cmUgaXMgbm90IHJvdXRlZCB0aHJvdWdoIF9fcHV0X25ldCgpLCBzbyB0aGVcbiA1OTU6XHRcdFx0ICogcmVmY250X3RyYWNrZXIgKGFuZCBpdHMgZGVidWdmcyBmaWxlKSBoYXMgdG8gYmUgcmVsZWFzZWQgaGVyZS5cbiA1OTY6XHRcdFx0ICovXG4gNTk3Olx0XHRcdHJlZl90cmFja2VyX2Rpcl9leGl0KFx1MDAyNm5ldC1cdTAwM2VyZWZjbnRfdHJhY2tlcik7XG4gNTk4Olx0XHRcdG5ldF9wYXNzaXZlX2RlYyhuZXQpO1xuIDU5OTpcdGRlY191Y291bnRzOlxuIDYwMDpcdFx0XHRkZWNfbmV0X25hbWVzcGFjZXModWNvdW50cyk7XG4gNjAxOlx0XHRcdHJldHVybiBFUlJfUFRSKHJ2KTtcbiA2MDI6XHRcdH1cbiA2MDM6XHRcdHJldHVybiBuZXQ7XG4gNjA0Olx0fVxuIDYwNTpcdFxuIDYwNjpcdC8qKlxuIDYwNzpcdCAqIG5ldF9uc19nZXRfb3duZXJzaGlwIC0gZ2V0IHN5c2ZzIG93bmVyc2hpcCBkYXRhIGZvciBAbmV0XG4gNjA4Olx0ICogQG5ldDogbmV0d29yayBuYW1lc3BhY2UgaW4gcXVlc3Rpb24gKGNhbiBiZSBOVUxMKVxuIDYwOTpcdCAqIEB1aWQ6IGtlcm5lbCB1c2VyIElEIGZvciBzeXNmcyBvYmplY3RzXG4gNjEwOlx0ICogQGdpZDoga2VybmVsIGdyb3VwIElEIGZvciBzeXNmcyBvYmplY3RzXG4gNjExOlx0ICpcbiA2MTI6XHQgKiBSZXR1cm5zIHRoZSB1aWQvZ2lkIHBhaXIgb2Ygcm9vdCBpbiB0aGUgdXNlciBuYW1lc3BhY2UgYXNzb2NpYXRlZCB3aXRoIHRoZVxuIDYxMzpcdCAqIGdpdmVuIG5ldHdvcmsgbmFtZXNwYWNlLlxuIDYxNDpcdCAqL1xuIDYxNTpcdHZvaWQgbmV0X25zX2dldF9vd25lcnNoaXAoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBrdWlkX3QgKnVpZCwga2dpZF90ICpnaWQpXG4gNjE2Olx0e1xuIDYxNzpcdFx0aWYgKG5ldCkge1xuIDYxODpcdFx0XHRrdWlkX3QgbnNfcm9vdF91aWQgPSBtYWtlX2t1aWQobmV0LVx1MDAzZXVzZXJfbnMsIDApO1xuIDYxOTpcdFx0XHRrZ2lkX3QgbnNfcm9vdF9naWQgPSBtYWtlX2tnaWQobmV0LVx1MDAzZXVzZXJfbnMsIDApO1xuIDYyMDpcdFxuIDYyMTpcdFx0XHRpZiAodWlkX3ZhbGlkKG5zX3Jvb3RfdWlkKSlcbiA2MjI6XHRcdFx0XHQqdWlkID0gbnNfcm9vdF91aWQ7XG4gNjIzOlx0XG4gNjI0Olx0XHRcdGlmIChnaWRfdmFsaWQobnNfcm9vdF9naWQpKVxuIDYyNTpcdFx0XHRcdCpnaWQgPSBuc19yb290X2dpZDtcbiA2MjY6XHRcdH0gZWxzZSB7XG4gNjI3Olx0XHRcdCp1aWQgPSBHTE9CQUxfUk9PVF9VSUQ7XG4gNjI4Olx0XHRcdCpnaWQgPSBHTE9CQUxfUk9PVF9HSUQ7XG4gNjI5Olx0XHR9XG4gNjMwOlx0fVxuIDYzMTpcdEVYUE9SVF9TWU1CT0xfR1BMKG5ldF9uc19nZXRfb3duZXJzaGlwKTtcbiA2MzI6XHRcbiA2MzM6XHRzdGF0aWMgdm9pZCB1bmhhc2hfbnNpZChzdHJ1Y3QgbmV0ICpsYXN0KVxuIDYzNDpcdHtcbiA2MzU6XHRcdHN0cnVjdCBuZXQgKnRtcCwgKnBlZXI7XG4gNjM2Olx0XG4gNjM3Olx0XHQvKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGZyb20gY2xlYW51cF9uZXQoKSB3b3JrLFxuIDYzODpcdFx0ICogYW5kIHRoaXMgd29yayBpcyB0aGUgb25seSBwcm9jZXNzLCB0aGF0IG1heSBkZWxldGVcbiA2Mzk6XHRcdCAqIGEgbmV0IGZyb20gbmV0X25hbWVzcGFjZV9saXN0LiBTbywgd2hlbiB0aGUgYmVsb3dcbiA2NDA6XHRcdCAqIGlzIGV4ZWN1dGluZywgdGhlIGxpc3QgbWF5IG9ubHkgZ3Jvdy4gVGh1cywgd2UgZG8gbm90XG4gNjQxOlx0XHQgKiB1c2UgZm9yX2VhY2hfbmV0X3JjdSgpIG9yIG5ldF9yd3NlbS5cbiA2NDI6XHRcdCAqL1xuIDY0MzpcdFx0Zm9yX2VhY2hfbmV0KHRtcCkge1xuIDY0NDpcdFx0XHRpbnQgaWQgPSAwO1xuIDY0NTpcdFxuIDY0NjpcdFx0XHRzcGluX2xvY2soXHUwMDI2dG1wLVx1MDAzZW5zaWRfbG9jayk7XG4gNjQ3Olx0XHRcdHdoaWxlICgocGVlciA9IGlkcl9nZXRfbmV4dChcdTAwMjZ0bXAtXHUwMDNlbmV0bnNfaWRzLCBcdTAwMjZpZCkpKSB7XG4gNjQ4Olx0XHRcdFx0aW50IGN1cnJfaWQgPSBpZDtcbiA2NDk6XHRcbiA2NTA6XHRcdFx0XHRpZCYjNDM7JiM0Mzs7XG4gNjUxOlx0XHRcdFx0aWYgKCFwZWVyLVx1MDAzZWlzX2R5aW5nKVxuIDY1MjpcdFx0XHRcdFx0Y29udGludWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQwNwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDY1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFdvcnRoaW5lc3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBhZGRzIGByZWZfdHJhY2tlcl9kaXJfZXhpdGAgdG8gdGhlIGVycm9yIHBhdGggaW4gYGNvcHlfbmV0X25zKClgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7bWVtb3J5L3Jlc291cmNlIGxlYWsgZml4LCBpbnRlcmVzdGluZy4mIzM0OyBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIGNvcmUga2VybmVsIGZ1bmN0aW9uLCBgY29weV9uZXRfbnMoKWAsIHdoaWNoIGlzIGNydWNpYWwgZm9yIG5ldHdvcmsgbmFtZXNwYWNlIGNyZWF0aW9uIHZpYSBgY2xvbmUoQ0xPTkVfTkVXTkVUKWAgb3IgYHVuc2hhcmUoQ0xPTkVfTkVXTkVUKWAuIFRoZSBlcnJvciBwYXRoIHdlJiMzOTtyZSB0YXJnZXRpbmcgaXMgaGl0IHdoZW4gYHNldHVwX25ldChuZXQpYCBmYWlscywgcG90ZW50aWFsbHkgZHVlIHRvIG1lbW9yeSBpc3N1ZXMgb3Igc3Vic3lzdGVtIGluaXRpYWxpemF0aW9uIGZhaWx1cmVzIHdpdGhpbiB0aGUgbmV0d29yayBuYW1lc3BhY2UuCgpTbywgdGhlIGNoYWxsZW5nZSBoZXJlIGlzIHRoYXQgdHJpZ2dlcmluZyB0aGlzIHNwZWNpZmljIGVycm9yIHBhdGggcmVxdWlyZXMgZWl0aGVyIGZhdWx0IGluamVjdGlvbiBvciBjcmVhdGluZyBjb25kaXRpb25zIHdoZXJlIGBzZXR1cF9uZXQoKWAgZGVsaWJlcmF0ZWx5IGZhaWxzLiBOb3QgYSB3YWxrIGluIHRoZSBwYXJrLCBidXQgbm90IGltcG9zc2libGUuIGByZWZfdHJhY2tlcl9kaXJfZXhpdGAsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgZXNzZW50aWFsbHkgYSBjbGVhbnVwIGZ1bmN0aW9uIHRvIHByZXZlbnQgYSBsZWFrIG9mIHRoZSBgcmVmY250X3RyYWNrZXJgIGFuZCBpdHMgYXNzb2NpYXRlZCBkZWJ1Z2ZzIGZpbGUuIEl0JiMzOTtzIG5vdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBzZW5zZSB0aGF0IGl0IGRvZXNuJiMzOTt0ICphZGQqIG5ldyBmZWF0dXJlcywgYnV0IGl0ICpmaXhlcyogYSByZXNvdXJjZSBsZWFrLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnQuCgpUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgZnV6emFibGU/IEFic29sdXRlbHkuIEl0JiMzOTtzIGEgcmVhY2hhYmxlIGVycm9yIHBhdGggd2l0aGluIGEgY29yZSBrZXJuZWwgZnVuY3Rpb24uIEZ1enppbmcgY291bGQgaGVscCBjb25maXJtIHRoYXQgdGhlIGxlYWsgaXMgdHJ1bHkgZml4ZWQgYW5kLCBpbXBvcnRhbnRseSwgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgY3Jhc2hlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbiYjMzk7dCBhIHRlYXJkb3duIGNhbGxiYWNrLCBzbyBsZXQgbWUgY2hlY2sgd2hhdCB0aGUgaW5zdHJ1Y3Rpb25zIHN0YXRlLi4uT2theSwgdGhpcyBpc24mIzM5O3QgYSBkcml2ZXIgdGVhcmRvd24sIGl0JiMzOTtzIGEgY29yZSBrZXJuZWwgZnVuY3Rpb24uCgpOb3csIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBpbnN0cnVjdGlvbnMsIGl0JiMzOTtzIGNsZWFyIHRoaXMgaXMgTk9UIGEgZG9jdW1lbnRhdGlvbiBjaGFuZ2UsIGEgbG9nZ2luZyBtb2RpZmljYXRpb24sIGEgbnVtZXJpYyBjb25zdGFudCwgdW5yZWFjaGFibGUgY29kZSwgb3IgYSBkcml2ZXIgdGVhcmRvd24gY2FsbGJhY2suIEl0JiMzOTtzIGEgY2xlYW51cCBvbiBhbiBlcnJvciBwYXRoIHdpdGhpbiBjb3JlIGNvZGUsIGFuZCB0aHVzLCBJJiMzOTttIGNvbmZpZGVudCBpdCYjMzk7cyAqV29ydGhGdXp6aW5nPXRydWUqLgoKTXkgZm9jdXMgZm9yIGZ1enppbmcgd2lsbCBiZSBgY29weV9uZXRfbnNgIHRvIGVuc3VyZSB0aGF0IHRoaXMgY2xlYW51cCBoYXBwZW5zIGFzIGV4cGVjdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX05FVF9OU2AgaXMgZW5hYmxlZC4gSWYgYGNvcHlfbmV0X25zYCByZWxpZXMgb24gaXQsIEkmIzM5O2xsIG5lZWQgdG8gc2V0IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvcHlfbmV0X25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYz01NDc9dm9pZCBuZXRfZHJvcF9ucyhzdHJ1Y3QgbnNfY29tbW9uICpucylcbi0tXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNTUyLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jOjU1MzpzdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNTU0LVx0XHRcdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywgc3RydWN0IG5ldCAqb2xkX25ldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Njk0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIEtjb25maWcgRGVwZW5kZW5jaWVzKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIGEgc3BlY2lmaWMgbmV0d29yayBzdWJzeXN0ZW0uIEZpcnN0LCBJJiMzOTttIHRoaW5raW5nLCB3aGVyZSB3b3VsZCB0aGlzIGluZm9ybWF0aW9uIGJlIG1vc3QgcmVsZXZhbnQ/IEdpdmVuIHRoZSB0YXNrLCBJJiMzOTtsbCBzdGFydCB3aXRoIGBuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIGEgbG90IG9mIHRoZSBjb3JlIG5ldHdvcmsgbmFtZXNwYWNlIHN0dWZmIHJlc2lkZXMuIE5vdywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgYmFjayB0byB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBzaG93IG1lIHRoZSByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIga2VybmVsIGZlYXR1cmVzLiBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHdoYXQgb3RoZXIgZnVuY3Rpb25hbGl0aWVzIGFyZSB0aWVkIHRvIHRoZSBiYXNlIG5ldHdvcmsgbmFtZXNwYWNlLiBTbywgSSBuZWVkIHRvIHNlZSB3aGF0IG9wdGlvbnMgY29udHJvbCB3aGV0aGVyIGBuZXRfbmFtZXNwYWNlLmNgIGlzIGV2ZW4gY29tcGlsZWQsIGFuZCB3aGF0LCBpZiBhbnksIGRlcGVuZGVuY2llcyBjYXNjYWRlIGZyb20gaXQuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRfbmFtZXNwYWNlXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT02PW9iai15IDo9IHNvY2subyBza2J1ZmYubyBkYXRhZ3JhbS5vIHN0cmVhbS5vIHNjbS5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZTo3Olx0IGdlbl9zdGF0cy5vIGdlbl9lc3RpbWF0b3IubyBuZXRfbmFtZXNwYWNlLm8gc2VjdXJlX3NlcS5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZS04LVx0IGZsb3dfZGlzc2VjdG9yLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAwOQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWw6CgoqKkRpZ2dpbmcgaW50byB0aGUgS2VybmVsIENvbXBpbGF0aW9uKioKCkFscmlnaHQsIHNvIEkgc2VlIHRoYXQgYG5ldF9uYW1lc3BhY2Uub2AgaXMgYmVpbmcgYnVpbHQgdW5jb25kaXRpb25hbGx5IOKAkyBpdCYjMzk7cyBhbiBgb2JqLXlgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBiZWNhdXNlIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgYG5ldF9uYW1lc3BhY2VgICpzaG91bGQqIGJlIGNvbnRyb2xsZWQgYnkgYSBjb25maWcgb3B0aW9uLCBzcGVjaWZpY2FsbHkgYENPTkZJR19ORVRfTlNgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIGlzIGNvcnJlY3QsIHNpbmNlIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIGNhbiBzb21ldGltZXMgZG8gdW5leHBlY3RlZCB0aGluZ3MuIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBydWxlcyBkaWN0YXRlIHRoZXJlLiBJdCYjMzk7cyB0aW1lIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIHVuY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgaW50ZW5kZWQgb3IgYSBwb3RlbnRpYWwgb3ZlcnNpZ2h0LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGF0IG9iamVjdCBmaWxlIGlzIGhhbmRsZWQgaW4gcmVsYXRpb24gdG8gdGhhdCBjb25maWcgc3ltYm9sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfTlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9MjE3Mz1zdGF0aWMgdm9pZCBydG5sX25ldF9kZXZfbG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTIxODktXG5uZXQvY29yZS9kZXYuYzoyMTkwOiNpZmRlZiBDT05GSUdfTkVUX05TXG5uZXQvY29yZS9kZXYuYy0yMTkxLVx0XHQvKiBkZXYgbWlnaHQgaGF2ZSBiZWVuIG1vdmVkIHRvIGFub3RoZXIgbmV0bnMuICovXG4tLVxubmV0L2NvcmUvZGV2LmM9MTA4ODY9c3RhdGljIGJvb2wgZnJvbV9jbGVhbnVwX25ldCh2b2lkKVxubmV0L2NvcmUvZGV2LmMtMTA4ODcte1xubmV0L2NvcmUvZGV2LmM6MTA4ODg6I2lmZGVmIENPTkZJR19ORVRfTlNcbm5ldC9jb3JlL2Rldi5jLTEwODg5LVx0cmV0dXJuIGN1cnJlbnQgPT0gUkVBRF9PTkNFKGNsZWFudXBfbmV0X3Rhc2spO1xuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIxNjc9c3RhdGljIHN0cnVjdCBuc19jb21tb24gKm5ldF9ncmFiX2N1cnJlbnRfbnModm9pZClcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTY5LVx0c3RydWN0IG5ldCAqbmV0ID0gY3VycmVudC1cdTAwM2Vuc3Byb3h5LVx1MDAzZW5ldF9ucztcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIxNzA6I2lmZGVmIENPTkZJR19ORVRfTlNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxNzEtXHRpZiAobmV0KVxuLS1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYz00NDA9c3RhdGljIF9fbmV0X2luaXQgaW50IHNldHVwX25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTQ3MC1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo0NzE6I2lmZGVmIENPTkZJR19ORVRfTlNcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy00NzItc3RhdGljIHN0cnVjdCB1Y291bnRzICppbmNfbmV0X25hbWVzcGFjZXMoc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucylcbi0tXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9ODE3PUVYUE9SVF9TWU1CT0xfR1BMKGdldF9uZXRfbnNfYnlfcGlkKTtcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy04MTgtXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6ODE5OiNpZmRlZiBDT05GSUdfTkVUX05TX1JFRkNOVF9UUkFDS0VSXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtODIwLXN0YXRpYyB2b2lkIG5ldF9uc19uZXRfZGVidWdmcyhzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTExODc9c3RhdGljIHZvaWQgcnRubF9uZXRfbm90aWZ5aWQoc3RydWN0IG5ldCAqbmV0LCBpbnQgY21kLCBpbnQgaWQsIHUzMiBwb3J0aWQsXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEyMTUtXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6MTIxNjojaWZkZWYgQ09ORklHX05FVF9OU1xubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEyMTctc3RhdGljIHZvaWQgX19pbml0IG5ldG5zX2lwdjRfc3RydWN0X2NoZWNrKHZvaWQpXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTEyNjc9dm9pZCBfX2luaXQgbmV0X25zX2luaXQodm9pZClcbi0tXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTI3MC1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzoxMjcxOiNpZmRlZiBDT05GSUdfTkVUX05TXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTI3Mi1cdG5ldG5zX2lwdjRfc3RydWN0X2NoZWNrKCk7XG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEzMTEtXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6MTMxMjojaWZkZWYgQ09ORklHX05FVF9OU1xubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEzMTMtc3RhdGljIGludCBfX3JlZ2lzdGVyX3Blcm5ldF9vcGVyYXRpb25zKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTEzNjc9c3RhdGljIHZvaWQgX191bnJlZ2lzdGVyX3Blcm5ldF9vcGVyYXRpb25zKHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyAqb3BzKVxuLS1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMzc4LVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jOjEzNzk6I2VuZGlmIC8qIENPTkZJR19ORVRfTlMgKi9cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMzgwLVxuLS1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYz0xNTE1PUVYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfcGVybmV0X2RldmljZSk7XG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTUxNi1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzoxNTE3OiNpZmRlZiBDT05GSUdfTkVUX05TXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTUxOC1zdGF0aWMgc3RydWN0IG5zX2NvbW1vbiAqbmV0bnNfZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yMjkwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBpZmxhX3BvbGljeVtJRkxBX01BWCYjNDM7MV0gPSB7XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjMwNC1cdFtJRkxBX0xJTktJTkZPXVx0XHQ9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyMzA1Olx0W0lGTEFfTkVUX05TX1BJRF1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjIzMDY6XHRbSUZMQV9ORVRfTlNfRkRdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMzA3LVx0LyogSUZMQV9JRkFMSUFTIGlzIGEgc3RyaW5nLCBidXQgcG9saWN5IGlzIHNldCB0byBOTEFfQklOQVJZIHRvXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MjY2Nz1zdGF0aWMgc3RydWN0IG5ldCAqcnRubF9saW5rX2dldF9uZXRfaWZsYShzdHJ1Y3QgbmxhdHRyICp0YltdKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTI2NzMtXHQgKi9cbm5ldC9jb3JlL3J0bmV0bGluay5jOjI2NzQ6XHRpZiAodGJbSUZMQV9ORVRfTlNfUElEXSlcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI2NzU6XHRcdG5ldCA9IGdldF9uZXRfbnNfYnlfcGlkKG5sYV9nZXRfdTMyKHRiW0lGTEFfTkVUX05TX1BJRF0pKTtcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI2NzY6XHRlbHNlIGlmICh0YltJRkxBX05FVF9OU19GRF0pXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyNjc3Olx0XHRuZXQgPSBnZXRfbmV0X25zX2J5X2ZkKG5sYV9nZXRfdTMyKHRiW0lGTEFfTkVUX05TX0ZEXSkpO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjY3OC1cbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yNjkxPUVYUE9SVF9TWU1CT0wocnRubF9saW5rX2dldF9uZXQpO1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTI2OTUtICpcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI2OTY6ICogMS4gSUZMQV9ORVRfTlNfUElEXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyNjk3OiAqIDIuIElGTEFfTkVUX05TX0ZEXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNjk4LSAqIDMuIElGTEFfVEFSR0VUX05FVE5TSURcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yNzAwPXN0YXRpYyBzdHJ1Y3QgbmV0ICpydG5sX2xpbmtfZ2V0X25ldF9ieV9ubGF0dHIoc3RydWN0IG5ldCAqc3JjX25ldCxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNzA0LVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjcwNTpcdGlmICh0YltJRkxBX05FVF9OU19QSURdIHx8IHRiW0lGTEFfTkVUX05TX0ZEXSlcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI3MDYtXHRcdHJldHVybiBydG5sX2xpbmtfZ2V0X25ldChzcmNfbmV0LCB0Yik7XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MjczOT1zdGF0aWMgaW50IHJ0bmxfZW5zdXJlX3VuaXF1ZV9uZXRucyhzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTI3NDQtXHRpZiAobmV0bnNfaWRfb25seSkge1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6Mjc0NTpcdFx0aWYgKCF0YltJRkxBX05FVF9OU19QSURdIFx1MDAyNlx1MDAyNiAhdGJbSUZMQV9ORVRfTlNfRkRdKVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjc0Ni1cdFx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNzUxLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6Mjc1MjpcdGlmICh0YltJRkxBX1RBUkdFVF9ORVROU0lEXSBcdTAwMjZcdTAwMjYgKHRiW0lGTEFfTkVUX05TX1BJRF0gfHwgdGJbSUZMQV9ORVRfTlNfRkRdKSlcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI3NTMtXHRcdGdvdG8gaW52YWxpZF9hdHRyO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjc1NC1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjI3NTU6XHRpZiAodGJbSUZMQV9ORVRfTlNfUElEXSBcdTAwMjZcdTAwMjYgKHRiW0lGTEFfVEFSR0VUX05FVE5TSURdIHx8IHRiW0lGTEFfTkVUX05TX0ZEXSkpXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNzU2LVx0XHRnb3RvIGludmFsaWRfYXR0cjtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI3NTctXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyNzU4Olx0aWYgKHRiW0lGTEFfTkVUX05TX0ZEXSBcdTAwMjZcdTAwMjYgKHRiW0lGTEFfVEFSR0VUX05FVE5TSURdIHx8IHRiW0lGTEFfTkVUX05TX1BJRF0pKVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjc1OS1cdFx0Z290byBpbnZhbGlkX2F0dHI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNzAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfTkVUX05TYCBhbmQgUmVmZXJlbmNlIENvdW50aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgQ09ORklHX05FVF9OU2AsIHdoaWNoIEkgdW5kZXJzdGFuZCBpcyBhIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBob3cgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBtZWNoYW5pc20gd29ya3MgaW4gcmVsYXRpb24gdG8gdGhpcy4gSSYjMzk7dmUgbm90aWNlZCB0aGF0IGByZWZfdHJhY2tlcl9kaXJfZXhpdGAgaXMgY2FsbGVkIG9uIGBuZXQtJmd0O3JlZmNudF90cmFja2VyYCwgd2hpY2ggbWFrZXMgbWUgdGhpbmsgdGhlcmUgbWlnaHQgYmUgYSBkZXBlbmRlbmN5IHRvIGV4cGxvcmUuIFRoZSBxdWVzdGlvbiBpcywgaXMgYHJlZmNudF90cmFja2VyYCBpdHNlbGYgY29udGluZ2VudCBvbiBgQ09ORklHX05FVF9OU19SRUZDTlRfVFJBQ0tFUmA/IEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlc2UgdHlwZXMgb2YgY2hlY2tzLCBJIHRoaW5rIHRoZSBtb3N0IGRpcmVjdCB3YXkgdG8gZ2V0IGFuIGFuc3dlciBxdWlja2x5IGlzIHRvIGRpdmUgaW50byBgaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oYC4gVGhhdCBoZWFkZXIgZmlsZSBpcyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhlIGRldGFpbHMgb24gdGhlIHN0cnVjdCBkZWZpbml0aW9ucyBhbmQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGludm9sdmVkIHdpdGggbmV0IG5hbWVzcGFjZXMuIExldCYjMzk7cyBzZWUgd2hhdCBpdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWZjbnRfdHJhY2tlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg9NjI9c3RydWN0IG5ldCB7XG4tLVxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTk3LVx0c3RydWN0IG5zX2NvbW1vblx0bnM7XG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg6OTg6XHRzdHJ1Y3QgcmVmX3RyYWNrZXJfZGlyICByZWZjbnRfdHJhY2tlcjtcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDo5OTpcdHN0cnVjdCByZWZfdHJhY2tlcl9kaXIgIG5vdHJlZmNudF90cmFja2VyOyAvKiB0cmFja2VyIGZvciBvYmplY3RzIG5vdFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTEwMC1cdFx0XHRcdFx0XHQgICAgKiByZWZjb3VudGVkIGFnYWluc3QgbmV0bnNcbi0tXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg9MzY0PXN0YXRpYyBpbmxpbmUgdm9pZCBfX25ldG5zX3RyYWNrZXJfYWxsb2Moc3RydWN0IG5ldCAqbmV0LFxuLS1cbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0zNjktI2lmZGVmIENPTkZJR19ORVRfTlNfUkVGQ05UX1RSQUNLRVJcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDozNzA6XHRyZWZfdHJhY2tlcl9hbGxvYyhyZWZjb3VudGVkID8gXHUwMDI2bmV0LVx1MDAzZXJlZmNudF90cmFja2VyIDpcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDozNzE6XHRcdFx0XHQgICAgICAgXHUwMDI2bmV0LVx1MDAzZW5vdHJlZmNudF90cmFja2VyLFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTM3Mi1cdFx0XHQgIHRyYWNrZXIsIGdmcCk7XG4tLVxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oPTM4Mj1zdGF0aWMgaW5saW5lIHZvaWQgX19uZXRuc190cmFja2VyX2ZyZWUoc3RydWN0IG5ldCAqbmV0LFxuLS1cbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0zODYtI2lmZGVmIENPTkZJR19ORVRfTlNfUkVGQ05UX1RSQUNLRVJcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDozODc6ICAgICAgIHJlZl90cmFja2VyX2ZyZWUocmVmY291bnRlZCA/IFx1MDAyNm5ldC1cdTAwM2VyZWZjbnRfdHJhY2tlciA6XG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg6Mzg4Olx0XHRcdFx0ICAgICBcdTAwMjZuZXQtXHUwMDNlbm90cmVmY250X3RyYWNrZXIsIHRyYWNrZXIpO1xuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTM4OS0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA4MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmNudCBUcmFja2VyIENvbmZpZ3VyYXRpb24gJmFtcDsgVXNhZ2UqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGByZWZjbnRfdHJhY2tlcmAgc2l0dWF0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBgQ09ORklHX05FVF9OU19SRUZDTlRfVFJBQ0tFUmAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0ICplbmFibGVzKiB0aGUgd2hvbGUgcmVmY291bnQgdHJhY2tpbmcgbWVjaGFuaXNtLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIGdvdCBpdC4mIzM0OyBCdXQgdGhlbiBJIHNlZSB0aGF0IGByZWZfdHJhY2tlcl9kaXJfZXhpdGAgZ2V0cyBjYWxsZWQgdW5jb25kaXRpb25hbGx5IHdpdGhpbiBgY29weV9uZXRfbnNgLiBUaGF0JiMzOTtzIGEgYml0IG9mIGEgaGVhZC1zY3JhdGNoZXIuCgpUaGUgY29yZSBxdWVzdGlvbiB0aGF0IGp1bXBzIG91dCBhdCBtZSBub3cgaXMsICYjMzQ7RG9lcyBgcmVmX3RyYWNrZXJfZGlyX2V4aXRgIGFjdHVhbGx5ICpkbyogYW55dGhpbmcgbWVhbmluZ2Z1bCBpZiB0aGF0IGBDT05GSUdfTkVUX05TX1JFRkNOVF9UUkFDS0VSYCBpc24mIzM5O3Qgc2V0PyYjMzQ7IEkgbWVhbiwgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBwb3RlbnRpYWxseSBwZXJmb3JtYW5jZS1pbXBhY3RpbmcgY2FsbCBoZXJlLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzLgoKVG8gZ2V0IGEgZGVmaW5pdGl2ZSBhbnN3ZXIsIEkgbmVlZCB0byBjaGVjayB0aGUgc291cmNlLiBUaW1lIHRvIGhlYWQgb3ZlciB0byBgaW5jbHVkZS9saW51eC9yZWZfdHJhY2tlci5oYCBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4gVGhhdCBoZWFkZXIgZmlsZSBzaG91bGQgaGF2ZSB0aGUgY3J1Y2lhbCBkZXRhaWxzLCBkZWZpbml0aW9ucywgYW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGxvZ2ljIEkmIzM5O20gYWZ0ZXIuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGlmIGl0JiMzOTtzIHByb3RlY3RlZCBieSBhbiBgI2lmZGVmIENPTkZJR19ORVRfTlNfUkVGQ05UX1RSQUNLRVJgIGd1YXJkLCBvciBpZiB0aGVyZSYjMzk7cyBzb21lIHNvcnQgb2Ygbm8tb3Agb3IgcGxhY2Vob2xkZXIgYmVoYXZpb3IgZGVmaW5lZCBmb3IgdGhlIGRpc2FibGVkIGNhc2UuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZl90cmFja2VyX2Rpcl9leGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9yZWZfdHJhY2tlci5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcmVmX3RyYWNrZXIuaD01OD1zdGF0aWMgaW5saW5lIHZvaWQgcmVmX3RyYWNrZXJfZGlyX2luaXQoc3RydWN0IHJlZl90cmFja2VyX2RpciAqZGlyLFxuLS1cbmluY2x1ZGUvbGludXgvcmVmX3RyYWNrZXIuaC03My1cbmluY2x1ZGUvbGludXgvcmVmX3RyYWNrZXIuaDo3NDp2b2lkIHJlZl90cmFja2VyX2Rpcl9leGl0KHN0cnVjdCByZWZfdHJhY2tlcl9kaXIgKmRpcik7XG5pbmNsdWRlL2xpbnV4L3JlZl90cmFja2VyLmgtNzUtXG4tLVxuaW5jbHVkZS9saW51eC9yZWZfdHJhY2tlci5oPTEwMz12b2lkIHJlZl90cmFja2VyX2Rpcl9zeW1saW5rKHN0cnVjdCByZWZfdHJhY2tlcl9kaXIgKmRpciwgY29uc3QgY2hhciAqZm10LCAuLi4pXG4tLVxuaW5jbHVkZS9saW51eC9yZWZfdHJhY2tlci5oLTEwNi1cbmluY2x1ZGUvbGludXgvcmVmX3RyYWNrZXIuaDoxMDc6c3RhdGljIGlubGluZSB2b2lkIHJlZl90cmFja2VyX2Rpcl9leGl0KHN0cnVjdCByZWZfdHJhY2tlcl9kaXIgKmRpcilcbmluY2x1ZGUvbGludXgvcmVmX3RyYWNrZXIuaC0xMDgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzI1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgUmVhc29uaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhpcyByZWZlcmVuY2UgdHJhY2tpbmcgdGhpbmcgd29ya3MsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zLiAgSSBzZWUgYHJlZl90cmFja2VyX2Rpcl9leGl0YCBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L3JlZl90cmFja2VyLmhgLiAgUmlnaHQsIHRoYXQmIzM5O3MgdGhlIGNvcmUuICBJZiBgQ09ORklHX1JFRl9UUkFDS0VSYCBpcyBlbmFibGVkLCBpdCBkb2VzIHNvbWV0aGluZzsgaWYgbm90LCBpdCYjMzk7cyBqdXN0IGEgZGVhZCBlbmQuICBOb3csIEkgcmVjYWxsIHRoYXQgYENPTkZJR19ORVRfTlNfUkVGQ05UX1RSQUNLRVJgIHNlbGVjdHMgYENPTkZJR19SRUZfVFJBQ0tFUmAuIEFoYSwgc28gYENPTkZJR19ORVRfTlNfUkVGQ05UX1RSQUNLRVJgIGlzIHRoZSBwcmltYXJ5IG9wdGlvbiB0byBmb2N1cyBvbi4gQnV0IHdhaXQsIHRoZXJl4oCZcyBhIGNhdGNoLiBMb29raW5nIGF0IHRoZSBjb2RlIGFyb3VuZCBgY29weV9uZXRfbnNgLCBgQ09ORklHX05FVF9OU2AgaXMgYWxzbyBuZWVkZWQgZm9yIGNvbXBpbGF0aW9uLiBHb3R0YSBtYWtlIHN1cmUgYm90aCBhcmUgc2V0LiAgTGV0IG1lIGRvdWJsZS1jaGVjayBgQ09ORklHX05FVF9OU2AgYW5kIGBDT05GSUdfTkVUX05TX1JFRkNOVF9UUkFDS0VSYCBpbiB0aGUgY29uZmlnLiBIb2xkIG9uLi4uIGRvZXMgYGNvcHlfbmV0X25zYCAqb25seSogZ2V0IGNvbXBpbGVkIGlmIGBDT05GSUdfTkVUX05TYCBpcyBzZXQ/IEkmIzM5O2QgYmV0dGVyIGNvbmZpcm0gdGhhdDsgbGV0JiMzOTtzIGdvIGJhY2sgYW5kIGxvb2sgYXQgYG5ldC9jb3JlL25ldF9uYW1lc3BhY2UuY2AgYWdhaW4gYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29weV9uZXRfbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTU0Nz12b2lkIG5ldF9kcm9wX25zKHN0cnVjdCBuc19jb21tb24gKm5zKVxuLS1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy01NTItXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6NTUzOnN0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHU2NCBmbGFncyxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy01NTQtXHRcdFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBzdHJ1Y3QgbmV0ICpvbGRfbmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM1MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3Mgc2VsZi1yZWZsZWN0aW9uOgoKKipEZWVwIERpdmU6IE5ldCBOYW1lc3BhY2UgQ29udGV4dCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgYGNvcHlfbmV0X25zYCBpcyBndWFyZGVkIGJ5IGEgYCNpZmRlZiBDT05GSUdfTkVUX05TYCBjb25kaXRpb25hbC4gVGhhdCYjMzk7cyBhIGNydWNpYWwgY2hlY2suIElmIGl0ICppc24mIzM5O3QqLCB0aGF0JiMzOTtzIGEgcmVkIGZsYWcuIEl0IGltcGxpZXMgdGhlIGZ1bmN0aW9uJiMzOTtzIHBvdGVudGlhbGx5IGJlaW5nIHVzZWQgaW4gcGFydHMgb2YgdGhlIGtlcm5lbCB3aGVyZSBuZXR3b3JrIG5hbWVzcGFjZXMgYXJlbiYjMzk7dCBldmVuIGVuYWJsZWQsIHdoaWNoIHdvdWxkIGJlIGEgcmVjaXBlIGZvciB1bmV4cGVjdGVkIGJlaGF2aW9yLCBjb21waWxlIGVycm9ycywgb3IgZXZlbiwgaGVhdmVuIGZvcmJpZCwgcnVudGltZSBjcmFzaGVzLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZSBjb2RlJiMzOTtzIGRlc2lnbmVkIHRvIGJlIHJvYnVzdCB1bmRlciBkaWZmZXJlbnQgYnVpbGQgY29uZmlndXJhdGlvbnMuIElzIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBjb2RlIHByb3Blcmx5IG1vZHVsYXJpemVkLCBvciBpcyB0aGVyZSBhIGxlYWt5IGFic3RyYWN0aW9uPyBUaGlzIHJlcXVpcmVzIGEgcXVpY2sgY29kZSBpbnNwZWN0aW9uIHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDA6XHRcdGlmICghbmV0LVx1MDAzZWtleV9kb21haW4pXG4gNTAxOlx0XHRcdGdvdG8gb3V0X2ZyZWVfMjtcbiA1MDI6XHRcdHJlZmNvdW50X3NldChcdTAwMjZuZXQtXHUwMDNla2V5X2RvbWFpbi1cdTAwM2V1c2FnZSwgMSk7XG4gNTAzOlx0I2VuZGlmXG4gNTA0Olx0XG4gNTA1Olx0XHRyY3VfYXNzaWduX3BvaW50ZXIobmV0LVx1MDAzZWdlbiwgbmcpO1xuIDUwNjpcdG91dDpcbiA1MDc6XHRcdHJldHVybiBuZXQ7XG4gNTA4Olx0XG4gNTA5Olx0I2lmZGVmIENPTkZJR19LRVlTXG4gNTEwOlx0b3V0X2ZyZWVfMjpcbiA1MTE6XHRcdGttZW1fY2FjaGVfZnJlZShuZXRfY2FjaGVwLCBuZXQpO1xuIDUxMjpcdFx0bmV0ID0gTlVMTDtcbiA1MTM6XHQjZW5kaWZcbiA1MTQ6XHRvdXRfZnJlZTpcbiA1MTU6XHRcdGtmcmVlKG5nKTtcbiA1MTY6XHRcdGdvdG8gb3V0O1xuIDUxNzpcdH1cbiA1MTg6XHRcbiA1MTk6XHRzdGF0aWMgTExJU1RfSEVBRChkZWZlcl9mcmVlX2xpc3QpO1xuIDUyMDpcdFxuIDUyMTpcdHN0YXRpYyB2b2lkIG5ldF9jb21wbGV0ZV9mcmVlKHZvaWQpXG4gNTIyOlx0e1xuIDUyMzpcdFx0c3RydWN0IGxsaXN0X25vZGUgKmtpbGxfbGlzdDtcbiA1MjQ6XHRcdHN0cnVjdCBuZXQgKm5ldCwgKm5leHQ7XG4gNTI1Olx0XG4gNTI2Olx0XHQvKiBHZXQgdGhlIGxpc3Qgb2YgbmFtZXNwYWNlcyB0byBmcmVlIGZyb20gbGFzdCByb3VuZC4gKi9cbiA1Mjc6XHRcdGtpbGxfbGlzdCA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2ZGVmZXJfZnJlZV9saXN0KTtcbiA1Mjg6XHRcbiA1Mjk6XHRcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmV0LCBuZXh0LCBraWxsX2xpc3QsIGRlZmVyX2ZyZWVfbGlzdClcbiA1MzA6XHRcdFx0a21lbV9jYWNoZV9mcmVlKG5ldF9jYWNoZXAsIG5ldCk7XG4gNTMxOlx0XG4gNTMyOlx0fVxuIDUzMzpcdFxuIDUzNDpcdHZvaWQgbmV0X3Bhc3NpdmVfZGVjKHN0cnVjdCBuZXQgKm5ldClcbiA1MzU6XHR7XG4gNTM2Olx0XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNm5ldC1cdTAwM2VwYXNzaXZlKSkge1xuIDUzNzpcdFx0XHRrZnJlZShyY3VfYWNjZXNzX3BvaW50ZXIobmV0LVx1MDAzZWdlbikpO1xuIDUzODpcdFxuIDUzOTpcdFx0XHQvKiBUaGVyZSBzaG91bGQgbm90IGJlIGFueSB0cmFja2VycyBsZWZ0IHRoZXJlLiAqL1xuIDU0MDpcdFx0XHRyZWZfdHJhY2tlcl9kaXJfZXhpdChcdTAwMjZuZXQtXHUwMDNlbm90cmVmY250X3RyYWNrZXIpO1xuIDU0MTpcdFxuIDU0MjpcdFx0XHQvKiBXYWl0IGZvciBhbiBleHRyYSByY3VfYmFycmllcigpIGJlZm9yZSBmaW5hbCBmcmVlLiAqL1xuIDU0MzpcdFx0XHRsbGlzdF9hZGQoXHUwMDI2bmV0LVx1MDAzZWRlZmVyX2ZyZWVfbGlzdCwgXHUwMDI2ZGVmZXJfZnJlZV9saXN0KTtcbiA1NDQ6XHRcdH1cbiA1NDU6XHR9XG4gNTQ2Olx0XG4gNTQ3Olx0dm9pZCBuZXRfZHJvcF9ucyhzdHJ1Y3QgbnNfY29tbW9uICpucylcbiA1NDg6XHR7XG4gNTQ5Olx0XHRpZiAobnMpXG4gNTUwOlx0XHRcdG5ldF9wYXNzaXZlX2RlYyh0b19uZXRfbnMobnMpKTtcbiA1NTE6XHR9XG4gNTUyOlx0XG4gNTUzOlx0c3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxuIDU1NDpcdFx0XHRcdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywgc3RydWN0IG5ldCAqb2xkX25ldClcbiA1NTU6XHR7XG4gNTU2Olx0XHRzdHJ1Y3QgdWNvdW50cyAqdWNvdW50cztcbiA1NTc6XHRcdHN0cnVjdCBuZXQgKm5ldDtcbiA1NTg6XHRcdGludCBydjtcbiA1NTk6XHRcbiA1NjA6XHRcdGlmICghKGZsYWdzIFx1MDAyNiBDTE9ORV9ORVdORVQpKVxuIDU2MTpcdFx0XHRyZXR1cm4gZ2V0X25ldChvbGRfbmV0KTtcbiA1NjI6XHRcbiA1NjM6XHRcdHVjb3VudHMgPSBpbmNfbmV0X25hbWVzcGFjZXModXNlcl9ucyk7XG4gNTY0Olx0XHRpZiAoIXVjb3VudHMpXG4gNTY1Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xuIDU2NjpcdFxuIDU2NzpcdFx0bmV0ID0gbmV0X2FsbG9jKCk7XG4gNTY4Olx0XHRpZiAoIW5ldCkge1xuIDU2OTpcdFx0XHRydiA9IC1FTk9NRU07XG4gNTcwOlx0XHRcdGdvdG8gZGVjX3Vjb3VudHM7XG4gNTcxOlx0XHR9XG4gNTcyOlx0XG4gNTczOlx0XHRydiA9IHByZWluaXRfbmV0KG5ldCwgdXNlcl9ucyk7XG4gNTc0Olx0XHRpZiAocnYgXHUwMDNjIDApXG4gNTc1Olx0XHRcdGdvdG8gZGVjX3Vjb3VudHM7XG4gNTc2Olx0XHRuZXQtXHUwMDNldWNvdW50cyA9IHVjb3VudHM7XG4gNTc3Olx0XHRnZXRfdXNlcl9ucyh1c2VyX25zKTtcbiA1Nzg6XHRcbiA1Nzk6XHRcdHJ2ID0gZG93bl9yZWFkX2tpbGxhYmxlKFx1MDAyNnBlcm5ldF9vcHNfcndzZW0pO1xuIDU4MDpcdFx0aWYgKHJ2IFx1MDAzYyAwKVxuIDU4MTpcdFx0XHRnb3RvIHB1dF91c2VybnM7XG4gNTgyOlx0XG4gNTgzOlx0XHRydiA9IHNldHVwX25ldChuZXQpO1xuIDU4NDpcdFxuIDU4NTpcdFx0dXBfcmVhZChcdTAwMjZwZXJuZXRfb3BzX3J3c2VtKTtcbiA1ODY6XHRcbiA1ODc6XHRcdGlmIChydiBcdTAwM2MgMCkge1xuIDU4ODpcdHB1dF91c2VybnM6XG4gNTg5Olx0XHRcdG5zX2NvbW1vbl9mcmVlKG5ldCk7XG4gNTkwOlx0I2lmZGVmIENPTkZJR19LRVlTXG4gNTkxOlx0XHRcdGtleV9yZW1vdmVfZG9tYWluKG5ldC1cdTAwM2VrZXlfZG9tYWluKTtcbiA1OTI6XHQjZW5kaWZcbiA1OTM6XHRcdFx0cHV0X3VzZXJfbnModXNlcl9ucyk7XG4gNTk0Olx0XHRcdC8qIHNldHVwX25ldCgpIGZhaWx1cmUgaXMgbm90IHJvdXRlZCB0aHJvdWdoIF9fcHV0X25ldCgpLCBzbyB0aGVcbiA1OTU6XHRcdFx0ICogcmVmY250X3RyYWNrZXIgKGFuZCBpdHMgZGVidWdmcyBmaWxlKSBoYXMgdG8gYmUgcmVsZWFzZWQgaGVyZS5cbiA1OTY6XHRcdFx0ICovXG4gNTk3Olx0XHRcdHJlZl90cmFja2VyX2Rpcl9leGl0KFx1MDAyNm5ldC1cdTAwM2VyZWZjbnRfdHJhY2tlcik7XG4gNTk4Olx0XHRcdG5ldF9wYXNzaXZlX2RlYyhuZXQpO1xuIDU5OTpcdGRlY191Y291bnRzOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk3NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBjb3B5X25ldF9uc2AgRnVuY3Rpb24qKgoKT2theSwgc28gYGNvcHlfbmV0X25zYCBpc24mIzM5O3Qgd3JhcHBlZCBpbiBhIGNvbmRpdGlvbmFsIGJhc2VkIG9uIGBDT05GSUdfTkVUX05TYCwgd2hpY2ggaXMgYSBiaXQgdW51c3VhbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MganVzdCBhbHdheXMgY29tcGlsZWQsIHdoaWNoIGlzIHRoZSBleHBlY3RlZCBhcHByb2FjaCBmb3IgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMuIEJ1dCB3YWl0LCBgbmV0X25hbWVzcGFjZS5jYCBpcyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHksIHdoaWNoICpzaG91bGQqIG1lYW4gYGNvcHlfbmV0X25zYCBpcyBhbHdheXMgYXZhaWxhYmxlLiBIb3dldmVyLCB3aGF0IGhhcHBlbnMgd2hlbiBgQ09ORklHX05FVF9OU2AgaXMgKm5vdCogZW5hYmxlZD8gRG9lcyB0aGUgY29tcGlsZXIgb3B0aW1pemUgaXQgb3V0IGVudGlyZWx5PyBPciBkb2VzIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBzdGlsbCBleGlzdCwgZXZlbiBpZiB0aGUgZGVmaW5pdGlvbiBpcyBlZmZlY3RpdmVseSBlbXB0eSBvciBoYW5kbGVkIGRpZmZlcmVudGx5PyBUbyBiZSBjZXJ0YWluLCBJIG5lZWQgdG8gY2hlY2sgYGluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaGAgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgQ09ORklHX05FVF9OU2AgaW4gZGV0YWlsIGFuZCB0byBzZWUgaG93IHRoZSBmdW5jdGlvbiBpdHNlbGYgaXMgaGFuZGxlZCB3aXRoIGFuZCB3aXRob3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29weV9uZXRfbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oPTIxMj1leHRlcm4gc3RydWN0IG5ldCBpbml0X25ldDtcbi0tXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtMjE0LSNpZmRlZiBDT05GSUdfTkVUX05TXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg6MjE1OnN0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHU2NCBmbGFncywgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTIxNi1cdFx0XHRzdHJ1Y3QgbmV0ICpvbGRfbmV0KTtcbi0tXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg9MjI0PWV4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNsZWFudXBfbmV0X3Rhc2s7XG4tLVxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTIyOC0jaW5jbHVkZSBcdTAwM2NsaW51eC9uc3Byb3h5LmhcdTAwM2VcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDoyMjk6c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtMjMwLVx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBzdHJ1Y3QgbmV0ICpvbGRfbmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUxNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBjb3B5X25ldF9uc2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGNvcHlfbmV0X25zYCBmdW5jdGlvbiwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGRlZmluZWQgd2l0aGluIGBuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNgLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCwgdGhlIGltbWVkaWF0ZSBjYXZlYXQgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB0aGUgcG90ZW50aWFsIHJlbGlhbmNlIG9uIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIHNwZWNpZmljYWxseSBgQ09ORklHX05FVF9OU2AuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgZnVuY3Rpb24gaXMgY29tcGlsZWQgaW4gYWxsIHNjZW5hcmlvcyBvciBpcyBjb25kaXRpb25hbCB1cG9uIHRoYXQgc3BlY2lmaWMgS2NvbmZpZyBvcHRpb24gYmVpbmcgZW5hYmxlZC4gSWYgYG5ldC9jb3JlL25ldF9uYW1lc3BhY2UuY2AgaXMgYWx3YXlzIGNvbXBpbGVkLCBob3cgaXMgYGNvcHlfbmV0X25zYCBjb250cm9sbGVkPyBUaGUgYW5zd2VyIG11c3QgYmUgaW4gdGhhdCBzb3VyY2UgZmlsZSBpdHNlbGYuIFRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNgIGFuZCBzZWFyY2ggZm9yIHRoYXQgYCNpZmRlZiBDT05GSUdfTkVUX05TYCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTkVUX05TJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYz00NDA9c3RhdGljIF9fbmV0X2luaXQgaW50IHNldHVwX25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTQ3MC1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo0NzE6I2lmZGVmIENPTkZJR19ORVRfTlNcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy00NzItc3RhdGljIHN0cnVjdCB1Y291bnRzICppbmNfbmV0X25hbWVzcGFjZXMoc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucylcbi0tXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9ODE3PUVYUE9SVF9TWU1CT0xfR1BMKGdldF9uZXRfbnNfYnlfcGlkKTtcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy04MTgtXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6ODE5OiNpZmRlZiBDT05GSUdfTkVUX05TX1JFRkNOVF9UUkFDS0VSXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtODIwLXN0YXRpYyB2b2lkIG5ldF9uc19uZXRfZGVidWdmcyhzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTExODc9c3RhdGljIHZvaWQgcnRubF9uZXRfbm90aWZ5aWQoc3RydWN0IG5ldCAqbmV0LCBpbnQgY21kLCBpbnQgaWQsIHUzMiBwb3J0aWQsXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEyMTUtXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6MTIxNjojaWZkZWYgQ09ORklHX05FVF9OU1xubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEyMTctc3RhdGljIHZvaWQgX19pbml0IG5ldG5zX2lwdjRfc3RydWN0X2NoZWNrKHZvaWQpXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTEyNjc9dm9pZCBfX2luaXQgbmV0X25zX2luaXQodm9pZClcbi0tXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTI3MC1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzoxMjcxOiNpZmRlZiBDT05GSUdfTkVUX05TXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTI3Mi1cdG5ldG5zX2lwdjRfc3RydWN0X2NoZWNrKCk7XG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEzMTEtXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6MTMxMjojaWZkZWYgQ09ORklHX05FVF9OU1xubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEzMTMtc3RhdGljIGludCBfX3JlZ2lzdGVyX3Blcm5ldF9vcGVyYXRpb25zKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTEzNjc9c3RhdGljIHZvaWQgX191bnJlZ2lzdGVyX3Blcm5ldF9vcGVyYXRpb25zKHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyAqb3BzKVxuLS1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMzc4LVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jOjEzNzk6I2VuZGlmIC8qIENPTkZJR19ORVRfTlMgKi9cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMzgwLVxuLS1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYz0xNTE1PUVYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfcGVybmV0X2RldmljZSk7XG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTUxNi1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzoxNTE3OiNpZmRlZiBDT05GSUdfTkVUX05TXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTUxOC1zdGF0aWMgc3RydWN0IG5zX2NvbW1vbiAqbmV0bnNfZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MzgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbml0aWFsIENvbmZ1c2lvbiBhbmQgSW52ZXN0aWdhdGlvbioqCgpIYW5nIG9uIGEgc2Vjb25k4oCmIEkgY291bGQgaGF2ZSBzd29ybiBgY29weV9uZXRfbnNgIHdhcyBzdXBwb3NlZCB0byBiZSBjb25kaXRpb25hbGl6ZWQgYnkgdGhlIGBDT05GSUdfTkVUX05TYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCBhbmQgbm93IEkmIzM5O20gZG91YnRpbmcgdGhhdC4gTXkgbWVudGFsIG1vZGVsIG9mIGBuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNgIHN1Z2dlc3RzIGl0JiMzOTtzIHN1cHBvc2VkIHRvIGJlIGVuY2xvc2VkIHdpdGhpbiB0aGF0IGNvbmRpdGlvbmFsIGJsb2NrLiBUaGlzIGZlZWxzIHdyb25nLgoKUmlnaHQsIHRpbWUgdG8gZ2V0IHRoaXMgc3RyYWlnaHQuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGUgYm91bmRhcmllcyBvZiB0aGF0IGAjaWZkZWYgQ09ORklHX05FVF9OU2AgYmxvY2sgaW4gdGhlIHNvdXJjZSBjb2RlLiBUaGUgbG9jYXRpb24gb2YgdGhlIGNsb3NpbmcgYCNlbmRpZmAgaXMgY3JpdGljYWwgaGVyZS4gSXQmIzM5O3MgcG9zc2libGUgSSYjMzk7bSBtaXNyZW1lbWJlcmluZywgYW5kIGBjb3B5X25ldF9uc2AgKmlzKiBhY3R1YWxseSBvdXRzaWRlIHRoZSBwcm90ZWN0ZWQgc2VjdGlvbiwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoZSBleGFjdCBwbGFjZW1lbnQgYmVmb3JlIEkgY2FuIHByb2NlZWQgd2l0aCBhbnkgdHJvdWJsZXNob290aW5nIG9yIGRlYnVnZ2luZy4gVGhlIGltcGxpY2F0aW9ucyBhcmUgc2lnbmlmaWNhbnQsIGRlcGVuZGluZyBvbiB3aGV0aGVyIGl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3IgYWx3YXlzIHBhcnQgb2YgdGhlIGJ1aWxkLiBUaGlzIHJlcXVpcmVzIGEgcmFwaWQgdmVyaWZpY2F0aW9uIG9mIHRoZSBjb2RlJiMzOTtzIHN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NzEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NzE6XHQjaWZkZWYgQ09ORklHX05FVF9OU1xuIDQ3MjpcdHN0YXRpYyBzdHJ1Y3QgdWNvdW50cyAqaW5jX25ldF9uYW1lc3BhY2VzKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMpXG4gNDczOlx0e1xuIDQ3NDpcdFx0cmV0dXJuIGluY191Y291bnQobnMsIGN1cnJlbnRfZXVpZCgpLCBVQ09VTlRfTkVUX05BTUVTUEFDRVMpO1xuIDQ3NTpcdH1cbiA0NzY6XHRcbiA0Nzc6XHRzdGF0aWMgdm9pZCBkZWNfbmV0X25hbWVzcGFjZXMoc3RydWN0IHVjb3VudHMgKnVjb3VudHMpXG4gNDc4Olx0e1xuIDQ3OTpcdFx0ZGVjX3Vjb3VudCh1Y291bnRzLCBVQ09VTlRfTkVUX05BTUVTUEFDRVMpO1xuIDQ4MDpcdH1cbiA0ODE6XHRcbiA0ODI6XHRzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm5ldF9jYWNoZXAgX19yb19hZnRlcl9pbml0O1xuIDQ4MzpcdHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbmV0bnNfd3E7XG4gNDg0Olx0XG4gNDg1Olx0c3RhdGljIHN0cnVjdCBuZXQgKm5ldF9hbGxvYyh2b2lkKVxuIDQ4NjpcdHtcbiA0ODc6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IE5VTEw7XG4gNDg4Olx0XHRzdHJ1Y3QgbmV0X2dlbmVyaWMgKm5nO1xuIDQ4OTpcdFxuIDQ5MDpcdFx0bmcgPSBuZXRfYWxsb2NfZ2VuZXJpYygpO1xuIDQ5MTpcdFx0aWYgKCFuZylcbiA0OTI6XHRcdFx0Z290byBvdXQ7XG4gNDkzOlx0XG4gNDk0Olx0XHRuZXQgPSBrbWVtX2NhY2hlX3phbGxvYyhuZXRfY2FjaGVwLCBHRlBfS0VSTkVMKTtcbiA0OTU6XHRcdGlmICghbmV0KVxuIDQ5NjpcdFx0XHRnb3RvIG91dF9mcmVlO1xuIDQ5NzpcdFxuIDQ5ODpcdCNpZmRlZiBDT05GSUdfS0VZU1xuIDQ5OTpcdFx0bmV0LVx1MDAzZWtleV9kb21haW4gPSBremFsbG9jX29iaihzdHJ1Y3Qga2V5X3RhZyk7XG4gNTAwOlx0XHRpZiAoIW5ldC1cdTAwM2VrZXlfZG9tYWluKVxuIDUwMTpcdFx0XHRnb3RvIG91dF9mcmVlXzI7XG4gNTAyOlx0XHRyZWZjb3VudF9zZXQoXHUwMDI2bmV0LVx1MDAzZWtleV9kb21haW4tXHUwMDNldXNhZ2UsIDEpO1xuIDUwMzpcdCNlbmRpZlxuIDUwNDpcdFxuIDUwNTpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKG5ldC1cdTAwM2VnZW4sIG5nKTtcbiA1MDY6XHRvdXQ6XG4gNTA3Olx0XHRyZXR1cm4gbmV0O1xuIDUwODpcdFxuIDUwOTpcdCNpZmRlZiBDT05GSUdfS0VZU1xuIDUxMDpcdG91dF9mcmVlXzI6XG4gNTExOlx0XHRrbWVtX2NhY2hlX2ZyZWUobmV0X2NhY2hlcCwgbmV0KTtcbiA1MTI6XHRcdG5ldCA9IE5VTEw7XG4gNTEzOlx0I2VuZGlmXG4gNTE0Olx0b3V0X2ZyZWU6XG4gNTE1Olx0XHRrZnJlZShuZyk7XG4gNTE2Olx0XHRnb3RvIG91dDtcbiA1MTc6XHR9XG4gNTE4Olx0XG4gNTE5Olx0c3RhdGljIExMSVNUX0hFQUQoZGVmZXJfZnJlZV9saXN0KTtcbiA1MjA6XHRcbiA1MjE6XHRzdGF0aWMgdm9pZCBuZXRfY29tcGxldGVfZnJlZSh2b2lkKVxuIDUyMjpcdHtcbiA1MjM6XHRcdHN0cnVjdCBsbGlzdF9ub2RlICpraWxsX2xpc3Q7XG4gNTI0Olx0XHRzdHJ1Y3QgbmV0ICpuZXQsICpuZXh0O1xuIDUyNTpcdFxuIDUyNjpcdFx0LyogR2V0IHRoZSBsaXN0IG9mIG5hbWVzcGFjZXMgdG8gZnJlZSBmcm9tIGxhc3Qgcm91bmQuICovXG4gNTI3Olx0XHRraWxsX2xpc3QgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNmRlZmVyX2ZyZWVfbGlzdCk7XG4gNTI4Olx0XG4gNTI5Olx0XHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5ldCwgbmV4dCwga2lsbF9saXN0LCBkZWZlcl9mcmVlX2xpc3QpXG4gNTMwOlx0XHRcdGttZW1fY2FjaGVfZnJlZShuZXRfY2FjaGVwLCBuZXQpO1xuIDUzMTpcdFxuIDUzMjpcdH1cbiA1MzM6XHRcbiA1MzQ6XHR2b2lkIG5ldF9wYXNzaXZlX2RlYyhzdHJ1Y3QgbmV0ICpuZXQpXG4gNTM1Olx0e1xuIDUzNjpcdFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZuZXQtXHUwMDNlcGFzc2l2ZSkpIHtcbiA1Mzc6XHRcdFx0a2ZyZWUocmN1X2FjY2Vzc19wb2ludGVyKG5ldC1cdTAwM2VnZW4pKTtcbiA1Mzg6XHRcbiA1Mzk6XHRcdFx0LyogVGhlcmUgc2hvdWxkIG5vdCBiZSBhbnkgdHJhY2tlcnMgbGVmdCB0aGVyZS4gKi9cbiA1NDA6XHRcdFx0cmVmX3RyYWNrZXJfZGlyX2V4aXQoXHUwMDI2bmV0LVx1MDAzZW5vdHJlZmNudF90cmFja2VyKTtcbiA1NDE6XHRcbiA1NDI6XHRcdFx0LyogV2FpdCBmb3IgYW4gZXh0cmEgcmN1X2JhcnJpZXIoKSBiZWZvcmUgZmluYWwgZnJlZS4gKi9cbiA1NDM6XHRcdFx0bGxpc3RfYWRkKFx1MDAyNm5ldC1cdTAwM2VkZWZlcl9mcmVlX2xpc3QsIFx1MDAyNmRlZmVyX2ZyZWVfbGlzdCk7XG4gNTQ0Olx0XHR9XG4gNTQ1Olx0fVxuIDU0NjpcdFxuIDU0NzpcdHZvaWQgbmV0X2Ryb3BfbnMoc3RydWN0IG5zX2NvbW1vbiAqbnMpXG4gNTQ4Olx0e1xuIDU0OTpcdFx0aWYgKG5zKVxuIDU1MDpcdFx0XHRuZXRfcGFzc2l2ZV9kZWModG9fbmV0X25zKG5zKSk7XG4gNTUxOlx0fVxuIDU1MjpcdFxuIDU1MzpcdHN0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHU2NCBmbGFncyxcbiA1NTQ6XHRcdFx0XHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsIHN0cnVjdCBuZXQgKm9sZF9uZXQpXG4gNTU1Olx0e1xuIDU1NjpcdFx0c3RydWN0IHVjb3VudHMgKnVjb3VudHM7XG4gNTU3Olx0XHRzdHJ1Y3QgbmV0ICpuZXQ7XG4gNTU4Olx0XHRpbnQgcnY7XG4gNTU5Olx0XG4gNTYwOlx0XHRpZiAoIShmbGFncyBcdTAwMjYgQ0xPTkVfTkVXTkVUKSlcbiA1NjE6XHRcdFx0cmV0dXJuIGdldF9uZXQob2xkX25ldCk7XG4gNTYyOlx0XG4gNTYzOlx0XHR1Y291bnRzID0gaW5jX25ldF9uYW1lc3BhY2VzKHVzZXJfbnMpO1xuIDU2NDpcdFx0aWYgKCF1Y291bnRzKVxuIDU2NTpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTtcbiA1NjY6XHRcbiA1Njc6XHRcdG5ldCA9IG5ldF9hbGxvYygpO1xuIDU2ODpcdFx0aWYgKCFuZXQpIHtcbiA1Njk6XHRcdFx0cnYgPSAtRU5PTUVNO1xuIDU3MDpcdFx0XHRnb3RvIGRlY191Y291bnRzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTIzMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIE11c2luZ3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGNvcHlfbmV0X25zYCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIHdyYXBwZWQgaW4gYW4gYCNpZmRlZiBDT05GSUdfTkVUX05TYCBibG9jayBzdGFydGluZyB3YXkgYmFjayBvbiBsaW5lIDQ3MS4gVGhhdCYjMzk7cyBjbGVhciBlbm91Z2g7IGBDT05GSUdfTkVUX05TYCBpcyBhICpyZXF1aXJlbWVudCogZm9yIHRoaXMgZnVuY3Rpb24gdG8gZXZlbiBleGlzdCBpbiB0aGUgY29tcGlsZWQgY29kZS4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgcmVmX3RyYWNrZXJfZGlyX2V4aXRgIGFuZCB3aGV0aGVyIGl0IGlzIGdvaW5nIHRvIGRvIGFueXRoaW5nIHVzZWZ1bC4gQWgsIGJ1dCB0aGF0JiMzOTtzIGdvaW5nIHRvIGJlIHVzZWxlc3MgdW5sZXNzIHdlIGhhdmUgYENPTkZJR19ORVRfTlNfUkVGQ05UX1RSQUNLRVJgIGRlZmluZWQuIE90aGVyd2lzZSwgaXQgZW5kcyB1cCBiZWluZyB0aGlzIGVtcHR5IGlubGluZSBmdW5jdGlvbi4gQW5kLCBzaW5jZSBJJiMzOTttIGNvbmNlcm5lZCBhYm91dCB0aGF0IGZ1bmN0aW9uLCBsZXQgbWUganVzdCBkb3VibGUgY2hlY2ssIGByZWZfdHJhY2tlcl9kaXJfZXhpdGAgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9yZWZfdHJhY2tlci5oYC4KCkkmIzM5O2QgYmV0dGVyIG1ha2Ugc3VyZSBJIGhhdmUgdGhlICpyaWdodCogY29uZmlnIHNlbGVjdGVkLiBJIG5lZWQgdG8gY29uZmlybSBgQ09ORklHX05FVF9OU19SRUZDTlRfVFJBQ0tFUmAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX05TX1JFRkNOVF9UUkFDS0VSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTYzNgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgTkVUX05TX1JFRkNOVF9UUkFDS0VSYCBpbiB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHRyYWNrIGRvd24gYE5FVF9OU19SRUZDTlRfVFJBQ0tFUmAuIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBpdCYjMzk7cyByZWxhdGVkIHRvIHNvbWUga2luZCBvZiByZWZlcmVuY2UgY291bnQgdHJhY2tpbmcsIGxpa2VseSB3aXRoaW4gbmV0d29yayBuYW1lc3BhY2VzLiBJJiMzOTtsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIHNlYXJjaCB0aHJvdWdoIHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIHdpbGwgYmUgdGhlIGZvdW5kYXRpb25hbCBzdGFydGluZyBwb2ludC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQuIEZyb20gdGhlIEtjb25maWcgY29udGV4dCwgSSBzaG91bGQgZ2V0IHRoZSBpbW1lZGlhdGUgY2x1ZXMgYWJvdXQgd2h5IGl0IGV4aXN0cyBhbmQgd2h5IHNvbWVvbmUgbWlnaHQgd2FudCB0byB1c2UgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfTlNfUkVGQ05UX1RSQUNLRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWcuZGVidWc9Mz1jb25maWcgTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUlxuLS1cbm5ldC9LY29uZmlnLmRlYnVnLTExLVxubmV0L0tjb25maWcuZGVidWc6MTI6Y29uZmlnIE5FVF9OU19SRUZDTlRfVFJBQ0tFUlxubmV0L0tjb25maWcuZGVidWctMTMtXHRib29sIFwmIzM0O0VuYWJsZSBuZXR3b3JraW5nIG5hbWVzcGFjZSByZWZjb3VudCB0cmFja2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTk0MgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRpZ2dpbmcgaW50byBOZXR3b3JrIE5hbWVzcGFjZXMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgaG93IG5ldHdvcmsgbmFtZXNwYWNlIHJlZmVyZW5jZSBjb3VudGluZyBpcyBoYW5kbGVkLiBJIGltbWVkaWF0ZWx5IHNlZSBgTkVUX05TX1JFRkNOVF9UUkFDS0VSYCBtZW50aW9uZWQsIHdoaWNoIGlzIGxpa2VseSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBCdXQgaG9sZCBvbiwgaXNuJiMzOTt0IHRoZXJlIGFub3RoZXIgY29uZmlnIHJlbGF0ZWQgdG8gbmFtZXNwYWNlcywgc29tZXRoaW5nIGZ1bmRhbWVudGFsPyBBaCB5ZXMsIGBORVRfTlNgISBJdCYjMzk7cyBnb3QgdG8gYmUuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhvc2UgdHdvLiBMZXQmIzM5O3Mgc2VlIGhvdyBgTkVUX05TYCBpcyBkZWZpbmVkIGFuZCB3aGF0IGl0IGVuYWJsZXMsIHdoaWNoIHdpbGwgZ2l2ZSBjcnVjaWFsIGNvbnRleHQgdG8gdW5kZXJzdGFuZCBgTkVUX05TX1JFRkNOVF9UUkFDS0VSYC4gVGhpcyBuZWVkcyB0byBiZSB1bmRlcnN0b29kIGlmIEkmIzM5O20gZ29pbmcgdG8gZGV0ZXJtaW5lIHdoaWNoIHBhcnRzIGFyZSBhY3R1YWxseSByZWxldmFudC4gSXQmIzM5O3MgdGltZSB0byBidWlsZCBhIHNvbGlkIGZvdW5kYXRpb24gYmVmb3JlIEkgbG9vayBhdCBhbnl0aGluZyBlbHNlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX05TJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xNDUyPWNvbmZpZyBQSURfTlNcbi0tXG5pbml0L0tjb25maWctMTQ1OS1cbmluaXQvS2NvbmZpZzoxNDYwOmNvbmZpZyBORVRfTlNcbmluaXQvS2NvbmZpZy0xNDYxLVx0Ym9vbCBcJiMzNDtOZXR3b3JrIG5hbWVzcGFjZVwmIzM0O1xuLS1cbm5ldC9LY29uZmlnLmRlYnVnPTM9Y29uZmlnIE5FVF9ERVZfUkVGQ05UX1RSQUNLRVJcbi0tXG5uZXQvS2NvbmZpZy5kZWJ1Zy0xMS1cbm5ldC9LY29uZmlnLmRlYnVnOjEyOmNvbmZpZyBORVRfTlNfUkVGQ05UX1RSQUNLRVJcbm5ldC9LY29uZmlnLmRlYnVnLTEzLVx0Ym9vbCBcJiMzNDtFbmFibGUgbmV0d29ya2luZyBuYW1lc3BhY2UgcmVmY291bnQgdHJhY2tpbmdcJiMzNDtcbi0tXG5uZXQvbnNoL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9uc2gvS2NvbmZpZzoyOm1lbnVjb25maWcgTkVUX05TSFxubmV0L25zaC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIFNlcnZpY2UgSGVhZGVyIChOU0gpIHByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDE1CgkJCQkJCQlvdXRwdXQ6IDEwNwoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBsYW4gZm9yIE5ldCBOYW1lc3BhY2UgUmVzb3VyY2UgTGVhayoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgTkVUX05TYCBhbmQgYE5FVF9OU19SRUZDTlRfVFJBQ0tFUmAuIFRoZSBjb3JlIG9mIHRoZSBpc3N1ZSwgYW5kIHRoZSBmdW5jdGlvbiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgZGlyZWN0bHkgYWRkcmVzc2luZywgaXMgYGNvcHlfbmV0X25zYC4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0b3VjaGVkIGhlcmU/IE5vcGUsIGl0JiMzOTtzIGp1c3QgYGNvcHlfbmV0X25zYC4KCkFscmlnaHQsIGlzIHRoaXMgZXZlbiB3b3J0aCB0aGUgZnV6emluZyBlZmZvcnQ/IEFic29sdXRlbHksIHllcy4gSXQmIzM5O3MgZml4aW5nIGEgY29yZSBrZXJuZWwgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBhIHJlc291cmNlIGxlYWsuIFRoZSBsZWFrIG9jY3VycyB3aGVuIGBzZXR1cF9uZXRgIGZhaWxzLCBhbmQgdGhpcyBwYXRjaCBhaW1zIHRvIGNsZWFuIHRoYXQgdXAuIFRoZSBlcnJvciBwYXRoIG9mIGBjb3B5X25ldF9uc2AsIHRyaWdnZXJlZCBwb3RlbnRpYWxseSBieSBmYXVsdCBpbmplY3Rpb24sIGlzIHdoZXJlIHRoaXMgcHJvYmxlbSByZXNpZGVzLgoKU28sIGhlcmUmIzM5O3MgdGhlIHBsYW4sIGluIHNob3J0IGZvcm06CgoqICAgKipXb3J0aEZ1enppbmcqKjogVHJ1ZS4gQWJzb2x1dGVseS4KKiAgICoqRm9jdXNTeW1ib2xzKio6IGBjb3B5X25ldF9uc2AuIFRoYXQmIzM5O3MgdGhlIHByaW1hcnkgdGFyZ2V0LgoqICAgKipFbmFibGVDb25maWdzKio6IGBORVRfTlNgIGFuZCBgTkVUX05TX1JFRkNOVF9UUkFDS0VSYC4gV2UgbmVlZCB0aGVzZSBlbmFibGVkIGZvciB0aGUgcmVsZXZhbnQgY29kZSB0byBldmVuIGJlIGFjdGl2ZS4KKiAgICoqUmVhc29uaW5nKio6IFRoaXMgcGF0Y2ggaXMgYSBmaXggZm9yIGEgcmVzb3VyY2UgbGVhayAoc3BlY2lmaWNhbGx5IHRoZSByZWZjbnRfdHJhY2tlciBhbmQgaXRzIGRlYnVnZnMgZmlsZSkuIFRoZSBsZWFrIGFwcGVhcnMgaW4gdGhlIGVycm9yIHBhdGggb2YgYGNvcHlfbmV0X25zYCB3aGVuIGBzZXR1cF9uZXRgIGlzIHVuYWJsZSB0byBjb21wbGV0ZSBpdHMgc2V0dXAuIEZhdWx0IGluamVjdGlvbiB3aGVuIGZ1enppbmcgYGNvcHlfbmV0X25zYCBzaG91bGQgcmV2ZWFsIHRoZSBlZmZpY2FjeSBvZiB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX05TJiMzNDssCiAgICAmIzM0O05FVF9OU19SRUZDTlRfVFJBQ0tFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvcHlfbmV0X25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmVzb3VyY2UgbGVhayAocmVmY250X3RyYWNrZXIgYW5kIGl0cyBkZWJ1Z2ZzIGZpbGUpIGluIHRoZSBlcnJvciBwYXRoIG9mIGNvcHlfbmV0X25zKCkgd2hlbiBzZXR1cF9uZXQoKSBmYWlscy4gRnV6emluZyBjb3B5X25ldF9ucyB3aXRoIGZhdWx0IGluamVjdGlvbiBjYW4gaGVscCB2ZXJpZnkgdGhlIGZpeC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX05TJiMzNDssCiAgICAmIzM0O05FVF9OU19SRUZDTlRfVFJBQ0tFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvcHlfbmV0X25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmVzb3VyY2UgbGVhayAocmVmY250X3RyYWNrZXIgYW5kIGl0cyBkZWJ1Z2ZzIGZpbGUpIGluIHRoZSBlcnJvciBwYXRoIG9mIGNvcHlfbmV0X25zKCkgd2hlbiBzZXR1cF9uZXQoKSBmYWlscy4gRnV6emluZyBjb3B5X25ldF9ucyB3aXRoIGZhdWx0IGluamVjdGlvbiBjYW4gaGVscCB2ZXJpZnkgdGhlIGZpeC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBjYWxsIHRvIGByZWZfdHJhY2tlcl9kaXJfZXhpdCgpYCBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgY29weV9uZXRfbnMoKWAgdG8gcHJldmVudCBhIHJlc291cmNlIGxlYWsgKHNwZWNpZmljYWxseSwgYSBkZWJ1Z2ZzIGZpbGUgYW5kIHJlZmNudF90cmFja2VyIHJlc291cmNlcykgd2hlbiBgc2V0dXBfbmV0KClgIGZhaWxzLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IG1vZGlmeSBhbnkgZGF0YSBzZW50IHRvIHVzZXIgc3BhY2Ugb3IgYWx0ZXIgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBSZXNvdXJjZSBsZWFrcyBhbmQgbWVtb3J5IGxlYWtzIGFyZSB0eXBpY2FsbHkgZGV0ZWN0ZWQgYnkgS01FTUxFQUssIHdoaWxlIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYnVncyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ1MGY4MmRmYjIyZTg5M2Q4MmJjOWE2MzA2NDI4OTBiZTAzN2NmYjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAwNTo0MToyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYwppbmRleCBhOTFkMmI1OGFhZGRmLi4wYzNmMTY5ZDlhZmJjIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jCkBAIC01OTEsNiAmIzQzOzU5MSwxMCBAQCBzdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsCiAJCWtleV9yZW1vdmVfZG9tYWluKG5ldC0mZ3Q7a2V5X2RvbWFpbik7CiAjZW5kaWYKIAkJcHV0X3VzZXJfbnModXNlcl9ucyk7CiYjNDM7CQkvKiBzZXR1cF9uZXQoKSBmYWlsdXJlIGlzIG5vdCByb3V0ZWQgdGhyb3VnaCBfX3B1dF9uZXQoKSwgc28gdGhlCiYjNDM7CQkgKiByZWZjbnRfdHJhY2tlciAoYW5kIGl0cyBkZWJ1Z2ZzIGZpbGUpIGhhcyB0byBiZSByZWxlYXNlZCBoZXJlLgomIzQzOwkJICovCiYjNDM7CQlyZWZfdHJhY2tlcl9kaXJfZXhpdCgmYW1wO25ldC0mZ3Q7cmVmY250X3RyYWNrZXIpOwogCQluZXRfcGFzc2l2ZV9kZWMobmV0KTsKIGRlY191Y291bnRzOgogCQlkZWNfbmV0X25hbWVzcGFjZXModWNvdW50cyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE2CgkJCQkJCQlvdXRwdXQ6IDE3OQoJCQkJCQkJdGhvdWdodHM6IDUzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jYCwgd2hpY2ggYWRkcyBgcmVmX3RyYWNrZXJfZGlyX2V4aXQoJmFtcDtuZXQtJmd0O3JlZmNudF90cmFja2VyKTtgIHRvIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgY29weV9uZXRfbnMoKWAuICBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgcmVzb3VyY2UgY2xlYW51cCDigJMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhaywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGByZWZjbnRfdHJhY2tlcmAmIzM5O3MgZGVidWdmcyBmaWxlLCB3aGVuIGBzZXR1cF9uZXQoKWAgZmFpbHMuIEl0IHNlZW1zIGEgYml0IGxpa2UgYSBzdGFuZGFyZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgYXBwcm9hY2gsIHdoaWNoIGlzIGdvb2QgdG8gc2VlLgoKTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQnV0LCByZXZpZXdpbmcgdGhlIGNvZGUsIGl0JiMzOTtzIGNsZWFyIHRoaXMgcGF0Y2ggc2ltcGx5ICpmcmVlcyogb3IgY2xlYW5zIHVwIGEgcmVzb3VyY2Ugd2l0aCBgcmVmX3RyYWNrZXJfZGlyX2V4aXQoKWAuIEl0JiMzOTtzIGEgY2xlYW51cCwgbm90IGFuIGFsbG9jYXRpb24gb3IgdXNhZ2UuIFRoZXJlJiMzOTtzIG5vIGNyZWF0aW9uIG9mIG5ldyBkYXRhIHN0cnVjdHVyZXMgdGhhdCBtaWdodCBoYXJib3IgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBhbnkgbW9kaWZpY2F0aW9uIG9mIGRhdGEgdGhhdCYjMzk7cyB0aGVuIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gIEl0JiMzOTtzIGp1c3QgcmVsZWFzaW5nIHJlc291cmNlcywgdGhhdCBmYWlsZWQgZHVyaW5nIGluaXRpYWwgc2V0dXAuICBTbywgbm8sIHRoaXMgZG9lc24mIzM5O3Qgc2VlbSB0byBpbnRyb2R1Y2UgYW55IEtNU0FOIGlzc3Vlcy4KCkkgcXVpY2tseSBkb3VibGUtY2hlY2tlZCBgcmVmX3RyYWNrZXJfZGlyX2V4aXRgIGl0c2VsZiB0byBjb25maXJtIG15IGluaXRpYWwgaW1wcmVzc2lvbjogaXQmIzM5O3MgYWxsIGFib3V0IGZyZWVpbmcsIG5vdCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGxlYWtpbmcgaXQgdG8gdXNlciBzcGFjZS4gVGhhdCBzb2xpZGlmaWVzIG15IGNvbmNsdXNpb24gdGhhdCB0aGlzIHBhdGNoIGlzIEtNU0FOLXNhZmUuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHByZXZlbnRpbmcgYSBsZWFrLCBub3QgaW50cm9kdWNpbmcgYSB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyByZWFkLCBvciBvdGhlciBzaW1pbGFyIGlzc3VlIEtBU0FOIGFuZCBLTUVNTEVBSyBhcmUgZGVzaWduZWQgdG8gaGFuZGxlLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2gmIzM5O3MgcHVycG9zZSBpcyB0byBwcmV2ZW50IGEgcmVzb3VyY2UgbGVhay4gVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBjYWxsIHRvIGByZWZfdHJhY2tlcl9kaXJfZXhpdCgpYCBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgY29weV9uZXRfbnMoKWAgdG8gcHJldmVudCBhIHJlc291cmNlIGxlYWsgd2hlbiBgc2V0dXBfbmV0KClgIGZhaWxzLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IG1vZGlmeSBhbnkgZGF0YSBzZW50IHRvIHVzZXIgc3BhY2Ugb3IgYWx0ZXIgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBSZXNvdXJjZSBsZWFrcyBhbmQgbWVtb3J5IGxlYWtzIGFyZSB0eXBpY2FsbHkgZGV0ZWN0ZWQgYnkgS01FTUxFQUssIHdoaWxlIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYnVncyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIENvbnNlcXVlbnRseSwgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeSBmb3IgdGhpcyBwYXRjaC4gSSB0aGluayB0aGlzIG9uZSYjMzk7cyBhIGNsZWFuICYjMzQ7TmVlZHNLTVNBTjogZmFsc2UmIzM0Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgY2FsbCB0byBgcmVmX3RyYWNrZXJfZGlyX2V4aXQoKWAgaW4gdGhlIGVycm9yIHBhdGggb2YgYGNvcHlfbmV0X25zKClgIHRvIHByZXZlbnQgYSByZXNvdXJjZSBsZWFrIChzcGVjaWZpY2FsbHksIGEgZGVidWdmcyBmaWxlIGFuZCByZWZjbnRfdHJhY2tlciByZXNvdXJjZXMpIHdoZW4gYHNldHVwX25ldCgpYCBmYWlscy4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBub3IgZG9lcyBpdCBtb2RpZnkgYW55IGRhdGEgc2VudCB0byB1c2VyIHNwYWNlIG9yIGFsdGVyIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gUmVzb3VyY2UgbGVha3MgYW5kIG1lbW9yeSBsZWFrcyBhcmUgdHlwaWNhbGx5IGRldGVjdGVkIGJ5IEtNRU1MRUFLLCB3aGlsZSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGJ1Z3Mgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgY2FsbCB0byBgcmVmX3RyYWNrZXJfZGlyX2V4aXQoKWAgaW4gdGhlIGVycm9yIHBhdGggb2YgYGNvcHlfbmV0X25zKClgIHRvIHByZXZlbnQgYSByZXNvdXJjZSBsZWFrIChzcGVjaWZpY2FsbHksIGEgZGVidWdmcyBmaWxlIGFuZCByZWZjbnRfdHJhY2tlciByZXNvdXJjZXMpIHdoZW4gYHNldHVwX25ldCgpYCBmYWlscy4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBub3IgZG9lcyBpdCBtb2RpZnkgYW55IGRhdGEgc2VudCB0byB1c2VyIHNwYWNlIG9yIGFsdGVyIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gUmVzb3VyY2UgbGVha3MgYW5kIG1lbW9yeSBsZWFrcyBhcmUgdHlwaWNhbGx5IGRldGVjdGVkIGJ5IEtNRU1MRUFLLCB3aGlsZSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGJ1Z3Mgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MToyMy4zNDA0NzUyOTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTY1OTU5NDY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfTlNcIixcbiAgICBcIk5FVF9OU19SRUZDTlRfVFJBQ0tFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvcHlfbmV0X25zXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBjYWxsIHRvIGByZWZfdHJhY2tlcl9kaXJfZXhpdCgpYCBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgY29weV9uZXRfbnMoKWAgdG8gcHJldmVudCBhIHJlc291cmNlIGxlYWsgKHNwZWNpZmljYWxseSwgYSBkZWJ1Z2ZzIGZpbGUgYW5kIHJlZmNudF90cmFja2VyIHJlc291cmNlcykgd2hlbiBgc2V0dXBfbmV0KClgIGZhaWxzLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IG1vZGlmeSBhbnkgZGF0YSBzZW50IHRvIHVzZXIgc3BhY2Ugb3IgYWx0ZXIgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBSZXNvdXJjZSBsZWFrcyBhbmQgbWVtb3J5IGxlYWtzIGFyZSB0eXBpY2FsbHkgZGV0ZWN0ZWQgYnkgS01FTUxFQUssIHdoaWxlIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYnVncyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIChyZWZjbnRfdHJhY2tlciBhbmQgaXRzIGRlYnVnZnMgZmlsZSkgaW4gdGhlIGVycm9yIHBhdGggb2YgY29weV9uZXRfbnMoKSB3aGVuIHNldHVwX25ldCgpIGZhaWxzLiBGdXp6aW5nIGNvcHlfbmV0X25zIHdpdGggZmF1bHQgaW5qZWN0aW9uIGNhbiBoZWxwIHZlcmlmeSB0aGUgZml4LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MToyMy4zNDA0Nzk3NDZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NzAyMDMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ1MGY4MmRmYjIyZTg5M2Q4MmJjOWE2MzA2NDI4OTBiZTAzN2NmYjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjcgMDU6NDE6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jIGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jXFxuaW5kZXggYTkxZDJiNThhYWRkZi4uMGMzZjE2OWQ5YWZiYyAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcXG4rKysgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcXG5AQCAtNTkxLDYgKzU5MSwxMCBAQCBzdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsXFxuIFxcdFxcdGtleV9yZW1vdmVfZG9tYWluKG5ldC1cXHUwMDNla2V5X2RvbWFpbik7XFxuICNlbmRpZlxcbiBcXHRcXHRwdXRfdXNlcl9ucyh1c2VyX25zKTtcXG4rXFx0XFx0Lyogc2V0dXBfbmV0KCkgZmFpbHVyZSBpcyBub3Qgcm91dGVkIHRocm91Z2ggX19wdXRfbmV0KCksIHNvIHRoZVxcbitcXHRcXHQgKiByZWZjbnRfdHJhY2tlciAoYW5kIGl0cyBkZWJ1Z2ZzIGZpbGUpIGhhcyB0byBiZSByZWxlYXNlZCBoZXJlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmVmX3RyYWNrZXJfZGlyX2V4aXQoXFx1MDAyNm5ldC1cXHUwMDNlcmVmY250X3RyYWNrZXIpO1xcbiBcXHRcXHRuZXRfcGFzc2l2ZV9kZWMobmV0KTtcXG4gZGVjX3Vjb3VudHM6XFxuIFxcdFxcdGRlY19uZXRfbmFtZXNwYWNlcyh1Y291bnRzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDE6MjMuOTI4MzUyOTg1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODQ0NTU3OTU0NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX05TXCIsXG4gICAgXCJORVRfTlNfUkVGQ05UX1RSQUNLRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb3B5X25ldF9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmVzb3VyY2UgbGVhayAocmVmY250X3RyYWNrZXIgYW5kIGl0cyBkZWJ1Z2ZzIGZpbGUpIGluIHRoZSBlcnJvciBwYXRoIG9mIGNvcHlfbmV0X25zKCkgd2hlbiBzZXR1cF9uZXQoKSBmYWlscy4gRnV6emluZyBjb3B5X25ldF9ucyB3aXRoIGZhdWx0IGluamVjdGlvbiBjYW4gaGVscCB2ZXJpZnkgdGhlIGZpeC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDUwZjgyZGZiMjJlODkzZDgyYmM5YTYzMDY0Mjg5MGJlMDM3Y2ZiMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDA1OjQxOjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jIGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jXG5pbmRleCBhOTFkMmI1OGFhZGRmLi4wYzNmMTY5ZDlhZmJjIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jXG4rKysgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcbkBAIC01OTEsNiArNTkxLDEwIEBAIHN0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHU2NCBmbGFncyxcbiBcdFx0a2V5X3JlbW92ZV9kb21haW4obmV0LVx1MDAzZWtleV9kb21haW4pO1xuICNlbmRpZlxuIFx0XHRwdXRfdXNlcl9ucyh1c2VyX25zKTtcbitcdFx0Lyogc2V0dXBfbmV0KCkgZmFpbHVyZSBpcyBub3Qgcm91dGVkIHRocm91Z2ggX19wdXRfbmV0KCksIHNvIHRoZVxuK1x0XHQgKiByZWZjbnRfdHJhY2tlciAoYW5kIGl0cyBkZWJ1Z2ZzIGZpbGUpIGhhcyB0byBiZSByZWxlYXNlZCBoZXJlLlxuK1x0XHQgKi9cbitcdFx0cmVmX3RyYWNrZXJfZGlyX2V4aXQoXHUwMDI2bmV0LVx1MDAzZXJlZmNudF90cmFja2VyKTtcbiBcdFx0bmV0X3Bhc3NpdmVfZGVjKG5ldCk7XG4gZGVjX3Vjb3VudHM6XG4gXHRcdGRlY19uZXRfbmFtZXNwYWNlcyh1Y291bnRzKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjQxOjIzLjkyODM1NDUwNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNjQ2NjY2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXQgTmFtZXNwYWNlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9jb3JlL25ldF9uYW1lc3BhY2UuY2AuIEl0IHNlZW1zIHRoZXkndmUgYWRkZWQgYHJlZl90cmFja2VyX2Rpcl9leGl0KFx1MDAyNm5ldC1cdTAwM2VyZWZjbnRfdHJhY2tlcik7YCB0byB0aGUgZXJyb3IgcGF0aCBvZiBgY29weV9uZXRfbnMoKWAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJBaCwgcmlnaHQsIHJlc291cmNlIHRyYWNraW5nIOKAkyBnb29kLlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGFkZGl0aW9uIGlzIG5lY2Vzc2FyeS4gT2J2aW91c2x5LCB0aGlzIGlzIGFib3V0IGhhbmRsaW5nIHJlZmVyZW5jZSBjb3VudHMgd2l0aGluIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBhbmQgY2xlYW5pbmcgdXAgY29ycmVjdGx5IHdoZW4gdGhlcmUncyBhIGZhaWx1cmUgZHVyaW5nIHRoZSBjb3B5LiBJIGJldHRlciBkaWcgaW50byB0aGUgYGNvcHlfbmV0X25zKClgIGZ1bmN0aW9uIGl0c2VsZiB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBjb250ZXh0IGFuZCB3aGF0IGNvdWxkIGhhdmUgYmVlbiBtaXNzZWQgcHJldmlvdXNseSB0aGF0IHRyaWdnZXJlZCB0aGlzIGZpeC4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDE6MjguMjkzMDIzNzAxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTA1Njg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvcHlfbmV0X25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9NTQ3PXZvaWQgbmV0X2Ryb3BfbnMoc3RydWN0IG5zX2NvbW1vbiAqbnMpXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNTUyLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo1NTM6c3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy01NTQtXFx0XFx0XFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBzdHJ1Y3QgbmV0ICpvbGRfbmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MToyOC4zNDA5MzQ0NDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTA3MTg0NDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBjb3B5X25ldF9ucygpYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgY29weV9uZXRfbnMoKWAuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2Qgd2hlbiBhIG5ldHdvcmsgbmFtZXNwYWNlIGlzIGR1cGxpY2F0ZWQsIHNvIEknbSBoZWFkaW5nIHN0cmFpZ2h0IGZvciB0aGUgc291cmNlIGNvZGUgaW4gYG5ldC9jb3JlL25ldF9uYW1lc3BhY2UuY2AuIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSB0aGUgY29yZSBvZiB0aGUgZHVwbGljYXRpb24gcHJvY2Vzcywgc28gSSdsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZTpcblxuKiAgICoqUmVzb3VyY2UgRHVwbGljYXRpb24gdnMuIFNoYXJpbmc6KiogSXMgaXQgYSBmdWxsIGRlZXAgY29weSwgb3IgZG9lcyBpdCBjbGV2ZXJseSBzaGFyZSBjZXJ0YWluIHJlc291cmNlcyB3aGVyZSBwb3NzaWJsZSB0byBtaW5pbWl6ZSBvdmVyaGVhZD8gSSdtIHBhcnRpY3VsYXJseSBjdXJpb3VzIGFib3V0IHRoaW5ncyBsaWtlIHJvdXRlcywgYWRkcmVzc2VzLCBhbmQgb3RoZXIgbmV0d29yayBzdGF0ZS4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgdHJhZGUtb2ZmcyBiZXR3ZWVuIGEgY29tcGxldGUgY29weSBhbmQgcG90ZW50aWFsIHNoYXJlZCBzdGF0ZS5cbiogICAqKlBJRCBhbmQgTmFtZXNwYWNlIEFzc29jaWF0aW9uOioqIEhvdyBpcyB0aGUgbmV3IG5hbWVzcGFjZSBsaW5rZWQgdG8gcHJvY2Vzc2VzPyBJcyB0aGVyZSBhIGNsZWFuIHNlcGFyYXRpb24sIG9yIGFyZSB0aGVyZSBwb3RlbnRpYWwgZ290Y2hhcyByZWxhdGVkIHRvIHByb2Nlc3MgbGlmZXRpbWVzIGFuZCBuYW1lc3BhY2UgbWVtYmVyc2hpcD8gV2hhdCBpcyBnb2luZyBvbiBmb3IgdGFza3MgdGhhdCBtaWdyYXRlIGJldHdlZW4gbmFtZXNwYWNlcz9cbiogICAqKlN5bmNocm9uaXphdGlvbjoqKiBHaXZlbiB0aGUgbXVsdGktdGhyZWFkZWQgbmF0dXJlIG9mIHRoZSBrZXJuZWwsIEknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgbG9ja2luZyBtZWNoYW5pc21zIG9yIGF0b21pYyBvcGVyYXRpb25zIHVzZWQgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IGR1cmluZyB0aGUgY29weS4gQW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYXJlIGEgYmlnIHJlZCBmbGFnIGluIHRoaXMgYXJlYSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlbSBmdWxseS5cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQga2luZCBvZiBlcnJvciBjaGVja2luZyBpcyBpbXBsZW1lbnRlZCwgYW5kIGhvdyBhcmUgZmFpbHVyZXMgaGFuZGxlZD8gVGhlIG5ldHdvcmsgbmFtZXNwYWNlIG1lY2hhbmlzbSBpcyBwcmV0dHkgY29tcGxleCwgc28gSSBpbWFnaW5lIHRoZXJlIGFyZSBhIGxvdCBvZiBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMuIEhvdyBncmFjZWZ1bGx5IGRvZXMgdGhpcyBmdW5jdGlvbiBkZWFsIHdpdGggdGhlbT9cbiogICAqKkhvb2tzIGFuZCBFeHRlbnNpb25zOioqIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBleHRlbnNpYmxlLCBwZXJoYXBzIHRocm91Z2ggaG9va3Mgb3IgY2FsbGJhY2tzLiBUaGlzIHdvdWxkIGdpdmUgY2x1ZXMgdG8gaG93IG90aGVyIG1vZHVsZXMgY2FuIGludGVncmF0ZSB3aXRoIG5ldHdvcmsgbmFtZXNwYWNlIGNyZWF0aW9uLlxuKiAgICoqTWVtb3J5IE1hbmFnZW1lbnQ6KiogSG93IGRvZXMgbWVtb3J5IGdldCBoYW5kbGVkPyBJcyB0aGVyZSBwb3RlbnRpYWwgZm9yIGZyYWdtZW50YXRpb24gb3IgbWVtb3J5IGxlYWtzPyBJZiBhbnl0aGluZyBpcyBhbGxvY2F0ZWQsIEknbGwgYmUgbG9va2luZyBmb3IgcmVsYXRlZCBga2ZyZWUoKWAgY291bnRlcnBhcnRzLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRob3JvdWdobHksIGFzIGFueSB3ZWFrbmVzcyBpbiB0aGlzIGZ1bmN0aW9uIGNvdWxkIGhhdmUgcmlwcGxlIGVmZmVjdHMuIFRoaXMgaXMgYSBjcnVjaWFsIGNvbXBvbmVudCB0aGF0IGRpcmVjdGx5IGluZmx1ZW5jZXMgdGhlIHN0YWJpbGl0eSwgcGVyZm9ybWFuY2UsIGFuZCBzZWN1cml0eSBvZiBjb250YWluZXJpemVkIGVudmlyb25tZW50cyBhbmQgb3RoZXIgbW9kZXJuIG5ldHdvcmtpbmcgYXBwbGljYXRpb25zLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzOTYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MTozMy40NDgxMjE0MjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU1MyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NTM6XFx0c3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxcbiA1NTQ6XFx0XFx0XFx0XFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBzdHJ1Y3QgbmV0ICpvbGRfbmV0KVxcbiA1NTU6XFx0e1xcbiA1NTY6XFx0XFx0c3RydWN0IHVjb3VudHMgKnVjb3VudHM7XFxuIDU1NzpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQ7XFxuIDU1ODpcXHRcXHRpbnQgcnY7XFxuIDU1OTpcXHRcXG4gNTYwOlxcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgQ0xPTkVfTkVXTkVUKSlcXG4gNTYxOlxcdFxcdFxcdHJldHVybiBnZXRfbmV0KG9sZF9uZXQpO1xcbiA1NjI6XFx0XFxuIDU2MzpcXHRcXHR1Y291bnRzID0gaW5jX25ldF9uYW1lc3BhY2VzKHVzZXJfbnMpO1xcbiA1NjQ6XFx0XFx0aWYgKCF1Y291bnRzKVxcbiA1NjU6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7XFxuIDU2NjpcXHRcXG4gNTY3OlxcdFxcdG5ldCA9IG5ldF9hbGxvYygpO1xcbiA1Njg6XFx0XFx0aWYgKCFuZXQpIHtcXG4gNTY5OlxcdFxcdFxcdHJ2ID0gLUVOT01FTTtcXG4gNTcwOlxcdFxcdFxcdGdvdG8gZGVjX3Vjb3VudHM7XFxuIDU3MTpcXHRcXHR9XFxuIDU3MjpcXHRcXG4gNTczOlxcdFxcdHJ2ID0gcHJlaW5pdF9uZXQobmV0LCB1c2VyX25zKTtcXG4gNTc0OlxcdFxcdGlmIChydiBcXHUwMDNjIDApXFxuIDU3NTpcXHRcXHRcXHRnb3RvIGRlY191Y291bnRzO1xcbiA1NzY6XFx0XFx0bmV0LVxcdTAwM2V1Y291bnRzID0gdWNvdW50cztcXG4gNTc3OlxcdFxcdGdldF91c2VyX25zKHVzZXJfbnMpO1xcbiA1Nzg6XFx0XFxuIDU3OTpcXHRcXHRydiA9IGRvd25fcmVhZF9raWxsYWJsZShcXHUwMDI2cGVybmV0X29wc19yd3NlbSk7XFxuIDU4MDpcXHRcXHRpZiAocnYgXFx1MDAzYyAwKVxcbiA1ODE6XFx0XFx0XFx0Z290byBwdXRfdXNlcm5zO1xcbiA1ODI6XFx0XFxuIDU4MzpcXHRcXHRydiA9IHNldHVwX25ldChuZXQpO1xcbiA1ODQ6XFx0XFxuIDU4NTpcXHRcXHR1cF9yZWFkKFxcdTAwMjZwZXJuZXRfb3BzX3J3c2VtKTtcXG4gNTg2OlxcdFxcbiA1ODc6XFx0XFx0aWYgKHJ2IFxcdTAwM2MgMCkge1xcbiA1ODg6XFx0cHV0X3VzZXJuczpcXG4gNTg5OlxcdFxcdFxcdG5zX2NvbW1vbl9mcmVlKG5ldCk7XFxuIDU5MDpcXHQjaWZkZWYgQ09ORklHX0tFWVNcXG4gNTkxOlxcdFxcdFxcdGtleV9yZW1vdmVfZG9tYWluKG5ldC1cXHUwMDNla2V5X2RvbWFpbik7XFxuIDU5MjpcXHQjZW5kaWZcXG4gNTkzOlxcdFxcdFxcdHB1dF91c2VyX25zKHVzZXJfbnMpO1xcbiA1OTQ6XFx0XFx0XFx0Lyogc2V0dXBfbmV0KCkgZmFpbHVyZSBpcyBub3Qgcm91dGVkIHRocm91Z2ggX19wdXRfbmV0KCksIHNvIHRoZVxcbiA1OTU6XFx0XFx0XFx0ICogcmVmY250X3RyYWNrZXIgKGFuZCBpdHMgZGVidWdmcyBmaWxlKSBoYXMgdG8gYmUgcmVsZWFzZWQgaGVyZS5cXG4gNTk2OlxcdFxcdFxcdCAqL1xcbiA1OTc6XFx0XFx0XFx0cmVmX3RyYWNrZXJfZGlyX2V4aXQoXFx1MDAyNm5ldC1cXHUwMDNlcmVmY250X3RyYWNrZXIpO1xcbiA1OTg6XFx0XFx0XFx0bmV0X3Bhc3NpdmVfZGVjKG5ldCk7XFxuIDU5OTpcXHRkZWNfdWNvdW50czpcXG4gNjAwOlxcdFxcdFxcdGRlY19uZXRfbmFtZXNwYWNlcyh1Y291bnRzKTtcXG4gNjAxOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKHJ2KTtcXG4gNjAyOlxcdFxcdH1cXG4gNjAzOlxcdFxcdHJldHVybiBuZXQ7XFxuIDYwNDpcXHR9XFxuIDYwNTpcXHRcXG4gNjA2OlxcdC8qKlxcbiA2MDc6XFx0ICogbmV0X25zX2dldF9vd25lcnNoaXAgLSBnZXQgc3lzZnMgb3duZXJzaGlwIGRhdGEgZm9yIEBuZXRcXG4gNjA4OlxcdCAqIEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlIGluIHF1ZXN0aW9uIChjYW4gYmUgTlVMTClcXG4gNjA5OlxcdCAqIEB1aWQ6IGtlcm5lbCB1c2VyIElEIGZvciBzeXNmcyBvYmplY3RzXFxuIDYxMDpcXHQgKiBAZ2lkOiBrZXJuZWwgZ3JvdXAgSUQgZm9yIHN5c2ZzIG9iamVjdHNcXG4gNjExOlxcdCAqXFxuIDYxMjpcXHQgKiBSZXR1cm5zIHRoZSB1aWQvZ2lkIHBhaXIgb2Ygcm9vdCBpbiB0aGUgdXNlciBuYW1lc3BhY2UgYXNzb2NpYXRlZCB3aXRoIHRoZVxcbiA2MTM6XFx0ICogZ2l2ZW4gbmV0d29yayBuYW1lc3BhY2UuXFxuIDYxNDpcXHQgKi9cXG4gNjE1OlxcdHZvaWQgbmV0X25zX2dldF9vd25lcnNoaXAoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBrdWlkX3QgKnVpZCwga2dpZF90ICpnaWQpXFxuIDYxNjpcXHR7XFxuIDYxNzpcXHRcXHRpZiAobmV0KSB7XFxuIDYxODpcXHRcXHRcXHRrdWlkX3QgbnNfcm9vdF91aWQgPSBtYWtlX2t1aWQobmV0LVxcdTAwM2V1c2VyX25zLCAwKTtcXG4gNjE5OlxcdFxcdFxcdGtnaWRfdCBuc19yb290X2dpZCA9IG1ha2Vfa2dpZChuZXQtXFx1MDAzZXVzZXJfbnMsIDApO1xcbiA2MjA6XFx0XFxuIDYyMTpcXHRcXHRcXHRpZiAodWlkX3ZhbGlkKG5zX3Jvb3RfdWlkKSlcXG4gNjIyOlxcdFxcdFxcdFxcdCp1aWQgPSBuc19yb290X3VpZDtcXG4gNjIzOlxcdFxcbiA2MjQ6XFx0XFx0XFx0aWYgKGdpZF92YWxpZChuc19yb290X2dpZCkpXFxuIDYyNTpcXHRcXHRcXHRcXHQqZ2lkID0gbnNfcm9vdF9naWQ7XFxuIDYyNjpcXHRcXHR9IGVsc2Uge1xcbiA2Mjc6XFx0XFx0XFx0KnVpZCA9IEdMT0JBTF9ST09UX1VJRDtcXG4gNjI4OlxcdFxcdFxcdCpnaWQgPSBHTE9CQUxfUk9PVF9HSUQ7XFxuIDYyOTpcXHRcXHR9XFxuIDYzMDpcXHR9XFxuIDYzMTpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZXRfbnNfZ2V0X293bmVyc2hpcCk7XFxuIDYzMjpcXHRcXG4gNjMzOlxcdHN0YXRpYyB2b2lkIHVuaGFzaF9uc2lkKHN0cnVjdCBuZXQgKmxhc3QpXFxuIDYzNDpcXHR7XFxuIDYzNTpcXHRcXHRzdHJ1Y3QgbmV0ICp0bXAsICpwZWVyO1xcbiA2MzY6XFx0XFxuIDYzNzpcXHRcXHQvKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGZyb20gY2xlYW51cF9uZXQoKSB3b3JrLFxcbiA2Mzg6XFx0XFx0ICogYW5kIHRoaXMgd29yayBpcyB0aGUgb25seSBwcm9jZXNzLCB0aGF0IG1heSBkZWxldGVcXG4gNjM5OlxcdFxcdCAqIGEgbmV0IGZyb20gbmV0X25hbWVzcGFjZV9saXN0LiBTbywgd2hlbiB0aGUgYmVsb3dcXG4gNjQwOlxcdFxcdCAqIGlzIGV4ZWN1dGluZywgdGhlIGxpc3QgbWF5IG9ubHkgZ3Jvdy4gVGh1cywgd2UgZG8gbm90XFxuIDY0MTpcXHRcXHQgKiB1c2UgZm9yX2VhY2hfbmV0X3JjdSgpIG9yIG5ldF9yd3NlbS5cXG4gNjQyOlxcdFxcdCAqL1xcbiA2NDM6XFx0XFx0Zm9yX2VhY2hfbmV0KHRtcCkge1xcbiA2NDQ6XFx0XFx0XFx0aW50IGlkID0gMDtcXG4gNjQ1OlxcdFxcbiA2NDY6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZ0bXAtXFx1MDAzZW5zaWRfbG9jayk7XFxuIDY0NzpcXHRcXHRcXHR3aGlsZSAoKHBlZXIgPSBpZHJfZ2V0X25leHQoXFx1MDAyNnRtcC1cXHUwMDNlbmV0bnNfaWRzLCBcXHUwMDI2aWQpKSkge1xcbiA2NDg6XFx0XFx0XFx0XFx0aW50IGN1cnJfaWQgPSBpZDtcXG4gNjQ5OlxcdFxcbiA2NTA6XFx0XFx0XFx0XFx0aWQrKztcXG4gNjUxOlxcdFxcdFxcdFxcdGlmICghcGVlci1cXHUwMDNlaXNfZHlpbmcpXFxuIDY1MjpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDE6MzMuNDQ4MjQxNjM2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM3ODM2OTA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBhZGRzIGByZWZfdHJhY2tlcl9kaXJfZXhpdGAgdG8gdGhlIGVycm9yIHBhdGggaW4gYGNvcHlfbmV0X25zKClgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwibWVtb3J5L3Jlc291cmNlIGxlYWsgZml4LCBpbnRlcmVzdGluZy5cIiBXZSdyZSB0YWxraW5nIGFib3V0IGEgY29yZSBrZXJuZWwgZnVuY3Rpb24sIGBjb3B5X25ldF9ucygpYCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgbmV0d29yayBuYW1lc3BhY2UgY3JlYXRpb24gdmlhIGBjbG9uZShDTE9ORV9ORVdORVQpYCBvciBgdW5zaGFyZShDTE9ORV9ORVdORVQpYC4gVGhlIGVycm9yIHBhdGggd2UncmUgdGFyZ2V0aW5nIGlzIGhpdCB3aGVuIGBzZXR1cF9uZXQobmV0KWAgZmFpbHMsIHBvdGVudGlhbGx5IGR1ZSB0byBtZW1vcnkgaXNzdWVzIG9yIHN1YnN5c3RlbSBpbml0aWFsaXphdGlvbiBmYWlsdXJlcyB3aXRoaW4gdGhlIG5ldHdvcmsgbmFtZXNwYWNlLlxuXG5TbywgdGhlIGNoYWxsZW5nZSBoZXJlIGlzIHRoYXQgdHJpZ2dlcmluZyB0aGlzIHNwZWNpZmljIGVycm9yIHBhdGggcmVxdWlyZXMgZWl0aGVyIGZhdWx0IGluamVjdGlvbiBvciBjcmVhdGluZyBjb25kaXRpb25zIHdoZXJlIGBzZXR1cF9uZXQoKWAgZGVsaWJlcmF0ZWx5IGZhaWxzLiBOb3QgYSB3YWxrIGluIHRoZSBwYXJrLCBidXQgbm90IGltcG9zc2libGUuIGByZWZfdHJhY2tlcl9kaXJfZXhpdGAsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgZXNzZW50aWFsbHkgYSBjbGVhbnVwIGZ1bmN0aW9uIHRvIHByZXZlbnQgYSBsZWFrIG9mIHRoZSBgcmVmY250X3RyYWNrZXJgIGFuZCBpdHMgYXNzb2NpYXRlZCBkZWJ1Z2ZzIGZpbGUuIEl0J3Mgbm90IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHNlbnNlIHRoYXQgaXQgZG9lc24ndCAqYWRkKiBuZXcgZmVhdHVyZXMsIGJ1dCBpdCAqZml4ZXMqIGEgcmVzb3VyY2UgbGVhaywgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGltcHJvdmVtZW50LlxuXG5UaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgZnV6emFibGU/IEFic29sdXRlbHkuIEl0J3MgYSByZWFjaGFibGUgZXJyb3IgcGF0aCB3aXRoaW4gYSBjb3JlIGtlcm5lbCBmdW5jdGlvbi4gRnV6emluZyBjb3VsZCBoZWxwIGNvbmZpcm0gdGhhdCB0aGUgbGVhayBpcyB0cnVseSBmaXhlZCBhbmQsIGltcG9ydGFudGx5LCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGNyYXNoZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpc24ndCBhIHRlYXJkb3duIGNhbGxiYWNrLCBzbyBsZXQgbWUgY2hlY2sgd2hhdCB0aGUgaW5zdHJ1Y3Rpb25zIHN0YXRlLi4uT2theSwgdGhpcyBpc24ndCBhIGRyaXZlciB0ZWFyZG93biwgaXQncyBhIGNvcmUga2VybmVsIGZ1bmN0aW9uLlxuXG5Ob3csIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBpbnN0cnVjdGlvbnMsIGl0J3MgY2xlYXIgdGhpcyBpcyBOT1QgYSBkb2N1bWVudGF0aW9uIGNoYW5nZSwgYSBsb2dnaW5nIG1vZGlmaWNhdGlvbiwgYSBudW1lcmljIGNvbnN0YW50LCB1bnJlYWNoYWJsZSBjb2RlLCBvciBhIGRyaXZlciB0ZWFyZG93biBjYWxsYmFjay4gSXQncyBhIGNsZWFudXAgb24gYW4gZXJyb3IgcGF0aCB3aXRoaW4gY29yZSBjb2RlLCBhbmQgdGh1cywgSSdtIGNvbmZpZGVudCBpdCdzICpXb3J0aEZ1enppbmc9dHJ1ZSouXG5cbk15IGZvY3VzIGZvciBmdXp6aW5nIHdpbGwgYmUgYGNvcHlfbmV0X25zYCB0byBlbnN1cmUgdGhhdCB0aGlzIGNsZWFudXAgaGFwcGVucyBhcyBleHBlY3RlZC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX05FVF9OU2AgaXMgZW5hYmxlZC4gSWYgYGNvcHlfbmV0X25zYCByZWxpZXMgb24gaXQsIEknbGwgbmVlZCB0byBzZXQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MDcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MTo0Mi44MjY2MTQxMTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUzMTMzNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29weV9uZXRfbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYz01NDc9dm9pZCBuZXRfZHJvcF9ucyhzdHJ1Y3QgbnNfY29tbW9uICpucylcXG4tLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy01NTItXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jOjU1MzpzdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTU1NC1cXHRcXHRcXHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsIHN0cnVjdCBuZXQgKm9sZF9uZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjQxOjQyLjg4MTkzMTk3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk2NzYxNzkyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gS2NvbmZpZyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBhIHNwZWNpZmljIG5ldHdvcmsgc3Vic3lzdGVtLiBGaXJzdCwgSSdtIHRoaW5raW5nLCB3aGVyZSB3b3VsZCB0aGlzIGluZm9ybWF0aW9uIGJlIG1vc3QgcmVsZXZhbnQ/IEdpdmVuIHRoZSB0YXNrLCBJJ2xsIHN0YXJ0IHdpdGggYG5ldC9jb3JlL25ldF9uYW1lc3BhY2UuY2AuIFRoYXQncyB3aGVyZSBhIGxvdCBvZiB0aGUgY29yZSBuZXR3b3JrIG5hbWVzcGFjZSBzdHVmZiByZXNpZGVzLiBOb3csIGxldCdzIHRyYWNlIHRoaXMgYmFjayB0byB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBzaG93IG1lIHRoZSByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIga2VybmVsIGZlYXR1cmVzLiBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHdoYXQgb3RoZXIgZnVuY3Rpb25hbGl0aWVzIGFyZSB0aWVkIHRvIHRoZSBiYXNlIG5ldHdvcmsgbmFtZXNwYWNlLiBTbywgSSBuZWVkIHRvIHNlZSB3aGF0IG9wdGlvbnMgY29udHJvbCB3aGV0aGVyIGBuZXRfbmFtZXNwYWNlLmNgIGlzIGV2ZW4gY29tcGlsZWQsIGFuZCB3aGF0LCBpZiBhbnksIGRlcGVuZGVuY2llcyBjYXNjYWRlIGZyb20gaXQuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1Njk0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDE6NDcuODQ5NTUyNzdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjExMzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldF9uYW1lc3BhY2VcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTY9b2JqLXkgOj0gc29jay5vIHNrYnVmZi5vIGRhdGFncmFtLm8gc3RyZWFtLm8gc2NtLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlOjc6XFx0IGdlbl9zdGF0cy5vIGdlbl9lc3RpbWF0b3IubyBuZXRfbmFtZXNwYWNlLm8gc2VjdXJlX3NlcS5vIFxcXFxcXG5uZXQvY29yZS9NYWtlZmlsZS04LVxcdCBmbG93X2Rpc3NlY3Rvci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjQxOjQ3Ljg5NjE3MDQ2NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDEzMzY4NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNlYXNvbmVkIHByb2Zlc3Npb25hbDpcblxuKipEaWdnaW5nIGludG8gdGhlIEtlcm5lbCBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsIHNvIEkgc2VlIHRoYXQgYG5ldF9uYW1lc3BhY2Uub2AgaXMgYmVpbmcgYnVpbHQgdW5jb25kaXRpb25hbGx5IOKAkyBpdCdzIGFuIGBvYmoteWAuIFRoYXQncyBpbnRlcmVzdGluZywgYmVjYXVzZSBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IGBuZXRfbmFtZXNwYWNlYCAqc2hvdWxkKiBiZSBjb250cm9sbGVkIGJ5IGEgY29uZmlnIG9wdGlvbiwgc3BlY2lmaWNhbGx5IGBDT05GSUdfTkVUX05TYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgZGVmYXVsdCBiZWhhdmlvciBpcyBjb3JyZWN0LCBzaW5jZSB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBjYW4gc29tZXRpbWVzIGRvIHVuZXhwZWN0ZWQgdGhpbmdzLiBMZXQncyBoZWFkIG92ZXIgdG8gdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBydWxlcyBkaWN0YXRlIHRoZXJlLiBJdCdzIHRpbWUgdG8gY29uZmlybSB3aGV0aGVyIHRoaXMgdW5jb25kaXRpb25hbCBjb21waWxhdGlvbiBpcyBpbnRlbmRlZCBvciBhIHBvdGVudGlhbCBvdmVyc2lnaHQuIEkgd2FudCB0byBzZWUgaG93IHRoYXQgb2JqZWN0IGZpbGUgaXMgaGFuZGxlZCBpbiByZWxhdGlvbiB0byB0aGF0IGNvbmZpZyBzeW1ib2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMDksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MTo1MS4zMDk1NDE5NDRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTQwNzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9OU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9MjE3Mz1zdGF0aWMgdm9pZCBydG5sX25ldF9kZXZfbG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMjE4OS1cXG5uZXQvY29yZS9kZXYuYzoyMTkwOiNpZmRlZiBDT05GSUdfTkVUX05TXFxubmV0L2NvcmUvZGV2LmMtMjE5MS1cXHRcXHQvKiBkZXYgbWlnaHQgaGF2ZSBiZWVuIG1vdmVkIHRvIGFub3RoZXIgbmV0bnMuICovXFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMDg4Nj1zdGF0aWMgYm9vbCBmcm9tX2NsZWFudXBfbmV0KHZvaWQpXFxubmV0L2NvcmUvZGV2LmMtMTA4ODcte1xcbm5ldC9jb3JlL2Rldi5jOjEwODg4OiNpZmRlZiBDT05GSUdfTkVUX05TXFxubmV0L2NvcmUvZGV2LmMtMTA4ODktXFx0cmV0dXJuIGN1cnJlbnQgPT0gUkVBRF9PTkNFKGNsZWFudXBfbmV0X3Rhc2spO1xcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MjE2Nz1zdGF0aWMgc3RydWN0IG5zX2NvbW1vbiAqbmV0X2dyYWJfY3VycmVudF9ucyh2b2lkKVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjE2OS1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBjdXJyZW50LVxcdTAwM2Vuc3Byb3h5LVxcdTAwM2VuZXRfbnM7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjE3MDojaWZkZWYgQ09ORklHX05FVF9OU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxNzEtXFx0aWYgKG5ldClcXG4tLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYz00NDA9c3RhdGljIF9fbmV0X2luaXQgaW50IHNldHVwX25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNDcwLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo0NzE6I2lmZGVmIENPTkZJR19ORVRfTlNcXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNDcyLXN0YXRpYyBzdHJ1Y3QgdWNvdW50cyAqaW5jX25ldF9uYW1lc3BhY2VzKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMpXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9ODE3PUVYUE9SVF9TWU1CT0xfR1BMKGdldF9uZXRfbnNfYnlfcGlkKTtcXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtODE4LVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo4MTk6I2lmZGVmIENPTkZJR19ORVRfTlNfUkVGQ05UX1RSQUNLRVJcXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtODIwLXN0YXRpYyB2b2lkIG5ldF9uc19uZXRfZGVidWdmcyhzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9MTE4Nz1zdGF0aWMgdm9pZCBydG5sX25ldF9ub3RpZnlpZChzdHJ1Y3QgbmV0ICpuZXQsIGludCBjbWQsIGludCBpZCwgdTMyIHBvcnRpZCxcXG4tLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMjE1LVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzoxMjE2OiNpZmRlZiBDT05GSUdfTkVUX05TXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEyMTctc3RhdGljIHZvaWQgX19pbml0IG5ldG5zX2lwdjRfc3RydWN0X2NoZWNrKHZvaWQpXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9MTI2Nz12b2lkIF9faW5pdCBuZXRfbnNfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEyNzAtXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jOjEyNzE6I2lmZGVmIENPTkZJR19ORVRfTlNcXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTI3Mi1cXHRuZXRuc19pcHY0X3N0cnVjdF9jaGVjaygpO1xcbi0tXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEzMTEtXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jOjEzMTI6I2lmZGVmIENPTkZJR19ORVRfTlNcXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTMxMy1zdGF0aWMgaW50IF9fcmVnaXN0ZXJfcGVybmV0X29wZXJhdGlvbnMoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4tLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYz0xMzY3PXN0YXRpYyB2b2lkIF9fdW5yZWdpc3Rlcl9wZXJuZXRfb3BlcmF0aW9ucyhzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgKm9wcylcXG4tLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMzc4LVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzoxMzc5OiNlbmRpZiAvKiBDT05GSUdfTkVUX05TICovXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEzODAtXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9MTUxNT1FWFBPUlRfU1lNQk9MX0dQTCh1bnJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UpO1xcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xNTE2LVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzoxNTE3OiNpZmRlZiBDT05GSUdfTkVUX05TXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTE1MTgtc3RhdGljIHN0cnVjdCBuc19jb21tb24gKm5ldG5zX2dldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yMjkwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBpZmxhX3BvbGljeVtJRkxBX01BWCsxXSA9IHtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIzMDQtXFx0W0lGTEFfTElOS0lORk9dXFx0XFx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjIzMDU6XFx0W0lGTEFfTkVUX05TX1BJRF1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjMwNjpcXHRbSUZMQV9ORVRfTlNfRkRdXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIzMDctXFx0LyogSUZMQV9JRkFMSUFTIGlzIGEgc3RyaW5nLCBidXQgcG9saWN5IGlzIHNldCB0byBOTEFfQklOQVJZIHRvXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yNjY3PXN0YXRpYyBzdHJ1Y3QgbmV0ICpydG5sX2xpbmtfZ2V0X25ldF9pZmxhKHN0cnVjdCBubGF0dHIgKnRiW10pXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNjczLVxcdCAqL1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI2NzQ6XFx0aWYgKHRiW0lGTEFfTkVUX05TX1BJRF0pXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjY3NTpcXHRcXHRuZXQgPSBnZXRfbmV0X25zX2J5X3BpZChubGFfZ2V0X3UzMih0YltJRkxBX05FVF9OU19QSURdKSk7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjY3NjpcXHRlbHNlIGlmICh0YltJRkxBX05FVF9OU19GRF0pXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjY3NzpcXHRcXHRuZXQgPSBnZXRfbmV0X25zX2J5X2ZkKG5sYV9nZXRfdTMyKHRiW0lGTEFfTkVUX05TX0ZEXSkpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI2NzgtXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yNjkxPUVYUE9SVF9TWU1CT0wocnRubF9saW5rX2dldF9uZXQpO1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjY5NS0gKlxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI2OTY6ICogMS4gSUZMQV9ORVRfTlNfUElEXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjY5NzogKiAyLiBJRkxBX05FVF9OU19GRFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI2OTgtICogMy4gSUZMQV9UQVJHRVRfTkVUTlNJRFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MjcwMD1zdGF0aWMgc3RydWN0IG5ldCAqcnRubF9saW5rX2dldF9uZXRfYnlfbmxhdHRyKHN0cnVjdCBuZXQgKnNyY19uZXQsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNzA0LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI3MDU6XFx0aWYgKHRiW0lGTEFfTkVUX05TX1BJRF0gfHwgdGJbSUZMQV9ORVRfTlNfRkRdKVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI3MDYtXFx0XFx0cmV0dXJuIHJ0bmxfbGlua19nZXRfbmV0KHNyY19uZXQsIHRiKTtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTI3Mzk9c3RhdGljIGludCBydG5sX2Vuc3VyZV91bmlxdWVfbmV0bnMoc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI3NDQtXFx0aWYgKG5ldG5zX2lkX29ubHkpIHtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyNzQ1OlxcdFxcdGlmICghdGJbSUZMQV9ORVRfTlNfUElEXSBcXHUwMDI2XFx1MDAyNiAhdGJbSUZMQV9ORVRfTlNfRkRdKVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI3NDYtXFx0XFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNzUxLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI3NTI6XFx0aWYgKHRiW0lGTEFfVEFSR0VUX05FVE5TSURdIFxcdTAwMjZcXHUwMDI2ICh0YltJRkxBX05FVF9OU19QSURdIHx8IHRiW0lGTEFfTkVUX05TX0ZEXSkpXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjc1My1cXHRcXHRnb3RvIGludmFsaWRfYXR0cjtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNzU0LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI3NTU6XFx0aWYgKHRiW0lGTEFfTkVUX05TX1BJRF0gXFx1MDAyNlxcdTAwMjYgKHRiW0lGTEFfVEFSR0VUX05FVE5TSURdIHx8IHRiW0lGTEFfTkVUX05TX0ZEXSkpXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjc1Ni1cXHRcXHRnb3RvIGludmFsaWRfYXR0cjtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNzU3LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI3NTg6XFx0aWYgKHRiW0lGTEFfTkVUX05TX0ZEXSBcXHUwMDI2XFx1MDAyNiAodGJbSUZMQV9UQVJHRVRfTkVUTlNJRF0gfHwgdGJbSUZMQV9ORVRfTlNfUElEXSkpXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjc1OS1cXHRcXHRnb3RvIGludmFsaWRfYXR0cjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDE6NTEuMzU0Njg3NTExWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MzcxMDI2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBgQ09ORklHX05FVF9OU2AgYW5kIFJlZmVyZW5jZSBDb3VudGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBDT05GSUdfTkVUX05TYCwgd2hpY2ggSSB1bmRlcnN0YW5kIGlzIGEgY3JpdGljYWwgY29uZmlndXJhdGlvbiBvcHRpb24uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGhvdyB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIG1lY2hhbmlzbSB3b3JrcyBpbiByZWxhdGlvbiB0byB0aGlzLiBJJ3ZlIG5vdGljZWQgdGhhdCBgcmVmX3RyYWNrZXJfZGlyX2V4aXRgIGlzIGNhbGxlZCBvbiBgbmV0LVx1MDAzZXJlZmNudF90cmFja2VyYCwgd2hpY2ggbWFrZXMgbWUgdGhpbmsgdGhlcmUgbWlnaHQgYmUgYSBkZXBlbmRlbmN5IHRvIGV4cGxvcmUuIFRoZSBxdWVzdGlvbiBpcywgaXMgYHJlZmNudF90cmFja2VyYCBpdHNlbGYgY29udGluZ2VudCBvbiBgQ09ORklHX05FVF9OU19SRUZDTlRfVFJBQ0tFUmA/IEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlc2UgdHlwZXMgb2YgY2hlY2tzLCBJIHRoaW5rIHRoZSBtb3N0IGRpcmVjdCB3YXkgdG8gZ2V0IGFuIGFuc3dlciBxdWlja2x5IGlzIHRvIGRpdmUgaW50byBgaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oYC4gVGhhdCBoZWFkZXIgZmlsZSBpcyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhlIGRldGFpbHMgb24gdGhlIHN0cnVjdCBkZWZpbml0aW9ucyBhbmQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGludm9sdmVkIHdpdGggbmV0IG5hbWVzcGFjZXMuIExldCdzIHNlZSB3aGF0IGl0IHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNzAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MTo1Ni4wOTE3OTQ0MjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODI4NzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlZmNudF90cmFja2VyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg9NjI9c3RydWN0IG5ldCB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtOTctXFx0c3RydWN0IG5zX2NvbW1vblxcdG5zO1xcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDo5ODpcXHRzdHJ1Y3QgcmVmX3RyYWNrZXJfZGlyICByZWZjbnRfdHJhY2tlcjtcXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg6OTk6XFx0c3RydWN0IHJlZl90cmFja2VyX2RpciAgbm90cmVmY250X3RyYWNrZXI7IC8qIHRyYWNrZXIgZm9yIG9iamVjdHMgbm90XFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTEwMC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgKiByZWZjb3VudGVkIGFnYWluc3QgbmV0bnNcXG4tLVxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaD0zNjQ9c3RhdGljIGlubGluZSB2b2lkIF9fbmV0bnNfdHJhY2tlcl9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtMzY5LSNpZmRlZiBDT05GSUdfTkVUX05TX1JFRkNOVF9UUkFDS0VSXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oOjM3MDpcXHRyZWZfdHJhY2tlcl9hbGxvYyhyZWZjb3VudGVkID8gXFx1MDAyNm5ldC1cXHUwMDNlcmVmY250X3RyYWNrZXIgOlxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDozNzE6XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZuZXQtXFx1MDAzZW5vdHJlZmNudF90cmFja2VyLFxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0zNzItXFx0XFx0XFx0ICB0cmFja2VyLCBnZnApO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oPTM4Mj1zdGF0aWMgaW5saW5lIHZvaWQgX19uZXRuc190cmFja2VyX2ZyZWUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTM4Ni0jaWZkZWYgQ09ORklHX05FVF9OU19SRUZDTlRfVFJBQ0tFUlxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDozODc6ICAgICAgIHJlZl90cmFja2VyX2ZyZWUocmVmY291bnRlZCA/IFxcdTAwMjZuZXQtXFx1MDAzZXJlZmNudF90cmFja2VyIDpcXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg6Mzg4OlxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNm5ldC1cXHUwMDNlbm90cmVmY250X3RyYWNrZXIsIHRyYWNrZXIpO1xcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0zODktI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjQxOjU2LjEzNzYyOTgxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MzA4ODYxODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmY250IFRyYWNrZXIgQ29uZmlndXJhdGlvbiBcdTAwMjYgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgcmVmY250X3RyYWNrZXJgIHNpdHVhdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgYENPTkZJR19ORVRfTlNfUkVGQ05UX1RSQUNLRVJgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCAqZW5hYmxlcyogdGhlIHdob2xlIHJlZmNvdW50IHRyYWNraW5nIG1lY2hhbmlzbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBnb3QgaXQuXCIgQnV0IHRoZW4gSSBzZWUgdGhhdCBgcmVmX3RyYWNrZXJfZGlyX2V4aXRgIGdldHMgY2FsbGVkIHVuY29uZGl0aW9uYWxseSB3aXRoaW4gYGNvcHlfbmV0X25zYC4gVGhhdCdzIGEgYml0IG9mIGEgaGVhZC1zY3JhdGNoZXIuXG5cblRoZSBjb3JlIHF1ZXN0aW9uIHRoYXQganVtcHMgb3V0IGF0IG1lIG5vdyBpcywgXCJEb2VzIGByZWZfdHJhY2tlcl9kaXJfZXhpdGAgYWN0dWFsbHkgKmRvKiBhbnl0aGluZyBtZWFuaW5nZnVsIGlmIHRoYXQgYENPTkZJR19ORVRfTlNfUkVGQ05UX1RSQUNLRVJgIGlzbid0IHNldD9cIiBJIG1lYW4sIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBwb3RlbnRpYWxseSBwZXJmb3JtYW5jZS1pbXBhY3RpbmcgY2FsbCBoZXJlLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzLlxuXG5UbyBnZXQgYSBkZWZpbml0aXZlIGFuc3dlciwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzb3VyY2UuIFRpbWUgdG8gaGVhZCBvdmVyIHRvIGBpbmNsdWRlL2xpbnV4L3JlZl90cmFja2VyLmhgIGFuZCBzZWUgd2hhdCdzIHdoYXQuIFRoYXQgaGVhZGVyIGZpbGUgc2hvdWxkIGhhdmUgdGhlIGNydWNpYWwgZGV0YWlscywgZGVmaW5pdGlvbnMsIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYyBJJ20gYWZ0ZXIuIEknbGwgbmVlZCB0byBzZWUgaWYgaXQncyBwcm90ZWN0ZWQgYnkgYW4gYCNpZmRlZiBDT05GSUdfTkVUX05TX1JFRkNOVF9UUkFDS0VSYCBndWFyZCwgb3IgaWYgdGhlcmUncyBzb21lIHNvcnQgb2Ygbm8tb3Agb3IgcGxhY2Vob2xkZXIgYmVoYXZpb3IgZGVmaW5lZCBmb3IgdGhlIGRpc2FibGVkIGNhc2UuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA4MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjQyOjAwLjc2ODUxODE0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg2MzEyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWZfdHJhY2tlcl9kaXJfZXhpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3JlZl90cmFja2VyLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9yZWZfdHJhY2tlci5oPTU4PXN0YXRpYyBpbmxpbmUgdm9pZCByZWZfdHJhY2tlcl9kaXJfaW5pdChzdHJ1Y3QgcmVmX3RyYWNrZXJfZGlyICpkaXIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JlZl90cmFja2VyLmgtNzMtXFxuaW5jbHVkZS9saW51eC9yZWZfdHJhY2tlci5oOjc0OnZvaWQgcmVmX3RyYWNrZXJfZGlyX2V4aXQoc3RydWN0IHJlZl90cmFja2VyX2RpciAqZGlyKTtcXG5pbmNsdWRlL2xpbnV4L3JlZl90cmFja2VyLmgtNzUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JlZl90cmFja2VyLmg9MTAzPXZvaWQgcmVmX3RyYWNrZXJfZGlyX3N5bWxpbmsoc3RydWN0IHJlZl90cmFja2VyX2RpciAqZGlyLCBjb25zdCBjaGFyICpmbXQsIC4uLilcXG4tLVxcbmluY2x1ZGUvbGludXgvcmVmX3RyYWNrZXIuaC0xMDYtXFxuaW5jbHVkZS9saW51eC9yZWZfdHJhY2tlci5oOjEwNzpzdGF0aWMgaW5saW5lIHZvaWQgcmVmX3RyYWNrZXJfZGlyX2V4aXQoc3RydWN0IHJlZl90cmFja2VyX2RpciAqZGlyKVxcbmluY2x1ZGUvbGludXgvcmVmX3RyYWNrZXIuaC0xMDgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MjowMC44MTUzODU2NzdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ5NDY1NDc5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBMaW5lIG9mIFJlYXNvbmluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGlzIHJlZmVyZW5jZSB0cmFja2luZyB0aGluZyB3b3JrcywgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMuICBJIHNlZSBgcmVmX3RyYWNrZXJfZGlyX2V4aXRgIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvcmVmX3RyYWNrZXIuaGAuICBSaWdodCwgdGhhdCdzIHRoZSBjb3JlLiAgSWYgYENPTkZJR19SRUZfVFJBQ0tFUmAgaXMgZW5hYmxlZCwgaXQgZG9lcyBzb21ldGhpbmc7IGlmIG5vdCwgaXQncyBqdXN0IGEgZGVhZCBlbmQuICBOb3csIEkgcmVjYWxsIHRoYXQgYENPTkZJR19ORVRfTlNfUkVGQ05UX1RSQUNLRVJgIHNlbGVjdHMgYENPTkZJR19SRUZfVFJBQ0tFUmAuIEFoYSwgc28gYENPTkZJR19ORVRfTlNfUkVGQ05UX1RSQUNLRVJgIGlzIHRoZSBwcmltYXJ5IG9wdGlvbiB0byBmb2N1cyBvbi4gQnV0IHdhaXQsIHRoZXJl4oCZcyBhIGNhdGNoLiBMb29raW5nIGF0IHRoZSBjb2RlIGFyb3VuZCBgY29weV9uZXRfbnNgLCBgQ09ORklHX05FVF9OU2AgaXMgYWxzbyBuZWVkZWQgZm9yIGNvbXBpbGF0aW9uLiBHb3R0YSBtYWtlIHN1cmUgYm90aCBhcmUgc2V0LiAgTGV0IG1lIGRvdWJsZS1jaGVjayBgQ09ORklHX05FVF9OU2AgYW5kIGBDT05GSUdfTkVUX05TX1JFRkNOVF9UUkFDS0VSYCBpbiB0aGUgY29uZmlnLiBIb2xkIG9uLi4uIGRvZXMgYGNvcHlfbmV0X25zYCAqb25seSogZ2V0IGNvbXBpbGVkIGlmIGBDT05GSUdfTkVUX05TYCBpcyBzZXQ/IEknZCBiZXR0ZXIgY29uZmlybSB0aGF0OyBsZXQncyBnbyBiYWNrIGFuZCBsb29rIGF0IGBuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNgIGFnYWluIGFuZCBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcyNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MjowNS4zMTAwNDI4MjdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzU2NTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvcHlfbmV0X25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9NTQ3PXZvaWQgbmV0X2Ryb3BfbnMoc3RydWN0IG5zX2NvbW1vbiAqbnMpXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNTUyLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo1NTM6c3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy01NTQtXFx0XFx0XFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBzdHJ1Y3QgbmV0ICpvbGRfbmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MjowNS4zNTY0MDUxMjRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0NzM0MzM5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBzZWxmLXJlZmxlY3Rpb246XG5cbioqRGVlcCBEaXZlOiBOZXQgTmFtZXNwYWNlIENvbnRleHQqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBgY29weV9uZXRfbnNgIGlzIGd1YXJkZWQgYnkgYSBgI2lmZGVmIENPTkZJR19ORVRfTlNgIGNvbmRpdGlvbmFsLiBUaGF0J3MgYSBjcnVjaWFsIGNoZWNrLiBJZiBpdCAqaXNuJ3QqLCB0aGF0J3MgYSByZWQgZmxhZy4gSXQgaW1wbGllcyB0aGUgZnVuY3Rpb24ncyBwb3RlbnRpYWxseSBiZWluZyB1c2VkIGluIHBhcnRzIG9mIHRoZSBrZXJuZWwgd2hlcmUgbmV0d29yayBuYW1lc3BhY2VzIGFyZW4ndCBldmVuIGVuYWJsZWQsIHdoaWNoIHdvdWxkIGJlIGEgcmVjaXBlIGZvciB1bmV4cGVjdGVkIGJlaGF2aW9yLCBjb21waWxlIGVycm9ycywgb3IgZXZlbiwgaGVhdmVuIGZvcmJpZCwgcnVudGltZSBjcmFzaGVzLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZSBjb2RlJ3MgZGVzaWduZWQgdG8gYmUgcm9idXN0IHVuZGVyIGRpZmZlcmVudCBidWlsZCBjb25maWd1cmF0aW9ucy4gSXMgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIGNvZGUgcHJvcGVybHkgbW9kdWxhcml6ZWQsIG9yIGlzIHRoZXJlIGEgbGVha3kgYWJzdHJhY3Rpb24/IFRoaXMgcmVxdWlyZXMgYSBxdWljayBjb2RlIGluc3BlY3Rpb24gdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM1MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjQyOjA4LjgwMzc1MDg5OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MDA6XFx0XFx0aWYgKCFuZXQtXFx1MDAzZWtleV9kb21haW4pXFxuIDUwMTpcXHRcXHRcXHRnb3RvIG91dF9mcmVlXzI7XFxuIDUwMjpcXHRcXHRyZWZjb3VudF9zZXQoXFx1MDAyNm5ldC1cXHUwMDNla2V5X2RvbWFpbi1cXHUwMDNldXNhZ2UsIDEpO1xcbiA1MDM6XFx0I2VuZGlmXFxuIDUwNDpcXHRcXG4gNTA1OlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihuZXQtXFx1MDAzZWdlbiwgbmcpO1xcbiA1MDY6XFx0b3V0OlxcbiA1MDc6XFx0XFx0cmV0dXJuIG5ldDtcXG4gNTA4OlxcdFxcbiA1MDk6XFx0I2lmZGVmIENPTkZJR19LRVlTXFxuIDUxMDpcXHRvdXRfZnJlZV8yOlxcbiA1MTE6XFx0XFx0a21lbV9jYWNoZV9mcmVlKG5ldF9jYWNoZXAsIG5ldCk7XFxuIDUxMjpcXHRcXHRuZXQgPSBOVUxMO1xcbiA1MTM6XFx0I2VuZGlmXFxuIDUxNDpcXHRvdXRfZnJlZTpcXG4gNTE1OlxcdFxcdGtmcmVlKG5nKTtcXG4gNTE2OlxcdFxcdGdvdG8gb3V0O1xcbiA1MTc6XFx0fVxcbiA1MTg6XFx0XFxuIDUxOTpcXHRzdGF0aWMgTExJU1RfSEVBRChkZWZlcl9mcmVlX2xpc3QpO1xcbiA1MjA6XFx0XFxuIDUyMTpcXHRzdGF0aWMgdm9pZCBuZXRfY29tcGxldGVfZnJlZSh2b2lkKVxcbiA1MjI6XFx0e1xcbiA1MjM6XFx0XFx0c3RydWN0IGxsaXN0X25vZGUgKmtpbGxfbGlzdDtcXG4gNTI0OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCwgKm5leHQ7XFxuIDUyNTpcXHRcXG4gNTI2OlxcdFxcdC8qIEdldCB0aGUgbGlzdCBvZiBuYW1lc3BhY2VzIHRvIGZyZWUgZnJvbSBsYXN0IHJvdW5kLiAqL1xcbiA1Mjc6XFx0XFx0a2lsbF9saXN0ID0gbGxpc3RfZGVsX2FsbChcXHUwMDI2ZGVmZXJfZnJlZV9saXN0KTtcXG4gNTI4OlxcdFxcbiA1Mjk6XFx0XFx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZXQsIG5leHQsIGtpbGxfbGlzdCwgZGVmZXJfZnJlZV9saXN0KVxcbiA1MzA6XFx0XFx0XFx0a21lbV9jYWNoZV9mcmVlKG5ldF9jYWNoZXAsIG5ldCk7XFxuIDUzMTpcXHRcXG4gNTMyOlxcdH1cXG4gNTMzOlxcdFxcbiA1MzQ6XFx0dm9pZCBuZXRfcGFzc2l2ZV9kZWMoc3RydWN0IG5ldCAqbmV0KVxcbiA1MzU6XFx0e1xcbiA1MzY6XFx0XFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2bmV0LVxcdTAwM2VwYXNzaXZlKSkge1xcbiA1Mzc6XFx0XFx0XFx0a2ZyZWUocmN1X2FjY2Vzc19wb2ludGVyKG5ldC1cXHUwMDNlZ2VuKSk7XFxuIDUzODpcXHRcXG4gNTM5OlxcdFxcdFxcdC8qIFRoZXJlIHNob3VsZCBub3QgYmUgYW55IHRyYWNrZXJzIGxlZnQgdGhlcmUuICovXFxuIDU0MDpcXHRcXHRcXHRyZWZfdHJhY2tlcl9kaXJfZXhpdChcXHUwMDI2bmV0LVxcdTAwM2Vub3RyZWZjbnRfdHJhY2tlcik7XFxuIDU0MTpcXHRcXG4gNTQyOlxcdFxcdFxcdC8qIFdhaXQgZm9yIGFuIGV4dHJhIHJjdV9iYXJyaWVyKCkgYmVmb3JlIGZpbmFsIGZyZWUuICovXFxuIDU0MzpcXHRcXHRcXHRsbGlzdF9hZGQoXFx1MDAyNm5ldC1cXHUwMDNlZGVmZXJfZnJlZV9saXN0LCBcXHUwMDI2ZGVmZXJfZnJlZV9saXN0KTtcXG4gNTQ0OlxcdFxcdH1cXG4gNTQ1OlxcdH1cXG4gNTQ2OlxcdFxcbiA1NDc6XFx0dm9pZCBuZXRfZHJvcF9ucyhzdHJ1Y3QgbnNfY29tbW9uICpucylcXG4gNTQ4OlxcdHtcXG4gNTQ5OlxcdFxcdGlmIChucylcXG4gNTUwOlxcdFxcdFxcdG5ldF9wYXNzaXZlX2RlYyh0b19uZXRfbnMobnMpKTtcXG4gNTUxOlxcdH1cXG4gNTUyOlxcdFxcbiA1NTM6XFx0c3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxcbiA1NTQ6XFx0XFx0XFx0XFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBzdHJ1Y3QgbmV0ICpvbGRfbmV0KVxcbiA1NTU6XFx0e1xcbiA1NTY6XFx0XFx0c3RydWN0IHVjb3VudHMgKnVjb3VudHM7XFxuIDU1NzpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQ7XFxuIDU1ODpcXHRcXHRpbnQgcnY7XFxuIDU1OTpcXHRcXG4gNTYwOlxcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgQ0xPTkVfTkVXTkVUKSlcXG4gNTYxOlxcdFxcdFxcdHJldHVybiBnZXRfbmV0KG9sZF9uZXQpO1xcbiA1NjI6XFx0XFxuIDU2MzpcXHRcXHR1Y291bnRzID0gaW5jX25ldF9uYW1lc3BhY2VzKHVzZXJfbnMpO1xcbiA1NjQ6XFx0XFx0aWYgKCF1Y291bnRzKVxcbiA1NjU6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7XFxuIDU2NjpcXHRcXG4gNTY3OlxcdFxcdG5ldCA9IG5ldF9hbGxvYygpO1xcbiA1Njg6XFx0XFx0aWYgKCFuZXQpIHtcXG4gNTY5OlxcdFxcdFxcdHJ2ID0gLUVOT01FTTtcXG4gNTcwOlxcdFxcdFxcdGdvdG8gZGVjX3Vjb3VudHM7XFxuIDU3MTpcXHRcXHR9XFxuIDU3MjpcXHRcXG4gNTczOlxcdFxcdHJ2ID0gcHJlaW5pdF9uZXQobmV0LCB1c2VyX25zKTtcXG4gNTc0OlxcdFxcdGlmIChydiBcXHUwMDNjIDApXFxuIDU3NTpcXHRcXHRcXHRnb3RvIGRlY191Y291bnRzO1xcbiA1NzY6XFx0XFx0bmV0LVxcdTAwM2V1Y291bnRzID0gdWNvdW50cztcXG4gNTc3OlxcdFxcdGdldF91c2VyX25zKHVzZXJfbnMpO1xcbiA1Nzg6XFx0XFxuIDU3OTpcXHRcXHRydiA9IGRvd25fcmVhZF9raWxsYWJsZShcXHUwMDI2cGVybmV0X29wc19yd3NlbSk7XFxuIDU4MDpcXHRcXHRpZiAocnYgXFx1MDAzYyAwKVxcbiA1ODE6XFx0XFx0XFx0Z290byBwdXRfdXNlcm5zO1xcbiA1ODI6XFx0XFxuIDU4MzpcXHRcXHRydiA9IHNldHVwX25ldChuZXQpO1xcbiA1ODQ6XFx0XFxuIDU4NTpcXHRcXHR1cF9yZWFkKFxcdTAwMjZwZXJuZXRfb3BzX3J3c2VtKTtcXG4gNTg2OlxcdFxcbiA1ODc6XFx0XFx0aWYgKHJ2IFxcdTAwM2MgMCkge1xcbiA1ODg6XFx0cHV0X3VzZXJuczpcXG4gNTg5OlxcdFxcdFxcdG5zX2NvbW1vbl9mcmVlKG5ldCk7XFxuIDU5MDpcXHQjaWZkZWYgQ09ORklHX0tFWVNcXG4gNTkxOlxcdFxcdFxcdGtleV9yZW1vdmVfZG9tYWluKG5ldC1cXHUwMDNla2V5X2RvbWFpbik7XFxuIDU5MjpcXHQjZW5kaWZcXG4gNTkzOlxcdFxcdFxcdHB1dF91c2VyX25zKHVzZXJfbnMpO1xcbiA1OTQ6XFx0XFx0XFx0Lyogc2V0dXBfbmV0KCkgZmFpbHVyZSBpcyBub3Qgcm91dGVkIHRocm91Z2ggX19wdXRfbmV0KCksIHNvIHRoZVxcbiA1OTU6XFx0XFx0XFx0ICogcmVmY250X3RyYWNrZXIgKGFuZCBpdHMgZGVidWdmcyBmaWxlKSBoYXMgdG8gYmUgcmVsZWFzZWQgaGVyZS5cXG4gNTk2OlxcdFxcdFxcdCAqL1xcbiA1OTc6XFx0XFx0XFx0cmVmX3RyYWNrZXJfZGlyX2V4aXQoXFx1MDAyNm5ldC1cXHUwMDNlcmVmY250X3RyYWNrZXIpO1xcbiA1OTg6XFx0XFx0XFx0bmV0X3Bhc3NpdmVfZGVjKG5ldCk7XFxuIDU5OTpcXHRkZWNfdWNvdW50czpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDI6MDguODAzODg5NjE4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2MDE2MzYwMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYGNvcHlfbmV0X25zYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIGBjb3B5X25ldF9uc2AgaXNuJ3Qgd3JhcHBlZCBpbiBhIGNvbmRpdGlvbmFsIGJhc2VkIG9uIGBDT05GSUdfTkVUX05TYCwgd2hpY2ggaXMgYSBiaXQgdW51c3VhbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBqdXN0IGFsd2F5cyBjb21waWxlZCwgd2hpY2ggaXMgdGhlIGV4cGVjdGVkIGFwcHJvYWNoIGZvciBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cy4gQnV0IHdhaXQsIGBuZXRfbmFtZXNwYWNlLmNgIGlzIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSwgd2hpY2ggKnNob3VsZCogbWVhbiBgY29weV9uZXRfbnNgIGlzIGFsd2F5cyBhdmFpbGFibGUuIEhvd2V2ZXIsIHdoYXQgaGFwcGVucyB3aGVuIGBDT05GSUdfTkVUX05TYCBpcyAqbm90KiBlbmFibGVkPyBEb2VzIHRoZSBjb21waWxlciBvcHRpbWl6ZSBpdCBvdXQgZW50aXJlbHk/IE9yIGRvZXMgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIHN0aWxsIGV4aXN0LCBldmVuIGlmIHRoZSBkZWZpbml0aW9uIGlzIGVmZmVjdGl2ZWx5IGVtcHR5IG9yIGhhbmRsZWQgZGlmZmVyZW50bHk/IFRvIGJlIGNlcnRhaW4sIEkgbmVlZCB0byBjaGVjayBgaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oYCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBDT05GSUdfTkVUX05TYCBpbiBkZXRhaWwgYW5kIHRvIHNlZSBob3cgdGhlIGZ1bmN0aW9uIGl0c2VsZiBpcyBoYW5kbGVkIHdpdGggYW5kIHdpdGhvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk3NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDI6MTcuNDA1NTI4MzE1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjgxNjM4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb3B5X25ldF9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oPTIxMj1leHRlcm4gc3RydWN0IG5ldCBpbml0X25ldDtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0yMTQtI2lmZGVmIENPTkZJR19ORVRfTlNcXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg6MjE1OnN0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHU2NCBmbGFncywgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLFxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0yMTYtXFx0XFx0XFx0c3RydWN0IG5ldCAqb2xkX25ldCk7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg9MjI0PWV4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNsZWFudXBfbmV0X3Rhc2s7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtMjI4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9uc3Byb3h5LmhcXHUwMDNlXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oOjIyOTpzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHU2NCBmbGFncyxcXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtMjMwLVxcdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywgc3RydWN0IG5ldCAqb2xkX25ldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDI6MTcuNDU4MzQ5ODExWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwODIyMTA5MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgYGNvcHlfbmV0X25zYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGNvcHlfbmV0X25zYCBmdW5jdGlvbiwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgZGVmaW5lZCB3aXRoaW4gYG5ldC9jb3JlL25ldF9uYW1lc3BhY2UuY2AuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gQnV0LCB0aGUgaW1tZWRpYXRlIGNhdmVhdCB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIHRoZSBwb3RlbnRpYWwgcmVsaWFuY2Ugb24gYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgc3BlY2lmaWNhbGx5IGBDT05GSUdfTkVUX05TYC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBmdW5jdGlvbiBpcyBjb21waWxlZCBpbiBhbGwgc2NlbmFyaW9zIG9yIGlzIGNvbmRpdGlvbmFsIHVwb24gdGhhdCBzcGVjaWZpYyBLY29uZmlnIG9wdGlvbiBiZWluZyBlbmFibGVkLiBJZiBgbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jYCBpcyBhbHdheXMgY29tcGlsZWQsIGhvdyBpcyBgY29weV9uZXRfbnNgIGNvbnRyb2xsZWQ/IFRoZSBhbnN3ZXIgbXVzdCBiZSBpbiB0aGF0IHNvdXJjZSBmaWxlIGl0c2VsZi4gVGltZSB0byBkaXZlIGludG8gYG5ldC9jb3JlL25ldF9uYW1lc3BhY2UuY2AgYW5kIHNlYXJjaCBmb3IgdGhhdCBgI2lmZGVmIENPTkZJR19ORVRfTlNgIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MjoyMi41NDA1NjI4NTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNjU2NDYwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTkVUX05TXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9NDQwPXN0YXRpYyBfX25ldF9pbml0IGludCBzZXR1cF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTQ3MC1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6NDcxOiNpZmRlZiBDT05GSUdfTkVUX05TXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTQ3Mi1zdGF0aWMgc3RydWN0IHVjb3VudHMgKmluY19uZXRfbmFtZXNwYWNlcyhzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zKVxcbi0tXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTgxNz1FWFBPUlRfU1lNQk9MX0dQTChnZXRfbmV0X25zX2J5X3BpZCk7XFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTgxOC1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6ODE5OiNpZmRlZiBDT05GSUdfTkVUX05TX1JFRkNOVF9UUkFDS0VSXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTgyMC1zdGF0aWMgdm9pZCBuZXRfbnNfbmV0X2RlYnVnZnMoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTExODc9c3RhdGljIHZvaWQgcnRubF9uZXRfbm90aWZ5aWQoc3RydWN0IG5ldCAqbmV0LCBpbnQgY21kLCBpbnQgaWQsIHUzMiBwb3J0aWQsXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTIxNS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6MTIxNjojaWZkZWYgQ09ORklHX05FVF9OU1xcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMjE3LXN0YXRpYyB2b2lkIF9faW5pdCBuZXRuc19pcHY0X3N0cnVjdF9jaGVjayh2b2lkKVxcbi0tXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTEyNjc9dm9pZCBfX2luaXQgbmV0X25zX2luaXQodm9pZClcXG4tLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMjcwLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzoxMjcxOiNpZmRlZiBDT05GSUdfTkVUX05TXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEyNzItXFx0bmV0bnNfaXB2NF9zdHJ1Y3RfY2hlY2soKTtcXG4tLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMzExLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzoxMzEyOiNpZmRlZiBDT05GSUdfTkVUX05TXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEzMTMtc3RhdGljIGludCBfX3JlZ2lzdGVyX3Blcm5ldF9vcGVyYXRpb25zKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9MTM2Nz1zdGF0aWMgdm9pZCBfX3VucmVnaXN0ZXJfcGVybmV0X29wZXJhdGlvbnMoc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zICpvcHMpXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTM3OC1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6MTM3OTojZW5kaWYgLyogQ09ORklHX05FVF9OUyAqL1xcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMzgwLVxcbi0tXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTE1MTU9RVhQT1JUX1NZTUJPTF9HUEwodW5yZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKTtcXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTUxNi1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6MTUxNzojaWZkZWYgQ09ORklHX05FVF9OU1xcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xNTE4LXN0YXRpYyBzdHJ1Y3QgbnNfY29tbW9uICpuZXRuc19nZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MjoyMy4wNTcxMzE4NDRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI3Mzg0NjEzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW5pdGlhbCBDb25mdXNpb24gYW5kIEludmVzdGlnYXRpb24qKlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmIEkgY291bGQgaGF2ZSBzd29ybiBgY29weV9uZXRfbnNgIHdhcyBzdXBwb3NlZCB0byBiZSBjb25kaXRpb25hbGl6ZWQgYnkgdGhlIGBDT05GSUdfTkVUX05TYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCBhbmQgbm93IEknbSBkb3VidGluZyB0aGF0LiBNeSBtZW50YWwgbW9kZWwgb2YgYG5ldC9jb3JlL25ldF9uYW1lc3BhY2UuY2Agc3VnZ2VzdHMgaXQncyBzdXBwb3NlZCB0byBiZSBlbmNsb3NlZCB3aXRoaW4gdGhhdCBjb25kaXRpb25hbCBibG9jay4gVGhpcyBmZWVscyB3cm9uZy5cblxuUmlnaHQsIHRpbWUgdG8gZ2V0IHRoaXMgc3RyYWlnaHQuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGUgYm91bmRhcmllcyBvZiB0aGF0IGAjaWZkZWYgQ09ORklHX05FVF9OU2AgYmxvY2sgaW4gdGhlIHNvdXJjZSBjb2RlLiBUaGUgbG9jYXRpb24gb2YgdGhlIGNsb3NpbmcgYCNlbmRpZmAgaXMgY3JpdGljYWwgaGVyZS4gSXQncyBwb3NzaWJsZSBJJ20gbWlzcmVtZW1iZXJpbmcsIGFuZCBgY29weV9uZXRfbnNgICppcyogYWN0dWFsbHkgb3V0c2lkZSB0aGUgcHJvdGVjdGVkIHNlY3Rpb24sIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGUgZXhhY3QgcGxhY2VtZW50IGJlZm9yZSBJIGNhbiBwcm9jZWVkIHdpdGggYW55IHRyb3VibGVzaG9vdGluZyBvciBkZWJ1Z2dpbmcuIFRoZSBpbXBsaWNhdGlvbnMgYXJlIHNpZ25pZmljYW50LCBkZXBlbmRpbmcgb24gd2hldGhlciBpdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3IgYWx3YXlzIHBhcnQgb2YgdGhlIGJ1aWxkLiBUaGlzIHJlcXVpcmVzIGEgcmFwaWQgdmVyaWZpY2F0aW9uIG9mIHRoZSBjb2RlJ3Mgc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUzOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjQyOjI3LjMzMDk4NDc2NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzU0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3MSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzE6XFx0I2lmZGVmIENPTkZJR19ORVRfTlNcXG4gNDcyOlxcdHN0YXRpYyBzdHJ1Y3QgdWNvdW50cyAqaW5jX25ldF9uYW1lc3BhY2VzKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMpXFxuIDQ3MzpcXHR7XFxuIDQ3NDpcXHRcXHRyZXR1cm4gaW5jX3Vjb3VudChucywgY3VycmVudF9ldWlkKCksIFVDT1VOVF9ORVRfTkFNRVNQQUNFUyk7XFxuIDQ3NTpcXHR9XFxuIDQ3NjpcXHRcXG4gNDc3OlxcdHN0YXRpYyB2b2lkIGRlY19uZXRfbmFtZXNwYWNlcyhzdHJ1Y3QgdWNvdW50cyAqdWNvdW50cylcXG4gNDc4OlxcdHtcXG4gNDc5OlxcdFxcdGRlY191Y291bnQodWNvdW50cywgVUNPVU5UX05FVF9OQU1FU1BBQ0VTKTtcXG4gNDgwOlxcdH1cXG4gNDgxOlxcdFxcbiA0ODI6XFx0c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpuZXRfY2FjaGVwIF9fcm9fYWZ0ZXJfaW5pdDtcXG4gNDgzOlxcdHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbmV0bnNfd3E7XFxuIDQ4NDpcXHRcXG4gNDg1OlxcdHN0YXRpYyBzdHJ1Y3QgbmV0ICpuZXRfYWxsb2Modm9pZClcXG4gNDg2OlxcdHtcXG4gNDg3OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IE5VTEw7XFxuIDQ4ODpcXHRcXHRzdHJ1Y3QgbmV0X2dlbmVyaWMgKm5nO1xcbiA0ODk6XFx0XFxuIDQ5MDpcXHRcXHRuZyA9IG5ldF9hbGxvY19nZW5lcmljKCk7XFxuIDQ5MTpcXHRcXHRpZiAoIW5nKVxcbiA0OTI6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDQ5MzpcXHRcXG4gNDk0OlxcdFxcdG5ldCA9IGttZW1fY2FjaGVfemFsbG9jKG5ldF9jYWNoZXAsIEdGUF9LRVJORUwpO1xcbiA0OTU6XFx0XFx0aWYgKCFuZXQpXFxuIDQ5NjpcXHRcXHRcXHRnb3RvIG91dF9mcmVlO1xcbiA0OTc6XFx0XFxuIDQ5ODpcXHQjaWZkZWYgQ09ORklHX0tFWVNcXG4gNDk5OlxcdFxcdG5ldC1cXHUwMDNla2V5X2RvbWFpbiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBrZXlfdGFnKTtcXG4gNTAwOlxcdFxcdGlmICghbmV0LVxcdTAwM2VrZXlfZG9tYWluKVxcbiA1MDE6XFx0XFx0XFx0Z290byBvdXRfZnJlZV8yO1xcbiA1MDI6XFx0XFx0cmVmY291bnRfc2V0KFxcdTAwMjZuZXQtXFx1MDAzZWtleV9kb21haW4tXFx1MDAzZXVzYWdlLCAxKTtcXG4gNTAzOlxcdCNlbmRpZlxcbiA1MDQ6XFx0XFxuIDUwNTpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIobmV0LVxcdTAwM2VnZW4sIG5nKTtcXG4gNTA2OlxcdG91dDpcXG4gNTA3OlxcdFxcdHJldHVybiBuZXQ7XFxuIDUwODpcXHRcXG4gNTA5OlxcdCNpZmRlZiBDT05GSUdfS0VZU1xcbiA1MTA6XFx0b3V0X2ZyZWVfMjpcXG4gNTExOlxcdFxcdGttZW1fY2FjaGVfZnJlZShuZXRfY2FjaGVwLCBuZXQpO1xcbiA1MTI6XFx0XFx0bmV0ID0gTlVMTDtcXG4gNTEzOlxcdCNlbmRpZlxcbiA1MTQ6XFx0b3V0X2ZyZWU6XFxuIDUxNTpcXHRcXHRrZnJlZShuZyk7XFxuIDUxNjpcXHRcXHRnb3RvIG91dDtcXG4gNTE3OlxcdH1cXG4gNTE4OlxcdFxcbiA1MTk6XFx0c3RhdGljIExMSVNUX0hFQUQoZGVmZXJfZnJlZV9saXN0KTtcXG4gNTIwOlxcdFxcbiA1MjE6XFx0c3RhdGljIHZvaWQgbmV0X2NvbXBsZXRlX2ZyZWUodm9pZClcXG4gNTIyOlxcdHtcXG4gNTIzOlxcdFxcdHN0cnVjdCBsbGlzdF9ub2RlICpraWxsX2xpc3Q7XFxuIDUyNDpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQsICpuZXh0O1xcbiA1MjU6XFx0XFxuIDUyNjpcXHRcXHQvKiBHZXQgdGhlIGxpc3Qgb2YgbmFtZXNwYWNlcyB0byBmcmVlIGZyb20gbGFzdCByb3VuZC4gKi9cXG4gNTI3OlxcdFxcdGtpbGxfbGlzdCA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNmRlZmVyX2ZyZWVfbGlzdCk7XFxuIDUyODpcXHRcXG4gNTI5OlxcdFxcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmV0LCBuZXh0LCBraWxsX2xpc3QsIGRlZmVyX2ZyZWVfbGlzdClcXG4gNTMwOlxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShuZXRfY2FjaGVwLCBuZXQpO1xcbiA1MzE6XFx0XFxuIDUzMjpcXHR9XFxuIDUzMzpcXHRcXG4gNTM0OlxcdHZvaWQgbmV0X3Bhc3NpdmVfZGVjKHN0cnVjdCBuZXQgKm5ldClcXG4gNTM1OlxcdHtcXG4gNTM2OlxcdFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNm5ldC1cXHUwMDNlcGFzc2l2ZSkpIHtcXG4gNTM3OlxcdFxcdFxcdGtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihuZXQtXFx1MDAzZWdlbikpO1xcbiA1Mzg6XFx0XFxuIDUzOTpcXHRcXHRcXHQvKiBUaGVyZSBzaG91bGQgbm90IGJlIGFueSB0cmFja2VycyBsZWZ0IHRoZXJlLiAqL1xcbiA1NDA6XFx0XFx0XFx0cmVmX3RyYWNrZXJfZGlyX2V4aXQoXFx1MDAyNm5ldC1cXHUwMDNlbm90cmVmY250X3RyYWNrZXIpO1xcbiA1NDE6XFx0XFxuIDU0MjpcXHRcXHRcXHQvKiBXYWl0IGZvciBhbiBleHRyYSByY3VfYmFycmllcigpIGJlZm9yZSBmaW5hbCBmcmVlLiAqL1xcbiA1NDM6XFx0XFx0XFx0bGxpc3RfYWRkKFxcdTAwMjZuZXQtXFx1MDAzZWRlZmVyX2ZyZWVfbGlzdCwgXFx1MDAyNmRlZmVyX2ZyZWVfbGlzdCk7XFxuIDU0NDpcXHRcXHR9XFxuIDU0NTpcXHR9XFxuIDU0NjpcXHRcXG4gNTQ3OlxcdHZvaWQgbmV0X2Ryb3BfbnMoc3RydWN0IG5zX2NvbW1vbiAqbnMpXFxuIDU0ODpcXHR7XFxuIDU0OTpcXHRcXHRpZiAobnMpXFxuIDU1MDpcXHRcXHRcXHRuZXRfcGFzc2l2ZV9kZWModG9fbmV0X25zKG5zKSk7XFxuIDU1MTpcXHR9XFxuIDU1MjpcXHRcXG4gNTUzOlxcdHN0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHU2NCBmbGFncyxcXG4gNTU0OlxcdFxcdFxcdFxcdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywgc3RydWN0IG5ldCAqb2xkX25ldClcXG4gNTU1OlxcdHtcXG4gNTU2OlxcdFxcdHN0cnVjdCB1Y291bnRzICp1Y291bnRzO1xcbiA1NTc6XFx0XFx0c3RydWN0IG5ldCAqbmV0O1xcbiA1NTg6XFx0XFx0aW50IHJ2O1xcbiA1NTk6XFx0XFxuIDU2MDpcXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IENMT05FX05FV05FVCkpXFxuIDU2MTpcXHRcXHRcXHRyZXR1cm4gZ2V0X25ldChvbGRfbmV0KTtcXG4gNTYyOlxcdFxcbiA1NjM6XFx0XFx0dWNvdW50cyA9IGluY19uZXRfbmFtZXNwYWNlcyh1c2VyX25zKTtcXG4gNTY0OlxcdFxcdGlmICghdWNvdW50cylcXG4gNTY1OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xcbiA1NjY6XFx0XFxuIDU2NzpcXHRcXHRuZXQgPSBuZXRfYWxsb2MoKTtcXG4gNTY4OlxcdFxcdGlmICghbmV0KSB7XFxuIDU2OTpcXHRcXHRcXHRydiA9IC1FTk9NRU07XFxuIDU3MDpcXHRcXHRcXHRnb3RvIGRlY191Y291bnRzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MjoyNy4zMzEyNjIyNjZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzMTQ1NTQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIE11c2luZ3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBjb3B5X25ldF9uc2AgZnVuY3Rpb24sIGFuZCBpdCdzIHdyYXBwZWQgaW4gYW4gYCNpZmRlZiBDT05GSUdfTkVUX05TYCBibG9jayBzdGFydGluZyB3YXkgYmFjayBvbiBsaW5lIDQ3MS4gVGhhdCdzIGNsZWFyIGVub3VnaDsgYENPTkZJR19ORVRfTlNgIGlzIGEgKnJlcXVpcmVtZW50KiBmb3IgdGhpcyBmdW5jdGlvbiB0byBldmVuIGV4aXN0IGluIHRoZSBjb21waWxlZCBjb2RlLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCBgcmVmX3RyYWNrZXJfZGlyX2V4aXRgIGFuZCB3aGV0aGVyIGl0IGlzIGdvaW5nIHRvIGRvIGFueXRoaW5nIHVzZWZ1bC4gQWgsIGJ1dCB0aGF0J3MgZ29pbmcgdG8gYmUgdXNlbGVzcyB1bmxlc3Mgd2UgaGF2ZSBgQ09ORklHX05FVF9OU19SRUZDTlRfVFJBQ0tFUmAgZGVmaW5lZC4gT3RoZXJ3aXNlLCBpdCBlbmRzIHVwIGJlaW5nIHRoaXMgZW1wdHkgaW5saW5lIGZ1bmN0aW9uLiBBbmQsIHNpbmNlIEknbSBjb25jZXJuZWQgYWJvdXQgdGhhdCBmdW5jdGlvbiwgbGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrLCBgcmVmX3RyYWNrZXJfZGlyX2V4aXRgIGlzIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvcmVmX3RyYWNrZXIuaGAuXG5cbkknZCBiZXR0ZXIgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgKnJpZ2h0KiBjb25maWcgc2VsZWN0ZWQuIEkgbmVlZCB0byBjb25maXJtIGBDT05GSUdfTkVUX05TX1JFRkNOVF9UUkFDS0VSYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3Qgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTIzMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjQyOjMxLjk2MjcyMDc5MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5NDI2NTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfTlNfUkVGQ05UX1RSQUNLRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjQyOjMyLjAxMTY3MTc3OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjIxMjg3NzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYE5FVF9OU19SRUZDTlRfVFJBQ0tFUmAgaW4gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHRyYWNrIGRvd24gYE5FVF9OU19SRUZDTlRfVFJBQ0tFUmAuIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBpdCdzIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIHJlZmVyZW5jZSBjb3VudCB0cmFja2luZywgbGlrZWx5IHdpdGhpbiBuZXR3b3JrIG5hbWVzcGFjZXMuIEknbGwgc3RhcnQgd2l0aCBhIHN0cmFpZ2h0Zm9yd2FyZCBzZWFyY2ggdGhyb3VnaCB0aGUgS2NvbmZpZyBmaWxlcy4gVGhpcyB3aWxsIGJlIHRoZSBmb3VuZGF0aW9uYWwgc3RhcnRpbmcgcG9pbnQuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0J3MgZW5hYmxlZCBieSBkZWZhdWx0LCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMsIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdC4gRnJvbSB0aGUgS2NvbmZpZyBjb250ZXh0LCBJIHNob3VsZCBnZXQgdGhlIGltbWVkaWF0ZSBjbHVlcyBhYm91dCB3aHkgaXQgZXhpc3RzIGFuZCB3aHkgc29tZW9uZSBtaWdodCB3YW50IHRvIHVzZSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MzYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MjozNS42MzI5NjI2MDFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODgyOTgxNzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9OU19SRUZDTlRfVFJBQ0tFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWcuZGVidWc9Mz1jb25maWcgTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUlxcbi0tXFxubmV0L0tjb25maWcuZGVidWctMTEtXFxubmV0L0tjb25maWcuZGVidWc6MTI6Y29uZmlnIE5FVF9OU19SRUZDTlRfVFJBQ0tFUlxcbm5ldC9LY29uZmlnLmRlYnVnLTEzLVxcdGJvb2wgXFxcIkVuYWJsZSBuZXR3b3JraW5nIG5hbWVzcGFjZSByZWZjb3VudCB0cmFja2luZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDI6MzcuMzIxMjY3MTUzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTk0NjczOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkRpZ2dpbmcgaW50byBOZXR3b3JrIE5hbWVzcGFjZXMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNlIGhvdyBuZXR3b3JrIG5hbWVzcGFjZSByZWZlcmVuY2UgY291bnRpbmcgaXMgaGFuZGxlZC4gSSBpbW1lZGlhdGVseSBzZWUgYE5FVF9OU19SRUZDTlRfVFJBQ0tFUmAgbWVudGlvbmVkLCB3aGljaCBpcyBsaWtlbHkgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbi4gQnV0IGhvbGQgb24sIGlzbid0IHRoZXJlIGFub3RoZXIgY29uZmlnIHJlbGF0ZWQgdG8gbmFtZXNwYWNlcywgc29tZXRoaW5nIGZ1bmRhbWVudGFsPyBBaCB5ZXMsIGBORVRfTlNgISBJdCdzIGdvdCB0byBiZS4gVGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aG9zZSB0d28uIExldCdzIHNlZSBob3cgYE5FVF9OU2AgaXMgZGVmaW5lZCBhbmQgd2hhdCBpdCBlbmFibGVzLCB3aGljaCB3aWxsIGdpdmUgY3J1Y2lhbCBjb250ZXh0IHRvIHVuZGVyc3RhbmQgYE5FVF9OU19SRUZDTlRfVFJBQ0tFUmAuIFRoaXMgbmVlZHMgdG8gYmUgdW5kZXJzdG9vZCBpZiBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIHdoaWNoIHBhcnRzIGFyZSBhY3R1YWxseSByZWxldmFudC4gSXQncyB0aW1lIHRvIGJ1aWxkIGEgc29saWQgZm91bmRhdGlvbiBiZWZvcmUgSSBsb29rIGF0IGFueXRoaW5nIGVsc2UhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTQyLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDI6NDAuNzgwNzM3MDM1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQxNjU0MzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfTlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xNDUyPWNvbmZpZyBQSURfTlNcXG4tLVxcbmluaXQvS2NvbmZpZy0xNDU5LVxcbmluaXQvS2NvbmZpZzoxNDYwOmNvbmZpZyBORVRfTlNcXG5pbml0L0tjb25maWctMTQ2MS1cXHRib29sIFxcXCJOZXR3b3JrIG5hbWVzcGFjZVxcXCJcXG4tLVxcbm5ldC9LY29uZmlnLmRlYnVnPTM9Y29uZmlnIE5FVF9ERVZfUkVGQ05UX1RSQUNLRVJcXG4tLVxcbm5ldC9LY29uZmlnLmRlYnVnLTExLVxcbm5ldC9LY29uZmlnLmRlYnVnOjEyOmNvbmZpZyBORVRfTlNfUkVGQ05UX1RSQUNLRVJcXG5uZXQvS2NvbmZpZy5kZWJ1Zy0xMy1cXHRib29sIFxcXCJFbmFibGUgbmV0d29ya2luZyBuYW1lc3BhY2UgcmVmY291bnQgdHJhY2tpbmdcXFwiXFxuLS1cXG5uZXQvbnNoL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbnNoL0tjb25maWc6MjptZW51Y29uZmlnIE5FVF9OU0hcXG5uZXQvbnNoL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBTZXJ2aWNlIEhlYWRlciAoTlNIKSBwcm90b2NvbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDI6NDIuNDIyMzk3NzI5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4OTM5NjIwMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBQbGFuIGZvciBOZXQgTmFtZXNwYWNlIFJlc291cmNlIExlYWsqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBORVRfTlNgIGFuZCBgTkVUX05TX1JFRkNOVF9UUkFDS0VSYC4gVGhlIGNvcmUgb2YgdGhlIGlzc3VlLCBhbmQgdGhlIGZ1bmN0aW9uIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBkaXJlY3RseSBhZGRyZXNzaW5nLCBpcyBgY29weV9uZXRfbnNgLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRvdWNoZWQgaGVyZT8gTm9wZSwgaXQncyBqdXN0IGBjb3B5X25ldF9uc2AuXG5cbkFscmlnaHQsIGlzIHRoaXMgZXZlbiB3b3J0aCB0aGUgZnV6emluZyBlZmZvcnQ/IEFic29sdXRlbHksIHllcy4gSXQncyBmaXhpbmcgYSBjb3JlIGtlcm5lbCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGEgcmVzb3VyY2UgbGVhay4gVGhlIGxlYWsgb2NjdXJzIHdoZW4gYHNldHVwX25ldGAgZmFpbHMsIGFuZCB0aGlzIHBhdGNoIGFpbXMgdG8gY2xlYW4gdGhhdCB1cC4gVGhlIGVycm9yIHBhdGggb2YgYGNvcHlfbmV0X25zYCwgdHJpZ2dlcmVkIHBvdGVudGlhbGx5IGJ5IGZhdWx0IGluamVjdGlvbiwgaXMgd2hlcmUgdGhpcyBwcm9ibGVtIHJlc2lkZXMuXG5cblNvLCBoZXJlJ3MgdGhlIHBsYW4sIGluIHNob3J0IGZvcm06XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBUcnVlLiBBYnNvbHV0ZWx5LlxuKiAgICoqRm9jdXNTeW1ib2xzKio6IGBjb3B5X25ldF9uc2AuIFRoYXQncyB0aGUgcHJpbWFyeSB0YXJnZXQuXG4qICAgKipFbmFibGVDb25maWdzKio6IGBORVRfTlNgIGFuZCBgTkVUX05TX1JFRkNOVF9UUkFDS0VSYC4gV2UgbmVlZCB0aGVzZSBlbmFibGVkIGZvciB0aGUgcmVsZXZhbnQgY29kZSB0byBldmVuIGJlIGFjdGl2ZS5cbiogICAqKlJlYXNvbmluZyoqOiBUaGlzIHBhdGNoIGlzIGEgZml4IGZvciBhIHJlc291cmNlIGxlYWsgKHNwZWNpZmljYWxseSB0aGUgcmVmY250X3RyYWNrZXIgYW5kIGl0cyBkZWJ1Z2ZzIGZpbGUpLiBUaGUgbGVhayBhcHBlYXJzIGluIHRoZSBlcnJvciBwYXRoIG9mIGBjb3B5X25ldF9uc2Agd2hlbiBgc2V0dXBfbmV0YCBpcyB1bmFibGUgdG8gY29tcGxldGUgaXRzIHNldHVwLiBGYXVsdCBpbmplY3Rpb24gd2hlbiBmdXp6aW5nIGBjb3B5X25ldF9uc2Agc2hvdWxkIHJldmVhbCB0aGUgZWZmaWNhY3kgb2YgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MTUsIk91dHB1dFRva2VucyI6MTA3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjQyOjQ4LjMxNjM2MTk4OVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NzgzODk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfTlNcIixcbiAgICBcIk5FVF9OU19SRUZDTlRfVFJBQ0tFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvcHlfbmV0X25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIChyZWZjbnRfdHJhY2tlciBhbmQgaXRzIGRlYnVnZnMgZmlsZSkgaW4gdGhlIGVycm9yIHBhdGggb2YgY29weV9uZXRfbnMoKSB3aGVuIHNldHVwX25ldCgpIGZhaWxzLiBGdXp6aW5nIGNvcHlfbmV0X25zIHdpdGggZmF1bHQgaW5qZWN0aW9uIGNhbiBoZWxwIHZlcmlmeSB0aGUgZml4LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9OU1wiLFxuICAgIFwiTkVUX05TX1JFRkNOVF9UUkFDS0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29weV9uZXRfbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJlc291cmNlIGxlYWsgKHJlZmNudF90cmFja2VyIGFuZCBpdHMgZGVidWdmcyBmaWxlKSBpbiB0aGUgZXJyb3IgcGF0aCBvZiBjb3B5X25ldF9ucygpIHdoZW4gc2V0dXBfbmV0KCkgZmFpbHMuIEZ1enppbmcgY29weV9uZXRfbnMgd2l0aCBmYXVsdCBpbmplY3Rpb24gY2FuIGhlbHAgdmVyaWZ5IHRoZSBmaXguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjQyOjQ4LjM4NDE1MTYwNFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MTU4ODU4OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0Mjo0OC4zODQ2MTQwMTVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA2MTU0MTkyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBtaXNzaW5nIGNhbGwgdG8gYHJlZl90cmFja2VyX2Rpcl9leGl0KClgIGluIHRoZSBlcnJvciBwYXRoIG9mIGBjb3B5X25ldF9ucygpYCB0byBwcmV2ZW50IGEgcmVzb3VyY2UgbGVhayAoc3BlY2lmaWNhbGx5LCBhIGRlYnVnZnMgZmlsZSBhbmQgcmVmY250X3RyYWNrZXIgcmVzb3VyY2VzKSB3aGVuIGBzZXR1cF9uZXQoKWAgZmFpbHMuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbm9yIGRvZXMgaXQgbW9kaWZ5IGFueSBkYXRhIHNlbnQgdG8gdXNlciBzcGFjZSBvciBhbHRlciBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFJlc291cmNlIGxlYWtzIGFuZCBtZW1vcnkgbGVha3MgYXJlIHR5cGljYWxseSBkZXRlY3RlZCBieSBLTUVNTEVBSywgd2hpbGUgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NTBmODJkZmIyMmU4OTNkODJiYzlhNjMwNjQyODkwYmUwMzdjZmIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMDU6NDE6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcbmluZGV4IGE5MWQyYjU4YWFkZGYuLjBjM2YxNjlkOWFmYmMgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcbisrKyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1xuQEAgLTU5MSw2ICs1OTEsMTAgQEAgc3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxuIFx0XHRrZXlfcmVtb3ZlX2RvbWFpbihuZXQtXHUwMDNla2V5X2RvbWFpbik7XG4gI2VuZGlmXG4gXHRcdHB1dF91c2VyX25zKHVzZXJfbnMpO1xuK1x0XHQvKiBzZXR1cF9uZXQoKSBmYWlsdXJlIGlzIG5vdCByb3V0ZWQgdGhyb3VnaCBfX3B1dF9uZXQoKSwgc28gdGhlXG4rXHRcdCAqIHJlZmNudF90cmFja2VyIChhbmQgaXRzIGRlYnVnZnMgZmlsZSkgaGFzIHRvIGJlIHJlbGVhc2VkIGhlcmUuXG4rXHRcdCAqL1xuK1x0XHRyZWZfdHJhY2tlcl9kaXJfZXhpdChcdTAwMjZuZXQtXHUwMDNlcmVmY250X3RyYWNrZXIpO1xuIFx0XHRuZXRfcGFzc2l2ZV9kZWMobmV0KTtcbiBkZWNfdWNvdW50czpcbiBcdFx0ZGVjX25ldF9uYW1lc3BhY2VzKHVjb3VudHMpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDI6NDguMzg0NjE0ODI0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjE1Mzk2MTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNgIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jYCwgd2hpY2ggYWRkcyBgcmVmX3RyYWNrZXJfZGlyX2V4aXQoXHUwMDI2bmV0LVx1MDAzZXJlZmNudF90cmFja2VyKTtgIHRvIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgY29weV9uZXRfbnMoKWAuICBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgcmVzb3VyY2UgY2xlYW51cCDigJMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhaywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGByZWZjbnRfdHJhY2tlcmAncyBkZWJ1Z2ZzIGZpbGUsIHdoZW4gYHNldHVwX25ldCgpYCBmYWlscy4gSXQgc2VlbXMgYSBiaXQgbGlrZSBhIHN0YW5kYXJkIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBhcHByb2FjaCwgd2hpY2ggaXMgZ29vZCB0byBzZWUuXG5cbk15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEJ1dCwgcmV2aWV3aW5nIHRoZSBjb2RlLCBpdCdzIGNsZWFyIHRoaXMgcGF0Y2ggc2ltcGx5ICpmcmVlcyogb3IgY2xlYW5zIHVwIGEgcmVzb3VyY2Ugd2l0aCBgcmVmX3RyYWNrZXJfZGlyX2V4aXQoKWAuIEl0J3MgYSBjbGVhbnVwLCBub3QgYW4gYWxsb2NhdGlvbiBvciB1c2FnZS4gVGhlcmUncyBubyBjcmVhdGlvbiBvZiBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgbWlnaHQgaGFyYm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgYW55IG1vZGlmaWNhdGlvbiBvZiBkYXRhIHRoYXQncyB0aGVuIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gIEl0J3MganVzdCByZWxlYXNpbmcgcmVzb3VyY2VzLCB0aGF0IGZhaWxlZCBkdXJpbmcgaW5pdGlhbCBzZXR1cC4gIFNvLCBubywgdGhpcyBkb2Vzbid0IHNlZW0gdG8gaW50cm9kdWNlIGFueSBLTVNBTiBpc3N1ZXMuXG5cbkkgcXVpY2tseSBkb3VibGUtY2hlY2tlZCBgcmVmX3RyYWNrZXJfZGlyX2V4aXRgIGl0c2VsZiB0byBjb25maXJtIG15IGluaXRpYWwgaW1wcmVzc2lvbjogaXQncyBhbGwgYWJvdXQgZnJlZWluZywgbm90IHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgbGVha2luZyBpdCB0byB1c2VyIHNwYWNlLiBUaGF0IHNvbGlkaWZpZXMgbXkgY29uY2x1c2lvbiB0aGF0IHRoaXMgcGF0Y2ggaXMgS01TQU4tc2FmZS4gV2UncmUgdGFsa2luZyBhYm91dCBwcmV2ZW50aW5nIGEgbGVhaywgbm90IGludHJvZHVjaW5nIGEgdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMgcmVhZCwgb3Igb3RoZXIgc2ltaWxhciBpc3N1ZSBLQVNBTiBhbmQgS01FTUxFQUsgYXJlIGRlc2lnbmVkIHRvIGhhbmRsZS5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2gncyBwdXJwb3NlIGlzIHRvIHByZXZlbnQgYSByZXNvdXJjZSBsZWFrLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlIHBhdGNoIGFkZHMgYSBtaXNzaW5nIGNhbGwgdG8gYHJlZl90cmFja2VyX2Rpcl9leGl0KClgIGluIHRoZSBlcnJvciBwYXRoIG9mIGBjb3B5X25ldF9ucygpYCB0byBwcmV2ZW50IGEgcmVzb3VyY2UgbGVhayB3aGVuIGBzZXR1cF9uZXQoKWAgZmFpbHMuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbm9yIGRvZXMgaXQgbW9kaWZ5IGFueSBkYXRhIHNlbnQgdG8gdXNlciBzcGFjZSBvciBhbHRlciBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFJlc291cmNlIGxlYWtzIGFuZCBtZW1vcnkgbGVha3MgYXJlIHR5cGljYWxseSBkZXRlY3RlZCBieSBLTUVNTEVBSywgd2hpbGUgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gQ29uc2VxdWVudGx5LCBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5IGZvciB0aGlzIHBhdGNoLiBJIHRoaW5rIHRoaXMgb25lJ3MgYSBjbGVhbiBcIk5lZWRzS01TQU46IGZhbHNlXCIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTYsIk91dHB1dFRva2VucyI6MTc5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDI6NTkuMDAwMDE0NDIyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBjYWxsIHRvIGByZWZfdHJhY2tlcl9kaXJfZXhpdCgpYCBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgY29weV9uZXRfbnMoKWAgdG8gcHJldmVudCBhIHJlc291cmNlIGxlYWsgKHNwZWNpZmljYWxseSwgYSBkZWJ1Z2ZzIGZpbGUgYW5kIHJlZmNudF90cmFja2VyIHJlc291cmNlcykgd2hlbiBgc2V0dXBfbmV0KClgIGZhaWxzLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IG1vZGlmeSBhbnkgZGF0YSBzZW50IHRvIHVzZXIgc3BhY2Ugb3IgYWx0ZXIgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBSZXNvdXJjZSBsZWFrcyBhbmQgbWVtb3J5IGxlYWtzIGFyZSB0eXBpY2FsbHkgZGV0ZWN0ZWQgYnkgS01FTUxFQUssIHdoaWxlIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYnVncyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgY2FsbCB0byBgcmVmX3RyYWNrZXJfZGlyX2V4aXQoKWAgaW4gdGhlIGVycm9yIHBhdGggb2YgYGNvcHlfbmV0X25zKClgIHRvIHByZXZlbnQgYSByZXNvdXJjZSBsZWFrIChzcGVjaWZpY2FsbHksIGEgZGVidWdmcyBmaWxlIGFuZCByZWZjbnRfdHJhY2tlciByZXNvdXJjZXMpIHdoZW4gYHNldHVwX25ldCgpYCBmYWlscy4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBub3IgZG9lcyBpdCBtb2RpZnkgYW55IGRhdGEgc2VudCB0byB1c2VyIHNwYWNlIG9yIGFsdGVyIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gUmVzb3VyY2UgbGVha3MgYW5kIG1lbW9yeSBsZWFrcyBhcmUgdHlwaWNhbGx5IGRldGVjdGVkIGJ5IEtNRU1MRUFLLCB3aGlsZSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGJ1Z3Mgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmx86t[1] Phase: Succeeded StartedAt: 2026-08-27 05:43:11 +0000 UTC FinishedAt: 2026-08-27 05:43:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmx86t[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-27 05:43:11 +0000 UTC FinishedAt: 2026-08-27 05:43:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmx86t[2] Phase: Succeeded StartedAt: 2026-08-27 05:43:11 +0000 UTC FinishedAt: 2026-08-27 09:22:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-27 05:43:11 +0000 UTC FinishedAt: 2026-08-27 09:22:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-27 05:43:11 +0000 UTC FinishedAt: 2026-08-27 05:43:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-27 05:43:11 +0000 UTC FinishedAt: 2026-08-27 05:43:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmx86t/series-workflowmx86t-convert-artifact-2691705671/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-27 05:43:21 +0000 UTC FinishedAt: 2026-08-27 05:59:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-27 05:43:21 +0000 UTC FinishedAt: 2026-08-27 05:59:24 +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:*99efeedb-d413-4ecd-a264-950945205384,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-workflowmx86t/series-workflowmx86t-convert-artifact-2691705671/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": "f1ad18ae-cd27-4750-b3e9-0262f7872cd1", "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-workflowmx86t/series-workflowmx86t-build-action-1880830941/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-27 05:43:21 +0000 UTC FinishedAt: 2026-08-27 05:59:14 +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:*99efeedb-d413-4ecd-a264-950945205384,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-workflowmx86t/series-workflowmx86t-convert-artifact-2691705671/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": "f1ad18ae-cd27-4750-b3e9-0262f7872cd1", "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-workflowmx86t/series-workflowmx86t-build-action-1880830941/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-27 05:59:24 +0000 UTC FinishedAt: 2026-08-27 05:59:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-27 05:59:24 +0000 UTC FinishedAt: 2026-08-27 05:59:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-27 05:59:24 +0000 UTC FinishedAt: 2026-08-27 05:59:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-27 05:59:24 +0000 UTC FinishedAt: 2026-08-27 05:59:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmx86t/series-workflowmx86t-convert-artifact-3186142070/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-27 05:59:34 +0000 UTC FinishedAt: 2026-08-27 06:01:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-27 05:59:34 +0000 UTC FinishedAt: 2026-08-27 06:01:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f1ad18ae-cd27-4750-b3e9-0262f7872cd1,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-workflowmx86t/series-workflowmx86t-build-action-1880830941/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-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-27 06:01:37 +0000 UTC FinishedAt: 2026-08-27 06:01:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-27 06:01:37 +0000 UTC FinishedAt: 2026-08-27 06:01:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-27 06:01:37 +0000 UTC FinishedAt: 2026-08-27 06:17:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-27 06:01:37 +0000 UTC FinishedAt: 2026-08-27 06:17:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*99efeedb-d413-4ecd-a264-950945205384,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-workflowmx86t/series-workflowmx86t-convert-artifact-3186142070/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": "af968b74-34c1-4d61-be26-5cf30849be4f", "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-workflowmx86t/series-workflowmx86t-build-action-377082490/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-27 06:01:37 +0000 UTC FinishedAt: 2026-08-27 06:17:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*99efeedb-d413-4ecd-a264-950945205384,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-workflowmx86t/series-workflowmx86t-convert-artifact-3186142070/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": "af968b74-34c1-4d61-be26-5cf30849be4f", "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-workflowmx86t/series-workflowmx86t-build-action-377082490/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-27 06:17:23 +0000 UTC FinishedAt: 2026-08-27 06:17:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-27 06:17:23 +0000 UTC FinishedAt: 2026-08-27 06:17:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-27 06:17:23 +0000 UTC FinishedAt: 2026-08-27 06:19:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-27 06:17:23 +0000 UTC FinishedAt: 2026-08-27 06:19:15 +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:*af968b74-34c1-4d61-be26-5cf30849be4f,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-workflowmx86t/series-workflowmx86t-build-action-377082490/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-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-27 06:19:25 +0000 UTC FinishedAt: 2026-08-27 09:22:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-27 06:19:25 +0000 UTC FinishedAt: 2026-08-27 09:22:26 +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":["copy_net_ns"],"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:*f1ad18ae-cd27-4750-b3e9-0262f7872cd1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*af968b74-34c1-4d61-be26-5cf30849be4f,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-workflowmx86t/series-workflowmx86t-build-action-1880830941/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-workflowmx86t/series-workflowmx86t-build-action-377082490/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-27 06:19:25 +0000 UTC FinishedAt: 2026-08-27 06:19:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-27 06:19:25 +0000 UTC FinishedAt: 2026-08-27 06:19:30 +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":["copy_net_ns"],"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-workflowmx86t/series-workflowmx86t-convert-artifact-335946139/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-27 06:19:25 +0000 UTC FinishedAt: 2026-08-27 06:19:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-27 06:19:25 +0000 UTC FinishedAt: 2026-08-27 06:19:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-27 06:19:25 +0000 UTC FinishedAt: 2026-08-27 06:19:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-27 06:19:35 +0000 UTC FinishedAt: 2026-08-27 09:22:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmx86t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2796ffe38cb4155afe0eab23636295b096c27a5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NET_NS_REFCNT_TRACKER"],"series_id":"88b7f5a3-4ecc-4029-a925-3b49a3976627","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-27 06:19:35 +0000 UTC FinishedAt: 2026-08-27 09:22:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f1ad18ae-cd27-4750-b3e9-0262f7872cd1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*af968b74-34c1-4d61-be26-5cf30849be4f,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-workflowmx86t/series-workflowmx86t-build-action-1880830941/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-workflowmx86t/series-workflowmx86t-build-action-377082490/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-workflowmx86t/series-workflowmx86t-convert-artifact-335946139/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,}