Name: series-workflowt6rwt Phase: Succeeded StartedAt: 2026-08-30 18:18:53 +0000 UTC FinishedAt: 2026-08-30 22:49:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6rwt[0] Phase: Succeeded StartedAt: 2026-08-30 18:18:53 +0000 UTC FinishedAt: 2026-08-30 19:06:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6rwt[0].run-triage Phase: Succeeded StartedAt: 2026-08-30 18:18:53 +0000 UTC FinishedAt: 2026-08-30 19:06:47 +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": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PACKET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PACKET" ], "series_id": "688c2f49-e60d-4410-9da0-8bdf7a1d0649" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "packet_sendmsg", "tpacket_snd", "packet_setsockopt" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBQ0tFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhY2tldF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3RwYWNrZXRfc25kJiMzNDssCiAgICAmIzM0O3BhY2tldF9zZXRzb2Nrb3B0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgc2lnbmVkbmVzcyBjb21wYXJpc29uIGlzc3VlIGluIGB0cGFja2V0X3BhcnNlX2hlYWRlcigpYCBieSBjaGFuZ2luZyBgdHBfbGVuYCBmcm9tIGBpbnRgIHRvIGB1MzJgLCBlbnN1cmluZyB0aGF0IGxhcmdlIHBhY2tldCBsZW5ndGggdmFsdWVzIGFyZSBwcm9wZXJseSB0cmVhdGVkIGFzIHVuc2lnbmVkIHdoZW4gdmFsaWRhdGVkIGFnYWluc3QgYHNpemVfbWF4YC5cblxuS01TQU4gaXMgbm90IG5lZWRlZCBiZWNhdXNlOlxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCwgcmVhZCwgb3IgZXhwb3NlZC4gVGhlIHZhcmlhYmxlIGB0cF9sZW5gIGlzIGV4cGxpY2l0bHkgYXNzaWduZWQgaW4gYWxsIGJyYW5jaGVzIG9mIHRoZSBgcG8tXHUwMDNldHBfdmVyc2lvbmAgc3dpdGNoIHN0YXRlbWVudCBiZWZvcmUgYW55IHJlYWRzLlxuMi4gVGhlIHBhdGNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLlxuMy4gQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGJ1Z3MgcmVsYXRlZCB0byBpbmNvcnJlY3QgbGVuZ3RoIGJvdW5kcyBjaGVja2luZyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBidWZmZXIgYWNjZXNzIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZykgYXJlIG91dC1vZi1ib3VuZHMgZXJyb3JzIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCBzaXplIHZhbGlkYXRpb24gaW4gdHBhY2tldF9wYXJzZV9oZWFkZXIoKSBieSBjaGFuZ2luZyB0cF9sZW4gZnJvbSBzaWduZWQgaW50IHRvIHUzMiwgcHJldmVudGluZyBzaWduZWQgaW50ZWdlciBjb21wYXJpc29uIGJ5cGFzc2VzIGR1cmluZyBBRl9QQUNLRVQgcmluZyBidWZmZXIgdHJhbnNtaXNzaW9uICh0cGFja2V0X3NuZCkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0d29ya2luZyBzb2NrZXQgbG9naWMgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTk6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjYjQ0YTM4MmIxMTVmNWVmOTk1ZjkyOTAzNTI1NDU3NDY2ZmY2Mzc3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMzAgMTk6MDQ6MTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcbmluZGV4IGIyMmNkYTMyMjEzNjMuLjc2YmRlNzkwNmQ0OTQgMTAwNjQ0XG4tLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXG5AQCAtMjY3NSw3ICYjNDM7MjY3NSw4IEBAIHN0YXRpYyBpbnQgdHBhY2tldF9wYXJzZV9oZWFkZXIoc3RydWN0IHBhY2tldF9zb2NrICpwbywgdm9pZCAqZnJhbWUsXG4gXHRcdFx0XHRpbnQgc2l6ZV9tYXgsIHZvaWQgKipkYXRhKVxuIHtcbiBcdHVuaW9uIHRwYWNrZXRfdWhkciBwaDtcbi1cdGludCB0cF9sZW4sIG9mZjtcbiYjNDM7XHR1MzIgdHBfbGVuO1xuJiM0MztcdGludCBvZmY7XG4gXG4gXHRwaC5yYXcgPSBmcmFtZTtcbiBcbkBAIC0yNjk1LDcgJiM0MzsyNjk2LDcgQEAgc3RhdGljIGludCB0cGFja2V0X3BhcnNlX2hlYWRlcihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCB2b2lkICpmcmFtZSxcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHRpZiAodW5saWtlbHkodHBfbGVuIFx1MDAzZSBzaXplX21heCkpIHtcbi1cdFx0cHJfZXJyKFwmIzM0O3BhY2tldCBzaXplIGlzIHRvbyBsb25nICglZCBcdTAwM2UgJWQpXFxuXCYjMzQ7LCB0cF9sZW4sIHNpemVfbWF4KTtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtwYWNrZXQgc2l6ZSBpcyB0b28gbG9uZyAoJXUgXHUwMDNlICVkKVxcblwmIzM0OywgdHBfbGVuLCBzaXplX21heCk7XG4gXHRcdHJldHVybiAtRU1TR1NJWkU7XG4gXHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTk6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFDS0VUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFja2V0X3NlbmRtc2cmIzM0OywKICAgICYjMzQ7dHBhY2tldF9zbmQmIzM0OywKICAgICYjMzQ7cGFja2V0X3NldHNvY2tvcHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHNpemUgdmFsaWRhdGlvbiBpbiB0cGFja2V0X3BhcnNlX2hlYWRlcigpIGJ5IGNoYW5naW5nIHRwX2xlbiBmcm9tIHNpZ25lZCBpbnQgdG8gdTMyLCBwcmV2ZW50aW5nIHNpZ25lZCBpbnRlZ2VyIGNvbXBhcmlzb24gYnlwYXNzZXMgZHVyaW5nIEFGX1BBQ0tFVCByaW5nIGJ1ZmZlciB0cmFuc21pc3Npb24gKHRwYWNrZXRfc25kKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBuZXR3b3JraW5nIHNvY2tldCBsb2dpYyBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNiNDRhMzgyYjExNWY1ZWY5OTVmOTI5MDM1MjU0NTc0NjZmZjYzNzcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAzMCAxOTowNDoxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCmluZGV4IGIyMmNkYTMyMjEzNjMuLjc2YmRlNzkwNmQ0OTQgMTAwNjQ0Ci0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwpAQCAtMjY3NSw3ICYjNDM7MjY3NSw4IEBAIHN0YXRpYyBpbnQgdHBhY2tldF9wYXJzZV9oZWFkZXIoc3RydWN0IHBhY2tldF9zb2NrICpwbywgdm9pZCAqZnJhbWUsCiAJCQkJaW50IHNpemVfbWF4LCB2b2lkICoqZGF0YSkKIHsKIAl1bmlvbiB0cGFja2V0X3VoZHIgcGg7Ci0JaW50IHRwX2xlbiwgb2ZmOwomIzQzOwl1MzIgdHBfbGVuOwomIzQzOwlpbnQgb2ZmOwogCiAJcGgucmF3ID0gZnJhbWU7CiAKQEAgLTI2OTUsNyAmIzQzOzI2OTYsNyBAQCBzdGF0aWMgaW50IHRwYWNrZXRfcGFyc2VfaGVhZGVyKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHZvaWQgKmZyYW1lLAogCQlicmVhazsKIAl9CiAJaWYgKHVubGlrZWx5KHRwX2xlbiAmZ3Q7IHNpemVfbWF4KSkgewotCQlwcl9lcnIoJiMzNDtwYWNrZXQgc2l6ZSBpcyB0b28gbG9uZyAoJWQgJmd0OyAlZClcbiYjMzQ7LCB0cF9sZW4sIHNpemVfbWF4KTsKJiM0MzsJCXByX2VycigmIzM0O3BhY2tldCBzaXplIGlzIHRvbyBsb25nICgldSAmZ3Q7ICVkKVxuJiMzNDssIHRwX2xlbiwgc2l6ZV9tYXgpOwogCQlyZXR1cm4gLUVNU0dTSVpFOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTkxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIFJldmlldyBmb3IgU3l6a2FsbGVyIEZ1enppbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZyBhcyBJIGxvb2sgYXQgdGhpcyBwYXRjaC4gRmlyc3QsIGl0IHNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQga2VybmVsIHBhdGNoIHJldmlldyBmb3Igc3l6a2FsbGVyIGZ1enppbmcgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBsaWtlbHkgYSBtYWludGVuYW5jZSBvciBRQSB0YXNrLCB3aGljaCBtZWFucyBpdCBzaG91bGQgYmUgcmVsYXRpdmVseSBzYWZlIHRvIGhhbmRsZS4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcGF0Y2ggZGlmZiBpdHNlbGYuIEkgc2VlIGEgY2hhbmdlIGluIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYC4gU3BlY2lmaWNhbGx5LCB0aGVyZSYjMzk7cyBhIG1vZGlmaWNhdGlvbiBhcm91bmQgbGluZSAyNjc1LiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoaXMgY29kZSBzbmlwcGV0OgoKYGBgZGlmZgpAQCAtMjY3NSw3ICYjNDM7MjY3NSw4IEBAIHN0YXRpYyBpbnQgdHBhY2tldF9wYXJzZV9oZWFkZXIoc3RydWN0IHBhY2tldF9zb2NrICpwbywgdm9pZCAqZnJhbWUsCiAJCQkJaW50IHNpemVfbWF4LCB2b2lkICoqZGF0YSkKIHsKIAl1bmlvbiB0cGFja2V0X3VoZHIgcGg7Ci0JaW50IHRwX2xlbiwgb2ZmOwomIzQzOwl1MzIgdHBfbGVuOwomIzQzOwlpbnQgb2ZmOwogCiAJcGgucmF3ID0gZnJhbWU7CiAKYGBgCgpJdCBzZWVtcyBsaWtlIHRoZXkmIzM5O3ZlIGNoYW5nZWQgdGhlIHR5cGUgb2YgYHRwX2xlbmAgZnJvbSBgaW50YCB0byBgdTMyYC4gVGhpcyBjb3VsZCBiZSBzaWduaWZpY2FudCwgYmVjYXVzZSB0aGUgY29kZSB0aGVuIGNoZWNrcyBgdHBfbGVuYCBhZ2FpbnN0IGBzaXplX21heGAuIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgY291bGQgaGF2ZSBhbiBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQgYnkgdXNpbmcgYW4gdW5zaWduZWQgaW50LgoKSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGluc3BlY3QgYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgIG5lYXIgdGhpcyBsaW5lLCBzbyBJIGNhbiBjb25maXJtIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNoYW5nZXMuIEkmIzM5O2xsIHVzZSBteSB1c3VhbCB0b29scyB0byBnYXRoZXIgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9hZl9wYWNrZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjY2NTpcdFxuMjY2NjpcdFx0aWYgKHVubGlrZWx5KCFza2ItXHUwMDNlbGVuKSlcbjI2Njc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yNjY4Olx0XG4yNjY5Olx0XHRwYWNrZXRfcGFyc2VfaGVhZGVycyhza2IsIHNvY2spO1xuMjY3MDpcdFxuMjY3MTpcdFx0cmV0dXJuIHRwX2xlbjtcbjI2NzI6XHR9XG4yNjczOlx0XG4yNjc0Olx0c3RhdGljIGludCB0cGFja2V0X3BhcnNlX2hlYWRlcihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCB2b2lkICpmcmFtZSxcbjI2NzU6XHRcdFx0XHRcdGludCBzaXplX21heCwgdm9pZCAqKmRhdGEpXG4yNjc2Olx0e1xuMjY3NzpcdFx0dW5pb24gdHBhY2tldF91aGRyIHBoO1xuMjY3ODpcdFx0dTMyIHRwX2xlbjtcbjI2Nzk6XHRcdGludCBvZmY7XG4yNjgwOlx0XG4yNjgxOlx0XHRwaC5yYXcgPSBmcmFtZTtcbjI2ODI6XHRcbjI2ODM6XHRcdHN3aXRjaCAocG8tXHUwMDNldHBfdmVyc2lvbikge1xuMjY4NDpcdFx0Y2FzZSBUUEFDS0VUX1YzOlxuMjY4NTpcdFx0XHRpZiAocGguaDMtXHUwMDNldHBfbmV4dF9vZmZzZXQgIT0gMCkge1xuMjY4NjpcdFx0XHRcdHByX3dhcm5fb25jZShcJiMzNDt2YXJpYWJsZSBzaXplZCBzbG90IG5vdCBzdXBwb3J0ZWRcJiMzNDspO1xuMjY4NzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjY4ODpcdFx0XHR9XG4yNjg5Olx0XHRcdHRwX2xlbiA9IHBoLmgzLVx1MDAzZXRwX2xlbjtcbjI2OTA6XHRcdFx0YnJlYWs7XG4yNjkxOlx0XHRjYXNlIFRQQUNLRVRfVjI6XG4yNjkyOlx0XHRcdHRwX2xlbiA9IHBoLmgyLVx1MDAzZXRwX2xlbjtcbjI2OTM6XHRcdFx0YnJlYWs7XG4yNjk0Olx0XHRkZWZhdWx0OlxuMjY5NTpcdFx0XHR0cF9sZW4gPSBwaC5oMS1cdTAwM2V0cF9sZW47XG4yNjk2Olx0XHRcdGJyZWFrO1xuMjY5NzpcdFx0fVxuMjY5ODpcdFx0aWYgKHVubGlrZWx5KHRwX2xlbiBcdTAwM2Ugc2l6ZV9tYXgpKSB7XG4yNjk5Olx0XHRcdHByX2VycihcJiMzNDtwYWNrZXQgc2l6ZSBpcyB0b28gbG9uZyAoJXUgXHUwMDNlICVkKVxcblwmIzM0OywgdHBfbGVuLCBzaXplX21heCk7XG4yNzAwOlx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4yNzAxOlx0XHR9XG4yNzAyOlx0XG4yNzAzOlx0XHRpZiAodW5saWtlbHkocGFja2V0X3NvY2tfZmxhZyhwbywgUEFDS0VUX1NPQ0tfVFhfSEFTX09GRikpKSB7XG4yNzA0Olx0XHRcdGludCBvZmZfbWluLCBvZmZfbWF4O1xuMjcwNTpcdFxuMjcwNjpcdFx0XHRvZmZfbWluID0gcG8tXHUwMDNldHBfaGRybGVuIC0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9sbCk7XG4yNzA3Olx0XHRcdG9mZl9tYXggPSBwby1cdTAwM2V0eF9yaW5nLmZyYW1lX3NpemUgLSB0cF9sZW47XG4yNzA4Olx0XHRcdGlmIChwby1cdTAwM2Vzay5za190eXBlID09IFNPQ0tfREdSQU0pIHtcbjI3MDk6XHRcdFx0XHRzd2l0Y2ggKHBvLVx1MDAzZXRwX3ZlcnNpb24pIHtcbjI3MTA6XHRcdFx0XHRjYXNlIFRQQUNLRVRfVjM6XG4yNzExOlx0XHRcdFx0XHRvZmYgPSBwaC5oMy1cdTAwM2V0cF9uZXQ7XG4yNzEyOlx0XHRcdFx0XHRicmVhaztcbjI3MTM6XHRcdFx0XHRjYXNlIFRQQUNLRVRfVjI6XG4yNzE0Olx0XHRcdFx0XHRvZmYgPSBwaC5oMi1cdTAwM2V0cF9uZXQ7XG4yNzE1Olx0XHRcdFx0XHRicmVhaztcbjI3MTY6XHRcdFx0XHRkZWZhdWx0OlxuMjcxNzpcdFx0XHRcdFx0b2ZmID0gcGguaDEtXHUwMDNldHBfbmV0O1xuMjcxODpcdFx0XHRcdFx0YnJlYWs7XG4yNzE5Olx0XHRcdFx0fVxuMjcyMDpcdFx0XHR9IGVsc2Uge1xuMjcyMTpcdFx0XHRcdHN3aXRjaCAocG8tXHUwMDNldHBfdmVyc2lvbikge1xuMjcyMjpcdFx0XHRcdGNhc2UgVFBBQ0tFVF9WMzpcbjI3MjM6XHRcdFx0XHRcdG9mZiA9IHBoLmgzLVx1MDAzZXRwX21hYztcbjI3MjQ6XHRcdFx0XHRcdGJyZWFrO1xuMjcyNTpcdFx0XHRcdGNhc2UgVFBBQ0tFVF9WMjpcbjI3MjY6XHRcdFx0XHRcdG9mZiA9IHBoLmgyLVx1MDAzZXRwX21hYztcbjI3Mjc6XHRcdFx0XHRcdGJyZWFrO1xuMjcyODpcdFx0XHRcdGRlZmF1bHQ6XG4yNzI5Olx0XHRcdFx0XHRvZmYgPSBwaC5oMS1cdTAwM2V0cF9tYWM7XG4yNzMwOlx0XHRcdFx0XHRicmVhaztcbjI3MzE6XHRcdFx0XHR9XG4yNzMyOlx0XHRcdH1cbjI3MzM6XHRcdFx0aWYgKHVubGlrZWx5KChvZmYgXHUwMDNjIG9mZl9taW4pIHx8IChvZmZfbWF4IFx1MDAzYyBvZmYpKSlcbjI3MzQ6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTk4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW50ZWdlciBPdmVyZmxvdyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBjaGFuZ2U6IGBpbnQgdHBfbGVuLCBvZmY7YCBoYXMgYmVlbiB1cGRhdGVkIHRvIGB1MzIgdHBfbGVuOyBpbnQgb2ZmO2AsIGFuZCB0aGUgYHByX2VycmAgZm9ybWF0IHN0cmluZyBpcyBub3cgdXNpbmcgYCV1YCBpbnN0ZWFkIG9mIGAlZGAuIFRoZSBgJXVgIHN1Z2dlc3RzIGFuIHVuc2lnbmVkIGludGVnZXIsIHdoaWNoIGlzIGEgZ29vZCBjbHVlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZS4KCkxldCYjMzk7cyB0cmFjZSBgdHBfbGVuYC4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBkZXJpdmVkIGZyb20gYHBoLmgzLSZndDt0cF9sZW5gLCBgcGguaDItJmd0O3RwX2xlbmAsIG9yIGBwaC5oMS0mZ3Q7dHBfbGVuYCwgYW5kIHRob3NlIGFyZSBhbGwgYHVuc2lnbmVkIGludGAgb3IgYF9fdTMyYC4gSG1tLCBhIG1pc21hdGNoLi4uCgpBaCwgSSBzZWUgdGhlIHByb2JsZW0uIEJlZm9yZSwgd2hlbiBgdHBfbGVuYCB3YXMgYSBzaWduZWQgYGludGAsIHVzZXIgc3BhY2UgY291bGQgcG90ZW50aWFsbHkgcGFzcyBhIGZyYW1lIHdoZXJlIGB0cF9sZW5gIHdhcyBsYXJnZXIgdGhhbiBgSU5UX01BWGAsIG9yIGV2ZW4gYSBuZWdhdGl2ZSB2YWx1ZSBhZnRlciB0aGUgY2FzdC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgb3ZlcmZsb3cgc2NlbmFyaW8hIFRoZSBzdWJzZXF1ZW50IGNoZWNrIGB0cF9sZW4gJmd0OyBzaXplX21heGAgd2FzIGEgKnNpZ25lZCogY29tcGFyaXNvbi4gU28gaWYgYHRwX2xlbmAgd2FzLCBzYXksIGAweDgwMDAwMDAwYCAod2hpY2ggcmVwcmVzZW50cyBhIG5lZ2F0aXZlIHNpZ25lZCBpbnRlZ2VyKSwgdGhlIGNvbXBhcmlzb24gd291bGQgZmFpbCBiZWNhdXNlIGl0JiMzOTtzIGxlc3MgdGhhbiBgc2l6ZV9tYXhgLiBUaGUgY2hlY2sgYHVubGlrZWx5KHRwX2xlbiAmZ3Q7IHNpemVfbWF4KWAgd291bGQgaW5jb3JyZWN0bHkgZXZhbHVhdGUgdG8gKmZhbHNlKiwgbGV0dGluZyBhIHBvdGVudGlhbGx5IG1hbGljaW91cyBwYWNrZXQgdGhyb3VnaC4KClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdnVsbmVyYWJsZSB0byBhbiBpbnRlZ2VyIG92ZXJmbG93IGFsbG93aW5nIGEgbWFsZm9ybWVkIHBhY2tldCB0byBieXBhc3MgYSBjcml0aWNhbCBzaXplIGNoZWNrLiBXZSYjMzk7ZCB0aGVuIHJ1biBvZmYgdGhlIGVuZCBvZiBtZW1vcnksIHJlYWRpbmcgYW5kIHdyaXRpbmcgd2hlcmV2ZXIgdGhlIHVzZXIgdG9sZCB1cy4gVGltZSB0byBjaGVjayB0aGUgY29kZSB0aGF0IGNvbWVzICphZnRlciogdGhhdCBmbGF3ZWQgY2hlY2suIEkgbmVlZCB0byBsb29rIGF0IGxpbmVzIDI3MzAtMjc2MCBpbiBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AgdG8gc2VlIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcyBpbnRlZ2VyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcGFja2V0L2FmX3BhY2tldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjczMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzMwOlx0XHRcdFx0XHRicmVhaztcbjI3MzE6XHRcdFx0XHR9XG4yNzMyOlx0XHRcdH1cbjI3MzM6XHRcdFx0aWYgKHVubGlrZWx5KChvZmYgXHUwMDNjIG9mZl9taW4pIHx8IChvZmZfbWF4IFx1MDAzYyBvZmYpKSlcbjI3MzQ6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI3MzU6XHRcdH0gZWxzZSB7XG4yNzM2Olx0XHRcdG9mZiA9IHBvLVx1MDAzZXRwX2hkcmxlbiAtIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpO1xuMjczNzpcdFx0fVxuMjczODpcdFxuMjczOTpcdFx0KmRhdGEgPSBmcmFtZSAmIzQzOyBvZmY7XG4yNzQwOlx0XHRyZXR1cm4gdHBfbGVuO1xuMjc0MTpcdH1cbjI3NDI6XHRcbjI3NDM6XHRzdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZylcbjI3NDQ6XHR7XG4yNzQ1Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbjI3NDY6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4yNzQ3Olx0XHRzdHJ1Y3QgdmlydGlvX25ldF9oZHIgdm5ldF9oZHI7XG4yNzQ4Olx0XHRib29sIGhhc192bmV0X2hkciA9IGZhbHNlO1xuMjc0OTpcdFx0c3RydWN0IHNvY2tjbV9jb29raWUgc29ja2M7XG4yNzUwOlx0XHRfX2JlMTYgcHJvdG87XG4yNzUxOlx0XHRpbnQgZXJyLCByZXNlcnZlID0gMDtcbjI3NTI6XHRcdHZvaWQgKnBoO1xuMjc1MzpcdFx0REVDTEFSRV9TT0NLQUREUihzdHJ1Y3Qgc29ja2FkZHJfbGwgKiwgc2FkZHIsIG1zZy1cdTAwM2Vtc2dfbmFtZSk7XG4yNzU0Olx0XHRib29sIG5lZWRfd2FpdCA9ICEobXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbjI3NTU6XHRcdGludCB2bmV0X2hkcl9zeiA9IFJFQURfT05DRShwby1cdTAwM2V2bmV0X2hkcl9zeik7XG4yNzU2Olx0XHR1bnNpZ25lZCBjaGFyICphZGRyID0gTlVMTDtcbjI3NTc6XHRcdGludCB0cF9sZW4sIHNpemVfbWF4O1xuMjc1ODpcdFx0dm9pZCAqZGF0YTtcbjI3NTk6XHRcdGludCBsZW5fc3VtID0gMDtcbjI3NjA6XHRcdGludCBzdGF0dXMgPSBUUF9TVEFUVVNfQVZBSUxBQkxFO1xuMjc2MTpcdFx0aW50IGhhcmRfaGVhZGVyX2xlbiwgaGxlbiwgdGxlbiwgY29weWxlbiA9IDA7XG4yNzYyOlx0XHRsb25nIHRpbWVvO1xuMjc2MzpcdFxuMjc2NDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZwby1cdTAwM2VwZ192ZWNfbG9jayk7XG4yNzY1Olx0XG4yNzY2Olx0XHQvKiBwYWNrZXRfc2VuZG1zZygpIGNoZWNrIG9uIHR4X3JpbmcucGdfdmVjIHdhcyBsb2NrbGVzcyxcbjI3Njc6XHRcdCAqIHdlIG5lZWQgdG8gY29uZmlybSBpdCB1bmRlciBwcm90ZWN0aW9uIG9mIHBnX3ZlY19sb2NrLlxuMjc2ODpcdFx0ICovXG4yNzY5Olx0XHRpZiAodW5saWtlbHkoIXBvLVx1MDAzZXR4X3JpbmcucGdfdmVjKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMzkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgUGFja2V0IFRyYW5zbWlzc2lvbiBhbmQgSGVhZGVyIFBhcnNpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHRoZXNlIHBhY2tldHMgYXJlIGdldHRpbmcgc2VudCwgYW5kIGB0cGFja2V0X3NuZGAgc2VlbXMgdG8gYmUgdGhlIGtleSBmdW5jdGlvbiBpbnZvbHZlZC4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcm9sZSBvZiBgdHBhY2tldF9wYXJzZV9oZWFkZXJgIHdpdGhpbiB0aGlzIGZsb3cuIFNpbmNlIGB0cGFja2V0X3NuZGAgY2FsbHMgaXQsIGl0JiMzOTtzIGNsZWFyIHRoZSBoZWFkZXIgcGFyc2luZyBpcyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwcm9jZXNzLiBJIG5lZWQgdG8gdHJhY2UgKndoZXJlKiB0aGlzIGB0cGFja2V0X3BhcnNlX2hlYWRlcmAgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdG8gZ3Jhc3AgdGhlIGZ1bGwgcGljdHVyZSBvZiB0aGUgdHJhbnNtaXNzaW9uIHBhdGh3YXkuIExldCYjMzk7cyBmaW5kIHRob3NlIGNhbGwgc2l0ZXMgYW5kIHNlZSB3aGF0IGNvbnRleHQgc3Vycm91bmRzIHRoZSBwYXJzaW5nIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RwYWNrZXRfcGFyc2VfaGVhZGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNTkwPXN0YXRpYyBpbnQgdHBhY2tldF9maWxsX3NrYihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjY3My1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjY3NDpzdGF0aWMgaW50IHRwYWNrZXRfcGFyc2VfaGVhZGVyKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHZvaWQgKmZyYW1lLFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNjc1LVx0XHRcdFx0aW50IHNpemVfbWF4LCB2b2lkICoqZGF0YSlcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI3NDM9c3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODQxLVx0XHRza2IgPSBOVUxMO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyODQyOlx0XHR0cF9sZW4gPSB0cGFja2V0X3BhcnNlX2hlYWRlcihwbywgcGgsIHNpemVfbWF4LCBcdTAwMjZkYXRhKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjg0My1cdFx0aWYgKHRwX2xlbiBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODA1CgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogNjk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmsgUGFja2V0IFBhcnNpbmcgQnVnIEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6ICphaGEhKiBgdHBhY2tldF9wYXJzZV9oZWFkZXJgIGlzIHJldHVybmluZyBgdHBfbGVuYCBhcyBhbiBgaW50YCwgYnV0IGludGVybmFsbHksIGB0cF9sZW5gIHdpdGhpbiB0aGF0IGZ1bmN0aW9uIGlzIGEgYHUzMmAuIFByZXZpb3VzbHksIHRoZSBjb21wYXJpc29uIGB0cF9sZW4gJmd0OyBzaXplX21heGAgd2FzIGEgKnNpZ25lZCogY29tcGFyaXNvbi4gTm93LCB3aXRoIHRoZSBgdTMyYCB0eXBlIGZvciBgdHBfbGVuYCwgaXQmIzM5O3MgYW4gKnVuc2lnbmVkKiBjb21wYXJpc29uLiBUaGlzIGlzIGdvb2QhIEFueSBsYXJnZSB1bnNpZ25lZCB2YWx1ZSAocHJldmlvdXNseSBieXBhc3NpbmcgY2hlY2tzIGR1ZSB0byBiZWluZyBzaWduZWQpIHdpbGwgbm93IGJlIGNvcnJlY3RseSBjYXVnaHQuIFRoaXMgZml4ZXMgYSBzaWduZWQgaW50ZWdlciBjb21wYXJpc29uIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkuIEV4Y2VsbGVudCwgdGhpcyBpcyBhIGxlZ2l0aW1hdGUgYnVnIGZpeCBpbiBwYWNrZXQgc29ja2V0IHBhY2tldCBwYXJzaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIFRYIHJpbmcgaGFuZGxpbmcuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgdGhpcyBXb3J0aEZ1enppbmc/IExldCYjMzk7cyBjaGVjayB0aGUgY3JpdGVyaWEuIE9rYXksIG5vIGRvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBsb2dnaW5nLCBvciBkZWNvcmF0aXZlIGNoYW5nZXMgaGVyZS4gTm90IGNvbnN0YW50cyB0aGF0IGRvbiYjMzk7dCBhZmZlY3QgZXhlY3V0aW9uLiBEZWZpbml0ZWx5IG5vdCB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgb3IgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgcmVxdWlyaW5nIGRlZGljYXRlZCBoYXJkd2FyZS4gQW5kIGl0JiMzOTtzIG5vdCBkcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzLiBUaGlzIHBhdGNoIGRpcmVjdGx5IG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgLCBpbiB0aGUgZnVuY3Rpb24gYHRwYWNrZXRfcGFyc2VfaGVhZGVyKClgLCB3aGljaCBpcyB1c2VkIGJ5IHRoZSBBRl9QQUNLRVQgcmluZyBidWZmZXIgcGFja2V0IHRyYW5zbWlzc2lvbiAoYHRwYWNrZXRfc25kYCkuIFRoaXMgaXMgKmNvcmUqIG5ldHdvcmtpbmcgY29kZSwgd2hpY2ggSSBrbm93IGlzIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIHN5c2NhbGxzIGxpa2UgYHNvY2tldChBRl9QQUNLRVQsIC4uLilgIGFuZCBgc2V0c29ja29wdCguLi4sIFBBQ0tFVF9UWF9SSU5HLCAuLi4pYCBhbmQgb2YgY291cnNlIGBzZW5kdG8oKWAvYHNlbmRtc2coKWAuIFNvLCB5ZXMsIFdvcnRoRnV6emluZyBpcyBkZWZpbml0aXZlbHkgYHRydWVgIQoKTm93LCBuZXh0IHN0ZXAsIEkgbmVlZCB0byBpZGVudGlmeSBpZiB0aGVyZSBhcmUgZm9jdXMgc3ltYm9scyB0aGF0IHdpbGwgYmUgdXNlZnVsIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZm9jdXNpbmcgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEkgd2lsbCBzdGFydCBieSBzZWFyY2hpbmcgYXJvdW5kIGBwYWNrZXRfc2VuZG1zZ2AsIGB0cGFja2V0X3NuZGAsIGFuZCBgcGFja2V0X2NyZWF0ZWAgaW4gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgIHRvIGlkZW50aWZ5IHRoZSBtb3N0IHN1aXRhYmxlIHN5bWJvbHMuIEkgYW0gZWFnZXIgdG8gZ2V0IHN0YXJ0ZWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyhwYWNrZXRfc2VuZG1zZ3x0cGFja2V0X3NuZHx0cGFja2V0X3BhcnNlX2hlYWRlcnxwYWNrZXRfcmVjdm1zZ3xwYWNrZXRfc2V0c29ja29wdCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcGFja2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcGFja2V0L2FmX3BhY2tldC5jPTE2OTM9c3RhdGljIGludCBmYW5vdXRfYWRkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGZhbm91dF9hcmdzICphcmdzKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTgwMi1cdFx0aWYgKHJlZmNvdW50X3JlYWQoXHUwMDI2bWF0Y2gtXHUwMDNlc2tfcmVmKSBcdTAwM2MgbWF0Y2gtXHUwMDNlbWF4X251bV9tZW1iZXJzKSB7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE4MDM6XHRcdFx0LyogUGFpcmVkIHdpdGggcGFja2V0X3NldHNvY2tvcHQoUEFDS0VUX0ZBTk9VVF9EQVRBKSAqL1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xODA0LVx0XHRcdFdSSVRFX09OQ0UocG8tXHUwMDNlZmFub3V0LCBtYXRjaCk7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xOTM4PXN0YXRpYyB2b2lkIHBhY2tldF9wYXJzZV9oZWFkZXJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xOTYyLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoxOTYzOnN0YXRpYyBpbnQgcGFja2V0X3NlbmRtc2dfc3BrdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE5NjQtXHRcdFx0ICAgICAgIHNpemVfdCBsZW4pXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMTM2PXN0YXRpYyBpbnQgcGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjIwOS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjIxMDpcdC8qIHNsbC1cdTAwM2VzbGxfZmFtaWx5IGFuZCBzbGwtXHUwMDNlc2xsX3Byb3RvY29sIGFyZSBzZXQgaW4gcGFja2V0X3JlY3Ztc2coKS5cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjIxMS1cdCAqIFVzZSB0aGVpciBzcGFjZSBmb3Igc3RvcmluZyB0aGUgb3JpZ2luYWwgc2tiIGxlbmd0aC5cbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI1OTA9c3RhdGljIGludCB0cGFja2V0X2ZpbGxfc2tiKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNjczLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNjc0OnN0YXRpYyBpbnQgdHBhY2tldF9wYXJzZV9oZWFkZXIoc3RydWN0IHBhY2tldF9zb2NrICpwbywgdm9pZCAqZnJhbWUsXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI2NzUtXHRcdFx0XHRpbnQgc2l6ZV9tYXgsIHZvaWQgKipkYXRhKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjc0Mi1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6Mjc0MzpzdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZylcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjc0NC17XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzY1LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNzY2Olx0LyogcGFja2V0X3NlbmRtc2coKSBjaGVjayBvbiB0eF9yaW5nLnBnX3ZlYyB3YXMgbG9ja2xlc3MsXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI3NjctXHQgKiB3ZSBuZWVkIHRvIGNvbmZpcm0gaXQgdW5kZXIgcHJvdGVjdGlvbiBvZiBwZ192ZWNfbG9jay5cbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4NDEtXHRcdHNrYiA9IE5VTEw7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI4NDI6XHRcdHRwX2xlbiA9IHRwYWNrZXRfcGFyc2VfaGVhZGVyKHBvLCBwaCwgc2l6ZV9tYXgsIFx1MDAyNmRhdGEpO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODQzLVx0XHRpZiAodHBfbGVuIFx1MDAzYyAwKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9Mjk3Mz1zdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEzMS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzEzMjpzdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEzMy17XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTM3LVx0LyogUmVhZGluZyB0eF9yaW5nLnBnX3ZlYyB3aXRob3V0IGhvbGRpbmcgcGdfdmVjX2xvY2sgaXMgcmFjeS5cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzEzODpcdCAqIHRwYWNrZXRfc25kKCkgd2lsbCByZWRvIHRoZSBjaGVjayBzYWZlbHkuXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMzktXHQgKi9cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzE0MC1cdGlmIChkYXRhX3JhY2UocG8tXHUwMDNldHhfcmluZy5wZ192ZWMpKVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMTQxOlx0XHRyZXR1cm4gdHBhY2tldF9zbmQocG8sIG1zZyk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxNDItXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0zMzY2PXN0YXRpYyBpbnQgcGFja2V0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTM0NDMtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjM0NDQ6c3RhdGljIGludCBwYWNrZXRfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTM0NDUtXHRcdFx0ICBpbnQgZmxhZ3MpXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0zODE0PXN0YXRpYyBpbnRcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzgxNTpwYWNrZXRfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zODE2LVx0XHQgIHVuc2lnbmVkIGludCBvcHRsZW4pXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz00NzUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHNfc3BrdCA9IHtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ3NjYtXHQuc2h1dGRvd24gPVx0c29ja19ub19zaHV0ZG93bixcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6NDc2NzpcdC5zZW5kbXNnID1cdHBhY2tldF9zZW5kbXNnX3Nwa3QsXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ3Njg6XHQucmVjdm1zZyA9XHRwYWNrZXRfcmVjdm1zZyxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDc2OS1cdC5tbWFwID1cdFx0c29ja19ub19tbWFwLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9NDc3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzID0ge1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDc4NS1cdC5zaHV0ZG93biA9XHRzb2NrX25vX3NodXRkb3duLFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0Nzg2Olx0LnNldHNvY2tvcHQgPVx0cGFja2V0X3NldHNvY2tvcHQsXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ3ODctXHQuZ2V0c29ja29wdF9pdGVyID1cdHBhY2tldF9nZXRzb2Nrb3B0LFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0Nzg4Olx0LnNlbmRtc2cgPVx0cGFja2V0X3NlbmRtc2csXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ3ODk6XHQucmVjdm1zZyA9XHRwYWNrZXRfcmVjdm1zZyxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDc5MC1cdC5tbWFwID1cdFx0cGFja2V0X21tYXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MTAKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYWNrZXQgU29ja2V0IEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaGFzIHRvIGJlIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucy4gSSBzZWUgYHRwYWNrZXRfc25kYCwgYHBhY2tldF9zZW5kbXNnYCwgYHBhY2tldF9zZXRzb2Nrb3B0YCwgYHBhY2tldF9tbWFwYCwgYW5kIGB0cGFja2V0X3BhcnNlX2hlYWRlcmAuIFJpZ2h0IGF3YXksIGB0cGFja2V0X3NuZGAgc3RhbmRzIG91dCBhcyBpdCYjMzk7cyBjYWxsZWQgYnkgYHBhY2tldF9zZW5kbXNnYCwgYW5kIGB0cGFja2V0X3BhcnNlX2hlYWRlcmAgaXMgY2FsbGVkIGJ5IGB0cGFja2V0X3NuZGAuIEkgd29uZGVyIGlmIGB0cGFja2V0X3NuZGAgaXMgaW5saW5lZCwgYnV0IGdpdmVuIGl0JiMzOTtzIGFyb3VuZCAyMDAgbGluZXMsIEkgaGlnaGx5IGRvdWJ0IGl0LiBgcGFja2V0X3NlbmRtc2dgIGlzIHRoZSBvcHMgaGFuZGxlciDigJMgc3BlY2lmaWNhbGx5IGBwYWNrZXRfb3BzLnNlbmRtc2dgLgoKTm93LCBJIG5lZWQgdG8gZGVjaWRlIGlmIGB0cGFja2V0X3NuZGAgb3IgYHBhY2tldF9zZW5kbXNnYCBhcmUgZ29vZCBjYW5kaWRhdGVzIGZvciBmdXJ0aGVyIGluc3BlY3Rpb24uIEJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIHRoZXkgdXN1YWxseSBhcmUsIHNvIGxldCYjMzk7cyBrZWVwIHRoZW0gaW4gbWluZCBhcyBwcmltYXJ5IGZvY3VzIGFyZWFzLiBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIHRoZSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBhbmQgcHJvdG9jb2wgb3BlcmF0aW9ucywgc3VjaCBhcyBgcGFja2V0X3NldHNvY2tvcHRgLgoKVG8gZ2V0IGEgYnJvYWRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBtb2R1bGUsIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIGBuZXQvcGFja2V0L2AuIFRoaXMgd2lsbCBnaXZlIG1lIGFuIG92ZXJ2aWV3IG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBzaG91bGQgYWxzbyBpbnZlc3RpZ2F0ZSB0aGUgTWFrZWZpbGUgd2l0aGluIGBuZXQvcGFja2V0L2AgYW5kIHRoZSBhc3NvY2lhdGVkIGBLY29uZmlnYCBmaWxlcyB3aXRoaW4gYG5ldC9gLCBvciBzcGVjaWZpY2FsbHkgYG5ldC9wYWNrZXQvS2NvbmZpZ2AuIFRoZXNlIHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0cyBpbnRvIGJ1aWxkIGRlcGVuZGVuY2llcyBhbmQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FmX3BhY2tldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9NTk0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfaGVhZCAqcHR5cGVfaGVhZChjb25zdCBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTU5Ni1cdGlmIChwdC1cdTAwM2V0eXBlID09IGh0b25zKEVUSF9QX0FMTCkpIHtcbm5ldC9jb3JlL2Rldi5jOjU5NzpcdFx0aWYgKCFwdC1cdTAwM2VhZl9wYWNrZXRfbmV0IFx1MDAyNlx1MDAyNiAhcHQtXHUwMDNlZGV2KVxubmV0L2NvcmUvZGV2LmMtNTk4LVx0XHRcdHJldHVybiBOVUxMO1xuLS1cbm5ldC9jb3JlL2Rldi5jLTYwMC1cdFx0cmV0dXJuIHB0LVx1MDAzZWRldiA/IFx1MDAyNnB0LVx1MDAzZWRldi1cdTAwM2VwdHlwZV9hbGwgOlxubmV0L2NvcmUvZGV2LmM6NjAxOlx0XHRcdFx0IFx1MDAyNnB0LVx1MDAzZWFmX3BhY2tldF9uZXQtXHUwMDNlcHR5cGVfYWxsO1xubmV0L2NvcmUvZGV2LmMtNjAyLVx0fVxuLS1cbm5ldC9jb3JlL2Rldi5jLTYwNi1cbm5ldC9jb3JlL2Rldi5jOjYwNzpcdHJldHVybiBwdC1cdTAwM2VhZl9wYWNrZXRfbmV0ID8gXHUwMDI2cHQtXHUwMDNlYWZfcGFja2V0X25ldC1cdTAwM2VwdHlwZV9zcGVjaWZpYyA6XG5uZXQvY29yZS9kZXYuYy02MDgtXHRcdFx0XHQgXHUwMDI2cHR5cGVfYmFzZVtudG9ocyhwdC1cdTAwM2V0eXBlKSBcdTAwMjYgUFRZUEVfSEFTSF9NQVNLXTtcbi0tXG5uZXQvY29yZS9kZXYuYz0yNTM5PXN0YXRpYyBpbmxpbmUgYm9vbCBza2JfbG9vcF9zayhzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvZGV2LmMtMjU0MC17XG5uZXQvY29yZS9kZXYuYzoyNTQxOlx0aWYgKCFwdHlwZS1cdTAwM2VhZl9wYWNrZXRfcHJpdiB8fCAhc2tiLVx1MDAzZXNrKVxubmV0L2NvcmUvZGV2LmMtMjU0Mi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm5ldC9jb3JlL2Rldi5jLTI1NDUtXHRcdHJldHVybiBwdHlwZS1cdTAwM2VpZF9tYXRjaChwdHlwZSwgc2tiLVx1MDAzZXNrKTtcbm5ldC9jb3JlL2Rldi5jOjI1NDY6XHRlbHNlIGlmICgoc3RydWN0IHNvY2sgKilwdHlwZS1cdTAwM2VhZl9wYWNrZXRfcHJpdiA9PSBza2ItXHUwMDNlc2spXG5uZXQvY29yZS9kZXYuYy0yNTQ3LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmM9MjI5PXN0YXRpYyB2b2lkICpwdHlwZV9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpXG4tLVxubmV0L2NvcmUvbmV0LXByb2Nmcy5jLTI2MC1cbm5ldC9jb3JlL25ldC1wcm9jZnMuYzoyNjE6XHRpZiAocHQtXHUwMDNlYWZfcGFja2V0X25ldCkge1xubmV0L2NvcmUvbmV0LXByb2Nmcy5jLTI2Mi1uZXRfcHR5cGVfYWxsOlxuLS1cbm5ldC9jb3JlL25ldC1wcm9jZnMuYz0yOTM9c3RhdGljIGludCBwdHlwZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbi0tXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmMtMzAzLVx0ZGV2ID0gaXRlci1cdTAwM2VkZXY7XG5uZXQvY29yZS9uZXQtcHJvY2ZzLmM6MzA0Olx0aWYgKCghcHQtXHUwMDNlYWZfcGFja2V0X25ldCB8fCBuZXRfZXEocHQtXHUwMDNlYWZfcGFja2V0X25ldCwgc2VxX2ZpbGVfbmV0KHNlcSkpKSBcdTAwMjZcdTAwMjZcbm5ldC9jb3JlL25ldC1wcm9jZnMuYy0zMDUtXHRcdCAoIWRldiB8fCBuZXRfZXEoZGV2X25ldChkZXYpLCBzZXFfZmlsZV9uZXQoc2VxKSkpKSB7XG4tLVxubmV0L2NvcmUvc2VsZnRlc3RzLmM9MTU5PXN0YXRpYyBpbnQgbmV0X3Rlc3RfbG9vcGJhY2tfdmFsaWRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9zZWxmdGVzdHMuYy0xNjMte1xubmV0L2NvcmUvc2VsZnRlc3RzLmM6MTY0Olx0c3RydWN0IG5ldF90ZXN0X3ByaXYgKnRwcml2ID0gcHQtXHUwMDNlYWZfcGFja2V0X3ByaXY7XG5uZXQvY29yZS9zZWxmdGVzdHMuYy0xNjUtXHRjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMgPSB0cHJpdi1cdTAwM2VwYWNrZXQtXHUwMDNlc3JjO1xuLS1cbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jPTIzMz1zdGF0aWMgaW50IF9fbmV0X3Rlc3RfbG9vcGJhY2soc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4tLVxubmV0L2NvcmUvc2VsZnRlc3RzLmMtMjQ5LVx0dHByaXYtXHUwMDNlcHQuZGV2ID0gbmRldjtcbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jOjI1MDpcdHRwcml2LVx1MDAzZXB0LmFmX3BhY2tldF9wcml2ID0gdHByaXY7XG5uZXQvY29yZS9zZWxmdGVzdHMuYy0yNTEtXHR0cHJpdi1cdTAwM2VwYWNrZXQgPSBhdHRyO1xuLS1cbm5ldC9wYWNrZXQvS2NvbmZpZz02PWNvbmZpZyBQQUNLRVRcbi0tXG5uZXQvcGFja2V0L0tjb25maWctMTQtXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxubmV0L3BhY2tldC9LY29uZmlnOjE1Olx0ICBiZSBjYWxsZWQgYWZfcGFja2V0LlxubmV0L3BhY2tldC9LY29uZmlnLTE2LVxuLS1cbm5ldC9wYWNrZXQvTWFrZWZpbGUtNS1cbm5ldC9wYWNrZXQvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfUEFDS0VUKSAmIzQzOz0gYWZfcGFja2V0Lm9cbm5ldC9wYWNrZXQvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfUEFDS0VUX0RJQUcpICYjNDM7PSBhZl9wYWNrZXRfZGlhZy5vXG5uZXQvcGFja2V0L01ha2VmaWxlOjg6YWZfcGFja2V0X2RpYWcteSAmIzQzOz0gZGlhZy5vXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xNDcxPXN0YXRpYyBpbnQgcGFja2V0X3Jjdl9mYW5vdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE0NzMte1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoxNDc0Olx0c3RydWN0IHBhY2tldF9mYW5vdXQgKmYgPSBwdC1cdTAwM2VhZl9wYWNrZXRfcHJpdjtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTQ3NS1cdHVuc2lnbmVkIGludCBudW0gPSBSRUFEX09OQ0UoZi1cdTAwM2VudW1fbWVtYmVycyk7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xNTYyPXN0YXRpYyBib29sIG1hdGNoX2Zhbm91dF9ncm91cChzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlLCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xNTY2LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoxNTY3Olx0cmV0dXJuIHB0eXBlLVx1MDAzZWFmX3BhY2tldF9wcml2ID09IHBrdF9zayhzayktXHUwMDNlZmFub3V0O1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xNTY4LX1cbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTE2OTM9c3RhdGljIGludCBmYW5vdXRfYWRkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGZhbm91dF9hcmdzICphcmdzKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTc4Ni1cdFx0bWF0Y2gtXHUwMDNlcHJvdF9ob29rLmZ1bmMgPSBwYWNrZXRfcmN2X2Zhbm91dDtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTc4NzpcdFx0bWF0Y2gtXHUwMDNlcHJvdF9ob29rLmFmX3BhY2tldF9wcml2ID0gbWF0Y2g7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE3ODg6XHRcdG1hdGNoLVx1MDAzZXByb3RfaG9vay5hZl9wYWNrZXRfbmV0ID0gcmVhZF9wbmV0KFx1MDAyNm1hdGNoLVx1MDAzZW5ldCk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE3ODktXHRcdG1hdGNoLVx1MDAzZXByb3RfaG9vay5pZF9tYXRjaCA9IG1hdGNoX2Zhbm91dF9ncm91cDtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTE4NzI9c3RhdGljIGludCBwYWNrZXRfcmN2X3Nwa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE4ODItXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE4ODM6XHRzayA9IHB0LVx1MDAzZWFmX3BhY2tldF9wcml2O1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xODg0LVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjEzNj1zdGF0aWMgaW50IHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIxNDktXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIxNTA6XHRzayA9IHB0LVx1MDAzZWFmX3BhY2tldF9wcml2O1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMTUxLVx0cG8gPSBwa3Rfc2soc2spO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjI0OT1zdGF0aWMgaW50IHRwYWNrZXRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMjc4LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMjc5Olx0c2sgPSBwdC1cdTAwM2VhZl9wYWNrZXRfcHJpdjtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjI4MC1cdHBvID0gcGt0X3NrKHNrKTtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTMzNjY9c3RhdGljIGludCBwYWNrZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzQxNy1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzQxODpcdHBvLVx1MDAzZXByb3RfaG9vay5hZl9wYWNrZXRfcHJpdiA9IHNrO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozNDE5Olx0cG8tXHUwMDNlcHJvdF9ob29rLmFmX3BhY2tldF9uZXQgPSBzb2NrX25ldChzayk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTM0MjAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjA0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2NvbmZpZyBEaXZlIGZvciBDT05GSUdfUEFDS0VUIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgbmV0L3BhY2tldC9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGRlcGVuZGVuY2llcyBvZiBgQ09ORklHX1BBQ0tFVGAuIEkmIzM5O20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgbmV0d29ya2luZyBzdGFjaywgc28gdGhpcyBzaG91bGRuJiMzOTt0IGJlIHRvbyBpbnZvbHZlZCwgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IHN1YnRsZSByZWxhdGlvbnNoaXBzIG9yIGltcGxpZWQgZnVuY3Rpb25hbGl0aWVzIGJlZm9yZSBtYWtpbmcgYSBkZWNpc2lvbiBvciByZXZpZXdpbmcgYSBwYXRjaCB0aGF0IHRvdWNoZXMgdGhpcyBhcmVhLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoaW5ncyBiZXlvbmQgdGhlIG9idmlvdXM6IGFyZSB0aGVyZSBhbnkgaW1wbGljaXQgZGVwZW5kZW5jaWVzIG9uIHNwZWNpZmljIGRldmljZSBkcml2ZXJzLCBvdGhlciBuZXR3b3JraW5nIHN1YnN5c3RlbXMsIG9yIGtlcm5lbCBmZWF0dXJlcyB0aGF0IGFyZW4mIzM5O3QgaW1tZWRpYXRlbHkgYXBwYXJlbnQ/IFRpbWUgdG8gZmlyZSB1cCB0aGUgZWRpdG9yIGFuZCBzdGFydCBzY2FubmluZyBmb3IgcmVsZXZhbnQgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMsIGBzZWxlY3RgIGRpcmVjdGl2ZXMsIG9yIGFueSBvdGhlciBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBJdCYjMzk7cyBhbGwgYWJvdXQgZW5zdXJpbmcgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBpcyBzb2xpZCBhbmQgdGhhdCBJIGhhdmUgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGFjdCBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlLiBJJiMzOTtsbCBhbHNvIGdsYW5jZSBvdmVyIGFueSBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBpZiBwcmVzZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFBhY2tldCBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBQQUNLRVRcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O1BhY2tldCBzb2NrZXRcJiMzNDtcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgVGhlIFBhY2tldCBwcm90b2NvbCBpcyB1c2VkIGJ5IGFwcGxpY2F0aW9ucyB3aGljaCBjb21tdW5pY2F0ZVxuICAxMDpcdFx0ICBkaXJlY3RseSB3aXRoIG5ldHdvcmsgZGV2aWNlcyB3aXRob3V0IGFuIGludGVybWVkaWF0ZSBuZXR3b3JrXG4gIDExOlx0XHQgIHByb3RvY29sIGltcGxlbWVudGVkIGluIHRoZSBrZXJuZWwsIGUuZy4gdGNwZHVtcC4gIElmIHlvdSB3YW50IHRoZW1cbiAgMTI6XHRcdCAgdG8gd29yaywgY2hvb3NlIFkuXG4gIDEzOlx0XG4gIDE0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuICAxNTpcdFx0ICBiZSBjYWxsZWQgYWZfcGFja2V0LlxuICAxNjpcdFxuICAxNzpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICAxODpcdFxuICAxOTpcdGNvbmZpZyBQQUNLRVRfRElBR1xuICAyMDpcdFx0dHJpc3RhdGUgXCYjMzQ7UGFja2V0OiBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4gIDIxOlx0XHRkZXBlbmRzIG9uIFBBQ0tFVFxuICAyMjpcdFx0ZGVmYXVsdCBuXG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFN1cHBvcnQgZm9yIFBGX1BBQ0tFVCBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXG4gIDI1Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzc5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhYnlyaW50aCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0aGlzIHN0cmFpZ2h0LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBQQUNLRVRgLiBUaGlzIHVzdWFsbHkgYm9pbHMgZG93biB0byBhIHF1aWNrIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gTXkgaW5zdGluY3Qgc2F5cyB0byBzdGFydCB3aXRoIGBuZXQvS2NvbmZpZ2AsIHRoYXQmIzM5O3MgZ2VuZXJhbGx5IHdoZXJlIHRoZXNlIG5ldHdvcmstcmVsYXRlZCBvcHRpb25zIGFyZSBkZWZpbmVkLiBJIHdhbnQgdG8gc2VlIGlmIGBQQUNLRVRgIGhhcyBhbnkgZGlyZWN0IHBhcmVudCBkZXBlbmRlbmNpZXMuIERvZXMgaXQgcmVseSBvbiBzb21lIG90aGVyIG9wdGlvbiBiZWluZyBlbmFibGVkIGZpcnN0PyBBbHRlcm5hdGl2ZWx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgUEFDS0VUYCBpcyBuZXN0bGVkIHdpdGhpbiB0aGUgYG1lbnVjb25maWcgTkVUYCBzdHJ1Y3R1cmUuIEtub3dpbmcgdGhlIGhpZXJhcmNoeSBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzIGFuZCB0aGUgdWx0aW1hdGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIGZlYXR1cmUuIFNvLCBgbmV0L0tjb25maWdgIGl0IGlzLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCB0aGUgS2NvbmZpZyBnb2RzIGhhdmUgb3JkYWluZWQgZm9yIHRoaXMgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb3VyY2UgXCYjMzQ7bmV0L3BhY2tldC9LY29uZmlnXCYjMzQ7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz04Mj1tZW51IFwmIzM0O05ldHdvcmtpbmcgb3B0aW9uc1wmIzM0O1xubmV0L0tjb25maWctODMtXG5uZXQvS2NvbmZpZzo4NDpzb3VyY2UgXCYjMzQ7bmV0L3BhY2tldC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy04NS1zb3VyY2UgXCYjMzQ7bmV0L3BzcC9LY29uZmlnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTAyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgYXJlYSB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBCYXNlZCBvbiB3aGF0IEkmIzM5O20gbG9va2luZyBhdCwgbXkgZ3V0IGZlZWxpbmcgdGVsbHMgbWUgdG8gY2hlY2sgdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDgwLiBJIHN1c3BlY3QgdGhlcmUmIzM5O3MgYSBzZXR0aW5nIG9yIGEgY29uZmlndXJhdGlvbiBvcHRpb24gaW4gdGhhdCBhcmVhIHRoYXQmIzM5O3MgcmVsZXZhbnQgdG8gd2hhdCBJJiMzOTttIGN1cnJlbnRseSBpbnZlc3RpZ2F0aW5nLiBJdOKAmXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhbmQgSSBoYXZlIGEgZmVlbGluZyB0aGUgYW5zd2VyIGxpZXMgaW4gdGhhdCB2aWNpbml0eSwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gcmFwaWRseSBwYXJzZSB0aGF0IHNlY3Rpb24sIGxvb2tpbmcgZm9yIHRoZSByaWdodCBrZXl3b3JkIG9yIHN0cnVjdHVyZSBpbiB0aGUgZGVmaW5pdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGZpbGUgdGVsbHMgdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDg1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBOZXR3b3JrIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBORVRcbiAgIDc6XHRcdGJvb2wgXCYjMzQ7TmV0d29ya2luZyBzdXBwb3J0XCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgTkxBVFRSXG4gICA5Olx0XHRzZWxlY3QgR0VORVJJQ19ORVRfVVRJTFNcbiAgMTA6XHRcdHNlbGVjdCBCUEZcbiAgMTE6XHRcdGhlbHBcbiAgMTI6XHRcdCAgVW5sZXNzIHlvdSByZWFsbHkga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcsIHlvdSBzaG91bGQgc2F5IFkgaGVyZS5cbiAgMTM6XHRcdCAgVGhlIHJlYXNvbiBpcyB0aGF0IHNvbWUgcHJvZ3JhbXMgbmVlZCBrZXJuZWwgbmV0d29ya2luZyBzdXBwb3J0IGV2ZW5cbiAgMTQ6XHRcdCAgd2hlbiBydW5uaW5nIG9uIGEgc3RhbmQtYWxvbmUgbWFjaGluZSB0aGF0IGlzbiYjMzk7dCBjb25uZWN0ZWQgdG8gYW55XG4gIDE1Olx0XHQgIG90aGVyIGNvbXB1dGVyLlxuICAxNjpcdFxuICAxNzpcdFx0ICBJZiB5b3UgYXJlIHVwZ3JhZGluZyBmcm9tIGFuIG9sZGVyIGtlcm5lbCwgeW91XG4gIDE4Olx0XHQgIHNob3VsZCBjb25zaWRlciB1cGRhdGluZyB5b3VyIG5ldHdvcmtpbmcgdG9vbHMgdG9vIGJlY2F1c2UgY2hhbmdlc1xuICAxOTpcdFx0ICBpbiB0aGUga2VybmVsIGFuZCB0aGUgdG9vbHMgb2Z0ZW4gZ28gaGFuZCBpbiBoYW5kLiBUaGUgdG9vbHMgYXJlXG4gIDIwOlx0XHQgIGNvbnRhaW5lZCBpbiB0aGUgcGFja2FnZSBuZXQtdG9vbHMsIHRoZSBsb2NhdGlvbiBhbmQgdmVyc2lvbiBudW1iZXJcbiAgMjE6XHRcdCAgb2Ygd2hpY2ggYXJlIGdpdmVuIGluIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9DaGFuZ2VzXHUwMDNlLlxuICAyMjpcdFxuICAyMzpcdFx0ICBGb3IgYSBnZW5lcmFsIGludHJvZHVjdGlvbiB0byBMaW51eCBuZXR3b3JraW5nLCBpdCBpcyBoaWdobHlcbiAgMjQ6XHRcdCAgcmVjb21tZW5kZWQgdG8gcmVhZCB0aGUgTkVULUhPV1RPLCBhdmFpbGFibGUgZnJvbVxuICAyNTpcdFx0ICBcdTAwM2NodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0b1x1MDAzZS5cbiAgMjY6XHRcbiAgMjc6XHRpZiBORVRcbiAgMjg6XHRcbiAgMjk6XHRjb25maWcgV0FOVF9DT01QQVRfTkVUTElOS19NRVNTQUdFU1xuICAzMDpcdFx0Ym9vbFxuICAzMTpcdFx0aGVscFxuICAzMjpcdFx0ICBUaGlzIG9wdGlvbiBjYW4gYmUgc2VsZWN0ZWQgYnkgb3RoZXIgb3B0aW9ucyB0aGF0IG5lZWQgY29tcGF0XG4gIDMzOlx0XHQgIG5ldGxpbmsgbWVzc2FnZXMuXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIENPTVBBVF9ORVRMSU5LX01FU1NBR0VTXG4gIDM2Olx0XHRkZWZfYm9vbCB5XG4gIDM3Olx0XHRkZXBlbmRzIG9uIENPTVBBVFxuICAzODpcdFx0ZGVwZW5kcyBvbiBXRVhUX0NPUkUgfHwgV0FOVF9DT01QQVRfTkVUTElOS19NRVNTQUdFU1xuICAzOTpcdFx0aGVscFxuICA0MDpcdFx0ICBUaGlzIG9wdGlvbiBtYWtlcyBpdCBwb3NzaWJsZSB0byBzZW5kIGRpZmZlcmVudCBuZXRsaW5rIG1lc3NhZ2VzXG4gIDQxOlx0XHQgIHRvIHRhc2tzIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSB0YXNrIGlzIGEgY29tcGF0IHRhc2sgb3Igbm90LiBUb1xuICA0MjpcdFx0ICBhY2hpZXZlIHRoaXMsIHlvdSBuZWVkIHRvIHNldCBza2Jfc2hpbmZvKHNrYiktXHUwMDNlZnJhZ19saXN0IHRvIHRoZVxuICA0MzpcdFx0ICBjb21wYXQgc2tiIGJlZm9yZSBzZW5kaW5nIHRoZSBza2IsIHRoZSBuZXRsaW5rIGNvZGUgd2lsbCBzb3J0IG91dFxuICA0NDpcdFx0ICB3aGljaCBtZXNzYWdlIHRvIGFjdHVhbGx5IHBhc3MgdG8gdGhlIHRhc2suXG4gIDQ1Olx0XG4gIDQ2Olx0XHQgIE5ld2x5IHdyaXR0ZW4gY29kZSBzaG91bGQgTkVWRVIgbmVlZCB0aGlzIG9wdGlvbiBidXQgZG9cbiAgNDc6XHRcdCAgY29tcGF0LWluZGVwZW5kZW50IG1lc3NhZ2VzIGluc3RlYWQhXG4gIDQ4Olx0XG4gIDQ5Olx0Y29uZmlnIE5FVF9JTkdSRVNTXG4gIDUwOlx0XHRib29sXG4gIDUxOlx0XG4gIDUyOlx0Y29uZmlnIE5FVF9FR1JFU1NcbiAgNTM6XHRcdGJvb2xcbiAgNTQ6XHRcbiAgNTU6XHRjb25maWcgTkVUX1hHUkVTU1xuICA1NjpcdFx0c2VsZWN0IE5FVF9JTkdSRVNTXG4gIDU3Olx0XHRzZWxlY3QgTkVUX0VHUkVTU1xuICA1ODpcdFx0Ym9vbFxuICA1OTpcdFxuICA2MDpcdGNvbmZpZyBORVRfUkVESVJFQ1RcbiAgNjE6XHRcdGJvb2xcbiAgNjI6XHRcbiAgNjM6XHRjb25maWcgU0tCX0RFQ1JZUFRFRFxuICA2NDpcdFx0Ym9vbFxuICA2NTpcdFxuICA2NjpcdGNvbmZpZyBTS0JfRVhURU5TSU9OU1xuICA2NzpcdFx0Ym9vbFxuICA2ODpcdFxuICA2OTpcdGNvbmZpZyBORVRfREVWTUVNXG4gIDcwOlx0XHRkZWZfYm9vbCB5XG4gIDcxOlx0XHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcbiAgNzI6XHRcdGRlcGVuZHMgb24gRE1BX1NIQVJFRF9CVUZGRVJcbiAgNzM6XHRcdGRlcGVuZHMgb24gUEFHRV9QT09MXG4gIDc0Olx0XG4gIDc1Olx0Y29uZmlnIE5FVF9TSEFQRVJcbiAgNzY6XHRcdGJvb2xcbiAgNzc6XHRcbiAgNzg6XHRjb25maWcgTkVUX0NSQzMyQ1xuICA3OTpcdFx0Ym9vbFxuICA4MDpcdFx0c2VsZWN0IENSQzMyXG4gIDgxOlx0XG4gIDgyOlx0bWVudSBcJiMzNDtOZXR3b3JraW5nIG9wdGlvbnNcJiMzNDtcbiAgODM6XHRcbiAgODQ6XHRzb3VyY2UgXCYjMzQ7bmV0L3BhY2tldC9LY29uZmlnXCYjMzQ7XG4gIDg1Olx0c291cmNlIFwmIzM0O25ldC9wc3AvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMwMgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgYWZfcGFja2V0LmNgIGZvciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyBgQ09ORklHX1BBQ0tFVGAgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBrbm9iIHRoYXQgY29tZXMgdG8gbWluZCwgYW5kIGl0JiMzOTtzIGNsZWFybHkgcmVsZXZhbnQgdG8gdGhlIHBhY2tldCBmdW5jdGlvbmFsaXR5LiBCdXQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCBmb3IgYW55IG90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIG9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIChgI2lmZGVmYCBibG9ja3MpLiBJIHdhbnQgdG8gaWRlbnRpZnkgYW55IHN1YnRsZSBkZXBlbmRlbmNpZXMgb3IgZmVhdHVyZSBmbGFncyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBob3cgcGFja2V0IHNvY2tldHMgYmVoYXZlLCBvciBjb3VsZCBleHBvc2Ugc29tZSBoaWRkZW4gY29uZmlndXJhdGlvbiBzcGFjZS4gR290dGEgY29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IG9mIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGluZmx1ZW5jaW5nIGJlaGF2aW9yIGluIHVuZXhwZWN0ZWQgd2F5cy4gQmVzdCB0byBkbyBhIHF1aWNrIGNvbXByZWhlbnNpdmUgY2hlY2sgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvYWZfcGFja2V0LmMtOTEtI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2Vcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6OTI6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTkzLSNpbmNsdWRlIFx1MDAzY25ldC9pbmV0X2NvbW1vbi5oXHUwMDNlXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNDU9c3RhdGljIHZvaWQgX19mYW5vdXRfbGluayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwYWNrZXRfc29jayAqcG8pO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNDYtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI0NzojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9FR1JFU1Ncbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjQ4LXN0YXRpYyBub2lubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqbmZfaG9va19kaXJlY3RfZWdyZXNzKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNzQ9c3RhdGljIGludCBwYWNrZXRfeG1pdChjb25zdCBzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjc4LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNzk6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfRUdSRVNTXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4MC1cdGlmIChuZl9ob29rX2VncmVzc19hY3RpdmUoKSkge1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MzEyPXN0YXRpYyB1MTYgcGFja2V0X3BpY2tfdHhfcXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxOC1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzE5OiNpZmRlZiBDT05GSUdfWFBTXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMyMC1cdHNrYi1cdTAwM2VzZW5kZXJfY3B1ID0gY3B1ICYjNDM7IDE7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz03Mzg9c3RhdGljIHZvaWQgcHJiX2ZsdXNoX2Jsb2NrKHN0cnVjdCB0cGFja2V0X2tiZHFfY29yZSAqcGtjMSxcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTc0Mi1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6NzQzOiNpZiBBUkNIX0lNUExFTUVOVFNfRkxVU0hfRENBQ0hFX1BBR0UgPT0gMVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy03NDQtXHR1OCAqc3RhcnQsICplbmQ7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy03NjMtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjc2NDojaWYgQVJDSF9JTVBMRU1FTlRTX0ZMVVNIX0RDQUNIRV9QQUdFID09IDFcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNzY1LVx0c3RhcnQgPSAodTggKilwYmQxO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjI0OT1zdGF0aWMgaW50IHRwYWNrZXRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNDg4LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNDg5OiNpZiBBUkNIX0lNUExFTUVOVFNfRkxVU0hfRENBQ0hFX1BBR0UgPT0gMVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNDkwLVx0aWYgKHBvLVx1MDAzZXRwX3ZlcnNpb24gXHUwMDNjPSBUUEFDS0VUX1YyKSB7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0zNDQ0PXN0YXRpYyBpbnQgcGFja2V0X3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzQ1Ni1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzQ1NzojaWYgMFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zNDU4LVx0LyogV2hhdCBlcnJvciBzaG91bGQgd2UgcmV0dXJuIG5vdz8gRVVOQVRUQUNIPyAqL1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9NDI3ND1zdGF0aWMgaW50IHBhY2tldF9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDI5Ny1cdH1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6NDI5ODojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDI5OS1cdGNhc2UgU0lPQ0FERFJUOlxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9NDc5OT1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBhY2tldF9uZXRkZXZfbm90aWZpZXIgPSB7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00ODAyLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0ODAzOiNpZmRlZiBDT05GSUdfUFJPQ19GU1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00ODA0LVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9NDg2MD1zdGF0aWMgaW50IF9fbmV0X2luaXQgcGFja2V0X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ4NjQtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ4NjU6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ4NjYtXHRpZiAoIXByb2NfY3JlYXRlX25ldChcJiMzNDtwYWNrZXRcJiMzNDssIDAsIG5ldC1cdTAwM2Vwcm9jX25ldCwgXHUwMDI2cGFja2V0X3NlcV9vcHMsXG4tLVxubmV0L3BhY2tldC9pbnRlcm5hbC5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbm5ldC9wYWNrZXQvaW50ZXJuYWwuaDoyOiNpZm5kZWYgX19QQUNLRVRfSU5URVJOQUxfSF9fXG5uZXQvcGFja2V0L2ludGVybmFsLmgtMy0jZGVmaW5lIF9fUEFDS0VUX0lOVEVSTkFMX0hfX1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDcxMQoJCQkJCQkJb3V0cHV0OiAxMTUKCQkJCQkJCXRob3VnaHRzOiA0NTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gaWRlbnRpZnkgcHJvbWlzaW5nIHRhcmdldHMgZm9yIGZ1enppbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBBRl9QQUNLRVRgIHNvY2tldCBmYW1pbHkuCgpGaXJzdCwgSSBleGFtaW5lZCB0aGUgYEZvY3VzU3ltYm9sc2AgLSBmdW5jdGlvbnMgdGhhdCBhcmUgbGlrZWx5IGNyaXRpY2FsIGZvciBwYWNrZXQgdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24uIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGB0cGFja2V0X3NuZGAsIGBwYWNrZXRfc2VuZG1zZ2AsIGFuZCBgcGFja2V0X3NldHNvY2tvcHRgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byBpbnZlc3RpZ2F0ZS4gSSB3ZW50IHRocm91Z2ggdGhlIGNvZGUgYW5kIGNvbmZpcm1lZCB0aGF0IHRoZXNlIGFyZSB0aGUgbW9zdCByZWxldmFudC4gSSBrbmV3IHRoYXQgdGhlIGZ1bmN0aW9ucyBpbiB0aGUgZmlsZSBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AgYXJlIG1vc3RseSBzdGF0aWMsIGFzIGlzIHR5cGljYWwgZm9yIG1vZHVsZS9wcm90b2NvbCBpbXBsZW1lbnRhdGlvbnMgcmVnaXN0ZXJpbmcgcHJvdG9fb3BzIGFuZCBuZXRfcHJvdG9fZmFtaWx5IHN0cnVjdHVyZXMuCgpOZXh0LCBJIHZlcmlmaWVkIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFRoZSBgUEFDS0VUYCBjb25maWcgaXMgZXNzZW50aWFsLCBhcyBpbmRpY2F0ZWQgYnkgYG9iai0kKENPTkZJR19QQUNLRVQpICYjNDM7PSBhZl9wYWNrZXQub2AuIFRoaXMgY29uZmlybXMgdGhlIGBBRl9QQUNLRVRgIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZC4KCkZpbmFsbHksIEkgcmV2aWV3ZWQgdGhlIGBSZWFzb25pbmdgLiBUaGUgY29tbWl0JiMzOTtzIGZpeCBmb3IgdGhlIGB0cGFja2V0X3BhcnNlX2hlYWRlcmAgc2lnbmVkL3Vuc2lnbmVkIGB0cF9sZW5gIGlzc3VlLCBhZmZlY3RpbmcgcmluZyBidWZmZXIgcGFja2V0IHRyYW5zbWlzc2lvbiwgaXMgdGhlIGNvcmUgb2YgdGhpcyB2dWxuZXJhYmlsaXR5LiBUaGlzIGhpZ2hsaWdodHMgYSBjcml0aWNhbCBhcmVhIG9mIGludGVyZXN0OiBhbnl0aGluZyBpbnRlcmFjdGluZyB3aXRoIHRoZSBgUEFDS0VUX1RYX1JJTkdgIGNvbmZpZ3VyYXRpb24uIE1hbGZvcm1lZCBwYWNrZXQgaGVhZGVycyBtaWdodCBieXBhc3MgY3J1Y2lhbCBib3VuZHMgY2hlY2tzLgoKQmVmb3JlIEkgY29tbWl0IHRvIHNldHRpbmcgdGhlIHJlc3VsdHMsIEkmIzM5O3ZlIGNvbmZpcm1lZCBldmVyeXRoaW5nLiBCYXNlZCBvbiBteSBhbmFseXNpcywgdGhlc2UgYXJlIHNvbGlkIGNhbmRpZGF0ZXMgZm9yIGZ1cnRoZXIgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBQ0tFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhY2tldF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3RwYWNrZXRfc25kJiMzNDssCiAgICAmIzM0O3BhY2tldF9zZXRzb2Nrb3B0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCBzaXplIHZhbGlkYXRpb24gaW4gdHBhY2tldF9wYXJzZV9oZWFkZXIoKSBieSBjaGFuZ2luZyB0cF9sZW4gZnJvbSBzaWduZWQgaW50IHRvIHUzMiwgcHJldmVudGluZyBzaWduZWQgaW50ZWdlciBjb21wYXJpc29uIGJ5cGFzc2VzIGR1cmluZyBBRl9QQUNLRVQgcmluZyBidWZmZXIgdHJhbnNtaXNzaW9uICh0cGFja2V0X3NuZCkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0d29ya2luZyBzb2NrZXQgbG9naWMgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBQ0tFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhY2tldF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3RwYWNrZXRfc25kJiMzNDssCiAgICAmIzM0O3BhY2tldF9zZXRzb2Nrb3B0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCBzaXplIHZhbGlkYXRpb24gaW4gdHBhY2tldF9wYXJzZV9oZWFkZXIoKSBieSBjaGFuZ2luZyB0cF9sZW4gZnJvbSBzaWduZWQgaW50IHRvIHUzMiwgcHJldmVudGluZyBzaWduZWQgaW50ZWdlciBjb21wYXJpc29uIGJ5cGFzc2VzIGR1cmluZyBBRl9QQUNLRVQgcmluZyBidWZmZXIgdHJhbnNtaXNzaW9uICh0cGFja2V0X3NuZCkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0d29ya2luZyBzb2NrZXQgbG9naWMgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTk6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBzaWduZWRuZXNzIGNvbXBhcmlzb24gaXNzdWUgaW4gYHRwYWNrZXRfcGFyc2VfaGVhZGVyKClgIGJ5IGNoYW5naW5nIGB0cF9sZW5gIGZyb20gYGludGAgdG8gYHUzMmAsIGVuc3VyaW5nIHRoYXQgbGFyZ2UgcGFja2V0IGxlbmd0aCB2YWx1ZXMgYXJlIHByb3Blcmx5IHRyZWF0ZWQgYXMgdW5zaWduZWQgd2hlbiB2YWxpZGF0ZWQgYWdhaW5zdCBgc2l6ZV9tYXhgLlxuXG5LTVNBTiBpcyBub3QgbmVlZGVkIGJlY2F1c2U6XG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkLCByZWFkLCBvciBleHBvc2VkLiBUaGUgdmFyaWFibGUgYHRwX2xlbmAgaXMgZXhwbGljaXRseSBhc3NpZ25lZCBpbiBhbGwgYnJhbmNoZXMgb2YgdGhlIGBwby1cdTAwM2V0cF92ZXJzaW9uYCBzd2l0Y2ggc3RhdGVtZW50IGJlZm9yZSBhbnkgcmVhZHMuXG4yLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UuXG4zLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgYnVncyByZWxhdGVkIHRvIGluY29ycmVjdCBsZW5ndGggYm91bmRzIGNoZWNraW5nIChlLmcuLCBvdXQtb2YtYm91bmRzIGJ1ZmZlciBhY2Nlc3MgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nKSBhcmUgb3V0LW9mLWJvdW5kcyBlcnJvcnMgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2I0NGEzODJiMTE1ZjVlZjk5NWY5MjkwMzUyNTQ1NzQ2NmZmNjM3NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDMwIDE5OjA0OjE2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKaW5kZXggYjIyY2RhMzIyMTM2My4uNzZiZGU3OTA2ZDQ5NCAxMDA2NDQKLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCkBAIC0yNjc1LDcgJiM0MzsyNjc1LDggQEAgc3RhdGljIGludCB0cGFja2V0X3BhcnNlX2hlYWRlcihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCB2b2lkICpmcmFtZSwKIAkJCQlpbnQgc2l6ZV9tYXgsIHZvaWQgKipkYXRhKQogewogCXVuaW9uIHRwYWNrZXRfdWhkciBwaDsKLQlpbnQgdHBfbGVuLCBvZmY7CiYjNDM7CXUzMiB0cF9sZW47CiYjNDM7CWludCBvZmY7CiAKIAlwaC5yYXcgPSBmcmFtZTsKIApAQCAtMjY5NSw3ICYjNDM7MjY5Niw3IEBAIHN0YXRpYyBpbnQgdHBhY2tldF9wYXJzZV9oZWFkZXIoc3RydWN0IHBhY2tldF9zb2NrICpwbywgdm9pZCAqZnJhbWUsCiAJCWJyZWFrOwogCX0KIAlpZiAodW5saWtlbHkodHBfbGVuICZndDsgc2l6ZV9tYXgpKSB7Ci0JCXByX2VycigmIzM0O3BhY2tldCBzaXplIGlzIHRvbyBsb25nICglZCAmZ3Q7ICVkKVxuJiMzNDssIHRwX2xlbiwgc2l6ZV9tYXgpOwomIzQzOwkJcHJfZXJyKCYjMzQ7cGFja2V0IHNpemUgaXMgdG9vIGxvbmcgKCV1ICZndDsgJWQpXG4mIzM0OywgdHBfbGVuLCBzaXplX21heCk7CiAJCXJldHVybiAtRU1TR1NJWkU7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTg4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBBRl9QQUNLRVQgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gdGhpcyBwYXRjaCBhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IGZvciB0aGUgYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgIGZpbGUg4oCTIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIEkgbmVlZCB0byBnZXQgdGhlIGNvbnRleHQgcmlnaHQgYXdheS4gSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIGFyb3VuZCBsaW5lIDI2NzUuIFRoYXQgc2hvdWxkIGJlIGEgY3JpdGljYWwgYXJlYSB0byBleGFtaW5lIGdpdmVuIHRoZSBuYXR1cmUgb2YgYGFmX3BhY2tldGAgYW5kIHRoZSBsaWtlbHkgZnVuY3Rpb24gY2FsbHMgYXJvdW5kIGl0LiBLbm93aW5nIHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY2hhbmdlcyBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzdWJzeXN0ZW0uIEkgYW50aWNpcGF0ZSBuZWVkaW5nIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSB3aXRoIHBhY2tldCBwcm9jZXNzaW5nLCBzb2NrZXQgb3B0aW9ucywgYW5kIGFueSBtZW1vcnkgbWFuYWdlbWVudCBhc3BlY3RzIGluIHRoYXQgdmljaW5pdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9hZl9wYWNrZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjY2MDpcdFx0XHR0b193cml0ZSAtPSBsZW47XG4yNjYxOlx0XHRcdG9mZnNldCA9IDA7XG4yNjYyOlx0XHRcdGxlbl9tYXggPSBQQUdFX1NJWkU7XG4yNjYzOlx0XHRcdGxlbiA9ICgodG9fd3JpdGUgXHUwMDNlIGxlbl9tYXgpID8gbGVuX21heCA6IHRvX3dyaXRlKTtcbjI2NjQ6XHRcdH1cbjI2NjU6XHRcbjI2NjY6XHRcdGlmICh1bmxpa2VseSghc2tiLVx1MDAzZWxlbikpXG4yNjY3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjY2ODpcdFxuMjY2OTpcdFx0cGFja2V0X3BhcnNlX2hlYWRlcnMoc2tiLCBzb2NrKTtcbjI2NzA6XHRcbjI2NzE6XHRcdHJldHVybiB0cF9sZW47XG4yNjcyOlx0fVxuMjY3MzpcdFxuMjY3NDpcdHN0YXRpYyBpbnQgdHBhY2tldF9wYXJzZV9oZWFkZXIoc3RydWN0IHBhY2tldF9zb2NrICpwbywgdm9pZCAqZnJhbWUsXG4yNjc1Olx0XHRcdFx0XHRpbnQgc2l6ZV9tYXgsIHZvaWQgKipkYXRhKVxuMjY3NjpcdHtcbjI2Nzc6XHRcdHVuaW9uIHRwYWNrZXRfdWhkciBwaDtcbjI2Nzg6XHRcdHUzMiB0cF9sZW47XG4yNjc5Olx0XHRpbnQgb2ZmO1xuMjY4MDpcdFxuMjY4MTpcdFx0cGgucmF3ID0gZnJhbWU7XG4yNjgyOlx0XG4yNjgzOlx0XHRzd2l0Y2ggKHBvLVx1MDAzZXRwX3ZlcnNpb24pIHtcbjI2ODQ6XHRcdGNhc2UgVFBBQ0tFVF9WMzpcbjI2ODU6XHRcdFx0aWYgKHBoLmgzLVx1MDAzZXRwX25leHRfb2Zmc2V0ICE9IDApIHtcbjI2ODY6XHRcdFx0XHRwcl93YXJuX29uY2UoXCYjMzQ7dmFyaWFibGUgc2l6ZWQgc2xvdCBub3Qgc3VwcG9ydGVkXCYjMzQ7KTtcbjI2ODc6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI2ODg6XHRcdFx0fVxuMjY4OTpcdFx0XHR0cF9sZW4gPSBwaC5oMy1cdTAwM2V0cF9sZW47XG4yNjkwOlx0XHRcdGJyZWFrO1xuMjY5MTpcdFx0Y2FzZSBUUEFDS0VUX1YyOlxuMjY5MjpcdFx0XHR0cF9sZW4gPSBwaC5oMi1cdTAwM2V0cF9sZW47XG4yNjkzOlx0XHRcdGJyZWFrO1xuMjY5NDpcdFx0ZGVmYXVsdDpcbjI2OTU6XHRcdFx0dHBfbGVuID0gcGguaDEtXHUwMDNldHBfbGVuO1xuMjY5NjpcdFx0XHRicmVhaztcbjI2OTc6XHRcdH1cbjI2OTg6XHRcdGlmICh1bmxpa2VseSh0cF9sZW4gXHUwMDNlIHNpemVfbWF4KSkge1xuMjY5OTpcdFx0XHRwcl9lcnIoXCYjMzQ7cGFja2V0IHNpemUgaXMgdG9vIGxvbmcgKCV1IFx1MDAzZSAlZClcXG5cJiMzNDssIHRwX2xlbiwgc2l6ZV9tYXgpO1xuMjcwMDpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuMjcwMTpcdFx0fVxuMjcwMjpcdFxuMjcwMzpcdFx0aWYgKHVubGlrZWx5KHBhY2tldF9zb2NrX2ZsYWcocG8sIFBBQ0tFVF9TT0NLX1RYX0hBU19PRkYpKSkge1xuMjcwNDpcdFx0XHRpbnQgb2ZmX21pbiwgb2ZmX21heDtcbjI3MDU6XHRcbjI3MDY6XHRcdFx0b2ZmX21pbiA9IHBvLVx1MDAzZXRwX2hkcmxlbiAtIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpO1xuMjcwNzpcdFx0XHRvZmZfbWF4ID0gcG8tXHUwMDNldHhfcmluZy5mcmFtZV9zaXplIC0gdHBfbGVuO1xuMjcwODpcdFx0XHRpZiAocG8tXHUwMDNlc2suc2tfdHlwZSA9PSBTT0NLX0RHUkFNKSB7XG4yNzA5Olx0XHRcdFx0c3dpdGNoIChwby1cdTAwM2V0cF92ZXJzaW9uKSB7XG4yNzEwOlx0XHRcdFx0Y2FzZSBUUEFDS0VUX1YzOlxuMjcxMTpcdFx0XHRcdFx0b2ZmID0gcGguaDMtXHUwMDNldHBfbmV0O1xuMjcxMjpcdFx0XHRcdFx0YnJlYWs7XG4yNzEzOlx0XHRcdFx0Y2FzZSBUUEFDS0VUX1YyOlxuMjcxNDpcdFx0XHRcdFx0b2ZmID0gcGguaDItXHUwMDNldHBfbmV0O1xuMjcxNTpcdFx0XHRcdFx0YnJlYWs7XG4yNzE2Olx0XHRcdFx0ZGVmYXVsdDpcbjI3MTc6XHRcdFx0XHRcdG9mZiA9IHBoLmgxLVx1MDAzZXRwX25ldDtcbjI3MTg6XHRcdFx0XHRcdGJyZWFrO1xuMjcxOTpcdFx0XHRcdH1cbjI3MjA6XHRcdFx0fSBlbHNlIHtcbjI3MjE6XHRcdFx0XHRzd2l0Y2ggKHBvLVx1MDAzZXRwX3ZlcnNpb24pIHtcbjI3MjI6XHRcdFx0XHRjYXNlIFRQQUNLRVRfVjM6XG4yNzIzOlx0XHRcdFx0XHRvZmYgPSBwaC5oMy1cdTAwM2V0cF9tYWM7XG4yNzI0Olx0XHRcdFx0XHRicmVhaztcbjI3MjU6XHRcdFx0XHRjYXNlIFRQQUNLRVRfVjI6XG4yNzI2Olx0XHRcdFx0XHRvZmYgPSBwaC5oMi1cdTAwM2V0cF9tYWM7XG4yNzI3Olx0XHRcdFx0XHRicmVhaztcbjI3Mjg6XHRcdFx0XHRkZWZhdWx0OlxuMjcyOTpcdFx0XHRcdFx0b2ZmID0gcGguaDEtXHUwMDNldHBfbWFjO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDU0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgdHBhY2tldF9wYXJzZV9oZWFkZXJgKioKCk9rYXksIHNvIEkmIzM5O20gYXQgdGhlIHBvaW50IHdoZXJlIEkgbmVlZCB0byByZWFsbHkgZGlnIGludG8gYHRwYWNrZXRfcGFyc2VfaGVhZGVyYC4gSSYjMzk7dmUgZ290IGEgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIGRhdGEgZmxvdywgYnV0IG5vdyBpdCYjMzk7cyB0aW1lIHRvIHVuZGVyc3RhbmQgdGhlIG5pdHR5LWdyaXR0eSBvZiAqaG93KiB0aGlzIGhlYWRlciBpcyBwYXJzZWQgYW5kLCBjcnVjaWFsbHksIGhvdyBpdCBnZXRzIGludGVncmF0ZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGlwZWxpbmUuIExldCYjMzk7cyB0cmFjZSBpdCBhbmQgZmlndXJlIG91dCB0aGUgY2FsbCBzaXRlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJiMzOTtzIHJlc3BvbnNpYmlsaXR5LCBhbmQgd2hhdCBkYXRhIGl0IHJlbGllcyBvbi4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyB0aGUgaGVhZGVyIGluZm9ybWF0aW9uIGlzIGV4dHJhY3RlZCwgdmFsaWRhdGVkIChpZiBhdCBhbGwhKSwgYW5kIGhhbmRlZCBvZmYuIEFyZSB0aGVyZSBhbnkgYXNzdW1wdGlvbnMgYmVpbmcgbWFkZSBhYm91dCB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGFkYXB0ZXIgb3IgbGluayBsYXllcj8gQXJlIHRoZXJlIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yIHZ1bG5lcmFiaWxpdGllcz8gVGltZSB0byBmaXJlIHVwIHRoZSBkZWJ1Z2dlciBhbmQgc3RhcnQgd2Fsa2luZyB0aGUgY29kZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYW55IGVycm9yIGhhbmRsaW5nIHBhdGhzIGFuZCBob3cgdGhvc2UgYXJlIG1hbmFnZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcGFja2V0L2FmX3BhY2tldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjczMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzMwOlx0XHRcdFx0XHRicmVhaztcbjI3MzE6XHRcdFx0XHR9XG4yNzMyOlx0XHRcdH1cbjI3MzM6XHRcdFx0aWYgKHVubGlrZWx5KChvZmYgXHUwMDNjIG9mZl9taW4pIHx8IChvZmZfbWF4IFx1MDAzYyBvZmYpKSlcbjI3MzQ6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI3MzU6XHRcdH0gZWxzZSB7XG4yNzM2Olx0XHRcdG9mZiA9IHBvLVx1MDAzZXRwX2hkcmxlbiAtIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpO1xuMjczNzpcdFx0fVxuMjczODpcdFxuMjczOTpcdFx0KmRhdGEgPSBmcmFtZSAmIzQzOyBvZmY7XG4yNzQwOlx0XHRyZXR1cm4gdHBfbGVuO1xuMjc0MTpcdH1cbjI3NDI6XHRcbjI3NDM6XHRzdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZylcbjI3NDQ6XHR7XG4yNzQ1Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbjI3NDY6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4yNzQ3Olx0XHRzdHJ1Y3QgdmlydGlvX25ldF9oZHIgdm5ldF9oZHI7XG4yNzQ4Olx0XHRib29sIGhhc192bmV0X2hkciA9IGZhbHNlO1xuMjc0OTpcdFx0c3RydWN0IHNvY2tjbV9jb29raWUgc29ja2M7XG4yNzUwOlx0XHRfX2JlMTYgcHJvdG87XG4yNzUxOlx0XHRpbnQgZXJyLCByZXNlcnZlID0gMDtcbjI3NTI6XHRcdHZvaWQgKnBoO1xuMjc1MzpcdFx0REVDTEFSRV9TT0NLQUREUihzdHJ1Y3Qgc29ja2FkZHJfbGwgKiwgc2FkZHIsIG1zZy1cdTAwM2Vtc2dfbmFtZSk7XG4yNzU0Olx0XHRib29sIG5lZWRfd2FpdCA9ICEobXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbjI3NTU6XHRcdGludCB2bmV0X2hkcl9zeiA9IFJFQURfT05DRShwby1cdTAwM2V2bmV0X2hkcl9zeik7XG4yNzU2Olx0XHR1bnNpZ25lZCBjaGFyICphZGRyID0gTlVMTDtcbjI3NTc6XHRcdGludCB0cF9sZW4sIHNpemVfbWF4O1xuMjc1ODpcdFx0dm9pZCAqZGF0YTtcbjI3NTk6XHRcdGludCBsZW5fc3VtID0gMDtcbjI3NjA6XHRcdGludCBzdGF0dXMgPSBUUF9TVEFUVVNfQVZBSUxBQkxFO1xuMjc2MTpcdFx0aW50IGhhcmRfaGVhZGVyX2xlbiwgaGxlbiwgdGxlbiwgY29weWxlbiA9IDA7XG4yNzYyOlx0XHRsb25nIHRpbWVvO1xuMjc2MzpcdFxuMjc2NDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZwby1cdTAwM2VwZ192ZWNfbG9jayk7XG4yNzY1Olx0XG4yNzY2Olx0XHQvKiBwYWNrZXRfc2VuZG1zZygpIGNoZWNrIG9uIHR4X3JpbmcucGdfdmVjIHdhcyBsb2NrbGVzcyxcbjI3Njc6XHRcdCAqIHdlIG5lZWQgdG8gY29uZmlybSBpdCB1bmRlciBwcm90ZWN0aW9uIG9mIHBnX3ZlY19sb2NrLlxuMjc2ODpcdFx0ICovXG4yNzY5Olx0XHRpZiAodW5saWtlbHkoIXBvLVx1MDAzZXR4X3JpbmcucGdfdmVjKSkge1xuMjc3MDpcdFx0XHRlcnIgPSAtRUJVU1k7XG4yNzcxOlx0XHRcdGdvdG8gb3V0O1xuMjc3MjpcdFx0fVxuMjc3MzpcdFx0aWYgKGxpa2VseShzYWRkciA9PSBOVUxMKSkge1xuMjc3NDpcdFx0XHRkZXZcdD0gcGFja2V0X2NhY2hlZF9kZXZfZ2V0KHBvKTtcbjI3NzU6XHRcdFx0cHJvdG9cdD0gUkVBRF9PTkNFKHBvLVx1MDAzZW51bSk7XG4yNzc2Olx0XHR9IGVsc2Uge1xuMjc3NzpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMjc3ODpcdFx0XHRpZiAobXNnLVx1MDAzZW1zZ19uYW1lbGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2xsKSlcbjI3Nzk6XHRcdFx0XHRnb3RvIG91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUwMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDUwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENoYW5nZSB0byBgdHBfbGVuYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZSBjaGFuZ2UuIE15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMgYXJvdW5kIHBvdGVudGlhbCBzaWduZWRuZXNzIGlzc3VlcywgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIHNpemVzIG9yIGxlbmd0aHMuIEl0IGxvb2tzIGxpa2UgYHRwX2xlbmAgd2FzIHByZXZpb3VzbHkgYW4gYGludGAsIGJ1dCBpdCYjMzk7cyBub3cgYmVpbmcgY2hhbmdlZCB0byBhIGB1MzJgIChvciB1bnNpZ25lZCBpbnRlZ2VyIHdpdGggMzIgYml0cykuIFRoZSBvbGQgY29kZSBjb21wYXJlZCBgdHBfbGVuYCB3aXRoIGBzaXplX21heGAsIHdoaWNoIGlzIHBhc3NlZCBhcyBhbiBgaW50YC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0LCBpZiBgdHBfbGVuYCB3YXMgYSBsYXJnZSwgJiMzNDtuZWdhdGl2ZSYjMzQ7IGBpbnRgIChlZmZlY3RpdmVseSBhIGxhcmdlIHVuc2lnbmVkIHZhbHVlKSwgdGhlIG9yaWdpbmFsIHNpZ25lZCBjb21wYXJpc29uIGNvdWxkIGhhdmUgaW5jb3JyZWN0bHkgZXZhbHVhdGVkIHRvIGZhbHNlIGlmIGBzaXplX21heGAgd2FzIHBvc2l0aXZlLiBUaGlzIHdvdWxkIGFsbG93IGEgbmVnYXRpdmUgYHRwX2xlbmAgdmFsdWUgdG8gc2xpcCB0aHJvdWdoLCBsZWFkaW5nIHRvIHNlcmlvdXMgcHJvYmxlbXMgbGF0ZXIgb24gd2hlbiB1c2VkIHRvIGRldGVybWluZSBidWZmZXIgc2l6ZXMuIFRoZSBmaXggYWRkcmVzc2VzIHRoaXMgYnkgZm9yY2luZyBhbiB1bnNpZ25lZCBjb21wYXJpc29uIChgdTMyYCB2cyBgaW50YCB0cmlnZ2VycyBwcm9tb3Rpb24gb2YgdGhlIHNpZ25lZCBgaW50YCB0byBgdW5zaWduZWQgaW50YCksIHNvIGxhcmdlIHZhbHVlcyBub3cgY29ycmVjdGx5IHRyaWdnZXIgdGhlIGJvdW5kcyBjaGVjay4gV2Ugd2FudCB0aGUgY29tcGFyaXNvbiB0byByZWplY3QgYW55IHZhbHVlIHRoYXQgY291bGQgYmUgcHJvYmxlbWF0aWMuCgpOb3csIEkgbmVlZCB0byB0aG9yb3VnaGx5IGFzc2VzcyBpZiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIEkgYWx3YXlzIGxvb2sgZm9yIHRoaXMhCgpMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duOgoKMS4gIElzIGB0cF9sZW5gIGl0c2VsZiB1bmluaXRpYWxpemVkIGJlZm9yZSB1c2U/IE5vLCBpdCYjMzk7cyBpbml0aWFsaXplZCBpbiBhbGwgdGhlIHN3aXRjaCBjYXNlcyAoYFRQQUNLRVRfVjNgLCBgVFBBQ0tFVF9WMmAsIGFuZCB0aGUgZGVmYXVsdCBjYXNlKSwgc28gdGhhdCBpcyBub3QgYSBjb25jZXJuLgoyLiAgRG9lcyB0aGlzIHBhdGNoICppbnRyb2R1Y2UqIGFueSBpbnN0YW5jZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlPyBJIG5lZWQgdG8gY2hlY2sga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBvciBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBpbml0aWFsaXplZCwgYnV0IEkgZG8gbm90IGJlbGlldmUgdGhpcyBpcyBhIGZhY3RvciBoZXJlLgozLiAgRG9lcyB0aGUgcGF0Y2ggaW50cm9kdWNlICphbnkqIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gVGhlIGxvZ2ljIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYW5kIGRvZXNuJiMzOTt0IHJlbHkgb24gdW5pbml0aWFsaXplZCBkYXRhLCBzbyBJJiMzOTttIG5vdCBzZWVpbmcgdGhhdC4KNC4gIEFyZSB0aGVyZSBhbnkgYWxsb2NhdGlvbnMgb3IgaW5pdGlhbGl6YXRpb25zIG9mIGNvbXBsZXggc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSBwcm9ibGVtYXRpYz8gTm8sIG5vdGhpbmcganVtcHMgb3V0IGF0IG1lLgo1LiAgQ291bGQgdGhlIGNoYW5nZSB0byBgdHBfbGVuYCBpbnRyb2R1Y2UgYW55IGJvdW5kcyBjaGVjayBmbGF3cyBvciBsZW5ndGggY2FsY3VsYXRpb25zLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM/IFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZyEKClRoZSBrZXkgaXMgdGhhdCBpZiBgdHBfbGVuYCAqd2FzKiBuZWdhdGl2ZSBiZWZvcmUsIHdvdWxkIGl0IGhhdmUgY2F1c2VkIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIG92ZXJmbG93IGluIHRoZSAqcGFja2V0IHRyYW5zbWlzc2lvbiogcGhhc2U/IEl0IGxvb2tzIGxpa2UgYHRwX2xlbmAgaXMgcmV0dXJuZWQgYnkgYHRwYWNrZXRfcGFyc2VfaGVhZGVyYCBhbmQgdXNlZCBpbiBgdHBhY2tldF9zbmRgLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGNhcmVmdWxseSBob3cgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGB0cGFja2V0X3BhcnNlX2hlYWRlcmAgaXMgaGFuZGxlZCBpbiBgdHBhY2tldF9zbmRgLiBJZiBgdHBfbGVuYCBpcyBsZXNzIHRoYW4gemVybywgYHRwYWNrZXRfc25kYCBkb2VzIHNlZW0gdG8gaGF2ZSBhIGNoZWNrLCBidXQgaXQgbmVlZHMgdG8gYmUgdmVyaWZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9hZl9wYWNrZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjgzMDpcdFx0XHRcdFx0dGltZW8gPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dChcdTAwMjZwby1cdTAwM2Vza2JfY29tcGxldGlvbiwgdGltZW8pO1xuMjgzMTpcdFx0XHRcdFx0aWYgKHRpbWVvIFx1MDAzYz0gMCkge1xuMjgzMjpcdFx0XHRcdFx0XHRlcnIgPSAhdGltZW8gPyAtRVRJTUVET1VUIDogLUVSRVNUQVJUU1lTO1xuMjgzMzpcdFx0XHRcdFx0XHRnb3RvIG91dF9wdXQ7XG4yODM0Olx0XHRcdFx0XHR9XG4yODM1Olx0XHRcdFx0XHQvKiBjaGVjayBmb3IgYWRkaXRpb25hbCBmcmFtZXMgKi9cbjI4MzY6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjgzNzpcdFx0XHRcdH0gZWxzZVxuMjgzODpcdFx0XHRcdFx0YnJlYWs7XG4yODM5Olx0XHRcdH1cbjI4NDA6XHRcbjI4NDE6XHRcdFx0c2tiID0gTlVMTDtcbjI4NDI6XHRcdFx0dHBfbGVuID0gdHBhY2tldF9wYXJzZV9oZWFkZXIocG8sIHBoLCBzaXplX21heCwgXHUwMDI2ZGF0YSk7XG4yODQzOlx0XHRcdGlmICh0cF9sZW4gXHUwMDNjIDApXG4yODQ0Olx0XHRcdFx0Z290byB0cGFja2V0X2Vycm9yO1xuMjg0NTpcdFxuMjg0NjpcdFx0XHRzdGF0dXMgPSBUUF9TVEFUVVNfU0VORF9SRVFVRVNUO1xuMjg0NzpcdFx0XHRobGVuID0gTExfUkVTRVJWRURfU1BBQ0VfRVgoZGV2LCBoYXJkX2hlYWRlcl9sZW4pO1xuMjg0ODpcdFx0XHR0bGVuID0gZGV2LVx1MDAzZW5lZWRlZF90YWlscm9vbTtcbjI4NDk6XHRcdFx0aWYgKHZuZXRfaGRyX3N6KSB7XG4yODUwOlx0XHRcdFx0ZGF0YSAmIzQzOz0gdm5ldF9oZHJfc3o7XG4yODUxOlx0XHRcdFx0dHBfbGVuIC09IHZuZXRfaGRyX3N6O1xuMjg1MjpcdFx0XHRcdGlmICh0cF9sZW4gXHUwMDNjIDApIHtcbjI4NTM6XHRcdFx0XHRcdHRwX2xlbiA9IC1FSU5WQUw7XG4yODU0Olx0XHRcdFx0XHRnb3RvIHRwYWNrZXRfZXJyb3I7XG4yODU1Olx0XHRcdFx0fVxuMjg1NjpcdFx0XHRcdG1lbWNweShcdTAwMjZ2bmV0X2hkciwgZGF0YSAtIHZuZXRfaGRyX3N6LCBzaXplb2Yodm5ldF9oZHIpKTtcbjI4NTc6XHRcdFx0XHRpZiAoX19wYWNrZXRfc25kX3ZuZXRfcGFyc2UoXHUwMDI2dm5ldF9oZHIsIHRwX2xlbikpIHtcbjI4NTg6XHRcdFx0XHRcdHRwX2xlbiA9IC1FSU5WQUw7XG4yODU5Olx0XHRcdFx0XHRnb3RvIHRwYWNrZXRfZXJyb3I7XG4yODYwOlx0XHRcdFx0fVxuMjg2MTpcdFx0XHRcdGNvcHlsZW4gPSBfX3ZpcnRpbzE2X3RvX2NwdSh2aW9fbGUoKSxcbjI4NjI6XHRcdFx0XHRcdFx0XHQgICAgdm5ldF9oZHIuaGRyX2xlbik7XG4yODYzOlx0XHRcdFx0aGFzX3ZuZXRfaGRyID0gdHJ1ZTtcbjI4NjQ6XHRcdFx0fVxuMjg2NTpcdFx0XHRjb3B5bGVuID0gbWF4X3QoaW50LCBjb3B5bGVuLCBoYXJkX2hlYWRlcl9sZW4pO1xuMjg2NjpcdFx0XHRza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKFx1MDAyNnBvLVx1MDAzZXNrLFxuMjg2NzpcdFx0XHRcdFx0aGxlbiAmIzQzOyB0bGVuICYjNDM7IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpICYjNDM7XG4yODY4Olx0XHRcdFx0XHQoY29weWxlbiAtIGhhcmRfaGVhZGVyX2xlbiksXG4yODY5Olx0XHRcdFx0XHQhbmVlZF93YWl0LCBcdTAwMjZlcnIpO1xuMjg3MDpcdFxuMjg3MTpcdFx0XHRpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKSB7XG4yODcyOlx0XHRcdFx0Lyogd2UgYXNzdW1lIHRoZSBzb2NrZXQgd2FzIGluaXRpYWxseSB3cml0ZWFibGUgLi4uICovXG4yODczOlx0XHRcdFx0aWYgKGxpa2VseShsZW5fc3VtIFx1MDAzZSAwKSlcbjI4NzQ6XHRcdFx0XHRcdGVyciA9IGxlbl9zdW07XG4yODc1Olx0XHRcdFx0Z290byBvdXRfc3RhdHVzO1xuMjg3NjpcdFx0XHR9XG4yODc3Olx0XHRcdHRwX2xlbiA9IHRwYWNrZXRfZmlsbF9za2IocG8sIHNrYiwgcGgsIGRldiwgZGF0YSwgdHBfbGVuLCBwcm90byxcbjI4Nzg6XHRcdFx0XHRcdFx0ICBhZGRyLCBobGVuLCBjb3B5bGVuLCBoYXJkX2hlYWRlcl9sZW4sXG4yODc5Olx0XHRcdFx0XHRcdCAgXHUwMDI2c29ja2MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDc2CgkJCQkJCQlvdXRwdXQ6IDIwOAoJCQkJCQkJdGhvdWdodHM6IDY5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2gmIzM5O3MgU2FuaXRpemVyIFJlcXVpcmVtZW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIGlzc3VlIGFuZCB0aGVuIGRldGVybWluZSBpZiBpdCBpbnRyb2R1Y2VzIGFueSBLTVNBTi1yZWxldmFudCBjb25jZXJucy4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyBpbiB0aGUgYHRwYWNrZXRfcGFyc2VfaGVhZGVyYCBmdW5jdGlvbiB3aGVyZSBhIHNpZ25lZG5lc3MgaXNzdWUgaW4gdGhlIGNvbXBhcmlzb24gb2YgYHRwX2xlbmAgYWxsb3dlZCBvdmVyc2l6ZWQgZnJhbWVzIHRvIGJ5cGFzcyBwcm9wZXIgdmFsaWRhdGlvbi4gU3BlY2lmaWNhbGx5LCBhIGxhcmdlIHVuc2lnbmVkIHZhbHVlIGZvciBgdHBfbGVuYCBjb3VsZCBiZSBtaXNpbnRlcnByZXRlZCBhcyBhIG5lZ2F0aXZlIGBpbnRgLCBsZWFkaW5nIHRvIGluY29ycmVjdCBsZW5ndGggY2hlY2tzLiBUaGlzIHBhdGNoIGNoYW5nZXMgYHRwX2xlbmAgZnJvbSBhbiBgaW50YCB0byBhIGB1MzJgIHRvIGVuc3VyZSBwcm9wZXIgY29tcGFyaXNvbiB3aXRoIGBzaXplX21heGAgYW5kIGNvcnJlY3QgcmVqZWN0aW9uIG9mIG92ZXJzaXplZCBmcmFtZXMuCgpNeSBwcmltYXJ5IGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBEb2VzIHRoaXMgY2hhbmdlIGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIHBvdGVudGlhbCBzdHJ1Y3QgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgY29waWVzIHRvIHVzZXJzcGFjZT8gTGV0JiMzOTtzIHZlcmlmeS4gVGhlIGxvZ2ljIHNob3dzIGB0cF9sZW5gIGlzIGRlcml2ZWQgZnJvbSBgcGguaDMtJmd0O3RwX2xlbmAsIGBwaC5oMi0mZ3Q7dHBfbGVuYCwgb3IgYHBoLmgxLSZndDt0cF9sZW5gIGFjcm9zcyBhbGwgY29udHJvbCBmbG93IHBhdGhzIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50LiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIHRoZXJlJiMzOTtzIG5vIGV2aWRlbmNlIG9mIGFueSBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MuIFRoZSBwcm9ibGVtIGlzIHB1cmVseSBhIHNpZ25lZCBpbnRlZ2VyIGNvbXBhcmlzb24vb3ZlcmZsb3cgYnVnIGluIGxlbmd0aCB2YWxpZGF0aW9uLiBNZW1vcnkgc2FmZXR5IGlzc3VlcyBzdGVtbWluZyBmcm9tIGluY29ycmVjdCBsZW5ndGggY2hlY2tzLCBzdWNoIGFzIGJ1ZmZlciBvdmVyZmxvd3Mgb3Igb3V0LW9mLWJvdW5kcyByZWFkcywgYXJlIGFscmVhZHkgYWRkcmVzc2VkIGJ5IEtBU0FOLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBLQVNBTiBhbmQgS01TQU4gYXJlIGNvcnJlY3RseSBhZGRyZXNzZWQuIEtBU0FOIGlzIHRoZSBrZXJuZWwgYWRkcmVzcyBzYW5pdGl6ZXIsIGFuZCBJIGtub3cgaXQgZGV0ZWN0cyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBkb3VibGUtZnJlZXMsIGFuZCBidWZmZXIgb3ZlcmZsb3dzLiBLTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGlzIHNwZWNpZmljYWxseSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGFuZCBpdCBkZXRlY3RzIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyBzdGVtbWluZyBmcm9tIHRoaXMuCgpTaW5jZSB0aGlzIHBhdGNoICpkb2VzbiYjMzk7dCogaW50cm9kdWNlIG9yIHV0aWxpemUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpdCBsb29rcyBsaWtlIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gVGhlIHBhdGNoIGZvY3VzZXMgb24gZml4aW5nIGEgc2lnbmVkbmVzcyBidWcsIGFuZCB0aGUgaW50ZWdlciBgdHBfbGVuYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4gS01TQU4gaXMgbm90IHRyaWdnZXJlZCwgYW5kIEtBU0FOIHNob3VsZCBoYW5kbGUgYW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIGR1ZSB0byBpbmNvcnJlY3QgbGVuZ3RoLgoKTGV0IG1lIGRvdWJsZS1jaGVjay4gVGhlIHBhdGNoIGZpeGVzIGEgc2lnbmVkbmVzcyBjb21wYXJpc29uIGJ1ZyBpbiBgdHBhY2tldF9wYXJzZV9oZWFkZXJgIGJ5IGNoYW5naW5nIGB0cF9sZW5gIGZyb20gYGludGAgdG8gYHUzMmAsIHdoaWNoIGVuc3VyZXMgdGhhdCBvdmVyc2l6ZWQgZnJhbWUgbGVuZ3RocyBhcmUgcHJvcGVybHkgcmVqZWN0ZWQgd2l0aCBgLUVNU0dTSVpFYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcy4gYHRwX2xlbmAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCBhY3Jvc3MgYWxsIGNvbnRyb2wgZmxvdyBicmFuY2hlcyBpbiBgdHBhY2tldF9wYXJzZV9oZWFkZXJgLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIG9yIHdyaXRlcyByZXN1bHRpbmcgZnJvbSBpbmNvcnJlY3QgbGVuZ3RoIG9yIG9mZnNldCB2YWxpZGF0aW9uIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLiBJdCYjMzk7cyBjbGVhci4KClRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIHNpZ25lZG5lc3MgY29tcGFyaXNvbiBpc3N1ZSBpbiBgdHBhY2tldF9wYXJzZV9oZWFkZXIoKWAgYnkgY2hhbmdpbmcgYHRwX2xlbmAgZnJvbSBgaW50YCB0byBgdTMyYCwgZW5zdXJpbmcgdGhhdCBsYXJnZSBwYWNrZXQgbGVuZ3RoIHZhbHVlcyBhcmUgcHJvcGVybHkgdHJlYXRlZCBhcyB1bnNpZ25lZCB3aGVuIHZhbGlkYXRlZCBhZ2FpbnN0IGBzaXplX21heGAuXG5cbktNU0FOIGlzIG5vdCBuZWVkZWQgYmVjYXVzZTpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQsIHJlYWQsIG9yIGV4cG9zZWQuIFRoZSB2YXJpYWJsZSBgdHBfbGVuYCBpcyBleHBsaWNpdGx5IGFzc2lnbmVkIGluIGFsbCBicmFuY2hlcyBvZiB0aGUgYHBvLVx1MDAzZXRwX3ZlcnNpb25gIHN3aXRjaCBzdGF0ZW1lbnQgYmVmb3JlIGFueSByZWFkcy5cbjIuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS5cbjMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBidWdzIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IGxlbmd0aCBib3VuZHMgY2hlY2tpbmcgKGUuZy4sIG91dC1vZi1ib3VuZHMgYnVmZmVyIGFjY2VzcyBkdXJpbmcgcGFja2V0IHByb2Nlc3NpbmcpIGFyZSBvdXQtb2YtYm91bmRzIGVycm9ycyBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgc2lnbmVkbmVzcyBjb21wYXJpc29uIGlzc3VlIGluIGB0cGFja2V0X3BhcnNlX2hlYWRlcigpYCBieSBjaGFuZ2luZyBgdHBfbGVuYCBmcm9tIGBpbnRgIHRvIGB1MzJgLCBlbnN1cmluZyB0aGF0IGxhcmdlIHBhY2tldCBsZW5ndGggdmFsdWVzIGFyZSBwcm9wZXJseSB0cmVhdGVkIGFzIHVuc2lnbmVkIHdoZW4gdmFsaWRhdGVkIGFnYWluc3QgYHNpemVfbWF4YC5cblxuS01TQU4gaXMgbm90IG5lZWRlZCBiZWNhdXNlOlxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCwgcmVhZCwgb3IgZXhwb3NlZC4gVGhlIHZhcmlhYmxlIGB0cF9sZW5gIGlzIGV4cGxpY2l0bHkgYXNzaWduZWQgaW4gYWxsIGJyYW5jaGVzIG9mIHRoZSBgcG8tXHUwMDNldHBfdmVyc2lvbmAgc3dpdGNoIHN0YXRlbWVudCBiZWZvcmUgYW55IHJlYWRzLlxuMi4gVGhlIHBhdGNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLlxuMy4gQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGJ1Z3MgcmVsYXRlZCB0byBpbmNvcnJlY3QgbGVuZ3RoIGJvdW5kcyBjaGVja2luZyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBidWZmZXIgYWNjZXNzIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZykgYXJlIG91dC1vZi1ib3VuZHMgZXJyb3JzIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE5OjA0OjE4LjUwNzUwNzE4N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTAxNjkzNDczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUNLRVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWNrZXRfc2VuZG1zZ1wiLFxuICAgIFwidHBhY2tldF9zbmRcIixcbiAgICBcInBhY2tldF9zZXRzb2Nrb3B0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBzaWduZWRuZXNzIGNvbXBhcmlzb24gaXNzdWUgaW4gYHRwYWNrZXRfcGFyc2VfaGVhZGVyKClgIGJ5IGNoYW5naW5nIGB0cF9sZW5gIGZyb20gYGludGAgdG8gYHUzMmAsIGVuc3VyaW5nIHRoYXQgbGFyZ2UgcGFja2V0IGxlbmd0aCB2YWx1ZXMgYXJlIHByb3Blcmx5IHRyZWF0ZWQgYXMgdW5zaWduZWQgd2hlbiB2YWxpZGF0ZWQgYWdhaW5zdCBgc2l6ZV9tYXhgLlxcblxcbktNU0FOIGlzIG5vdCBuZWVkZWQgYmVjYXVzZTpcXG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkLCByZWFkLCBvciBleHBvc2VkLiBUaGUgdmFyaWFibGUgYHRwX2xlbmAgaXMgZXhwbGljaXRseSBhc3NpZ25lZCBpbiBhbGwgYnJhbmNoZXMgb2YgdGhlIGBwby1cXHUwMDNldHBfdmVyc2lvbmAgc3dpdGNoIHN0YXRlbWVudCBiZWZvcmUgYW55IHJlYWRzLlxcbjIuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS5cXG4zLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgYnVncyByZWxhdGVkIHRvIGluY29ycmVjdCBsZW5ndGggYm91bmRzIGNoZWNraW5nIChlLmcuLCBvdXQtb2YtYm91bmRzIGJ1ZmZlciBhY2Nlc3MgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nKSBhcmUgb3V0LW9mLWJvdW5kcyBlcnJvcnMgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgc2l6ZSB2YWxpZGF0aW9uIGluIHRwYWNrZXRfcGFyc2VfaGVhZGVyKCkgYnkgY2hhbmdpbmcgdHBfbGVuIGZyb20gc2lnbmVkIGludCB0byB1MzIsIHByZXZlbnRpbmcgc2lnbmVkIGludGVnZXIgY29tcGFyaXNvbiBieXBhc3NlcyBkdXJpbmcgQUZfUEFDS0VUIHJpbmcgYnVmZmVyIHRyYW5zbWlzc2lvbiAodHBhY2tldF9zbmQpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgc29ja2V0IGxvZ2ljIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxOTowNDoxOC41MDc1MTIwNzdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTcxMDg3MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjYjQ0YTM4MmIxMTVmNWVmOTk1ZjkyOTAzNTI1NDU3NDY2ZmY2Mzc3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDMwIDE5OjA0OjE2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXFxuaW5kZXggYjIyY2RhMzIyMTM2My4uNzZiZGU3OTA2ZDQ5NCAxMDA2NDRcXG4tLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jXFxuKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xcbkBAIC0yNjc1LDcgKzI2NzUsOCBAQCBzdGF0aWMgaW50IHRwYWNrZXRfcGFyc2VfaGVhZGVyKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHZvaWQgKmZyYW1lLFxcbiBcXHRcXHRcXHRcXHRpbnQgc2l6ZV9tYXgsIHZvaWQgKipkYXRhKVxcbiB7XFxuIFxcdHVuaW9uIHRwYWNrZXRfdWhkciBwaDtcXG4tXFx0aW50IHRwX2xlbiwgb2ZmO1xcbitcXHR1MzIgdHBfbGVuO1xcbitcXHRpbnQgb2ZmO1xcbiBcXG4gXFx0cGgucmF3ID0gZnJhbWU7XFxuIFxcbkBAIC0yNjk1LDcgKzI2OTYsNyBAQCBzdGF0aWMgaW50IHRwYWNrZXRfcGFyc2VfaGVhZGVyKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHZvaWQgKmZyYW1lLFxcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXHRpZiAodW5saWtlbHkodHBfbGVuIFxcdTAwM2Ugc2l6ZV9tYXgpKSB7XFxuLVxcdFxcdHByX2VycihcXFwicGFja2V0IHNpemUgaXMgdG9vIGxvbmcgKCVkIFxcdTAwM2UgJWQpXFxcXG5cXFwiLCB0cF9sZW4sIHNpemVfbWF4KTtcXG4rXFx0XFx0cHJfZXJyKFxcXCJwYWNrZXQgc2l6ZSBpcyB0b28gbG9uZyAoJXUgXFx1MDAzZSAlZClcXFxcblxcXCIsIHRwX2xlbiwgc2l6ZV9tYXgpO1xcbiBcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxOTowNDoyMC4wNjU0ODA4NTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjY5MDA0ODkyMzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBQ0tFVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhY2tldF9zZW5kbXNnXCIsXG4gICAgXCJ0cGFja2V0X3NuZFwiLFxuICAgIFwicGFja2V0X3NldHNvY2tvcHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgc2l6ZSB2YWxpZGF0aW9uIGluIHRwYWNrZXRfcGFyc2VfaGVhZGVyKCkgYnkgY2hhbmdpbmcgdHBfbGVuIGZyb20gc2lnbmVkIGludCB0byB1MzIsIHByZXZlbnRpbmcgc2lnbmVkIGludGVnZXIgY29tcGFyaXNvbiBieXBhc3NlcyBkdXJpbmcgQUZfUEFDS0VUIHJpbmcgYnVmZmVyIHRyYW5zbWlzc2lvbiAodHBhY2tldF9zbmQpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgc29ja2V0IGxvZ2ljIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjYjQ0YTM4MmIxMTVmNWVmOTk1ZjkyOTAzNTI1NDU3NDY2ZmY2Mzc3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMzAgMTk6MDQ6MTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuaW5kZXggYjIyY2RhMzIyMTM2My4uNzZiZGU3OTA2ZDQ5NCAxMDA2NDRcbi0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcbisrKyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcbkBAIC0yNjc1LDcgKzI2NzUsOCBAQCBzdGF0aWMgaW50IHRwYWNrZXRfcGFyc2VfaGVhZGVyKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHZvaWQgKmZyYW1lLFxuIFx0XHRcdFx0aW50IHNpemVfbWF4LCB2b2lkICoqZGF0YSlcbiB7XG4gXHR1bmlvbiB0cGFja2V0X3VoZHIgcGg7XG4tXHRpbnQgdHBfbGVuLCBvZmY7XG4rXHR1MzIgdHBfbGVuO1xuK1x0aW50IG9mZjtcbiBcbiBcdHBoLnJhdyA9IGZyYW1lO1xuIFxuQEAgLTI2OTUsNyArMjY5Niw3IEBAIHN0YXRpYyBpbnQgdHBhY2tldF9wYXJzZV9oZWFkZXIoc3RydWN0IHBhY2tldF9zb2NrICpwbywgdm9pZCAqZnJhbWUsXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFx0aWYgKHVubGlrZWx5KHRwX2xlbiBcdTAwM2Ugc2l6ZV9tYXgpKSB7XG4tXHRcdHByX2VycihcInBhY2tldCBzaXplIGlzIHRvbyBsb25nICglZCBcdTAwM2UgJWQpXFxuXCIsIHRwX2xlbiwgc2l6ZV9tYXgpO1xuK1x0XHRwcl9lcnIoXCJwYWNrZXQgc2l6ZSBpcyB0b28gbG9uZyAoJXUgXHUwMDNlICVkKVxcblwiLCB0cF9sZW4sIHNpemVfbWF4KTtcbiBcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE5OjA0OjIwLjA2NTQ4MjYyMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2MDM1MDMyMzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIFJldmlldyBmb3IgU3l6a2FsbGVyIEZ1enppbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZyBhcyBJIGxvb2sgYXQgdGhpcyBwYXRjaC4gRmlyc3QsIGl0IHNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQga2VybmVsIHBhdGNoIHJldmlldyBmb3Igc3l6a2FsbGVyIGZ1enppbmcgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBsaWtlbHkgYSBtYWludGVuYW5jZSBvciBRQSB0YXNrLCB3aGljaCBtZWFucyBpdCBzaG91bGQgYmUgcmVsYXRpdmVseSBzYWZlIHRvIGhhbmRsZS5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIHBhdGNoIGRpZmYgaXRzZWxmLiBJIHNlZSBhIGNoYW5nZSBpbiBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AuIFNwZWNpZmljYWxseSwgdGhlcmUncyBhIG1vZGlmaWNhdGlvbiBhcm91bmQgbGluZSAyNjc1LiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoaXMgY29kZSBzbmlwcGV0OlxuXG5gYGBkaWZmXG5AQCAtMjY3NSw3ICsyNjc1LDggQEAgc3RhdGljIGludCB0cGFja2V0X3BhcnNlX2hlYWRlcihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCB2b2lkICpmcmFtZSxcbiBcdFx0XHRcdGludCBzaXplX21heCwgdm9pZCAqKmRhdGEpXG4ge1xuIFx0dW5pb24gdHBhY2tldF91aGRyIHBoO1xuLVx0aW50IHRwX2xlbiwgb2ZmO1xuK1x0dTMyIHRwX2xlbjtcbitcdGludCBvZmY7XG4gXG4gXHRwaC5yYXcgPSBmcmFtZTtcbiBcbmBgYFxuXG5JdCBzZWVtcyBsaWtlIHRoZXkndmUgY2hhbmdlZCB0aGUgdHlwZSBvZiBgdHBfbGVuYCBmcm9tIGBpbnRgIHRvIGB1MzJgLiBUaGlzIGNvdWxkIGJlIHNpZ25pZmljYW50LCBiZWNhdXNlIHRoZSBjb2RlIHRoZW4gY2hlY2tzIGB0cF9sZW5gIGFnYWluc3QgYHNpemVfbWF4YC4gSXQgbG9va3MgbGlrZSB0aGUgb3JpZ2luYWwgY29kZSBjb3VsZCBoYXZlIGFuIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZCBieSB1c2luZyBhbiB1bnNpZ25lZCBpbnQuXG5cbkknbSBnb2luZyB0byBxdWlja2x5IGluc3BlY3QgYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgIG5lYXIgdGhpcyBsaW5lLCBzbyBJIGNhbiBjb25maXJtIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNoYW5nZXMuIEknbGwgdXNlIG15IHVzdWFsIHRvb2xzIHRvIGdhdGhlciBtb3JlIGluZm9ybWF0aW9uIGFuZCBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxOTEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxOTowNDozNi4xMDA1MTY4MzdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTYxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3BhY2tldC9hZl9wYWNrZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjY1LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjY1OlxcdFxcbjI2NjY6XFx0XFx0aWYgKHVubGlrZWx5KCFza2ItXFx1MDAzZWxlbikpXFxuMjY2NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yNjY4OlxcdFxcbjI2Njk6XFx0XFx0cGFja2V0X3BhcnNlX2hlYWRlcnMoc2tiLCBzb2NrKTtcXG4yNjcwOlxcdFxcbjI2NzE6XFx0XFx0cmV0dXJuIHRwX2xlbjtcXG4yNjcyOlxcdH1cXG4yNjczOlxcdFxcbjI2NzQ6XFx0c3RhdGljIGludCB0cGFja2V0X3BhcnNlX2hlYWRlcihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCB2b2lkICpmcmFtZSxcXG4yNjc1OlxcdFxcdFxcdFxcdFxcdGludCBzaXplX21heCwgdm9pZCAqKmRhdGEpXFxuMjY3NjpcXHR7XFxuMjY3NzpcXHRcXHR1bmlvbiB0cGFja2V0X3VoZHIgcGg7XFxuMjY3ODpcXHRcXHR1MzIgdHBfbGVuO1xcbjI2Nzk6XFx0XFx0aW50IG9mZjtcXG4yNjgwOlxcdFxcbjI2ODE6XFx0XFx0cGgucmF3ID0gZnJhbWU7XFxuMjY4MjpcXHRcXG4yNjgzOlxcdFxcdHN3aXRjaCAocG8tXFx1MDAzZXRwX3ZlcnNpb24pIHtcXG4yNjg0OlxcdFxcdGNhc2UgVFBBQ0tFVF9WMzpcXG4yNjg1OlxcdFxcdFxcdGlmIChwaC5oMy1cXHUwMDNldHBfbmV4dF9vZmZzZXQgIT0gMCkge1xcbjI2ODY6XFx0XFx0XFx0XFx0cHJfd2Fybl9vbmNlKFxcXCJ2YXJpYWJsZSBzaXplZCBzbG90IG5vdCBzdXBwb3J0ZWRcXFwiKTtcXG4yNjg3OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI2ODg6XFx0XFx0XFx0fVxcbjI2ODk6XFx0XFx0XFx0dHBfbGVuID0gcGguaDMtXFx1MDAzZXRwX2xlbjtcXG4yNjkwOlxcdFxcdFxcdGJyZWFrO1xcbjI2OTE6XFx0XFx0Y2FzZSBUUEFDS0VUX1YyOlxcbjI2OTI6XFx0XFx0XFx0dHBfbGVuID0gcGguaDItXFx1MDAzZXRwX2xlbjtcXG4yNjkzOlxcdFxcdFxcdGJyZWFrO1xcbjI2OTQ6XFx0XFx0ZGVmYXVsdDpcXG4yNjk1OlxcdFxcdFxcdHRwX2xlbiA9IHBoLmgxLVxcdTAwM2V0cF9sZW47XFxuMjY5NjpcXHRcXHRcXHRicmVhaztcXG4yNjk3OlxcdFxcdH1cXG4yNjk4OlxcdFxcdGlmICh1bmxpa2VseSh0cF9sZW4gXFx1MDAzZSBzaXplX21heCkpIHtcXG4yNjk5OlxcdFxcdFxcdHByX2VycihcXFwicGFja2V0IHNpemUgaXMgdG9vIGxvbmcgKCV1IFxcdTAwM2UgJWQpXFxcXG5cXFwiLCB0cF9sZW4sIHNpemVfbWF4KTtcXG4yNzAwOlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuMjcwMTpcXHRcXHR9XFxuMjcwMjpcXHRcXG4yNzAzOlxcdFxcdGlmICh1bmxpa2VseShwYWNrZXRfc29ja19mbGFnKHBvLCBQQUNLRVRfU09DS19UWF9IQVNfT0ZGKSkpIHtcXG4yNzA0OlxcdFxcdFxcdGludCBvZmZfbWluLCBvZmZfbWF4O1xcbjI3MDU6XFx0XFxuMjcwNjpcXHRcXHRcXHRvZmZfbWluID0gcG8tXFx1MDAzZXRwX2hkcmxlbiAtIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpO1xcbjI3MDc6XFx0XFx0XFx0b2ZmX21heCA9IHBvLVxcdTAwM2V0eF9yaW5nLmZyYW1lX3NpemUgLSB0cF9sZW47XFxuMjcwODpcXHRcXHRcXHRpZiAocG8tXFx1MDAzZXNrLnNrX3R5cGUgPT0gU09DS19ER1JBTSkge1xcbjI3MDk6XFx0XFx0XFx0XFx0c3dpdGNoIChwby1cXHUwMDNldHBfdmVyc2lvbikge1xcbjI3MTA6XFx0XFx0XFx0XFx0Y2FzZSBUUEFDS0VUX1YzOlxcbjI3MTE6XFx0XFx0XFx0XFx0XFx0b2ZmID0gcGguaDMtXFx1MDAzZXRwX25ldDtcXG4yNzEyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI3MTM6XFx0XFx0XFx0XFx0Y2FzZSBUUEFDS0VUX1YyOlxcbjI3MTQ6XFx0XFx0XFx0XFx0XFx0b2ZmID0gcGguaDItXFx1MDAzZXRwX25ldDtcXG4yNzE1OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI3MTY6XFx0XFx0XFx0XFx0ZGVmYXVsdDpcXG4yNzE3OlxcdFxcdFxcdFxcdFxcdG9mZiA9IHBoLmgxLVxcdTAwM2V0cF9uZXQ7XFxuMjcxODpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yNzE5OlxcdFxcdFxcdFxcdH1cXG4yNzIwOlxcdFxcdFxcdH0gZWxzZSB7XFxuMjcyMTpcXHRcXHRcXHRcXHRzd2l0Y2ggKHBvLVxcdTAwM2V0cF92ZXJzaW9uKSB7XFxuMjcyMjpcXHRcXHRcXHRcXHRjYXNlIFRQQUNLRVRfVjM6XFxuMjcyMzpcXHRcXHRcXHRcXHRcXHRvZmYgPSBwaC5oMy1cXHUwMDNldHBfbWFjO1xcbjI3MjQ6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjcyNTpcXHRcXHRcXHRcXHRjYXNlIFRQQUNLRVRfVjI6XFxuMjcyNjpcXHRcXHRcXHRcXHRcXHRvZmYgPSBwaC5oMi1cXHUwMDNldHBfbWFjO1xcbjI3Mjc6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjcyODpcXHRcXHRcXHRcXHRkZWZhdWx0OlxcbjI3Mjk6XFx0XFx0XFx0XFx0XFx0b2ZmID0gcGguaDEtXFx1MDAzZXRwX21hYztcXG4yNzMwOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI3MzE6XFx0XFx0XFx0XFx0fVxcbjI3MzI6XFx0XFx0XFx0fVxcbjI3MzM6XFx0XFx0XFx0aWYgKHVubGlrZWx5KChvZmYgXFx1MDAzYyBvZmZfbWluKSB8fCAob2ZmX21heCBcXHUwMDNjIG9mZikpKVxcbjI3MzQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE5OjA0OjM2LjEwMTQxNzYwN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNzk4NDc1NDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW50ZWdlciBPdmVyZmxvdyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgY2hhbmdlOiBgaW50IHRwX2xlbiwgb2ZmO2AgaGFzIGJlZW4gdXBkYXRlZCB0byBgdTMyIHRwX2xlbjsgaW50IG9mZjtgLCBhbmQgdGhlIGBwcl9lcnJgIGZvcm1hdCBzdHJpbmcgaXMgbm93IHVzaW5nIGAldWAgaW5zdGVhZCBvZiBgJWRgLiBUaGUgYCV1YCBzdWdnZXN0cyBhbiB1bnNpZ25lZCBpbnRlZ2VyLCB3aGljaCBpcyBhIGdvb2QgY2x1ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuXG5cbkxldCdzIHRyYWNlIGB0cF9sZW5gLiBJdCBzZWVtcyBsaWtlIGl0J3MgZGVyaXZlZCBmcm9tIGBwaC5oMy1cdTAwM2V0cF9sZW5gLCBgcGguaDItXHUwMDNldHBfbGVuYCwgb3IgYHBoLmgxLVx1MDAzZXRwX2xlbmAsIGFuZCB0aG9zZSBhcmUgYWxsIGB1bnNpZ25lZCBpbnRgIG9yIGBfX3UzMmAuIEhtbSwgYSBtaXNtYXRjaC4uLlxuXG5BaCwgSSBzZWUgdGhlIHByb2JsZW0uIEJlZm9yZSwgd2hlbiBgdHBfbGVuYCB3YXMgYSBzaWduZWQgYGludGAsIHVzZXIgc3BhY2UgY291bGQgcG90ZW50aWFsbHkgcGFzcyBhIGZyYW1lIHdoZXJlIGB0cF9sZW5gIHdhcyBsYXJnZXIgdGhhbiBgSU5UX01BWGAsIG9yIGV2ZW4gYSBuZWdhdGl2ZSB2YWx1ZSBhZnRlciB0aGUgY2FzdC4gVGhhdCdzIGEgY2xhc3NpYyBvdmVyZmxvdyBzY2VuYXJpbyEgVGhlIHN1YnNlcXVlbnQgY2hlY2sgYHRwX2xlbiBcdTAwM2Ugc2l6ZV9tYXhgIHdhcyBhICpzaWduZWQqIGNvbXBhcmlzb24uIFNvIGlmIGB0cF9sZW5gIHdhcywgc2F5LCBgMHg4MDAwMDAwMGAgKHdoaWNoIHJlcHJlc2VudHMgYSBuZWdhdGl2ZSBzaWduZWQgaW50ZWdlciksIHRoZSBjb21wYXJpc29uIHdvdWxkIGZhaWwgYmVjYXVzZSBpdCdzIGxlc3MgdGhhbiBgc2l6ZV9tYXhgLiBUaGUgY2hlY2sgYHVubGlrZWx5KHRwX2xlbiBcdTAwM2Ugc2l6ZV9tYXgpYCB3b3VsZCBpbmNvcnJlY3RseSBldmFsdWF0ZSB0byAqZmFsc2UqLCBsZXR0aW5nIGEgcG90ZW50aWFsbHkgbWFsaWNpb3VzIHBhY2tldCB0aHJvdWdoLlxuXG5SaWdodCwgc28gd2UncmUgdnVsbmVyYWJsZSB0byBhbiBpbnRlZ2VyIG92ZXJmbG93IGFsbG93aW5nIGEgbWFsZm9ybWVkIHBhY2tldCB0byBieXBhc3MgYSBjcml0aWNhbCBzaXplIGNoZWNrLiBXZSdkIHRoZW4gcnVuIG9mZiB0aGUgZW5kIG9mIG1lbW9yeSwgcmVhZGluZyBhbmQgd3JpdGluZyB3aGVyZXZlciB0aGUgdXNlciB0b2xkIHVzLiBUaW1lIHRvIGNoZWNrIHRoZSBjb2RlIHRoYXQgY29tZXMgKmFmdGVyKiB0aGF0IGZsYXdlZCBjaGVjay4gSSBuZWVkIHRvIGxvb2sgYXQgbGluZXMgMjczMC0yNzYwIGluIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCB0byBzZWUgdGhlIGNvbnNlcXVlbmNlcyBvZiB0aGlzIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk5OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE5OjA0OjQ4Ljg5OTg5NTYwM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3MzA6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjczMTpcXHRcXHRcXHRcXHR9XFxuMjczMjpcXHRcXHRcXHR9XFxuMjczMzpcXHRcXHRcXHRpZiAodW5saWtlbHkoKG9mZiBcXHUwMDNjIG9mZl9taW4pIHx8IChvZmZfbWF4IFxcdTAwM2Mgb2ZmKSkpXFxuMjczNDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yNzM1OlxcdFxcdH0gZWxzZSB7XFxuMjczNjpcXHRcXHRcXHRvZmYgPSBwby1cXHUwMDNldHBfaGRybGVuIC0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9sbCk7XFxuMjczNzpcXHRcXHR9XFxuMjczODpcXHRcXG4yNzM5OlxcdFxcdCpkYXRhID0gZnJhbWUgKyBvZmY7XFxuMjc0MDpcXHRcXHRyZXR1cm4gdHBfbGVuO1xcbjI3NDE6XFx0fVxcbjI3NDI6XFx0XFxuMjc0MzpcXHRzdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZylcXG4yNzQ0OlxcdHtcXG4yNzQ1OlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xcbjI3NDY6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4yNzQ3OlxcdFxcdHN0cnVjdCB2aXJ0aW9fbmV0X2hkciB2bmV0X2hkcjtcXG4yNzQ4OlxcdFxcdGJvb2wgaGFzX3ZuZXRfaGRyID0gZmFsc2U7XFxuMjc0OTpcXHRcXHRzdHJ1Y3Qgc29ja2NtX2Nvb2tpZSBzb2NrYztcXG4yNzUwOlxcdFxcdF9fYmUxNiBwcm90bztcXG4yNzUxOlxcdFxcdGludCBlcnIsIHJlc2VydmUgPSAwO1xcbjI3NTI6XFx0XFx0dm9pZCAqcGg7XFxuMjc1MzpcXHRcXHRERUNMQVJFX1NPQ0tBRERSKHN0cnVjdCBzb2NrYWRkcl9sbCAqLCBzYWRkciwgbXNnLVxcdTAwM2Vtc2dfbmFtZSk7XFxuMjc1NDpcXHRcXHRib29sIG5lZWRfd2FpdCA9ICEobXNnLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xcbjI3NTU6XFx0XFx0aW50IHZuZXRfaGRyX3N6ID0gUkVBRF9PTkNFKHBvLVxcdTAwM2V2bmV0X2hkcl9zeik7XFxuMjc1NjpcXHRcXHR1bnNpZ25lZCBjaGFyICphZGRyID0gTlVMTDtcXG4yNzU3OlxcdFxcdGludCB0cF9sZW4sIHNpemVfbWF4O1xcbjI3NTg6XFx0XFx0dm9pZCAqZGF0YTtcXG4yNzU5OlxcdFxcdGludCBsZW5fc3VtID0gMDtcXG4yNzYwOlxcdFxcdGludCBzdGF0dXMgPSBUUF9TVEFUVVNfQVZBSUxBQkxFO1xcbjI3NjE6XFx0XFx0aW50IGhhcmRfaGVhZGVyX2xlbiwgaGxlbiwgdGxlbiwgY29weWxlbiA9IDA7XFxuMjc2MjpcXHRcXHRsb25nIHRpbWVvO1xcbjI3NjM6XFx0XFxuMjc2NDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZwby1cXHUwMDNlcGdfdmVjX2xvY2spO1xcbjI3NjU6XFx0XFxuMjc2NjpcXHRcXHQvKiBwYWNrZXRfc2VuZG1zZygpIGNoZWNrIG9uIHR4X3JpbmcucGdfdmVjIHdhcyBsb2NrbGVzcyxcXG4yNzY3OlxcdFxcdCAqIHdlIG5lZWQgdG8gY29uZmlybSBpdCB1bmRlciBwcm90ZWN0aW9uIG9mIHBnX3ZlY19sb2NrLlxcbjI3Njg6XFx0XFx0ICovXFxuMjc2OTpcXHRcXHRpZiAodW5saWtlbHkoIXBvLVxcdTAwM2V0eF9yaW5nLnBnX3ZlYykpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTk6MDQ6NDguOTAwMDUyMDUzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkxNzU3NTIyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFBhY2tldCBUcmFuc21pc3Npb24gYW5kIEhlYWRlciBQYXJzaW5nKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlc2UgcGFja2V0cyBhcmUgZ2V0dGluZyBzZW50LCBhbmQgYHRwYWNrZXRfc25kYCBzZWVtcyB0byBiZSB0aGUga2V5IGZ1bmN0aW9uIGludm9sdmVkLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSByb2xlIG9mIGB0cGFja2V0X3BhcnNlX2hlYWRlcmAgd2l0aGluIHRoaXMgZmxvdy4gU2luY2UgYHRwYWNrZXRfc25kYCBjYWxscyBpdCwgaXQncyBjbGVhciB0aGUgaGVhZGVyIHBhcnNpbmcgaXMgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHJvY2Vzcy4gSSBuZWVkIHRvIHRyYWNlICp3aGVyZSogdGhpcyBgdHBhY2tldF9wYXJzZV9oZWFkZXJgIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRvIGdyYXNwIHRoZSBmdWxsIHBpY3R1cmUgb2YgdGhlIHRyYW5zbWlzc2lvbiBwYXRod2F5LiBMZXQncyBmaW5kIHRob3NlIGNhbGwgc2l0ZXMgYW5kIHNlZSB3aGF0IGNvbnRleHQgc3Vycm91bmRzIHRoZSBwYXJzaW5nIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzM5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxOTowNDo1MC44MTc2Mjk5MTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMDUzODY3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cGFja2V0X3BhcnNlX2hlYWRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcGFja2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jPTI1OTA9c3RhdGljIGludCB0cGFja2V0X2ZpbGxfc2tiKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI2NzMtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNjc0OnN0YXRpYyBpbnQgdHBhY2tldF9wYXJzZV9oZWFkZXIoc3RydWN0IHBhY2tldF9zb2NrICpwbywgdm9pZCAqZnJhbWUsXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNjc1LVxcdFxcdFxcdFxcdGludCBzaXplX21heCwgdm9pZCAqKmRhdGEpXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI3NDM9c3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4NDEtXFx0XFx0c2tiID0gTlVMTDtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI4NDI6XFx0XFx0dHBfbGVuID0gdHBhY2tldF9wYXJzZV9oZWFkZXIocG8sIHBoLCBzaXplX21heCwgXFx1MDAyNmRhdGEpO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjg0My1cXHRcXHRpZiAodHBfbGVuIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTk6MDQ6NTEuODQ4MTczMjY2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjkxMzcxODE3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JrIFBhY2tldCBQYXJzaW5nIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpczogKmFoYSEqIGB0cGFja2V0X3BhcnNlX2hlYWRlcmAgaXMgcmV0dXJuaW5nIGB0cF9sZW5gIGFzIGFuIGBpbnRgLCBidXQgaW50ZXJuYWxseSwgYHRwX2xlbmAgd2l0aGluIHRoYXQgZnVuY3Rpb24gaXMgYSBgdTMyYC4gUHJldmlvdXNseSwgdGhlIGNvbXBhcmlzb24gYHRwX2xlbiBcdTAwM2Ugc2l6ZV9tYXhgIHdhcyBhICpzaWduZWQqIGNvbXBhcmlzb24uIE5vdywgd2l0aCB0aGUgYHUzMmAgdHlwZSBmb3IgYHRwX2xlbmAsIGl0J3MgYW4gKnVuc2lnbmVkKiBjb21wYXJpc29uLiBUaGlzIGlzIGdvb2QhIEFueSBsYXJnZSB1bnNpZ25lZCB2YWx1ZSAocHJldmlvdXNseSBieXBhc3NpbmcgY2hlY2tzIGR1ZSB0byBiZWluZyBzaWduZWQpIHdpbGwgbm93IGJlIGNvcnJlY3RseSBjYXVnaHQuIFRoaXMgZml4ZXMgYSBzaWduZWQgaW50ZWdlciBjb21wYXJpc29uIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkuIEV4Y2VsbGVudCwgdGhpcyBpcyBhIGxlZ2l0aW1hdGUgYnVnIGZpeCBpbiBwYWNrZXQgc29ja2V0IHBhY2tldCBwYXJzaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIFRYIHJpbmcgaGFuZGxpbmcuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBpcyB0aGlzIFdvcnRoRnV6emluZz8gTGV0J3MgY2hlY2sgdGhlIGNyaXRlcmlhLiBPa2F5LCBubyBkb2N1bWVudGF0aW9uLCBLY29uZmlnLCBjb21tZW50cywgbG9nZ2luZywgb3IgZGVjb3JhdGl2ZSBjaGFuZ2VzIGhlcmUuIE5vdCBjb25zdGFudHMgdGhhdCBkb24ndCBhZmZlY3QgZXhlY3V0aW9uLiBEZWZpbml0ZWx5IG5vdCB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgb3IgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgcmVxdWlyaW5nIGRlZGljYXRlZCBoYXJkd2FyZS4gQW5kIGl0J3Mgbm90IGRyaXZlciB0ZWFyZG93biBjYWxsYmFja3MuIFRoaXMgcGF0Y2ggZGlyZWN0bHkgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMsIHNwZWNpZmljYWxseSBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AsIGluIHRoZSBmdW5jdGlvbiBgdHBhY2tldF9wYXJzZV9oZWFkZXIoKWAsIHdoaWNoIGlzIHVzZWQgYnkgdGhlIEFGX1BBQ0tFVCByaW5nIGJ1ZmZlciBwYWNrZXQgdHJhbnNtaXNzaW9uIChgdHBhY2tldF9zbmRgKS4gVGhpcyBpcyAqY29yZSogbmV0d29ya2luZyBjb2RlLCB3aGljaCBJIGtub3cgaXMgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgc3lzY2FsbHMgbGlrZSBgc29ja2V0KEFGX1BBQ0tFVCwgLi4uKWAgYW5kIGBzZXRzb2Nrb3B0KC4uLiwgUEFDS0VUX1RYX1JJTkcsIC4uLilgIGFuZCBvZiBjb3Vyc2UgYHNlbmR0bygpYC9gc2VuZG1zZygpYC4gU28sIHllcywgV29ydGhGdXp6aW5nIGlzIGRlZmluaXRpdmVseSBgdHJ1ZWAhXG5cbk5vdywgbmV4dCBzdGVwLCBJIG5lZWQgdG8gaWRlbnRpZnkgaWYgdGhlcmUgYXJlIGZvY3VzIHN5bWJvbHMgdGhhdCB3aWxsIGJlIHVzZWZ1bCBmb3IgZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGZvY3VzaW5nIG9uIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBJIHdpbGwgc3RhcnQgYnkgc2VhcmNoaW5nIGFyb3VuZCBgcGFja2V0X3NlbmRtc2dgLCBgdHBhY2tldF9zbmRgLCBhbmQgYHBhY2tldF9jcmVhdGVgIGluIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCB0byBpZGVudGlmeSB0aGUgbW9zdCBzdWl0YWJsZSBzeW1ib2xzLiBJIGFtIGVhZ2VyIHRvIGdldCBzdGFydGVkIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODA1LCJPdXRwdXRUb2tlbnMiOjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE5OjA0OjU4Ljc2MTg5OTAzNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE5NTczNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKHBhY2tldF9zZW5kbXNnfHRwYWNrZXRfc25kfHRwYWNrZXRfcGFyc2VfaGVhZGVyfHBhY2tldF9yZWN2bXNnfHBhY2tldF9zZXRzb2Nrb3B0KVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcGFja2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jPTE2OTM9c3RhdGljIGludCBmYW5vdXRfYWRkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGZhbm91dF9hcmdzICphcmdzKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xODAyLVxcdFxcdGlmIChyZWZjb3VudF9yZWFkKFxcdTAwMjZtYXRjaC1cXHUwMDNlc2tfcmVmKSBcXHUwMDNjIG1hdGNoLVxcdTAwM2VtYXhfbnVtX21lbWJlcnMpIHtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE4MDM6XFx0XFx0XFx0LyogUGFpcmVkIHdpdGggcGFja2V0X3NldHNvY2tvcHQoUEFDS0VUX0ZBTk9VVF9EQVRBKSAqL1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTgwNC1cXHRcXHRcXHRXUklURV9PTkNFKHBvLVxcdTAwM2VmYW5vdXQsIG1hdGNoKTtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTkzOD1zdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xOTYyLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTk2MzpzdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnX3Nwa3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTk2NC1cXHRcXHRcXHQgICAgICAgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjEzNj1zdGF0aWMgaW50IHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjIwOS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIyMTA6XFx0Lyogc2xsLVxcdTAwM2VzbGxfZmFtaWx5IGFuZCBzbGwtXFx1MDAzZXNsbF9wcm90b2NvbCBhcmUgc2V0IGluIHBhY2tldF9yZWN2bXNnKCkuXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMjExLVxcdCAqIFVzZSB0aGVpciBzcGFjZSBmb3Igc3RvcmluZyB0aGUgb3JpZ2luYWwgc2tiIGxlbmd0aC5cXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjU5MD1zdGF0aWMgaW50IHRwYWNrZXRfZmlsbF9za2Ioc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjY3My1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI2NzQ6c3RhdGljIGludCB0cGFja2V0X3BhcnNlX2hlYWRlcihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCB2b2lkICpmcmFtZSxcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI2NzUtXFx0XFx0XFx0XFx0aW50IHNpemVfbWF4LCB2b2lkICoqZGF0YSlcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjc0Mi1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI3NDM6c3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzQ0LXtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjc2NS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI3NjY6XFx0LyogcGFja2V0X3NlbmRtc2coKSBjaGVjayBvbiB0eF9yaW5nLnBnX3ZlYyB3YXMgbG9ja2xlc3MsXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzY3LVxcdCAqIHdlIG5lZWQgdG8gY29uZmlybSBpdCB1bmRlciBwcm90ZWN0aW9uIG9mIHBnX3ZlY19sb2NrLlxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODQxLVxcdFxcdHNrYiA9IE5VTEw7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyODQyOlxcdFxcdHRwX2xlbiA9IHRwYWNrZXRfcGFyc2VfaGVhZGVyKHBvLCBwaCwgc2l6ZV9tYXgsIFxcdTAwMjZkYXRhKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4NDMtXFx0XFx0aWYgKHRwX2xlbiBcXHUwMDNjIDApXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI5NzM9c3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEzMS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMxMzI6c3RhdGljIGludCBwYWNrZXRfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTMzLXtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEzNy1cXHQvKiBSZWFkaW5nIHR4X3JpbmcucGdfdmVjIHdpdGhvdXQgaG9sZGluZyBwZ192ZWNfbG9jayBpcyByYWN5Llxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzEzODpcXHQgKiB0cGFja2V0X3NuZCgpIHdpbGwgcmVkbyB0aGUgY2hlY2sgc2FmZWx5Llxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEzOS1cXHQgKi9cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxNDAtXFx0aWYgKGRhdGFfcmFjZShwby1cXHUwMDNldHhfcmluZy5wZ192ZWMpKVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzE0MTpcXHRcXHRyZXR1cm4gdHBhY2tldF9zbmQocG8sIG1zZyk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTQyLVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0zMzY2PXN0YXRpYyBpbnQgcGFja2V0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzQ0My1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjM0NDQ6c3RhdGljIGludCBwYWNrZXRfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zNDQ1LVxcdFxcdFxcdCAgaW50IGZsYWdzKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0zODE0PXN0YXRpYyBpbnRcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjM4MTU6cGFja2V0X3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTM4MTYtXFx0XFx0ICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz00NzUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHNfc3BrdCA9IHtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDc2Ni1cXHQuc2h1dGRvd24gPVxcdHNvY2tfbm9fc2h1dGRvd24sXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NzY3OlxcdC5zZW5kbXNnID1cXHRwYWNrZXRfc2VuZG1zZ19zcGt0LFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6NDc2ODpcXHQucmVjdm1zZyA9XFx0cGFja2V0X3JlY3Ztc2csXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NzY5LVxcdC5tbWFwID1cXHRcXHRzb2NrX25vX21tYXAsXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTQ3NzI9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wcyA9IHtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDc4NS1cXHQuc2h1dGRvd24gPVxcdHNvY2tfbm9fc2h1dGRvd24sXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0Nzg2OlxcdC5zZXRzb2Nrb3B0ID1cXHRwYWNrZXRfc2V0c29ja29wdCxcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ3ODctXFx0LmdldHNvY2tvcHRfaXRlciA9XFx0cGFja2V0X2dldHNvY2tvcHQsXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0Nzg4OlxcdC5zZW5kbXNnID1cXHRwYWNrZXRfc2VuZG1zZyxcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ3ODk6XFx0LnJlY3Ztc2cgPVxcdHBhY2tldF9yZWN2bXNnLFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDc5MC1cXHQubW1hcCA9XFx0XFx0cGFja2V0X21tYXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE5OjA0OjU4LjgxMzg1ODg1NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NTUzODAzNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGFja2V0IFNvY2tldCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBoYXMgdG8gYmUgb24gdGhlIGNvcmUgZnVuY3Rpb25zLiBJIHNlZSBgdHBhY2tldF9zbmRgLCBgcGFja2V0X3NlbmRtc2dgLCBgcGFja2V0X3NldHNvY2tvcHRgLCBgcGFja2V0X21tYXBgLCBhbmQgYHRwYWNrZXRfcGFyc2VfaGVhZGVyYC4gUmlnaHQgYXdheSwgYHRwYWNrZXRfc25kYCBzdGFuZHMgb3V0IGFzIGl0J3MgY2FsbGVkIGJ5IGBwYWNrZXRfc2VuZG1zZ2AsIGFuZCBgdHBhY2tldF9wYXJzZV9oZWFkZXJgIGlzIGNhbGxlZCBieSBgdHBhY2tldF9zbmRgLiBJIHdvbmRlciBpZiBgdHBhY2tldF9zbmRgIGlzIGlubGluZWQsIGJ1dCBnaXZlbiBpdCdzIGFyb3VuZCAyMDAgbGluZXMsIEkgaGlnaGx5IGRvdWJ0IGl0LiBgcGFja2V0X3NlbmRtc2dgIGlzIHRoZSBvcHMgaGFuZGxlciDigJMgc3BlY2lmaWNhbGx5IGBwYWNrZXRfb3BzLnNlbmRtc2dgLlxuXG5Ob3csIEkgbmVlZCB0byBkZWNpZGUgaWYgYHRwYWNrZXRfc25kYCBvciBgcGFja2V0X3NlbmRtc2dgIGFyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1cnRoZXIgaW5zcGVjdGlvbi4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgdGhleSB1c3VhbGx5IGFyZSwgc28gbGV0J3Mga2VlcCB0aGVtIGluIG1pbmQgYXMgcHJpbWFyeSBmb2N1cyBhcmVhcy4gSSBzaG91bGQgYWxzbyBjb25zaWRlciB0aGUgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYW5kIHByb3RvY29sIG9wZXJhdGlvbnMsIHN1Y2ggYXMgYHBhY2tldF9zZXRzb2Nrb3B0YC5cblxuVG8gZ2V0IGEgYnJvYWRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBtb2R1bGUsIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgYG5ldC9wYWNrZXQvYC4gVGhpcyB3aWxsIGdpdmUgbWUgYW4gb3ZlcnZpZXcgb2YgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIHNob3VsZCBhbHNvIGludmVzdGlnYXRlIHRoZSBNYWtlZmlsZSB3aXRoaW4gYG5ldC9wYWNrZXQvYCBhbmQgdGhlIGFzc29jaWF0ZWQgYEtjb25maWdgIGZpbGVzIHdpdGhpbiBgbmV0L2AsIG9yIHNwZWNpZmljYWxseSBgbmV0L3BhY2tldC9LY29uZmlnYC4gVGhlc2Ugd2lsbCBnaXZlIG1lIGluc2lnaHRzIGludG8gYnVpbGQgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYxMCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxOTowNTowNi4zNjc2NjQ5NTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3ODMwMTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFmX3BhY2tldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTU5ND1zdGF0aWMgaW5saW5lIHN0cnVjdCBsaXN0X2hlYWQgKnB0eXBlX2hlYWQoY29uc3Qgc3RydWN0IHBhY2tldF90eXBlICpwdClcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU5Ni1cXHRpZiAocHQtXFx1MDAzZXR5cGUgPT0gaHRvbnMoRVRIX1BfQUxMKSkge1xcbm5ldC9jb3JlL2Rldi5jOjU5NzpcXHRcXHRpZiAoIXB0LVxcdTAwM2VhZl9wYWNrZXRfbmV0IFxcdTAwMjZcXHUwMDI2ICFwdC1cXHUwMDNlZGV2KVxcbm5ldC9jb3JlL2Rldi5jLTU5OC1cXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTYwMC1cXHRcXHRyZXR1cm4gcHQtXFx1MDAzZWRldiA/IFxcdTAwMjZwdC1cXHUwMDNlZGV2LVxcdTAwM2VwdHlwZV9hbGwgOlxcbm5ldC9jb3JlL2Rldi5jOjYwMTpcXHRcXHRcXHRcXHQgXFx1MDAyNnB0LVxcdTAwM2VhZl9wYWNrZXRfbmV0LVxcdTAwM2VwdHlwZV9hbGw7XFxubmV0L2NvcmUvZGV2LmMtNjAyLVxcdH1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTYwNi1cXG5uZXQvY29yZS9kZXYuYzo2MDc6XFx0cmV0dXJuIHB0LVxcdTAwM2VhZl9wYWNrZXRfbmV0ID8gXFx1MDAyNnB0LVxcdTAwM2VhZl9wYWNrZXRfbmV0LVxcdTAwM2VwdHlwZV9zcGVjaWZpYyA6XFxubmV0L2NvcmUvZGV2LmMtNjA4LVxcdFxcdFxcdFxcdCBcXHUwMDI2cHR5cGVfYmFzZVtudG9ocyhwdC1cXHUwMDNldHlwZSkgXFx1MDAyNiBQVFlQRV9IQVNIX01BU0tdO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MjUzOT1zdGF0aWMgaW5saW5lIGJvb2wgc2tiX2xvb3Bfc2soc3RydWN0IHBhY2tldF90eXBlICpwdHlwZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9kZXYuYy0yNTQwLXtcXG5uZXQvY29yZS9kZXYuYzoyNTQxOlxcdGlmICghcHR5cGUtXFx1MDAzZWFmX3BhY2tldF9wcml2IHx8ICFza2ItXFx1MDAzZXNrKVxcbm5ldC9jb3JlL2Rldi5jLTI1NDItXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtMjU0NS1cXHRcXHRyZXR1cm4gcHR5cGUtXFx1MDAzZWlkX21hdGNoKHB0eXBlLCBza2ItXFx1MDAzZXNrKTtcXG5uZXQvY29yZS9kZXYuYzoyNTQ2OlxcdGVsc2UgaWYgKChzdHJ1Y3Qgc29jayAqKXB0eXBlLVxcdTAwM2VhZl9wYWNrZXRfcHJpdiA9PSBza2ItXFx1MDAzZXNrKVxcbm5ldC9jb3JlL2Rldi5jLTI1NDctXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmM9MjI5PXN0YXRpYyB2b2lkICpwdHlwZV9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpXFxuLS1cXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmMtMjYwLVxcbm5ldC9jb3JlL25ldC1wcm9jZnMuYzoyNjE6XFx0aWYgKHB0LVxcdTAwM2VhZl9wYWNrZXRfbmV0KSB7XFxubmV0L2NvcmUvbmV0LXByb2Nmcy5jLTI2Mi1uZXRfcHR5cGVfYWxsOlxcbi0tXFxubmV0L2NvcmUvbmV0LXByb2Nmcy5jPTI5Mz1zdGF0aWMgaW50IHB0eXBlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbi0tXFxubmV0L2NvcmUvbmV0LXByb2Nmcy5jLTMwMy1cXHRkZXYgPSBpdGVyLVxcdTAwM2VkZXY7XFxubmV0L2NvcmUvbmV0LXByb2Nmcy5jOjMwNDpcXHRpZiAoKCFwdC1cXHUwMDNlYWZfcGFja2V0X25ldCB8fCBuZXRfZXEocHQtXFx1MDAzZWFmX3BhY2tldF9uZXQsIHNlcV9maWxlX25ldChzZXEpKSkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmMtMzA1LVxcdFxcdCAoIWRldiB8fCBuZXRfZXEoZGV2X25ldChkZXYpLCBzZXFfZmlsZV9uZXQoc2VxKSkpKSB7XFxuLS1cXG5uZXQvY29yZS9zZWxmdGVzdHMuYz0xNTk9c3RhdGljIGludCBuZXRfdGVzdF9sb29wYmFja192YWxpZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc2VsZnRlc3RzLmMtMTYzLXtcXG5uZXQvY29yZS9zZWxmdGVzdHMuYzoxNjQ6XFx0c3RydWN0IG5ldF90ZXN0X3ByaXYgKnRwcml2ID0gcHQtXFx1MDAzZWFmX3BhY2tldF9wcml2O1xcbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jLTE2NS1cXHRjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMgPSB0cHJpdi1cXHUwMDNlcGFja2V0LVxcdTAwM2VzcmM7XFxuLS1cXG5uZXQvY29yZS9zZWxmdGVzdHMuYz0yMzM9c3RhdGljIGludCBfX25ldF90ZXN0X2xvb3BiYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxubmV0L2NvcmUvc2VsZnRlc3RzLmMtMjQ5LVxcdHRwcml2LVxcdTAwM2VwdC5kZXYgPSBuZGV2O1xcbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jOjI1MDpcXHR0cHJpdi1cXHUwMDNlcHQuYWZfcGFja2V0X3ByaXYgPSB0cHJpdjtcXG5uZXQvY29yZS9zZWxmdGVzdHMuYy0yNTEtXFx0dHByaXYtXFx1MDAzZXBhY2tldCA9IGF0dHI7XFxuLS1cXG5uZXQvcGFja2V0L0tjb25maWc9Nj1jb25maWcgUEFDS0VUXFxuLS1cXG5uZXQvcGFja2V0L0tjb25maWctMTQtXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG5uZXQvcGFja2V0L0tjb25maWc6MTU6XFx0ICBiZSBjYWxsZWQgYWZfcGFja2V0Llxcbm5ldC9wYWNrZXQvS2NvbmZpZy0xNi1cXG4tLVxcbm5ldC9wYWNrZXQvTWFrZWZpbGUtNS1cXG5uZXQvcGFja2V0L01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1BBQ0tFVCkgKz0gYWZfcGFja2V0Lm9cXG5uZXQvcGFja2V0L01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX1BBQ0tFVF9ESUFHKSArPSBhZl9wYWNrZXRfZGlhZy5vXFxubmV0L3BhY2tldC9NYWtlZmlsZTo4OmFmX3BhY2tldF9kaWFnLXkgKz0gZGlhZy5vXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTE0NzE9c3RhdGljIGludCBwYWNrZXRfcmN2X2Zhbm91dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xNDczLXtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE0NzQ6XFx0c3RydWN0IHBhY2tldF9mYW5vdXQgKmYgPSBwdC1cXHUwMDNlYWZfcGFja2V0X3ByaXY7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xNDc1LVxcdHVuc2lnbmVkIGludCBudW0gPSBSRUFEX09OQ0UoZi1cXHUwMDNlbnVtX21lbWJlcnMpO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xNTYyPXN0YXRpYyBib29sIG1hdGNoX2Zhbm91dF9ncm91cChzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlLCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE1NjYtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoxNTY3OlxcdHJldHVybiBwdHlwZS1cXHUwMDNlYWZfcGFja2V0X3ByaXYgPT0gcGt0X3NrKHNrKS1cXHUwMDNlZmFub3V0O1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTU2OC19XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTE2OTM9c3RhdGljIGludCBmYW5vdXRfYWRkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGZhbm91dF9hcmdzICphcmdzKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xNzg2LVxcdFxcdG1hdGNoLVxcdTAwM2Vwcm90X2hvb2suZnVuYyA9IHBhY2tldF9yY3ZfZmFub3V0O1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTc4NzpcXHRcXHRtYXRjaC1cXHUwMDNlcHJvdF9ob29rLmFmX3BhY2tldF9wcml2ID0gbWF0Y2g7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoxNzg4OlxcdFxcdG1hdGNoLVxcdTAwM2Vwcm90X2hvb2suYWZfcGFja2V0X25ldCA9IHJlYWRfcG5ldChcXHUwMDI2bWF0Y2gtXFx1MDAzZW5ldCk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xNzg5LVxcdFxcdG1hdGNoLVxcdTAwM2Vwcm90X2hvb2suaWRfbWF0Y2ggPSBtYXRjaF9mYW5vdXRfZ3JvdXA7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTE4NzI9c3RhdGljIGludCBwYWNrZXRfcmN2X3Nwa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTg4Mi1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE4ODM6XFx0c2sgPSBwdC1cXHUwMDNlYWZfcGFja2V0X3ByaXY7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xODg0LVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMTM2PXN0YXRpYyBpbnQgcGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMTQ5LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjE1MDpcXHRzayA9IHB0LVxcdTAwM2VhZl9wYWNrZXRfcHJpdjtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIxNTEtXFx0cG8gPSBwa3Rfc2soc2spO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMjQ5PXN0YXRpYyBpbnQgdHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjI3OC1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIyNzk6XFx0c2sgPSBwdC1cXHUwMDNlYWZfcGFja2V0X3ByaXY7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMjgwLVxcdHBvID0gcGt0X3NrKHNrKTtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MzM2Nj1zdGF0aWMgaW50IHBhY2tldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTM0MTctXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozNDE4OlxcdHBvLVxcdTAwM2Vwcm90X2hvb2suYWZfcGFja2V0X3ByaXYgPSBzaztcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjM0MTk6XFx0cG8tXFx1MDAzZXByb3RfaG9vay5hZl9wYWNrZXRfbmV0ID0gc29ja19uZXQoc2spO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzQyMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTk6MDU6MDYuNDQ1NTAyNDc0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwNjAwNTcxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktjb25maWcgRGl2ZSBmb3IgQ09ORklHX1BBQ0tFVCBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGBuZXQvcGFja2V0L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgZGVwZW5kZW5jaWVzIG9mIGBDT05GSUdfUEFDS0VUYC4gSSdtIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggdGhlIG5ldHdvcmtpbmcgc3RhY2ssIHNvIHRoaXMgc2hvdWxkbid0IGJlIHRvbyBpbnZvbHZlZCwgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgc3VidGxlIHJlbGF0aW9uc2hpcHMgb3IgaW1wbGllZCBmdW5jdGlvbmFsaXRpZXMgYmVmb3JlIG1ha2luZyBhIGRlY2lzaW9uIG9yIHJldmlld2luZyBhIHBhdGNoIHRoYXQgdG91Y2hlcyB0aGlzIGFyZWEuIEknbSBsb29raW5nIGZvciB0aGluZ3MgYmV5b25kIHRoZSBvYnZpb3VzOiBhcmUgdGhlcmUgYW55IGltcGxpY2l0IGRlcGVuZGVuY2llcyBvbiBzcGVjaWZpYyBkZXZpY2UgZHJpdmVycywgb3RoZXIgbmV0d29ya2luZyBzdWJzeXN0ZW1zLCBvciBrZXJuZWwgZmVhdHVyZXMgdGhhdCBhcmVuJ3QgaW1tZWRpYXRlbHkgYXBwYXJlbnQ/IFRpbWUgdG8gZmlyZSB1cCB0aGUgZWRpdG9yIGFuZCBzdGFydCBzY2FubmluZyBmb3IgcmVsZXZhbnQgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMsIGBzZWxlY3RgIGRpcmVjdGl2ZXMsIG9yIGFueSBvdGhlciBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBJdCdzIGFsbCBhYm91dCBlbnN1cmluZyB0aGF0IHRoZSBjb25maWd1cmF0aW9uIGlzIHNvbGlkIGFuZCB0aGF0IEkgaGF2ZSBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wYWN0IG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIGZlYXR1cmUuIEknbGwgYWxzbyBnbGFuY2Ugb3ZlciBhbnkgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gaWYgcHJlc2VudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMDQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxOTowNToxMi41MDU1NjIwMDhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3BhY2tldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFBhY2tldCBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBQQUNLRVRcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJQYWNrZXQgc29ja2V0XFxcIlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBUaGUgUGFja2V0IHByb3RvY29sIGlzIHVzZWQgYnkgYXBwbGljYXRpb25zIHdoaWNoIGNvbW11bmljYXRlXFxuICAxMDpcXHRcXHQgIGRpcmVjdGx5IHdpdGggbmV0d29yayBkZXZpY2VzIHdpdGhvdXQgYW4gaW50ZXJtZWRpYXRlIG5ldHdvcmtcXG4gIDExOlxcdFxcdCAgcHJvdG9jb2wgaW1wbGVtZW50ZWQgaW4gdGhlIGtlcm5lbCwgZS5nLiB0Y3BkdW1wLiAgSWYgeW91IHdhbnQgdGhlbVxcbiAgMTI6XFx0XFx0ICB0byB3b3JrLCBjaG9vc2UgWS5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG4gIDE1OlxcdFxcdCAgYmUgY2FsbGVkIGFmX3BhY2tldC5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgUEFDS0VUX0RJQUdcXG4gIDIwOlxcdFxcdHRyaXN0YXRlIFxcXCJQYWNrZXQ6IHNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIFBBQ0tFVFxcbiAgMjI6XFx0XFx0ZGVmYXVsdCBuXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFN1cHBvcnQgZm9yIFBGX1BBQ0tFVCBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXFxuICAyNTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE5OjA1OjEyLjUwNTYxODU1OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTgxNzY3MzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdGhpcyBzdHJhaWdodC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciBgUEFDS0VUYC4gVGhpcyB1c3VhbGx5IGJvaWxzIGRvd24gdG8gYSBxdWljayBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIE15IGluc3RpbmN0IHNheXMgdG8gc3RhcnQgd2l0aCBgbmV0L0tjb25maWdgLCB0aGF0J3MgZ2VuZXJhbGx5IHdoZXJlIHRoZXNlIG5ldHdvcmstcmVsYXRlZCBvcHRpb25zIGFyZSBkZWZpbmVkLiBJIHdhbnQgdG8gc2VlIGlmIGBQQUNLRVRgIGhhcyBhbnkgZGlyZWN0IHBhcmVudCBkZXBlbmRlbmNpZXMuIERvZXMgaXQgcmVseSBvbiBzb21lIG90aGVyIG9wdGlvbiBiZWluZyBlbmFibGVkIGZpcnN0PyBBbHRlcm5hdGl2ZWx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgUEFDS0VUYCBpcyBuZXN0bGVkIHdpdGhpbiB0aGUgYG1lbnVjb25maWcgTkVUYCBzdHJ1Y3R1cmUuIEtub3dpbmcgdGhlIGhpZXJhcmNoeSBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzIGFuZCB0aGUgdWx0aW1hdGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIGZlYXR1cmUuIFNvLCBgbmV0L0tjb25maWdgIGl0IGlzLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZSBLY29uZmlnIGdvZHMgaGF2ZSBvcmRhaW5lZCBmb3IgdGhpcyBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzc5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxOTowNToxNS4wODczODc4NjZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzODE2MDE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UgXFxcIm5ldC9wYWNrZXQvS2NvbmZpZ1xcXCJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz04Mj1tZW51IFxcXCJOZXR3b3JraW5nIG9wdGlvbnNcXFwiXFxubmV0L0tjb25maWctODMtXFxubmV0L0tjb25maWc6ODQ6c291cmNlIFxcXCJuZXQvcGFja2V0L0tjb25maWdcXFwiXFxubmV0L0tjb25maWctODUtc291cmNlIFxcXCJuZXQvcHNwL0tjb25maWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE5OjA1OjE1LjcyNTU1MjE4N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjM3NDMwNjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIGFyZWEgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gQmFzZWQgb24gd2hhdCBJJ20gbG9va2luZyBhdCwgbXkgZ3V0IGZlZWxpbmcgdGVsbHMgbWUgdG8gY2hlY2sgdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDgwLiBJIHN1c3BlY3QgdGhlcmUncyBhIHNldHRpbmcgb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBpbiB0aGF0IGFyZWEgdGhhdCdzIHJlbGV2YW50IHRvIHdoYXQgSSdtIGN1cnJlbnRseSBpbnZlc3RpZ2F0aW5nLiBJdOKAmXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhbmQgSSBoYXZlIGEgZmVlbGluZyB0aGUgYW5zd2VyIGxpZXMgaW4gdGhhdCB2aWNpbml0eSwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZSBzeXN0ZW0uIEknbGwgbmVlZCB0byByYXBpZGx5IHBhcnNlIHRoYXQgc2VjdGlvbiwgbG9va2luZyBmb3IgdGhlIHJpZ2h0IGtleXdvcmQgb3Igc3RydWN0dXJlIGluIHRoZSBkZWZpbml0aW9ucy4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBmaWxlIHRlbGxzIHVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEwMiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE5OjA1OjE3Ljk2Mjk4NTUyMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBOZXR3b3JrIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBORVRcXG4gICA3OlxcdFxcdGJvb2wgXFxcIk5ldHdvcmtpbmcgc3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdHNlbGVjdCBOTEFUVFJcXG4gICA5OlxcdFxcdHNlbGVjdCBHRU5FUklDX05FVF9VVElMU1xcbiAgMTA6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMTE6XFx0XFx0aGVscFxcbiAgMTI6XFx0XFx0ICBVbmxlc3MgeW91IHJlYWxseSBrbm93IHdoYXQgeW91IGFyZSBkb2luZywgeW91IHNob3VsZCBzYXkgWSBoZXJlLlxcbiAgMTM6XFx0XFx0ICBUaGUgcmVhc29uIGlzIHRoYXQgc29tZSBwcm9ncmFtcyBuZWVkIGtlcm5lbCBuZXR3b3JraW5nIHN1cHBvcnQgZXZlblxcbiAgMTQ6XFx0XFx0ICB3aGVuIHJ1bm5pbmcgb24gYSBzdGFuZC1hbG9uZSBtYWNoaW5lIHRoYXQgaXNuJ3QgY29ubmVjdGVkIHRvIGFueVxcbiAgMTU6XFx0XFx0ICBvdGhlciBjb21wdXRlci5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBJZiB5b3UgYXJlIHVwZ3JhZGluZyBmcm9tIGFuIG9sZGVyIGtlcm5lbCwgeW91XFxuICAxODpcXHRcXHQgIHNob3VsZCBjb25zaWRlciB1cGRhdGluZyB5b3VyIG5ldHdvcmtpbmcgdG9vbHMgdG9vIGJlY2F1c2UgY2hhbmdlc1xcbiAgMTk6XFx0XFx0ICBpbiB0aGUga2VybmVsIGFuZCB0aGUgdG9vbHMgb2Z0ZW4gZ28gaGFuZCBpbiBoYW5kLiBUaGUgdG9vbHMgYXJlXFxuICAyMDpcXHRcXHQgIGNvbnRhaW5lZCBpbiB0aGUgcGFja2FnZSBuZXQtdG9vbHMsIHRoZSBsb2NhdGlvbiBhbmQgdmVyc2lvbiBudW1iZXJcXG4gIDIxOlxcdFxcdCAgb2Ygd2hpY2ggYXJlIGdpdmVuIGluIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vQ2hhbmdlc1xcdTAwM2UuXFxuICAyMjpcXHRcXG4gIDIzOlxcdFxcdCAgRm9yIGEgZ2VuZXJhbCBpbnRyb2R1Y3Rpb24gdG8gTGludXggbmV0d29ya2luZywgaXQgaXMgaGlnaGx5XFxuICAyNDpcXHRcXHQgIHJlY29tbWVuZGVkIHRvIHJlYWQgdGhlIE5FVC1IT1dUTywgYXZhaWxhYmxlIGZyb21cXG4gIDI1OlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvXFx1MDAzZS5cXG4gIDI2OlxcdFxcbiAgMjc6XFx0aWYgTkVUXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBXQU5UX0NPTVBBVF9ORVRMSU5LX01FU1NBR0VTXFxuICAzMDpcXHRcXHRib29sXFxuICAzMTpcXHRcXHRoZWxwXFxuICAzMjpcXHRcXHQgIFRoaXMgb3B0aW9uIGNhbiBiZSBzZWxlY3RlZCBieSBvdGhlciBvcHRpb25zIHRoYXQgbmVlZCBjb21wYXRcXG4gIDMzOlxcdFxcdCAgbmV0bGluayBtZXNzYWdlcy5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0Y29uZmlnIENPTVBBVF9ORVRMSU5LX01FU1NBR0VTXFxuICAzNjpcXHRcXHRkZWZfYm9vbCB5XFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIENPTVBBVFxcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBXRVhUX0NPUkUgfHwgV0FOVF9DT01QQVRfTkVUTElOS19NRVNTQUdFU1xcbiAgMzk6XFx0XFx0aGVscFxcbiAgNDA6XFx0XFx0ICBUaGlzIG9wdGlvbiBtYWtlcyBpdCBwb3NzaWJsZSB0byBzZW5kIGRpZmZlcmVudCBuZXRsaW5rIG1lc3NhZ2VzXFxuICA0MTpcXHRcXHQgIHRvIHRhc2tzIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSB0YXNrIGlzIGEgY29tcGF0IHRhc2sgb3Igbm90LiBUb1xcbiAgNDI6XFx0XFx0ICBhY2hpZXZlIHRoaXMsIHlvdSBuZWVkIHRvIHNldCBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWZyYWdfbGlzdCB0byB0aGVcXG4gIDQzOlxcdFxcdCAgY29tcGF0IHNrYiBiZWZvcmUgc2VuZGluZyB0aGUgc2tiLCB0aGUgbmV0bGluayBjb2RlIHdpbGwgc29ydCBvdXRcXG4gIDQ0OlxcdFxcdCAgd2hpY2ggbWVzc2FnZSB0byBhY3R1YWxseSBwYXNzIHRvIHRoZSB0YXNrLlxcbiAgNDU6XFx0XFxuICA0NjpcXHRcXHQgIE5ld2x5IHdyaXR0ZW4gY29kZSBzaG91bGQgTkVWRVIgbmVlZCB0aGlzIG9wdGlvbiBidXQgZG9cXG4gIDQ3OlxcdFxcdCAgY29tcGF0LWluZGVwZW5kZW50IG1lc3NhZ2VzIGluc3RlYWQhXFxuICA0ODpcXHRcXG4gIDQ5OlxcdGNvbmZpZyBORVRfSU5HUkVTU1xcbiAgNTA6XFx0XFx0Ym9vbFxcbiAgNTE6XFx0XFxuICA1MjpcXHRjb25maWcgTkVUX0VHUkVTU1xcbiAgNTM6XFx0XFx0Ym9vbFxcbiAgNTQ6XFx0XFxuICA1NTpcXHRjb25maWcgTkVUX1hHUkVTU1xcbiAgNTY6XFx0XFx0c2VsZWN0IE5FVF9JTkdSRVNTXFxuICA1NzpcXHRcXHRzZWxlY3QgTkVUX0VHUkVTU1xcbiAgNTg6XFx0XFx0Ym9vbFxcbiAgNTk6XFx0XFxuICA2MDpcXHRjb25maWcgTkVUX1JFRElSRUNUXFxuICA2MTpcXHRcXHRib29sXFxuICA2MjpcXHRcXG4gIDYzOlxcdGNvbmZpZyBTS0JfREVDUllQVEVEXFxuICA2NDpcXHRcXHRib29sXFxuICA2NTpcXHRcXG4gIDY2OlxcdGNvbmZpZyBTS0JfRVhURU5TSU9OU1xcbiAgNjc6XFx0XFx0Ym9vbFxcbiAgNjg6XFx0XFxuICA2OTpcXHRjb25maWcgTkVUX0RFVk1FTVxcbiAgNzA6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgNzE6XFx0XFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuICA3MjpcXHRcXHRkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSXFxuICA3MzpcXHRcXHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxcbiAgNzQ6XFx0XFxuICA3NTpcXHRjb25maWcgTkVUX1NIQVBFUlxcbiAgNzY6XFx0XFx0Ym9vbFxcbiAgNzc6XFx0XFxuICA3ODpcXHRjb25maWcgTkVUX0NSQzMyQ1xcbiAgNzk6XFx0XFx0Ym9vbFxcbiAgODA6XFx0XFx0c2VsZWN0IENSQzMyXFxuICA4MTpcXHRcXG4gIDgyOlxcdG1lbnUgXFxcIk5ldHdvcmtpbmcgb3B0aW9uc1xcXCJcXG4gIDgzOlxcdFxcbiAgODQ6XFx0c291cmNlIFxcXCJuZXQvcGFja2V0L0tjb25maWdcXFwiXFxuICA4NTpcXHRzb3VyY2UgXFxcIm5ldC9wc3AvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTk6MDU6MTcuOTYzMDc5MDUxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4OTI3OTgzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgYWZfcGFja2V0LmNgIGZvciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIGBDT05GSUdfUEFDS0VUYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGtub2IgdGhhdCBjb21lcyB0byBtaW5kLCBhbmQgaXQncyBjbGVhcmx5IHJlbGV2YW50IHRvIHRoZSBwYWNrZXQgZnVuY3Rpb25hbGl0eS4gQnV0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgIGZvciBhbnkgb3RoZXIgcG90ZW50aWFsbHkgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgKGAjaWZkZWZgIGJsb2NrcykuIEkgd2FudCB0byBpZGVudGlmeSBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyBvciBmZWF0dXJlIGZsYWdzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGhvdyBwYWNrZXQgc29ja2V0cyBiZWhhdmUsIG9yIGNvdWxkIGV4cG9zZSBzb21lIGhpZGRlbiBjb25maWd1cmF0aW9uIHNwYWNlLiBHb3R0YSBjb25zaWRlciB0aGUgcG9zc2liaWxpdHkgb2YgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaW5mbHVlbmNpbmcgYmVoYXZpb3IgaW4gdW5leHBlY3RlZCB3YXlzLiBCZXN0IHRvIGRvIGEgcXVpY2sgY29tcHJlaGVuc2l2ZSBjaGVjayB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMDIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE5OjA1OjIxLjg1NTg3OTE5OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5ODM1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9wYWNrZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtOTEtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6OTI6I2lmZGVmIENPTkZJR19JTkVUXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy05My0jaW5jbHVkZSBcXHUwMDNjbmV0L2luZXRfY29tbW9uLmhcXHUwMDNlXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI0NT1zdGF0aWMgdm9pZCBfX2Zhbm91dF9saW5rKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBhY2tldF9zb2NrICpwbyk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNDYtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNDc6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfRUdSRVNTXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNDgtc3RhdGljIG5vaW5saW5lIHN0cnVjdCBza19idWZmICpuZl9ob29rX2RpcmVjdF9lZ3Jlc3Moc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9Mjc0PXN0YXRpYyBpbnQgcGFja2V0X3htaXQoY29uc3Qgc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjc4LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6Mjc5OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX0VHUkVTU1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjgwLVxcdGlmIChuZl9ob29rX2VncmVzc19hY3RpdmUoKSkge1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0zMTI9c3RhdGljIHUxNiBwYWNrZXRfcGlja190eF9xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTgtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMTk6I2lmZGVmIENPTkZJR19YUFNcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMyMC1cXHRza2ItXFx1MDAzZXNlbmRlcl9jcHUgPSBjcHUgKyAxO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz03Mzg9c3RhdGljIHZvaWQgcHJiX2ZsdXNoX2Jsb2NrKHN0cnVjdCB0cGFja2V0X2tiZHFfY29yZSAqcGtjMSxcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNzQyLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6NzQzOiNpZiBBUkNIX0lNUExFTUVOVFNfRkxVU0hfRENBQ0hFX1BBR0UgPT0gMVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNzQ0LVxcdHU4ICpzdGFydCwgKmVuZDtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNzYzLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6NzY0OiNpZiBBUkNIX0lNUExFTUVOVFNfRkxVU0hfRENBQ0hFX1BBR0UgPT0gMVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNzY1LVxcdHN0YXJ0ID0gKHU4ICopcGJkMTtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjI0OT1zdGF0aWMgaW50IHRwYWNrZXRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI0ODgtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNDg5OiNpZiBBUkNIX0lNUExFTUVOVFNfRkxVU0hfRENBQ0hFX1BBR0UgPT0gMVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjQ5MC1cXHRpZiAocG8tXFx1MDAzZXRwX3ZlcnNpb24gXFx1MDAzYz0gVFBBQ0tFVF9WMikge1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0zNDQ0PXN0YXRpYyBpbnQgcGFja2V0X3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zNDU2LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzQ1NzojaWYgMFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzQ1OC1cXHQvKiBXaGF0IGVycm9yIHNob3VsZCB3ZSByZXR1cm4gbm93PyBFVU5BVFRBQ0g/ICovXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTQyNzQ9c3RhdGljIGludCBwYWNrZXRfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDI5Ny1cXHR9XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0Mjk4OiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDI5OS1cXHRjYXNlIFNJT0NBRERSVDpcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9NDc5OT1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBhY2tldF9uZXRkZXZfbm90aWZpZXIgPSB7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ4MDItXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0ODAzOiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDgwNC1cXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9NDg2MD1zdGF0aWMgaW50IF9fbmV0X2luaXQgcGFja2V0X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDg2NC1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ4NjU6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00ODY2LVxcdGlmICghcHJvY19jcmVhdGVfbmV0KFxcXCJwYWNrZXRcXFwiLCAwLCBuZXQtXFx1MDAzZXByb2NfbmV0LCBcXHUwMDI2cGFja2V0X3NlcV9vcHMsXFxuLS1cXG5uZXQvcGFja2V0L2ludGVybmFsLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbm5ldC9wYWNrZXQvaW50ZXJuYWwuaDoyOiNpZm5kZWYgX19QQUNLRVRfSU5URVJOQUxfSF9fXFxubmV0L3BhY2tldC9pbnRlcm5hbC5oLTMtI2RlZmluZSBfX1BBQ0tFVF9JTlRFUk5BTF9IX19cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTk6MDU6MjEuOTA2ODcwNTc4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcwODc2OTgzMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgcHJpbWFyeSBnb2FsIGlzIHRvIGlkZW50aWZ5IHByb21pc2luZyB0YXJnZXRzIGZvciBmdXp6aW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgQUZfUEFDS0VUYCBzb2NrZXQgZmFtaWx5LlxuXG5GaXJzdCwgSSBleGFtaW5lZCB0aGUgYEZvY3VzU3ltYm9sc2AgLSBmdW5jdGlvbnMgdGhhdCBhcmUgbGlrZWx5IGNyaXRpY2FsIGZvciBwYWNrZXQgdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24uIEkndmUgY29uZmlybWVkIHRoYXQgYHRwYWNrZXRfc25kYCwgYHBhY2tldF9zZW5kbXNnYCwgYW5kIGBwYWNrZXRfc2V0c29ja29wdGAgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlLiBJIHdlbnQgdGhyb3VnaCB0aGUgY29kZSBhbmQgY29uZmlybWVkIHRoYXQgdGhlc2UgYXJlIHRoZSBtb3N0IHJlbGV2YW50LiBJIGtuZXcgdGhhdCB0aGUgZnVuY3Rpb25zIGluIHRoZSBmaWxlIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCBhcmUgbW9zdGx5IHN0YXRpYywgYXMgaXMgdHlwaWNhbCBmb3IgbW9kdWxlL3Byb3RvY29sIGltcGxlbWVudGF0aW9ucyByZWdpc3RlcmluZyBwcm90b19vcHMgYW5kIG5ldF9wcm90b19mYW1pbHkgc3RydWN0dXJlcy5cblxuTmV4dCwgSSB2ZXJpZmllZCB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGUgYFBBQ0tFVGAgY29uZmlnIGlzIGVzc2VudGlhbCwgYXMgaW5kaWNhdGVkIGJ5IGBvYmotJChDT05GSUdfUEFDS0VUKSArPSBhZl9wYWNrZXQub2AuIFRoaXMgY29uZmlybXMgdGhlIGBBRl9QQUNLRVRgIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZC5cblxuRmluYWxseSwgSSByZXZpZXdlZCB0aGUgYFJlYXNvbmluZ2AuIFRoZSBjb21taXQncyBmaXggZm9yIHRoZSBgdHBhY2tldF9wYXJzZV9oZWFkZXJgIHNpZ25lZC91bnNpZ25lZCBgdHBfbGVuYCBpc3N1ZSwgYWZmZWN0aW5nIHJpbmcgYnVmZmVyIHBhY2tldCB0cmFuc21pc3Npb24sIGlzIHRoZSBjb3JlIG9mIHRoaXMgdnVsbmVyYWJpbGl0eS4gVGhpcyBoaWdobGlnaHRzIGEgY3JpdGljYWwgYXJlYSBvZiBpbnRlcmVzdDogYW55dGhpbmcgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgYFBBQ0tFVF9UWF9SSU5HYCBjb25maWd1cmF0aW9uLiBNYWxmb3JtZWQgcGFja2V0IGhlYWRlcnMgbWlnaHQgYnlwYXNzIGNydWNpYWwgYm91bmRzIGNoZWNrcy5cblxuQmVmb3JlIEkgY29tbWl0IHRvIHNldHRpbmcgdGhlIHJlc3VsdHMsIEkndmUgY29uZmlybWVkIGV2ZXJ5dGhpbmcuIEJhc2VkIG9uIG15IGFuYWx5c2lzLCB0aGVzZSBhcmUgc29saWQgY2FuZGlkYXRlcyBmb3IgZnVydGhlciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDcxMSwiT3V0cHV0VG9rZW5zIjoxMTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTk6MDU6MjguOTk0NTcxNTc1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU3OTQwOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBQ0tFVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhY2tldF9zZW5kbXNnXCIsXG4gICAgXCJ0cGFja2V0X3NuZFwiLFxuICAgIFwicGFja2V0X3NldHNvY2tvcHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgc2l6ZSB2YWxpZGF0aW9uIGluIHRwYWNrZXRfcGFyc2VfaGVhZGVyKCkgYnkgY2hhbmdpbmcgdHBfbGVuIGZyb20gc2lnbmVkIGludCB0byB1MzIsIHByZXZlbnRpbmcgc2lnbmVkIGludGVnZXIgY29tcGFyaXNvbiBieXBhc3NlcyBkdXJpbmcgQUZfUEFDS0VUIHJpbmcgYnVmZmVyIHRyYW5zbWlzc2lvbiAodHBhY2tldF9zbmQpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgc29ja2V0IGxvZ2ljIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBQ0tFVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhY2tldF9zZW5kbXNnXCIsXG4gICAgXCJ0cGFja2V0X3NuZFwiLFxuICAgIFwicGFja2V0X3NldHNvY2tvcHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgc2l6ZSB2YWxpZGF0aW9uIGluIHRwYWNrZXRfcGFyc2VfaGVhZGVyKCkgYnkgY2hhbmdpbmcgdHBfbGVuIGZyb20gc2lnbmVkIGludCB0byB1MzIsIHByZXZlbnRpbmcgc2lnbmVkIGludGVnZXIgY29tcGFyaXNvbiBieXBhc3NlcyBkdXJpbmcgQUZfUEFDS0VUIHJpbmcgYnVmZmVyIHRyYW5zbWlzc2lvbiAodHBhY2tldF9zbmQpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgc29ja2V0IGxvZ2ljIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxOTowNToyOS4wNzAzNzc2NzRaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NDU0MDU1NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTk6MDU6MjkuMDcwOTU0NDY0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzQ0NTM0NzQ2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIHNpZ25lZG5lc3MgY29tcGFyaXNvbiBpc3N1ZSBpbiBgdHBhY2tldF9wYXJzZV9oZWFkZXIoKWAgYnkgY2hhbmdpbmcgYHRwX2xlbmAgZnJvbSBgaW50YCB0byBgdTMyYCwgZW5zdXJpbmcgdGhhdCBsYXJnZSBwYWNrZXQgbGVuZ3RoIHZhbHVlcyBhcmUgcHJvcGVybHkgdHJlYXRlZCBhcyB1bnNpZ25lZCB3aGVuIHZhbGlkYXRlZCBhZ2FpbnN0IGBzaXplX21heGAuXFxuXFxuS01TQU4gaXMgbm90IG5lZWRlZCBiZWNhdXNlOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQsIHJlYWQsIG9yIGV4cG9zZWQuIFRoZSB2YXJpYWJsZSBgdHBfbGVuYCBpcyBleHBsaWNpdGx5IGFzc2lnbmVkIGluIGFsbCBicmFuY2hlcyBvZiB0aGUgYHBvLVxcdTAwM2V0cF92ZXJzaW9uYCBzd2l0Y2ggc3RhdGVtZW50IGJlZm9yZSBhbnkgcmVhZHMuXFxuMi4gVGhlIHBhdGNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcbjMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBidWdzIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IGxlbmd0aCBib3VuZHMgY2hlY2tpbmcgKGUuZy4sIG91dC1vZi1ib3VuZHMgYnVmZmVyIGFjY2VzcyBkdXJpbmcgcGFja2V0IHByb2Nlc3NpbmcpIGFyZSBvdXQtb2YtYm91bmRzIGVycm9ycyBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNiNDRhMzgyYjExNWY1ZWY5OTVmOTI5MDM1MjU0NTc0NjZmZjYzNzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAzMCAxOTowNDoxNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXG5pbmRleCBiMjJjZGEzMjIxMzYzLi43NmJkZTc5MDZkNDk0IDEwMDY0NFxuLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuQEAgLTI2NzUsNyArMjY3NSw4IEBAIHN0YXRpYyBpbnQgdHBhY2tldF9wYXJzZV9oZWFkZXIoc3RydWN0IHBhY2tldF9zb2NrICpwbywgdm9pZCAqZnJhbWUsXG4gXHRcdFx0XHRpbnQgc2l6ZV9tYXgsIHZvaWQgKipkYXRhKVxuIHtcbiBcdHVuaW9uIHRwYWNrZXRfdWhkciBwaDtcbi1cdGludCB0cF9sZW4sIG9mZjtcbitcdHUzMiB0cF9sZW47XG4rXHRpbnQgb2ZmO1xuIFxuIFx0cGgucmF3ID0gZnJhbWU7XG4gXG5AQCAtMjY5NSw3ICsyNjk2LDcgQEAgc3RhdGljIGludCB0cGFja2V0X3BhcnNlX2hlYWRlcihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCB2b2lkICpmcmFtZSxcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHRpZiAodW5saWtlbHkodHBfbGVuIFx1MDAzZSBzaXplX21heCkpIHtcbi1cdFx0cHJfZXJyKFwicGFja2V0IHNpemUgaXMgdG9vIGxvbmcgKCVkIFx1MDAzZSAlZClcXG5cIiwgdHBfbGVuLCBzaXplX21heCk7XG4rXHRcdHByX2VycihcInBhY2tldCBzaXplIGlzIHRvbyBsb25nICgldSBcdTAwM2UgJWQpXFxuXCIsIHRwX2xlbiwgc2l6ZV9tYXgpO1xuIFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTk6MDU6MjkuMDcwOTU1NDU0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNDM1MTc3ODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEFGX1BBQ0tFVCBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gdGhpcyBwYXRjaCBhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSdtIGhlYWRpbmcgc3RyYWlnaHQgZm9yIHRoZSBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AgZmlsZSDigJMgdGhhdCdzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0LiBJIG5lZWQgdG8gZ2V0IHRoZSBjb250ZXh0IHJpZ2h0IGF3YXkuIEknbSBnb2luZyB0byB6ZXJvIGluIGFyb3VuZCBsaW5lIDI2NzUuIFRoYXQgc2hvdWxkIGJlIGEgY3JpdGljYWwgYXJlYSB0byBleGFtaW5lIGdpdmVuIHRoZSBuYXR1cmUgb2YgYGFmX3BhY2tldGAgYW5kIHRoZSBsaWtlbHkgZnVuY3Rpb24gY2FsbHMgYXJvdW5kIGl0LiBLbm93aW5nIHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY2hhbmdlcyBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzdWJzeXN0ZW0uIEkgYW50aWNpcGF0ZSBuZWVkaW5nIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSB3aXRoIHBhY2tldCBwcm9jZXNzaW5nLCBzb2NrZXQgb3B0aW9ucywgYW5kIGFueSBtZW1vcnkgbWFuYWdlbWVudCBhc3BlY3RzIGluIHRoYXQgdmljaW5pdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxODgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE5OjA1OjM5LjUwNjEzNjE0OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzIxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3BhY2tldC9hZl9wYWNrZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjYwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjYwOlxcdFxcdFxcdHRvX3dyaXRlIC09IGxlbjtcXG4yNjYxOlxcdFxcdFxcdG9mZnNldCA9IDA7XFxuMjY2MjpcXHRcXHRcXHRsZW5fbWF4ID0gUEFHRV9TSVpFO1xcbjI2NjM6XFx0XFx0XFx0bGVuID0gKCh0b193cml0ZSBcXHUwMDNlIGxlbl9tYXgpID8gbGVuX21heCA6IHRvX3dyaXRlKTtcXG4yNjY0OlxcdFxcdH1cXG4yNjY1OlxcdFxcbjI2NjY6XFx0XFx0aWYgKHVubGlrZWx5KCFza2ItXFx1MDAzZWxlbikpXFxuMjY2NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yNjY4OlxcdFxcbjI2Njk6XFx0XFx0cGFja2V0X3BhcnNlX2hlYWRlcnMoc2tiLCBzb2NrKTtcXG4yNjcwOlxcdFxcbjI2NzE6XFx0XFx0cmV0dXJuIHRwX2xlbjtcXG4yNjcyOlxcdH1cXG4yNjczOlxcdFxcbjI2NzQ6XFx0c3RhdGljIGludCB0cGFja2V0X3BhcnNlX2hlYWRlcihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCB2b2lkICpmcmFtZSxcXG4yNjc1OlxcdFxcdFxcdFxcdFxcdGludCBzaXplX21heCwgdm9pZCAqKmRhdGEpXFxuMjY3NjpcXHR7XFxuMjY3NzpcXHRcXHR1bmlvbiB0cGFja2V0X3VoZHIgcGg7XFxuMjY3ODpcXHRcXHR1MzIgdHBfbGVuO1xcbjI2Nzk6XFx0XFx0aW50IG9mZjtcXG4yNjgwOlxcdFxcbjI2ODE6XFx0XFx0cGgucmF3ID0gZnJhbWU7XFxuMjY4MjpcXHRcXG4yNjgzOlxcdFxcdHN3aXRjaCAocG8tXFx1MDAzZXRwX3ZlcnNpb24pIHtcXG4yNjg0OlxcdFxcdGNhc2UgVFBBQ0tFVF9WMzpcXG4yNjg1OlxcdFxcdFxcdGlmIChwaC5oMy1cXHUwMDNldHBfbmV4dF9vZmZzZXQgIT0gMCkge1xcbjI2ODY6XFx0XFx0XFx0XFx0cHJfd2Fybl9vbmNlKFxcXCJ2YXJpYWJsZSBzaXplZCBzbG90IG5vdCBzdXBwb3J0ZWRcXFwiKTtcXG4yNjg3OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI2ODg6XFx0XFx0XFx0fVxcbjI2ODk6XFx0XFx0XFx0dHBfbGVuID0gcGguaDMtXFx1MDAzZXRwX2xlbjtcXG4yNjkwOlxcdFxcdFxcdGJyZWFrO1xcbjI2OTE6XFx0XFx0Y2FzZSBUUEFDS0VUX1YyOlxcbjI2OTI6XFx0XFx0XFx0dHBfbGVuID0gcGguaDItXFx1MDAzZXRwX2xlbjtcXG4yNjkzOlxcdFxcdFxcdGJyZWFrO1xcbjI2OTQ6XFx0XFx0ZGVmYXVsdDpcXG4yNjk1OlxcdFxcdFxcdHRwX2xlbiA9IHBoLmgxLVxcdTAwM2V0cF9sZW47XFxuMjY5NjpcXHRcXHRcXHRicmVhaztcXG4yNjk3OlxcdFxcdH1cXG4yNjk4OlxcdFxcdGlmICh1bmxpa2VseSh0cF9sZW4gXFx1MDAzZSBzaXplX21heCkpIHtcXG4yNjk5OlxcdFxcdFxcdHByX2VycihcXFwicGFja2V0IHNpemUgaXMgdG9vIGxvbmcgKCV1IFxcdTAwM2UgJWQpXFxcXG5cXFwiLCB0cF9sZW4sIHNpemVfbWF4KTtcXG4yNzAwOlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuMjcwMTpcXHRcXHR9XFxuMjcwMjpcXHRcXG4yNzAzOlxcdFxcdGlmICh1bmxpa2VseShwYWNrZXRfc29ja19mbGFnKHBvLCBQQUNLRVRfU09DS19UWF9IQVNfT0ZGKSkpIHtcXG4yNzA0OlxcdFxcdFxcdGludCBvZmZfbWluLCBvZmZfbWF4O1xcbjI3MDU6XFx0XFxuMjcwNjpcXHRcXHRcXHRvZmZfbWluID0gcG8tXFx1MDAzZXRwX2hkcmxlbiAtIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpO1xcbjI3MDc6XFx0XFx0XFx0b2ZmX21heCA9IHBvLVxcdTAwM2V0eF9yaW5nLmZyYW1lX3NpemUgLSB0cF9sZW47XFxuMjcwODpcXHRcXHRcXHRpZiAocG8tXFx1MDAzZXNrLnNrX3R5cGUgPT0gU09DS19ER1JBTSkge1xcbjI3MDk6XFx0XFx0XFx0XFx0c3dpdGNoIChwby1cXHUwMDNldHBfdmVyc2lvbikge1xcbjI3MTA6XFx0XFx0XFx0XFx0Y2FzZSBUUEFDS0VUX1YzOlxcbjI3MTE6XFx0XFx0XFx0XFx0XFx0b2ZmID0gcGguaDMtXFx1MDAzZXRwX25ldDtcXG4yNzEyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI3MTM6XFx0XFx0XFx0XFx0Y2FzZSBUUEFDS0VUX1YyOlxcbjI3MTQ6XFx0XFx0XFx0XFx0XFx0b2ZmID0gcGguaDItXFx1MDAzZXRwX25ldDtcXG4yNzE1OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI3MTY6XFx0XFx0XFx0XFx0ZGVmYXVsdDpcXG4yNzE3OlxcdFxcdFxcdFxcdFxcdG9mZiA9IHBoLmgxLVxcdTAwM2V0cF9uZXQ7XFxuMjcxODpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yNzE5OlxcdFxcdFxcdFxcdH1cXG4yNzIwOlxcdFxcdFxcdH0gZWxzZSB7XFxuMjcyMTpcXHRcXHRcXHRcXHRzd2l0Y2ggKHBvLVxcdTAwM2V0cF92ZXJzaW9uKSB7XFxuMjcyMjpcXHRcXHRcXHRcXHRjYXNlIFRQQUNLRVRfVjM6XFxuMjcyMzpcXHRcXHRcXHRcXHRcXHRvZmYgPSBwaC5oMy1cXHUwMDNldHBfbWFjO1xcbjI3MjQ6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjcyNTpcXHRcXHRcXHRcXHRjYXNlIFRQQUNLRVRfVjI6XFxuMjcyNjpcXHRcXHRcXHRcXHRcXHRvZmYgPSBwaC5oMi1cXHUwMDNldHBfbWFjO1xcbjI3Mjc6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjcyODpcXHRcXHRcXHRcXHRkZWZhdWx0OlxcbjI3Mjk6XFx0XFx0XFx0XFx0XFx0b2ZmID0gcGguaDEtXFx1MDAzZXRwX21hYztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTk6MDU6MzkuNTA2NDEwMDc4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0MDg5NTE5NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHRwYWNrZXRfcGFyc2VfaGVhZGVyYCoqXG5cbk9rYXksIHNvIEknbSBhdCB0aGUgcG9pbnQgd2hlcmUgSSBuZWVkIHRvIHJlYWxseSBkaWcgaW50byBgdHBhY2tldF9wYXJzZV9oZWFkZXJgLiBJJ3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBkYXRhIGZsb3csIGJ1dCBub3cgaXQncyB0aW1lIHRvIHVuZGVyc3RhbmQgdGhlIG5pdHR5LWdyaXR0eSBvZiAqaG93KiB0aGlzIGhlYWRlciBpcyBwYXJzZWQgYW5kLCBjcnVjaWFsbHksIGhvdyBpdCBnZXRzIGludGVncmF0ZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGlwZWxpbmUuIExldCdzIHRyYWNlIGl0IGFuZCBmaWd1cmUgb3V0IHRoZSBjYWxsIHNpdGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24ncyByZXNwb25zaWJpbGl0eSwgYW5kIHdoYXQgZGF0YSBpdCByZWxpZXMgb24uIEkgd2FudCB0byBzZWUgZXhhY3RseSBob3cgdGhlIGhlYWRlciBpbmZvcm1hdGlvbiBpcyBleHRyYWN0ZWQsIHZhbGlkYXRlZCAoaWYgYXQgYWxsISksIGFuZCBoYW5kZWQgb2ZmLiBBcmUgdGhlcmUgYW55IGFzc3VtcHRpb25zIGJlaW5nIG1hZGUgYWJvdXQgdGhlIHVuZGVybHlpbmcgbmV0d29yayBhZGFwdGVyIG9yIGxpbmsgbGF5ZXI/IEFyZSB0aGVyZSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciB2dWxuZXJhYmlsaXRpZXM/IFRpbWUgdG8gZmlyZSB1cCB0aGUgZGVidWdnZXIgYW5kIHN0YXJ0IHdhbGtpbmcgdGhlIGNvZGUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYW55IGVycm9yIGhhbmRsaW5nIHBhdGhzIGFuZCBob3cgdGhvc2UgYXJlIG1hbmFnZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ1NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTk6MDU6NDQuOTE1MzY0NjIyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MzUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3MzA6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjczMTpcXHRcXHRcXHRcXHR9XFxuMjczMjpcXHRcXHRcXHR9XFxuMjczMzpcXHRcXHRcXHRpZiAodW5saWtlbHkoKG9mZiBcXHUwMDNjIG9mZl9taW4pIHx8IChvZmZfbWF4IFxcdTAwM2Mgb2ZmKSkpXFxuMjczNDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yNzM1OlxcdFxcdH0gZWxzZSB7XFxuMjczNjpcXHRcXHRcXHRvZmYgPSBwby1cXHUwMDNldHBfaGRybGVuIC0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9sbCk7XFxuMjczNzpcXHRcXHR9XFxuMjczODpcXHRcXG4yNzM5OlxcdFxcdCpkYXRhID0gZnJhbWUgKyBvZmY7XFxuMjc0MDpcXHRcXHRyZXR1cm4gdHBfbGVuO1xcbjI3NDE6XFx0fVxcbjI3NDI6XFx0XFxuMjc0MzpcXHRzdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZylcXG4yNzQ0OlxcdHtcXG4yNzQ1OlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xcbjI3NDY6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4yNzQ3OlxcdFxcdHN0cnVjdCB2aXJ0aW9fbmV0X2hkciB2bmV0X2hkcjtcXG4yNzQ4OlxcdFxcdGJvb2wgaGFzX3ZuZXRfaGRyID0gZmFsc2U7XFxuMjc0OTpcXHRcXHRzdHJ1Y3Qgc29ja2NtX2Nvb2tpZSBzb2NrYztcXG4yNzUwOlxcdFxcdF9fYmUxNiBwcm90bztcXG4yNzUxOlxcdFxcdGludCBlcnIsIHJlc2VydmUgPSAwO1xcbjI3NTI6XFx0XFx0dm9pZCAqcGg7XFxuMjc1MzpcXHRcXHRERUNMQVJFX1NPQ0tBRERSKHN0cnVjdCBzb2NrYWRkcl9sbCAqLCBzYWRkciwgbXNnLVxcdTAwM2Vtc2dfbmFtZSk7XFxuMjc1NDpcXHRcXHRib29sIG5lZWRfd2FpdCA9ICEobXNnLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xcbjI3NTU6XFx0XFx0aW50IHZuZXRfaGRyX3N6ID0gUkVBRF9PTkNFKHBvLVxcdTAwM2V2bmV0X2hkcl9zeik7XFxuMjc1NjpcXHRcXHR1bnNpZ25lZCBjaGFyICphZGRyID0gTlVMTDtcXG4yNzU3OlxcdFxcdGludCB0cF9sZW4sIHNpemVfbWF4O1xcbjI3NTg6XFx0XFx0dm9pZCAqZGF0YTtcXG4yNzU5OlxcdFxcdGludCBsZW5fc3VtID0gMDtcXG4yNzYwOlxcdFxcdGludCBzdGF0dXMgPSBUUF9TVEFUVVNfQVZBSUxBQkxFO1xcbjI3NjE6XFx0XFx0aW50IGhhcmRfaGVhZGVyX2xlbiwgaGxlbiwgdGxlbiwgY29weWxlbiA9IDA7XFxuMjc2MjpcXHRcXHRsb25nIHRpbWVvO1xcbjI3NjM6XFx0XFxuMjc2NDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZwby1cXHUwMDNlcGdfdmVjX2xvY2spO1xcbjI3NjU6XFx0XFxuMjc2NjpcXHRcXHQvKiBwYWNrZXRfc2VuZG1zZygpIGNoZWNrIG9uIHR4X3JpbmcucGdfdmVjIHdhcyBsb2NrbGVzcyxcXG4yNzY3OlxcdFxcdCAqIHdlIG5lZWQgdG8gY29uZmlybSBpdCB1bmRlciBwcm90ZWN0aW9uIG9mIHBnX3ZlY19sb2NrLlxcbjI3Njg6XFx0XFx0ICovXFxuMjc2OTpcXHRcXHRpZiAodW5saWtlbHkoIXBvLVxcdTAwM2V0eF9yaW5nLnBnX3ZlYykpIHtcXG4yNzcwOlxcdFxcdFxcdGVyciA9IC1FQlVTWTtcXG4yNzcxOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjI3NzI6XFx0XFx0fVxcbjI3NzM6XFx0XFx0aWYgKGxpa2VseShzYWRkciA9PSBOVUxMKSkge1xcbjI3NzQ6XFx0XFx0XFx0ZGV2XFx0PSBwYWNrZXRfY2FjaGVkX2Rldl9nZXQocG8pO1xcbjI3NzU6XFx0XFx0XFx0cHJvdG9cXHQ9IFJFQURfT05DRShwby1cXHUwMDNlbnVtKTtcXG4yNzc2OlxcdFxcdH0gZWxzZSB7XFxuMjc3NzpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjI3Nzg6XFx0XFx0XFx0aWYgKG1zZy1cXHUwMDNlbXNnX25hbWVsZW4gXFx1MDAzYyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2xsKSlcXG4yNzc5OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxOTowNTo0NC45MTU2MzAwMDJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODE4Mzk1NjI2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENoYW5nZSB0byBgdHBfbGVuYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUgY2hhbmdlLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCBwb3RlbnRpYWwgc2lnbmVkbmVzcyBpc3N1ZXMsIHBhcnRpY3VsYXJseSB3aGVuIGRlYWxpbmcgd2l0aCBzaXplcyBvciBsZW5ndGhzLiBJdCBsb29rcyBsaWtlIGB0cF9sZW5gIHdhcyBwcmV2aW91c2x5IGFuIGBpbnRgLCBidXQgaXQncyBub3cgYmVpbmcgY2hhbmdlZCB0byBhIGB1MzJgIChvciB1bnNpZ25lZCBpbnRlZ2VyIHdpdGggMzIgYml0cykuIFRoZSBvbGQgY29kZSBjb21wYXJlZCBgdHBfbGVuYCB3aXRoIGBzaXplX21heGAsIHdoaWNoIGlzIHBhc3NlZCBhcyBhbiBgaW50YC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0LCBpZiBgdHBfbGVuYCB3YXMgYSBsYXJnZSwgXCJuZWdhdGl2ZVwiIGBpbnRgIChlZmZlY3RpdmVseSBhIGxhcmdlIHVuc2lnbmVkIHZhbHVlKSwgdGhlIG9yaWdpbmFsIHNpZ25lZCBjb21wYXJpc29uIGNvdWxkIGhhdmUgaW5jb3JyZWN0bHkgZXZhbHVhdGVkIHRvIGZhbHNlIGlmIGBzaXplX21heGAgd2FzIHBvc2l0aXZlLiBUaGlzIHdvdWxkIGFsbG93IGEgbmVnYXRpdmUgYHRwX2xlbmAgdmFsdWUgdG8gc2xpcCB0aHJvdWdoLCBsZWFkaW5nIHRvIHNlcmlvdXMgcHJvYmxlbXMgbGF0ZXIgb24gd2hlbiB1c2VkIHRvIGRldGVybWluZSBidWZmZXIgc2l6ZXMuIFRoZSBmaXggYWRkcmVzc2VzIHRoaXMgYnkgZm9yY2luZyBhbiB1bnNpZ25lZCBjb21wYXJpc29uIChgdTMyYCB2cyBgaW50YCB0cmlnZ2VycyBwcm9tb3Rpb24gb2YgdGhlIHNpZ25lZCBgaW50YCB0byBgdW5zaWduZWQgaW50YCksIHNvIGxhcmdlIHZhbHVlcyBub3cgY29ycmVjdGx5IHRyaWdnZXIgdGhlIGJvdW5kcyBjaGVjay4gV2Ugd2FudCB0aGUgY29tcGFyaXNvbiB0byByZWplY3QgYW55IHZhbHVlIHRoYXQgY291bGQgYmUgcHJvYmxlbWF0aWMuXG5cbk5vdywgSSBuZWVkIHRvIHRob3JvdWdobHkgYXNzZXNzIGlmIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gSSBhbHdheXMgbG9vayBmb3IgdGhpcyFcblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duOlxuXG4xLiAgSXMgYHRwX2xlbmAgaXRzZWxmIHVuaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZT8gTm8sIGl0J3MgaW5pdGlhbGl6ZWQgaW4gYWxsIHRoZSBzd2l0Y2ggY2FzZXMgKGBUUEFDS0VUX1YzYCwgYFRQQUNLRVRfVjJgLCBhbmQgdGhlIGRlZmF1bHQgY2FzZSksIHNvIHRoYXQgaXMgbm90IGEgY29uY2Vybi5cbjIuICBEb2VzIHRoaXMgcGF0Y2ggKmludHJvZHVjZSogYW55IGluc3RhbmNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2U/IEkgbmVlZCB0byBjaGVjayBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG9yIHBhZGRpbmcgbWlnaHQgbm90IGJlIGluaXRpYWxpemVkLCBidXQgSSBkbyBub3QgYmVsaWV2ZSB0aGlzIGlzIGEgZmFjdG9yIGhlcmUuXG4zLiAgRG9lcyB0aGUgcGF0Y2ggaW50cm9kdWNlICphbnkqIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gVGhlIGxvZ2ljIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYW5kIGRvZXNuJ3QgcmVseSBvbiB1bmluaXRpYWxpemVkIGRhdGEsIHNvIEknbSBub3Qgc2VlaW5nIHRoYXQuXG40LiAgQXJlIHRoZXJlIGFueSBhbGxvY2F0aW9ucyBvciBpbml0aWFsaXphdGlvbnMgb2YgY29tcGxleCBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHByb2JsZW1hdGljPyBObywgbm90aGluZyBqdW1wcyBvdXQgYXQgbWUuXG41LiAgQ291bGQgdGhlIGNoYW5nZSB0byBgdHBfbGVuYCBpbnRyb2R1Y2UgYW55IGJvdW5kcyBjaGVjayBmbGF3cyBvciBsZW5ndGggY2FsY3VsYXRpb25zLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM/IFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZyFcblxuVGhlIGtleSBpcyB0aGF0IGlmIGB0cF9sZW5gICp3YXMqIG5lZ2F0aXZlIGJlZm9yZSwgd291bGQgaXQgaGF2ZSBjYXVzZWQgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3Igb3ZlcmZsb3cgaW4gdGhlICpwYWNrZXQgdHJhbnNtaXNzaW9uKiBwaGFzZT8gSXQgbG9va3MgbGlrZSBgdHBfbGVuYCBpcyByZXR1cm5lZCBieSBgdHBhY2tldF9wYXJzZV9oZWFkZXJgIGFuZCB1c2VkIGluIGB0cGFja2V0X3NuZGAuIEknbGwgbmVlZCB0byBjaGVjayBjYXJlZnVsbHkgaG93IHRoZSByZXR1cm4gdmFsdWUgZnJvbSBgdHBhY2tldF9wYXJzZV9oZWFkZXJgIGlzIGhhbmRsZWQgaW4gYHRwYWNrZXRfc25kYC4gSWYgYHRwX2xlbmAgaXMgbGVzcyB0aGFuIHplcm8sIGB0cGFja2V0X3NuZGAgZG9lcyBzZWVtIHRvIGhhdmUgYSBjaGVjaywgYnV0IGl0IG5lZWRzIHRvIGJlIHZlcmlmaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTAxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTk6MDU6NTMuMDk5NTg4NTQyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI4MzA6XFx0XFx0XFx0XFx0XFx0dGltZW8gPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dChcXHUwMDI2cG8tXFx1MDAzZXNrYl9jb21wbGV0aW9uLCB0aW1lbyk7XFxuMjgzMTpcXHRcXHRcXHRcXHRcXHRpZiAodGltZW8gXFx1MDAzYz0gMCkge1xcbjI4MzI6XFx0XFx0XFx0XFx0XFx0XFx0ZXJyID0gIXRpbWVvID8gLUVUSU1FRE9VVCA6IC1FUkVTVEFSVFNZUztcXG4yODMzOlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X3B1dDtcXG4yODM0OlxcdFxcdFxcdFxcdFxcdH1cXG4yODM1OlxcdFxcdFxcdFxcdFxcdC8qIGNoZWNrIGZvciBhZGRpdGlvbmFsIGZyYW1lcyAqL1xcbjI4MzY6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjgzNzpcXHRcXHRcXHRcXHR9IGVsc2VcXG4yODM4OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI4Mzk6XFx0XFx0XFx0fVxcbjI4NDA6XFx0XFxuMjg0MTpcXHRcXHRcXHRza2IgPSBOVUxMO1xcbjI4NDI6XFx0XFx0XFx0dHBfbGVuID0gdHBhY2tldF9wYXJzZV9oZWFkZXIocG8sIHBoLCBzaXplX21heCwgXFx1MDAyNmRhdGEpO1xcbjI4NDM6XFx0XFx0XFx0aWYgKHRwX2xlbiBcXHUwMDNjIDApXFxuMjg0NDpcXHRcXHRcXHRcXHRnb3RvIHRwYWNrZXRfZXJyb3I7XFxuMjg0NTpcXHRcXG4yODQ2OlxcdFxcdFxcdHN0YXR1cyA9IFRQX1NUQVRVU19TRU5EX1JFUVVFU1Q7XFxuMjg0NzpcXHRcXHRcXHRobGVuID0gTExfUkVTRVJWRURfU1BBQ0VfRVgoZGV2LCBoYXJkX2hlYWRlcl9sZW4pO1xcbjI4NDg6XFx0XFx0XFx0dGxlbiA9IGRldi1cXHUwMDNlbmVlZGVkX3RhaWxyb29tO1xcbjI4NDk6XFx0XFx0XFx0aWYgKHZuZXRfaGRyX3N6KSB7XFxuMjg1MDpcXHRcXHRcXHRcXHRkYXRhICs9IHZuZXRfaGRyX3N6O1xcbjI4NTE6XFx0XFx0XFx0XFx0dHBfbGVuIC09IHZuZXRfaGRyX3N6O1xcbjI4NTI6XFx0XFx0XFx0XFx0aWYgKHRwX2xlbiBcXHUwMDNjIDApIHtcXG4yODUzOlxcdFxcdFxcdFxcdFxcdHRwX2xlbiA9IC1FSU5WQUw7XFxuMjg1NDpcXHRcXHRcXHRcXHRcXHRnb3RvIHRwYWNrZXRfZXJyb3I7XFxuMjg1NTpcXHRcXHRcXHRcXHR9XFxuMjg1NjpcXHRcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnZuZXRfaGRyLCBkYXRhIC0gdm5ldF9oZHJfc3osIHNpemVvZih2bmV0X2hkcikpO1xcbjI4NTc6XFx0XFx0XFx0XFx0aWYgKF9fcGFja2V0X3NuZF92bmV0X3BhcnNlKFxcdTAwMjZ2bmV0X2hkciwgdHBfbGVuKSkge1xcbjI4NTg6XFx0XFx0XFx0XFx0XFx0dHBfbGVuID0gLUVJTlZBTDtcXG4yODU5OlxcdFxcdFxcdFxcdFxcdGdvdG8gdHBhY2tldF9lcnJvcjtcXG4yODYwOlxcdFxcdFxcdFxcdH1cXG4yODYxOlxcdFxcdFxcdFxcdGNvcHlsZW4gPSBfX3ZpcnRpbzE2X3RvX2NwdSh2aW9fbGUoKSxcXG4yODYyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICB2bmV0X2hkci5oZHJfbGVuKTtcXG4yODYzOlxcdFxcdFxcdFxcdGhhc192bmV0X2hkciA9IHRydWU7XFxuMjg2NDpcXHRcXHRcXHR9XFxuMjg2NTpcXHRcXHRcXHRjb3B5bGVuID0gbWF4X3QoaW50LCBjb3B5bGVuLCBoYXJkX2hlYWRlcl9sZW4pO1xcbjI4NjY6XFx0XFx0XFx0c2tiID0gc29ja19hbGxvY19zZW5kX3NrYihcXHUwMDI2cG8tXFx1MDAzZXNrLFxcbjI4Njc6XFx0XFx0XFx0XFx0XFx0aGxlbiArIHRsZW4gKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2xsKSArXFxuMjg2ODpcXHRcXHRcXHRcXHRcXHQoY29weWxlbiAtIGhhcmRfaGVhZGVyX2xlbiksXFxuMjg2OTpcXHRcXHRcXHRcXHRcXHQhbmVlZF93YWl0LCBcXHUwMDI2ZXJyKTtcXG4yODcwOlxcdFxcbjI4NzE6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSkge1xcbjI4NzI6XFx0XFx0XFx0XFx0Lyogd2UgYXNzdW1lIHRoZSBzb2NrZXQgd2FzIGluaXRpYWxseSB3cml0ZWFibGUgLi4uICovXFxuMjg3MzpcXHRcXHRcXHRcXHRpZiAobGlrZWx5KGxlbl9zdW0gXFx1MDAzZSAwKSlcXG4yODc0OlxcdFxcdFxcdFxcdFxcdGVyciA9IGxlbl9zdW07XFxuMjg3NTpcXHRcXHRcXHRcXHRnb3RvIG91dF9zdGF0dXM7XFxuMjg3NjpcXHRcXHRcXHR9XFxuMjg3NzpcXHRcXHRcXHR0cF9sZW4gPSB0cGFja2V0X2ZpbGxfc2tiKHBvLCBza2IsIHBoLCBkZXYsIGRhdGEsIHRwX2xlbiwgcHJvdG8sXFxuMjg3ODpcXHRcXHRcXHRcXHRcXHRcXHQgIGFkZHIsIGhsZW4sIGNvcHlsZW4sIGhhcmRfaGVhZGVyX2xlbixcXG4yODc5OlxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnNvY2tjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTk6MDU6NTMuMDk5ODM0MzcyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNDI0NTc0ODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCdzIFNhbml0aXplciBSZXF1aXJlbWVudHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgaXNzdWUgYW5kIHRoZW4gZGV0ZXJtaW5lIGlmIGl0IGludHJvZHVjZXMgYW55IEtNU0FOLXJlbGV2YW50IGNvbmNlcm5zLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgYnVnIGluIHRoZSBgdHBhY2tldF9wYXJzZV9oZWFkZXJgIGZ1bmN0aW9uIHdoZXJlIGEgc2lnbmVkbmVzcyBpc3N1ZSBpbiB0aGUgY29tcGFyaXNvbiBvZiBgdHBfbGVuYCBhbGxvd2VkIG92ZXJzaXplZCBmcmFtZXMgdG8gYnlwYXNzIHByb3BlciB2YWxpZGF0aW9uLiBTcGVjaWZpY2FsbHksIGEgbGFyZ2UgdW5zaWduZWQgdmFsdWUgZm9yIGB0cF9sZW5gIGNvdWxkIGJlIG1pc2ludGVycHJldGVkIGFzIGEgbmVnYXRpdmUgYGludGAsIGxlYWRpbmcgdG8gaW5jb3JyZWN0IGxlbmd0aCBjaGVja3MuIFRoaXMgcGF0Y2ggY2hhbmdlcyBgdHBfbGVuYCBmcm9tIGFuIGBpbnRgIHRvIGEgYHUzMmAgdG8gZW5zdXJlIHByb3BlciBjb21wYXJpc29uIHdpdGggYHNpemVfbWF4YCBhbmQgY29ycmVjdCByZWplY3Rpb24gb2Ygb3ZlcnNpemVkIGZyYW1lcy5cblxuTXkgcHJpbWFyeSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeS4gRG9lcyB0aGlzIGNoYW5nZSBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLCBwb3RlbnRpYWwgc3RydWN0IHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvcGllcyB0byB1c2Vyc3BhY2U/IExldCdzIHZlcmlmeS4gVGhlIGxvZ2ljIHNob3dzIGB0cF9sZW5gIGlzIGRlcml2ZWQgZnJvbSBgcGguaDMtXHUwMDNldHBfbGVuYCwgYHBoLmgyLVx1MDAzZXRwX2xlbmAsIG9yIGBwaC5oMS1cdTAwM2V0cF9sZW5gIGFjcm9zcyBhbGwgY29udHJvbCBmbG93IHBhdGhzIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50LiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIHRoZXJlJ3Mgbm8gZXZpZGVuY2Ugb2YgYW55IHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlIHByb2JsZW0gaXMgcHVyZWx5IGEgc2lnbmVkIGludGVnZXIgY29tcGFyaXNvbi9vdmVyZmxvdyBidWcgaW4gbGVuZ3RoIHZhbGlkYXRpb24uIE1lbW9yeSBzYWZldHkgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW5jb3JyZWN0IGxlbmd0aCBjaGVja3MsIHN1Y2ggYXMgYnVmZmVyIG92ZXJmbG93cyBvciBvdXQtb2YtYm91bmRzIHJlYWRzLCBhcmUgYWxyZWFkeSBhZGRyZXNzZWQgYnkgS0FTQU4uXG5cbkkgbmVlZCB0byBjb25maXJtIHRoYXQgS0FTQU4gYW5kIEtNU0FOIGFyZSBjb3JyZWN0bHkgYWRkcmVzc2VkLiBLQVNBTiBpcyB0aGUga2VybmVsIGFkZHJlc3Mgc2FuaXRpemVyLCBhbmQgSSBrbm93IGl0IGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgZG91YmxlLWZyZWVzLCBhbmQgYnVmZmVyIG92ZXJmbG93cy4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBzcGVjaWZpY2FsbHkgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBhbmQgaXQgZGV0ZWN0cyBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3Mgc3RlbW1pbmcgZnJvbSB0aGlzLlxuXG5TaW5jZSB0aGlzIHBhdGNoICpkb2Vzbid0KiBpbnRyb2R1Y2Ugb3IgdXRpbGl6ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIGl0IGxvb2tzIGxpa2UgS01TQU4gaXNuJ3QgbmVlZGVkIGhlcmUuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIGZpeGluZyBhIHNpZ25lZG5lc3MgYnVnLCBhbmQgdGhlIGludGVnZXIgYHRwX2xlbmAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEtNU0FOIGlzIG5vdCB0cmlnZ2VyZWQsIGFuZCBLQVNBTiBzaG91bGQgaGFuZGxlIGFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBkdWUgdG8gaW5jb3JyZWN0IGxlbmd0aC5cblxuTGV0IG1lIGRvdWJsZS1jaGVjay4gVGhlIHBhdGNoIGZpeGVzIGEgc2lnbmVkbmVzcyBjb21wYXJpc29uIGJ1ZyBpbiBgdHBhY2tldF9wYXJzZV9oZWFkZXJgIGJ5IGNoYW5naW5nIGB0cF9sZW5gIGZyb20gYGludGAgdG8gYHUzMmAsIHdoaWNoIGVuc3VyZXMgdGhhdCBvdmVyc2l6ZWQgZnJhbWUgbGVuZ3RocyBhcmUgcHJvcGVybHkgcmVqZWN0ZWQgd2l0aCBgLUVNU0dTSVpFYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcy4gYHRwX2xlbmAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCBhY3Jvc3MgYWxsIGNvbnRyb2wgZmxvdyBicmFuY2hlcyBpbiBgdHBhY2tldF9wYXJzZV9oZWFkZXJgLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIG9yIHdyaXRlcyByZXN1bHRpbmcgZnJvbSBpbmNvcnJlY3QgbGVuZ3RoIG9yIG9mZnNldCB2YWxpZGF0aW9uIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLiBJdCdzIGNsZWFyLlxuXG5UaGVyZWZvcmUsIEknbSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NzYsIk91dHB1dFRva2VucyI6MjA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjkyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTk6MDY6MDMuNTI0NDExMzQ2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBzaWduZWRuZXNzIGNvbXBhcmlzb24gaXNzdWUgaW4gYHRwYWNrZXRfcGFyc2VfaGVhZGVyKClgIGJ5IGNoYW5naW5nIGB0cF9sZW5gIGZyb20gYGludGAgdG8gYHUzMmAsIGVuc3VyaW5nIHRoYXQgbGFyZ2UgcGFja2V0IGxlbmd0aCB2YWx1ZXMgYXJlIHByb3Blcmx5IHRyZWF0ZWQgYXMgdW5zaWduZWQgd2hlbiB2YWxpZGF0ZWQgYWdhaW5zdCBgc2l6ZV9tYXhgLlxcblxcbktNU0FOIGlzIG5vdCBuZWVkZWQgYmVjYXVzZTpcXG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkLCByZWFkLCBvciBleHBvc2VkLiBUaGUgdmFyaWFibGUgYHRwX2xlbmAgaXMgZXhwbGljaXRseSBhc3NpZ25lZCBpbiBhbGwgYnJhbmNoZXMgb2YgdGhlIGBwby1cXHUwMDNldHBfdmVyc2lvbmAgc3dpdGNoIHN0YXRlbWVudCBiZWZvcmUgYW55IHJlYWRzLlxcbjIuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS5cXG4zLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgYnVncyByZWxhdGVkIHRvIGluY29ycmVjdCBsZW5ndGggYm91bmRzIGNoZWNraW5nIChlLmcuLCBvdXQtb2YtYm91bmRzIGJ1ZmZlciBhY2Nlc3MgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nKSBhcmUgb3V0LW9mLWJvdW5kcyBlcnJvcnMgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBzaWduZWRuZXNzIGNvbXBhcmlzb24gaXNzdWUgaW4gYHRwYWNrZXRfcGFyc2VfaGVhZGVyKClgIGJ5IGNoYW5naW5nIGB0cF9sZW5gIGZyb20gYGludGAgdG8gYHUzMmAsIGVuc3VyaW5nIHRoYXQgbGFyZ2UgcGFja2V0IGxlbmd0aCB2YWx1ZXMgYXJlIHByb3Blcmx5IHRyZWF0ZWQgYXMgdW5zaWduZWQgd2hlbiB2YWxpZGF0ZWQgYWdhaW5zdCBgc2l6ZV9tYXhgLlxcblxcbktNU0FOIGlzIG5vdCBuZWVkZWQgYmVjYXVzZTpcXG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkLCByZWFkLCBvciBleHBvc2VkLiBUaGUgdmFyaWFibGUgYHRwX2xlbmAgaXMgZXhwbGljaXRseSBhc3NpZ25lZCBpbiBhbGwgYnJhbmNoZXMgb2YgdGhlIGBwby1cXHUwMDNldHBfdmVyc2lvbmAgc3dpdGNoIHN0YXRlbWVudCBiZWZvcmUgYW55IHJlYWRzLlxcbjIuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS5cXG4zLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgYnVncyByZWxhdGVkIHRvIGluY29ycmVjdCBsZW5ndGggYm91bmRzIGNoZWNraW5nIChlLmcuLCBvdXQtb2YtYm91bmRzIGJ1ZmZlciBhY2Nlc3MgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nKSBhcmUgb3V0LW9mLWJvdW5kcyBlcnJvcnMgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowt6rwt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-30 18:18:53 +0000 UTC FinishedAt: 2026-08-30 19:06:05 +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": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PACKET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PACKET" ], "series_id": "688c2f49-e60d-4410-9da0-8bdf7a1d0649" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "packet_sendmsg", "tpacket_snd", "packet_setsockopt" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBQ0tFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhY2tldF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3RwYWNrZXRfc25kJiMzNDssCiAgICAmIzM0O3BhY2tldF9zZXRzb2Nrb3B0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgc2lnbmVkbmVzcyBjb21wYXJpc29uIGlzc3VlIGluIGB0cGFja2V0X3BhcnNlX2hlYWRlcigpYCBieSBjaGFuZ2luZyBgdHBfbGVuYCBmcm9tIGBpbnRgIHRvIGB1MzJgLCBlbnN1cmluZyB0aGF0IGxhcmdlIHBhY2tldCBsZW5ndGggdmFsdWVzIGFyZSBwcm9wZXJseSB0cmVhdGVkIGFzIHVuc2lnbmVkIHdoZW4gdmFsaWRhdGVkIGFnYWluc3QgYHNpemVfbWF4YC5cblxuS01TQU4gaXMgbm90IG5lZWRlZCBiZWNhdXNlOlxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCwgcmVhZCwgb3IgZXhwb3NlZC4gVGhlIHZhcmlhYmxlIGB0cF9sZW5gIGlzIGV4cGxpY2l0bHkgYXNzaWduZWQgaW4gYWxsIGJyYW5jaGVzIG9mIHRoZSBgcG8tXHUwMDNldHBfdmVyc2lvbmAgc3dpdGNoIHN0YXRlbWVudCBiZWZvcmUgYW55IHJlYWRzLlxuMi4gVGhlIHBhdGNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLlxuMy4gQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGJ1Z3MgcmVsYXRlZCB0byBpbmNvcnJlY3QgbGVuZ3RoIGJvdW5kcyBjaGVja2luZyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBidWZmZXIgYWNjZXNzIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZykgYXJlIG91dC1vZi1ib3VuZHMgZXJyb3JzIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCBzaXplIHZhbGlkYXRpb24gaW4gdHBhY2tldF9wYXJzZV9oZWFkZXIoKSBieSBjaGFuZ2luZyB0cF9sZW4gZnJvbSBzaWduZWQgaW50IHRvIHUzMiwgcHJldmVudGluZyBzaWduZWQgaW50ZWdlciBjb21wYXJpc29uIGJ5cGFzc2VzIGR1cmluZyBBRl9QQUNLRVQgcmluZyBidWZmZXIgdHJhbnNtaXNzaW9uICh0cGFja2V0X3NuZCkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0d29ya2luZyBzb2NrZXQgbG9naWMgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTk6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjYjQ0YTM4MmIxMTVmNWVmOTk1ZjkyOTAzNTI1NDU3NDY2ZmY2Mzc3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMzAgMTk6MDQ6MTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcbmluZGV4IGIyMmNkYTMyMjEzNjMuLjc2YmRlNzkwNmQ0OTQgMTAwNjQ0XG4tLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXG5AQCAtMjY3NSw3ICYjNDM7MjY3NSw4IEBAIHN0YXRpYyBpbnQgdHBhY2tldF9wYXJzZV9oZWFkZXIoc3RydWN0IHBhY2tldF9zb2NrICpwbywgdm9pZCAqZnJhbWUsXG4gXHRcdFx0XHRpbnQgc2l6ZV9tYXgsIHZvaWQgKipkYXRhKVxuIHtcbiBcdHVuaW9uIHRwYWNrZXRfdWhkciBwaDtcbi1cdGludCB0cF9sZW4sIG9mZjtcbiYjNDM7XHR1MzIgdHBfbGVuO1xuJiM0MztcdGludCBvZmY7XG4gXG4gXHRwaC5yYXcgPSBmcmFtZTtcbiBcbkBAIC0yNjk1LDcgJiM0MzsyNjk2LDcgQEAgc3RhdGljIGludCB0cGFja2V0X3BhcnNlX2hlYWRlcihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCB2b2lkICpmcmFtZSxcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHRpZiAodW5saWtlbHkodHBfbGVuIFx1MDAzZSBzaXplX21heCkpIHtcbi1cdFx0cHJfZXJyKFwmIzM0O3BhY2tldCBzaXplIGlzIHRvbyBsb25nICglZCBcdTAwM2UgJWQpXFxuXCYjMzQ7LCB0cF9sZW4sIHNpemVfbWF4KTtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtwYWNrZXQgc2l6ZSBpcyB0b28gbG9uZyAoJXUgXHUwMDNlICVkKVxcblwmIzM0OywgdHBfbGVuLCBzaXplX21heCk7XG4gXHRcdHJldHVybiAtRU1TR1NJWkU7XG4gXHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTk6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFDS0VUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFja2V0X3NlbmRtc2cmIzM0OywKICAgICYjMzQ7dHBhY2tldF9zbmQmIzM0OywKICAgICYjMzQ7cGFja2V0X3NldHNvY2tvcHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHNpemUgdmFsaWRhdGlvbiBpbiB0cGFja2V0X3BhcnNlX2hlYWRlcigpIGJ5IGNoYW5naW5nIHRwX2xlbiBmcm9tIHNpZ25lZCBpbnQgdG8gdTMyLCBwcmV2ZW50aW5nIHNpZ25lZCBpbnRlZ2VyIGNvbXBhcmlzb24gYnlwYXNzZXMgZHVyaW5nIEFGX1BBQ0tFVCByaW5nIGJ1ZmZlciB0cmFuc21pc3Npb24gKHRwYWNrZXRfc25kKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBuZXR3b3JraW5nIHNvY2tldCBsb2dpYyBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNiNDRhMzgyYjExNWY1ZWY5OTVmOTI5MDM1MjU0NTc0NjZmZjYzNzcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAzMCAxOTowNDoxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCmluZGV4IGIyMmNkYTMyMjEzNjMuLjc2YmRlNzkwNmQ0OTQgMTAwNjQ0Ci0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwpAQCAtMjY3NSw3ICYjNDM7MjY3NSw4IEBAIHN0YXRpYyBpbnQgdHBhY2tldF9wYXJzZV9oZWFkZXIoc3RydWN0IHBhY2tldF9zb2NrICpwbywgdm9pZCAqZnJhbWUsCiAJCQkJaW50IHNpemVfbWF4LCB2b2lkICoqZGF0YSkKIHsKIAl1bmlvbiB0cGFja2V0X3VoZHIgcGg7Ci0JaW50IHRwX2xlbiwgb2ZmOwomIzQzOwl1MzIgdHBfbGVuOwomIzQzOwlpbnQgb2ZmOwogCiAJcGgucmF3ID0gZnJhbWU7CiAKQEAgLTI2OTUsNyAmIzQzOzI2OTYsNyBAQCBzdGF0aWMgaW50IHRwYWNrZXRfcGFyc2VfaGVhZGVyKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHZvaWQgKmZyYW1lLAogCQlicmVhazsKIAl9CiAJaWYgKHVubGlrZWx5KHRwX2xlbiAmZ3Q7IHNpemVfbWF4KSkgewotCQlwcl9lcnIoJiMzNDtwYWNrZXQgc2l6ZSBpcyB0b28gbG9uZyAoJWQgJmd0OyAlZClcbiYjMzQ7LCB0cF9sZW4sIHNpemVfbWF4KTsKJiM0MzsJCXByX2VycigmIzM0O3BhY2tldCBzaXplIGlzIHRvbyBsb25nICgldSAmZ3Q7ICVkKVxuJiMzNDssIHRwX2xlbiwgc2l6ZV9tYXgpOwogCQlyZXR1cm4gLUVNU0dTSVpFOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTkxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIFJldmlldyBmb3IgU3l6a2FsbGVyIEZ1enppbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZyBhcyBJIGxvb2sgYXQgdGhpcyBwYXRjaC4gRmlyc3QsIGl0IHNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQga2VybmVsIHBhdGNoIHJldmlldyBmb3Igc3l6a2FsbGVyIGZ1enppbmcgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBsaWtlbHkgYSBtYWludGVuYW5jZSBvciBRQSB0YXNrLCB3aGljaCBtZWFucyBpdCBzaG91bGQgYmUgcmVsYXRpdmVseSBzYWZlIHRvIGhhbmRsZS4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcGF0Y2ggZGlmZiBpdHNlbGYuIEkgc2VlIGEgY2hhbmdlIGluIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYC4gU3BlY2lmaWNhbGx5LCB0aGVyZSYjMzk7cyBhIG1vZGlmaWNhdGlvbiBhcm91bmQgbGluZSAyNjc1LiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoaXMgY29kZSBzbmlwcGV0OgoKYGBgZGlmZgpAQCAtMjY3NSw3ICYjNDM7MjY3NSw4IEBAIHN0YXRpYyBpbnQgdHBhY2tldF9wYXJzZV9oZWFkZXIoc3RydWN0IHBhY2tldF9zb2NrICpwbywgdm9pZCAqZnJhbWUsCiAJCQkJaW50IHNpemVfbWF4LCB2b2lkICoqZGF0YSkKIHsKIAl1bmlvbiB0cGFja2V0X3VoZHIgcGg7Ci0JaW50IHRwX2xlbiwgb2ZmOwomIzQzOwl1MzIgdHBfbGVuOwomIzQzOwlpbnQgb2ZmOwogCiAJcGgucmF3ID0gZnJhbWU7CiAKYGBgCgpJdCBzZWVtcyBsaWtlIHRoZXkmIzM5O3ZlIGNoYW5nZWQgdGhlIHR5cGUgb2YgYHRwX2xlbmAgZnJvbSBgaW50YCB0byBgdTMyYC4gVGhpcyBjb3VsZCBiZSBzaWduaWZpY2FudCwgYmVjYXVzZSB0aGUgY29kZSB0aGVuIGNoZWNrcyBgdHBfbGVuYCBhZ2FpbnN0IGBzaXplX21heGAuIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgY291bGQgaGF2ZSBhbiBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQgYnkgdXNpbmcgYW4gdW5zaWduZWQgaW50LgoKSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGluc3BlY3QgYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgIG5lYXIgdGhpcyBsaW5lLCBzbyBJIGNhbiBjb25maXJtIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNoYW5nZXMuIEkmIzM5O2xsIHVzZSBteSB1c3VhbCB0b29scyB0byBnYXRoZXIgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9hZl9wYWNrZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjY2NTpcdFxuMjY2NjpcdFx0aWYgKHVubGlrZWx5KCFza2ItXHUwMDNlbGVuKSlcbjI2Njc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yNjY4Olx0XG4yNjY5Olx0XHRwYWNrZXRfcGFyc2VfaGVhZGVycyhza2IsIHNvY2spO1xuMjY3MDpcdFxuMjY3MTpcdFx0cmV0dXJuIHRwX2xlbjtcbjI2NzI6XHR9XG4yNjczOlx0XG4yNjc0Olx0c3RhdGljIGludCB0cGFja2V0X3BhcnNlX2hlYWRlcihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCB2b2lkICpmcmFtZSxcbjI2NzU6XHRcdFx0XHRcdGludCBzaXplX21heCwgdm9pZCAqKmRhdGEpXG4yNjc2Olx0e1xuMjY3NzpcdFx0dW5pb24gdHBhY2tldF91aGRyIHBoO1xuMjY3ODpcdFx0dTMyIHRwX2xlbjtcbjI2Nzk6XHRcdGludCBvZmY7XG4yNjgwOlx0XG4yNjgxOlx0XHRwaC5yYXcgPSBmcmFtZTtcbjI2ODI6XHRcbjI2ODM6XHRcdHN3aXRjaCAocG8tXHUwMDNldHBfdmVyc2lvbikge1xuMjY4NDpcdFx0Y2FzZSBUUEFDS0VUX1YzOlxuMjY4NTpcdFx0XHRpZiAocGguaDMtXHUwMDNldHBfbmV4dF9vZmZzZXQgIT0gMCkge1xuMjY4NjpcdFx0XHRcdHByX3dhcm5fb25jZShcJiMzNDt2YXJpYWJsZSBzaXplZCBzbG90IG5vdCBzdXBwb3J0ZWRcJiMzNDspO1xuMjY4NzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjY4ODpcdFx0XHR9XG4yNjg5Olx0XHRcdHRwX2xlbiA9IHBoLmgzLVx1MDAzZXRwX2xlbjtcbjI2OTA6XHRcdFx0YnJlYWs7XG4yNjkxOlx0XHRjYXNlIFRQQUNLRVRfVjI6XG4yNjkyOlx0XHRcdHRwX2xlbiA9IHBoLmgyLVx1MDAzZXRwX2xlbjtcbjI2OTM6XHRcdFx0YnJlYWs7XG4yNjk0Olx0XHRkZWZhdWx0OlxuMjY5NTpcdFx0XHR0cF9sZW4gPSBwaC5oMS1cdTAwM2V0cF9sZW47XG4yNjk2Olx0XHRcdGJyZWFrO1xuMjY5NzpcdFx0fVxuMjY5ODpcdFx0aWYgKHVubGlrZWx5KHRwX2xlbiBcdTAwM2Ugc2l6ZV9tYXgpKSB7XG4yNjk5Olx0XHRcdHByX2VycihcJiMzNDtwYWNrZXQgc2l6ZSBpcyB0b28gbG9uZyAoJXUgXHUwMDNlICVkKVxcblwmIzM0OywgdHBfbGVuLCBzaXplX21heCk7XG4yNzAwOlx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4yNzAxOlx0XHR9XG4yNzAyOlx0XG4yNzAzOlx0XHRpZiAodW5saWtlbHkocGFja2V0X3NvY2tfZmxhZyhwbywgUEFDS0VUX1NPQ0tfVFhfSEFTX09GRikpKSB7XG4yNzA0Olx0XHRcdGludCBvZmZfbWluLCBvZmZfbWF4O1xuMjcwNTpcdFxuMjcwNjpcdFx0XHRvZmZfbWluID0gcG8tXHUwMDNldHBfaGRybGVuIC0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9sbCk7XG4yNzA3Olx0XHRcdG9mZl9tYXggPSBwby1cdTAwM2V0eF9yaW5nLmZyYW1lX3NpemUgLSB0cF9sZW47XG4yNzA4Olx0XHRcdGlmIChwby1cdTAwM2Vzay5za190eXBlID09IFNPQ0tfREdSQU0pIHtcbjI3MDk6XHRcdFx0XHRzd2l0Y2ggKHBvLVx1MDAzZXRwX3ZlcnNpb24pIHtcbjI3MTA6XHRcdFx0XHRjYXNlIFRQQUNLRVRfVjM6XG4yNzExOlx0XHRcdFx0XHRvZmYgPSBwaC5oMy1cdTAwM2V0cF9uZXQ7XG4yNzEyOlx0XHRcdFx0XHRicmVhaztcbjI3MTM6XHRcdFx0XHRjYXNlIFRQQUNLRVRfVjI6XG4yNzE0Olx0XHRcdFx0XHRvZmYgPSBwaC5oMi1cdTAwM2V0cF9uZXQ7XG4yNzE1Olx0XHRcdFx0XHRicmVhaztcbjI3MTY6XHRcdFx0XHRkZWZhdWx0OlxuMjcxNzpcdFx0XHRcdFx0b2ZmID0gcGguaDEtXHUwMDNldHBfbmV0O1xuMjcxODpcdFx0XHRcdFx0YnJlYWs7XG4yNzE5Olx0XHRcdFx0fVxuMjcyMDpcdFx0XHR9IGVsc2Uge1xuMjcyMTpcdFx0XHRcdHN3aXRjaCAocG8tXHUwMDNldHBfdmVyc2lvbikge1xuMjcyMjpcdFx0XHRcdGNhc2UgVFBBQ0tFVF9WMzpcbjI3MjM6XHRcdFx0XHRcdG9mZiA9IHBoLmgzLVx1MDAzZXRwX21hYztcbjI3MjQ6XHRcdFx0XHRcdGJyZWFrO1xuMjcyNTpcdFx0XHRcdGNhc2UgVFBBQ0tFVF9WMjpcbjI3MjY6XHRcdFx0XHRcdG9mZiA9IHBoLmgyLVx1MDAzZXRwX21hYztcbjI3Mjc6XHRcdFx0XHRcdGJyZWFrO1xuMjcyODpcdFx0XHRcdGRlZmF1bHQ6XG4yNzI5Olx0XHRcdFx0XHRvZmYgPSBwaC5oMS1cdTAwM2V0cF9tYWM7XG4yNzMwOlx0XHRcdFx0XHRicmVhaztcbjI3MzE6XHRcdFx0XHR9XG4yNzMyOlx0XHRcdH1cbjI3MzM6XHRcdFx0aWYgKHVubGlrZWx5KChvZmYgXHUwMDNjIG9mZl9taW4pIHx8IChvZmZfbWF4IFx1MDAzYyBvZmYpKSlcbjI3MzQ6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTk4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW50ZWdlciBPdmVyZmxvdyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBjaGFuZ2U6IGBpbnQgdHBfbGVuLCBvZmY7YCBoYXMgYmVlbiB1cGRhdGVkIHRvIGB1MzIgdHBfbGVuOyBpbnQgb2ZmO2AsIGFuZCB0aGUgYHByX2VycmAgZm9ybWF0IHN0cmluZyBpcyBub3cgdXNpbmcgYCV1YCBpbnN0ZWFkIG9mIGAlZGAuIFRoZSBgJXVgIHN1Z2dlc3RzIGFuIHVuc2lnbmVkIGludGVnZXIsIHdoaWNoIGlzIGEgZ29vZCBjbHVlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZS4KCkxldCYjMzk7cyB0cmFjZSBgdHBfbGVuYC4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBkZXJpdmVkIGZyb20gYHBoLmgzLSZndDt0cF9sZW5gLCBgcGguaDItJmd0O3RwX2xlbmAsIG9yIGBwaC5oMS0mZ3Q7dHBfbGVuYCwgYW5kIHRob3NlIGFyZSBhbGwgYHVuc2lnbmVkIGludGAgb3IgYF9fdTMyYC4gSG1tLCBhIG1pc21hdGNoLi4uCgpBaCwgSSBzZWUgdGhlIHByb2JsZW0uIEJlZm9yZSwgd2hlbiBgdHBfbGVuYCB3YXMgYSBzaWduZWQgYGludGAsIHVzZXIgc3BhY2UgY291bGQgcG90ZW50aWFsbHkgcGFzcyBhIGZyYW1lIHdoZXJlIGB0cF9sZW5gIHdhcyBsYXJnZXIgdGhhbiBgSU5UX01BWGAsIG9yIGV2ZW4gYSBuZWdhdGl2ZSB2YWx1ZSBhZnRlciB0aGUgY2FzdC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgb3ZlcmZsb3cgc2NlbmFyaW8hIFRoZSBzdWJzZXF1ZW50IGNoZWNrIGB0cF9sZW4gJmd0OyBzaXplX21heGAgd2FzIGEgKnNpZ25lZCogY29tcGFyaXNvbi4gU28gaWYgYHRwX2xlbmAgd2FzLCBzYXksIGAweDgwMDAwMDAwYCAod2hpY2ggcmVwcmVzZW50cyBhIG5lZ2F0aXZlIHNpZ25lZCBpbnRlZ2VyKSwgdGhlIGNvbXBhcmlzb24gd291bGQgZmFpbCBiZWNhdXNlIGl0JiMzOTtzIGxlc3MgdGhhbiBgc2l6ZV9tYXhgLiBUaGUgY2hlY2sgYHVubGlrZWx5KHRwX2xlbiAmZ3Q7IHNpemVfbWF4KWAgd291bGQgaW5jb3JyZWN0bHkgZXZhbHVhdGUgdG8gKmZhbHNlKiwgbGV0dGluZyBhIHBvdGVudGlhbGx5IG1hbGljaW91cyBwYWNrZXQgdGhyb3VnaC4KClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdnVsbmVyYWJsZSB0byBhbiBpbnRlZ2VyIG92ZXJmbG93IGFsbG93aW5nIGEgbWFsZm9ybWVkIHBhY2tldCB0byBieXBhc3MgYSBjcml0aWNhbCBzaXplIGNoZWNrLiBXZSYjMzk7ZCB0aGVuIHJ1biBvZmYgdGhlIGVuZCBvZiBtZW1vcnksIHJlYWRpbmcgYW5kIHdyaXRpbmcgd2hlcmV2ZXIgdGhlIHVzZXIgdG9sZCB1cy4gVGltZSB0byBjaGVjayB0aGUgY29kZSB0aGF0IGNvbWVzICphZnRlciogdGhhdCBmbGF3ZWQgY2hlY2suIEkgbmVlZCB0byBsb29rIGF0IGxpbmVzIDI3MzAtMjc2MCBpbiBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AgdG8gc2VlIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcyBpbnRlZ2VyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcGFja2V0L2FmX3BhY2tldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjczMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzMwOlx0XHRcdFx0XHRicmVhaztcbjI3MzE6XHRcdFx0XHR9XG4yNzMyOlx0XHRcdH1cbjI3MzM6XHRcdFx0aWYgKHVubGlrZWx5KChvZmYgXHUwMDNjIG9mZl9taW4pIHx8IChvZmZfbWF4IFx1MDAzYyBvZmYpKSlcbjI3MzQ6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI3MzU6XHRcdH0gZWxzZSB7XG4yNzM2Olx0XHRcdG9mZiA9IHBvLVx1MDAzZXRwX2hkcmxlbiAtIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpO1xuMjczNzpcdFx0fVxuMjczODpcdFxuMjczOTpcdFx0KmRhdGEgPSBmcmFtZSAmIzQzOyBvZmY7XG4yNzQwOlx0XHRyZXR1cm4gdHBfbGVuO1xuMjc0MTpcdH1cbjI3NDI6XHRcbjI3NDM6XHRzdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZylcbjI3NDQ6XHR7XG4yNzQ1Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbjI3NDY6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4yNzQ3Olx0XHRzdHJ1Y3QgdmlydGlvX25ldF9oZHIgdm5ldF9oZHI7XG4yNzQ4Olx0XHRib29sIGhhc192bmV0X2hkciA9IGZhbHNlO1xuMjc0OTpcdFx0c3RydWN0IHNvY2tjbV9jb29raWUgc29ja2M7XG4yNzUwOlx0XHRfX2JlMTYgcHJvdG87XG4yNzUxOlx0XHRpbnQgZXJyLCByZXNlcnZlID0gMDtcbjI3NTI6XHRcdHZvaWQgKnBoO1xuMjc1MzpcdFx0REVDTEFSRV9TT0NLQUREUihzdHJ1Y3Qgc29ja2FkZHJfbGwgKiwgc2FkZHIsIG1zZy1cdTAwM2Vtc2dfbmFtZSk7XG4yNzU0Olx0XHRib29sIG5lZWRfd2FpdCA9ICEobXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbjI3NTU6XHRcdGludCB2bmV0X2hkcl9zeiA9IFJFQURfT05DRShwby1cdTAwM2V2bmV0X2hkcl9zeik7XG4yNzU2Olx0XHR1bnNpZ25lZCBjaGFyICphZGRyID0gTlVMTDtcbjI3NTc6XHRcdGludCB0cF9sZW4sIHNpemVfbWF4O1xuMjc1ODpcdFx0dm9pZCAqZGF0YTtcbjI3NTk6XHRcdGludCBsZW5fc3VtID0gMDtcbjI3NjA6XHRcdGludCBzdGF0dXMgPSBUUF9TVEFUVVNfQVZBSUxBQkxFO1xuMjc2MTpcdFx0aW50IGhhcmRfaGVhZGVyX2xlbiwgaGxlbiwgdGxlbiwgY29weWxlbiA9IDA7XG4yNzYyOlx0XHRsb25nIHRpbWVvO1xuMjc2MzpcdFxuMjc2NDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZwby1cdTAwM2VwZ192ZWNfbG9jayk7XG4yNzY1Olx0XG4yNzY2Olx0XHQvKiBwYWNrZXRfc2VuZG1zZygpIGNoZWNrIG9uIHR4X3JpbmcucGdfdmVjIHdhcyBsb2NrbGVzcyxcbjI3Njc6XHRcdCAqIHdlIG5lZWQgdG8gY29uZmlybSBpdCB1bmRlciBwcm90ZWN0aW9uIG9mIHBnX3ZlY19sb2NrLlxuMjc2ODpcdFx0ICovXG4yNzY5Olx0XHRpZiAodW5saWtlbHkoIXBvLVx1MDAzZXR4X3JpbmcucGdfdmVjKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMzkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgUGFja2V0IFRyYW5zbWlzc2lvbiBhbmQgSGVhZGVyIFBhcnNpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHRoZXNlIHBhY2tldHMgYXJlIGdldHRpbmcgc2VudCwgYW5kIGB0cGFja2V0X3NuZGAgc2VlbXMgdG8gYmUgdGhlIGtleSBmdW5jdGlvbiBpbnZvbHZlZC4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcm9sZSBvZiBgdHBhY2tldF9wYXJzZV9oZWFkZXJgIHdpdGhpbiB0aGlzIGZsb3cuIFNpbmNlIGB0cGFja2V0X3NuZGAgY2FsbHMgaXQsIGl0JiMzOTtzIGNsZWFyIHRoZSBoZWFkZXIgcGFyc2luZyBpcyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwcm9jZXNzLiBJIG5lZWQgdG8gdHJhY2UgKndoZXJlKiB0aGlzIGB0cGFja2V0X3BhcnNlX2hlYWRlcmAgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdG8gZ3Jhc3AgdGhlIGZ1bGwgcGljdHVyZSBvZiB0aGUgdHJhbnNtaXNzaW9uIHBhdGh3YXkuIExldCYjMzk7cyBmaW5kIHRob3NlIGNhbGwgc2l0ZXMgYW5kIHNlZSB3aGF0IGNvbnRleHQgc3Vycm91bmRzIHRoZSBwYXJzaW5nIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RwYWNrZXRfcGFyc2VfaGVhZGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNTkwPXN0YXRpYyBpbnQgdHBhY2tldF9maWxsX3NrYihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjY3My1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjY3NDpzdGF0aWMgaW50IHRwYWNrZXRfcGFyc2VfaGVhZGVyKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHZvaWQgKmZyYW1lLFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNjc1LVx0XHRcdFx0aW50IHNpemVfbWF4LCB2b2lkICoqZGF0YSlcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI3NDM9c3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODQxLVx0XHRza2IgPSBOVUxMO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyODQyOlx0XHR0cF9sZW4gPSB0cGFja2V0X3BhcnNlX2hlYWRlcihwbywgcGgsIHNpemVfbWF4LCBcdTAwMjZkYXRhKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjg0My1cdFx0aWYgKHRwX2xlbiBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODA1CgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogNjk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmsgUGFja2V0IFBhcnNpbmcgQnVnIEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6ICphaGEhKiBgdHBhY2tldF9wYXJzZV9oZWFkZXJgIGlzIHJldHVybmluZyBgdHBfbGVuYCBhcyBhbiBgaW50YCwgYnV0IGludGVybmFsbHksIGB0cF9sZW5gIHdpdGhpbiB0aGF0IGZ1bmN0aW9uIGlzIGEgYHUzMmAuIFByZXZpb3VzbHksIHRoZSBjb21wYXJpc29uIGB0cF9sZW4gJmd0OyBzaXplX21heGAgd2FzIGEgKnNpZ25lZCogY29tcGFyaXNvbi4gTm93LCB3aXRoIHRoZSBgdTMyYCB0eXBlIGZvciBgdHBfbGVuYCwgaXQmIzM5O3MgYW4gKnVuc2lnbmVkKiBjb21wYXJpc29uLiBUaGlzIGlzIGdvb2QhIEFueSBsYXJnZSB1bnNpZ25lZCB2YWx1ZSAocHJldmlvdXNseSBieXBhc3NpbmcgY2hlY2tzIGR1ZSB0byBiZWluZyBzaWduZWQpIHdpbGwgbm93IGJlIGNvcnJlY3RseSBjYXVnaHQuIFRoaXMgZml4ZXMgYSBzaWduZWQgaW50ZWdlciBjb21wYXJpc29uIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkuIEV4Y2VsbGVudCwgdGhpcyBpcyBhIGxlZ2l0aW1hdGUgYnVnIGZpeCBpbiBwYWNrZXQgc29ja2V0IHBhY2tldCBwYXJzaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIFRYIHJpbmcgaGFuZGxpbmcuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgdGhpcyBXb3J0aEZ1enppbmc/IExldCYjMzk7cyBjaGVjayB0aGUgY3JpdGVyaWEuIE9rYXksIG5vIGRvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBsb2dnaW5nLCBvciBkZWNvcmF0aXZlIGNoYW5nZXMgaGVyZS4gTm90IGNvbnN0YW50cyB0aGF0IGRvbiYjMzk7dCBhZmZlY3QgZXhlY3V0aW9uLiBEZWZpbml0ZWx5IG5vdCB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgb3IgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgcmVxdWlyaW5nIGRlZGljYXRlZCBoYXJkd2FyZS4gQW5kIGl0JiMzOTtzIG5vdCBkcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzLiBUaGlzIHBhdGNoIGRpcmVjdGx5IG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgLCBpbiB0aGUgZnVuY3Rpb24gYHRwYWNrZXRfcGFyc2VfaGVhZGVyKClgLCB3aGljaCBpcyB1c2VkIGJ5IHRoZSBBRl9QQUNLRVQgcmluZyBidWZmZXIgcGFja2V0IHRyYW5zbWlzc2lvbiAoYHRwYWNrZXRfc25kYCkuIFRoaXMgaXMgKmNvcmUqIG5ldHdvcmtpbmcgY29kZSwgd2hpY2ggSSBrbm93IGlzIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIHN5c2NhbGxzIGxpa2UgYHNvY2tldChBRl9QQUNLRVQsIC4uLilgIGFuZCBgc2V0c29ja29wdCguLi4sIFBBQ0tFVF9UWF9SSU5HLCAuLi4pYCBhbmQgb2YgY291cnNlIGBzZW5kdG8oKWAvYHNlbmRtc2coKWAuIFNvLCB5ZXMsIFdvcnRoRnV6emluZyBpcyBkZWZpbml0aXZlbHkgYHRydWVgIQoKTm93LCBuZXh0IHN0ZXAsIEkgbmVlZCB0byBpZGVudGlmeSBpZiB0aGVyZSBhcmUgZm9jdXMgc3ltYm9scyB0aGF0IHdpbGwgYmUgdXNlZnVsIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZm9jdXNpbmcgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEkgd2lsbCBzdGFydCBieSBzZWFyY2hpbmcgYXJvdW5kIGBwYWNrZXRfc2VuZG1zZ2AsIGB0cGFja2V0X3NuZGAsIGFuZCBgcGFja2V0X2NyZWF0ZWAgaW4gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgIHRvIGlkZW50aWZ5IHRoZSBtb3N0IHN1aXRhYmxlIHN5bWJvbHMuIEkgYW0gZWFnZXIgdG8gZ2V0IHN0YXJ0ZWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyhwYWNrZXRfc2VuZG1zZ3x0cGFja2V0X3NuZHx0cGFja2V0X3BhcnNlX2hlYWRlcnxwYWNrZXRfcmVjdm1zZ3xwYWNrZXRfc2V0c29ja29wdCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcGFja2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcGFja2V0L2FmX3BhY2tldC5jPTE2OTM9c3RhdGljIGludCBmYW5vdXRfYWRkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGZhbm91dF9hcmdzICphcmdzKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTgwMi1cdFx0aWYgKHJlZmNvdW50X3JlYWQoXHUwMDI2bWF0Y2gtXHUwMDNlc2tfcmVmKSBcdTAwM2MgbWF0Y2gtXHUwMDNlbWF4X251bV9tZW1iZXJzKSB7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE4MDM6XHRcdFx0LyogUGFpcmVkIHdpdGggcGFja2V0X3NldHNvY2tvcHQoUEFDS0VUX0ZBTk9VVF9EQVRBKSAqL1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xODA0LVx0XHRcdFdSSVRFX09OQ0UocG8tXHUwMDNlZmFub3V0LCBtYXRjaCk7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xOTM4PXN0YXRpYyB2b2lkIHBhY2tldF9wYXJzZV9oZWFkZXJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xOTYyLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoxOTYzOnN0YXRpYyBpbnQgcGFja2V0X3NlbmRtc2dfc3BrdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE5NjQtXHRcdFx0ICAgICAgIHNpemVfdCBsZW4pXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMTM2PXN0YXRpYyBpbnQgcGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjIwOS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjIxMDpcdC8qIHNsbC1cdTAwM2VzbGxfZmFtaWx5IGFuZCBzbGwtXHUwMDNlc2xsX3Byb3RvY29sIGFyZSBzZXQgaW4gcGFja2V0X3JlY3Ztc2coKS5cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjIxMS1cdCAqIFVzZSB0aGVpciBzcGFjZSBmb3Igc3RvcmluZyB0aGUgb3JpZ2luYWwgc2tiIGxlbmd0aC5cbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI1OTA9c3RhdGljIGludCB0cGFja2V0X2ZpbGxfc2tiKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNjczLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNjc0OnN0YXRpYyBpbnQgdHBhY2tldF9wYXJzZV9oZWFkZXIoc3RydWN0IHBhY2tldF9zb2NrICpwbywgdm9pZCAqZnJhbWUsXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI2NzUtXHRcdFx0XHRpbnQgc2l6ZV9tYXgsIHZvaWQgKipkYXRhKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjc0Mi1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6Mjc0MzpzdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZylcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjc0NC17XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzY1LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNzY2Olx0LyogcGFja2V0X3NlbmRtc2coKSBjaGVjayBvbiB0eF9yaW5nLnBnX3ZlYyB3YXMgbG9ja2xlc3MsXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI3NjctXHQgKiB3ZSBuZWVkIHRvIGNvbmZpcm0gaXQgdW5kZXIgcHJvdGVjdGlvbiBvZiBwZ192ZWNfbG9jay5cbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4NDEtXHRcdHNrYiA9IE5VTEw7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI4NDI6XHRcdHRwX2xlbiA9IHRwYWNrZXRfcGFyc2VfaGVhZGVyKHBvLCBwaCwgc2l6ZV9tYXgsIFx1MDAyNmRhdGEpO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODQzLVx0XHRpZiAodHBfbGVuIFx1MDAzYyAwKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9Mjk3Mz1zdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEzMS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzEzMjpzdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEzMy17XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTM3LVx0LyogUmVhZGluZyB0eF9yaW5nLnBnX3ZlYyB3aXRob3V0IGhvbGRpbmcgcGdfdmVjX2xvY2sgaXMgcmFjeS5cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzEzODpcdCAqIHRwYWNrZXRfc25kKCkgd2lsbCByZWRvIHRoZSBjaGVjayBzYWZlbHkuXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMzktXHQgKi9cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzE0MC1cdGlmIChkYXRhX3JhY2UocG8tXHUwMDNldHhfcmluZy5wZ192ZWMpKVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMTQxOlx0XHRyZXR1cm4gdHBhY2tldF9zbmQocG8sIG1zZyk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxNDItXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0zMzY2PXN0YXRpYyBpbnQgcGFja2V0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTM0NDMtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjM0NDQ6c3RhdGljIGludCBwYWNrZXRfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTM0NDUtXHRcdFx0ICBpbnQgZmxhZ3MpXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0zODE0PXN0YXRpYyBpbnRcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzgxNTpwYWNrZXRfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zODE2LVx0XHQgIHVuc2lnbmVkIGludCBvcHRsZW4pXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz00NzUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHNfc3BrdCA9IHtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ3NjYtXHQuc2h1dGRvd24gPVx0c29ja19ub19zaHV0ZG93bixcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6NDc2NzpcdC5zZW5kbXNnID1cdHBhY2tldF9zZW5kbXNnX3Nwa3QsXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ3Njg6XHQucmVjdm1zZyA9XHRwYWNrZXRfcmVjdm1zZyxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDc2OS1cdC5tbWFwID1cdFx0c29ja19ub19tbWFwLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9NDc3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzID0ge1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDc4NS1cdC5zaHV0ZG93biA9XHRzb2NrX25vX3NodXRkb3duLFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0Nzg2Olx0LnNldHNvY2tvcHQgPVx0cGFja2V0X3NldHNvY2tvcHQsXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ3ODctXHQuZ2V0c29ja29wdF9pdGVyID1cdHBhY2tldF9nZXRzb2Nrb3B0LFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0Nzg4Olx0LnNlbmRtc2cgPVx0cGFja2V0X3NlbmRtc2csXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ3ODk6XHQucmVjdm1zZyA9XHRwYWNrZXRfcmVjdm1zZyxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDc5MC1cdC5tbWFwID1cdFx0cGFja2V0X21tYXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MTAKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYWNrZXQgU29ja2V0IEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaGFzIHRvIGJlIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucy4gSSBzZWUgYHRwYWNrZXRfc25kYCwgYHBhY2tldF9zZW5kbXNnYCwgYHBhY2tldF9zZXRzb2Nrb3B0YCwgYHBhY2tldF9tbWFwYCwgYW5kIGB0cGFja2V0X3BhcnNlX2hlYWRlcmAuIFJpZ2h0IGF3YXksIGB0cGFja2V0X3NuZGAgc3RhbmRzIG91dCBhcyBpdCYjMzk7cyBjYWxsZWQgYnkgYHBhY2tldF9zZW5kbXNnYCwgYW5kIGB0cGFja2V0X3BhcnNlX2hlYWRlcmAgaXMgY2FsbGVkIGJ5IGB0cGFja2V0X3NuZGAuIEkgd29uZGVyIGlmIGB0cGFja2V0X3NuZGAgaXMgaW5saW5lZCwgYnV0IGdpdmVuIGl0JiMzOTtzIGFyb3VuZCAyMDAgbGluZXMsIEkgaGlnaGx5IGRvdWJ0IGl0LiBgcGFja2V0X3NlbmRtc2dgIGlzIHRoZSBvcHMgaGFuZGxlciDigJMgc3BlY2lmaWNhbGx5IGBwYWNrZXRfb3BzLnNlbmRtc2dgLgoKTm93LCBJIG5lZWQgdG8gZGVjaWRlIGlmIGB0cGFja2V0X3NuZGAgb3IgYHBhY2tldF9zZW5kbXNnYCBhcmUgZ29vZCBjYW5kaWRhdGVzIGZvciBmdXJ0aGVyIGluc3BlY3Rpb24uIEJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIHRoZXkgdXN1YWxseSBhcmUsIHNvIGxldCYjMzk7cyBrZWVwIHRoZW0gaW4gbWluZCBhcyBwcmltYXJ5IGZvY3VzIGFyZWFzLiBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIHRoZSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBhbmQgcHJvdG9jb2wgb3BlcmF0aW9ucywgc3VjaCBhcyBgcGFja2V0X3NldHNvY2tvcHRgLgoKVG8gZ2V0IGEgYnJvYWRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBtb2R1bGUsIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIGBuZXQvcGFja2V0L2AuIFRoaXMgd2lsbCBnaXZlIG1lIGFuIG92ZXJ2aWV3IG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBzaG91bGQgYWxzbyBpbnZlc3RpZ2F0ZSB0aGUgTWFrZWZpbGUgd2l0aGluIGBuZXQvcGFja2V0L2AgYW5kIHRoZSBhc3NvY2lhdGVkIGBLY29uZmlnYCBmaWxlcyB3aXRoaW4gYG5ldC9gLCBvciBzcGVjaWZpY2FsbHkgYG5ldC9wYWNrZXQvS2NvbmZpZ2AuIFRoZXNlIHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0cyBpbnRvIGJ1aWxkIGRlcGVuZGVuY2llcyBhbmQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FmX3BhY2tldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9NTk0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfaGVhZCAqcHR5cGVfaGVhZChjb25zdCBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTU5Ni1cdGlmIChwdC1cdTAwM2V0eXBlID09IGh0b25zKEVUSF9QX0FMTCkpIHtcbm5ldC9jb3JlL2Rldi5jOjU5NzpcdFx0aWYgKCFwdC1cdTAwM2VhZl9wYWNrZXRfbmV0IFx1MDAyNlx1MDAyNiAhcHQtXHUwMDNlZGV2KVxubmV0L2NvcmUvZGV2LmMtNTk4LVx0XHRcdHJldHVybiBOVUxMO1xuLS1cbm5ldC9jb3JlL2Rldi5jLTYwMC1cdFx0cmV0dXJuIHB0LVx1MDAzZWRldiA/IFx1MDAyNnB0LVx1MDAzZWRldi1cdTAwM2VwdHlwZV9hbGwgOlxubmV0L2NvcmUvZGV2LmM6NjAxOlx0XHRcdFx0IFx1MDAyNnB0LVx1MDAzZWFmX3BhY2tldF9uZXQtXHUwMDNlcHR5cGVfYWxsO1xubmV0L2NvcmUvZGV2LmMtNjAyLVx0fVxuLS1cbm5ldC9jb3JlL2Rldi5jLTYwNi1cbm5ldC9jb3JlL2Rldi5jOjYwNzpcdHJldHVybiBwdC1cdTAwM2VhZl9wYWNrZXRfbmV0ID8gXHUwMDI2cHQtXHUwMDNlYWZfcGFja2V0X25ldC1cdTAwM2VwdHlwZV9zcGVjaWZpYyA6XG5uZXQvY29yZS9kZXYuYy02MDgtXHRcdFx0XHQgXHUwMDI2cHR5cGVfYmFzZVtudG9ocyhwdC1cdTAwM2V0eXBlKSBcdTAwMjYgUFRZUEVfSEFTSF9NQVNLXTtcbi0tXG5uZXQvY29yZS9kZXYuYz0yNTM5PXN0YXRpYyBpbmxpbmUgYm9vbCBza2JfbG9vcF9zayhzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvZGV2LmMtMjU0MC17XG5uZXQvY29yZS9kZXYuYzoyNTQxOlx0aWYgKCFwdHlwZS1cdTAwM2VhZl9wYWNrZXRfcHJpdiB8fCAhc2tiLVx1MDAzZXNrKVxubmV0L2NvcmUvZGV2LmMtMjU0Mi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm5ldC9jb3JlL2Rldi5jLTI1NDUtXHRcdHJldHVybiBwdHlwZS1cdTAwM2VpZF9tYXRjaChwdHlwZSwgc2tiLVx1MDAzZXNrKTtcbm5ldC9jb3JlL2Rldi5jOjI1NDY6XHRlbHNlIGlmICgoc3RydWN0IHNvY2sgKilwdHlwZS1cdTAwM2VhZl9wYWNrZXRfcHJpdiA9PSBza2ItXHUwMDNlc2spXG5uZXQvY29yZS9kZXYuYy0yNTQ3LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmM9MjI5PXN0YXRpYyB2b2lkICpwdHlwZV9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpXG4tLVxubmV0L2NvcmUvbmV0LXByb2Nmcy5jLTI2MC1cbm5ldC9jb3JlL25ldC1wcm9jZnMuYzoyNjE6XHRpZiAocHQtXHUwMDNlYWZfcGFja2V0X25ldCkge1xubmV0L2NvcmUvbmV0LXByb2Nmcy5jLTI2Mi1uZXRfcHR5cGVfYWxsOlxuLS1cbm5ldC9jb3JlL25ldC1wcm9jZnMuYz0yOTM9c3RhdGljIGludCBwdHlwZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbi0tXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmMtMzAzLVx0ZGV2ID0gaXRlci1cdTAwM2VkZXY7XG5uZXQvY29yZS9uZXQtcHJvY2ZzLmM6MzA0Olx0aWYgKCghcHQtXHUwMDNlYWZfcGFja2V0X25ldCB8fCBuZXRfZXEocHQtXHUwMDNlYWZfcGFja2V0X25ldCwgc2VxX2ZpbGVfbmV0KHNlcSkpKSBcdTAwMjZcdTAwMjZcbm5ldC9jb3JlL25ldC1wcm9jZnMuYy0zMDUtXHRcdCAoIWRldiB8fCBuZXRfZXEoZGV2X25ldChkZXYpLCBzZXFfZmlsZV9uZXQoc2VxKSkpKSB7XG4tLVxubmV0L2NvcmUvc2VsZnRlc3RzLmM9MTU5PXN0YXRpYyBpbnQgbmV0X3Rlc3RfbG9vcGJhY2tfdmFsaWRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9zZWxmdGVzdHMuYy0xNjMte1xubmV0L2NvcmUvc2VsZnRlc3RzLmM6MTY0Olx0c3RydWN0IG5ldF90ZXN0X3ByaXYgKnRwcml2ID0gcHQtXHUwMDNlYWZfcGFja2V0X3ByaXY7XG5uZXQvY29yZS9zZWxmdGVzdHMuYy0xNjUtXHRjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMgPSB0cHJpdi1cdTAwM2VwYWNrZXQtXHUwMDNlc3JjO1xuLS1cbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jPTIzMz1zdGF0aWMgaW50IF9fbmV0X3Rlc3RfbG9vcGJhY2soc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4tLVxubmV0L2NvcmUvc2VsZnRlc3RzLmMtMjQ5LVx0dHByaXYtXHUwMDNlcHQuZGV2ID0gbmRldjtcbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jOjI1MDpcdHRwcml2LVx1MDAzZXB0LmFmX3BhY2tldF9wcml2ID0gdHByaXY7XG5uZXQvY29yZS9zZWxmdGVzdHMuYy0yNTEtXHR0cHJpdi1cdTAwM2VwYWNrZXQgPSBhdHRyO1xuLS1cbm5ldC9wYWNrZXQvS2NvbmZpZz02PWNvbmZpZyBQQUNLRVRcbi0tXG5uZXQvcGFja2V0L0tjb25maWctMTQtXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxubmV0L3BhY2tldC9LY29uZmlnOjE1Olx0ICBiZSBjYWxsZWQgYWZfcGFja2V0LlxubmV0L3BhY2tldC9LY29uZmlnLTE2LVxuLS1cbm5ldC9wYWNrZXQvTWFrZWZpbGUtNS1cbm5ldC9wYWNrZXQvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfUEFDS0VUKSAmIzQzOz0gYWZfcGFja2V0Lm9cbm5ldC9wYWNrZXQvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfUEFDS0VUX0RJQUcpICYjNDM7PSBhZl9wYWNrZXRfZGlhZy5vXG5uZXQvcGFja2V0L01ha2VmaWxlOjg6YWZfcGFja2V0X2RpYWcteSAmIzQzOz0gZGlhZy5vXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xNDcxPXN0YXRpYyBpbnQgcGFja2V0X3Jjdl9mYW5vdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE0NzMte1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoxNDc0Olx0c3RydWN0IHBhY2tldF9mYW5vdXQgKmYgPSBwdC1cdTAwM2VhZl9wYWNrZXRfcHJpdjtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTQ3NS1cdHVuc2lnbmVkIGludCBudW0gPSBSRUFEX09OQ0UoZi1cdTAwM2VudW1fbWVtYmVycyk7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xNTYyPXN0YXRpYyBib29sIG1hdGNoX2Zhbm91dF9ncm91cChzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlLCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xNTY2LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoxNTY3Olx0cmV0dXJuIHB0eXBlLVx1MDAzZWFmX3BhY2tldF9wcml2ID09IHBrdF9zayhzayktXHUwMDNlZmFub3V0O1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xNTY4LX1cbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTE2OTM9c3RhdGljIGludCBmYW5vdXRfYWRkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGZhbm91dF9hcmdzICphcmdzKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTc4Ni1cdFx0bWF0Y2gtXHUwMDNlcHJvdF9ob29rLmZ1bmMgPSBwYWNrZXRfcmN2X2Zhbm91dDtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTc4NzpcdFx0bWF0Y2gtXHUwMDNlcHJvdF9ob29rLmFmX3BhY2tldF9wcml2ID0gbWF0Y2g7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE3ODg6XHRcdG1hdGNoLVx1MDAzZXByb3RfaG9vay5hZl9wYWNrZXRfbmV0ID0gcmVhZF9wbmV0KFx1MDAyNm1hdGNoLVx1MDAzZW5ldCk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE3ODktXHRcdG1hdGNoLVx1MDAzZXByb3RfaG9vay5pZF9tYXRjaCA9IG1hdGNoX2Zhbm91dF9ncm91cDtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTE4NzI9c3RhdGljIGludCBwYWNrZXRfcmN2X3Nwa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE4ODItXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE4ODM6XHRzayA9IHB0LVx1MDAzZWFmX3BhY2tldF9wcml2O1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xODg0LVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjEzNj1zdGF0aWMgaW50IHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIxNDktXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIxNTA6XHRzayA9IHB0LVx1MDAzZWFmX3BhY2tldF9wcml2O1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMTUxLVx0cG8gPSBwa3Rfc2soc2spO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjI0OT1zdGF0aWMgaW50IHRwYWNrZXRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMjc4LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMjc5Olx0c2sgPSBwdC1cdTAwM2VhZl9wYWNrZXRfcHJpdjtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjI4MC1cdHBvID0gcGt0X3NrKHNrKTtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTMzNjY9c3RhdGljIGludCBwYWNrZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzQxNy1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzQxODpcdHBvLVx1MDAzZXByb3RfaG9vay5hZl9wYWNrZXRfcHJpdiA9IHNrO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozNDE5Olx0cG8tXHUwMDNlcHJvdF9ob29rLmFmX3BhY2tldF9uZXQgPSBzb2NrX25ldChzayk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTM0MjAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjA0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2NvbmZpZyBEaXZlIGZvciBDT05GSUdfUEFDS0VUIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgbmV0L3BhY2tldC9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGRlcGVuZGVuY2llcyBvZiBgQ09ORklHX1BBQ0tFVGAuIEkmIzM5O20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgbmV0d29ya2luZyBzdGFjaywgc28gdGhpcyBzaG91bGRuJiMzOTt0IGJlIHRvbyBpbnZvbHZlZCwgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IHN1YnRsZSByZWxhdGlvbnNoaXBzIG9yIGltcGxpZWQgZnVuY3Rpb25hbGl0aWVzIGJlZm9yZSBtYWtpbmcgYSBkZWNpc2lvbiBvciByZXZpZXdpbmcgYSBwYXRjaCB0aGF0IHRvdWNoZXMgdGhpcyBhcmVhLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoaW5ncyBiZXlvbmQgdGhlIG9idmlvdXM6IGFyZSB0aGVyZSBhbnkgaW1wbGljaXQgZGVwZW5kZW5jaWVzIG9uIHNwZWNpZmljIGRldmljZSBkcml2ZXJzLCBvdGhlciBuZXR3b3JraW5nIHN1YnN5c3RlbXMsIG9yIGtlcm5lbCBmZWF0dXJlcyB0aGF0IGFyZW4mIzM5O3QgaW1tZWRpYXRlbHkgYXBwYXJlbnQ/IFRpbWUgdG8gZmlyZSB1cCB0aGUgZWRpdG9yIGFuZCBzdGFydCBzY2FubmluZyBmb3IgcmVsZXZhbnQgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMsIGBzZWxlY3RgIGRpcmVjdGl2ZXMsIG9yIGFueSBvdGhlciBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBJdCYjMzk7cyBhbGwgYWJvdXQgZW5zdXJpbmcgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBpcyBzb2xpZCBhbmQgdGhhdCBJIGhhdmUgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGFjdCBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlLiBJJiMzOTtsbCBhbHNvIGdsYW5jZSBvdmVyIGFueSBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBpZiBwcmVzZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFBhY2tldCBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBQQUNLRVRcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O1BhY2tldCBzb2NrZXRcJiMzNDtcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgVGhlIFBhY2tldCBwcm90b2NvbCBpcyB1c2VkIGJ5IGFwcGxpY2F0aW9ucyB3aGljaCBjb21tdW5pY2F0ZVxuICAxMDpcdFx0ICBkaXJlY3RseSB3aXRoIG5ldHdvcmsgZGV2aWNlcyB3aXRob3V0IGFuIGludGVybWVkaWF0ZSBuZXR3b3JrXG4gIDExOlx0XHQgIHByb3RvY29sIGltcGxlbWVudGVkIGluIHRoZSBrZXJuZWwsIGUuZy4gdGNwZHVtcC4gIElmIHlvdSB3YW50IHRoZW1cbiAgMTI6XHRcdCAgdG8gd29yaywgY2hvb3NlIFkuXG4gIDEzOlx0XG4gIDE0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuICAxNTpcdFx0ICBiZSBjYWxsZWQgYWZfcGFja2V0LlxuICAxNjpcdFxuICAxNzpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICAxODpcdFxuICAxOTpcdGNvbmZpZyBQQUNLRVRfRElBR1xuICAyMDpcdFx0dHJpc3RhdGUgXCYjMzQ7UGFja2V0OiBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4gIDIxOlx0XHRkZXBlbmRzIG9uIFBBQ0tFVFxuICAyMjpcdFx0ZGVmYXVsdCBuXG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFN1cHBvcnQgZm9yIFBGX1BBQ0tFVCBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXG4gIDI1Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzc5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhYnlyaW50aCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0aGlzIHN0cmFpZ2h0LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBQQUNLRVRgLiBUaGlzIHVzdWFsbHkgYm9pbHMgZG93biB0byBhIHF1aWNrIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gTXkgaW5zdGluY3Qgc2F5cyB0byBzdGFydCB3aXRoIGBuZXQvS2NvbmZpZ2AsIHRoYXQmIzM5O3MgZ2VuZXJhbGx5IHdoZXJlIHRoZXNlIG5ldHdvcmstcmVsYXRlZCBvcHRpb25zIGFyZSBkZWZpbmVkLiBJIHdhbnQgdG8gc2VlIGlmIGBQQUNLRVRgIGhhcyBhbnkgZGlyZWN0IHBhcmVudCBkZXBlbmRlbmNpZXMuIERvZXMgaXQgcmVseSBvbiBzb21lIG90aGVyIG9wdGlvbiBiZWluZyBlbmFibGVkIGZpcnN0PyBBbHRlcm5hdGl2ZWx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgUEFDS0VUYCBpcyBuZXN0bGVkIHdpdGhpbiB0aGUgYG1lbnVjb25maWcgTkVUYCBzdHJ1Y3R1cmUuIEtub3dpbmcgdGhlIGhpZXJhcmNoeSBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzIGFuZCB0aGUgdWx0aW1hdGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIGZlYXR1cmUuIFNvLCBgbmV0L0tjb25maWdgIGl0IGlzLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCB0aGUgS2NvbmZpZyBnb2RzIGhhdmUgb3JkYWluZWQgZm9yIHRoaXMgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb3VyY2UgXCYjMzQ7bmV0L3BhY2tldC9LY29uZmlnXCYjMzQ7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz04Mj1tZW51IFwmIzM0O05ldHdvcmtpbmcgb3B0aW9uc1wmIzM0O1xubmV0L0tjb25maWctODMtXG5uZXQvS2NvbmZpZzo4NDpzb3VyY2UgXCYjMzQ7bmV0L3BhY2tldC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy04NS1zb3VyY2UgXCYjMzQ7bmV0L3BzcC9LY29uZmlnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTAyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgYXJlYSB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBCYXNlZCBvbiB3aGF0IEkmIzM5O20gbG9va2luZyBhdCwgbXkgZ3V0IGZlZWxpbmcgdGVsbHMgbWUgdG8gY2hlY2sgdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDgwLiBJIHN1c3BlY3QgdGhlcmUmIzM5O3MgYSBzZXR0aW5nIG9yIGEgY29uZmlndXJhdGlvbiBvcHRpb24gaW4gdGhhdCBhcmVhIHRoYXQmIzM5O3MgcmVsZXZhbnQgdG8gd2hhdCBJJiMzOTttIGN1cnJlbnRseSBpbnZlc3RpZ2F0aW5nLiBJdOKAmXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhbmQgSSBoYXZlIGEgZmVlbGluZyB0aGUgYW5zd2VyIGxpZXMgaW4gdGhhdCB2aWNpbml0eSwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gcmFwaWRseSBwYXJzZSB0aGF0IHNlY3Rpb24sIGxvb2tpbmcgZm9yIHRoZSByaWdodCBrZXl3b3JkIG9yIHN0cnVjdHVyZSBpbiB0aGUgZGVmaW5pdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGZpbGUgdGVsbHMgdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDg1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBOZXR3b3JrIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBORVRcbiAgIDc6XHRcdGJvb2wgXCYjMzQ7TmV0d29ya2luZyBzdXBwb3J0XCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgTkxBVFRSXG4gICA5Olx0XHRzZWxlY3QgR0VORVJJQ19ORVRfVVRJTFNcbiAgMTA6XHRcdHNlbGVjdCBCUEZcbiAgMTE6XHRcdGhlbHBcbiAgMTI6XHRcdCAgVW5sZXNzIHlvdSByZWFsbHkga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcsIHlvdSBzaG91bGQgc2F5IFkgaGVyZS5cbiAgMTM6XHRcdCAgVGhlIHJlYXNvbiBpcyB0aGF0IHNvbWUgcHJvZ3JhbXMgbmVlZCBrZXJuZWwgbmV0d29ya2luZyBzdXBwb3J0IGV2ZW5cbiAgMTQ6XHRcdCAgd2hlbiBydW5uaW5nIG9uIGEgc3RhbmQtYWxvbmUgbWFjaGluZSB0aGF0IGlzbiYjMzk7dCBjb25uZWN0ZWQgdG8gYW55XG4gIDE1Olx0XHQgIG90aGVyIGNvbXB1dGVyLlxuICAxNjpcdFxuICAxNzpcdFx0ICBJZiB5b3UgYXJlIHVwZ3JhZGluZyBmcm9tIGFuIG9sZGVyIGtlcm5lbCwgeW91XG4gIDE4Olx0XHQgIHNob3VsZCBjb25zaWRlciB1cGRhdGluZyB5b3VyIG5ldHdvcmtpbmcgdG9vbHMgdG9vIGJlY2F1c2UgY2hhbmdlc1xuICAxOTpcdFx0ICBpbiB0aGUga2VybmVsIGFuZCB0aGUgdG9vbHMgb2Z0ZW4gZ28gaGFuZCBpbiBoYW5kLiBUaGUgdG9vbHMgYXJlXG4gIDIwOlx0XHQgIGNvbnRhaW5lZCBpbiB0aGUgcGFja2FnZSBuZXQtdG9vbHMsIHRoZSBsb2NhdGlvbiBhbmQgdmVyc2lvbiBudW1iZXJcbiAgMjE6XHRcdCAgb2Ygd2hpY2ggYXJlIGdpdmVuIGluIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9DaGFuZ2VzXHUwMDNlLlxuICAyMjpcdFxuICAyMzpcdFx0ICBGb3IgYSBnZW5lcmFsIGludHJvZHVjdGlvbiB0byBMaW51eCBuZXR3b3JraW5nLCBpdCBpcyBoaWdobHlcbiAgMjQ6XHRcdCAgcmVjb21tZW5kZWQgdG8gcmVhZCB0aGUgTkVULUhPV1RPLCBhdmFpbGFibGUgZnJvbVxuICAyNTpcdFx0ICBcdTAwM2NodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0b1x1MDAzZS5cbiAgMjY6XHRcbiAgMjc6XHRpZiBORVRcbiAgMjg6XHRcbiAgMjk6XHRjb25maWcgV0FOVF9DT01QQVRfTkVUTElOS19NRVNTQUdFU1xuICAzMDpcdFx0Ym9vbFxuICAzMTpcdFx0aGVscFxuICAzMjpcdFx0ICBUaGlzIG9wdGlvbiBjYW4gYmUgc2VsZWN0ZWQgYnkgb3RoZXIgb3B0aW9ucyB0aGF0IG5lZWQgY29tcGF0XG4gIDMzOlx0XHQgIG5ldGxpbmsgbWVzc2FnZXMuXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIENPTVBBVF9ORVRMSU5LX01FU1NBR0VTXG4gIDM2Olx0XHRkZWZfYm9vbCB5XG4gIDM3Olx0XHRkZXBlbmRzIG9uIENPTVBBVFxuICAzODpcdFx0ZGVwZW5kcyBvbiBXRVhUX0NPUkUgfHwgV0FOVF9DT01QQVRfTkVUTElOS19NRVNTQUdFU1xuICAzOTpcdFx0aGVscFxuICA0MDpcdFx0ICBUaGlzIG9wdGlvbiBtYWtlcyBpdCBwb3NzaWJsZSB0byBzZW5kIGRpZmZlcmVudCBuZXRsaW5rIG1lc3NhZ2VzXG4gIDQxOlx0XHQgIHRvIHRhc2tzIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSB0YXNrIGlzIGEgY29tcGF0IHRhc2sgb3Igbm90LiBUb1xuICA0MjpcdFx0ICBhY2hpZXZlIHRoaXMsIHlvdSBuZWVkIHRvIHNldCBza2Jfc2hpbmZvKHNrYiktXHUwMDNlZnJhZ19saXN0IHRvIHRoZVxuICA0MzpcdFx0ICBjb21wYXQgc2tiIGJlZm9yZSBzZW5kaW5nIHRoZSBza2IsIHRoZSBuZXRsaW5rIGNvZGUgd2lsbCBzb3J0IG91dFxuICA0NDpcdFx0ICB3aGljaCBtZXNzYWdlIHRvIGFjdHVhbGx5IHBhc3MgdG8gdGhlIHRhc2suXG4gIDQ1Olx0XG4gIDQ2Olx0XHQgIE5ld2x5IHdyaXR0ZW4gY29kZSBzaG91bGQgTkVWRVIgbmVlZCB0aGlzIG9wdGlvbiBidXQgZG9cbiAgNDc6XHRcdCAgY29tcGF0LWluZGVwZW5kZW50IG1lc3NhZ2VzIGluc3RlYWQhXG4gIDQ4Olx0XG4gIDQ5Olx0Y29uZmlnIE5FVF9JTkdSRVNTXG4gIDUwOlx0XHRib29sXG4gIDUxOlx0XG4gIDUyOlx0Y29uZmlnIE5FVF9FR1JFU1NcbiAgNTM6XHRcdGJvb2xcbiAgNTQ6XHRcbiAgNTU6XHRjb25maWcgTkVUX1hHUkVTU1xuICA1NjpcdFx0c2VsZWN0IE5FVF9JTkdSRVNTXG4gIDU3Olx0XHRzZWxlY3QgTkVUX0VHUkVTU1xuICA1ODpcdFx0Ym9vbFxuICA1OTpcdFxuICA2MDpcdGNvbmZpZyBORVRfUkVESVJFQ1RcbiAgNjE6XHRcdGJvb2xcbiAgNjI6XHRcbiAgNjM6XHRjb25maWcgU0tCX0RFQ1JZUFRFRFxuICA2NDpcdFx0Ym9vbFxuICA2NTpcdFxuICA2NjpcdGNvbmZpZyBTS0JfRVhURU5TSU9OU1xuICA2NzpcdFx0Ym9vbFxuICA2ODpcdFxuICA2OTpcdGNvbmZpZyBORVRfREVWTUVNXG4gIDcwOlx0XHRkZWZfYm9vbCB5XG4gIDcxOlx0XHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcbiAgNzI6XHRcdGRlcGVuZHMgb24gRE1BX1NIQVJFRF9CVUZGRVJcbiAgNzM6XHRcdGRlcGVuZHMgb24gUEFHRV9QT09MXG4gIDc0Olx0XG4gIDc1Olx0Y29uZmlnIE5FVF9TSEFQRVJcbiAgNzY6XHRcdGJvb2xcbiAgNzc6XHRcbiAgNzg6XHRjb25maWcgTkVUX0NSQzMyQ1xuICA3OTpcdFx0Ym9vbFxuICA4MDpcdFx0c2VsZWN0IENSQzMyXG4gIDgxOlx0XG4gIDgyOlx0bWVudSBcJiMzNDtOZXR3b3JraW5nIG9wdGlvbnNcJiMzNDtcbiAgODM6XHRcbiAgODQ6XHRzb3VyY2UgXCYjMzQ7bmV0L3BhY2tldC9LY29uZmlnXCYjMzQ7XG4gIDg1Olx0c291cmNlIFwmIzM0O25ldC9wc3AvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMwMgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgYWZfcGFja2V0LmNgIGZvciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyBgQ09ORklHX1BBQ0tFVGAgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBrbm9iIHRoYXQgY29tZXMgdG8gbWluZCwgYW5kIGl0JiMzOTtzIGNsZWFybHkgcmVsZXZhbnQgdG8gdGhlIHBhY2tldCBmdW5jdGlvbmFsaXR5LiBCdXQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCBmb3IgYW55IG90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIG9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIChgI2lmZGVmYCBibG9ja3MpLiBJIHdhbnQgdG8gaWRlbnRpZnkgYW55IHN1YnRsZSBkZXBlbmRlbmNpZXMgb3IgZmVhdHVyZSBmbGFncyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBob3cgcGFja2V0IHNvY2tldHMgYmVoYXZlLCBvciBjb3VsZCBleHBvc2Ugc29tZSBoaWRkZW4gY29uZmlndXJhdGlvbiBzcGFjZS4gR290dGEgY29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IG9mIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGluZmx1ZW5jaW5nIGJlaGF2aW9yIGluIHVuZXhwZWN0ZWQgd2F5cy4gQmVzdCB0byBkbyBhIHF1aWNrIGNvbXByZWhlbnNpdmUgY2hlY2sgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvYWZfcGFja2V0LmMtOTEtI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2Vcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6OTI6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTkzLSNpbmNsdWRlIFx1MDAzY25ldC9pbmV0X2NvbW1vbi5oXHUwMDNlXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNDU9c3RhdGljIHZvaWQgX19mYW5vdXRfbGluayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwYWNrZXRfc29jayAqcG8pO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNDYtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI0NzojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9FR1JFU1Ncbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjQ4LXN0YXRpYyBub2lubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqbmZfaG9va19kaXJlY3RfZWdyZXNzKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNzQ9c3RhdGljIGludCBwYWNrZXRfeG1pdChjb25zdCBzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjc4LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNzk6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfRUdSRVNTXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4MC1cdGlmIChuZl9ob29rX2VncmVzc19hY3RpdmUoKSkge1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MzEyPXN0YXRpYyB1MTYgcGFja2V0X3BpY2tfdHhfcXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxOC1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzE5OiNpZmRlZiBDT05GSUdfWFBTXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMyMC1cdHNrYi1cdTAwM2VzZW5kZXJfY3B1ID0gY3B1ICYjNDM7IDE7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz03Mzg9c3RhdGljIHZvaWQgcHJiX2ZsdXNoX2Jsb2NrKHN0cnVjdCB0cGFja2V0X2tiZHFfY29yZSAqcGtjMSxcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTc0Mi1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6NzQzOiNpZiBBUkNIX0lNUExFTUVOVFNfRkxVU0hfRENBQ0hFX1BBR0UgPT0gMVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy03NDQtXHR1OCAqc3RhcnQsICplbmQ7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy03NjMtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjc2NDojaWYgQVJDSF9JTVBMRU1FTlRTX0ZMVVNIX0RDQUNIRV9QQUdFID09IDFcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNzY1LVx0c3RhcnQgPSAodTggKilwYmQxO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjI0OT1zdGF0aWMgaW50IHRwYWNrZXRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNDg4LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNDg5OiNpZiBBUkNIX0lNUExFTUVOVFNfRkxVU0hfRENBQ0hFX1BBR0UgPT0gMVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNDkwLVx0aWYgKHBvLVx1MDAzZXRwX3ZlcnNpb24gXHUwMDNjPSBUUEFDS0VUX1YyKSB7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0zNDQ0PXN0YXRpYyBpbnQgcGFja2V0X3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzQ1Ni1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzQ1NzojaWYgMFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zNDU4LVx0LyogV2hhdCBlcnJvciBzaG91bGQgd2UgcmV0dXJuIG5vdz8gRVVOQVRUQUNIPyAqL1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9NDI3ND1zdGF0aWMgaW50IHBhY2tldF9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDI5Ny1cdH1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6NDI5ODojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDI5OS1cdGNhc2UgU0lPQ0FERFJUOlxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9NDc5OT1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBhY2tldF9uZXRkZXZfbm90aWZpZXIgPSB7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00ODAyLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0ODAzOiNpZmRlZiBDT05GSUdfUFJPQ19GU1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00ODA0LVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9NDg2MD1zdGF0aWMgaW50IF9fbmV0X2luaXQgcGFja2V0X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ4NjQtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ4NjU6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ4NjYtXHRpZiAoIXByb2NfY3JlYXRlX25ldChcJiMzNDtwYWNrZXRcJiMzNDssIDAsIG5ldC1cdTAwM2Vwcm9jX25ldCwgXHUwMDI2cGFja2V0X3NlcV9vcHMsXG4tLVxubmV0L3BhY2tldC9pbnRlcm5hbC5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbm5ldC9wYWNrZXQvaW50ZXJuYWwuaDoyOiNpZm5kZWYgX19QQUNLRVRfSU5URVJOQUxfSF9fXG5uZXQvcGFja2V0L2ludGVybmFsLmgtMy0jZGVmaW5lIF9fUEFDS0VUX0lOVEVSTkFMX0hfX1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDcxMQoJCQkJCQkJb3V0cHV0OiAxMTUKCQkJCQkJCXRob3VnaHRzOiA0NTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gaWRlbnRpZnkgcHJvbWlzaW5nIHRhcmdldHMgZm9yIGZ1enppbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBBRl9QQUNLRVRgIHNvY2tldCBmYW1pbHkuCgpGaXJzdCwgSSBleGFtaW5lZCB0aGUgYEZvY3VzU3ltYm9sc2AgLSBmdW5jdGlvbnMgdGhhdCBhcmUgbGlrZWx5IGNyaXRpY2FsIGZvciBwYWNrZXQgdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24uIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGB0cGFja2V0X3NuZGAsIGBwYWNrZXRfc2VuZG1zZ2AsIGFuZCBgcGFja2V0X3NldHNvY2tvcHRgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byBpbnZlc3RpZ2F0ZS4gSSB3ZW50IHRocm91Z2ggdGhlIGNvZGUgYW5kIGNvbmZpcm1lZCB0aGF0IHRoZXNlIGFyZSB0aGUgbW9zdCByZWxldmFudC4gSSBrbmV3IHRoYXQgdGhlIGZ1bmN0aW9ucyBpbiB0aGUgZmlsZSBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AgYXJlIG1vc3RseSBzdGF0aWMsIGFzIGlzIHR5cGljYWwgZm9yIG1vZHVsZS9wcm90b2NvbCBpbXBsZW1lbnRhdGlvbnMgcmVnaXN0ZXJpbmcgcHJvdG9fb3BzIGFuZCBuZXRfcHJvdG9fZmFtaWx5IHN0cnVjdHVyZXMuCgpOZXh0LCBJIHZlcmlmaWVkIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFRoZSBgUEFDS0VUYCBjb25maWcgaXMgZXNzZW50aWFsLCBhcyBpbmRpY2F0ZWQgYnkgYG9iai0kKENPTkZJR19QQUNLRVQpICYjNDM7PSBhZl9wYWNrZXQub2AuIFRoaXMgY29uZmlybXMgdGhlIGBBRl9QQUNLRVRgIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZC4KCkZpbmFsbHksIEkgcmV2aWV3ZWQgdGhlIGBSZWFzb25pbmdgLiBUaGUgY29tbWl0JiMzOTtzIGZpeCBmb3IgdGhlIGB0cGFja2V0X3BhcnNlX2hlYWRlcmAgc2lnbmVkL3Vuc2lnbmVkIGB0cF9sZW5gIGlzc3VlLCBhZmZlY3RpbmcgcmluZyBidWZmZXIgcGFja2V0IHRyYW5zbWlzc2lvbiwgaXMgdGhlIGNvcmUgb2YgdGhpcyB2dWxuZXJhYmlsaXR5LiBUaGlzIGhpZ2hsaWdodHMgYSBjcml0aWNhbCBhcmVhIG9mIGludGVyZXN0OiBhbnl0aGluZyBpbnRlcmFjdGluZyB3aXRoIHRoZSBgUEFDS0VUX1RYX1JJTkdgIGNvbmZpZ3VyYXRpb24uIE1hbGZvcm1lZCBwYWNrZXQgaGVhZGVycyBtaWdodCBieXBhc3MgY3J1Y2lhbCBib3VuZHMgY2hlY2tzLgoKQmVmb3JlIEkgY29tbWl0IHRvIHNldHRpbmcgdGhlIHJlc3VsdHMsIEkmIzM5O3ZlIGNvbmZpcm1lZCBldmVyeXRoaW5nLiBCYXNlZCBvbiBteSBhbmFseXNpcywgdGhlc2UgYXJlIHNvbGlkIGNhbmRpZGF0ZXMgZm9yIGZ1cnRoZXIgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBQ0tFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhY2tldF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3RwYWNrZXRfc25kJiMzNDssCiAgICAmIzM0O3BhY2tldF9zZXRzb2Nrb3B0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCBzaXplIHZhbGlkYXRpb24gaW4gdHBhY2tldF9wYXJzZV9oZWFkZXIoKSBieSBjaGFuZ2luZyB0cF9sZW4gZnJvbSBzaWduZWQgaW50IHRvIHUzMiwgcHJldmVudGluZyBzaWduZWQgaW50ZWdlciBjb21wYXJpc29uIGJ5cGFzc2VzIGR1cmluZyBBRl9QQUNLRVQgcmluZyBidWZmZXIgdHJhbnNtaXNzaW9uICh0cGFja2V0X3NuZCkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0d29ya2luZyBzb2NrZXQgbG9naWMgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBQ0tFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhY2tldF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3RwYWNrZXRfc25kJiMzNDssCiAgICAmIzM0O3BhY2tldF9zZXRzb2Nrb3B0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCBzaXplIHZhbGlkYXRpb24gaW4gdHBhY2tldF9wYXJzZV9oZWFkZXIoKSBieSBjaGFuZ2luZyB0cF9sZW4gZnJvbSBzaWduZWQgaW50IHRvIHUzMiwgcHJldmVudGluZyBzaWduZWQgaW50ZWdlciBjb21wYXJpc29uIGJ5cGFzc2VzIGR1cmluZyBBRl9QQUNLRVQgcmluZyBidWZmZXIgdHJhbnNtaXNzaW9uICh0cGFja2V0X3NuZCkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0d29ya2luZyBzb2NrZXQgbG9naWMgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTk6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBzaWduZWRuZXNzIGNvbXBhcmlzb24gaXNzdWUgaW4gYHRwYWNrZXRfcGFyc2VfaGVhZGVyKClgIGJ5IGNoYW5naW5nIGB0cF9sZW5gIGZyb20gYGludGAgdG8gYHUzMmAsIGVuc3VyaW5nIHRoYXQgbGFyZ2UgcGFja2V0IGxlbmd0aCB2YWx1ZXMgYXJlIHByb3Blcmx5IHRyZWF0ZWQgYXMgdW5zaWduZWQgd2hlbiB2YWxpZGF0ZWQgYWdhaW5zdCBgc2l6ZV9tYXhgLlxuXG5LTVNBTiBpcyBub3QgbmVlZGVkIGJlY2F1c2U6XG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkLCByZWFkLCBvciBleHBvc2VkLiBUaGUgdmFyaWFibGUgYHRwX2xlbmAgaXMgZXhwbGljaXRseSBhc3NpZ25lZCBpbiBhbGwgYnJhbmNoZXMgb2YgdGhlIGBwby1cdTAwM2V0cF92ZXJzaW9uYCBzd2l0Y2ggc3RhdGVtZW50IGJlZm9yZSBhbnkgcmVhZHMuXG4yLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UuXG4zLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgYnVncyByZWxhdGVkIHRvIGluY29ycmVjdCBsZW5ndGggYm91bmRzIGNoZWNraW5nIChlLmcuLCBvdXQtb2YtYm91bmRzIGJ1ZmZlciBhY2Nlc3MgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nKSBhcmUgb3V0LW9mLWJvdW5kcyBlcnJvcnMgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2I0NGEzODJiMTE1ZjVlZjk5NWY5MjkwMzUyNTQ1NzQ2NmZmNjM3NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDMwIDE5OjA0OjE2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKaW5kZXggYjIyY2RhMzIyMTM2My4uNzZiZGU3OTA2ZDQ5NCAxMDA2NDQKLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCkBAIC0yNjc1LDcgJiM0MzsyNjc1LDggQEAgc3RhdGljIGludCB0cGFja2V0X3BhcnNlX2hlYWRlcihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCB2b2lkICpmcmFtZSwKIAkJCQlpbnQgc2l6ZV9tYXgsIHZvaWQgKipkYXRhKQogewogCXVuaW9uIHRwYWNrZXRfdWhkciBwaDsKLQlpbnQgdHBfbGVuLCBvZmY7CiYjNDM7CXUzMiB0cF9sZW47CiYjNDM7CWludCBvZmY7CiAKIAlwaC5yYXcgPSBmcmFtZTsKIApAQCAtMjY5NSw3ICYjNDM7MjY5Niw3IEBAIHN0YXRpYyBpbnQgdHBhY2tldF9wYXJzZV9oZWFkZXIoc3RydWN0IHBhY2tldF9zb2NrICpwbywgdm9pZCAqZnJhbWUsCiAJCWJyZWFrOwogCX0KIAlpZiAodW5saWtlbHkodHBfbGVuICZndDsgc2l6ZV9tYXgpKSB7Ci0JCXByX2VycigmIzM0O3BhY2tldCBzaXplIGlzIHRvbyBsb25nICglZCAmZ3Q7ICVkKVxuJiMzNDssIHRwX2xlbiwgc2l6ZV9tYXgpOwomIzQzOwkJcHJfZXJyKCYjMzQ7cGFja2V0IHNpemUgaXMgdG9vIGxvbmcgKCV1ICZndDsgJWQpXG4mIzM0OywgdHBfbGVuLCBzaXplX21heCk7CiAJCXJldHVybiAtRU1TR1NJWkU7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTg4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBBRl9QQUNLRVQgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gdGhpcyBwYXRjaCBhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IGZvciB0aGUgYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgIGZpbGUg4oCTIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIEkgbmVlZCB0byBnZXQgdGhlIGNvbnRleHQgcmlnaHQgYXdheS4gSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIGFyb3VuZCBsaW5lIDI2NzUuIFRoYXQgc2hvdWxkIGJlIGEgY3JpdGljYWwgYXJlYSB0byBleGFtaW5lIGdpdmVuIHRoZSBuYXR1cmUgb2YgYGFmX3BhY2tldGAgYW5kIHRoZSBsaWtlbHkgZnVuY3Rpb24gY2FsbHMgYXJvdW5kIGl0LiBLbm93aW5nIHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY2hhbmdlcyBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzdWJzeXN0ZW0uIEkgYW50aWNpcGF0ZSBuZWVkaW5nIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSB3aXRoIHBhY2tldCBwcm9jZXNzaW5nLCBzb2NrZXQgb3B0aW9ucywgYW5kIGFueSBtZW1vcnkgbWFuYWdlbWVudCBhc3BlY3RzIGluIHRoYXQgdmljaW5pdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9hZl9wYWNrZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjY2MDpcdFx0XHR0b193cml0ZSAtPSBsZW47XG4yNjYxOlx0XHRcdG9mZnNldCA9IDA7XG4yNjYyOlx0XHRcdGxlbl9tYXggPSBQQUdFX1NJWkU7XG4yNjYzOlx0XHRcdGxlbiA9ICgodG9fd3JpdGUgXHUwMDNlIGxlbl9tYXgpID8gbGVuX21heCA6IHRvX3dyaXRlKTtcbjI2NjQ6XHRcdH1cbjI2NjU6XHRcbjI2NjY6XHRcdGlmICh1bmxpa2VseSghc2tiLVx1MDAzZWxlbikpXG4yNjY3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjY2ODpcdFxuMjY2OTpcdFx0cGFja2V0X3BhcnNlX2hlYWRlcnMoc2tiLCBzb2NrKTtcbjI2NzA6XHRcbjI2NzE6XHRcdHJldHVybiB0cF9sZW47XG4yNjcyOlx0fVxuMjY3MzpcdFxuMjY3NDpcdHN0YXRpYyBpbnQgdHBhY2tldF9wYXJzZV9oZWFkZXIoc3RydWN0IHBhY2tldF9zb2NrICpwbywgdm9pZCAqZnJhbWUsXG4yNjc1Olx0XHRcdFx0XHRpbnQgc2l6ZV9tYXgsIHZvaWQgKipkYXRhKVxuMjY3NjpcdHtcbjI2Nzc6XHRcdHVuaW9uIHRwYWNrZXRfdWhkciBwaDtcbjI2Nzg6XHRcdHUzMiB0cF9sZW47XG4yNjc5Olx0XHRpbnQgb2ZmO1xuMjY4MDpcdFxuMjY4MTpcdFx0cGgucmF3ID0gZnJhbWU7XG4yNjgyOlx0XG4yNjgzOlx0XHRzd2l0Y2ggKHBvLVx1MDAzZXRwX3ZlcnNpb24pIHtcbjI2ODQ6XHRcdGNhc2UgVFBBQ0tFVF9WMzpcbjI2ODU6XHRcdFx0aWYgKHBoLmgzLVx1MDAzZXRwX25leHRfb2Zmc2V0ICE9IDApIHtcbjI2ODY6XHRcdFx0XHRwcl93YXJuX29uY2UoXCYjMzQ7dmFyaWFibGUgc2l6ZWQgc2xvdCBub3Qgc3VwcG9ydGVkXCYjMzQ7KTtcbjI2ODc6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI2ODg6XHRcdFx0fVxuMjY4OTpcdFx0XHR0cF9sZW4gPSBwaC5oMy1cdTAwM2V0cF9sZW47XG4yNjkwOlx0XHRcdGJyZWFrO1xuMjY5MTpcdFx0Y2FzZSBUUEFDS0VUX1YyOlxuMjY5MjpcdFx0XHR0cF9sZW4gPSBwaC5oMi1cdTAwM2V0cF9sZW47XG4yNjkzOlx0XHRcdGJyZWFrO1xuMjY5NDpcdFx0ZGVmYXVsdDpcbjI2OTU6XHRcdFx0dHBfbGVuID0gcGguaDEtXHUwMDNldHBfbGVuO1xuMjY5NjpcdFx0XHRicmVhaztcbjI2OTc6XHRcdH1cbjI2OTg6XHRcdGlmICh1bmxpa2VseSh0cF9sZW4gXHUwMDNlIHNpemVfbWF4KSkge1xuMjY5OTpcdFx0XHRwcl9lcnIoXCYjMzQ7cGFja2V0IHNpemUgaXMgdG9vIGxvbmcgKCV1IFx1MDAzZSAlZClcXG5cJiMzNDssIHRwX2xlbiwgc2l6ZV9tYXgpO1xuMjcwMDpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuMjcwMTpcdFx0fVxuMjcwMjpcdFxuMjcwMzpcdFx0aWYgKHVubGlrZWx5KHBhY2tldF9zb2NrX2ZsYWcocG8sIFBBQ0tFVF9TT0NLX1RYX0hBU19PRkYpKSkge1xuMjcwNDpcdFx0XHRpbnQgb2ZmX21pbiwgb2ZmX21heDtcbjI3MDU6XHRcbjI3MDY6XHRcdFx0b2ZmX21pbiA9IHBvLVx1MDAzZXRwX2hkcmxlbiAtIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpO1xuMjcwNzpcdFx0XHRvZmZfbWF4ID0gcG8tXHUwMDNldHhfcmluZy5mcmFtZV9zaXplIC0gdHBfbGVuO1xuMjcwODpcdFx0XHRpZiAocG8tXHUwMDNlc2suc2tfdHlwZSA9PSBTT0NLX0RHUkFNKSB7XG4yNzA5Olx0XHRcdFx0c3dpdGNoIChwby1cdTAwM2V0cF92ZXJzaW9uKSB7XG4yNzEwOlx0XHRcdFx0Y2FzZSBUUEFDS0VUX1YzOlxuMjcxMTpcdFx0XHRcdFx0b2ZmID0gcGguaDMtXHUwMDNldHBfbmV0O1xuMjcxMjpcdFx0XHRcdFx0YnJlYWs7XG4yNzEzOlx0XHRcdFx0Y2FzZSBUUEFDS0VUX1YyOlxuMjcxNDpcdFx0XHRcdFx0b2ZmID0gcGguaDItXHUwMDNldHBfbmV0O1xuMjcxNTpcdFx0XHRcdFx0YnJlYWs7XG4yNzE2Olx0XHRcdFx0ZGVmYXVsdDpcbjI3MTc6XHRcdFx0XHRcdG9mZiA9IHBoLmgxLVx1MDAzZXRwX25ldDtcbjI3MTg6XHRcdFx0XHRcdGJyZWFrO1xuMjcxOTpcdFx0XHRcdH1cbjI3MjA6XHRcdFx0fSBlbHNlIHtcbjI3MjE6XHRcdFx0XHRzd2l0Y2ggKHBvLVx1MDAzZXRwX3ZlcnNpb24pIHtcbjI3MjI6XHRcdFx0XHRjYXNlIFRQQUNLRVRfVjM6XG4yNzIzOlx0XHRcdFx0XHRvZmYgPSBwaC5oMy1cdTAwM2V0cF9tYWM7XG4yNzI0Olx0XHRcdFx0XHRicmVhaztcbjI3MjU6XHRcdFx0XHRjYXNlIFRQQUNLRVRfVjI6XG4yNzI2Olx0XHRcdFx0XHRvZmYgPSBwaC5oMi1cdTAwM2V0cF9tYWM7XG4yNzI3Olx0XHRcdFx0XHRicmVhaztcbjI3Mjg6XHRcdFx0XHRkZWZhdWx0OlxuMjcyOTpcdFx0XHRcdFx0b2ZmID0gcGguaDEtXHUwMDNldHBfbWFjO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDU0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgdHBhY2tldF9wYXJzZV9oZWFkZXJgKioKCk9rYXksIHNvIEkmIzM5O20gYXQgdGhlIHBvaW50IHdoZXJlIEkgbmVlZCB0byByZWFsbHkgZGlnIGludG8gYHRwYWNrZXRfcGFyc2VfaGVhZGVyYC4gSSYjMzk7dmUgZ290IGEgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIGRhdGEgZmxvdywgYnV0IG5vdyBpdCYjMzk7cyB0aW1lIHRvIHVuZGVyc3RhbmQgdGhlIG5pdHR5LWdyaXR0eSBvZiAqaG93KiB0aGlzIGhlYWRlciBpcyBwYXJzZWQgYW5kLCBjcnVjaWFsbHksIGhvdyBpdCBnZXRzIGludGVncmF0ZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGlwZWxpbmUuIExldCYjMzk7cyB0cmFjZSBpdCBhbmQgZmlndXJlIG91dCB0aGUgY2FsbCBzaXRlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJiMzOTtzIHJlc3BvbnNpYmlsaXR5LCBhbmQgd2hhdCBkYXRhIGl0IHJlbGllcyBvbi4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyB0aGUgaGVhZGVyIGluZm9ybWF0aW9uIGlzIGV4dHJhY3RlZCwgdmFsaWRhdGVkIChpZiBhdCBhbGwhKSwgYW5kIGhhbmRlZCBvZmYuIEFyZSB0aGVyZSBhbnkgYXNzdW1wdGlvbnMgYmVpbmcgbWFkZSBhYm91dCB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGFkYXB0ZXIgb3IgbGluayBsYXllcj8gQXJlIHRoZXJlIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yIHZ1bG5lcmFiaWxpdGllcz8gVGltZSB0byBmaXJlIHVwIHRoZSBkZWJ1Z2dlciBhbmQgc3RhcnQgd2Fsa2luZyB0aGUgY29kZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYW55IGVycm9yIGhhbmRsaW5nIHBhdGhzIGFuZCBob3cgdGhvc2UgYXJlIG1hbmFnZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcGFja2V0L2FmX3BhY2tldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjczMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzMwOlx0XHRcdFx0XHRicmVhaztcbjI3MzE6XHRcdFx0XHR9XG4yNzMyOlx0XHRcdH1cbjI3MzM6XHRcdFx0aWYgKHVubGlrZWx5KChvZmYgXHUwMDNjIG9mZl9taW4pIHx8IChvZmZfbWF4IFx1MDAzYyBvZmYpKSlcbjI3MzQ6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI3MzU6XHRcdH0gZWxzZSB7XG4yNzM2Olx0XHRcdG9mZiA9IHBvLVx1MDAzZXRwX2hkcmxlbiAtIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpO1xuMjczNzpcdFx0fVxuMjczODpcdFxuMjczOTpcdFx0KmRhdGEgPSBmcmFtZSAmIzQzOyBvZmY7XG4yNzQwOlx0XHRyZXR1cm4gdHBfbGVuO1xuMjc0MTpcdH1cbjI3NDI6XHRcbjI3NDM6XHRzdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZylcbjI3NDQ6XHR7XG4yNzQ1Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbjI3NDY6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4yNzQ3Olx0XHRzdHJ1Y3QgdmlydGlvX25ldF9oZHIgdm5ldF9oZHI7XG4yNzQ4Olx0XHRib29sIGhhc192bmV0X2hkciA9IGZhbHNlO1xuMjc0OTpcdFx0c3RydWN0IHNvY2tjbV9jb29raWUgc29ja2M7XG4yNzUwOlx0XHRfX2JlMTYgcHJvdG87XG4yNzUxOlx0XHRpbnQgZXJyLCByZXNlcnZlID0gMDtcbjI3NTI6XHRcdHZvaWQgKnBoO1xuMjc1MzpcdFx0REVDTEFSRV9TT0NLQUREUihzdHJ1Y3Qgc29ja2FkZHJfbGwgKiwgc2FkZHIsIG1zZy1cdTAwM2Vtc2dfbmFtZSk7XG4yNzU0Olx0XHRib29sIG5lZWRfd2FpdCA9ICEobXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbjI3NTU6XHRcdGludCB2bmV0X2hkcl9zeiA9IFJFQURfT05DRShwby1cdTAwM2V2bmV0X2hkcl9zeik7XG4yNzU2Olx0XHR1bnNpZ25lZCBjaGFyICphZGRyID0gTlVMTDtcbjI3NTc6XHRcdGludCB0cF9sZW4sIHNpemVfbWF4O1xuMjc1ODpcdFx0dm9pZCAqZGF0YTtcbjI3NTk6XHRcdGludCBsZW5fc3VtID0gMDtcbjI3NjA6XHRcdGludCBzdGF0dXMgPSBUUF9TVEFUVVNfQVZBSUxBQkxFO1xuMjc2MTpcdFx0aW50IGhhcmRfaGVhZGVyX2xlbiwgaGxlbiwgdGxlbiwgY29weWxlbiA9IDA7XG4yNzYyOlx0XHRsb25nIHRpbWVvO1xuMjc2MzpcdFxuMjc2NDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZwby1cdTAwM2VwZ192ZWNfbG9jayk7XG4yNzY1Olx0XG4yNzY2Olx0XHQvKiBwYWNrZXRfc2VuZG1zZygpIGNoZWNrIG9uIHR4X3JpbmcucGdfdmVjIHdhcyBsb2NrbGVzcyxcbjI3Njc6XHRcdCAqIHdlIG5lZWQgdG8gY29uZmlybSBpdCB1bmRlciBwcm90ZWN0aW9uIG9mIHBnX3ZlY19sb2NrLlxuMjc2ODpcdFx0ICovXG4yNzY5Olx0XHRpZiAodW5saWtlbHkoIXBvLVx1MDAzZXR4X3JpbmcucGdfdmVjKSkge1xuMjc3MDpcdFx0XHRlcnIgPSAtRUJVU1k7XG4yNzcxOlx0XHRcdGdvdG8gb3V0O1xuMjc3MjpcdFx0fVxuMjc3MzpcdFx0aWYgKGxpa2VseShzYWRkciA9PSBOVUxMKSkge1xuMjc3NDpcdFx0XHRkZXZcdD0gcGFja2V0X2NhY2hlZF9kZXZfZ2V0KHBvKTtcbjI3NzU6XHRcdFx0cHJvdG9cdD0gUkVBRF9PTkNFKHBvLVx1MDAzZW51bSk7XG4yNzc2Olx0XHR9IGVsc2Uge1xuMjc3NzpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMjc3ODpcdFx0XHRpZiAobXNnLVx1MDAzZW1zZ19uYW1lbGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2xsKSlcbjI3Nzk6XHRcdFx0XHRnb3RvIG91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUwMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDUwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENoYW5nZSB0byBgdHBfbGVuYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZSBjaGFuZ2UuIE15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMgYXJvdW5kIHBvdGVudGlhbCBzaWduZWRuZXNzIGlzc3VlcywgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIHNpemVzIG9yIGxlbmd0aHMuIEl0IGxvb2tzIGxpa2UgYHRwX2xlbmAgd2FzIHByZXZpb3VzbHkgYW4gYGludGAsIGJ1dCBpdCYjMzk7cyBub3cgYmVpbmcgY2hhbmdlZCB0byBhIGB1MzJgIChvciB1bnNpZ25lZCBpbnRlZ2VyIHdpdGggMzIgYml0cykuIFRoZSBvbGQgY29kZSBjb21wYXJlZCBgdHBfbGVuYCB3aXRoIGBzaXplX21heGAsIHdoaWNoIGlzIHBhc3NlZCBhcyBhbiBgaW50YC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0LCBpZiBgdHBfbGVuYCB3YXMgYSBsYXJnZSwgJiMzNDtuZWdhdGl2ZSYjMzQ7IGBpbnRgIChlZmZlY3RpdmVseSBhIGxhcmdlIHVuc2lnbmVkIHZhbHVlKSwgdGhlIG9yaWdpbmFsIHNpZ25lZCBjb21wYXJpc29uIGNvdWxkIGhhdmUgaW5jb3JyZWN0bHkgZXZhbHVhdGVkIHRvIGZhbHNlIGlmIGBzaXplX21heGAgd2FzIHBvc2l0aXZlLiBUaGlzIHdvdWxkIGFsbG93IGEgbmVnYXRpdmUgYHRwX2xlbmAgdmFsdWUgdG8gc2xpcCB0aHJvdWdoLCBsZWFkaW5nIHRvIHNlcmlvdXMgcHJvYmxlbXMgbGF0ZXIgb24gd2hlbiB1c2VkIHRvIGRldGVybWluZSBidWZmZXIgc2l6ZXMuIFRoZSBmaXggYWRkcmVzc2VzIHRoaXMgYnkgZm9yY2luZyBhbiB1bnNpZ25lZCBjb21wYXJpc29uIChgdTMyYCB2cyBgaW50YCB0cmlnZ2VycyBwcm9tb3Rpb24gb2YgdGhlIHNpZ25lZCBgaW50YCB0byBgdW5zaWduZWQgaW50YCksIHNvIGxhcmdlIHZhbHVlcyBub3cgY29ycmVjdGx5IHRyaWdnZXIgdGhlIGJvdW5kcyBjaGVjay4gV2Ugd2FudCB0aGUgY29tcGFyaXNvbiB0byByZWplY3QgYW55IHZhbHVlIHRoYXQgY291bGQgYmUgcHJvYmxlbWF0aWMuCgpOb3csIEkgbmVlZCB0byB0aG9yb3VnaGx5IGFzc2VzcyBpZiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIEkgYWx3YXlzIGxvb2sgZm9yIHRoaXMhCgpMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duOgoKMS4gIElzIGB0cF9sZW5gIGl0c2VsZiB1bmluaXRpYWxpemVkIGJlZm9yZSB1c2U/IE5vLCBpdCYjMzk7cyBpbml0aWFsaXplZCBpbiBhbGwgdGhlIHN3aXRjaCBjYXNlcyAoYFRQQUNLRVRfVjNgLCBgVFBBQ0tFVF9WMmAsIGFuZCB0aGUgZGVmYXVsdCBjYXNlKSwgc28gdGhhdCBpcyBub3QgYSBjb25jZXJuLgoyLiAgRG9lcyB0aGlzIHBhdGNoICppbnRyb2R1Y2UqIGFueSBpbnN0YW5jZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlPyBJIG5lZWQgdG8gY2hlY2sga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBvciBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBpbml0aWFsaXplZCwgYnV0IEkgZG8gbm90IGJlbGlldmUgdGhpcyBpcyBhIGZhY3RvciBoZXJlLgozLiAgRG9lcyB0aGUgcGF0Y2ggaW50cm9kdWNlICphbnkqIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gVGhlIGxvZ2ljIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYW5kIGRvZXNuJiMzOTt0IHJlbHkgb24gdW5pbml0aWFsaXplZCBkYXRhLCBzbyBJJiMzOTttIG5vdCBzZWVpbmcgdGhhdC4KNC4gIEFyZSB0aGVyZSBhbnkgYWxsb2NhdGlvbnMgb3IgaW5pdGlhbGl6YXRpb25zIG9mIGNvbXBsZXggc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSBwcm9ibGVtYXRpYz8gTm8sIG5vdGhpbmcganVtcHMgb3V0IGF0IG1lLgo1LiAgQ291bGQgdGhlIGNoYW5nZSB0byBgdHBfbGVuYCBpbnRyb2R1Y2UgYW55IGJvdW5kcyBjaGVjayBmbGF3cyBvciBsZW5ndGggY2FsY3VsYXRpb25zLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM/IFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZyEKClRoZSBrZXkgaXMgdGhhdCBpZiBgdHBfbGVuYCAqd2FzKiBuZWdhdGl2ZSBiZWZvcmUsIHdvdWxkIGl0IGhhdmUgY2F1c2VkIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIG92ZXJmbG93IGluIHRoZSAqcGFja2V0IHRyYW5zbWlzc2lvbiogcGhhc2U/IEl0IGxvb2tzIGxpa2UgYHRwX2xlbmAgaXMgcmV0dXJuZWQgYnkgYHRwYWNrZXRfcGFyc2VfaGVhZGVyYCBhbmQgdXNlZCBpbiBgdHBhY2tldF9zbmRgLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGNhcmVmdWxseSBob3cgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGB0cGFja2V0X3BhcnNlX2hlYWRlcmAgaXMgaGFuZGxlZCBpbiBgdHBhY2tldF9zbmRgLiBJZiBgdHBfbGVuYCBpcyBsZXNzIHRoYW4gemVybywgYHRwYWNrZXRfc25kYCBkb2VzIHNlZW0gdG8gaGF2ZSBhIGNoZWNrLCBidXQgaXQgbmVlZHMgdG8gYmUgdmVyaWZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9hZl9wYWNrZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjgzMDpcdFx0XHRcdFx0dGltZW8gPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dChcdTAwMjZwby1cdTAwM2Vza2JfY29tcGxldGlvbiwgdGltZW8pO1xuMjgzMTpcdFx0XHRcdFx0aWYgKHRpbWVvIFx1MDAzYz0gMCkge1xuMjgzMjpcdFx0XHRcdFx0XHRlcnIgPSAhdGltZW8gPyAtRVRJTUVET1VUIDogLUVSRVNUQVJUU1lTO1xuMjgzMzpcdFx0XHRcdFx0XHRnb3RvIG91dF9wdXQ7XG4yODM0Olx0XHRcdFx0XHR9XG4yODM1Olx0XHRcdFx0XHQvKiBjaGVjayBmb3IgYWRkaXRpb25hbCBmcmFtZXMgKi9cbjI4MzY6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjgzNzpcdFx0XHRcdH0gZWxzZVxuMjgzODpcdFx0XHRcdFx0YnJlYWs7XG4yODM5Olx0XHRcdH1cbjI4NDA6XHRcbjI4NDE6XHRcdFx0c2tiID0gTlVMTDtcbjI4NDI6XHRcdFx0dHBfbGVuID0gdHBhY2tldF9wYXJzZV9oZWFkZXIocG8sIHBoLCBzaXplX21heCwgXHUwMDI2ZGF0YSk7XG4yODQzOlx0XHRcdGlmICh0cF9sZW4gXHUwMDNjIDApXG4yODQ0Olx0XHRcdFx0Z290byB0cGFja2V0X2Vycm9yO1xuMjg0NTpcdFxuMjg0NjpcdFx0XHRzdGF0dXMgPSBUUF9TVEFUVVNfU0VORF9SRVFVRVNUO1xuMjg0NzpcdFx0XHRobGVuID0gTExfUkVTRVJWRURfU1BBQ0VfRVgoZGV2LCBoYXJkX2hlYWRlcl9sZW4pO1xuMjg0ODpcdFx0XHR0bGVuID0gZGV2LVx1MDAzZW5lZWRlZF90YWlscm9vbTtcbjI4NDk6XHRcdFx0aWYgKHZuZXRfaGRyX3N6KSB7XG4yODUwOlx0XHRcdFx0ZGF0YSAmIzQzOz0gdm5ldF9oZHJfc3o7XG4yODUxOlx0XHRcdFx0dHBfbGVuIC09IHZuZXRfaGRyX3N6O1xuMjg1MjpcdFx0XHRcdGlmICh0cF9sZW4gXHUwMDNjIDApIHtcbjI4NTM6XHRcdFx0XHRcdHRwX2xlbiA9IC1FSU5WQUw7XG4yODU0Olx0XHRcdFx0XHRnb3RvIHRwYWNrZXRfZXJyb3I7XG4yODU1Olx0XHRcdFx0fVxuMjg1NjpcdFx0XHRcdG1lbWNweShcdTAwMjZ2bmV0X2hkciwgZGF0YSAtIHZuZXRfaGRyX3N6LCBzaXplb2Yodm5ldF9oZHIpKTtcbjI4NTc6XHRcdFx0XHRpZiAoX19wYWNrZXRfc25kX3ZuZXRfcGFyc2UoXHUwMDI2dm5ldF9oZHIsIHRwX2xlbikpIHtcbjI4NTg6XHRcdFx0XHRcdHRwX2xlbiA9IC1FSU5WQUw7XG4yODU5Olx0XHRcdFx0XHRnb3RvIHRwYWNrZXRfZXJyb3I7XG4yODYwOlx0XHRcdFx0fVxuMjg2MTpcdFx0XHRcdGNvcHlsZW4gPSBfX3ZpcnRpbzE2X3RvX2NwdSh2aW9fbGUoKSxcbjI4NjI6XHRcdFx0XHRcdFx0XHQgICAgdm5ldF9oZHIuaGRyX2xlbik7XG4yODYzOlx0XHRcdFx0aGFzX3ZuZXRfaGRyID0gdHJ1ZTtcbjI4NjQ6XHRcdFx0fVxuMjg2NTpcdFx0XHRjb3B5bGVuID0gbWF4X3QoaW50LCBjb3B5bGVuLCBoYXJkX2hlYWRlcl9sZW4pO1xuMjg2NjpcdFx0XHRza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKFx1MDAyNnBvLVx1MDAzZXNrLFxuMjg2NzpcdFx0XHRcdFx0aGxlbiAmIzQzOyB0bGVuICYjNDM7IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpICYjNDM7XG4yODY4Olx0XHRcdFx0XHQoY29weWxlbiAtIGhhcmRfaGVhZGVyX2xlbiksXG4yODY5Olx0XHRcdFx0XHQhbmVlZF93YWl0LCBcdTAwMjZlcnIpO1xuMjg3MDpcdFxuMjg3MTpcdFx0XHRpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKSB7XG4yODcyOlx0XHRcdFx0Lyogd2UgYXNzdW1lIHRoZSBzb2NrZXQgd2FzIGluaXRpYWxseSB3cml0ZWFibGUgLi4uICovXG4yODczOlx0XHRcdFx0aWYgKGxpa2VseShsZW5fc3VtIFx1MDAzZSAwKSlcbjI4NzQ6XHRcdFx0XHRcdGVyciA9IGxlbl9zdW07XG4yODc1Olx0XHRcdFx0Z290byBvdXRfc3RhdHVzO1xuMjg3NjpcdFx0XHR9XG4yODc3Olx0XHRcdHRwX2xlbiA9IHRwYWNrZXRfZmlsbF9za2IocG8sIHNrYiwgcGgsIGRldiwgZGF0YSwgdHBfbGVuLCBwcm90byxcbjI4Nzg6XHRcdFx0XHRcdFx0ICBhZGRyLCBobGVuLCBjb3B5bGVuLCBoYXJkX2hlYWRlcl9sZW4sXG4yODc5Olx0XHRcdFx0XHRcdCAgXHUwMDI2c29ja2MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDc2CgkJCQkJCQlvdXRwdXQ6IDIwOAoJCQkJCQkJdGhvdWdodHM6IDY5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2gmIzM5O3MgU2FuaXRpemVyIFJlcXVpcmVtZW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIGlzc3VlIGFuZCB0aGVuIGRldGVybWluZSBpZiBpdCBpbnRyb2R1Y2VzIGFueSBLTVNBTi1yZWxldmFudCBjb25jZXJucy4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyBpbiB0aGUgYHRwYWNrZXRfcGFyc2VfaGVhZGVyYCBmdW5jdGlvbiB3aGVyZSBhIHNpZ25lZG5lc3MgaXNzdWUgaW4gdGhlIGNvbXBhcmlzb24gb2YgYHRwX2xlbmAgYWxsb3dlZCBvdmVyc2l6ZWQgZnJhbWVzIHRvIGJ5cGFzcyBwcm9wZXIgdmFsaWRhdGlvbi4gU3BlY2lmaWNhbGx5LCBhIGxhcmdlIHVuc2lnbmVkIHZhbHVlIGZvciBgdHBfbGVuYCBjb3VsZCBiZSBtaXNpbnRlcnByZXRlZCBhcyBhIG5lZ2F0aXZlIGBpbnRgLCBsZWFkaW5nIHRvIGluY29ycmVjdCBsZW5ndGggY2hlY2tzLiBUaGlzIHBhdGNoIGNoYW5nZXMgYHRwX2xlbmAgZnJvbSBhbiBgaW50YCB0byBhIGB1MzJgIHRvIGVuc3VyZSBwcm9wZXIgY29tcGFyaXNvbiB3aXRoIGBzaXplX21heGAgYW5kIGNvcnJlY3QgcmVqZWN0aW9uIG9mIG92ZXJzaXplZCBmcmFtZXMuCgpNeSBwcmltYXJ5IGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBEb2VzIHRoaXMgY2hhbmdlIGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIHBvdGVudGlhbCBzdHJ1Y3QgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgY29waWVzIHRvIHVzZXJzcGFjZT8gTGV0JiMzOTtzIHZlcmlmeS4gVGhlIGxvZ2ljIHNob3dzIGB0cF9sZW5gIGlzIGRlcml2ZWQgZnJvbSBgcGguaDMtJmd0O3RwX2xlbmAsIGBwaC5oMi0mZ3Q7dHBfbGVuYCwgb3IgYHBoLmgxLSZndDt0cF9sZW5gIGFjcm9zcyBhbGwgY29udHJvbCBmbG93IHBhdGhzIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50LiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIHRoZXJlJiMzOTtzIG5vIGV2aWRlbmNlIG9mIGFueSBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MuIFRoZSBwcm9ibGVtIGlzIHB1cmVseSBhIHNpZ25lZCBpbnRlZ2VyIGNvbXBhcmlzb24vb3ZlcmZsb3cgYnVnIGluIGxlbmd0aCB2YWxpZGF0aW9uLiBNZW1vcnkgc2FmZXR5IGlzc3VlcyBzdGVtbWluZyBmcm9tIGluY29ycmVjdCBsZW5ndGggY2hlY2tzLCBzdWNoIGFzIGJ1ZmZlciBvdmVyZmxvd3Mgb3Igb3V0LW9mLWJvdW5kcyByZWFkcywgYXJlIGFscmVhZHkgYWRkcmVzc2VkIGJ5IEtBU0FOLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBLQVNBTiBhbmQgS01TQU4gYXJlIGNvcnJlY3RseSBhZGRyZXNzZWQuIEtBU0FOIGlzIHRoZSBrZXJuZWwgYWRkcmVzcyBzYW5pdGl6ZXIsIGFuZCBJIGtub3cgaXQgZGV0ZWN0cyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBkb3VibGUtZnJlZXMsIGFuZCBidWZmZXIgb3ZlcmZsb3dzLiBLTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGlzIHNwZWNpZmljYWxseSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGFuZCBpdCBkZXRlY3RzIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyBzdGVtbWluZyBmcm9tIHRoaXMuCgpTaW5jZSB0aGlzIHBhdGNoICpkb2VzbiYjMzk7dCogaW50cm9kdWNlIG9yIHV0aWxpemUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpdCBsb29rcyBsaWtlIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gVGhlIHBhdGNoIGZvY3VzZXMgb24gZml4aW5nIGEgc2lnbmVkbmVzcyBidWcsIGFuZCB0aGUgaW50ZWdlciBgdHBfbGVuYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4gS01TQU4gaXMgbm90IHRyaWdnZXJlZCwgYW5kIEtBU0FOIHNob3VsZCBoYW5kbGUgYW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIGR1ZSB0byBpbmNvcnJlY3QgbGVuZ3RoLgoKTGV0IG1lIGRvdWJsZS1jaGVjay4gVGhlIHBhdGNoIGZpeGVzIGEgc2lnbmVkbmVzcyBjb21wYXJpc29uIGJ1ZyBpbiBgdHBhY2tldF9wYXJzZV9oZWFkZXJgIGJ5IGNoYW5naW5nIGB0cF9sZW5gIGZyb20gYGludGAgdG8gYHUzMmAsIHdoaWNoIGVuc3VyZXMgdGhhdCBvdmVyc2l6ZWQgZnJhbWUgbGVuZ3RocyBhcmUgcHJvcGVybHkgcmVqZWN0ZWQgd2l0aCBgLUVNU0dTSVpFYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcy4gYHRwX2xlbmAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCBhY3Jvc3MgYWxsIGNvbnRyb2wgZmxvdyBicmFuY2hlcyBpbiBgdHBhY2tldF9wYXJzZV9oZWFkZXJgLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIG9yIHdyaXRlcyByZXN1bHRpbmcgZnJvbSBpbmNvcnJlY3QgbGVuZ3RoIG9yIG9mZnNldCB2YWxpZGF0aW9uIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLiBJdCYjMzk7cyBjbGVhci4KClRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE5OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIHNpZ25lZG5lc3MgY29tcGFyaXNvbiBpc3N1ZSBpbiBgdHBhY2tldF9wYXJzZV9oZWFkZXIoKWAgYnkgY2hhbmdpbmcgYHRwX2xlbmAgZnJvbSBgaW50YCB0byBgdTMyYCwgZW5zdXJpbmcgdGhhdCBsYXJnZSBwYWNrZXQgbGVuZ3RoIHZhbHVlcyBhcmUgcHJvcGVybHkgdHJlYXRlZCBhcyB1bnNpZ25lZCB3aGVuIHZhbGlkYXRlZCBhZ2FpbnN0IGBzaXplX21heGAuXG5cbktNU0FOIGlzIG5vdCBuZWVkZWQgYmVjYXVzZTpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQsIHJlYWQsIG9yIGV4cG9zZWQuIFRoZSB2YXJpYWJsZSBgdHBfbGVuYCBpcyBleHBsaWNpdGx5IGFzc2lnbmVkIGluIGFsbCBicmFuY2hlcyBvZiB0aGUgYHBvLVx1MDAzZXRwX3ZlcnNpb25gIHN3aXRjaCBzdGF0ZW1lbnQgYmVmb3JlIGFueSByZWFkcy5cbjIuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS5cbjMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBidWdzIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IGxlbmd0aCBib3VuZHMgY2hlY2tpbmcgKGUuZy4sIG91dC1vZi1ib3VuZHMgYnVmZmVyIGFjY2VzcyBkdXJpbmcgcGFja2V0IHByb2Nlc3NpbmcpIGFyZSBvdXQtb2YtYm91bmRzIGVycm9ycyBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgc2lnbmVkbmVzcyBjb21wYXJpc29uIGlzc3VlIGluIGB0cGFja2V0X3BhcnNlX2hlYWRlcigpYCBieSBjaGFuZ2luZyBgdHBfbGVuYCBmcm9tIGBpbnRgIHRvIGB1MzJgLCBlbnN1cmluZyB0aGF0IGxhcmdlIHBhY2tldCBsZW5ndGggdmFsdWVzIGFyZSBwcm9wZXJseSB0cmVhdGVkIGFzIHVuc2lnbmVkIHdoZW4gdmFsaWRhdGVkIGFnYWluc3QgYHNpemVfbWF4YC5cblxuS01TQU4gaXMgbm90IG5lZWRlZCBiZWNhdXNlOlxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCwgcmVhZCwgb3IgZXhwb3NlZC4gVGhlIHZhcmlhYmxlIGB0cF9sZW5gIGlzIGV4cGxpY2l0bHkgYXNzaWduZWQgaW4gYWxsIGJyYW5jaGVzIG9mIHRoZSBgcG8tXHUwMDNldHBfdmVyc2lvbmAgc3dpdGNoIHN0YXRlbWVudCBiZWZvcmUgYW55IHJlYWRzLlxuMi4gVGhlIHBhdGNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLlxuMy4gQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGJ1Z3MgcmVsYXRlZCB0byBpbmNvcnJlY3QgbGVuZ3RoIGJvdW5kcyBjaGVja2luZyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBidWZmZXIgYWNjZXNzIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZykgYXJlIG91dC1vZi1ib3VuZHMgZXJyb3JzIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE5OjA0OjE4LjUwNzUwNzE4N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTAxNjkzNDczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUNLRVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWNrZXRfc2VuZG1zZ1wiLFxuICAgIFwidHBhY2tldF9zbmRcIixcbiAgICBcInBhY2tldF9zZXRzb2Nrb3B0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBzaWduZWRuZXNzIGNvbXBhcmlzb24gaXNzdWUgaW4gYHRwYWNrZXRfcGFyc2VfaGVhZGVyKClgIGJ5IGNoYW5naW5nIGB0cF9sZW5gIGZyb20gYGludGAgdG8gYHUzMmAsIGVuc3VyaW5nIHRoYXQgbGFyZ2UgcGFja2V0IGxlbmd0aCB2YWx1ZXMgYXJlIHByb3Blcmx5IHRyZWF0ZWQgYXMgdW5zaWduZWQgd2hlbiB2YWxpZGF0ZWQgYWdhaW5zdCBgc2l6ZV9tYXhgLlxcblxcbktNU0FOIGlzIG5vdCBuZWVkZWQgYmVjYXVzZTpcXG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkLCByZWFkLCBvciBleHBvc2VkLiBUaGUgdmFyaWFibGUgYHRwX2xlbmAgaXMgZXhwbGljaXRseSBhc3NpZ25lZCBpbiBhbGwgYnJhbmNoZXMgb2YgdGhlIGBwby1cXHUwMDNldHBfdmVyc2lvbmAgc3dpdGNoIHN0YXRlbWVudCBiZWZvcmUgYW55IHJlYWRzLlxcbjIuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS5cXG4zLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgYnVncyByZWxhdGVkIHRvIGluY29ycmVjdCBsZW5ndGggYm91bmRzIGNoZWNraW5nIChlLmcuLCBvdXQtb2YtYm91bmRzIGJ1ZmZlciBhY2Nlc3MgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nKSBhcmUgb3V0LW9mLWJvdW5kcyBlcnJvcnMgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgc2l6ZSB2YWxpZGF0aW9uIGluIHRwYWNrZXRfcGFyc2VfaGVhZGVyKCkgYnkgY2hhbmdpbmcgdHBfbGVuIGZyb20gc2lnbmVkIGludCB0byB1MzIsIHByZXZlbnRpbmcgc2lnbmVkIGludGVnZXIgY29tcGFyaXNvbiBieXBhc3NlcyBkdXJpbmcgQUZfUEFDS0VUIHJpbmcgYnVmZmVyIHRyYW5zbWlzc2lvbiAodHBhY2tldF9zbmQpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgc29ja2V0IGxvZ2ljIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxOTowNDoxOC41MDc1MTIwNzdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTcxMDg3MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjYjQ0YTM4MmIxMTVmNWVmOTk1ZjkyOTAzNTI1NDU3NDY2ZmY2Mzc3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDMwIDE5OjA0OjE2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXFxuaW5kZXggYjIyY2RhMzIyMTM2My4uNzZiZGU3OTA2ZDQ5NCAxMDA2NDRcXG4tLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jXFxuKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xcbkBAIC0yNjc1LDcgKzI2NzUsOCBAQCBzdGF0aWMgaW50IHRwYWNrZXRfcGFyc2VfaGVhZGVyKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHZvaWQgKmZyYW1lLFxcbiBcXHRcXHRcXHRcXHRpbnQgc2l6ZV9tYXgsIHZvaWQgKipkYXRhKVxcbiB7XFxuIFxcdHVuaW9uIHRwYWNrZXRfdWhkciBwaDtcXG4tXFx0aW50IHRwX2xlbiwgb2ZmO1xcbitcXHR1MzIgdHBfbGVuO1xcbitcXHRpbnQgb2ZmO1xcbiBcXG4gXFx0cGgucmF3ID0gZnJhbWU7XFxuIFxcbkBAIC0yNjk1LDcgKzI2OTYsNyBAQCBzdGF0aWMgaW50IHRwYWNrZXRfcGFyc2VfaGVhZGVyKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHZvaWQgKmZyYW1lLFxcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXHRpZiAodW5saWtlbHkodHBfbGVuIFxcdTAwM2Ugc2l6ZV9tYXgpKSB7XFxuLVxcdFxcdHByX2VycihcXFwicGFja2V0IHNpemUgaXMgdG9vIGxvbmcgKCVkIFxcdTAwM2UgJWQpXFxcXG5cXFwiLCB0cF9sZW4sIHNpemVfbWF4KTtcXG4rXFx0XFx0cHJfZXJyKFxcXCJwYWNrZXQgc2l6ZSBpcyB0b28gbG9uZyAoJXUgXFx1MDAzZSAlZClcXFxcblxcXCIsIHRwX2xlbiwgc2l6ZV9tYXgpO1xcbiBcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxOTowNDoyMC4wNjU0ODA4NTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjY5MDA0ODkyMzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBQ0tFVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhY2tldF9zZW5kbXNnXCIsXG4gICAgXCJ0cGFja2V0X3NuZFwiLFxuICAgIFwicGFja2V0X3NldHNvY2tvcHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgc2l6ZSB2YWxpZGF0aW9uIGluIHRwYWNrZXRfcGFyc2VfaGVhZGVyKCkgYnkgY2hhbmdpbmcgdHBfbGVuIGZyb20gc2lnbmVkIGludCB0byB1MzIsIHByZXZlbnRpbmcgc2lnbmVkIGludGVnZXIgY29tcGFyaXNvbiBieXBhc3NlcyBkdXJpbmcgQUZfUEFDS0VUIHJpbmcgYnVmZmVyIHRyYW5zbWlzc2lvbiAodHBhY2tldF9zbmQpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgc29ja2V0IGxvZ2ljIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjYjQ0YTM4MmIxMTVmNWVmOTk1ZjkyOTAzNTI1NDU3NDY2ZmY2Mzc3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMzAgMTk6MDQ6MTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuaW5kZXggYjIyY2RhMzIyMTM2My4uNzZiZGU3OTA2ZDQ5NCAxMDA2NDRcbi0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcbisrKyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcbkBAIC0yNjc1LDcgKzI2NzUsOCBAQCBzdGF0aWMgaW50IHRwYWNrZXRfcGFyc2VfaGVhZGVyKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHZvaWQgKmZyYW1lLFxuIFx0XHRcdFx0aW50IHNpemVfbWF4LCB2b2lkICoqZGF0YSlcbiB7XG4gXHR1bmlvbiB0cGFja2V0X3VoZHIgcGg7XG4tXHRpbnQgdHBfbGVuLCBvZmY7XG4rXHR1MzIgdHBfbGVuO1xuK1x0aW50IG9mZjtcbiBcbiBcdHBoLnJhdyA9IGZyYW1lO1xuIFxuQEAgLTI2OTUsNyArMjY5Niw3IEBAIHN0YXRpYyBpbnQgdHBhY2tldF9wYXJzZV9oZWFkZXIoc3RydWN0IHBhY2tldF9zb2NrICpwbywgdm9pZCAqZnJhbWUsXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFx0aWYgKHVubGlrZWx5KHRwX2xlbiBcdTAwM2Ugc2l6ZV9tYXgpKSB7XG4tXHRcdHByX2VycihcInBhY2tldCBzaXplIGlzIHRvbyBsb25nICglZCBcdTAwM2UgJWQpXFxuXCIsIHRwX2xlbiwgc2l6ZV9tYXgpO1xuK1x0XHRwcl9lcnIoXCJwYWNrZXQgc2l6ZSBpcyB0b28gbG9uZyAoJXUgXHUwMDNlICVkKVxcblwiLCB0cF9sZW4sIHNpemVfbWF4KTtcbiBcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE5OjA0OjIwLjA2NTQ4MjYyMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2MDM1MDMyMzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIFJldmlldyBmb3IgU3l6a2FsbGVyIEZ1enppbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZyBhcyBJIGxvb2sgYXQgdGhpcyBwYXRjaC4gRmlyc3QsIGl0IHNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQga2VybmVsIHBhdGNoIHJldmlldyBmb3Igc3l6a2FsbGVyIGZ1enppbmcgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBsaWtlbHkgYSBtYWludGVuYW5jZSBvciBRQSB0YXNrLCB3aGljaCBtZWFucyBpdCBzaG91bGQgYmUgcmVsYXRpdmVseSBzYWZlIHRvIGhhbmRsZS5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIHBhdGNoIGRpZmYgaXRzZWxmLiBJIHNlZSBhIGNoYW5nZSBpbiBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AuIFNwZWNpZmljYWxseSwgdGhlcmUncyBhIG1vZGlmaWNhdGlvbiBhcm91bmQgbGluZSAyNjc1LiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoaXMgY29kZSBzbmlwcGV0OlxuXG5gYGBkaWZmXG5AQCAtMjY3NSw3ICsyNjc1LDggQEAgc3RhdGljIGludCB0cGFja2V0X3BhcnNlX2hlYWRlcihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCB2b2lkICpmcmFtZSxcbiBcdFx0XHRcdGludCBzaXplX21heCwgdm9pZCAqKmRhdGEpXG4ge1xuIFx0dW5pb24gdHBhY2tldF91aGRyIHBoO1xuLVx0aW50IHRwX2xlbiwgb2ZmO1xuK1x0dTMyIHRwX2xlbjtcbitcdGludCBvZmY7XG4gXG4gXHRwaC5yYXcgPSBmcmFtZTtcbiBcbmBgYFxuXG5JdCBzZWVtcyBsaWtlIHRoZXkndmUgY2hhbmdlZCB0aGUgdHlwZSBvZiBgdHBfbGVuYCBmcm9tIGBpbnRgIHRvIGB1MzJgLiBUaGlzIGNvdWxkIGJlIHNpZ25pZmljYW50LCBiZWNhdXNlIHRoZSBjb2RlIHRoZW4gY2hlY2tzIGB0cF9sZW5gIGFnYWluc3QgYHNpemVfbWF4YC4gSXQgbG9va3MgbGlrZSB0aGUgb3JpZ2luYWwgY29kZSBjb3VsZCBoYXZlIGFuIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZCBieSB1c2luZyBhbiB1bnNpZ25lZCBpbnQuXG5cbkknbSBnb2luZyB0byBxdWlja2x5IGluc3BlY3QgYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgIG5lYXIgdGhpcyBsaW5lLCBzbyBJIGNhbiBjb25maXJtIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNoYW5nZXMuIEknbGwgdXNlIG15IHVzdWFsIHRvb2xzIHRvIGdhdGhlciBtb3JlIGluZm9ybWF0aW9uIGFuZCBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxOTEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxOTowNDozNi4xMDA1MTY4MzdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTYxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3BhY2tldC9hZl9wYWNrZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjY1LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjY1OlxcdFxcbjI2NjY6XFx0XFx0aWYgKHVubGlrZWx5KCFza2ItXFx1MDAzZWxlbikpXFxuMjY2NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yNjY4OlxcdFxcbjI2Njk6XFx0XFx0cGFja2V0X3BhcnNlX2hlYWRlcnMoc2tiLCBzb2NrKTtcXG4yNjcwOlxcdFxcbjI2NzE6XFx0XFx0cmV0dXJuIHRwX2xlbjtcXG4yNjcyOlxcdH1cXG4yNjczOlxcdFxcbjI2NzQ6XFx0c3RhdGljIGludCB0cGFja2V0X3BhcnNlX2hlYWRlcihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCB2b2lkICpmcmFtZSxcXG4yNjc1OlxcdFxcdFxcdFxcdFxcdGludCBzaXplX21heCwgdm9pZCAqKmRhdGEpXFxuMjY3NjpcXHR7XFxuMjY3NzpcXHRcXHR1bmlvbiB0cGFja2V0X3VoZHIgcGg7XFxuMjY3ODpcXHRcXHR1MzIgdHBfbGVuO1xcbjI2Nzk6XFx0XFx0aW50IG9mZjtcXG4yNjgwOlxcdFxcbjI2ODE6XFx0XFx0cGgucmF3ID0gZnJhbWU7XFxuMjY4MjpcXHRcXG4yNjgzOlxcdFxcdHN3aXRjaCAocG8tXFx1MDAzZXRwX3ZlcnNpb24pIHtcXG4yNjg0OlxcdFxcdGNhc2UgVFBBQ0tFVF9WMzpcXG4yNjg1OlxcdFxcdFxcdGlmIChwaC5oMy1cXHUwMDNldHBfbmV4dF9vZmZzZXQgIT0gMCkge1xcbjI2ODY6XFx0XFx0XFx0XFx0cHJfd2Fybl9vbmNlKFxcXCJ2YXJpYWJsZSBzaXplZCBzbG90IG5vdCBzdXBwb3J0ZWRcXFwiKTtcXG4yNjg3OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI2ODg6XFx0XFx0XFx0fVxcbjI2ODk6XFx0XFx0XFx0dHBfbGVuID0gcGguaDMtXFx1MDAzZXRwX2xlbjtcXG4yNjkwOlxcdFxcdFxcdGJyZWFrO1xcbjI2OTE6XFx0XFx0Y2FzZSBUUEFDS0VUX1YyOlxcbjI2OTI6XFx0XFx0XFx0dHBfbGVuID0gcGguaDItXFx1MDAzZXRwX2xlbjtcXG4yNjkzOlxcdFxcdFxcdGJyZWFrO1xcbjI2OTQ6XFx0XFx0ZGVmYXVsdDpcXG4yNjk1OlxcdFxcdFxcdHRwX2xlbiA9IHBoLmgxLVxcdTAwM2V0cF9sZW47XFxuMjY5NjpcXHRcXHRcXHRicmVhaztcXG4yNjk3OlxcdFxcdH1cXG4yNjk4OlxcdFxcdGlmICh1bmxpa2VseSh0cF9sZW4gXFx1MDAzZSBzaXplX21heCkpIHtcXG4yNjk5OlxcdFxcdFxcdHByX2VycihcXFwicGFja2V0IHNpemUgaXMgdG9vIGxvbmcgKCV1IFxcdTAwM2UgJWQpXFxcXG5cXFwiLCB0cF9sZW4sIHNpemVfbWF4KTtcXG4yNzAwOlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuMjcwMTpcXHRcXHR9XFxuMjcwMjpcXHRcXG4yNzAzOlxcdFxcdGlmICh1bmxpa2VseShwYWNrZXRfc29ja19mbGFnKHBvLCBQQUNLRVRfU09DS19UWF9IQVNfT0ZGKSkpIHtcXG4yNzA0OlxcdFxcdFxcdGludCBvZmZfbWluLCBvZmZfbWF4O1xcbjI3MDU6XFx0XFxuMjcwNjpcXHRcXHRcXHRvZmZfbWluID0gcG8tXFx1MDAzZXRwX2hkcmxlbiAtIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpO1xcbjI3MDc6XFx0XFx0XFx0b2ZmX21heCA9IHBvLVxcdTAwM2V0eF9yaW5nLmZyYW1lX3NpemUgLSB0cF9sZW47XFxuMjcwODpcXHRcXHRcXHRpZiAocG8tXFx1MDAzZXNrLnNrX3R5cGUgPT0gU09DS19ER1JBTSkge1xcbjI3MDk6XFx0XFx0XFx0XFx0c3dpdGNoIChwby1cXHUwMDNldHBfdmVyc2lvbikge1xcbjI3MTA6XFx0XFx0XFx0XFx0Y2FzZSBUUEFDS0VUX1YzOlxcbjI3MTE6XFx0XFx0XFx0XFx0XFx0b2ZmID0gcGguaDMtXFx1MDAzZXRwX25ldDtcXG4yNzEyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI3MTM6XFx0XFx0XFx0XFx0Y2FzZSBUUEFDS0VUX1YyOlxcbjI3MTQ6XFx0XFx0XFx0XFx0XFx0b2ZmID0gcGguaDItXFx1MDAzZXRwX25ldDtcXG4yNzE1OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI3MTY6XFx0XFx0XFx0XFx0ZGVmYXVsdDpcXG4yNzE3OlxcdFxcdFxcdFxcdFxcdG9mZiA9IHBoLmgxLVxcdTAwM2V0cF9uZXQ7XFxuMjcxODpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yNzE5OlxcdFxcdFxcdFxcdH1cXG4yNzIwOlxcdFxcdFxcdH0gZWxzZSB7XFxuMjcyMTpcXHRcXHRcXHRcXHRzd2l0Y2ggKHBvLVxcdTAwM2V0cF92ZXJzaW9uKSB7XFxuMjcyMjpcXHRcXHRcXHRcXHRjYXNlIFRQQUNLRVRfVjM6XFxuMjcyMzpcXHRcXHRcXHRcXHRcXHRvZmYgPSBwaC5oMy1cXHUwMDNldHBfbWFjO1xcbjI3MjQ6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjcyNTpcXHRcXHRcXHRcXHRjYXNlIFRQQUNLRVRfVjI6XFxuMjcyNjpcXHRcXHRcXHRcXHRcXHRvZmYgPSBwaC5oMi1cXHUwMDNldHBfbWFjO1xcbjI3Mjc6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjcyODpcXHRcXHRcXHRcXHRkZWZhdWx0OlxcbjI3Mjk6XFx0XFx0XFx0XFx0XFx0b2ZmID0gcGguaDEtXFx1MDAzZXRwX21hYztcXG4yNzMwOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI3MzE6XFx0XFx0XFx0XFx0fVxcbjI3MzI6XFx0XFx0XFx0fVxcbjI3MzM6XFx0XFx0XFx0aWYgKHVubGlrZWx5KChvZmYgXFx1MDAzYyBvZmZfbWluKSB8fCAob2ZmX21heCBcXHUwMDNjIG9mZikpKVxcbjI3MzQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE5OjA0OjM2LjEwMTQxNzYwN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNzk4NDc1NDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW50ZWdlciBPdmVyZmxvdyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgY2hhbmdlOiBgaW50IHRwX2xlbiwgb2ZmO2AgaGFzIGJlZW4gdXBkYXRlZCB0byBgdTMyIHRwX2xlbjsgaW50IG9mZjtgLCBhbmQgdGhlIGBwcl9lcnJgIGZvcm1hdCBzdHJpbmcgaXMgbm93IHVzaW5nIGAldWAgaW5zdGVhZCBvZiBgJWRgLiBUaGUgYCV1YCBzdWdnZXN0cyBhbiB1bnNpZ25lZCBpbnRlZ2VyLCB3aGljaCBpcyBhIGdvb2QgY2x1ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuXG5cbkxldCdzIHRyYWNlIGB0cF9sZW5gLiBJdCBzZWVtcyBsaWtlIGl0J3MgZGVyaXZlZCBmcm9tIGBwaC5oMy1cdTAwM2V0cF9sZW5gLCBgcGguaDItXHUwMDNldHBfbGVuYCwgb3IgYHBoLmgxLVx1MDAzZXRwX2xlbmAsIGFuZCB0aG9zZSBhcmUgYWxsIGB1bnNpZ25lZCBpbnRgIG9yIGBfX3UzMmAuIEhtbSwgYSBtaXNtYXRjaC4uLlxuXG5BaCwgSSBzZWUgdGhlIHByb2JsZW0uIEJlZm9yZSwgd2hlbiBgdHBfbGVuYCB3YXMgYSBzaWduZWQgYGludGAsIHVzZXIgc3BhY2UgY291bGQgcG90ZW50aWFsbHkgcGFzcyBhIGZyYW1lIHdoZXJlIGB0cF9sZW5gIHdhcyBsYXJnZXIgdGhhbiBgSU5UX01BWGAsIG9yIGV2ZW4gYSBuZWdhdGl2ZSB2YWx1ZSBhZnRlciB0aGUgY2FzdC4gVGhhdCdzIGEgY2xhc3NpYyBvdmVyZmxvdyBzY2VuYXJpbyEgVGhlIHN1YnNlcXVlbnQgY2hlY2sgYHRwX2xlbiBcdTAwM2Ugc2l6ZV9tYXhgIHdhcyBhICpzaWduZWQqIGNvbXBhcmlzb24uIFNvIGlmIGB0cF9sZW5gIHdhcywgc2F5LCBgMHg4MDAwMDAwMGAgKHdoaWNoIHJlcHJlc2VudHMgYSBuZWdhdGl2ZSBzaWduZWQgaW50ZWdlciksIHRoZSBjb21wYXJpc29uIHdvdWxkIGZhaWwgYmVjYXVzZSBpdCdzIGxlc3MgdGhhbiBgc2l6ZV9tYXhgLiBUaGUgY2hlY2sgYHVubGlrZWx5KHRwX2xlbiBcdTAwM2Ugc2l6ZV9tYXgpYCB3b3VsZCBpbmNvcnJlY3RseSBldmFsdWF0ZSB0byAqZmFsc2UqLCBsZXR0aW5nIGEgcG90ZW50aWFsbHkgbWFsaWNpb3VzIHBhY2tldCB0aHJvdWdoLlxuXG5SaWdodCwgc28gd2UncmUgdnVsbmVyYWJsZSB0byBhbiBpbnRlZ2VyIG92ZXJmbG93IGFsbG93aW5nIGEgbWFsZm9ybWVkIHBhY2tldCB0byBieXBhc3MgYSBjcml0aWNhbCBzaXplIGNoZWNrLiBXZSdkIHRoZW4gcnVuIG9mZiB0aGUgZW5kIG9mIG1lbW9yeSwgcmVhZGluZyBhbmQgd3JpdGluZyB3aGVyZXZlciB0aGUgdXNlciB0b2xkIHVzLiBUaW1lIHRvIGNoZWNrIHRoZSBjb2RlIHRoYXQgY29tZXMgKmFmdGVyKiB0aGF0IGZsYXdlZCBjaGVjay4gSSBuZWVkIHRvIGxvb2sgYXQgbGluZXMgMjczMC0yNzYwIGluIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCB0byBzZWUgdGhlIGNvbnNlcXVlbmNlcyBvZiB0aGlzIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk5OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE5OjA0OjQ4Ljg5OTg5NTYwM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3MzA6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjczMTpcXHRcXHRcXHRcXHR9XFxuMjczMjpcXHRcXHRcXHR9XFxuMjczMzpcXHRcXHRcXHRpZiAodW5saWtlbHkoKG9mZiBcXHUwMDNjIG9mZl9taW4pIHx8IChvZmZfbWF4IFxcdTAwM2Mgb2ZmKSkpXFxuMjczNDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yNzM1OlxcdFxcdH0gZWxzZSB7XFxuMjczNjpcXHRcXHRcXHRvZmYgPSBwby1cXHUwMDNldHBfaGRybGVuIC0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9sbCk7XFxuMjczNzpcXHRcXHR9XFxuMjczODpcXHRcXG4yNzM5OlxcdFxcdCpkYXRhID0gZnJhbWUgKyBvZmY7XFxuMjc0MDpcXHRcXHRyZXR1cm4gdHBfbGVuO1xcbjI3NDE6XFx0fVxcbjI3NDI6XFx0XFxuMjc0MzpcXHRzdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZylcXG4yNzQ0OlxcdHtcXG4yNzQ1OlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xcbjI3NDY6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4yNzQ3OlxcdFxcdHN0cnVjdCB2aXJ0aW9fbmV0X2hkciB2bmV0X2hkcjtcXG4yNzQ4OlxcdFxcdGJvb2wgaGFzX3ZuZXRfaGRyID0gZmFsc2U7XFxuMjc0OTpcXHRcXHRzdHJ1Y3Qgc29ja2NtX2Nvb2tpZSBzb2NrYztcXG4yNzUwOlxcdFxcdF9fYmUxNiBwcm90bztcXG4yNzUxOlxcdFxcdGludCBlcnIsIHJlc2VydmUgPSAwO1xcbjI3NTI6XFx0XFx0dm9pZCAqcGg7XFxuMjc1MzpcXHRcXHRERUNMQVJFX1NPQ0tBRERSKHN0cnVjdCBzb2NrYWRkcl9sbCAqLCBzYWRkciwgbXNnLVxcdTAwM2Vtc2dfbmFtZSk7XFxuMjc1NDpcXHRcXHRib29sIG5lZWRfd2FpdCA9ICEobXNnLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xcbjI3NTU6XFx0XFx0aW50IHZuZXRfaGRyX3N6ID0gUkVBRF9PTkNFKHBvLVxcdTAwM2V2bmV0X2hkcl9zeik7XFxuMjc1NjpcXHRcXHR1bnNpZ25lZCBjaGFyICphZGRyID0gTlVMTDtcXG4yNzU3OlxcdFxcdGludCB0cF9sZW4sIHNpemVfbWF4O1xcbjI3NTg6XFx0XFx0dm9pZCAqZGF0YTtcXG4yNzU5OlxcdFxcdGludCBsZW5fc3VtID0gMDtcXG4yNzYwOlxcdFxcdGludCBzdGF0dXMgPSBUUF9TVEFUVVNfQVZBSUxBQkxFO1xcbjI3NjE6XFx0XFx0aW50IGhhcmRfaGVhZGVyX2xlbiwgaGxlbiwgdGxlbiwgY29weWxlbiA9IDA7XFxuMjc2MjpcXHRcXHRsb25nIHRpbWVvO1xcbjI3NjM6XFx0XFxuMjc2NDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZwby1cXHUwMDNlcGdfdmVjX2xvY2spO1xcbjI3NjU6XFx0XFxuMjc2NjpcXHRcXHQvKiBwYWNrZXRfc2VuZG1zZygpIGNoZWNrIG9uIHR4X3JpbmcucGdfdmVjIHdhcyBsb2NrbGVzcyxcXG4yNzY3OlxcdFxcdCAqIHdlIG5lZWQgdG8gY29uZmlybSBpdCB1bmRlciBwcm90ZWN0aW9uIG9mIHBnX3ZlY19sb2NrLlxcbjI3Njg6XFx0XFx0ICovXFxuMjc2OTpcXHRcXHRpZiAodW5saWtlbHkoIXBvLVxcdTAwM2V0eF9yaW5nLnBnX3ZlYykpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTk6MDQ6NDguOTAwMDUyMDUzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkxNzU3NTIyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFBhY2tldCBUcmFuc21pc3Npb24gYW5kIEhlYWRlciBQYXJzaW5nKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlc2UgcGFja2V0cyBhcmUgZ2V0dGluZyBzZW50LCBhbmQgYHRwYWNrZXRfc25kYCBzZWVtcyB0byBiZSB0aGUga2V5IGZ1bmN0aW9uIGludm9sdmVkLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSByb2xlIG9mIGB0cGFja2V0X3BhcnNlX2hlYWRlcmAgd2l0aGluIHRoaXMgZmxvdy4gU2luY2UgYHRwYWNrZXRfc25kYCBjYWxscyBpdCwgaXQncyBjbGVhciB0aGUgaGVhZGVyIHBhcnNpbmcgaXMgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHJvY2Vzcy4gSSBuZWVkIHRvIHRyYWNlICp3aGVyZSogdGhpcyBgdHBhY2tldF9wYXJzZV9oZWFkZXJgIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRvIGdyYXNwIHRoZSBmdWxsIHBpY3R1cmUgb2YgdGhlIHRyYW5zbWlzc2lvbiBwYXRod2F5LiBMZXQncyBmaW5kIHRob3NlIGNhbGwgc2l0ZXMgYW5kIHNlZSB3aGF0IGNvbnRleHQgc3Vycm91bmRzIHRoZSBwYXJzaW5nIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzM5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxOTowNDo1MC44MTc2Mjk5MTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMDUzODY3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cGFja2V0X3BhcnNlX2hlYWRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcGFja2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jPTI1OTA9c3RhdGljIGludCB0cGFja2V0X2ZpbGxfc2tiKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI2NzMtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNjc0OnN0YXRpYyBpbnQgdHBhY2tldF9wYXJzZV9oZWFkZXIoc3RydWN0IHBhY2tldF9zb2NrICpwbywgdm9pZCAqZnJhbWUsXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNjc1LVxcdFxcdFxcdFxcdGludCBzaXplX21heCwgdm9pZCAqKmRhdGEpXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI3NDM9c3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4NDEtXFx0XFx0c2tiID0gTlVMTDtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI4NDI6XFx0XFx0dHBfbGVuID0gdHBhY2tldF9wYXJzZV9oZWFkZXIocG8sIHBoLCBzaXplX21heCwgXFx1MDAyNmRhdGEpO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjg0My1cXHRcXHRpZiAodHBfbGVuIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTk6MDQ6NTEuODQ4MTczMjY2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjkxMzcxODE3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JrIFBhY2tldCBQYXJzaW5nIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpczogKmFoYSEqIGB0cGFja2V0X3BhcnNlX2hlYWRlcmAgaXMgcmV0dXJuaW5nIGB0cF9sZW5gIGFzIGFuIGBpbnRgLCBidXQgaW50ZXJuYWxseSwgYHRwX2xlbmAgd2l0aGluIHRoYXQgZnVuY3Rpb24gaXMgYSBgdTMyYC4gUHJldmlvdXNseSwgdGhlIGNvbXBhcmlzb24gYHRwX2xlbiBcdTAwM2Ugc2l6ZV9tYXhgIHdhcyBhICpzaWduZWQqIGNvbXBhcmlzb24uIE5vdywgd2l0aCB0aGUgYHUzMmAgdHlwZSBmb3IgYHRwX2xlbmAsIGl0J3MgYW4gKnVuc2lnbmVkKiBjb21wYXJpc29uLiBUaGlzIGlzIGdvb2QhIEFueSBsYXJnZSB1bnNpZ25lZCB2YWx1ZSAocHJldmlvdXNseSBieXBhc3NpbmcgY2hlY2tzIGR1ZSB0byBiZWluZyBzaWduZWQpIHdpbGwgbm93IGJlIGNvcnJlY3RseSBjYXVnaHQuIFRoaXMgZml4ZXMgYSBzaWduZWQgaW50ZWdlciBjb21wYXJpc29uIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkuIEV4Y2VsbGVudCwgdGhpcyBpcyBhIGxlZ2l0aW1hdGUgYnVnIGZpeCBpbiBwYWNrZXQgc29ja2V0IHBhY2tldCBwYXJzaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIFRYIHJpbmcgaGFuZGxpbmcuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBpcyB0aGlzIFdvcnRoRnV6emluZz8gTGV0J3MgY2hlY2sgdGhlIGNyaXRlcmlhLiBPa2F5LCBubyBkb2N1bWVudGF0aW9uLCBLY29uZmlnLCBjb21tZW50cywgbG9nZ2luZywgb3IgZGVjb3JhdGl2ZSBjaGFuZ2VzIGhlcmUuIE5vdCBjb25zdGFudHMgdGhhdCBkb24ndCBhZmZlY3QgZXhlY3V0aW9uLiBEZWZpbml0ZWx5IG5vdCB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgb3IgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgcmVxdWlyaW5nIGRlZGljYXRlZCBoYXJkd2FyZS4gQW5kIGl0J3Mgbm90IGRyaXZlciB0ZWFyZG93biBjYWxsYmFja3MuIFRoaXMgcGF0Y2ggZGlyZWN0bHkgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMsIHNwZWNpZmljYWxseSBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AsIGluIHRoZSBmdW5jdGlvbiBgdHBhY2tldF9wYXJzZV9oZWFkZXIoKWAsIHdoaWNoIGlzIHVzZWQgYnkgdGhlIEFGX1BBQ0tFVCByaW5nIGJ1ZmZlciBwYWNrZXQgdHJhbnNtaXNzaW9uIChgdHBhY2tldF9zbmRgKS4gVGhpcyBpcyAqY29yZSogbmV0d29ya2luZyBjb2RlLCB3aGljaCBJIGtub3cgaXMgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgc3lzY2FsbHMgbGlrZSBgc29ja2V0KEFGX1BBQ0tFVCwgLi4uKWAgYW5kIGBzZXRzb2Nrb3B0KC4uLiwgUEFDS0VUX1RYX1JJTkcsIC4uLilgIGFuZCBvZiBjb3Vyc2UgYHNlbmR0bygpYC9gc2VuZG1zZygpYC4gU28sIHllcywgV29ydGhGdXp6aW5nIGlzIGRlZmluaXRpdmVseSBgdHJ1ZWAhXG5cbk5vdywgbmV4dCBzdGVwLCBJIG5lZWQgdG8gaWRlbnRpZnkgaWYgdGhlcmUgYXJlIGZvY3VzIHN5bWJvbHMgdGhhdCB3aWxsIGJlIHVzZWZ1bCBmb3IgZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGZvY3VzaW5nIG9uIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBJIHdpbGwgc3RhcnQgYnkgc2VhcmNoaW5nIGFyb3VuZCBgcGFja2V0X3NlbmRtc2dgLCBgdHBhY2tldF9zbmRgLCBhbmQgYHBhY2tldF9jcmVhdGVgIGluIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCB0byBpZGVudGlmeSB0aGUgbW9zdCBzdWl0YWJsZSBzeW1ib2xzLiBJIGFtIGVhZ2VyIHRvIGdldCBzdGFydGVkIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODA1LCJPdXRwdXRUb2tlbnMiOjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE5OjA0OjU4Ljc2MTg5OTAzNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE5NTczNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKHBhY2tldF9zZW5kbXNnfHRwYWNrZXRfc25kfHRwYWNrZXRfcGFyc2VfaGVhZGVyfHBhY2tldF9yZWN2bXNnfHBhY2tldF9zZXRzb2Nrb3B0KVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcGFja2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jPTE2OTM9c3RhdGljIGludCBmYW5vdXRfYWRkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGZhbm91dF9hcmdzICphcmdzKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xODAyLVxcdFxcdGlmIChyZWZjb3VudF9yZWFkKFxcdTAwMjZtYXRjaC1cXHUwMDNlc2tfcmVmKSBcXHUwMDNjIG1hdGNoLVxcdTAwM2VtYXhfbnVtX21lbWJlcnMpIHtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE4MDM6XFx0XFx0XFx0LyogUGFpcmVkIHdpdGggcGFja2V0X3NldHNvY2tvcHQoUEFDS0VUX0ZBTk9VVF9EQVRBKSAqL1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTgwNC1cXHRcXHRcXHRXUklURV9PTkNFKHBvLVxcdTAwM2VmYW5vdXQsIG1hdGNoKTtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTkzOD1zdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xOTYyLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTk2MzpzdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnX3Nwa3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTk2NC1cXHRcXHRcXHQgICAgICAgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjEzNj1zdGF0aWMgaW50IHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjIwOS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIyMTA6XFx0Lyogc2xsLVxcdTAwM2VzbGxfZmFtaWx5IGFuZCBzbGwtXFx1MDAzZXNsbF9wcm90b2NvbCBhcmUgc2V0IGluIHBhY2tldF9yZWN2bXNnKCkuXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMjExLVxcdCAqIFVzZSB0aGVpciBzcGFjZSBmb3Igc3RvcmluZyB0aGUgb3JpZ2luYWwgc2tiIGxlbmd0aC5cXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjU5MD1zdGF0aWMgaW50IHRwYWNrZXRfZmlsbF9za2Ioc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjY3My1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI2NzQ6c3RhdGljIGludCB0cGFja2V0X3BhcnNlX2hlYWRlcihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCB2b2lkICpmcmFtZSxcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI2NzUtXFx0XFx0XFx0XFx0aW50IHNpemVfbWF4LCB2b2lkICoqZGF0YSlcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjc0Mi1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI3NDM6c3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzQ0LXtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjc2NS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI3NjY6XFx0LyogcGFja2V0X3NlbmRtc2coKSBjaGVjayBvbiB0eF9yaW5nLnBnX3ZlYyB3YXMgbG9ja2xlc3MsXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzY3LVxcdCAqIHdlIG5lZWQgdG8gY29uZmlybSBpdCB1bmRlciBwcm90ZWN0aW9uIG9mIHBnX3ZlY19sb2NrLlxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODQxLVxcdFxcdHNrYiA9IE5VTEw7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyODQyOlxcdFxcdHRwX2xlbiA9IHRwYWNrZXRfcGFyc2VfaGVhZGVyKHBvLCBwaCwgc2l6ZV9tYXgsIFxcdTAwMjZkYXRhKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4NDMtXFx0XFx0aWYgKHRwX2xlbiBcXHUwMDNjIDApXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI5NzM9c3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEzMS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMxMzI6c3RhdGljIGludCBwYWNrZXRfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTMzLXtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEzNy1cXHQvKiBSZWFkaW5nIHR4X3JpbmcucGdfdmVjIHdpdGhvdXQgaG9sZGluZyBwZ192ZWNfbG9jayBpcyByYWN5Llxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzEzODpcXHQgKiB0cGFja2V0X3NuZCgpIHdpbGwgcmVkbyB0aGUgY2hlY2sgc2FmZWx5Llxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEzOS1cXHQgKi9cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxNDAtXFx0aWYgKGRhdGFfcmFjZShwby1cXHUwMDNldHhfcmluZy5wZ192ZWMpKVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzE0MTpcXHRcXHRyZXR1cm4gdHBhY2tldF9zbmQocG8sIG1zZyk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTQyLVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0zMzY2PXN0YXRpYyBpbnQgcGFja2V0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzQ0My1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjM0NDQ6c3RhdGljIGludCBwYWNrZXRfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zNDQ1LVxcdFxcdFxcdCAgaW50IGZsYWdzKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0zODE0PXN0YXRpYyBpbnRcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjM4MTU6cGFja2V0X3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTM4MTYtXFx0XFx0ICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz00NzUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHNfc3BrdCA9IHtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDc2Ni1cXHQuc2h1dGRvd24gPVxcdHNvY2tfbm9fc2h1dGRvd24sXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NzY3OlxcdC5zZW5kbXNnID1cXHRwYWNrZXRfc2VuZG1zZ19zcGt0LFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6NDc2ODpcXHQucmVjdm1zZyA9XFx0cGFja2V0X3JlY3Ztc2csXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NzY5LVxcdC5tbWFwID1cXHRcXHRzb2NrX25vX21tYXAsXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTQ3NzI9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wcyA9IHtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDc4NS1cXHQuc2h1dGRvd24gPVxcdHNvY2tfbm9fc2h1dGRvd24sXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0Nzg2OlxcdC5zZXRzb2Nrb3B0ID1cXHRwYWNrZXRfc2V0c29ja29wdCxcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ3ODctXFx0LmdldHNvY2tvcHRfaXRlciA9XFx0cGFja2V0X2dldHNvY2tvcHQsXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0Nzg4OlxcdC5zZW5kbXNnID1cXHRwYWNrZXRfc2VuZG1zZyxcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ3ODk6XFx0LnJlY3Ztc2cgPVxcdHBhY2tldF9yZWN2bXNnLFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDc5MC1cXHQubW1hcCA9XFx0XFx0cGFja2V0X21tYXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE5OjA0OjU4LjgxMzg1ODg1NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NTUzODAzNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGFja2V0IFNvY2tldCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBoYXMgdG8gYmUgb24gdGhlIGNvcmUgZnVuY3Rpb25zLiBJIHNlZSBgdHBhY2tldF9zbmRgLCBgcGFja2V0X3NlbmRtc2dgLCBgcGFja2V0X3NldHNvY2tvcHRgLCBgcGFja2V0X21tYXBgLCBhbmQgYHRwYWNrZXRfcGFyc2VfaGVhZGVyYC4gUmlnaHQgYXdheSwgYHRwYWNrZXRfc25kYCBzdGFuZHMgb3V0IGFzIGl0J3MgY2FsbGVkIGJ5IGBwYWNrZXRfc2VuZG1zZ2AsIGFuZCBgdHBhY2tldF9wYXJzZV9oZWFkZXJgIGlzIGNhbGxlZCBieSBgdHBhY2tldF9zbmRgLiBJIHdvbmRlciBpZiBgdHBhY2tldF9zbmRgIGlzIGlubGluZWQsIGJ1dCBnaXZlbiBpdCdzIGFyb3VuZCAyMDAgbGluZXMsIEkgaGlnaGx5IGRvdWJ0IGl0LiBgcGFja2V0X3NlbmRtc2dgIGlzIHRoZSBvcHMgaGFuZGxlciDigJMgc3BlY2lmaWNhbGx5IGBwYWNrZXRfb3BzLnNlbmRtc2dgLlxuXG5Ob3csIEkgbmVlZCB0byBkZWNpZGUgaWYgYHRwYWNrZXRfc25kYCBvciBgcGFja2V0X3NlbmRtc2dgIGFyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1cnRoZXIgaW5zcGVjdGlvbi4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgdGhleSB1c3VhbGx5IGFyZSwgc28gbGV0J3Mga2VlcCB0aGVtIGluIG1pbmQgYXMgcHJpbWFyeSBmb2N1cyBhcmVhcy4gSSBzaG91bGQgYWxzbyBjb25zaWRlciB0aGUgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYW5kIHByb3RvY29sIG9wZXJhdGlvbnMsIHN1Y2ggYXMgYHBhY2tldF9zZXRzb2Nrb3B0YC5cblxuVG8gZ2V0IGEgYnJvYWRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBtb2R1bGUsIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgYG5ldC9wYWNrZXQvYC4gVGhpcyB3aWxsIGdpdmUgbWUgYW4gb3ZlcnZpZXcgb2YgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIHNob3VsZCBhbHNvIGludmVzdGlnYXRlIHRoZSBNYWtlZmlsZSB3aXRoaW4gYG5ldC9wYWNrZXQvYCBhbmQgdGhlIGFzc29jaWF0ZWQgYEtjb25maWdgIGZpbGVzIHdpdGhpbiBgbmV0L2AsIG9yIHNwZWNpZmljYWxseSBgbmV0L3BhY2tldC9LY29uZmlnYC4gVGhlc2Ugd2lsbCBnaXZlIG1lIGluc2lnaHRzIGludG8gYnVpbGQgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYxMCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxOTowNTowNi4zNjc2NjQ5NTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3ODMwMTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFmX3BhY2tldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTU5ND1zdGF0aWMgaW5saW5lIHN0cnVjdCBsaXN0X2hlYWQgKnB0eXBlX2hlYWQoY29uc3Qgc3RydWN0IHBhY2tldF90eXBlICpwdClcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU5Ni1cXHRpZiAocHQtXFx1MDAzZXR5cGUgPT0gaHRvbnMoRVRIX1BfQUxMKSkge1xcbm5ldC9jb3JlL2Rldi5jOjU5NzpcXHRcXHRpZiAoIXB0LVxcdTAwM2VhZl9wYWNrZXRfbmV0IFxcdTAwMjZcXHUwMDI2ICFwdC1cXHUwMDNlZGV2KVxcbm5ldC9jb3JlL2Rldi5jLTU5OC1cXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTYwMC1cXHRcXHRyZXR1cm4gcHQtXFx1MDAzZWRldiA/IFxcdTAwMjZwdC1cXHUwMDNlZGV2LVxcdTAwM2VwdHlwZV9hbGwgOlxcbm5ldC9jb3JlL2Rldi5jOjYwMTpcXHRcXHRcXHRcXHQgXFx1MDAyNnB0LVxcdTAwM2VhZl9wYWNrZXRfbmV0LVxcdTAwM2VwdHlwZV9hbGw7XFxubmV0L2NvcmUvZGV2LmMtNjAyLVxcdH1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTYwNi1cXG5uZXQvY29yZS9kZXYuYzo2MDc6XFx0cmV0dXJuIHB0LVxcdTAwM2VhZl9wYWNrZXRfbmV0ID8gXFx1MDAyNnB0LVxcdTAwM2VhZl9wYWNrZXRfbmV0LVxcdTAwM2VwdHlwZV9zcGVjaWZpYyA6XFxubmV0L2NvcmUvZGV2LmMtNjA4LVxcdFxcdFxcdFxcdCBcXHUwMDI2cHR5cGVfYmFzZVtudG9ocyhwdC1cXHUwMDNldHlwZSkgXFx1MDAyNiBQVFlQRV9IQVNIX01BU0tdO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MjUzOT1zdGF0aWMgaW5saW5lIGJvb2wgc2tiX2xvb3Bfc2soc3RydWN0IHBhY2tldF90eXBlICpwdHlwZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9kZXYuYy0yNTQwLXtcXG5uZXQvY29yZS9kZXYuYzoyNTQxOlxcdGlmICghcHR5cGUtXFx1MDAzZWFmX3BhY2tldF9wcml2IHx8ICFza2ItXFx1MDAzZXNrKVxcbm5ldC9jb3JlL2Rldi5jLTI1NDItXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtMjU0NS1cXHRcXHRyZXR1cm4gcHR5cGUtXFx1MDAzZWlkX21hdGNoKHB0eXBlLCBza2ItXFx1MDAzZXNrKTtcXG5uZXQvY29yZS9kZXYuYzoyNTQ2OlxcdGVsc2UgaWYgKChzdHJ1Y3Qgc29jayAqKXB0eXBlLVxcdTAwM2VhZl9wYWNrZXRfcHJpdiA9PSBza2ItXFx1MDAzZXNrKVxcbm5ldC9jb3JlL2Rldi5jLTI1NDctXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmM9MjI5PXN0YXRpYyB2b2lkICpwdHlwZV9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpXFxuLS1cXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmMtMjYwLVxcbm5ldC9jb3JlL25ldC1wcm9jZnMuYzoyNjE6XFx0aWYgKHB0LVxcdTAwM2VhZl9wYWNrZXRfbmV0KSB7XFxubmV0L2NvcmUvbmV0LXByb2Nmcy5jLTI2Mi1uZXRfcHR5cGVfYWxsOlxcbi0tXFxubmV0L2NvcmUvbmV0LXByb2Nmcy5jPTI5Mz1zdGF0aWMgaW50IHB0eXBlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbi0tXFxubmV0L2NvcmUvbmV0LXByb2Nmcy5jLTMwMy1cXHRkZXYgPSBpdGVyLVxcdTAwM2VkZXY7XFxubmV0L2NvcmUvbmV0LXByb2Nmcy5jOjMwNDpcXHRpZiAoKCFwdC1cXHUwMDNlYWZfcGFja2V0X25ldCB8fCBuZXRfZXEocHQtXFx1MDAzZWFmX3BhY2tldF9uZXQsIHNlcV9maWxlX25ldChzZXEpKSkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmMtMzA1LVxcdFxcdCAoIWRldiB8fCBuZXRfZXEoZGV2X25ldChkZXYpLCBzZXFfZmlsZV9uZXQoc2VxKSkpKSB7XFxuLS1cXG5uZXQvY29yZS9zZWxmdGVzdHMuYz0xNTk9c3RhdGljIGludCBuZXRfdGVzdF9sb29wYmFja192YWxpZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc2VsZnRlc3RzLmMtMTYzLXtcXG5uZXQvY29yZS9zZWxmdGVzdHMuYzoxNjQ6XFx0c3RydWN0IG5ldF90ZXN0X3ByaXYgKnRwcml2ID0gcHQtXFx1MDAzZWFmX3BhY2tldF9wcml2O1xcbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jLTE2NS1cXHRjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMgPSB0cHJpdi1cXHUwMDNlcGFja2V0LVxcdTAwM2VzcmM7XFxuLS1cXG5uZXQvY29yZS9zZWxmdGVzdHMuYz0yMzM9c3RhdGljIGludCBfX25ldF90ZXN0X2xvb3BiYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxubmV0L2NvcmUvc2VsZnRlc3RzLmMtMjQ5LVxcdHRwcml2LVxcdTAwM2VwdC5kZXYgPSBuZGV2O1xcbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jOjI1MDpcXHR0cHJpdi1cXHUwMDNlcHQuYWZfcGFja2V0X3ByaXYgPSB0cHJpdjtcXG5uZXQvY29yZS9zZWxmdGVzdHMuYy0yNTEtXFx0dHByaXYtXFx1MDAzZXBhY2tldCA9IGF0dHI7XFxuLS1cXG5uZXQvcGFja2V0L0tjb25maWc9Nj1jb25maWcgUEFDS0VUXFxuLS1cXG5uZXQvcGFja2V0L0tjb25maWctMTQtXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG5uZXQvcGFja2V0L0tjb25maWc6MTU6XFx0ICBiZSBjYWxsZWQgYWZfcGFja2V0Llxcbm5ldC9wYWNrZXQvS2NvbmZpZy0xNi1cXG4tLVxcbm5ldC9wYWNrZXQvTWFrZWZpbGUtNS1cXG5uZXQvcGFja2V0L01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1BBQ0tFVCkgKz0gYWZfcGFja2V0Lm9cXG5uZXQvcGFja2V0L01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX1BBQ0tFVF9ESUFHKSArPSBhZl9wYWNrZXRfZGlhZy5vXFxubmV0L3BhY2tldC9NYWtlZmlsZTo4OmFmX3BhY2tldF9kaWFnLXkgKz0gZGlhZy5vXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTE0NzE9c3RhdGljIGludCBwYWNrZXRfcmN2X2Zhbm91dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xNDczLXtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE0NzQ6XFx0c3RydWN0IHBhY2tldF9mYW5vdXQgKmYgPSBwdC1cXHUwMDNlYWZfcGFja2V0X3ByaXY7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xNDc1LVxcdHVuc2lnbmVkIGludCBudW0gPSBSRUFEX09OQ0UoZi1cXHUwMDNlbnVtX21lbWJlcnMpO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xNTYyPXN0YXRpYyBib29sIG1hdGNoX2Zhbm91dF9ncm91cChzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlLCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE1NjYtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoxNTY3OlxcdHJldHVybiBwdHlwZS1cXHUwMDNlYWZfcGFja2V0X3ByaXYgPT0gcGt0X3NrKHNrKS1cXHUwMDNlZmFub3V0O1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTU2OC19XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTE2OTM9c3RhdGljIGludCBmYW5vdXRfYWRkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGZhbm91dF9hcmdzICphcmdzKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xNzg2LVxcdFxcdG1hdGNoLVxcdTAwM2Vwcm90X2hvb2suZnVuYyA9IHBhY2tldF9yY3ZfZmFub3V0O1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTc4NzpcXHRcXHRtYXRjaC1cXHUwMDNlcHJvdF9ob29rLmFmX3BhY2tldF9wcml2ID0gbWF0Y2g7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoxNzg4OlxcdFxcdG1hdGNoLVxcdTAwM2Vwcm90X2hvb2suYWZfcGFja2V0X25ldCA9IHJlYWRfcG5ldChcXHUwMDI2bWF0Y2gtXFx1MDAzZW5ldCk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xNzg5LVxcdFxcdG1hdGNoLVxcdTAwM2Vwcm90X2hvb2suaWRfbWF0Y2ggPSBtYXRjaF9mYW5vdXRfZ3JvdXA7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTE4NzI9c3RhdGljIGludCBwYWNrZXRfcmN2X3Nwa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTg4Mi1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE4ODM6XFx0c2sgPSBwdC1cXHUwMDNlYWZfcGFja2V0X3ByaXY7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xODg0LVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMTM2PXN0YXRpYyBpbnQgcGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMTQ5LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjE1MDpcXHRzayA9IHB0LVxcdTAwM2VhZl9wYWNrZXRfcHJpdjtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIxNTEtXFx0cG8gPSBwa3Rfc2soc2spO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMjQ5PXN0YXRpYyBpbnQgdHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjI3OC1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIyNzk6XFx0c2sgPSBwdC1cXHUwMDNlYWZfcGFja2V0X3ByaXY7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMjgwLVxcdHBvID0gcGt0X3NrKHNrKTtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MzM2Nj1zdGF0aWMgaW50IHBhY2tldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTM0MTctXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozNDE4OlxcdHBvLVxcdTAwM2Vwcm90X2hvb2suYWZfcGFja2V0X3ByaXYgPSBzaztcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjM0MTk6XFx0cG8tXFx1MDAzZXByb3RfaG9vay5hZl9wYWNrZXRfbmV0ID0gc29ja19uZXQoc2spO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzQyMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTk6MDU6MDYuNDQ1NTAyNDc0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwNjAwNTcxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktjb25maWcgRGl2ZSBmb3IgQ09ORklHX1BBQ0tFVCBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGBuZXQvcGFja2V0L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgZGVwZW5kZW5jaWVzIG9mIGBDT05GSUdfUEFDS0VUYC4gSSdtIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggdGhlIG5ldHdvcmtpbmcgc3RhY2ssIHNvIHRoaXMgc2hvdWxkbid0IGJlIHRvbyBpbnZvbHZlZCwgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgc3VidGxlIHJlbGF0aW9uc2hpcHMgb3IgaW1wbGllZCBmdW5jdGlvbmFsaXRpZXMgYmVmb3JlIG1ha2luZyBhIGRlY2lzaW9uIG9yIHJldmlld2luZyBhIHBhdGNoIHRoYXQgdG91Y2hlcyB0aGlzIGFyZWEuIEknbSBsb29raW5nIGZvciB0aGluZ3MgYmV5b25kIHRoZSBvYnZpb3VzOiBhcmUgdGhlcmUgYW55IGltcGxpY2l0IGRlcGVuZGVuY2llcyBvbiBzcGVjaWZpYyBkZXZpY2UgZHJpdmVycywgb3RoZXIgbmV0d29ya2luZyBzdWJzeXN0ZW1zLCBvciBrZXJuZWwgZmVhdHVyZXMgdGhhdCBhcmVuJ3QgaW1tZWRpYXRlbHkgYXBwYXJlbnQ/IFRpbWUgdG8gZmlyZSB1cCB0aGUgZWRpdG9yIGFuZCBzdGFydCBzY2FubmluZyBmb3IgcmVsZXZhbnQgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMsIGBzZWxlY3RgIGRpcmVjdGl2ZXMsIG9yIGFueSBvdGhlciBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBJdCdzIGFsbCBhYm91dCBlbnN1cmluZyB0aGF0IHRoZSBjb25maWd1cmF0aW9uIGlzIHNvbGlkIGFuZCB0aGF0IEkgaGF2ZSBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wYWN0IG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIGZlYXR1cmUuIEknbGwgYWxzbyBnbGFuY2Ugb3ZlciBhbnkgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gaWYgcHJlc2VudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMDQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxOTowNToxMi41MDU1NjIwMDhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3BhY2tldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFBhY2tldCBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBQQUNLRVRcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJQYWNrZXQgc29ja2V0XFxcIlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBUaGUgUGFja2V0IHByb3RvY29sIGlzIHVzZWQgYnkgYXBwbGljYXRpb25zIHdoaWNoIGNvbW11bmljYXRlXFxuICAxMDpcXHRcXHQgIGRpcmVjdGx5IHdpdGggbmV0d29yayBkZXZpY2VzIHdpdGhvdXQgYW4gaW50ZXJtZWRpYXRlIG5ldHdvcmtcXG4gIDExOlxcdFxcdCAgcHJvdG9jb2wgaW1wbGVtZW50ZWQgaW4gdGhlIGtlcm5lbCwgZS5nLiB0Y3BkdW1wLiAgSWYgeW91IHdhbnQgdGhlbVxcbiAgMTI6XFx0XFx0ICB0byB3b3JrLCBjaG9vc2UgWS5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG4gIDE1OlxcdFxcdCAgYmUgY2FsbGVkIGFmX3BhY2tldC5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgUEFDS0VUX0RJQUdcXG4gIDIwOlxcdFxcdHRyaXN0YXRlIFxcXCJQYWNrZXQ6IHNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIFBBQ0tFVFxcbiAgMjI6XFx0XFx0ZGVmYXVsdCBuXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFN1cHBvcnQgZm9yIFBGX1BBQ0tFVCBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXFxuICAyNTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE5OjA1OjEyLjUwNTYxODU1OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTgxNzY3MzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdGhpcyBzdHJhaWdodC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciBgUEFDS0VUYC4gVGhpcyB1c3VhbGx5IGJvaWxzIGRvd24gdG8gYSBxdWljayBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIE15IGluc3RpbmN0IHNheXMgdG8gc3RhcnQgd2l0aCBgbmV0L0tjb25maWdgLCB0aGF0J3MgZ2VuZXJhbGx5IHdoZXJlIHRoZXNlIG5ldHdvcmstcmVsYXRlZCBvcHRpb25zIGFyZSBkZWZpbmVkLiBJIHdhbnQgdG8gc2VlIGlmIGBQQUNLRVRgIGhhcyBhbnkgZGlyZWN0IHBhcmVudCBkZXBlbmRlbmNpZXMuIERvZXMgaXQgcmVseSBvbiBzb21lIG90aGVyIG9wdGlvbiBiZWluZyBlbmFibGVkIGZpcnN0PyBBbHRlcm5hdGl2ZWx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgUEFDS0VUYCBpcyBuZXN0bGVkIHdpdGhpbiB0aGUgYG1lbnVjb25maWcgTkVUYCBzdHJ1Y3R1cmUuIEtub3dpbmcgdGhlIGhpZXJhcmNoeSBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzIGFuZCB0aGUgdWx0aW1hdGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIGZlYXR1cmUuIFNvLCBgbmV0L0tjb25maWdgIGl0IGlzLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZSBLY29uZmlnIGdvZHMgaGF2ZSBvcmRhaW5lZCBmb3IgdGhpcyBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzc5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxOTowNToxNS4wODczODc4NjZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzODE2MDE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UgXFxcIm5ldC9wYWNrZXQvS2NvbmZpZ1xcXCJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz04Mj1tZW51IFxcXCJOZXR3b3JraW5nIG9wdGlvbnNcXFwiXFxubmV0L0tjb25maWctODMtXFxubmV0L0tjb25maWc6ODQ6c291cmNlIFxcXCJuZXQvcGFja2V0L0tjb25maWdcXFwiXFxubmV0L0tjb25maWctODUtc291cmNlIFxcXCJuZXQvcHNwL0tjb25maWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE5OjA1OjE1LjcyNTU1MjE4N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjM3NDMwNjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIGFyZWEgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gQmFzZWQgb24gd2hhdCBJJ20gbG9va2luZyBhdCwgbXkgZ3V0IGZlZWxpbmcgdGVsbHMgbWUgdG8gY2hlY2sgdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDgwLiBJIHN1c3BlY3QgdGhlcmUncyBhIHNldHRpbmcgb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBpbiB0aGF0IGFyZWEgdGhhdCdzIHJlbGV2YW50IHRvIHdoYXQgSSdtIGN1cnJlbnRseSBpbnZlc3RpZ2F0aW5nLiBJdOKAmXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhbmQgSSBoYXZlIGEgZmVlbGluZyB0aGUgYW5zd2VyIGxpZXMgaW4gdGhhdCB2aWNpbml0eSwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZSBzeXN0ZW0uIEknbGwgbmVlZCB0byByYXBpZGx5IHBhcnNlIHRoYXQgc2VjdGlvbiwgbG9va2luZyBmb3IgdGhlIHJpZ2h0IGtleXdvcmQgb3Igc3RydWN0dXJlIGluIHRoZSBkZWZpbml0aW9ucy4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBmaWxlIHRlbGxzIHVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEwMiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE5OjA1OjE3Ljk2Mjk4NTUyMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBOZXR3b3JrIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBORVRcXG4gICA3OlxcdFxcdGJvb2wgXFxcIk5ldHdvcmtpbmcgc3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdHNlbGVjdCBOTEFUVFJcXG4gICA5OlxcdFxcdHNlbGVjdCBHRU5FUklDX05FVF9VVElMU1xcbiAgMTA6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMTE6XFx0XFx0aGVscFxcbiAgMTI6XFx0XFx0ICBVbmxlc3MgeW91IHJlYWxseSBrbm93IHdoYXQgeW91IGFyZSBkb2luZywgeW91IHNob3VsZCBzYXkgWSBoZXJlLlxcbiAgMTM6XFx0XFx0ICBUaGUgcmVhc29uIGlzIHRoYXQgc29tZSBwcm9ncmFtcyBuZWVkIGtlcm5lbCBuZXR3b3JraW5nIHN1cHBvcnQgZXZlblxcbiAgMTQ6XFx0XFx0ICB3aGVuIHJ1bm5pbmcgb24gYSBzdGFuZC1hbG9uZSBtYWNoaW5lIHRoYXQgaXNuJ3QgY29ubmVjdGVkIHRvIGFueVxcbiAgMTU6XFx0XFx0ICBvdGhlciBjb21wdXRlci5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBJZiB5b3UgYXJlIHVwZ3JhZGluZyBmcm9tIGFuIG9sZGVyIGtlcm5lbCwgeW91XFxuICAxODpcXHRcXHQgIHNob3VsZCBjb25zaWRlciB1cGRhdGluZyB5b3VyIG5ldHdvcmtpbmcgdG9vbHMgdG9vIGJlY2F1c2UgY2hhbmdlc1xcbiAgMTk6XFx0XFx0ICBpbiB0aGUga2VybmVsIGFuZCB0aGUgdG9vbHMgb2Z0ZW4gZ28gaGFuZCBpbiBoYW5kLiBUaGUgdG9vbHMgYXJlXFxuICAyMDpcXHRcXHQgIGNvbnRhaW5lZCBpbiB0aGUgcGFja2FnZSBuZXQtdG9vbHMsIHRoZSBsb2NhdGlvbiBhbmQgdmVyc2lvbiBudW1iZXJcXG4gIDIxOlxcdFxcdCAgb2Ygd2hpY2ggYXJlIGdpdmVuIGluIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vQ2hhbmdlc1xcdTAwM2UuXFxuICAyMjpcXHRcXG4gIDIzOlxcdFxcdCAgRm9yIGEgZ2VuZXJhbCBpbnRyb2R1Y3Rpb24gdG8gTGludXggbmV0d29ya2luZywgaXQgaXMgaGlnaGx5XFxuICAyNDpcXHRcXHQgIHJlY29tbWVuZGVkIHRvIHJlYWQgdGhlIE5FVC1IT1dUTywgYXZhaWxhYmxlIGZyb21cXG4gIDI1OlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvXFx1MDAzZS5cXG4gIDI2OlxcdFxcbiAgMjc6XFx0aWYgTkVUXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBXQU5UX0NPTVBBVF9ORVRMSU5LX01FU1NBR0VTXFxuICAzMDpcXHRcXHRib29sXFxuICAzMTpcXHRcXHRoZWxwXFxuICAzMjpcXHRcXHQgIFRoaXMgb3B0aW9uIGNhbiBiZSBzZWxlY3RlZCBieSBvdGhlciBvcHRpb25zIHRoYXQgbmVlZCBjb21wYXRcXG4gIDMzOlxcdFxcdCAgbmV0bGluayBtZXNzYWdlcy5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0Y29uZmlnIENPTVBBVF9ORVRMSU5LX01FU1NBR0VTXFxuICAzNjpcXHRcXHRkZWZfYm9vbCB5XFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIENPTVBBVFxcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBXRVhUX0NPUkUgfHwgV0FOVF9DT01QQVRfTkVUTElOS19NRVNTQUdFU1xcbiAgMzk6XFx0XFx0aGVscFxcbiAgNDA6XFx0XFx0ICBUaGlzIG9wdGlvbiBtYWtlcyBpdCBwb3NzaWJsZSB0byBzZW5kIGRpZmZlcmVudCBuZXRsaW5rIG1lc3NhZ2VzXFxuICA0MTpcXHRcXHQgIHRvIHRhc2tzIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSB0YXNrIGlzIGEgY29tcGF0IHRhc2sgb3Igbm90LiBUb1xcbiAgNDI6XFx0XFx0ICBhY2hpZXZlIHRoaXMsIHlvdSBuZWVkIHRvIHNldCBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWZyYWdfbGlzdCB0byB0aGVcXG4gIDQzOlxcdFxcdCAgY29tcGF0IHNrYiBiZWZvcmUgc2VuZGluZyB0aGUgc2tiLCB0aGUgbmV0bGluayBjb2RlIHdpbGwgc29ydCBvdXRcXG4gIDQ0OlxcdFxcdCAgd2hpY2ggbWVzc2FnZSB0byBhY3R1YWxseSBwYXNzIHRvIHRoZSB0YXNrLlxcbiAgNDU6XFx0XFxuICA0NjpcXHRcXHQgIE5ld2x5IHdyaXR0ZW4gY29kZSBzaG91bGQgTkVWRVIgbmVlZCB0aGlzIG9wdGlvbiBidXQgZG9cXG4gIDQ3OlxcdFxcdCAgY29tcGF0LWluZGVwZW5kZW50IG1lc3NhZ2VzIGluc3RlYWQhXFxuICA0ODpcXHRcXG4gIDQ5OlxcdGNvbmZpZyBORVRfSU5HUkVTU1xcbiAgNTA6XFx0XFx0Ym9vbFxcbiAgNTE6XFx0XFxuICA1MjpcXHRjb25maWcgTkVUX0VHUkVTU1xcbiAgNTM6XFx0XFx0Ym9vbFxcbiAgNTQ6XFx0XFxuICA1NTpcXHRjb25maWcgTkVUX1hHUkVTU1xcbiAgNTY6XFx0XFx0c2VsZWN0IE5FVF9JTkdSRVNTXFxuICA1NzpcXHRcXHRzZWxlY3QgTkVUX0VHUkVTU1xcbiAgNTg6XFx0XFx0Ym9vbFxcbiAgNTk6XFx0XFxuICA2MDpcXHRjb25maWcgTkVUX1JFRElSRUNUXFxuICA2MTpcXHRcXHRib29sXFxuICA2MjpcXHRcXG4gIDYzOlxcdGNvbmZpZyBTS0JfREVDUllQVEVEXFxuICA2NDpcXHRcXHRib29sXFxuICA2NTpcXHRcXG4gIDY2OlxcdGNvbmZpZyBTS0JfRVhURU5TSU9OU1xcbiAgNjc6XFx0XFx0Ym9vbFxcbiAgNjg6XFx0XFxuICA2OTpcXHRjb25maWcgTkVUX0RFVk1FTVxcbiAgNzA6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgNzE6XFx0XFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuICA3MjpcXHRcXHRkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSXFxuICA3MzpcXHRcXHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxcbiAgNzQ6XFx0XFxuICA3NTpcXHRjb25maWcgTkVUX1NIQVBFUlxcbiAgNzY6XFx0XFx0Ym9vbFxcbiAgNzc6XFx0XFxuICA3ODpcXHRjb25maWcgTkVUX0NSQzMyQ1xcbiAgNzk6XFx0XFx0Ym9vbFxcbiAgODA6XFx0XFx0c2VsZWN0IENSQzMyXFxuICA4MTpcXHRcXG4gIDgyOlxcdG1lbnUgXFxcIk5ldHdvcmtpbmcgb3B0aW9uc1xcXCJcXG4gIDgzOlxcdFxcbiAgODQ6XFx0c291cmNlIFxcXCJuZXQvcGFja2V0L0tjb25maWdcXFwiXFxuICA4NTpcXHRzb3VyY2UgXFxcIm5ldC9wc3AvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTk6MDU6MTcuOTYzMDc5MDUxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4OTI3OTgzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgYWZfcGFja2V0LmNgIGZvciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIGBDT05GSUdfUEFDS0VUYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGtub2IgdGhhdCBjb21lcyB0byBtaW5kLCBhbmQgaXQncyBjbGVhcmx5IHJlbGV2YW50IHRvIHRoZSBwYWNrZXQgZnVuY3Rpb25hbGl0eS4gQnV0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgIGZvciBhbnkgb3RoZXIgcG90ZW50aWFsbHkgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgKGAjaWZkZWZgIGJsb2NrcykuIEkgd2FudCB0byBpZGVudGlmeSBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyBvciBmZWF0dXJlIGZsYWdzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGhvdyBwYWNrZXQgc29ja2V0cyBiZWhhdmUsIG9yIGNvdWxkIGV4cG9zZSBzb21lIGhpZGRlbiBjb25maWd1cmF0aW9uIHNwYWNlLiBHb3R0YSBjb25zaWRlciB0aGUgcG9zc2liaWxpdHkgb2YgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaW5mbHVlbmNpbmcgYmVoYXZpb3IgaW4gdW5leHBlY3RlZCB3YXlzLiBCZXN0IHRvIGRvIGEgcXVpY2sgY29tcHJlaGVuc2l2ZSBjaGVjayB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMDIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE5OjA1OjIxLjg1NTg3OTE5OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5ODM1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9wYWNrZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtOTEtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6OTI6I2lmZGVmIENPTkZJR19JTkVUXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy05My0jaW5jbHVkZSBcXHUwMDNjbmV0L2luZXRfY29tbW9uLmhcXHUwMDNlXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI0NT1zdGF0aWMgdm9pZCBfX2Zhbm91dF9saW5rKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBhY2tldF9zb2NrICpwbyk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNDYtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNDc6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfRUdSRVNTXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNDgtc3RhdGljIG5vaW5saW5lIHN0cnVjdCBza19idWZmICpuZl9ob29rX2RpcmVjdF9lZ3Jlc3Moc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9Mjc0PXN0YXRpYyBpbnQgcGFja2V0X3htaXQoY29uc3Qgc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjc4LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6Mjc5OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX0VHUkVTU1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjgwLVxcdGlmIChuZl9ob29rX2VncmVzc19hY3RpdmUoKSkge1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0zMTI9c3RhdGljIHUxNiBwYWNrZXRfcGlja190eF9xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTgtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMTk6I2lmZGVmIENPTkZJR19YUFNcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMyMC1cXHRza2ItXFx1MDAzZXNlbmRlcl9jcHUgPSBjcHUgKyAxO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz03Mzg9c3RhdGljIHZvaWQgcHJiX2ZsdXNoX2Jsb2NrKHN0cnVjdCB0cGFja2V0X2tiZHFfY29yZSAqcGtjMSxcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNzQyLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6NzQzOiNpZiBBUkNIX0lNUExFTUVOVFNfRkxVU0hfRENBQ0hFX1BBR0UgPT0gMVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNzQ0LVxcdHU4ICpzdGFydCwgKmVuZDtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNzYzLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6NzY0OiNpZiBBUkNIX0lNUExFTUVOVFNfRkxVU0hfRENBQ0hFX1BBR0UgPT0gMVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNzY1LVxcdHN0YXJ0ID0gKHU4ICopcGJkMTtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjI0OT1zdGF0aWMgaW50IHRwYWNrZXRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI0ODgtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNDg5OiNpZiBBUkNIX0lNUExFTUVOVFNfRkxVU0hfRENBQ0hFX1BBR0UgPT0gMVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjQ5MC1cXHRpZiAocG8tXFx1MDAzZXRwX3ZlcnNpb24gXFx1MDAzYz0gVFBBQ0tFVF9WMikge1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0zNDQ0PXN0YXRpYyBpbnQgcGFja2V0X3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zNDU2LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzQ1NzojaWYgMFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzQ1OC1cXHQvKiBXaGF0IGVycm9yIHNob3VsZCB3ZSByZXR1cm4gbm93PyBFVU5BVFRBQ0g/ICovXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTQyNzQ9c3RhdGljIGludCBwYWNrZXRfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDI5Ny1cXHR9XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0Mjk4OiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDI5OS1cXHRjYXNlIFNJT0NBRERSVDpcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9NDc5OT1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBhY2tldF9uZXRkZXZfbm90aWZpZXIgPSB7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ4MDItXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0ODAzOiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDgwNC1cXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9NDg2MD1zdGF0aWMgaW50IF9fbmV0X2luaXQgcGFja2V0X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDg2NC1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ4NjU6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00ODY2LVxcdGlmICghcHJvY19jcmVhdGVfbmV0KFxcXCJwYWNrZXRcXFwiLCAwLCBuZXQtXFx1MDAzZXByb2NfbmV0LCBcXHUwMDI2cGFja2V0X3NlcV9vcHMsXFxuLS1cXG5uZXQvcGFja2V0L2ludGVybmFsLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbm5ldC9wYWNrZXQvaW50ZXJuYWwuaDoyOiNpZm5kZWYgX19QQUNLRVRfSU5URVJOQUxfSF9fXFxubmV0L3BhY2tldC9pbnRlcm5hbC5oLTMtI2RlZmluZSBfX1BBQ0tFVF9JTlRFUk5BTF9IX19cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTk6MDU6MjEuOTA2ODcwNTc4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcwODc2OTgzMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgcHJpbWFyeSBnb2FsIGlzIHRvIGlkZW50aWZ5IHByb21pc2luZyB0YXJnZXRzIGZvciBmdXp6aW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgQUZfUEFDS0VUYCBzb2NrZXQgZmFtaWx5LlxuXG5GaXJzdCwgSSBleGFtaW5lZCB0aGUgYEZvY3VzU3ltYm9sc2AgLSBmdW5jdGlvbnMgdGhhdCBhcmUgbGlrZWx5IGNyaXRpY2FsIGZvciBwYWNrZXQgdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24uIEkndmUgY29uZmlybWVkIHRoYXQgYHRwYWNrZXRfc25kYCwgYHBhY2tldF9zZW5kbXNnYCwgYW5kIGBwYWNrZXRfc2V0c29ja29wdGAgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlLiBJIHdlbnQgdGhyb3VnaCB0aGUgY29kZSBhbmQgY29uZmlybWVkIHRoYXQgdGhlc2UgYXJlIHRoZSBtb3N0IHJlbGV2YW50LiBJIGtuZXcgdGhhdCB0aGUgZnVuY3Rpb25zIGluIHRoZSBmaWxlIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCBhcmUgbW9zdGx5IHN0YXRpYywgYXMgaXMgdHlwaWNhbCBmb3IgbW9kdWxlL3Byb3RvY29sIGltcGxlbWVudGF0aW9ucyByZWdpc3RlcmluZyBwcm90b19vcHMgYW5kIG5ldF9wcm90b19mYW1pbHkgc3RydWN0dXJlcy5cblxuTmV4dCwgSSB2ZXJpZmllZCB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGUgYFBBQ0tFVGAgY29uZmlnIGlzIGVzc2VudGlhbCwgYXMgaW5kaWNhdGVkIGJ5IGBvYmotJChDT05GSUdfUEFDS0VUKSArPSBhZl9wYWNrZXQub2AuIFRoaXMgY29uZmlybXMgdGhlIGBBRl9QQUNLRVRgIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZC5cblxuRmluYWxseSwgSSByZXZpZXdlZCB0aGUgYFJlYXNvbmluZ2AuIFRoZSBjb21taXQncyBmaXggZm9yIHRoZSBgdHBhY2tldF9wYXJzZV9oZWFkZXJgIHNpZ25lZC91bnNpZ25lZCBgdHBfbGVuYCBpc3N1ZSwgYWZmZWN0aW5nIHJpbmcgYnVmZmVyIHBhY2tldCB0cmFuc21pc3Npb24sIGlzIHRoZSBjb3JlIG9mIHRoaXMgdnVsbmVyYWJpbGl0eS4gVGhpcyBoaWdobGlnaHRzIGEgY3JpdGljYWwgYXJlYSBvZiBpbnRlcmVzdDogYW55dGhpbmcgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgYFBBQ0tFVF9UWF9SSU5HYCBjb25maWd1cmF0aW9uLiBNYWxmb3JtZWQgcGFja2V0IGhlYWRlcnMgbWlnaHQgYnlwYXNzIGNydWNpYWwgYm91bmRzIGNoZWNrcy5cblxuQmVmb3JlIEkgY29tbWl0IHRvIHNldHRpbmcgdGhlIHJlc3VsdHMsIEkndmUgY29uZmlybWVkIGV2ZXJ5dGhpbmcuIEJhc2VkIG9uIG15IGFuYWx5c2lzLCB0aGVzZSBhcmUgc29saWQgY2FuZGlkYXRlcyBmb3IgZnVydGhlciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDcxMSwiT3V0cHV0VG9rZW5zIjoxMTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTk6MDU6MjguOTk0NTcxNTc1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU3OTQwOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBQ0tFVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhY2tldF9zZW5kbXNnXCIsXG4gICAgXCJ0cGFja2V0X3NuZFwiLFxuICAgIFwicGFja2V0X3NldHNvY2tvcHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgc2l6ZSB2YWxpZGF0aW9uIGluIHRwYWNrZXRfcGFyc2VfaGVhZGVyKCkgYnkgY2hhbmdpbmcgdHBfbGVuIGZyb20gc2lnbmVkIGludCB0byB1MzIsIHByZXZlbnRpbmcgc2lnbmVkIGludGVnZXIgY29tcGFyaXNvbiBieXBhc3NlcyBkdXJpbmcgQUZfUEFDS0VUIHJpbmcgYnVmZmVyIHRyYW5zbWlzc2lvbiAodHBhY2tldF9zbmQpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgc29ja2V0IGxvZ2ljIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBQ0tFVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhY2tldF9zZW5kbXNnXCIsXG4gICAgXCJ0cGFja2V0X3NuZFwiLFxuICAgIFwicGFja2V0X3NldHNvY2tvcHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgc2l6ZSB2YWxpZGF0aW9uIGluIHRwYWNrZXRfcGFyc2VfaGVhZGVyKCkgYnkgY2hhbmdpbmcgdHBfbGVuIGZyb20gc2lnbmVkIGludCB0byB1MzIsIHByZXZlbnRpbmcgc2lnbmVkIGludGVnZXIgY29tcGFyaXNvbiBieXBhc3NlcyBkdXJpbmcgQUZfUEFDS0VUIHJpbmcgYnVmZmVyIHRyYW5zbWlzc2lvbiAodHBhY2tldF9zbmQpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgc29ja2V0IGxvZ2ljIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxOTowNToyOS4wNzAzNzc2NzRaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NDU0MDU1NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTk6MDU6MjkuMDcwOTU0NDY0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzQ0NTM0NzQ2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIHNpZ25lZG5lc3MgY29tcGFyaXNvbiBpc3N1ZSBpbiBgdHBhY2tldF9wYXJzZV9oZWFkZXIoKWAgYnkgY2hhbmdpbmcgYHRwX2xlbmAgZnJvbSBgaW50YCB0byBgdTMyYCwgZW5zdXJpbmcgdGhhdCBsYXJnZSBwYWNrZXQgbGVuZ3RoIHZhbHVlcyBhcmUgcHJvcGVybHkgdHJlYXRlZCBhcyB1bnNpZ25lZCB3aGVuIHZhbGlkYXRlZCBhZ2FpbnN0IGBzaXplX21heGAuXFxuXFxuS01TQU4gaXMgbm90IG5lZWRlZCBiZWNhdXNlOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQsIHJlYWQsIG9yIGV4cG9zZWQuIFRoZSB2YXJpYWJsZSBgdHBfbGVuYCBpcyBleHBsaWNpdGx5IGFzc2lnbmVkIGluIGFsbCBicmFuY2hlcyBvZiB0aGUgYHBvLVxcdTAwM2V0cF92ZXJzaW9uYCBzd2l0Y2ggc3RhdGVtZW50IGJlZm9yZSBhbnkgcmVhZHMuXFxuMi4gVGhlIHBhdGNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcbjMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBidWdzIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IGxlbmd0aCBib3VuZHMgY2hlY2tpbmcgKGUuZy4sIG91dC1vZi1ib3VuZHMgYnVmZmVyIGFjY2VzcyBkdXJpbmcgcGFja2V0IHByb2Nlc3NpbmcpIGFyZSBvdXQtb2YtYm91bmRzIGVycm9ycyBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNiNDRhMzgyYjExNWY1ZWY5OTVmOTI5MDM1MjU0NTc0NjZmZjYzNzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAzMCAxOTowNDoxNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXG5pbmRleCBiMjJjZGEzMjIxMzYzLi43NmJkZTc5MDZkNDk0IDEwMDY0NFxuLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuQEAgLTI2NzUsNyArMjY3NSw4IEBAIHN0YXRpYyBpbnQgdHBhY2tldF9wYXJzZV9oZWFkZXIoc3RydWN0IHBhY2tldF9zb2NrICpwbywgdm9pZCAqZnJhbWUsXG4gXHRcdFx0XHRpbnQgc2l6ZV9tYXgsIHZvaWQgKipkYXRhKVxuIHtcbiBcdHVuaW9uIHRwYWNrZXRfdWhkciBwaDtcbi1cdGludCB0cF9sZW4sIG9mZjtcbitcdHUzMiB0cF9sZW47XG4rXHRpbnQgb2ZmO1xuIFxuIFx0cGgucmF3ID0gZnJhbWU7XG4gXG5AQCAtMjY5NSw3ICsyNjk2LDcgQEAgc3RhdGljIGludCB0cGFja2V0X3BhcnNlX2hlYWRlcihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCB2b2lkICpmcmFtZSxcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHRpZiAodW5saWtlbHkodHBfbGVuIFx1MDAzZSBzaXplX21heCkpIHtcbi1cdFx0cHJfZXJyKFwicGFja2V0IHNpemUgaXMgdG9vIGxvbmcgKCVkIFx1MDAzZSAlZClcXG5cIiwgdHBfbGVuLCBzaXplX21heCk7XG4rXHRcdHByX2VycihcInBhY2tldCBzaXplIGlzIHRvbyBsb25nICgldSBcdTAwM2UgJWQpXFxuXCIsIHRwX2xlbiwgc2l6ZV9tYXgpO1xuIFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTk6MDU6MjkuMDcwOTU1NDU0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNDM1MTc3ODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEFGX1BBQ0tFVCBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gdGhpcyBwYXRjaCBhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSdtIGhlYWRpbmcgc3RyYWlnaHQgZm9yIHRoZSBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AgZmlsZSDigJMgdGhhdCdzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0LiBJIG5lZWQgdG8gZ2V0IHRoZSBjb250ZXh0IHJpZ2h0IGF3YXkuIEknbSBnb2luZyB0byB6ZXJvIGluIGFyb3VuZCBsaW5lIDI2NzUuIFRoYXQgc2hvdWxkIGJlIGEgY3JpdGljYWwgYXJlYSB0byBleGFtaW5lIGdpdmVuIHRoZSBuYXR1cmUgb2YgYGFmX3BhY2tldGAgYW5kIHRoZSBsaWtlbHkgZnVuY3Rpb24gY2FsbHMgYXJvdW5kIGl0LiBLbm93aW5nIHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY2hhbmdlcyBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzdWJzeXN0ZW0uIEkgYW50aWNpcGF0ZSBuZWVkaW5nIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSB3aXRoIHBhY2tldCBwcm9jZXNzaW5nLCBzb2NrZXQgb3B0aW9ucywgYW5kIGFueSBtZW1vcnkgbWFuYWdlbWVudCBhc3BlY3RzIGluIHRoYXQgdmljaW5pdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxODgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE5OjA1OjM5LjUwNjEzNjE0OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzIxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3BhY2tldC9hZl9wYWNrZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjYwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjYwOlxcdFxcdFxcdHRvX3dyaXRlIC09IGxlbjtcXG4yNjYxOlxcdFxcdFxcdG9mZnNldCA9IDA7XFxuMjY2MjpcXHRcXHRcXHRsZW5fbWF4ID0gUEFHRV9TSVpFO1xcbjI2NjM6XFx0XFx0XFx0bGVuID0gKCh0b193cml0ZSBcXHUwMDNlIGxlbl9tYXgpID8gbGVuX21heCA6IHRvX3dyaXRlKTtcXG4yNjY0OlxcdFxcdH1cXG4yNjY1OlxcdFxcbjI2NjY6XFx0XFx0aWYgKHVubGlrZWx5KCFza2ItXFx1MDAzZWxlbikpXFxuMjY2NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yNjY4OlxcdFxcbjI2Njk6XFx0XFx0cGFja2V0X3BhcnNlX2hlYWRlcnMoc2tiLCBzb2NrKTtcXG4yNjcwOlxcdFxcbjI2NzE6XFx0XFx0cmV0dXJuIHRwX2xlbjtcXG4yNjcyOlxcdH1cXG4yNjczOlxcdFxcbjI2NzQ6XFx0c3RhdGljIGludCB0cGFja2V0X3BhcnNlX2hlYWRlcihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCB2b2lkICpmcmFtZSxcXG4yNjc1OlxcdFxcdFxcdFxcdFxcdGludCBzaXplX21heCwgdm9pZCAqKmRhdGEpXFxuMjY3NjpcXHR7XFxuMjY3NzpcXHRcXHR1bmlvbiB0cGFja2V0X3VoZHIgcGg7XFxuMjY3ODpcXHRcXHR1MzIgdHBfbGVuO1xcbjI2Nzk6XFx0XFx0aW50IG9mZjtcXG4yNjgwOlxcdFxcbjI2ODE6XFx0XFx0cGgucmF3ID0gZnJhbWU7XFxuMjY4MjpcXHRcXG4yNjgzOlxcdFxcdHN3aXRjaCAocG8tXFx1MDAzZXRwX3ZlcnNpb24pIHtcXG4yNjg0OlxcdFxcdGNhc2UgVFBBQ0tFVF9WMzpcXG4yNjg1OlxcdFxcdFxcdGlmIChwaC5oMy1cXHUwMDNldHBfbmV4dF9vZmZzZXQgIT0gMCkge1xcbjI2ODY6XFx0XFx0XFx0XFx0cHJfd2Fybl9vbmNlKFxcXCJ2YXJpYWJsZSBzaXplZCBzbG90IG5vdCBzdXBwb3J0ZWRcXFwiKTtcXG4yNjg3OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI2ODg6XFx0XFx0XFx0fVxcbjI2ODk6XFx0XFx0XFx0dHBfbGVuID0gcGguaDMtXFx1MDAzZXRwX2xlbjtcXG4yNjkwOlxcdFxcdFxcdGJyZWFrO1xcbjI2OTE6XFx0XFx0Y2FzZSBUUEFDS0VUX1YyOlxcbjI2OTI6XFx0XFx0XFx0dHBfbGVuID0gcGguaDItXFx1MDAzZXRwX2xlbjtcXG4yNjkzOlxcdFxcdFxcdGJyZWFrO1xcbjI2OTQ6XFx0XFx0ZGVmYXVsdDpcXG4yNjk1OlxcdFxcdFxcdHRwX2xlbiA9IHBoLmgxLVxcdTAwM2V0cF9sZW47XFxuMjY5NjpcXHRcXHRcXHRicmVhaztcXG4yNjk3OlxcdFxcdH1cXG4yNjk4OlxcdFxcdGlmICh1bmxpa2VseSh0cF9sZW4gXFx1MDAzZSBzaXplX21heCkpIHtcXG4yNjk5OlxcdFxcdFxcdHByX2VycihcXFwicGFja2V0IHNpemUgaXMgdG9vIGxvbmcgKCV1IFxcdTAwM2UgJWQpXFxcXG5cXFwiLCB0cF9sZW4sIHNpemVfbWF4KTtcXG4yNzAwOlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuMjcwMTpcXHRcXHR9XFxuMjcwMjpcXHRcXG4yNzAzOlxcdFxcdGlmICh1bmxpa2VseShwYWNrZXRfc29ja19mbGFnKHBvLCBQQUNLRVRfU09DS19UWF9IQVNfT0ZGKSkpIHtcXG4yNzA0OlxcdFxcdFxcdGludCBvZmZfbWluLCBvZmZfbWF4O1xcbjI3MDU6XFx0XFxuMjcwNjpcXHRcXHRcXHRvZmZfbWluID0gcG8tXFx1MDAzZXRwX2hkcmxlbiAtIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpO1xcbjI3MDc6XFx0XFx0XFx0b2ZmX21heCA9IHBvLVxcdTAwM2V0eF9yaW5nLmZyYW1lX3NpemUgLSB0cF9sZW47XFxuMjcwODpcXHRcXHRcXHRpZiAocG8tXFx1MDAzZXNrLnNrX3R5cGUgPT0gU09DS19ER1JBTSkge1xcbjI3MDk6XFx0XFx0XFx0XFx0c3dpdGNoIChwby1cXHUwMDNldHBfdmVyc2lvbikge1xcbjI3MTA6XFx0XFx0XFx0XFx0Y2FzZSBUUEFDS0VUX1YzOlxcbjI3MTE6XFx0XFx0XFx0XFx0XFx0b2ZmID0gcGguaDMtXFx1MDAzZXRwX25ldDtcXG4yNzEyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI3MTM6XFx0XFx0XFx0XFx0Y2FzZSBUUEFDS0VUX1YyOlxcbjI3MTQ6XFx0XFx0XFx0XFx0XFx0b2ZmID0gcGguaDItXFx1MDAzZXRwX25ldDtcXG4yNzE1OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI3MTY6XFx0XFx0XFx0XFx0ZGVmYXVsdDpcXG4yNzE3OlxcdFxcdFxcdFxcdFxcdG9mZiA9IHBoLmgxLVxcdTAwM2V0cF9uZXQ7XFxuMjcxODpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yNzE5OlxcdFxcdFxcdFxcdH1cXG4yNzIwOlxcdFxcdFxcdH0gZWxzZSB7XFxuMjcyMTpcXHRcXHRcXHRcXHRzd2l0Y2ggKHBvLVxcdTAwM2V0cF92ZXJzaW9uKSB7XFxuMjcyMjpcXHRcXHRcXHRcXHRjYXNlIFRQQUNLRVRfVjM6XFxuMjcyMzpcXHRcXHRcXHRcXHRcXHRvZmYgPSBwaC5oMy1cXHUwMDNldHBfbWFjO1xcbjI3MjQ6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjcyNTpcXHRcXHRcXHRcXHRjYXNlIFRQQUNLRVRfVjI6XFxuMjcyNjpcXHRcXHRcXHRcXHRcXHRvZmYgPSBwaC5oMi1cXHUwMDNldHBfbWFjO1xcbjI3Mjc6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjcyODpcXHRcXHRcXHRcXHRkZWZhdWx0OlxcbjI3Mjk6XFx0XFx0XFx0XFx0XFx0b2ZmID0gcGguaDEtXFx1MDAzZXRwX21hYztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTk6MDU6MzkuNTA2NDEwMDc4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0MDg5NTE5NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHRwYWNrZXRfcGFyc2VfaGVhZGVyYCoqXG5cbk9rYXksIHNvIEknbSBhdCB0aGUgcG9pbnQgd2hlcmUgSSBuZWVkIHRvIHJlYWxseSBkaWcgaW50byBgdHBhY2tldF9wYXJzZV9oZWFkZXJgLiBJJ3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBkYXRhIGZsb3csIGJ1dCBub3cgaXQncyB0aW1lIHRvIHVuZGVyc3RhbmQgdGhlIG5pdHR5LWdyaXR0eSBvZiAqaG93KiB0aGlzIGhlYWRlciBpcyBwYXJzZWQgYW5kLCBjcnVjaWFsbHksIGhvdyBpdCBnZXRzIGludGVncmF0ZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGlwZWxpbmUuIExldCdzIHRyYWNlIGl0IGFuZCBmaWd1cmUgb3V0IHRoZSBjYWxsIHNpdGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24ncyByZXNwb25zaWJpbGl0eSwgYW5kIHdoYXQgZGF0YSBpdCByZWxpZXMgb24uIEkgd2FudCB0byBzZWUgZXhhY3RseSBob3cgdGhlIGhlYWRlciBpbmZvcm1hdGlvbiBpcyBleHRyYWN0ZWQsIHZhbGlkYXRlZCAoaWYgYXQgYWxsISksIGFuZCBoYW5kZWQgb2ZmLiBBcmUgdGhlcmUgYW55IGFzc3VtcHRpb25zIGJlaW5nIG1hZGUgYWJvdXQgdGhlIHVuZGVybHlpbmcgbmV0d29yayBhZGFwdGVyIG9yIGxpbmsgbGF5ZXI/IEFyZSB0aGVyZSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciB2dWxuZXJhYmlsaXRpZXM/IFRpbWUgdG8gZmlyZSB1cCB0aGUgZGVidWdnZXIgYW5kIHN0YXJ0IHdhbGtpbmcgdGhlIGNvZGUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYW55IGVycm9yIGhhbmRsaW5nIHBhdGhzIGFuZCBob3cgdGhvc2UgYXJlIG1hbmFnZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ1NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTk6MDU6NDQuOTE1MzY0NjIyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MzUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3MzA6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjczMTpcXHRcXHRcXHRcXHR9XFxuMjczMjpcXHRcXHRcXHR9XFxuMjczMzpcXHRcXHRcXHRpZiAodW5saWtlbHkoKG9mZiBcXHUwMDNjIG9mZl9taW4pIHx8IChvZmZfbWF4IFxcdTAwM2Mgb2ZmKSkpXFxuMjczNDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yNzM1OlxcdFxcdH0gZWxzZSB7XFxuMjczNjpcXHRcXHRcXHRvZmYgPSBwby1cXHUwMDNldHBfaGRybGVuIC0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9sbCk7XFxuMjczNzpcXHRcXHR9XFxuMjczODpcXHRcXG4yNzM5OlxcdFxcdCpkYXRhID0gZnJhbWUgKyBvZmY7XFxuMjc0MDpcXHRcXHRyZXR1cm4gdHBfbGVuO1xcbjI3NDE6XFx0fVxcbjI3NDI6XFx0XFxuMjc0MzpcXHRzdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZylcXG4yNzQ0OlxcdHtcXG4yNzQ1OlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xcbjI3NDY6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4yNzQ3OlxcdFxcdHN0cnVjdCB2aXJ0aW9fbmV0X2hkciB2bmV0X2hkcjtcXG4yNzQ4OlxcdFxcdGJvb2wgaGFzX3ZuZXRfaGRyID0gZmFsc2U7XFxuMjc0OTpcXHRcXHRzdHJ1Y3Qgc29ja2NtX2Nvb2tpZSBzb2NrYztcXG4yNzUwOlxcdFxcdF9fYmUxNiBwcm90bztcXG4yNzUxOlxcdFxcdGludCBlcnIsIHJlc2VydmUgPSAwO1xcbjI3NTI6XFx0XFx0dm9pZCAqcGg7XFxuMjc1MzpcXHRcXHRERUNMQVJFX1NPQ0tBRERSKHN0cnVjdCBzb2NrYWRkcl9sbCAqLCBzYWRkciwgbXNnLVxcdTAwM2Vtc2dfbmFtZSk7XFxuMjc1NDpcXHRcXHRib29sIG5lZWRfd2FpdCA9ICEobXNnLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xcbjI3NTU6XFx0XFx0aW50IHZuZXRfaGRyX3N6ID0gUkVBRF9PTkNFKHBvLVxcdTAwM2V2bmV0X2hkcl9zeik7XFxuMjc1NjpcXHRcXHR1bnNpZ25lZCBjaGFyICphZGRyID0gTlVMTDtcXG4yNzU3OlxcdFxcdGludCB0cF9sZW4sIHNpemVfbWF4O1xcbjI3NTg6XFx0XFx0dm9pZCAqZGF0YTtcXG4yNzU5OlxcdFxcdGludCBsZW5fc3VtID0gMDtcXG4yNzYwOlxcdFxcdGludCBzdGF0dXMgPSBUUF9TVEFUVVNfQVZBSUxBQkxFO1xcbjI3NjE6XFx0XFx0aW50IGhhcmRfaGVhZGVyX2xlbiwgaGxlbiwgdGxlbiwgY29weWxlbiA9IDA7XFxuMjc2MjpcXHRcXHRsb25nIHRpbWVvO1xcbjI3NjM6XFx0XFxuMjc2NDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZwby1cXHUwMDNlcGdfdmVjX2xvY2spO1xcbjI3NjU6XFx0XFxuMjc2NjpcXHRcXHQvKiBwYWNrZXRfc2VuZG1zZygpIGNoZWNrIG9uIHR4X3JpbmcucGdfdmVjIHdhcyBsb2NrbGVzcyxcXG4yNzY3OlxcdFxcdCAqIHdlIG5lZWQgdG8gY29uZmlybSBpdCB1bmRlciBwcm90ZWN0aW9uIG9mIHBnX3ZlY19sb2NrLlxcbjI3Njg6XFx0XFx0ICovXFxuMjc2OTpcXHRcXHRpZiAodW5saWtlbHkoIXBvLVxcdTAwM2V0eF9yaW5nLnBnX3ZlYykpIHtcXG4yNzcwOlxcdFxcdFxcdGVyciA9IC1FQlVTWTtcXG4yNzcxOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjI3NzI6XFx0XFx0fVxcbjI3NzM6XFx0XFx0aWYgKGxpa2VseShzYWRkciA9PSBOVUxMKSkge1xcbjI3NzQ6XFx0XFx0XFx0ZGV2XFx0PSBwYWNrZXRfY2FjaGVkX2Rldl9nZXQocG8pO1xcbjI3NzU6XFx0XFx0XFx0cHJvdG9cXHQ9IFJFQURfT05DRShwby1cXHUwMDNlbnVtKTtcXG4yNzc2OlxcdFxcdH0gZWxzZSB7XFxuMjc3NzpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjI3Nzg6XFx0XFx0XFx0aWYgKG1zZy1cXHUwMDNlbXNnX25hbWVsZW4gXFx1MDAzYyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2xsKSlcXG4yNzc5OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxOTowNTo0NC45MTU2MzAwMDJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODE4Mzk1NjI2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENoYW5nZSB0byBgdHBfbGVuYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUgY2hhbmdlLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCBwb3RlbnRpYWwgc2lnbmVkbmVzcyBpc3N1ZXMsIHBhcnRpY3VsYXJseSB3aGVuIGRlYWxpbmcgd2l0aCBzaXplcyBvciBsZW5ndGhzLiBJdCBsb29rcyBsaWtlIGB0cF9sZW5gIHdhcyBwcmV2aW91c2x5IGFuIGBpbnRgLCBidXQgaXQncyBub3cgYmVpbmcgY2hhbmdlZCB0byBhIGB1MzJgIChvciB1bnNpZ25lZCBpbnRlZ2VyIHdpdGggMzIgYml0cykuIFRoZSBvbGQgY29kZSBjb21wYXJlZCBgdHBfbGVuYCB3aXRoIGBzaXplX21heGAsIHdoaWNoIGlzIHBhc3NlZCBhcyBhbiBgaW50YC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0LCBpZiBgdHBfbGVuYCB3YXMgYSBsYXJnZSwgXCJuZWdhdGl2ZVwiIGBpbnRgIChlZmZlY3RpdmVseSBhIGxhcmdlIHVuc2lnbmVkIHZhbHVlKSwgdGhlIG9yaWdpbmFsIHNpZ25lZCBjb21wYXJpc29uIGNvdWxkIGhhdmUgaW5jb3JyZWN0bHkgZXZhbHVhdGVkIHRvIGZhbHNlIGlmIGBzaXplX21heGAgd2FzIHBvc2l0aXZlLiBUaGlzIHdvdWxkIGFsbG93IGEgbmVnYXRpdmUgYHRwX2xlbmAgdmFsdWUgdG8gc2xpcCB0aHJvdWdoLCBsZWFkaW5nIHRvIHNlcmlvdXMgcHJvYmxlbXMgbGF0ZXIgb24gd2hlbiB1c2VkIHRvIGRldGVybWluZSBidWZmZXIgc2l6ZXMuIFRoZSBmaXggYWRkcmVzc2VzIHRoaXMgYnkgZm9yY2luZyBhbiB1bnNpZ25lZCBjb21wYXJpc29uIChgdTMyYCB2cyBgaW50YCB0cmlnZ2VycyBwcm9tb3Rpb24gb2YgdGhlIHNpZ25lZCBgaW50YCB0byBgdW5zaWduZWQgaW50YCksIHNvIGxhcmdlIHZhbHVlcyBub3cgY29ycmVjdGx5IHRyaWdnZXIgdGhlIGJvdW5kcyBjaGVjay4gV2Ugd2FudCB0aGUgY29tcGFyaXNvbiB0byByZWplY3QgYW55IHZhbHVlIHRoYXQgY291bGQgYmUgcHJvYmxlbWF0aWMuXG5cbk5vdywgSSBuZWVkIHRvIHRob3JvdWdobHkgYXNzZXNzIGlmIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gSSBhbHdheXMgbG9vayBmb3IgdGhpcyFcblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duOlxuXG4xLiAgSXMgYHRwX2xlbmAgaXRzZWxmIHVuaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZT8gTm8sIGl0J3MgaW5pdGlhbGl6ZWQgaW4gYWxsIHRoZSBzd2l0Y2ggY2FzZXMgKGBUUEFDS0VUX1YzYCwgYFRQQUNLRVRfVjJgLCBhbmQgdGhlIGRlZmF1bHQgY2FzZSksIHNvIHRoYXQgaXMgbm90IGEgY29uY2Vybi5cbjIuICBEb2VzIHRoaXMgcGF0Y2ggKmludHJvZHVjZSogYW55IGluc3RhbmNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2U/IEkgbmVlZCB0byBjaGVjayBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG9yIHBhZGRpbmcgbWlnaHQgbm90IGJlIGluaXRpYWxpemVkLCBidXQgSSBkbyBub3QgYmVsaWV2ZSB0aGlzIGlzIGEgZmFjdG9yIGhlcmUuXG4zLiAgRG9lcyB0aGUgcGF0Y2ggaW50cm9kdWNlICphbnkqIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gVGhlIGxvZ2ljIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYW5kIGRvZXNuJ3QgcmVseSBvbiB1bmluaXRpYWxpemVkIGRhdGEsIHNvIEknbSBub3Qgc2VlaW5nIHRoYXQuXG40LiAgQXJlIHRoZXJlIGFueSBhbGxvY2F0aW9ucyBvciBpbml0aWFsaXphdGlvbnMgb2YgY29tcGxleCBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHByb2JsZW1hdGljPyBObywgbm90aGluZyBqdW1wcyBvdXQgYXQgbWUuXG41LiAgQ291bGQgdGhlIGNoYW5nZSB0byBgdHBfbGVuYCBpbnRyb2R1Y2UgYW55IGJvdW5kcyBjaGVjayBmbGF3cyBvciBsZW5ndGggY2FsY3VsYXRpb25zLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM/IFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZyFcblxuVGhlIGtleSBpcyB0aGF0IGlmIGB0cF9sZW5gICp3YXMqIG5lZ2F0aXZlIGJlZm9yZSwgd291bGQgaXQgaGF2ZSBjYXVzZWQgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3Igb3ZlcmZsb3cgaW4gdGhlICpwYWNrZXQgdHJhbnNtaXNzaW9uKiBwaGFzZT8gSXQgbG9va3MgbGlrZSBgdHBfbGVuYCBpcyByZXR1cm5lZCBieSBgdHBhY2tldF9wYXJzZV9oZWFkZXJgIGFuZCB1c2VkIGluIGB0cGFja2V0X3NuZGAuIEknbGwgbmVlZCB0byBjaGVjayBjYXJlZnVsbHkgaG93IHRoZSByZXR1cm4gdmFsdWUgZnJvbSBgdHBhY2tldF9wYXJzZV9oZWFkZXJgIGlzIGhhbmRsZWQgaW4gYHRwYWNrZXRfc25kYC4gSWYgYHRwX2xlbmAgaXMgbGVzcyB0aGFuIHplcm8sIGB0cGFja2V0X3NuZGAgZG9lcyBzZWVtIHRvIGhhdmUgYSBjaGVjaywgYnV0IGl0IG5lZWRzIHRvIGJlIHZlcmlmaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTAxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTk6MDU6NTMuMDk5NTg4NTQyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI4MzA6XFx0XFx0XFx0XFx0XFx0dGltZW8gPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dChcXHUwMDI2cG8tXFx1MDAzZXNrYl9jb21wbGV0aW9uLCB0aW1lbyk7XFxuMjgzMTpcXHRcXHRcXHRcXHRcXHRpZiAodGltZW8gXFx1MDAzYz0gMCkge1xcbjI4MzI6XFx0XFx0XFx0XFx0XFx0XFx0ZXJyID0gIXRpbWVvID8gLUVUSU1FRE9VVCA6IC1FUkVTVEFSVFNZUztcXG4yODMzOlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X3B1dDtcXG4yODM0OlxcdFxcdFxcdFxcdFxcdH1cXG4yODM1OlxcdFxcdFxcdFxcdFxcdC8qIGNoZWNrIGZvciBhZGRpdGlvbmFsIGZyYW1lcyAqL1xcbjI4MzY6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjgzNzpcXHRcXHRcXHRcXHR9IGVsc2VcXG4yODM4OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI4Mzk6XFx0XFx0XFx0fVxcbjI4NDA6XFx0XFxuMjg0MTpcXHRcXHRcXHRza2IgPSBOVUxMO1xcbjI4NDI6XFx0XFx0XFx0dHBfbGVuID0gdHBhY2tldF9wYXJzZV9oZWFkZXIocG8sIHBoLCBzaXplX21heCwgXFx1MDAyNmRhdGEpO1xcbjI4NDM6XFx0XFx0XFx0aWYgKHRwX2xlbiBcXHUwMDNjIDApXFxuMjg0NDpcXHRcXHRcXHRcXHRnb3RvIHRwYWNrZXRfZXJyb3I7XFxuMjg0NTpcXHRcXG4yODQ2OlxcdFxcdFxcdHN0YXR1cyA9IFRQX1NUQVRVU19TRU5EX1JFUVVFU1Q7XFxuMjg0NzpcXHRcXHRcXHRobGVuID0gTExfUkVTRVJWRURfU1BBQ0VfRVgoZGV2LCBoYXJkX2hlYWRlcl9sZW4pO1xcbjI4NDg6XFx0XFx0XFx0dGxlbiA9IGRldi1cXHUwMDNlbmVlZGVkX3RhaWxyb29tO1xcbjI4NDk6XFx0XFx0XFx0aWYgKHZuZXRfaGRyX3N6KSB7XFxuMjg1MDpcXHRcXHRcXHRcXHRkYXRhICs9IHZuZXRfaGRyX3N6O1xcbjI4NTE6XFx0XFx0XFx0XFx0dHBfbGVuIC09IHZuZXRfaGRyX3N6O1xcbjI4NTI6XFx0XFx0XFx0XFx0aWYgKHRwX2xlbiBcXHUwMDNjIDApIHtcXG4yODUzOlxcdFxcdFxcdFxcdFxcdHRwX2xlbiA9IC1FSU5WQUw7XFxuMjg1NDpcXHRcXHRcXHRcXHRcXHRnb3RvIHRwYWNrZXRfZXJyb3I7XFxuMjg1NTpcXHRcXHRcXHRcXHR9XFxuMjg1NjpcXHRcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnZuZXRfaGRyLCBkYXRhIC0gdm5ldF9oZHJfc3osIHNpemVvZih2bmV0X2hkcikpO1xcbjI4NTc6XFx0XFx0XFx0XFx0aWYgKF9fcGFja2V0X3NuZF92bmV0X3BhcnNlKFxcdTAwMjZ2bmV0X2hkciwgdHBfbGVuKSkge1xcbjI4NTg6XFx0XFx0XFx0XFx0XFx0dHBfbGVuID0gLUVJTlZBTDtcXG4yODU5OlxcdFxcdFxcdFxcdFxcdGdvdG8gdHBhY2tldF9lcnJvcjtcXG4yODYwOlxcdFxcdFxcdFxcdH1cXG4yODYxOlxcdFxcdFxcdFxcdGNvcHlsZW4gPSBfX3ZpcnRpbzE2X3RvX2NwdSh2aW9fbGUoKSxcXG4yODYyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICB2bmV0X2hkci5oZHJfbGVuKTtcXG4yODYzOlxcdFxcdFxcdFxcdGhhc192bmV0X2hkciA9IHRydWU7XFxuMjg2NDpcXHRcXHRcXHR9XFxuMjg2NTpcXHRcXHRcXHRjb3B5bGVuID0gbWF4X3QoaW50LCBjb3B5bGVuLCBoYXJkX2hlYWRlcl9sZW4pO1xcbjI4NjY6XFx0XFx0XFx0c2tiID0gc29ja19hbGxvY19zZW5kX3NrYihcXHUwMDI2cG8tXFx1MDAzZXNrLFxcbjI4Njc6XFx0XFx0XFx0XFx0XFx0aGxlbiArIHRsZW4gKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2xsKSArXFxuMjg2ODpcXHRcXHRcXHRcXHRcXHQoY29weWxlbiAtIGhhcmRfaGVhZGVyX2xlbiksXFxuMjg2OTpcXHRcXHRcXHRcXHRcXHQhbmVlZF93YWl0LCBcXHUwMDI2ZXJyKTtcXG4yODcwOlxcdFxcbjI4NzE6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSkge1xcbjI4NzI6XFx0XFx0XFx0XFx0Lyogd2UgYXNzdW1lIHRoZSBzb2NrZXQgd2FzIGluaXRpYWxseSB3cml0ZWFibGUgLi4uICovXFxuMjg3MzpcXHRcXHRcXHRcXHRpZiAobGlrZWx5KGxlbl9zdW0gXFx1MDAzZSAwKSlcXG4yODc0OlxcdFxcdFxcdFxcdFxcdGVyciA9IGxlbl9zdW07XFxuMjg3NTpcXHRcXHRcXHRcXHRnb3RvIG91dF9zdGF0dXM7XFxuMjg3NjpcXHRcXHRcXHR9XFxuMjg3NzpcXHRcXHRcXHR0cF9sZW4gPSB0cGFja2V0X2ZpbGxfc2tiKHBvLCBza2IsIHBoLCBkZXYsIGRhdGEsIHRwX2xlbiwgcHJvdG8sXFxuMjg3ODpcXHRcXHRcXHRcXHRcXHRcXHQgIGFkZHIsIGhsZW4sIGNvcHlsZW4sIGhhcmRfaGVhZGVyX2xlbixcXG4yODc5OlxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnNvY2tjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTk6MDU6NTMuMDk5ODM0MzcyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNDI0NTc0ODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCdzIFNhbml0aXplciBSZXF1aXJlbWVudHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgaXNzdWUgYW5kIHRoZW4gZGV0ZXJtaW5lIGlmIGl0IGludHJvZHVjZXMgYW55IEtNU0FOLXJlbGV2YW50IGNvbmNlcm5zLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgYnVnIGluIHRoZSBgdHBhY2tldF9wYXJzZV9oZWFkZXJgIGZ1bmN0aW9uIHdoZXJlIGEgc2lnbmVkbmVzcyBpc3N1ZSBpbiB0aGUgY29tcGFyaXNvbiBvZiBgdHBfbGVuYCBhbGxvd2VkIG92ZXJzaXplZCBmcmFtZXMgdG8gYnlwYXNzIHByb3BlciB2YWxpZGF0aW9uLiBTcGVjaWZpY2FsbHksIGEgbGFyZ2UgdW5zaWduZWQgdmFsdWUgZm9yIGB0cF9sZW5gIGNvdWxkIGJlIG1pc2ludGVycHJldGVkIGFzIGEgbmVnYXRpdmUgYGludGAsIGxlYWRpbmcgdG8gaW5jb3JyZWN0IGxlbmd0aCBjaGVja3MuIFRoaXMgcGF0Y2ggY2hhbmdlcyBgdHBfbGVuYCBmcm9tIGFuIGBpbnRgIHRvIGEgYHUzMmAgdG8gZW5zdXJlIHByb3BlciBjb21wYXJpc29uIHdpdGggYHNpemVfbWF4YCBhbmQgY29ycmVjdCByZWplY3Rpb24gb2Ygb3ZlcnNpemVkIGZyYW1lcy5cblxuTXkgcHJpbWFyeSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeS4gRG9lcyB0aGlzIGNoYW5nZSBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLCBwb3RlbnRpYWwgc3RydWN0IHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvcGllcyB0byB1c2Vyc3BhY2U/IExldCdzIHZlcmlmeS4gVGhlIGxvZ2ljIHNob3dzIGB0cF9sZW5gIGlzIGRlcml2ZWQgZnJvbSBgcGguaDMtXHUwMDNldHBfbGVuYCwgYHBoLmgyLVx1MDAzZXRwX2xlbmAsIG9yIGBwaC5oMS1cdTAwM2V0cF9sZW5gIGFjcm9zcyBhbGwgY29udHJvbCBmbG93IHBhdGhzIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50LiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIHRoZXJlJ3Mgbm8gZXZpZGVuY2Ugb2YgYW55IHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlIHByb2JsZW0gaXMgcHVyZWx5IGEgc2lnbmVkIGludGVnZXIgY29tcGFyaXNvbi9vdmVyZmxvdyBidWcgaW4gbGVuZ3RoIHZhbGlkYXRpb24uIE1lbW9yeSBzYWZldHkgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW5jb3JyZWN0IGxlbmd0aCBjaGVja3MsIHN1Y2ggYXMgYnVmZmVyIG92ZXJmbG93cyBvciBvdXQtb2YtYm91bmRzIHJlYWRzLCBhcmUgYWxyZWFkeSBhZGRyZXNzZWQgYnkgS0FTQU4uXG5cbkkgbmVlZCB0byBjb25maXJtIHRoYXQgS0FTQU4gYW5kIEtNU0FOIGFyZSBjb3JyZWN0bHkgYWRkcmVzc2VkLiBLQVNBTiBpcyB0aGUga2VybmVsIGFkZHJlc3Mgc2FuaXRpemVyLCBhbmQgSSBrbm93IGl0IGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgZG91YmxlLWZyZWVzLCBhbmQgYnVmZmVyIG92ZXJmbG93cy4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBzcGVjaWZpY2FsbHkgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBhbmQgaXQgZGV0ZWN0cyBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3Mgc3RlbW1pbmcgZnJvbSB0aGlzLlxuXG5TaW5jZSB0aGlzIHBhdGNoICpkb2Vzbid0KiBpbnRyb2R1Y2Ugb3IgdXRpbGl6ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIGl0IGxvb2tzIGxpa2UgS01TQU4gaXNuJ3QgbmVlZGVkIGhlcmUuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIGZpeGluZyBhIHNpZ25lZG5lc3MgYnVnLCBhbmQgdGhlIGludGVnZXIgYHRwX2xlbmAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEtNU0FOIGlzIG5vdCB0cmlnZ2VyZWQsIGFuZCBLQVNBTiBzaG91bGQgaGFuZGxlIGFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBkdWUgdG8gaW5jb3JyZWN0IGxlbmd0aC5cblxuTGV0IG1lIGRvdWJsZS1jaGVjay4gVGhlIHBhdGNoIGZpeGVzIGEgc2lnbmVkbmVzcyBjb21wYXJpc29uIGJ1ZyBpbiBgdHBhY2tldF9wYXJzZV9oZWFkZXJgIGJ5IGNoYW5naW5nIGB0cF9sZW5gIGZyb20gYGludGAgdG8gYHUzMmAsIHdoaWNoIGVuc3VyZXMgdGhhdCBvdmVyc2l6ZWQgZnJhbWUgbGVuZ3RocyBhcmUgcHJvcGVybHkgcmVqZWN0ZWQgd2l0aCBgLUVNU0dTSVpFYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcy4gYHRwX2xlbmAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCBhY3Jvc3MgYWxsIGNvbnRyb2wgZmxvdyBicmFuY2hlcyBpbiBgdHBhY2tldF9wYXJzZV9oZWFkZXJgLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIG9yIHdyaXRlcyByZXN1bHRpbmcgZnJvbSBpbmNvcnJlY3QgbGVuZ3RoIG9yIG9mZnNldCB2YWxpZGF0aW9uIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLiBJdCdzIGNsZWFyLlxuXG5UaGVyZWZvcmUsIEknbSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NzYsIk91dHB1dFRva2VucyI6MjA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjkyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTk6MDY6MDMuNTI0NDExMzQ2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBzaWduZWRuZXNzIGNvbXBhcmlzb24gaXNzdWUgaW4gYHRwYWNrZXRfcGFyc2VfaGVhZGVyKClgIGJ5IGNoYW5naW5nIGB0cF9sZW5gIGZyb20gYGludGAgdG8gYHUzMmAsIGVuc3VyaW5nIHRoYXQgbGFyZ2UgcGFja2V0IGxlbmd0aCB2YWx1ZXMgYXJlIHByb3Blcmx5IHRyZWF0ZWQgYXMgdW5zaWduZWQgd2hlbiB2YWxpZGF0ZWQgYWdhaW5zdCBgc2l6ZV9tYXhgLlxcblxcbktNU0FOIGlzIG5vdCBuZWVkZWQgYmVjYXVzZTpcXG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkLCByZWFkLCBvciBleHBvc2VkLiBUaGUgdmFyaWFibGUgYHRwX2xlbmAgaXMgZXhwbGljaXRseSBhc3NpZ25lZCBpbiBhbGwgYnJhbmNoZXMgb2YgdGhlIGBwby1cXHUwMDNldHBfdmVyc2lvbmAgc3dpdGNoIHN0YXRlbWVudCBiZWZvcmUgYW55IHJlYWRzLlxcbjIuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS5cXG4zLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgYnVncyByZWxhdGVkIHRvIGluY29ycmVjdCBsZW5ndGggYm91bmRzIGNoZWNraW5nIChlLmcuLCBvdXQtb2YtYm91bmRzIGJ1ZmZlciBhY2Nlc3MgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nKSBhcmUgb3V0LW9mLWJvdW5kcyBlcnJvcnMgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBzaWduZWRuZXNzIGNvbXBhcmlzb24gaXNzdWUgaW4gYHRwYWNrZXRfcGFyc2VfaGVhZGVyKClgIGJ5IGNoYW5naW5nIGB0cF9sZW5gIGZyb20gYGludGAgdG8gYHUzMmAsIGVuc3VyaW5nIHRoYXQgbGFyZ2UgcGFja2V0IGxlbmd0aCB2YWx1ZXMgYXJlIHByb3Blcmx5IHRyZWF0ZWQgYXMgdW5zaWduZWQgd2hlbiB2YWxpZGF0ZWQgYWdhaW5zdCBgc2l6ZV9tYXhgLlxcblxcbktNU0FOIGlzIG5vdCBuZWVkZWQgYmVjYXVzZTpcXG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkLCByZWFkLCBvciBleHBvc2VkLiBUaGUgdmFyaWFibGUgYHRwX2xlbmAgaXMgZXhwbGljaXRseSBhc3NpZ25lZCBpbiBhbGwgYnJhbmNoZXMgb2YgdGhlIGBwby1cXHUwMDNldHBfdmVyc2lvbmAgc3dpdGNoIHN0YXRlbWVudCBiZWZvcmUgYW55IHJlYWRzLlxcbjIuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS5cXG4zLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgYnVncyByZWxhdGVkIHRvIGluY29ycmVjdCBsZW5ndGggYm91bmRzIGNoZWNraW5nIChlLmcuLCBvdXQtb2YtYm91bmRzIGJ1ZmZlciBhY2Nlc3MgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nKSBhcmUgb3V0LW9mLWJvdW5kcyBlcnJvcnMgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowt6rwt[1] Phase: Succeeded StartedAt: 2026-08-30 19:06:47 +0000 UTC FinishedAt: 2026-08-30 19:06:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6rwt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-30 19:06:47 +0000 UTC FinishedAt: 2026-08-30 19:06:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6rwt[2] Phase: Succeeded StartedAt: 2026-08-30 19:06:47 +0000 UTC FinishedAt: 2026-08-30 22:49:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:06:47 +0000 UTC FinishedAt: 2026-08-30 22:49:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:06:47 +0000 UTC FinishedAt: 2026-08-30 19:06:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:06:47 +0000 UTC FinishedAt: 2026-08-30 19:06:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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-workflowt6rwt/series-workflowt6rwt-convert-artifact-4046526964/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:06:57 +0000 UTC FinishedAt: 2026-08-30 19:23:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:06:57 +0000 UTC FinishedAt: 2026-08-30 19:23:27 +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:*39de3a26-5cd3-4ee1-a6e4-d903f9caf3b8,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-workflowt6rwt/series-workflowt6rwt-convert-artifact-4046526964/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": "69ef43da-58d3-445d-89ff-fcf67974e928", "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-workflowt6rwt/series-workflowt6rwt-build-action-3940220658/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:06:57 +0000 UTC FinishedAt: 2026-08-30 19:23:17 +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:*39de3a26-5cd3-4ee1-a6e4-d903f9caf3b8,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-workflowt6rwt/series-workflowt6rwt-convert-artifact-4046526964/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": "69ef43da-58d3-445d-89ff-fcf67974e928", "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-workflowt6rwt/series-workflowt6rwt-build-action-3940220658/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:23:27 +0000 UTC FinishedAt: 2026-08-30 19:23:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:23:27 +0000 UTC FinishedAt: 2026-08-30 19:23:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:23:27 +0000 UTC FinishedAt: 2026-08-30 19:23:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:23:27 +0000 UTC FinishedAt: 2026-08-30 19:23:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-workflowt6rwt/series-workflowt6rwt-convert-artifact-226661811/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:23:38 +0000 UTC FinishedAt: 2026-08-30 19:25:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:23:38 +0000 UTC FinishedAt: 2026-08-30 19:24:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*69ef43da-58d3-445d-89ff-fcf67974e928,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-workflowt6rwt/series-workflowt6rwt-build-action-3940220658/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-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:25:08 +0000 UTC FinishedAt: 2026-08-30 19:25:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:25:08 +0000 UTC FinishedAt: 2026-08-30 19:25:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:25:08 +0000 UTC FinishedAt: 2026-08-30 19:41:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:25:08 +0000 UTC FinishedAt: 2026-08-30 19:41:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*39de3a26-5cd3-4ee1-a6e4-d903f9caf3b8,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-workflowt6rwt/series-workflowt6rwt-convert-artifact-226661811/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": "d26b29ad-2136-4d38-8071-f68fc940ef12", "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-workflowt6rwt/series-workflowt6rwt-build-action-3177422439/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:25:08 +0000 UTC FinishedAt: 2026-08-30 19:41:26 +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:*39de3a26-5cd3-4ee1-a6e4-d903f9caf3b8,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-workflowt6rwt/series-workflowt6rwt-convert-artifact-226661811/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": "d26b29ad-2136-4d38-8071-f68fc940ef12", "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-workflowt6rwt/series-workflowt6rwt-build-action-3177422439/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:41:36 +0000 UTC FinishedAt: 2026-08-30 19:41:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:41:36 +0000 UTC FinishedAt: 2026-08-30 19:41:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:41:36 +0000 UTC FinishedAt: 2026-08-30 19:43:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:41:36 +0000 UTC FinishedAt: 2026-08-30 19:43:20 +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:*d26b29ad-2136-4d38-8071-f68fc940ef12,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-workflowt6rwt/series-workflowt6rwt-build-action-3177422439/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-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:43:30 +0000 UTC FinishedAt: 2026-08-30 22:49:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:43:30 +0000 UTC FinishedAt: 2026-08-30 22:49:37 +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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"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:*69ef43da-58d3-445d-89ff-fcf67974e928,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d26b29ad-2136-4d38-8071-f68fc940ef12,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-workflowt6rwt/series-workflowt6rwt-build-action-3940220658/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-workflowt6rwt/series-workflowt6rwt-build-action-3177422439/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:43:30 +0000 UTC FinishedAt: 2026-08-30 19:43:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:43:30 +0000 UTC FinishedAt: 2026-08-30 19:43:34 +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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"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-workflowt6rwt/series-workflowt6rwt-convert-artifact-1461741228/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:43:30 +0000 UTC FinishedAt: 2026-08-30 19:43:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:43:30 +0000 UTC FinishedAt: 2026-08-30 19:43:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:43:30 +0000 UTC FinishedAt: 2026-08-30 19:43:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:43:40 +0000 UTC FinishedAt: 2026-08-30 22:49:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6rwt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"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":["packet_sendmsg","tpacket_snd","packet_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"688c2f49-e60d-4410-9da0-8bdf7a1d0649","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-30 19:43:40 +0000 UTC FinishedAt: 2026-08-30 22:49:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*69ef43da-58d3-445d-89ff-fcf67974e928,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d26b29ad-2136-4d38-8071-f68fc940ef12,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-workflowt6rwt/series-workflowt6rwt-build-action-3940220658/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-workflowt6rwt/series-workflowt6rwt-build-action-3177422439/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-workflowt6rwt/series-workflowt6rwt-convert-artifact-1461741228/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,}