Name: series-workflowfwhdk Phase: Succeeded StartedAt: 2026-09-08 07:56:32 +0000 UTC FinishedAt: 2026-09-08 12:00:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwhdk[0] Phase: Succeeded StartedAt: 2026-09-08 07:56:32 +0000 UTC FinishedAt: 2026-09-08 08:20:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwhdk[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 07:56:32 +0000 UTC FinishedAt: 2026-09-08 08:20:12 +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": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "PROC_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "PROC_FS" ], "series_id": "43ff44af-d88b-42fc-a42c-ab238c98f4f4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "fib6_walker_unlink", "ipv6_route_iter_active", "ipv6_route_native_seq_stop", "ipv6_route_seq_stop", "ipv6_route_seq_start", "ipv6_route_seq_next" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7UFJPQ19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZpYjZfd2Fsa2VyX3VubGluayYjMzQ7LAogICAgJiMzNDtpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlJiMzNDssCiAgICAmIzM0O2lwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wJiMzNDssCiAgICAmIzM0O2lwdjZfcm91dGVfc2VxX3N0b3AmIzM0OywKICAgICYjMzQ7aXB2Nl9yb3V0ZV9zZXFfc3RhcnQmIzM0OywKICAgICYjMzQ7aXB2Nl9yb3V0ZV9zZXFfbmV4dCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGxpc3RfZGVsIHdpdGggbGlzdF9kZWxfaW5pdCBpbiBmaWI2X3dhbGtlcl91bmxpbmsoKSBhbmQgdXBkYXRlcyBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKCkgdG8gY2hlY2sgbGlzdF9lbXB0eShcdTAwMjZ3LVx1MDAzZWxoKSBpbnN0ZWFkIG9mIGluc3BlY3Rpbmcgd2Fsa2VyIHN0YXRlIGFuZCBub2RlIHBvaW50ZXJzLiBUaGlzIGNoYW5nZSBmaXhlcyBsaXN0IHRyYWNraW5nIGFuZCBhdm9pZHMgZG91YmxlIGxpc3QgZGVsZXRpb24gLyBsaXN0IGNvcnJ1cHRpb24gd2hlbiBzdG9wcGluZyB0aGUgSVB2NiByb3V0ZSBzZXEgaXRlcmF0aW9uLiBBbGwgcmVsZXZhbnQgbGlzdCBzdHJ1Y3R1cmVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCAodmlhIElOSVRfTElTVF9IRUFEIC8gbGlzdF9kZWxfaW5pdCAvIG1lbXNldCkgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgcmlza3MgYXJlIGludHJvZHVjZWQuIFN0YW5kYXJkIGRldGVjdG9ycyAoS0FTQU4gLyBDT05GSUdfREVCVUdfTElTVCkgY292ZXIgbGlzdCBtYW5pcHVsYXRpb24gYW5kIG1lbW9yeSBjb3JydXB0aW9uIHJpc2tzIGluIHRoaXMgYXJlYSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElQdjYgRklCIHdhbGtlciBtYW5hZ2VtZW50IGFuZCBpdGVyYXRpb24gc3RhdGUgY2hlY2tpbmcgaW4gbmV0L2lwdjYvaXA2X2ZpYi5jICh1c2luZyBsaXN0X2RlbF9pbml0IG9uIHVubGlua2luZyBhbmQgY2hlY2tpbmcgIWxpc3RfZW1wdHkgZm9yIGFjdGl2ZSBpdGVyYXRvciBzdGF0ZSkuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIC9wcm9jL25ldC9pcHY2X3JvdXRlIHNlcV9maWxlIG9wZXJhdGlvbnMgYW5kIEJQRiBJUHY2IHJvdXRlIGl0ZXJhdG9ycyBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1YzQ2NGMwMmRiZjA3OGY1ODk5Yjc4NDJjOThiMDRhM2RhODQ3MWQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwODoxNzo1NSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmNcbmluZGV4IDNlMzgyYmExNTczZTMuLjllYTc1NzAzYjM4ZDQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfZmliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl9maWIuY1xuQEAgLTg1LDcgJiM0Mzs4NSw3IEBAIHN0YXRpYyB2b2lkIGZpYjZfd2Fsa2VyX2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4gc3RhdGljIHZvaWQgZmliNl93YWxrZXJfdW5saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxuIHtcbiBcdHdyaXRlX2xvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XG4tXHRsaXN0X2RlbChcdTAwMjZ3LVx1MDAzZWxoKTtcbiYjNDM7XHRsaXN0X2RlbF9pbml0KFx1MDAyNnctXHUwMDNlbGgpO1xuIFx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xuIH1cbiBcbkBAIC0yNzYwLDcgJiM0MzsyNzYwLDcgQEAgc3RhdGljIHZvaWQgKmlwdjZfcm91dGVfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcbiBzdGF0aWMgYm9vbCBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIpXG4ge1xuIFx0c3RydWN0IGZpYjZfd2Fsa2VyICp3ID0gXHUwMDI2aXRlci1cdTAwM2V3O1xuLVx0cmV0dXJuIHctXHUwMDNlbm9kZSBcdTAwMjZcdTAwMjYgISh3LVx1MDAzZXN0YXRlID09IEZXU19VIFx1MDAyNlx1MDAyNiB3LVx1MDAzZW5vZGUgPT0gdy1cdTAwM2Vyb290KTtcbiYjNDM7XHRyZXR1cm4gdy1cdTAwM2Vub2RlIFx1MDAyNlx1MDAyNiAhbGlzdF9lbXB0eShcdTAwMjZ3LVx1MDAzZWxoKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtQUk9DX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmliNl93YWxrZXJfdW5saW5rJiMzNDssCiAgICAmIzM0O2lwdjZfcm91dGVfaXRlcl9hY3RpdmUmIzM0OywKICAgICYjMzQ7aXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3AmIzM0OywKICAgICYjMzQ7aXB2Nl9yb3V0ZV9zZXFfc3RvcCYjMzQ7LAogICAgJiMzNDtpcHY2X3JvdXRlX3NlcV9zdGFydCYjMzQ7LAogICAgJiMzNDtpcHY2X3JvdXRlX3NlcV9uZXh0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElQdjYgRklCIHdhbGtlciBtYW5hZ2VtZW50IGFuZCBpdGVyYXRpb24gc3RhdGUgY2hlY2tpbmcgaW4gbmV0L2lwdjYvaXA2X2ZpYi5jICh1c2luZyBsaXN0X2RlbF9pbml0IG9uIHVubGlua2luZyBhbmQgY2hlY2tpbmcgIWxpc3RfZW1wdHkgZm9yIGFjdGl2ZSBpdGVyYXRvciBzdGF0ZSkuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIC9wcm9jL25ldC9pcHY2X3JvdXRlIHNlcV9maWxlIG9wZXJhdGlvbnMgYW5kIEJQRiBJUHY2IHJvdXRlIGl0ZXJhdG9ycyBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1YzQ2NGMwMmRiZjA3OGY1ODk5Yjc4NDJjOThiMDRhM2RhODQ3MWQ0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwODoxNzo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9maWIuYyBiL25ldC9pcHY2L2lwNl9maWIuYwppbmRleCAzZTM4MmJhMTU3M2UzLi45ZWE3NTcwM2IzOGQ0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfZmliLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X2ZpYi5jCkBAIC04NSw3ICYjNDM7ODUsNyBAQCBzdGF0aWMgdm9pZCBmaWI2X3dhbGtlcl9saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KQogc3RhdGljIHZvaWQgZmliNl93YWxrZXJfdW5saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KQogewogCXdyaXRlX2xvY2tfYmgoJmFtcDtuZXQtJmd0O2lwdjYuZmliNl93YWxrZXJfbG9jayk7Ci0JbGlzdF9kZWwoJmFtcDt3LSZndDtsaCk7CiYjNDM7CWxpc3RfZGVsX2luaXQoJmFtcDt3LSZndDtsaCk7CiAJd3JpdGVfdW5sb2NrX2JoKCZhbXA7bmV0LSZndDtpcHY2LmZpYjZfd2Fsa2VyX2xvY2spOwogfQogCkBAIC0yNzYwLDcgJiM0MzsyNzYwLDcgQEAgc3RhdGljIHZvaWQgKmlwdjZfcm91dGVfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIHN0YXRpYyBib29sIGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcikKIHsKIAlzdHJ1Y3QgZmliNl93YWxrZXIgKncgPSAmYW1wO2l0ZXItJmd0O3c7Ci0JcmV0dXJuIHctJmd0O25vZGUgJmFtcDsmYW1wOyAhKHctJmd0O3N0YXRlID09IEZXU19VICZhbXA7JmFtcDsgdy0mZ3Q7bm9kZSA9PSB3LSZndDtyb290KTsKJiM0MzsJcmV0dXJuIHctJmd0O25vZGUgJmFtcDsmYW1wOyAhbGlzdF9lbXB0eSgmYW1wO3ctJmd0O2xoKTsKIH0KIAogc3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNDMKCQkJCQkJCW91dHB1dDogNzgKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLgoKKipBbmFseXppbmcgdGhpcyBLZXJuZWwgUGF0Y2gqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgbmF0dXJhbGx5LCB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBnb2luZyB0byBkbyBpcyBkaXZlIGludG8gdGhlIGNvZGUuIE15IGluaXRpYWwgc3RlcCB3aWxsIGJlIHRvIGV4YW1pbmUgYG5ldC9pcHY2L2lwNl9maWIuY2Ag4oCTIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgY2hhbmdlcyBzZWVtIHRvIGJlLiBJIHdhbnQgdG8gc2VlIHRoaXMgcGF0Y2ggaW4gaXRzIHByb3BlciBjb250ZXh0LiBJJiMzOTttIGdvaW5nIHRvIHVzZSBteSB0eXBpY2FsIGRlYnVnZ2luZyB0b29scywgbGlrZWx5IGEgY29tYmluYXRpb24gb2YgYGdpdCBibGFtZWAsIGBncmVwYCBhbmQgYSBnb29kIElERSB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLCB1bmRlcnN0YW5kIHRoZSBoaXN0b3J5LCBhbmQgZGV0ZXJtaW5lIHdoeSB0aGVzZSBwYXJ0aWN1bGFyIGxpbmVzIHdlcmUgdG91Y2hlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIG9mIHRoaXMgc2VjdGlvbiBvZiB0aGUgY29kZSwgaG93IHRoZSBjaGFuZ2VzIGZpdCBpbnRvIHRoZSBleGlzdGluZyBhcmNoaXRlY3R1cmUsIGFuZCB3aGF0IHRoZWlyIGludGVuZGVkIGVmZmVjdCBpcy4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGFyZWEgYXJvdW5kIHRoZSBtb2RpZmllZCBsaW5lcywgdGFraW5nIGluIGFzIG11Y2ggY29udGV4dCBhcyBJIGNhbi4gVGhpcyBpcyB0aGUgZm91bmRhdGlvbiB1cG9uIHdoaWNoIEkmIzM5O2xsIGJ1aWxkIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2ZpYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3MDpcdCAqXHRyZXN1bHQgb2YgcmVkaXJlY3RzLCBwYXRoIE1UVSBjaGFuZ2VzLCBldGMuXG4gIDcxOlx0ICovXG4gIDcyOlx0XG4gIDczOlx0c3RhdGljIHZvaWQgZmliNl9nY190aW1lcl9jYihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG4gIDc0Olx0XG4gIDc1Olx0I2RlZmluZSBGT1JfV0FMS0VSUyhuZXQsIHcpIFxcXG4gIDc2Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsIFx1MDAyNihuZXQpLVx1MDAzZWlwdjYuZmliNl93YWxrZXJzLCBsaClcbiAgNzc6XHRcbiAgNzg6XHRzdGF0aWMgdm9pZCBmaWI2X3dhbGtlcl9saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxuICA3OTpcdHtcbiAgODA6XHRcdHdyaXRlX2xvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XG4gIDgxOlx0XHRsaXN0X2FkZChcdTAwMjZ3LVx1MDAzZWxoLCBcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcnMpO1xuICA4MjpcdFx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xuICA4MzpcdH1cbiAgODQ6XHRcbiAgODU6XHRzdGF0aWMgdm9pZCBmaWI2X3dhbGtlcl91bmxpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4gIDg2Olx0e1xuICA4NzpcdFx0d3JpdGVfbG9ja19iaChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcbiAgODg6XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2dy1cdTAwM2VsaCk7XG4gIDg5Olx0XHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XG4gIDkwOlx0fVxuICA5MTpcdFxuICA5MjpcdHN0YXRpYyBpbnQgZmliNl9uZXdfc2VybnVtKHN0cnVjdCBuZXQgKm5ldClcbiAgOTM6XHR7XG4gIDk0Olx0XHRpbnQgbmV3LCBvbGQgPSBhdG9taWNfcmVhZChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3Nlcm51bSk7XG4gIDk1Olx0XG4gIDk2Olx0XHRkbyB7XG4gIDk3Olx0XHRcdG5ldyA9IG9sZCBcdTAwM2MgSU5UX01BWCA/IG9sZCAmIzQzOyAxIDogMTtcbiAgOTg6XHRcdH0gd2hpbGUgKCFhdG9taWNfdHJ5X2NtcHhjaGcoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl9zZXJudW0sIFx1MDAyNm9sZCwgbmV3KSk7XG4gIDk5Olx0XG4gMTAwOlx0XHRyZXR1cm4gbmV3O1xuIDEwMTpcdH1cbiAxMDI6XHRcbiAxMDM6XHRlbnVtIHtcbiAxMDQ6XHRcdEZJQjZfTk9fU0VSTlVNX0NIQU5HRSA9IDAsXG4gMTA1Olx0fTtcbiAxMDY6XHRcbiAxMDc6XHR2b2lkIGZpYjZfdXBkYXRlX3Nlcm51bShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSlcbiAxMDg6XHR7XG4gMTA5Olx0XHRzdHJ1Y3QgZmliNl9ub2RlICpmbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9maWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc1MDpcdFx0aWYgKGl0ZXItXHUwMDNldGJsKSB7XG4yNzUxOlx0XHRcdGxvZmZfdCBwID0gMDtcbjI3NTI6XHRcbjI3NTM6XHRcdFx0aXB2Nl9yb3V0ZV9zZXFfc2V0dXBfd2FsayhpdGVyLCBuZXQpO1xuMjc1NDpcdFx0XHRyZXR1cm4gaXB2Nl9yb3V0ZV9zZXFfbmV4dChzZXEsIE5VTEwsIFx1MDAyNnApO1xuMjc1NTpcdFx0fSBlbHNlIHtcbjI3NTY6XHRcdFx0cmV0dXJuIE5VTEw7XG4yNzU3Olx0XHR9XG4yNzU4Olx0fVxuMjc1OTpcdFxuMjc2MDpcdHN0YXRpYyBib29sIGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcilcbjI3NjE6XHR7XG4yNzYyOlx0XHRzdHJ1Y3QgZmliNl93YWxrZXIgKncgPSBcdTAwMjZpdGVyLVx1MDAzZXc7XG4yNzYzOlx0XHRyZXR1cm4gdy1cdTAwM2Vub2RlIFx1MDAyNlx1MDAyNiAhbGlzdF9lbXB0eShcdTAwMjZ3LVx1MDAzZWxoKTtcbjI3NjQ6XHR9XG4yNzY1Olx0XG4yNzY2Olx0c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4yNzY3Olx0XHRfX3JlbGVhc2VzKFJDVSlcbjI3Njg6XHR7XG4yNzY5Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTtcbjI3NzA6XHRcdHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIgPSBzZXEtXHUwMDNlcHJpdmF0ZTtcbjI3NzE6XHRcbjI3NzI6XHRcdGlmIChpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKGl0ZXIpKVxuMjc3MzpcdFx0XHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCBcdTAwMjZpdGVyLVx1MDAzZXcpO1xuMjc3NDpcdFxuMjc3NTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yNzc2Olx0fVxuMjc3NzpcdFxuMjc3ODpcdCNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcbjI3Nzk6XHRzdGF0aWMgaW50IGlwdjZfcm91dGVfcHJvZ19zZXFfc2hvdyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4yNzgwOlx0XHRcdFx0XHQgICAgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXG4yNzgxOlx0XHRcdFx0XHQgICAgdm9pZCAqdilcbjI3ODI6XHR7XG4yNzgzOlx0XHRzdHJ1Y3QgYnBmX2l0ZXJfX2lwdjZfcm91dGUgY3R4O1xuMjc4NDpcdFxuMjc4NTpcdFx0Y3R4Lm1ldGEgPSBtZXRhO1xuMjc4NjpcdFx0Y3R4LnJ0ID0gdjtcbjI3ODc6XHRcdHJldHVybiBicGZfaXRlcl9ydW5fcHJvZyhwcm9nLCBcdTAwMjZjdHgpO1xuMjc4ODpcdH1cbjI3ODk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTYwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEZWVwIERpdmUgaW50byBJUHY2IFJvdXRpbmcgSXRlcmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgSVB2NiByb3V0aW5nIHRhYmxlIGl0ZXJhdGlvbiB3b3Jrcy4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgYGlwdjZfcm91dGVfaXRlcl9hY3RpdmVgLCBgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3BgLCBhbmQgYGlwdjZfcm91dGVfc2VxX3N0YXJ0YCwgYW5kIHRoZSBjYWxsZXJzIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGVtIHdpdGhpbiBgbmV0L2lwdjYvaXA2X2ZpYi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlcXVlbmNpbmcgYW5kIGxpZmVjeWNsZSBvZiB0aGVzZSBpdGVyYXRvciBmdW5jdGlvbnMuIFRoaXMgZmVlbHMgbGlrZSBpdCBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbiBpbnRvIHRoaXMgcGFydCBvZiB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBpcyBiZWluZyBpdGVyYXRlZCBvdmVyLCBob3cgaXQmIzM5O3MgYmVpbmcgYWNjZXNzZWQsIGFuZCB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciB0aGUgc3RhcnQgYW5kIHN0b3AgZXZlbnRzLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGdpdmUgbWUgaW5zaWdodHMgaW50byBob3cgdGhlIGtlcm5lbCB0cmF2ZXJzZXMgdGhlIElQdjYgcm91dGluZyB0YWJsZSBlZmZpY2llbnRseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9maWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3MDA6XHRcdFx0aXRlci1cdTAwM2V3LnNraXAgPSBpdGVyLVx1MDAzZXcuY291bnQ7XG4yNzAxOlx0XHR9XG4yNzAyOlx0fVxuMjcwMzpcdFxuMjcwNDpcdHN0YXRpYyB2b2lkICppcHY2X3JvdXRlX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcbjI3MDU6XHR7XG4yNzA2Olx0XHRpbnQgcjtcbjI3MDc6XHRcdHN0cnVjdCBmaWI2X2luZm8gKm47XG4yNzA4Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTtcbjI3MDk6XHRcdHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIgPSBzZXEtXHUwMDNlcHJpdmF0ZTtcbjI3MTA6XHRcbjI3MTE6XHRcdCYjNDM7JiM0MzsoKnBvcyk7XG4yNzEyOlx0XHRpZiAoIXYpXG4yNzEzOlx0XHRcdGdvdG8gaXRlcl90YWJsZTtcbjI3MTQ6XHRcbjI3MTU6XHRcdG4gPSByY3VfZGVyZWZlcmVuY2UoKChzdHJ1Y3QgZmliNl9pbmZvICopdiktXHUwMDNlZmliNl9uZXh0KTtcbjI3MTY6XHRcdGlmIChuKVxuMjcxNzpcdFx0XHRyZXR1cm4gbjtcbjI3MTg6XHRcbjI3MTk6XHRpdGVyX3RhYmxlOlxuMjcyMDpcdFx0aXB2Nl9yb3V0ZV9jaGVja19zZXJudW0oaXRlcik7XG4yNzIxOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aXRlci1cdTAwM2V0YmwtXHUwMDNldGI2X2xvY2spO1xuMjcyMjpcdFx0ciA9IGZpYjZfd2Fsa19jb250aW51ZShcdTAwMjZpdGVyLVx1MDAzZXcpO1xuMjcyMzpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aXRlci1cdTAwM2V0YmwtXHUwMDNldGI2X2xvY2spO1xuMjcyNDpcdFx0aWYgKHIgXHUwMDNlIDApIHtcbjI3MjU6XHRcdFx0cmV0dXJuIGl0ZXItXHUwMDNldy5sZWFmO1xuMjcyNjpcdFx0fSBlbHNlIGlmIChyIFx1MDAzYyAwKSB7XG4yNzI3Olx0XHRcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIFx1MDAyNml0ZXItXHUwMDNldyk7XG4yNzI4Olx0XHRcdHJldHVybiBOVUxMO1xuMjcyOTpcdFx0fVxuMjczMDpcdFx0ZmliNl93YWxrZXJfdW5saW5rKG5ldCwgXHUwMDI2aXRlci1cdTAwM2V3KTtcbjI3MzE6XHRcbjI3MzI6XHRcdGl0ZXItXHUwMDNldGJsID0gaXB2Nl9yb3V0ZV9zZXFfbmV4dF90YWJsZShpdGVyLVx1MDAzZXRibCwgbmV0KTtcbjI3MzM6XHRcdGlmICghaXRlci1cdTAwM2V0YmwpXG4yNzM0Olx0XHRcdHJldHVybiBOVUxMO1xuMjczNTpcdFxuMjczNjpcdFx0aXB2Nl9yb3V0ZV9zZXFfc2V0dXBfd2FsayhpdGVyLCBuZXQpO1xuMjczNzpcdFx0Z290byBpdGVyX3RhYmxlO1xuMjczODpcdH1cbjI3Mzk6XHRcbjI3NDA6XHRzdGF0aWMgdm9pZCAqaXB2Nl9yb3V0ZV9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxuMjc0MTpcdFx0X19hY3F1aXJlcyhSQ1UpXG4yNzQyOlx0e1xuMjc0MzpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7XG4yNzQ0Olx0XHRzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyID0gc2VxLVx1MDAzZXByaXZhdGU7XG4yNzQ1Olx0XG4yNzQ2Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yNzQ3Olx0XHRpdGVyLVx1MDAzZXRibCA9IGlwdjZfcm91dGVfc2VxX25leHRfdGFibGUoTlVMTCwgbmV0KTtcbjI3NDg6XHRcdGl0ZXItXHUwMDNlc2tpcCA9ICpwb3M7XG4yNzQ5Olx0XG4yNzUwOlx0XHRpZiAoaXRlci1cdTAwM2V0YmwpIHtcbjI3NTE6XHRcdFx0bG9mZl90IHAgPSAwO1xuMjc1MjpcdFxuMjc1MzpcdFx0XHRpcHY2X3JvdXRlX3NlcV9zZXR1cF93YWxrKGl0ZXIsIG5ldCk7XG4yNzU0Olx0XHRcdHJldHVybiBpcHY2X3JvdXRlX3NlcV9uZXh0KHNlcSwgTlVMTCwgXHUwMDI2cCk7XG4yNzU1Olx0XHR9IGVsc2Uge1xuMjc1NjpcdFx0XHRyZXR1cm4gTlVMTDtcbjI3NTc6XHRcdH1cbjI3NTg6XHR9XG4yNzU5Olx0XG4yNzYwOlx0c3RhdGljIGJvb2wgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZShzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyKVxuMjc2MTpcdHtcbjI3NjI6XHRcdHN0cnVjdCBmaWI2X3dhbGtlciAqdyA9IFx1MDAyNml0ZXItXHUwMDNldztcbjI3NjM6XHRcdHJldHVybiB3LVx1MDAzZW5vZGUgXHUwMDI2XHUwMDI2ICFsaXN0X2VtcHR5KFx1MDAyNnctXHUwMDNlbGgpO1xuMjc2NDpcdH1cbjI3NjU6XHRcbjI3NjY6XHRzdGF0aWMgdm9pZCBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbjI3Njc6XHRcdF9fcmVsZWFzZXMoUkNVKVxuMjc2ODpcdHtcbjI3Njk6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpO1xuMjc3MDpcdFx0c3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlciA9IHNlcS1cdTAwM2Vwcml2YXRlO1xuMjc3MTpcdFxuMjc3MjpcdFx0aWYgKGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoaXRlcikpXG4yNzczOlx0XHRcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIFx1MDAyNml0ZXItXHUwMDNldyk7XG4yNzc0Olx0XG4yNzc1Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjI3NzY6XHR9XG4yNzc3Olx0XG4yNzc4Olx0I2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxuMjc3OTpcdHN0YXRpYyBpbnQgaXB2Nl9yb3V0ZV9wcm9nX3NlcV9zaG93KHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbjI3ODA6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcbjI3ODE6XHRcdFx0XHRcdCAgICB2b2lkICp2KVxuMjc4MjpcdHtcbjI3ODM6XHRcdHN0cnVjdCBicGZfaXRlcl9faXB2Nl9yb3V0ZSBjdHg7XG4yNzg0Olx0XG4yNzg1Olx0XHRjdHgubWV0YSA9IG1ldGE7XG4yNzg2Olx0XHRjdHgucnQgPSB2O1xuMjc4NzpcdFx0cmV0dXJuIGJwZl9pdGVyX3J1bl9wcm9nKHByb2csIFx1MDAyNmN0eCk7XG4yNzg4Olx0fVxuMjc4OTpcdFxuMjc5MDpcdHN0YXRpYyBpbnQgaXB2Nl9yb3V0ZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbjI3OTE6XHR7XG4yNzkyOlx0XHRzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyID0gc2VxLVx1MDAzZXByaXZhdGU7XG4yNzkzOlx0XHRzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSBtZXRhO1xuMjc5NDpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuMjc5NTpcdFx0aW50IHJldDtcbjI3OTY6XHRcbjI3OTc6XHRcdG1ldGEuc2VxID0gc2VxO1xuMjc5ODpcdFx0cHJvZyA9IGJwZl9pdGVyX2dldF9pbmZvKFx1MDAyNm1ldGEsIGZhbHNlKTtcbjI3OTk6XHRcdGlmICghcHJvZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzE1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBJUHY2IHJvdXRpbmcgc2l0dWF0aW9uLgoKKipJbnZlc3RpZ2F0aW5nIElQdjYgUm91dGUgSXRlcmF0aW9uKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgYGlwdjZfcm91dGVfaXRlcl9hY3RpdmVgIGFuZCBhbnkgcmVsYXRlZCBmdW5jdGlvbnMuIExldCYjMzk7cyBzZWUgaG93IGV4dGVuc2l2ZWx5IHRoZXNlIGl0ZXJhdG9yIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aXRoaW4gdGhlIGNvZGViYXNlLiBNeSBwbGFuIGlzIHRvIGxldmVyYWdlIGBncmVwYCB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCBvY2N1cnJlbmNlcyBvZiBgaXB2Nl9yb3V0ZV9pdGVyYCBhbmQsIGNydWNpYWxseSwgYGZpYjZfd2Fsa2VyYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgcGljdHVyZSBvZiB3aGVyZSB0aGVzZSB0b29scyBhcmUgZW1wbG95ZWQuIFRoaXMgd2lsbCBoZWxwIHRvIGRldGVybWluZSBhbnkgaW50ZXItZGVwZW5kZW5jaWVzIHdpdGggb3RoZXIgcm91dGUgcmVsYXRlZCBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZmliLmM9Mjc0MD1zdGF0aWMgdm9pZCAqaXB2Nl9yb3V0ZV9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yNzU5LVxubmV0L2lwdjYvaXA2X2ZpYi5jOjI3NjA6c3RhdGljIGJvb2wgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZShzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyKVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NjEte1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yNzY2PXN0YXRpYyB2b2lkIGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yNzcxLVxubmV0L2lwdjYvaXA2X2ZpYi5jOjI3NzI6XHRpZiAoaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZShpdGVyKSlcbm5ldC9pcHY2L2lwNl9maWIuYy0yNzczLVx0XHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCBcdTAwMjZpdGVyLVx1MDAzZXcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzcwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgaXB2Nl9yb3V0ZV9zZXFfc2V0dXBfd2Fsa2AgYW5kIGBpdGVyLSZndDt3YCBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBpcHY2X3JvdXRlX3NlcV9zZXR1cF93YWxrYCBmdW5jdGlvbiB3b3JrcyBhbmQsIHNwZWNpZmljYWxseSwgaG93IHRoZSBgaXRlci0mZ3Q7d2AgbWVtYmVyIGlzIHNldCB1cC4gVGhpcyBsaWtlbHkgaGFzIGltcGxpY2F0aW9ucyBmb3Igc2VxdWVuY2UgbnVtYmVyIGhhbmRsaW5nLCByb3V0ZSB0cmF2ZXJzYWwsIG9yIHBvdGVudGlhbGx5IGV2ZW4gbG9ja2luZy9zeW5jaHJvbml6YXRpb24gd2l0aGluIHRoZSBJUHY2IHJvdXRpbmcgY29udGV4dC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRvIHBpbnBvaW50IHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgZnVuY3Rpb24gYW5kIHRyYWNlIGJhY2sgd2hlcmUgdGhlIGBpdGVyLSZndDt3YCBtZW1iZXIgb2Ygd2hhdGV2ZXIgdGhlIGBpdGVyYCBzdHJ1Y3QgaXMsIGdldHMgaXRzIGluaXRpYWwgdmFsdWUuCgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBpbiB0aGUgc3Vycm91bmRpbmcgY29kZS4gSXMgYGl0ZXItJmd0O3dgIGEgc2ltcGxlIGNvdW50ZXI/IERvZXMgaXQgcmVwcmVzZW50IGFuIG9mZnNldCBpbnRvIGEgZGF0YSBzdHJ1Y3R1cmU/IElzIHRoZXJlIGEgcG9pbnRlciBpbnZvbHZlZD8gVGhlIGluaXRpYWxpemF0aW9uIHdpbGwgcHJvdmlkZSBjcml0aWNhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHVycG9zZSBvZiBgaXRlci0mZ3Q7d2Agd2l0aGluIHRoaXMgcHJvY2Vzcy4gQnkgZXhhbWluaW5nIHRoaXMsIEkgY2FuIHN0YXJ0IHRvIGJ1aWxkIGEgY2xlYXIgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGUgc3lzdGVtIGlzIGRlc2lnbmVkIHRvIHdvcmsuIFRoaXMgZm91bmRhdGlvbmFsIGtub3dsZWRnZSB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb2RlJiMzOTtzIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9maWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjY2MDpcdFx0aXRlci1cdTAwM2V3LmZ1bmMgPSBpcHY2X3JvdXRlX3lpZWxkO1xuMjY2MTpcdFx0aXRlci1cdTAwM2V3LnJvb3QgPSBcdTAwMjZpdGVyLVx1MDAzZXRibC1cdTAwM2V0YjZfcm9vdDtcbjI2NjI6XHRcdGl0ZXItXHUwMDNldy5zdGF0ZSA9IEZXU19JTklUO1xuMjY2MzpcdFx0aXRlci1cdTAwM2V3Lm5vZGUgPSBpdGVyLVx1MDAzZXcucm9vdDtcbjI2NjQ6XHRcdGl0ZXItXHUwMDNldy5hcmdzID0gaXRlcjtcbjI2NjU6XHRcdGl0ZXItXHUwMDNlc2VybnVtID0gUkVBRF9PTkNFKGl0ZXItXHUwMDNldy5yb290LVx1MDAzZWZuX3Nlcm51bSk7XG4yNjY2Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZpdGVyLVx1MDAzZXcubGgpO1xuMjY2NzpcdFx0ZmliNl93YWxrZXJfbGluayhuZXQsIFx1MDAyNml0ZXItXHUwMDNldyk7XG4yNjY4Olx0fVxuMjY2OTpcdFxuMjY3MDpcdHN0YXRpYyBzdHJ1Y3QgZmliNl90YWJsZSAqaXB2Nl9yb3V0ZV9zZXFfbmV4dF90YWJsZShzdHJ1Y3QgZmliNl90YWJsZSAqdGJsLFxuMjY3MTpcdFx0XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0ICpuZXQpXG4yNjcyOlx0e1xuMjY3MzpcdFx0dW5zaWduZWQgaW50IGg7XG4yNjc0Olx0XHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTtcbjI2NzU6XHRcbjI2NzY6XHRcdGlmICh0YmwpIHtcbjI2Nzc6XHRcdFx0aCA9ICh0YmwtXHUwMDNldGI2X2lkIFx1MDAyNiAoRklCNl9UQUJMRV9IQVNIU1ogLSAxKSkgJiM0MzsgMTtcbjI2Nzg6XHRcdFx0bm9kZSA9IHJjdV9kZXJlZmVyZW5jZShobGlzdF9uZXh0X3JjdShcdTAwMjZ0YmwtXHUwMDNldGI2X2hsaXN0KSk7XG4yNjc5Olx0XHR9IGVsc2Uge1xuMjY4MDpcdFx0XHRoID0gMDtcbjI2ODE6XHRcdFx0bm9kZSA9IE5VTEw7XG4yNjgyOlx0XHR9XG4yNjgzOlx0XG4yNjg0Olx0XHR3aGlsZSAoIW5vZGUgXHUwMDI2XHUwMDI2IGggXHUwMDNjIEZJQjZfVEFCTEVfSEFTSFNaKSB7XG4yNjg1Olx0XHRcdG5vZGUgPSByY3VfZGVyZWZlcmVuY2UoXG4yNjg2Olx0XHRcdFx0aGxpc3RfZmlyc3RfcmN1KFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYl90YWJsZV9oYXNoW2gmIzQzOyYjNDM7XSkpO1xuMjY4NzpcdFx0fVxuMjY4ODpcdFx0cmV0dXJuIGhsaXN0X2VudHJ5X3NhZmUobm9kZSwgc3RydWN0IGZpYjZfdGFibGUsIHRiNl9obGlzdCk7XG4yNjg5Olx0fVxuMjY5MDpcdFxuMjY5MTpcdHN0YXRpYyB2b2lkIGlwdjZfcm91dGVfY2hlY2tfc2VybnVtKHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIpXG4yNjkyOlx0e1xuMjY5MzpcdFx0aW50IHNlcm51bSA9IFJFQURfT05DRShpdGVyLVx1MDAzZXcucm9vdC1cdTAwM2Vmbl9zZXJudW0pO1xuMjY5NDpcdFxuMjY5NTpcdFx0aWYgKGl0ZXItXHUwMDNlc2VybnVtICE9IHNlcm51bSkge1xuMjY5NjpcdFx0XHRpdGVyLVx1MDAzZXNlcm51bSA9IHNlcm51bTtcbjI2OTc6XHRcdFx0aXRlci1cdTAwM2V3LnN0YXRlID0gRldTX0lOSVQ7XG4yNjk4Olx0XHRcdGl0ZXItXHUwMDNldy5ub2RlID0gaXRlci1cdTAwM2V3LnJvb3Q7XG4yNjk5Olx0XHRcdFdBUk5fT04oaXRlci1cdTAwM2V3LnNraXApO1xuMjcwMDpcdFx0XHRpdGVyLVx1MDAzZXcuc2tpcCA9IGl0ZXItXHUwMDNldy5jb3VudDtcbjI3MDE6XHRcdH1cbjI3MDI6XHR9XG4yNzAzOlx0XG4yNzA0Olx0c3RhdGljIHZvaWQgKmlwdjZfcm91dGVfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODQ5CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqRGlnZ2luZyBEZWVwZXIgaW50byBgZmliNl93YWxrZXJgIEludGVyYWN0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBgZmliNl93YWxrZXJfdW5saW5rYCBhbmQgYGZpYjZfd2Fsa2VyX2xpbmtgIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyB3aGVyZSBlbHNlIHRoZXkgYXJlIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgYGlwNl9maWIuY2AgZmlsZSBvciBpbmRlZWQgYW55d2hlcmUgZWxzZSBpbiB0aGUgY29kZSBiYXNlLiBNeSBnb2FsIGlzIHRvIG1hcCBvdXQgZXZlcnkgc2luZ2xlIGluc3RhbmNlIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFyb3VuZCBlYWNoIHVzZS4gS25vd2luZyB0aGUgY2FsbCBncmFwaCB3aWxsIGhlbHAgbWUgYW50aWNpcGF0ZSBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBvciBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGFuZCBvcHRpbWl6YXRpb24uIEEgdGhvcm91Z2ggaW52ZXN0aWdhdGlvbiBpcyB0aGUgb25seSB3YXkgdG8gZW5zdXJlIEkgZnVsbHkgdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBjYW4gbWFrZSBjaGFuZ2VzIHdpdGggY29uZmlkZW5jZS4gSSBoYXZlIHRvIGxvb2sgYmV5b25kIGp1c3QgdGhlIGltbWVkaWF0ZSBzY29wZSBhbmQgY29uc2lkZXIgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgYW5hbHl6aW5nIGFuZCBlbnN1cmluZyBzdGFiaWxpdHkgZm9yIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWI2X3dhbGtlcl8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7LmNsYW5nLWZvcm1hdD03MT1Gb3JFYWNoTWFjcm9zOlxuLS1cbi5jbGFuZy1mb3JtYXQtMjk1LSAgLSAmIzM5O2Zvcl9lYWNoX2ZpYjZfbm9kZV9ydF9yY3UmIzM5O1xuLmNsYW5nLWZvcm1hdDoyOTY6ICAtICYjMzk7Zm9yX2VhY2hfZmliNl93YWxrZXJfcnQmIzM5O1xuLmNsYW5nLWZvcm1hdC0yOTctICAtICYjMzk7Zm9yX2VhY2hfZmlsZV9sb2NrJiMzOTtcbi0tXG5pbmNsdWRlL25ldC9pcDZfZmliLmg9MjIyPXN0cnVjdCBmaWI2X3Jlc3VsdCB7XG4tLVxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTIzMy1cbmluY2x1ZGUvbmV0L2lwNl9maWIuaDoyMzQ6I2RlZmluZSBmb3JfZWFjaF9maWI2X3dhbGtlcl9ydCh3KVx0XHRcdFx0XHRcXFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTIzNS1cdGZvciAocnQgPSAodyktXHUwMDNlbGVhZjsgcnQ7XHRcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS9uZXQvbmV0bnMvaXB2Ni5oPTY2PXN0cnVjdCBuZXRuc19pcHY2IHtcbi0tXG5pbmNsdWRlL25ldC9uZXRucy9pcHY2LmgtODItXHRzdHJ1Y3QgbGlzdF9oZWFkXHRmaWI2X3dhbGtlcnM7XG5pbmNsdWRlL25ldC9uZXRucy9pcHY2Lmg6ODM6XHRyd2xvY2tfdFx0XHRmaWI2X3dhbGtlcl9sb2NrO1xuaW5jbHVkZS9uZXQvbmV0bnMvaXB2Ni5oLTg0LVx0c3BpbmxvY2tfdFx0XHRmaWI2X2djX2xvY2s7XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTczPXN0YXRpYyB2b2lkIGZpYjZfZ2NfdGltZXJfY2Ioc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy03Ny1cbm5ldC9pcHY2L2lwNl9maWIuYzo3ODpzdGF0aWMgdm9pZCBmaWI2X3dhbGtlcl9saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxubmV0L2lwdjYvaXA2X2ZpYi5jLTc5LXtcbm5ldC9pcHY2L2lwNl9maWIuYzo4MDpcdHdyaXRlX2xvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtODEtXHRsaXN0X2FkZChcdTAwMjZ3LVx1MDAzZWxoLCBcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcnMpO1xubmV0L2lwdjYvaXA2X2ZpYi5jOjgyOlx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTgzLX1cbm5ldC9pcHY2L2lwNl9maWIuYy04NC1cbm5ldC9pcHY2L2lwNl9maWIuYzo4NTpzdGF0aWMgdm9pZCBmaWI2X3dhbGtlcl91bmxpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG5uZXQvaXB2Ni9pcDZfZmliLmMtODYte1xubmV0L2lwdjYvaXA2X2ZpYi5jOjg3Olx0d3JpdGVfbG9ja19iaChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcbm5ldC9pcHY2L2lwNl9maWIuYy04OC1cdGxpc3RfZGVsX2luaXQoXHUwMDI2dy1cdTAwM2VsaCk7XG5uZXQvaXB2Ni9pcDZfZmliLmM6ODk6XHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtOTAtfVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz01Mjg9c3RhdGljIGludCBmaWI2X2R1bXBfbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTUzMi1cbm5ldC9pcHY2L2lwNl9maWIuYzo1MzM6XHRmb3JfZWFjaF9maWI2X3dhbGtlcl9ydCh3KSB7XG5uZXQvaXB2Ni9pcDZfZmliLmMtNTM0LVx0XHRyZXMgPSBydDZfZHVtcF9yb3V0ZShydCwgdy1cdTAwM2VhcmdzLCB3LVx1MDAzZXNraXBfaW5fbm9kZSk7XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTU2Mj1zdGF0aWMgdm9pZCBmaWI2X2R1bXBfZW5kKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtNTY5LVx0XHRcdGNiLVx1MDAzZWFyZ3NbNF0gPSAwO1xubmV0L2lwdjYvaXA2X2ZpYi5jOjU3MDpcdFx0XHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCB3KTtcbm5ldC9pcHY2L2lwNl9maWIuYy01NzEtXHRcdH1cbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9NTg1PXN0YXRpYyBpbnQgZmliNl9kdW1wX3RhYmxlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtNjIyLVx0XHRpZiAocmVzIFx1MDAzYz0gMCkge1xubmV0L2lwdjYvaXA2X2ZpYi5jOjYyMzpcdFx0XHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCB3KTtcbm5ldC9pcHY2L2lwNl9maWIuYy02MjQtXHRcdFx0Y2ItXHUwMDNlYXJnc1s0XSA9IDA7XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTE4NDE9c3RhdGljIHN0cnVjdCBmaWI2X25vZGUgKmZpYjZfcmVwYWlyX3RyZWUoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0xOTMyLVxubmV0L2lwdjYvaXA2X2ZpYi5jOjE5MzM6XHRcdHJlYWRfbG9jayhcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcbm5ldC9pcHY2L2lwNl9maWIuYy0xOTM0LVx0XHRGT1JfV0FMS0VSUyhuZXQsIHcpIHtcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMTk1Ni1cdFx0fVxubmV0L2lwdjYvaXA2X2ZpYi5jOjE5NTc6XHRcdHJlYWRfdW5sb2NrKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTE5NTgtXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTE5Njk9c3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjAyNS1cdC8qIEFkanVzdCB3YWxrZXJzICovXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjAyNjpcdHJlYWRfbG9jayhcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yMDI3LVx0Rk9SX1dBTEtFUlMobmV0LCB3KSB7XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwMzUtXHR9XG5uZXQvaXB2Ni9pcDZfZmliLmM6MjAzNjpcdHJlYWRfdW5sb2NrKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTIwMzctXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTIyMjA9c3RhdGljIGludCBmaWI2X3dhbGsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTIyMjYtXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjIyNzpcdGZpYjZfd2Fsa2VyX2xpbmsobmV0LCB3KTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjI4LVx0cmVzID0gZmliNl93YWxrX2NvbnRpbnVlKHcpO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTIyMjktXHRpZiAocmVzIFx1MDAzYz0gMClcbm5ldC9pcHY2L2lwNl9maWIuYzoyMjMwOlx0XHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCB3KTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjMxLVx0cmV0dXJuIHJlcztcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjIzND1zdGF0aWMgaW50IGZpYjZfY2xlYW5fbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTIyNTMtXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjI1NDpcdGZvcl9lYWNoX2ZpYjZfd2Fsa2VyX3J0KHcpIHtcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjU1LVx0XHRyZXMgPSBjLVx1MDAzZWZ1bmMocnQsIGMtXHUwMDNlYXJnKTtcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjQ2ND1zdGF0aWMgaW50IF9fbmV0X2luaXQgZmliNl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI0NzctXHRzcGluX2xvY2tfaW5pdChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X2djX2xvY2spO1xubmV0L2lwdjYvaXA2X2ZpYi5jOjI0Nzg6XHRyd2xvY2tfaW5pdChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yNDc5LVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl93YWxrZXJzKTtcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjY1Nj1zdGF0aWMgdm9pZCBpcHY2X3JvdXRlX3NlcV9zZXR1cF93YWxrKHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIsXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI2NjYtXHRJTklUX0xJU1RfSEVBRChcdTAwMjZpdGVyLVx1MDAzZXcubGgpO1xubmV0L2lwdjYvaXA2X2ZpYi5jOjI2Njc6XHRmaWI2X3dhbGtlcl9saW5rKG5ldCwgXHUwMDI2aXRlci1cdTAwM2V3KTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yNjY4LX1cbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjcwND1zdGF0aWMgdm9pZCAqaXB2Nl9yb3V0ZV9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3MjYtXHR9IGVsc2UgaWYgKHIgXHUwMDNjIDApIHtcbm5ldC9pcHY2L2lwNl9maWIuYzoyNzI3Olx0XHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCBcdTAwMjZpdGVyLVx1MDAzZXcpO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTI3MjgtXHRcdHJldHVybiBOVUxMO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTI3MjktXHR9XG5uZXQvaXB2Ni9pcDZfZmliLmM6MjczMDpcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIFx1MDAyNml0ZXItXHUwMDNldyk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjczMS1cbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9Mjc2Nj1zdGF0aWMgdm9pZCBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc3Mi1cdGlmIChpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKGl0ZXIpKVxubmV0L2lwdjYvaXA2X2ZpYi5jOjI3NzM6XHRcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIFx1MDAyNml0ZXItXHUwMDNldyk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc3NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MzYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUHY2IEZJQiBXYWxrZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgSVB2NiBGSUIgd2Fsa2VyIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9pcHY2L2lwNl9maWIuY2AuIExldCYjMzk7cyBicmVhayBkb3duIHRoZSBrZXkgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSBgZmliNl93YWxrZXJfdW5saW5rKClgIGhhcyBzd2l0Y2hlZCBmcm9tIGEgc2ltcGxlIGBsaXN0X2RlbCgpYCB0byBgbGlzdF9kZWxfaW5pdCgpYCBvbiB0aGUgd2Fsa2VyJiMzOTtzIGxpc3QgaGVhZCwgYHctJmd0O2xoYC4gVGhhdCYjMzk7cyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlIGluIGhvdyB0aGUgbGlzdCBpcyBoYW5kbGVkIGFmdGVyIHJlbW92YWwuIEkgd29uZGVyIGlmIHRoZXJlIHdlcmUgc29tZSBpc3N1ZXMgd2l0aCBkYW5nbGluZyBwb2ludGVycyBvciByZXVzZSBjb25jZXJucyBiZWluZyBhZGRyZXNzZWQgdGhlcmUuCgpUaGUgb3RoZXIgbWFqb3IgbW9kaWZpY2F0aW9uIGNvbmNlcm5zIGBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKClgLiBJdCYjMzk7cyBjaGFuZ2VkIHRoZSBjb25kaXRpb24gZm9yIGRldGVybWluaW5nIGFuICYjMzQ7YWN0aXZlJiMzNDsgd2Fsa2VyLiBQcmV2aW91c2x5IGl0IGNoZWNrZWQgYHctJmd0O25vZGUgJmFtcDsmYW1wOyAhKHctJmd0O3N0YXRlID09IEZXU19VICZhbXA7JmFtcDsgdy0mZ3Q7bm9kZSA9PSB3LSZndDtyb290KWAsIGJ1dCBub3cgaXQmIzM5O3MgY2hlY2tpbmcgYHctJmd0O25vZGUgJmFtcDsmYW1wOyAhbGlzdF9lbXB0eSgmYW1wO3ctJmd0O2xoKWAuIFRoZSBvbGQgY29uZGl0aW9uIGxvb2tzIGxpa2UgaXQgd2FzIGF0dGVtcHRpbmcgdG8gZXhjbHVkZSBzb21lIHdhbGtlcnMgaW4gYSAmIzM5O3Vuc3RhYmxlJiMzOTsgc3RhdGUgYnV0IG5vdyB0aGUgbmV3IGNvbmRpdGlvbiBzaW1wbHkgY2hlY2tzIHRoYXQgdGhlIHdhbGtlciBpcyBsaW5rZWQgdG8gdGhlIGxpc3QuIFRoaXMgY291bGQgaW1wcm92ZSBwZXJmb3JtYW5jZSwgb3IgY291bGQgaGF2ZSBiZWVuIGNoYW5nZWQgZm9yIG90aGVyIHJlYXNvbnMuCgpOb3csIGxldCYjMzk7cyBzZWUgaG93IHRoZXNlIGNoYW5nZXMgbWlnaHQgaW1wYWN0IHRoZSB2aXNpYmlsaXR5IG9mIElQdjYgcm91dGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugd2Fsa2VycyBhcmUgdXNlZCBieSB0aGUgc3lzdGVtLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIGhvdyBJUHY2IHJvdXRlcyBhcmUgcmVhZCB2aWEgL3Byb2MvbmV0L2lwdjZfcm91dGUsIG9yIGhvdyBCUEYgaXRlcmF0b3JzLCBvciBOZXRsaW5rIGludGVyZmFjZSB3aXRoIGBpcCByb3V0ZSBzaG93YCBvciBzaW1pbGFyIGNvbW1hbmRzIGFyZSBpbXBsZW1lbnRlZC4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgd2hlcmUgdGhlIHJvdXRlIGluZm9ybWF0aW9uIGlzIGV4cG9zZWQgdGhyb3VnaCB0aG9zZSBtZWNoYW5pc21zLiBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb2RlIGluIGBuZXQvaXB2Ni9pcDZfZmliLmNgIHdoZXJlIGZ1bmN0aW9ucyBsaWtlIGBpcHY2X3JvdXRlX3NlcV9vcHNgIG9yIHNpbWlsYXIsIHRoYXQgaGFuZGxlIHRoZSBkYXRhIGFjY2VzcywgYXJlIGRlZmluZWQuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJlIGFibGUgdG8gdHJhY2UgaG93IHRoZXNlIHdhbGtlciBtb2RpZmljYXRpb25zIGRpcmVjdGx5IGltcGFjdCB0aGUgcmV0cmlldmFsIGFuZCBwcmVzZW50YXRpb24gb2YgdGhlIHJvdXRpbmcgZGF0YS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2ZpYi5jPTI3NjA9c3RhdGljIGJvb2wgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZShzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyKVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yNzY1LVxubmV0L2lwdjYvaXA2X2ZpYi5jOjI3NjY6c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc2Ny1cdF9fcmVsZWFzZXMoUkNVKVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yODA4PXN0YXRpYyB2b2lkIGlwdjZfcm91dGVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI4MTktXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjgyMDpcdGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wKHNlcSwgdik7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjgyMS19XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTI4Mjg9c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbm5ldC9pcHY2L2lwNl9maWIuYy0yODI5LXtcbm5ldC9pcHY2L2lwNl9maWIuYzoyODMwOlx0aXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc2VxLCB2KTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yODMxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1MjgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQdjYgUm91dGUgU2VxdWVuY2UgRmlsZSBTdG9wIE9wZXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBgaXB2Nl9yb3V0ZV9zZXFfc3RvcGAuIFJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBzdG9wIG9wZXJhdGlvbiBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgL3Byb2MvbmV0L2lwdjZfcm91dGVgIGZpbGUsIGFuZCBpbXBvcnRhbnRseSwgdGhlIEJQRiByb3V0ZSBpdGVyYXRvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IGNsZWFucyB1cCBhZnRlciBhIHNlcXVlbmNlIGZpbGUgaXRlcmF0aW9uIG9yIEJQRiBwcm9ncmFtIGludGVyYWN0aW9uIHdpdGggdGhlIElQdjYgcm91dGluZyB0YWJsZS4gVG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLCBJIHNob3VsZCBwcm9iYWJseSB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlLiBMaW5lcyAyODAwIHRocm91Z2ggMjg2MCBvZiBgbmV0L2lwdjYvaXA2X2ZpYi5jYCBzZWVtIGxpa2UgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIFRoYXQgc2VjdGlvbiBsaWtlbHkgY29udGFpbnMgdGhlIGNvcmUgbG9naWMgZm9yIHRoaXMgc3RvcCBmdW5jdGlvbiBhbmQgd2lsbCBnaXZlIG1lIHRoZSBpbnNpZ2h0cyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBzZWUgaG93IGl0IHJlbGVhc2VzIHJlc291cmNlcywgaGFuZGxlcyBhbnkgbG9ja3MsIGFuZCBlbnN1cmVzIGEgY2xlYW4gZXhpdCBmb3IgdGhlc2Ugcm91dGUgbGlzdGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2ZpYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODAwOlx0XHRcdHJldHVybiBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc2hvdyhzZXEsIHYpO1xuMjgwMTpcdFxuMjgwMjpcdFx0cmV0ID0gaXB2Nl9yb3V0ZV9wcm9nX3NlcV9zaG93KHByb2csIFx1MDAyNm1ldGEsIHYpO1xuMjgwMzpcdFx0aXRlci1cdTAwM2V3LmxlYWYgPSBOVUxMO1xuMjgwNDpcdFxuMjgwNTpcdFx0cmV0dXJuIHJldDtcbjI4MDY6XHR9XG4yODA3Olx0XG4yODA4Olx0c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbjI4MDk6XHR7XG4yODEwOlx0XHRzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSBtZXRhO1xuMjgxMTpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuMjgxMjpcdFxuMjgxMzpcdFx0aWYgKCF2KSB7XG4yODE0Olx0XHRcdG1ldGEuc2VxID0gc2VxO1xuMjgxNTpcdFx0XHRwcm9nID0gYnBmX2l0ZXJfZ2V0X2luZm8oXHUwMDI2bWV0YSwgdHJ1ZSk7XG4yODE2Olx0XHRcdGlmIChwcm9nKVxuMjgxNzpcdFx0XHRcdCh2b2lkKWlwdjZfcm91dGVfcHJvZ19zZXFfc2hvdyhwcm9nLCBcdTAwMjZtZXRhLCB2KTtcbjI4MTg6XHRcdH1cbjI4MTk6XHRcbjI4MjA6XHRcdGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wKHNlcSwgdik7XG4yODIxOlx0fVxuMjgyMjpcdCNlbHNlXG4yODIzOlx0c3RhdGljIGludCBpcHY2X3JvdXRlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuMjgyNDpcdHtcbjI4MjU6XHRcdHJldHVybiBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc2hvdyhzZXEsIHYpO1xuMjgyNjpcdH1cbjI4Mjc6XHRcbjI4Mjg6XHRzdGF0aWMgdm9pZCBpcHY2X3JvdXRlX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuMjgyOTpcdHtcbjI4MzA6XHRcdGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wKHNlcSwgdik7XG4yODMxOlx0fVxuMjgzMjpcdCNlbmRpZlxuMjgzMzpcdFxuMjgzNDpcdGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBpcHY2X3JvdXRlX3NlcV9vcHMgPSB7XG4yODM1Olx0XHQuc3RhcnRcdD0gaXB2Nl9yb3V0ZV9zZXFfc3RhcnQsXG4yODM2Olx0XHQubmV4dFx0PSBpcHY2X3JvdXRlX3NlcV9uZXh0LFxuMjgzNzpcdFx0LnN0b3BcdD0gaXB2Nl9yb3V0ZV9zZXFfc3RvcCxcbjI4Mzg6XHRcdC5zaG93XHQ9IGlwdjZfcm91dGVfc2VxX3Nob3dcbjI4Mzk6XHR9O1xuMjg0MDpcdCNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ0OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBJUHY2IFJvdXRpbmcgVGFibGUgTWFuYWdlbWVudCBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBzb21lIGNvZGUgaW52b2x2ZWQgaW4gSVB2NiByb3V0aW5nIHRhYmxlIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggaXRlcmF0aW5nIHRocm91Z2ggYC9wcm9jL25ldC9pcHY2X3JvdXRlYC4gVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGNhbiB0aGlzIGJlIHRlc3RlZCBpbiBhIHN0YW5kYXJkIFN5emthbGxlciBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhlIGFuc3dlciBpcyBhIHNvbGlkIHllcy4gSXQgaW52b2x2ZXMgcmVhZGluZyBmcm9tIGAvcHJvYy9uZXQvaXB2Nl9yb3V0ZWAsIGFuZCB0aGVuIHBvdGVudGlhbGx5IGludGVyYWN0aW5nIHdpdGggdGhlIElQdjYgcm91dGluZyB0YWJsZSBpdHNlbGYgYnkgYWRkaW5nIG9yIGRlbGV0aW5nIHJvdXRlcyB1c2luZyBuZXRsaW5rIG9yIGlvY3RsIGNhbGxzICp3aGlsZSogdGhpcyByZWFkIGlzIG9uZ29pbmcsIG9yIHVzaW5nIEJQRiBpdGVyYXRvcnMuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gKGBuZXQvaXB2Ni9pcDZfZmliLmNgKSBhcyB0aGUgcHJpbWFyeSBhcmVhIG9mIGludGVyZXN0LgoKVGhlIGltcGxpY2F0aW9ucyBhcmUgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgbWVzc2luZyB3aXRoIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcywgc3BlY2lmaWNhbGx5IGBsaXN0X2RlbF9pbml0YCBzZW1hbnRpY3MsIGFuZCBhbHNvIHRoZSBzdGF0ZSBjaGVja3Mgd2l0aGluIHRoZSB3YWxrZXIgKGBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlYCkuIFRoZSBwcmltYXJ5IGdvYWwgdGhlcmUgaXMgY2xlYXI6IHRvIHByZXZlbnQgZGF0YSBjb3JydXB0aW9uIG9yIGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIHRoZSB3YWxrZXIgYW5kIHRoZSByb3V0aW5nIHRhYmxlIHdoZW4gcm91dGVzIGFyZSBiZWluZyBhZGRlZCBvciBkZWxldGVkIGNvbmN1cnJlbnRseS4gVGhpcyBpcyBhIGNsYXNzaWMgY29uY3VycmVuY3kgcHJvYmxlbS4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIsIGxldCYjMzk7cyBuYWlsIGRvd24gYW55IHByZXJlcXVpc2l0ZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiAgSSBhbHJlYWR5IGtub3cgdGhhdCBgQ09ORklHX0lQVjZgIGlzIHByb2JhYmx5IHJlcXVpcmVkLCBidXQgbGV0JiMzOTtzIGJlIHN1cmUuIExldCBtZSBzZWUuLi4gd2hlcmUgZG9lcyBgaXA2X2ZpYi5jYCBnZXQgY29tcGlsZWQ/IEEgcXVpY2sgY2hlY2sgb2YgYG5ldC9pcHY2L01ha2VmaWxlYCBzaG91bGQgY29uZmlybSBteSBzdXNwaWNpb25zIGFuZCBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X2ZpYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZT04PWlwdjYteSA6PVx0YWZfaW5ldDYubyBhbnljYXN0Lm8gaXA2X291dHB1dC5vIGlwNl9pbnB1dC5vIGFkZHJjb25mLm8gXFxcbm5ldC9pcHY2L01ha2VmaWxlLTktXHRcdGFkZHJsYWJlbC5vIFxcXG5uZXQvaXB2Ni9NYWtlZmlsZToxMDpcdFx0cm91dGUubyBpcDZfZmliLm8gaXB2Nl9zb2NrZ2x1ZS5vIG5kaXNjLm8gdWRwLm8gXFxcbm5ldC9pcHY2L01ha2VmaWxlLTExLVx0XHRyYXcubyBpY21wLm8gbWNhc3QubyByZWFzc2VtYmx5Lm8gdGNwX2lwdjYubyBwaW5nLm8gXFxcbi0tXG5uZXQvaXB2Ni9maWI2X25vdGlmaWVyLmMtOC0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bnMvaXB2Ni5oXHUwMDNlXG5uZXQvaXB2Ni9maWI2X25vdGlmaWVyLmM6OTojaW5jbHVkZSBcdTAwM2NuZXQvaXA2X2ZpYi5oXHUwMDNlXG5uZXQvaXB2Ni9maWI2X25vdGlmaWVyLmMtMTAtXG4tLVxubmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYy0xMC0jaW5jbHVkZSBcdTAwM2NuZXQvaXAuaFx1MDAzZVxubmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYzoxMTojaW5jbHVkZSBcdTAwM2NuZXQvaXA2X2ZpYi5oXHUwMDNlXG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jLTEyLSNpbmNsdWRlIFx1MDAzY25ldC9sd3R1bm5lbC5oXHUwMDNlXG4tLVxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0xMS0jaW5jbHVkZSBcdTAwM2NuZXQvaXAuaFx1MDAzZVxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYzoxMjojaW5jbHVkZSBcdTAwM2NuZXQvaXA2X2ZpYi5oXHUwMDNlXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTEzLSNpbmNsdWRlIFx1MDAzY25ldC9pcDZfcm91dGUuaFx1MDAzZVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0zNi0jaW5jbHVkZSBcdTAwM2NuZXQvaXBfZmliLmhcdTAwM2Vcbm5ldC9pcHY2L2lwNl9maWIuYzozNzojaW5jbHVkZSBcdTAwM2NuZXQvaXA2X2ZpYi5oXHUwMDNlXG5uZXQvaXB2Ni9pcDZfZmliLmMtMzgtI2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9yb3V0ZS5oXHUwMDNlXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTEzODI9c3RhdGljIHZvaWQgZmliNl9zdGFydF9nYyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0KVxubmV0L2lwdjYvaXA2X2ZpYi5jLTEzODMte1xubmV0L2lwdjYvaXA2X2ZpYi5jOjEzODQ6XHRpZiAoIXRpbWVyX3BlbmRpbmcoXHUwMDI2bmV0LVx1MDAzZWlwdjYuaXA2X2ZpYl90aW1lcikgXHUwMDI2XHUwMDI2XG5uZXQvaXB2Ni9pcDZfZmliLmMtMTM4NS1cdCAgICAocnQtXHUwMDNlZmliNl9mbGFncyBcdTAwMjYgUlRGX0VYUElSRVMpKVxubmV0L2lwdjYvaXA2X2ZpYi5jOjEzODY6XHRcdG1vZF90aW1lcihcdTAwMjZuZXQtXHUwMDNlaXB2Ni5pcDZfZmliX3RpbWVyLFxubmV0L2lwdjYvaXA2X2ZpYi5jLTEzODctXHRcdFx0ICBqaWZmaWVzICYjNDM7IFJFQURfT05DRShuZXQtXHUwMDNlaXB2Ni5zeXNjdGwuaXA2X3J0X2djX2ludGVydmFsKSk7XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTEzOTA9dm9pZCBmaWI2X2ZvcmNlX3N0YXJ0X2djKHN0cnVjdCBuZXQgKm5ldClcbm5ldC9pcHY2L2lwNl9maWIuYy0xMzkxLXtcbm5ldC9pcHY2L2lwNl9maWIuYzoxMzkyOlx0aWYgKCF0aW1lcl9wZW5kaW5nKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmlwNl9maWJfdGltZXIpKVxubmV0L2lwdjYvaXA2X2ZpYi5jOjEzOTM6XHRcdG1vZF90aW1lcihcdTAwMjZuZXQtXHUwMDNlaXB2Ni5pcDZfZmliX3RpbWVyLFxubmV0L2lwdjYvaXA2X2ZpYi5jLTEzOTQtXHRcdFx0ICBqaWZmaWVzICYjNDM7IFJFQURfT05DRShuZXQtXHUwMDNlaXB2Ni5zeXNjdGwuaXA2X3J0X2djX2ludGVydmFsKSk7XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTI0Mjk9dm9pZCBmaWI2X3J1bl9nYyh1bnNpZ25lZCBsb25nIGV4cGlyZXMsIHN0cnVjdCBuZXQgKm5ldCwgYm9vbCBmb3JjZSlcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQzNy1cdH0gZWxzZSBpZiAoIXNwaW5fdHJ5bG9ja19iaChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X2djX2xvY2spKSB7XG5uZXQvaXB2Ni9pcDZfZmliLmM6MjQzODpcdFx0bW9kX3RpbWVyKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmlwNl9maWJfdGltZXIsIGppZmZpZXMgJiM0MzsgSFopO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTI0MzktXHRcdHJldHVybjtcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQ0OS1cdGlmIChnY19hcmdzLm1vcmUpXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjQ1MDpcdFx0bW9kX3RpbWVyKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmlwNl9maWJfdGltZXIsXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQ1MS1cdFx0XHQgIHJvdW5kX2ppZmZpZXMobm93ICYjNDM7IGlwNl9ydF9nY19pbnRlcnZhbCkpO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTI0NTItXHRlbHNlXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjQ1MzpcdFx0dGltZXJfZGVsZXRlKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmlwNl9maWJfdGltZXIpO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTI0NTQtXHRzcGluX3VubG9ja19iaChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X2djX2xvY2spO1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yNDU3PXN0YXRpYyB2b2lkIGZpYjZfZ2NfdGltZXJfY2Ioc3RydWN0IHRpbWVyX2xpc3QgKnQpXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQ1OC17XG5uZXQvaXB2Ni9pcDZfZmliLmM6MjQ1OTpcdHN0cnVjdCBuZXQgKmFyZyA9IHRpbWVyX2NvbnRhaW5lcl9vZihhcmcsIHQsIGlwdjYuaXA2X2ZpYl90aW1lcik7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQ2MC1cbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjQ2ND1zdGF0aWMgaW50IF9fbmV0X2luaXQgZmliNl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI0NzktXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcnMpO1xubmV0L2lwdjYvaXA2X2ZpYi5jOjI0ODA6XHR0aW1lcl9zZXR1cChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5pcDZfZmliX3RpbWVyLCBmaWI2X2djX3RpbWVyX2NiLCAwKTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yNDgxLVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yNTM2PXN0YXRpYyB2b2lkIGZpYjZfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yNTM5LVxubmV0L2lwdjYvaXA2X2ZpYi5jOjI1NDA6XHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZuZXQtXHUwMDNlaXB2Ni5pcDZfZmliX3RpbWVyKTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yNTQxLVxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy00OS0jaW5jbHVkZSBcdTAwM2NuZXQvaXB2Ni5oXHUwMDNlXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6NTA6I2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9maWIuaFx1MDAzZVxubmV0L2lwdjYvaXA2X2dyZS5jLTUxLSNpbmNsdWRlIFx1MDAzY25ldC9pcDZfcm91dGUuaFx1MDAzZVxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3JwZmlsdGVyLmMtOS0jaW5jbHVkZSBcdTAwM2NsaW51eC9yb3V0ZS5oXHUwMDNlXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ycGZpbHRlci5jOjEwOiNpbmNsdWRlIFx1MDAzY25ldC9pcDZfZmliLmhcdTAwM2Vcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3JwZmlsdGVyLmMtMTEtI2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9yb3V0ZS5oXHUwMDNlXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmMtOC0jaW5jbHVkZSBcdTAwM2NuZXQvaXA2X3JvdXRlLmhcdTAwM2Vcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jOjk6I2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9maWIuaFx1MDAzZVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmMtMTAtI2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9jaGVja3N1bS5oXHUwMDNlXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mdF9maWJfaXB2Ni5jLTEzLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mdF9maWJfaXB2Ni5jOjE0OiNpbmNsdWRlIFx1MDAzY25ldC9pcDZfZmliLmhcdTAwM2Vcbm5ldC9pcHY2L25ldGZpbHRlci9uZnRfZmliX2lwdjYuYy0xNS0jaW5jbHVkZSBcdTAwM2NuZXQvaXA2X3JvdXRlLmhcdTAwM2Vcbi0tXG5uZXQvaXB2Ni9vdXRwdXRfY29yZS5jLTgtI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxubmV0L2lwdjYvb3V0cHV0X2NvcmUuYzo5OiNpbmNsdWRlIFx1MDAzY25ldC9pcDZfZmliLmhcdTAwM2Vcbm5ldC9pcHY2L291dHB1dF9jb3JlLmMtMTAtI2luY2x1ZGUgXHUwMDNjbmV0L2FkZHJjb25mLmhcdTAwM2Vcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTQ3LSNpbmNsdWRlIFx1MDAzY25ldC9pcHY2LmhcdTAwM2Vcbm5ldC9pcHY2L3JvdXRlLmM6NDg6I2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9maWIuaFx1MDAzZVxubmV0L2lwdjYvcm91dGUuYy00OS0jaW5jbHVkZSBcdTAwM2NuZXQvaXA2X3JvdXRlLmhcdTAwM2Vcbi0tXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMTctI2luY2x1ZGUgXHUwMDNjbmV0L25ldG5zL2dlbmVyaWMuaFx1MDAzZVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjE4OiNpbmNsdWRlIFx1MDAzY25ldC9pcDZfZmliLmhcdTAwM2Vcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0xOS0jaW5jbHVkZSBcdTAwM2NuZXQvcm91dGUuaFx1MDAzZVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOC0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bnMvZ2VuZXJpYy5oXHUwMDNlXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTk6I2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9maWIuaFx1MDAzZVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwLSNpbmNsdWRlIFx1MDAzY25ldC9yb3V0ZS5oXHUwMDNlXG4tLVxubmV0L2lwdjYvc2l0LmMtNDEtI2luY2x1ZGUgXHUwMDNjbmV0L3RyYW5zcF92Ni5oXHUwMDNlXG5uZXQvaXB2Ni9zaXQuYzo0MjojaW5jbHVkZSBcdTAwM2NuZXQvaXA2X2ZpYi5oXHUwMDNlXG5uZXQvaXB2Ni9zaXQuYy00My0jaW5jbHVkZSBcdTAwM2NuZXQvaXA2X3JvdXRlLmhcdTAwM2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyODgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBJUHY2IENvbmZpZ3VyYXRpb24gaW4gdGhlIEtlcm5lbCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVB2NiBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIHByb2MgZmlsZXN5c3RlbS4gVGltZSB0byBjaGVjayBgbmV0L2lwdjYvS2NvbmZpZ2AuIEkga25vdyB0aGUgZ2VuZXJhbCBhcmVhcywgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyB0aGF0IG1pZ2h0IGhhdmUgY2hhbmdlZCByZWNlbnRseSwgb3IgYSBzdWJ0bGUgaW50ZXJwbGF5IGJldHdlZW4gb3B0aW9ucyBJJiMzOTttIG92ZXJsb29raW5nLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBtaWdodCBhZmZlY3QgaG93IElQdjYgYWRkcmVzc2VzIGFyZSBwcmVzZW50ZWQgb3IgbWFuaXB1bGF0ZWQgdGhyb3VnaCBgL3Byb2NgLiBUaGlzIGlzIG9mdGVuIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIHdoZXJlIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZSByZXZlYWxzIGtlcm5lbC1sZXZlbCBkZXRhaWxzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSBoYXMgdG8gb2ZmZXIuIEkgbmVlZCB0byBlbnN1cmUgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgdGhlIGludGVyZGVwZW5kZW5jaWVzIGJlZm9yZSBkaXZpbmcgaW50byB0aGUgY29kZSBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUFY2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnLTUtXG5uZXQvaXB2Ni9LY29uZmlnOjY6bWVudWNvbmZpZyBJUFY2XG5uZXQvaXB2Ni9LY29uZmlnLTctXHRib29sIFwmIzM0O1RoZSBJUHY2IHByb3RvY29sXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xOT1pZiBJUFY2XG5uZXQvaXB2Ni9LY29uZmlnLTIwLVxubmV0L2lwdjYvS2NvbmZpZzoyMTpjb25maWcgSVBWNl9ST1VURVJfUFJFRlxubmV0L2lwdjYvS2NvbmZpZy0yMi1cdGJvb2wgXCYjMzQ7SVB2NjogUm91dGVyIFByZWZlcmVuY2UgKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMC1cbm5ldC9pcHY2L0tjb25maWc6MzE6Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7SVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zOC1cbm5ldC9pcHY2L0tjb25maWc6Mzk6Y29uZmlnIElQVjZfT1BUSU1JU1RJQ19EQURcbm5ldC9pcHY2L0tjb25maWctNDAtXHRib29sIFwmIzM0O0lQdjY6IEVuYWJsZSBSRkMgNDQyOSBPcHRpbWlzdGljIERBRFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTExMS1cbm5ldC9pcHY2L0tjb25maWc6MTEyOmNvbmZpZyBJUFY2X01JUDZcbm5ldC9pcHY2L0tjb25maWctMTEzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogTW9iaWxpdHlcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTExOS1cbm5ldC9pcHY2L0tjb25maWc6MTIwOmNvbmZpZyBJUFY2X0lMQVxubmV0L2lwdjYvS2NvbmZpZy0xMjEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJZGVudGlmaWVyIExvY2F0b3IgQWRkcmVzc2luZyAoSUxBKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTQ2PWNvbmZpZyBJTkVUNl9UVU5ORUxcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE0OS1cbm5ldC9pcHY2L0tjb25maWc6MTUwOmNvbmZpZyBJUFY2X1ZUSVxubmV0L2lwdjYvS2NvbmZpZy0xNTEtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIChzZWN1cmUpIElQdjY6IHR1bm5lbGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTYxLVxubmV0L2lwdjYvS2NvbmZpZzoxNjI6Y29uZmlnIElQVjZfU0lUXG5uZXQvaXB2Ni9LY29uZmlnLTE2My1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQdjYtaW4tSVB2NCB0dW5uZWwgKFNJVCBkcml2ZXIpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNzYtXG5uZXQvaXB2Ni9LY29uZmlnOjE3Nzpjb25maWcgSVBWNl9TSVRfNlJEXG5uZXQvaXB2Ni9LY29uZmlnLTE3OC1cdGJvb2wgXCYjMzQ7SVB2NjogSVB2NiBSYXBpZCBEZXBsb3ltZW50ICg2UkQpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xOTUtXG5uZXQvaXB2Ni9LY29uZmlnOjE5Njpjb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxubmV0L2lwdjYvS2NvbmZpZy0xOTctXHRib29sXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cbm5ldC9pcHY2L0tjb25maWc6MTk5OmNvbmZpZyBJUFY2X1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUC1pbi1JUHY2IHR1bm5lbCAoUkZDMjQ3MylcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBHUkUgdHVubmVsXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMjctXG5uZXQvaXB2Ni9LY29uZmlnOjIyODpjb25maWcgSVBWNl9GT1Vcbm5ldC9pcHY2L0tjb25maWctMjI5LVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIzMS1cbm5ldC9pcHY2L0tjb25maWc6MjMyOmNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjMzLVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIzNi1cbm5ldC9pcHY2L0tjb25maWc6MjM3OmNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvS2NvbmZpZy0yMzgtXHRib29sIFwmIzM0O0lQdjY6IE11bHRpcGxlIFJvdXRpbmcgVGFibGVzXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNDItXG5uZXQvaXB2Ni9LY29uZmlnOjI0Mzpjb25maWcgSVBWNl9TVUJUUkVFU1xubmV0L2lwdjYvS2NvbmZpZy0yNDQtXHRib29sIFwmIzM0O0lQdjY6IHNvdXJjZSBhZGRyZXNzIGJhc2VkIHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cbm5ldC9pcHY2L0tjb25maWc6MjU3OmNvbmZpZyBJUFY2X01ST1VURVxubmV0L2lwdjYvS2NvbmZpZy0yNTgtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNjQtXG5uZXQvaXB2Ni9LY29uZmlnOjI2NTpjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cdGJvb2wgXCYjMzQ7SVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNzgtXG5uZXQvaXB2Ni9LY29uZmlnOjI3OTpjb25maWcgSVBWNl9QSU1TTV9WMlxubmV0L2lwdjYvS2NvbmZpZy0yODAtXHRib29sIFwmIzM0O0lQdjY6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjg1LVxubmV0L2lwdjYvS2NvbmZpZzoyODY6Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yODctXHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yOTktXG5uZXQvaXB2Ni9LY29uZmlnOjMwMDpjb25maWcgSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L0tjb25maWctMzAxLVx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxubmV0L2lwdjYvS2NvbmZpZy0zMTMtXHRkZWZfYm9vbCB5XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTYtXG5uZXQvaXB2Ni9LY29uZmlnOjMxNzpjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMzE4LVx0Ym9vbCBcJiMzNDtJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMyNy1cbm5ldC9pcHY2L0tjb25maWc6MzI4OmNvbmZpZyBJUFY2X0lPQU02X0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTMyOS1cdGJvb2wgXCYjMzQ7SVB2NjogSU9BTSBQcmUtYWxsb2NhdGVkIFRyYWNlIGluc2VydGlvbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDY4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZToKCioqSW52ZXN0aWdhdGluZyBJUHY2IFJvdXRlIEl0ZXJhdGlvbiBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBJUHY2IHJvdXRlcyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHRoZSBzZXF1ZW5jZSBzdG9wIGFuZCBhY3RpdmUgaXRlcmF0aW9uLiBJIHJlY2FsbCBzZWVpbmcgYGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wYCBhbmQgYGlwdjZfcm91dGVfaXRlcl9hY3RpdmVgIHVzZWQgd2l0aCBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIHRoZSBgQ09ORklHX1BST0NfRlNgIGZsYWcgb3Igc29tZXRoaW5nIHNpbWlsYXIuIFRpbWUgdG8gdmVyaWZ5LiBMZXQmIzM5O3MgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgY29kZS4gSSBuZWVkIHRvIGNoZWNrIGxpbmVzIDI2NTAgdGhyb3VnaCAyODUwIG9mIGBuZXQvaXB2Ni9pcDZfZmliLmNgIHRvIHNlZSBob3cgdGhvc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkIGFuZCB1bmRlciB3aGF0IGJ1aWxkIGNvbmRpdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZmliLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI2NDU6XHRcdFx0aXRlci1cdTAwM2V3LmxlYWYgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKFxuMjY0NjpcdFx0XHRcdFx0aXRlci1cdTAwM2V3LmxlYWYtXHUwMDNlZmliNl9uZXh0LFxuMjY0NzpcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNml0ZXItXHUwMDNldGJsLVx1MDAzZXRiNl9sb2NrKSk7XG4yNjQ4Olx0XHRcdGl0ZXItXHUwMDNlc2tpcC0tO1xuMjY0OTpcdFx0XHRpZiAoIWl0ZXItXHUwMDNlc2tpcCBcdTAwMjZcdTAwMjYgaXRlci1cdTAwM2V3LmxlYWYpXG4yNjUwOlx0XHRcdFx0cmV0dXJuIDE7XG4yNjUxOlx0XHR9IHdoaWxlIChpdGVyLVx1MDAzZXcubGVhZik7XG4yNjUyOlx0XG4yNjUzOlx0XHRyZXR1cm4gMDtcbjI2NTQ6XHR9XG4yNjU1Olx0XG4yNjU2Olx0c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9zZXFfc2V0dXBfd2FsayhzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyLFxuMjY1NzpcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldCAqbmV0KVxuMjY1ODpcdHtcbjI2NTk6XHRcdG1lbXNldChcdTAwMjZpdGVyLVx1MDAzZXcsIDAsIHNpemVvZihpdGVyLVx1MDAzZXcpKTtcbjI2NjA6XHRcdGl0ZXItXHUwMDNldy5mdW5jID0gaXB2Nl9yb3V0ZV95aWVsZDtcbjI2NjE6XHRcdGl0ZXItXHUwMDNldy5yb290ID0gXHUwMDI2aXRlci1cdTAwM2V0YmwtXHUwMDNldGI2X3Jvb3Q7XG4yNjYyOlx0XHRpdGVyLVx1MDAzZXcuc3RhdGUgPSBGV1NfSU5JVDtcbjI2NjM6XHRcdGl0ZXItXHUwMDNldy5ub2RlID0gaXRlci1cdTAwM2V3LnJvb3Q7XG4yNjY0Olx0XHRpdGVyLVx1MDAzZXcuYXJncyA9IGl0ZXI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Njc0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gQ29kZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcGlucG9pbnQgdGhlIG9yaWdpbiBvZiB0aGF0IGAjaWYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylgIGJsb2NrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBiZWZvcmUgY29tbWl0IDI2NDUuIEkmIzM5O20gZXNzZW50aWFsbHkgdHJhY2luZyB0aGUgZmVhdHVyZSYjMzk7cyBpbnN0YW50aWF0aW9uIGFuZCB3YW50IHRvIHNlZSBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhhcyBldm9sdmVkIGhpc3RvcmljYWxseS4gVW5kZXJzdGFuZGluZyBpdHMgcG9zaXRpb24gaXMgY3JpdGljYWwgZm9yIGNvbXByZWhlbmRpbmcgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJJiMzOTttIHByb2JhYmx5IGdvaW5nIHRvIG5lZWQgdG8gbG9vayBhdCBjb21taXQgaGlzdG9yeSBhcm91bmQgdGhhdCB0aW1lZnJhbWUgdG8gc2VlIHdoYXQgdGhhdCBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdhcyBkb2luZyBhdCB0aGF0IHRpbWUgYW5kIHVuZGVyc3RhbmQgaWYgdGhlcmUgd2FzIHNvbWV0aGluZyB0aGF0IGludHJvZHVjZWQgaXQsIG9yIHBlcmhhcHMgbW92ZWQgaXQsIGV0Yy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2lmLipDT05GSUdfUFJPQ19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9maWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZmliLmM9MjU5Nz12b2lkIGZpYjZfZ2NfY2xlYW51cCh2b2lkKVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yNjAyLVxubmV0L2lwdjYvaXA2X2ZpYi5jOjI2MDM6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjYwNC1zdGF0aWMgaW50IGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODAxOQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDY0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSVB2NiBSb3V0aW5nIFRhYmxlIEl0ZXJhdGlvbiBhbmQgVW5saW5raW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIGBmaWI2X3dhbGtlcl91bmxpbmtgIGFuZCBgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZWAuIFRoZSBjb2RlIGluZGljYXRlcyB0aGF0IGBmaWI2X3dhbGtlcl91bmxpbmtgIGlzIGRlZmluZWQgb3V0c2lkZSBgQ09ORklHX1BST0NfRlNgLCB3aGVyZWFzIGBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlYCBpcyB3aXRoaW4gaXQuIFRoaXMgc3VnZ2VzdHMgdGhhdCBgSVBWNmAgYW5kIGBQUk9DX0ZTYCBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9ucyB0byB3YXRjaC4KCk5vdywgbGV0JiMzOTtzIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIGBmaWI2X3dhbGtlcl91bmxpbmtgIGlzIGNhbGxlZCBieSBhIHZhcmlldHkgb2YgZnVuY3Rpb25zIGRlYWxpbmcgd2l0aCBkdW1waW5nIGFuZCB3YWxraW5nIHRoZSBGSUIgKEZvcndhcmRpbmcgSW5mb3JtYXRpb24gQmFzZSk6IGBmaWI2X2R1bXBfZW5kYCwgYGZpYjZfZHVtcF90YWJsZWAsIGBmaWI2X3dhbGtgLCBgaXB2Nl9yb3V0ZV9zZXFfbmV4dGAsIGFuZCBgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3BgLiBgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZWAgaXMgYSBzdGF0aWMgaGVscGVyIHdpdGhpbiBgaXA2X2ZpYi5jYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgb3B0aW1pemVkIGJ5IHRoZSBjb21waWxlci4gYGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wYCAqY2FsbHMqIGBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlYC4gV2UgYWxzbyBoYXZlIHRoZSBzZXEgZmlsZSBvcGVyYXRpb24gZW50cnkgcG9pbnRzOiBgaXB2Nl9yb3V0ZV9zZXFfc3RhcnRgLCBgaXB2Nl9yb3V0ZV9zZXFfbmV4dGAsIGFuZCBgaXB2Nl9yb3V0ZV9zZXFfc3RvcGAuICBGaW5hbGx5LCBgZmliNl93YWxrYCBhbmQgYGZpYjZfd2Fsa19jb250aW51ZWAgYXJlIHRoZSB3YWxrZXIgb3BlcmF0aW9ucyB0aGVtc2VsdmVzLgoKRm9jdXNpbmcgb24gdGhlIG5hdHVyZSBvZiBgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZWAsIGl0JiMzOTtzIGRlZmluZWQgYXMgYSBgc3RhdGljIGJvb2xgIGZ1bmN0aW9uLiBUaGlzIG1lYW5zIGl0JiMzOTtzIGxpa2VseSBpbmxpbmVkLCBwcm92aWRpbmcgb3Bwb3J0dW5pdHkgZm9yIGNvbXBpbGVyIG9wdGltaXphdGlvbnMuIGBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcGAgaXMgYWxzbyBzdGF0aWMsIGFuZCBjYWxsZWQgYnkgYGlwdjZfcm91dGVfc2VxX3N0b3BgLiBMaWtld2lzZSwgYGZpYjZfd2Fsa2VyX3VubGlua2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24uICBUaGUgc2VxIGZpbGUgb3BlcmF0aW9uIGZ1bmN0aW9ucyAoYGlwdjZfcm91dGVfc2VxX3N0YXJ0YCwgYGlwdjZfcm91dGVfc2VxX25leHRgLCBgaXB2Nl9yb3V0ZV9zZXFfc3RvcGAsIGFuZCBgaXB2Nl9yb3V0ZV9zZXFfc2hvd2ApIGFyZSBhbGwgd2l0aGluIGBpcDZfZmliLmNgIGFzIHdlbGwuCgpHaXZlbiB0aGF0IGBmaWI2X3dhbGtlcl91bmxpbmtgIGlzIHN0YXRpYyBpbiBgaXA2X2ZpYi5jYCwgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBob3cgdGhleSByZWxhdGUuICBUaGUgYGlwdjZfcm91dGVfc2VxX29wc2Agc3RydWN0IGlzIHBpdm90YWwsIGNvbnRhaW5pbmcgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIGZvciB0aGUgc2VxIGZpbGUgb3BlcmF0aW9uczogYC5zdGFydCA9IGlwdjZfcm91dGVfc2VxX3N0YXJ0YCwgYC5uZXh0ID0gaXB2Nl9yb3V0ZV9zZXFfbmV4dGAsIGAuc3RvcCA9IGlwdjZfcm91dGVfc2VxX3N0b3BgLCBhbmQgYC5zaG93ID0gaXB2Nl9yb3V0ZV9zZXFfc2hvd2AuICBBZ2FpbiwgYGZpYjZfd2Fsa2VyX3VubGlua2AgaXMgY2FsbGVkIGJ5IHRob3NlIGZ1bmN0aW9ucy4gSSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgaW4gYGlwNl9maWIuY2AgKG9yIHBvdGVudGlhbGx5IGByb3V0ZS5jYCkgdGhhdCBleGVyY2lzZSB0aGVzZSBwYXRocywgc3VjaCBhcyBgZmliNl93YWxrZXJfbGlua2AsIGBmaWI2X3dhbGtgLCBhbmQgYGluZXQ2X2R1bXBfZmliYC4KCkZpbmFsbHksIHRoZSBjcml0aWNhbCBuZXh0IHN0ZXAgaXMgdG8gZGV0ZXJtaW5lICp3aGVyZSogYGlwdjZfcm91dGVfc2VxX29wc2AgaXMgcmVnaXN0ZXJlZC4gVGhhdCB3aWxsIHByb3ZpZGUgdGhlIGhvb2sgaW50byB0aGUgYnJvYWRlciBzeXN0ZW0gYW5kIGhvdyB0aGlzIGFsbCBpbnRlZ3JhdGVzIGludG8gdGhlIHByb2NmcyBpbnRlcmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdjZfcm91dGVfc2VxX29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcDZfZmliLmg9NTk2PXN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIge1xuLS1cbmluY2x1ZGUvbmV0L2lwNl9maWIuaC02MDMtXG5pbmNsdWRlL25ldC9pcDZfZmliLmg6NjA0OmV4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaXB2Nl9yb3V0ZV9zZXFfb3BzO1xuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTYwNS1cbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjgyOD1zdGF0aWMgdm9pZCBpcHY2X3JvdXRlX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yODMzLVxubmV0L2lwdjYvaXA2X2ZpYi5jOjI4MzQ6Y29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGlwdjZfcm91dGVfc2VxX29wcyA9IHtcbm5ldC9pcHY2L2lwNl9maWIuYy0yODM1LVx0LnN0YXJ0XHQ9IGlwdjZfcm91dGVfc2VxX3N0YXJ0LFxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9NjgwND1zdGF0aWMgaW50IF9fbmV0X2luaXQgaXA2X3JvdXRlX25ldF9pbml0X2xhdGUoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNjgwNy1cdGlmICghcHJvY19jcmVhdGVfbmV0KFwmIzM0O2lwdjZfcm91dGVcJiMzNDssIDAsIG5ldC1cdTAwM2Vwcm9jX25ldCxcbm5ldC9pcHY2L3JvdXRlLmM6NjgwODpcdFx0XHQgICAgIFx1MDAyNmlwdjZfcm91dGVfc2VxX29wcyxcbm5ldC9pcHY2L3JvdXRlLmMtNjgwOS1cdFx0XHQgICAgIHNpemVvZihzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyKSkpXG4tLVxubmV0L2lwdjYvcm91dGUuYz02ODkwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gaXB2Nl9yb3V0ZV9zZXFfaW5mbyA9IHtcbm5ldC9pcHY2L3JvdXRlLmM6Njg5MTpcdC5zZXFfb3BzXHRcdD0gXHUwMDI2aXB2Nl9yb3V0ZV9zZXFfb3BzLFxubmV0L2lwdjYvcm91dGUuYy02ODkyLVx0LmluaXRfc2VxX3ByaXZhdGVcdD0gYnBmX2l0ZXJfaW5pdF9zZXFfbmV0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg0NQoJCQkJCQkJb3V0cHV0OiAxODEKCQkJCQkJCXRob3VnaHRzOiA1MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgQXNzZXNzbWVudDogSVB2NiBSb3V0ZSBXYWxrZXIgYW5kIFNlcXVlbmNlIEl0ZXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgY2VudGVycyBvbiB0aGVzZSBJUHY2LXJlbGF0ZWQgZnVuY3Rpb25zOiBgaXB2Nl9yb3V0ZV9zZXFfc3RhcnRgLCBgaXB2Nl9yb3V0ZV9zZXFfbmV4dGAsIGBpcHY2X3JvdXRlX3NlcV9zdG9wYCwgYGlwdjZfcm91dGVfc2VxX3Nob3dgLCBgZmliNl93YWxrZXJfdW5saW5rYCwgYGZpYjZfd2Fsa2VyX2xpbmtgLCBgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZWAsIGFuZCBgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3BgLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGNvbmZpcm0gdGhlc2UgYXJlIGlzb2xhdGVkIG9yIHBhcnQgb2YgYSBicm9hZGVyIHNldCBvZiByZWxhdGVkIGZ1bmN0aW9ucywgc28gSSYjMzk7bSBjcm9zcy1yZWZlcmVuY2luZyB3aXRoaW4gYGlwNl9maWIuY2AgYW5kIGByb3V0ZS5jYCBmb3IgYW55IHdhbGtlci1yZWxhdGVkIGludGVyYWN0aW9ucy4KCk9rYXksIGNoZWNraW5nIGBuZXQvaXB2Ni9pcDZfZmliLmNgLCBjb25maXJtcyB0aG9zZSwgcGx1cyBgZmliNl9kdW1wX3RhYmxlYC4gR29vZCwgdGhpcyBzdXBwb3J0cyB0aGUgaW5pdGlhbCBmb2N1cy4KCklzIHRoaXMgZnV6emluZyB0YXJnZXQgdmlhYmxlPyBBYnNvbHV0ZWx5LCB3aXRob3V0IHF1ZXN0aW9uLiBNeSByZWFzb25pbmcgaXMgc29saWQ6IFRoaXMgaXMgcmVhY2hhYmxlIGNvZGU7IHRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgbWFuaXB1bGF0ZSB0aGUgSVB2NiBGSUIgd2Fsa2VyIGxpc3QgbWFuYWdlbWVudCBhbmQsIGltcG9ydGFudGx5LCB0aGUgaXRlcmF0b3Igc3RhdHVzIGNoZWNrcyBkdXJpbmcgYC9wcm9jL25ldC9pcHY2X3JvdXRlYCBzZXFfZmlsZSByZWFkcyBhbmQgQlBGIGl0ZXJhdG9yIGV4ZWN1dGlvbi4gSXTigJlzIGNvcmUgbmV0d29ya2luZyAoSVB2NiBGSUIgcm91dGluZyB0YWJsZXMpLCBhbmQgaXTigJlzIGRpcmVjdGx5IGFjY2Vzc2libGUgdmlhIHN0YW5kYXJkIHNvY2tldHMsIG5ldGxpbmssIG9yIHByb2NmcyB3aXRoaW4gYSBRRU1VL3N5emthbGxlciBlbnZpcm9ubWVudC4gSXQmIzM5O3MgbG93LWhhbmdpbmcgZnJ1aXQuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgY29uZmlndXJhdGlvbnM6IGBJUFY2YCBhbmQgYFBST0NfRlNgIGFyZSBlc3NlbnRpYWwuIEV4Y2VsbGVudCwgZWFzeSBjaGVjay4KCkxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHM6IEkmIzM5O20gcHJpbWFyaWx5IGZvY3VzZWQgb24gYGZpYjZfd2Fsa2VyX3VubGlua2AsIGBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlYCwgYGlwdjZfcm91dGVfc2VxX25leHRgLCBgaXB2Nl9yb3V0ZV9zZXFfc3RhcnRgLCBgaXB2Nl9yb3V0ZV9zZXFfc3RvcGAsIGFuZCBgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3BgLgoKT2theSwgbGV0JiMzOTtzIGRvIGEgZmluYWwgc2FuaXR5IGNoZWNrLCBlbnN1cmluZyBldmVyeXRoaW5nIGFsaWduczoKCiogICAqKldvcnRoRnV6emluZzogVHJ1ZS4qKiBDbGVhci4KKiAgICoqRm9jdXNTeW1ib2xzOioqIFNwZWNpZmljYWxseSByZWxhdGVkIHRvIElQdjYgcm91dGUgd2Fsa2VyIGFuZCBzZXEgaXRlcmF0aW9uOiBgZmliNl93YWxrZXJfdW5saW5rYCwgYGlwdjZfcm91dGVfaXRlcl9hY3RpdmVgLCBgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3BgLCBgaXB2Nl9yb3V0ZV9zZXFfc3RvcGAsIGBpcHY2X3JvdXRlX3NlcV9zdGFydGAsIGBpcHY2X3JvdXRlX3NlcV9uZXh0YC4gWWVzLgoqICAgKipFbmFibGVDb25maWdzOioqIGBJUFY2YCwgYFBST0NfRlNgLiBDb25maXJtZWQuCgpBbHJpZ2h0LCBJJiMzOTttIHJlYWR5IHRvIHByZXBhcmUgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC4gTGV0JiMzOTtzIGdldCB0aGlzIHNldCB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7UFJPQ19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZpYjZfd2Fsa2VyX3VubGluayYjMzQ7LAogICAgJiMzNDtpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlJiMzNDssCiAgICAmIzM0O2lwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wJiMzNDssCiAgICAmIzM0O2lwdjZfcm91dGVfc2VxX3N0b3AmIzM0OywKICAgICYjMzQ7aXB2Nl9yb3V0ZV9zZXFfc3RhcnQmIzM0OywKICAgICYjMzQ7aXB2Nl9yb3V0ZV9zZXFfbmV4dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBJUHY2IEZJQiB3YWxrZXIgbWFuYWdlbWVudCBhbmQgaXRlcmF0aW9uIHN0YXRlIGNoZWNraW5nIGluIG5ldC9pcHY2L2lwNl9maWIuYyAodXNpbmcgbGlzdF9kZWxfaW5pdCBvbiB1bmxpbmtpbmcgYW5kIGNoZWNraW5nICFsaXN0X2VtcHR5IGZvciBhY3RpdmUgaXRlcmF0b3Igc3RhdGUpLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSAvcHJvYy9uZXQvaXB2Nl9yb3V0ZSBzZXFfZmlsZSBvcGVyYXRpb25zIGFuZCBCUEYgSVB2NiByb3V0ZSBpdGVyYXRvcnMgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaWI2X3dhbGtlcl91bmxpbmsmIzM0OywKICAgICYjMzQ7aXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZSYjMzQ7LAogICAgJiMzNDtpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcCYjMzQ7LAogICAgJiMzNDtpcHY2X3JvdXRlX3NlcV9zdG9wJiMzNDssCiAgICAmIzM0O2lwdjZfcm91dGVfc2VxX3N0YXJ0JiMzNDssCiAgICAmIzM0O2lwdjZfcm91dGVfc2VxX25leHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NiBGSUIgd2Fsa2VyIG1hbmFnZW1lbnQgYW5kIGl0ZXJhdGlvbiBzdGF0ZSBjaGVja2luZyBpbiBuZXQvaXB2Ni9pcDZfZmliLmMgKHVzaW5nIGxpc3RfZGVsX2luaXQgb24gdW5saW5raW5nIGFuZCBjaGVja2luZyAhbGlzdF9lbXB0eSBmb3IgYWN0aXZlIGl0ZXJhdG9yIHN0YXRlKS4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgL3Byb2MvbmV0L2lwdjZfcm91dGUgc2VxX2ZpbGUgb3BlcmF0aW9ucyBhbmQgQlBGIElQdjYgcm91dGUgaXRlcmF0b3JzIGluIHN0YW5kYXJkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGxpc3RfZGVsIHdpdGggbGlzdF9kZWxfaW5pdCBpbiBmaWI2X3dhbGtlcl91bmxpbmsoKSBhbmQgdXBkYXRlcyBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKCkgdG8gY2hlY2sgbGlzdF9lbXB0eShcdTAwMjZ3LVx1MDAzZWxoKSBpbnN0ZWFkIG9mIGluc3BlY3Rpbmcgd2Fsa2VyIHN0YXRlIGFuZCBub2RlIHBvaW50ZXJzLiBUaGlzIGNoYW5nZSBmaXhlcyBsaXN0IHRyYWNraW5nIGFuZCBhdm9pZHMgZG91YmxlIGxpc3QgZGVsZXRpb24gLyBsaXN0IGNvcnJ1cHRpb24gd2hlbiBzdG9wcGluZyB0aGUgSVB2NiByb3V0ZSBzZXEgaXRlcmF0aW9uLiBBbGwgcmVsZXZhbnQgbGlzdCBzdHJ1Y3R1cmVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCAodmlhIElOSVRfTElTVF9IRUFEIC8gbGlzdF9kZWxfaW5pdCAvIG1lbXNldCkgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgcmlza3MgYXJlIGludHJvZHVjZWQuIFN0YW5kYXJkIGRldGVjdG9ycyAoS0FTQU4gLyBDT05GSUdfREVCVUdfTElTVCkgY292ZXIgbGlzdCBtYW5pcHVsYXRpb24gYW5kIG1lbW9yeSBjb3JydXB0aW9uIHJpc2tzIGluIHRoaXMgYXJlYSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1YzQ2NGMwMmRiZjA3OGY1ODk5Yjc4NDJjOThiMDRhM2RhODQ3MWQ0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwODoxNzo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9maWIuYyBiL25ldC9pcHY2L2lwNl9maWIuYwppbmRleCAzZTM4MmJhMTU3M2UzLi45ZWE3NTcwM2IzOGQ0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfZmliLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X2ZpYi5jCkBAIC04NSw3ICYjNDM7ODUsNyBAQCBzdGF0aWMgdm9pZCBmaWI2X3dhbGtlcl9saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KQogc3RhdGljIHZvaWQgZmliNl93YWxrZXJfdW5saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KQogewogCXdyaXRlX2xvY2tfYmgoJmFtcDtuZXQtJmd0O2lwdjYuZmliNl93YWxrZXJfbG9jayk7Ci0JbGlzdF9kZWwoJmFtcDt3LSZndDtsaCk7CiYjNDM7CWxpc3RfZGVsX2luaXQoJmFtcDt3LSZndDtsaCk7CiAJd3JpdGVfdW5sb2NrX2JoKCZhbXA7bmV0LSZndDtpcHY2LmZpYjZfd2Fsa2VyX2xvY2spOwogfQogCkBAIC0yNzYwLDcgJiM0MzsyNzYwLDcgQEAgc3RhdGljIHZvaWQgKmlwdjZfcm91dGVfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIHN0YXRpYyBib29sIGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcikKIHsKIAlzdHJ1Y3QgZmliNl93YWxrZXIgKncgPSAmYW1wO2l0ZXItJmd0O3c7Ci0JcmV0dXJuIHctJmd0O25vZGUgJmFtcDsmYW1wOyAhKHctJmd0O3N0YXRlID09IEZXU19VICZhbXA7JmFtcDsgdy0mZ3Q7bm9kZSA9PSB3LSZndDtyb290KTsKJiM0MzsJcmV0dXJuIHctJmd0O25vZGUgJmFtcDsmYW1wOyAhbGlzdF9lbXB0eSgmYW1wO3ctJmd0O2xoKTsKIH0KIAogc3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjU1CgkJCQkJCQlvdXRwdXQ6IDc4CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZmlsZXMgaW52b2x2ZWQsIGFuZCB0aGF0IG1lYW5zIHN0YXJ0aW5nIHdpdGggYG5ldC9pcHY2L2lwNl9maWIuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvZGUgY2hhbmdlIGlzLCBzbyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBhY3Rpb24gaXMuCgpJJiMzOTttIHRoaW5raW5nLCByaWdodCwgbGV0JiMzOTtzIHVzZSB0aGUgbGluZSBudW1iZXJzIHByb3ZpZGVkLiBBcm91bmQgbGluZXMgODUgYW5kIDI3NjAsIHRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBjb250ZXh0dWFsIGdyYXNwLiBJIG5lZWQgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIHRoZSBpbW1lZGlhdGUgaW1wYWN0IG9mIHRoZSBjaGFuZ2VzLgoKQWxyaWdodCwgdGltZSB0byBnZXQgdGhlIGNvZGUuIEkmIzM5O2xsIHJlYWNoIGZvciBgcmVhZC1maWxlYCBhbmQgcHVsbCBpbiB0aGUgY29udGVudHMgb2YgYG5ldC9pcHY2L2lwNl9maWIuY2AuIEdvdHRhIGdldCB0aGUgY29kZSBpbiBmcm9udCBvZiBtZSB0byBzdGFydCBtYWtpbmcgc29tZSBhc3Nlc3NtZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZmliLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDcwOlx0ICpcdHJlc3VsdCBvZiByZWRpcmVjdHMsIHBhdGggTVRVIGNoYW5nZXMsIGV0Yy5cbiAgNzE6XHQgKi9cbiAgNzI6XHRcbiAgNzM6XHRzdGF0aWMgdm9pZCBmaWI2X2djX3RpbWVyX2NiKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbiAgNzQ6XHRcbiAgNzU6XHQjZGVmaW5lIEZPUl9XQUxLRVJTKG5ldCwgdykgXFxcbiAgNzY6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkodywgXHUwMDI2KG5ldCktXHUwMDNlaXB2Ni5maWI2X3dhbGtlcnMsIGxoKVxuICA3NzpcdFxuICA3ODpcdHN0YXRpYyB2b2lkIGZpYjZfd2Fsa2VyX2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4gIDc5Olx0e1xuICA4MDpcdFx0d3JpdGVfbG9ja19iaChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcbiAgODE6XHRcdGxpc3RfYWRkKFx1MDAyNnctXHUwMDNlbGgsIFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYjZfd2Fsa2Vycyk7XG4gIDgyOlx0XHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XG4gIDgzOlx0fVxuICA4NDpcdFxuICA4NTpcdHN0YXRpYyB2b2lkIGZpYjZfd2Fsa2VyX3VubGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X3dhbGtlciAqdylcbiAgODY6XHR7XG4gIDg3Olx0XHR3cml0ZV9sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xuICA4ODpcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZ3LVx1MDAzZWxoKTtcbiAgODk6XHRcdHdyaXRlX3VubG9ja19iaChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcbiAgOTA6XHR9XG4gIDkxOlx0XG4gIDkyOlx0c3RhdGljIGludCBmaWI2X25ld19zZXJudW0oc3RydWN0IG5ldCAqbmV0KVxuICA5MzpcdHtcbiAgOTQ6XHRcdGludCBuZXcsIG9sZCA9IGF0b21pY19yZWFkKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYjZfc2VybnVtKTtcbiAgOTU6XHRcbiAgOTY6XHRcdGRvIHtcbiAgOTc6XHRcdFx0bmV3ID0gb2xkIFx1MDAzYyBJTlRfTUFYID8gb2xkICYjNDM7IDEgOiAxO1xuICA5ODpcdFx0fSB3aGlsZSAoIWF0b21pY190cnlfY21weGNoZyhcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3Nlcm51bSwgXHUwMDI2b2xkLCBuZXcpKTtcbiAgOTk6XHRcbiAxMDA6XHRcdHJldHVybiBuZXc7XG4gMTAxOlx0fVxuIDEwMjpcdFxuIDEwMzpcdGVudW0ge1xuIDEwNDpcdFx0RklCNl9OT19TRVJOVU1fQ0hBTkdFID0gMCxcbiAxMDU6XHR9O1xuIDEwNjpcdFxuIDEwNzpcdHZvaWQgZmliNl91cGRhdGVfc2VybnVtKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpKVxuIDEwODpcdHtcbiAxMDk6XHRcdHN0cnVjdCBmaWI2X25vZGUgKmZuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9maWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc1MDpcdFx0aWYgKGl0ZXItXHUwMDNldGJsKSB7XG4yNzUxOlx0XHRcdGxvZmZfdCBwID0gMDtcbjI3NTI6XHRcbjI3NTM6XHRcdFx0aXB2Nl9yb3V0ZV9zZXFfc2V0dXBfd2FsayhpdGVyLCBuZXQpO1xuMjc1NDpcdFx0XHRyZXR1cm4gaXB2Nl9yb3V0ZV9zZXFfbmV4dChzZXEsIE5VTEwsIFx1MDAyNnApO1xuMjc1NTpcdFx0fSBlbHNlIHtcbjI3NTY6XHRcdFx0cmV0dXJuIE5VTEw7XG4yNzU3Olx0XHR9XG4yNzU4Olx0fVxuMjc1OTpcdFxuMjc2MDpcdHN0YXRpYyBib29sIGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcilcbjI3NjE6XHR7XG4yNzYyOlx0XHRzdHJ1Y3QgZmliNl93YWxrZXIgKncgPSBcdTAwMjZpdGVyLVx1MDAzZXc7XG4yNzYzOlx0XHRyZXR1cm4gdy1cdTAwM2Vub2RlIFx1MDAyNlx1MDAyNiAhbGlzdF9lbXB0eShcdTAwMjZ3LVx1MDAzZWxoKTtcbjI3NjQ6XHR9XG4yNzY1Olx0XG4yNzY2Olx0c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4yNzY3Olx0XHRfX3JlbGVhc2VzKFJDVSlcbjI3Njg6XHR7XG4yNzY5Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTtcbjI3NzA6XHRcdHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIgPSBzZXEtXHUwMDNlcHJpdmF0ZTtcbjI3NzE6XHRcbjI3NzI6XHRcdGlmIChpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKGl0ZXIpKVxuMjc3MzpcdFx0XHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCBcdTAwMjZpdGVyLVx1MDAzZXcpO1xuMjc3NDpcdFxuMjc3NTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yNzc2Olx0fVxuMjc3NzpcdFxuMjc3ODpcdCNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcbjI3Nzk6XHRzdGF0aWMgaW50IGlwdjZfcm91dGVfcHJvZ19zZXFfc2hvdyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4yNzgwOlx0XHRcdFx0XHQgICAgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXG4yNzgxOlx0XHRcdFx0XHQgICAgdm9pZCAqdilcbjI3ODI6XHR7XG4yNzgzOlx0XHRzdHJ1Y3QgYnBmX2l0ZXJfX2lwdjZfcm91dGUgY3R4O1xuMjc4NDpcdFxuMjc4NTpcdFx0Y3R4Lm1ldGEgPSBtZXRhO1xuMjc4NjpcdFx0Y3R4LnJ0ID0gdjtcbjI3ODc6XHRcdHJldHVybiBicGZfaXRlcl9ydW5fcHJvZyhwcm9nLCBcdTAwMjZjdHgpO1xuMjc4ODpcdH1cbjI3ODk6XHRcbjI3OTA6XHRzdGF0aWMgaW50IGlwdjZfcm91dGVfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4yNzkxOlx0e1xuMjc5MjpcdFx0c3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlciA9IHNlcS1cdTAwM2Vwcml2YXRlO1xuMjc5MzpcdFx0c3RydWN0IGJwZl9pdGVyX21ldGEgbWV0YTtcbjI3OTQ6XHRcdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcbjI3OTU6XHRcdGludCByZXQ7XG4yNzk2Olx0XG4yNzk3Olx0XHRtZXRhLnNlcSA9IHNlcTtcbjI3OTg6XHRcdHByb2cgPSBicGZfaXRlcl9nZXRfaW5mbyhcdTAwMjZtZXRhLCBmYWxzZSk7XG4yNzk5Olx0XHRpZiAoIXByb2cpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NTMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgd2Fsa2luZyB0aHJvdWdoIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gSVB2NiBSb3V0aW5nIFRhYmxlIEl0ZXJhdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGlwdjZfcm91dGVfaXRlcmAgYW5kIGBmaWI2X3dhbGtlcmAgYXJlIGJlaW5nIHNldCB1cCBhbmQgdXNlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3RhcnQgd2l0aCB0aGUgb2J2aW91czogZmluZCBvdXQgd2hlcmUgYGlwdjZfcm91dGVfaXRlcmAgaXMgKmRlZmluZWQqIGFuZCAqcmVmZXJlbmNlZCouIFNpbmNlIHRoaXMgaXMgbGlrZWx5IHdpdGhpbiB0aGUgSVB2NiByb3V0aW5nIGltcGxlbWVudGF0aW9uLCBgbmV0L2lwdjYvaXA2X2ZpYi5jYCBpcyB0aGUgcHJpbWUgc3VzcGVjdC4gSSYjMzk7bGwgcmVhY2ggZm9yIGEgYGdyZXBgIGNvbW1hbmQgdG8gc2VhcmNoIGRpcmVjdGx5IHdpdGhpbiB0aGF0IGZpbGUgZm9yIGluc3RhbmNlcyBvZiBgaXB2Nl9yb3V0ZV9pdGVyYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIGl0cyB1c2FnZS4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB3aWxsIHVudmVpbCBzb21lIGtleSBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGludGVncmFsIHRvIHdhbGtpbmcgdGhlIElQdjYgcm91dGluZyB0YWJsZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIHVuY292ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdjZfcm91dGVfaXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZmliLmM9MjYwND1zdGF0aWMgaW50IGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yNjA2LVx0c3RydWN0IGZpYjZfaW5mbyAqcnQgPSB2O1xubmV0L2lwdjYvaXA2X2ZpYi5jOjI2MDc6XHRzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyID0gc2VxLVx1MDAzZXByaXZhdGU7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjYwOC1cdHN0cnVjdCBmaWI2X25oICpmaWI2X25oID0gcnQtXHUwMDNlZmliNl9uaDtcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjYzNz1zdGF0aWMgaW50IGlwdjZfcm91dGVfeWllbGQoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI2Mzgte1xubmV0L2lwdjYvaXA2X2ZpYi5jOjI2Mzk6XHRzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyID0gdy1cdTAwM2VhcmdzO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTI2NDAtXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI2NTUtXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjY1NjpzdGF0aWMgdm9pZCBpcHY2X3JvdXRlX3NlcV9zZXR1cF93YWxrKHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIsXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjY1Ny1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjY3MD1zdGF0aWMgc3RydWN0IGZpYjZfdGFibGUgKmlwdjZfcm91dGVfc2VxX25leHRfdGFibGUoc3RydWN0IGZpYjZfdGFibGUgKnRibCxcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjY5MC1cbm5ldC9pcHY2L2lwNl9maWIuYzoyNjkxOnN0YXRpYyB2b2lkIGlwdjZfcm91dGVfY2hlY2tfc2VybnVtKHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIpXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjY5Mi17XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTI3MDQ9c3RhdGljIHZvaWQgKmlwdjZfcm91dGVfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yNzA4LVx0c3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7XG5uZXQvaXB2Ni9pcDZfZmliLmM6MjcwOTpcdHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIgPSBzZXEtXHUwMDNlcHJpdmF0ZTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yNzEwLVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yNzQwPXN0YXRpYyB2b2lkICppcHY2X3JvdXRlX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NDMtXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTtcbm5ldC9pcHY2L2lwNl9maWIuYzoyNzQ0Olx0c3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlciA9IHNlcS1cdTAwM2Vwcml2YXRlO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NDUtXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NTktXG5uZXQvaXB2Ni9pcDZfZmliLmM6Mjc2MDpzdGF0aWMgYm9vbCBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIpXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc2MS17XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTI3NjY9c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NjktXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTtcbm5ldC9pcHY2L2lwNl9maWIuYzoyNzcwOlx0c3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlciA9IHNlcS1cdTAwM2Vwcml2YXRlO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NzEtXG5uZXQvaXB2Ni9pcDZfZmliLmM6Mjc3MjpcdGlmIChpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKGl0ZXIpKVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NzMtXHRcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIFx1MDAyNml0ZXItXHUwMDNldyk7XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTI3OTA9c3RhdGljIGludCBpcHY2X3JvdXRlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3OTEte1xubmV0L2lwdjYvaXA2X2ZpYi5jOjI3OTI6XHRzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyID0gc2VxLVx1MDAzZXByaXZhdGU7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc5My1cdHN0cnVjdCBicGZfaXRlcl9tZXRhIG1ldGE7XG4tLVxubmV0L2lwdjYvcm91dGUuYz02ODA0PXN0YXRpYyBpbnQgX19uZXRfaW5pdCBpcDZfcm91dGVfbmV0X2luaXRfbGF0ZShzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2lwdjYvcm91dGUuYy02ODA4LVx0XHRcdCAgICAgXHUwMDI2aXB2Nl9yb3V0ZV9zZXFfb3BzLFxubmV0L2lwdjYvcm91dGUuYzo2ODA5Olx0XHRcdCAgICAgc2l6ZW9mKHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIpKSlcbm5ldC9pcHY2L3JvdXRlLmMtNjgxMC1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxubmV0L2lwdjYvcm91dGUuYz02ODkwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gaXB2Nl9yb3V0ZV9zZXFfaW5mbyA9IHtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTY4OTMtXHQuZmluaV9zZXFfcHJpdmF0ZVx0PSBicGZfaXRlcl9maW5pX3NlcV9uZXQsXG5uZXQvaXB2Ni9yb3V0ZS5jOjY4OTQ6XHQuc2VxX3ByaXZfc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyKSxcbm5ldC9pcHY2L3JvdXRlLmMtNjg5NS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjA4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlOgoKKipEaXZpbmcgaW50byB0aGUgSVB2NiBGSUIgV2Fsa2VyIGluIG5ldC9pcHY2L2lwNl9maWIuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiB0aGUgSVB2NiBGSUIuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSByb3V0ZSB3YWxrZXIgYW5kIGl0cyByZWxhdGVkIGZ1bmN0aW9ucyBmdW5jdGlvbi4gVGltZSB0byBqdW1wIGludG8gbGluZXMgMjY1MC0yNzUwIG9mIGBuZXQvaXB2Ni9pcDZfZmliLmNgLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIGBpcHY2X3JvdXRlX3NlcV9zZXR1cF93YWxrYCwgYGZpYjZfd2Fsa2VyX2xpbmtgLCBhbmQgdGhlIG90aGVyIHBsYXllcnMgaW4gdGhpcyBsaXR0bGUgcGVyZm9ybWFuY2Ugb2Ygcm91dGUgbG9va3VwLiBJIGV4cGVjdCB0byBzZWUgdGhlIGludGVycGxheSBiZXR3ZWVuIGRhdGEgc3RydWN0dXJlcywgdGhlIGxvZ2ljIGZvciB3YWxraW5nIHRocm91Z2ggdGhlIEZJQiB0cmVlLCBhbmQgd2hhdGV2ZXIgb3B0aW1pemF0aW9ucyB0aGV5JiMzOTtyZSBlbXBsb3lpbmcuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgYnVncykgaGFwcGVuIHdoZW4gcm91dGluZyBJUHY2IHRyYWZmaWMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0aGUgY29tcGxleGl0aWVzIG9mIHByZWZpeCBtYXRjaGluZywgbG9uZ2VzdCBwcmVmaXggbWF0Y2ggKExQTSksIGFuZCBhbnkgYXNzb2NpYXRlZCBjYWNoaW5nLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgdHJpY2tzIG9yIG9wdGltaXphdGlvbnMgaW4gcGxheSBoZXJlLiBUaW1lIHRvIGdldCBkb3duIGFuZCBkaXJ0eSB3aXRoIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9maWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjY1MDpcdFx0XHRcdHJldHVybiAxO1xuMjY1MTpcdFx0fSB3aGlsZSAoaXRlci1cdTAwM2V3LmxlYWYpO1xuMjY1MjpcdFxuMjY1MzpcdFx0cmV0dXJuIDA7XG4yNjU0Olx0fVxuMjY1NTpcdFxuMjY1NjpcdHN0YXRpYyB2b2lkIGlwdjZfcm91dGVfc2VxX3NldHVwX3dhbGsoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcixcbjI2NTc6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXQgKm5ldClcbjI2NTg6XHR7XG4yNjU5Olx0XHRtZW1zZXQoXHUwMDI2aXRlci1cdTAwM2V3LCAwLCBzaXplb2YoaXRlci1cdTAwM2V3KSk7XG4yNjYwOlx0XHRpdGVyLVx1MDAzZXcuZnVuYyA9IGlwdjZfcm91dGVfeWllbGQ7XG4yNjYxOlx0XHRpdGVyLVx1MDAzZXcucm9vdCA9IFx1MDAyNml0ZXItXHUwMDNldGJsLVx1MDAzZXRiNl9yb290O1xuMjY2MjpcdFx0aXRlci1cdTAwM2V3LnN0YXRlID0gRldTX0lOSVQ7XG4yNjYzOlx0XHRpdGVyLVx1MDAzZXcubm9kZSA9IGl0ZXItXHUwMDNldy5yb290O1xuMjY2NDpcdFx0aXRlci1cdTAwM2V3LmFyZ3MgPSBpdGVyO1xuMjY2NTpcdFx0aXRlci1cdTAwM2VzZXJudW0gPSBSRUFEX09OQ0UoaXRlci1cdTAwM2V3LnJvb3QtXHUwMDNlZm5fc2VybnVtKTtcbjI2NjY6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNml0ZXItXHUwMDNldy5saCk7XG4yNjY3Olx0XHRmaWI2X3dhbGtlcl9saW5rKG5ldCwgXHUwMDI2aXRlci1cdTAwM2V3KTtcbjI2Njg6XHR9XG4yNjY5Olx0XG4yNjcwOlx0c3RhdGljIHN0cnVjdCBmaWI2X3RhYmxlICppcHY2X3JvdXRlX3NlcV9uZXh0X3RhYmxlKHN0cnVjdCBmaWI2X3RhYmxlICp0YmwsXG4yNjcxOlx0XHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBuZXQgKm5ldClcbjI2NzI6XHR7XG4yNjczOlx0XHR1bnNpZ25lZCBpbnQgaDtcbjI2NzQ6XHRcdHN0cnVjdCBobGlzdF9ub2RlICpub2RlO1xuMjY3NTpcdFxuMjY3NjpcdFx0aWYgKHRibCkge1xuMjY3NzpcdFx0XHRoID0gKHRibC1cdTAwM2V0YjZfaWQgXHUwMDI2IChGSUI2X1RBQkxFX0hBU0hTWiAtIDEpKSAmIzQzOyAxO1xuMjY3ODpcdFx0XHRub2RlID0gcmN1X2RlcmVmZXJlbmNlKGhsaXN0X25leHRfcmN1KFx1MDAyNnRibC1cdTAwM2V0YjZfaGxpc3QpKTtcbjI2Nzk6XHRcdH0gZWxzZSB7XG4yNjgwOlx0XHRcdGggPSAwO1xuMjY4MTpcdFx0XHRub2RlID0gTlVMTDtcbjI2ODI6XHRcdH1cbjI2ODM6XHRcbjI2ODQ6XHRcdHdoaWxlICghbm9kZSBcdTAwMjZcdTAwMjYgaCBcdTAwM2MgRklCNl9UQUJMRV9IQVNIU1opIHtcbjI2ODU6XHRcdFx0bm9kZSA9IHJjdV9kZXJlZmVyZW5jZShcbjI2ODY6XHRcdFx0XHRobGlzdF9maXJzdF9yY3UoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliX3RhYmxlX2hhc2hbaCYjNDM7JiM0MztdKSk7XG4yNjg3Olx0XHR9XG4yNjg4Olx0XHRyZXR1cm4gaGxpc3RfZW50cnlfc2FmZShub2RlLCBzdHJ1Y3QgZmliNl90YWJsZSwgdGI2X2hsaXN0KTtcbjI2ODk6XHR9XG4yNjkwOlx0XG4yNjkxOlx0c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9jaGVja19zZXJudW0oc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcilcbjI2OTI6XHR7XG4yNjkzOlx0XHRpbnQgc2VybnVtID0gUkVBRF9PTkNFKGl0ZXItXHUwMDNldy5yb290LVx1MDAzZWZuX3Nlcm51bSk7XG4yNjk0Olx0XG4yNjk1Olx0XHRpZiAoaXRlci1cdTAwM2VzZXJudW0gIT0gc2VybnVtKSB7XG4yNjk2Olx0XHRcdGl0ZXItXHUwMDNlc2VybnVtID0gc2VybnVtO1xuMjY5NzpcdFx0XHRpdGVyLVx1MDAzZXcuc3RhdGUgPSBGV1NfSU5JVDtcbjI2OTg6XHRcdFx0aXRlci1cdTAwM2V3Lm5vZGUgPSBpdGVyLVx1MDAzZXcucm9vdDtcbjI2OTk6XHRcdFx0V0FSTl9PTihpdGVyLVx1MDAzZXcuc2tpcCk7XG4yNzAwOlx0XHRcdGl0ZXItXHUwMDNldy5za2lwID0gaXRlci1cdTAwM2V3LmNvdW50O1xuMjcwMTpcdFx0fVxuMjcwMjpcdH1cbjI3MDM6XHRcbjI3MDQ6XHRzdGF0aWMgdm9pZCAqaXB2Nl9yb3V0ZV9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpXG4yNzA1Olx0e1xuMjcwNjpcdFx0aW50IHI7XG4yNzA3Olx0XHRzdHJ1Y3QgZmliNl9pbmZvICpuO1xuMjcwODpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7XG4yNzA5Olx0XHRzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyID0gc2VxLVx1MDAzZXByaXZhdGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MDYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUHY2IFJvdXRlIFdhbGtlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgdHdvIGZ1bmN0aW9uczogYGZpYjZfd2Fsa2VyX3VubGlua2AgYW5kIGBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlYC4gU3BlY2lmaWNhbGx5LCBgbGlzdF9kZWwoJmFtcDt3LSZndDtsaClgIGJlY29tZXMgYGxpc3RfZGVsX2luaXQoJmFtcDt3LSZndDtsaClgIGFuZCB0aGUgcmV0dXJuIGNvbmRpdGlvbiBpbiBgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZWAgaXMgY2hhbmdlZCBmcm9tIGEgbm9kZS9zdGF0ZSBjaGVjayB0byBgIWxpc3RfZW1wdHkoJmFtcDt3LSZndDtsaClgLiBUaGUgY3JpdGljYWwgYXNwZWN0IGhlcmUgaXMgdGhlIHNoaWZ0IGZyb20gYW4gaW5kaXJlY3QgY2hlY2sgb2Ygd2Fsa2VyIHN0YXRlIHRvIGEgZGlyZWN0IGNoZWNrIG9mIGxpc3QgbWVtYmVyc2hpcC4KCldoeT8gV2VsbCwgaXQgbG9va3MgbGlrZSB0aGVyZSB3ZXJlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzLiBUaGUgYGlwdjZfcm91dGVfc2VxX3NldHVwX3dhbGtgIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSB3YWxrZXIgYW5kIGxpbmtzIGl0IHRvIGBuZXQtJmd0O2lwdjYuZmliNl93YWxrZXJzYC4gQ29udmVyc2VseSwgYGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wYCBjaGVja3MgaWYgdGhlIHdhbGtlciBpcyAmIzM0O2FjdGl2ZSYjMzQ7IHZpYSBhIGNoZWNrIG9uIGFuIHBvdGVudGlhbGx5IGZsYXdlZCBzdGF0ZSBjaGVjaywgYW5kIGlmIHNvLCB1bmxpbmtzIGl0LiBUaGUgcHJldmlvdXMgY29uZGl0aW9uIGZvciBhY3RpdmUtbmVzcyBpbiBgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZWAgd2FzIHN1c3BlY3QuIEl0IHdhcyB0cnlpbmcgdG8gaW5mZXIgbGlzdCBtZW1iZXJzaGlwIGJhc2VkIG9uIHRoZSB3YWxrZXImIzM5O3Mgbm9kZSBhbmQgc3RhdGUsIHdoaWNoIGNvdWxkIGJlY29tZSBvdXQgb2Ygc3luYywgb3IgYWxsb3cgZm9yIG11bHRpcGxlIGNhbGxzIHRvIGBzZXFfc3RvcGAsIGxlYWRpbmcgdG8gaXNzdWVzIGxpa2UgZG91YmxlIGBsaXN0X2RlbGAgY2FsbHMsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcywgb3IgbGlzdCBjb3JydXB0aW9uLCBvciBmYWlsaW5nIHRvIHJlbW92ZSB0aGUgd2Fsa2VyIGF0IGFsbCwgd2hpY2ggd291bGQgbGVhayB0aGUgd2Fsa2VyLiBUaGUgbmV3LCBtb3JlIGRpcmVjdCBhcHByb2FjaCB1c2luZyBgbGlzdF9kZWxfaW5pdGAgYW5kIGBsaXN0X2VtcHR5YCBhcHBlYXJzIHRvIGJlIGEgbXVjaCBjbGVhbmVyIHNvbHV0aW9uIHRvIGFjY3VyYXRlbHkgdHJhY2sgbGlzdCBtZW1iZXJzaGlwIGFuZCBwcmV2ZW50IHRob3NlIGxpc3QtcmVsYXRlZCBtZW1vcnkgaXNzdWVzLgoKTm93LCBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZSwgbGV0JiMzOTtzIHNlZSBpZiB0aGlzIGludHJvZHVjZXMgb3IgZWxpbWluYXRlcyBhbnkgdnVsbmVyYWJpbGl0aWVzLiBUaGUgY29kZSYjMzk7cyBpbml0aWFsaXphdGlvbiB2aWEgYG1lbXNldCgmYW1wO2l0ZXItJmd0O3csIDAsIHNpemVvZihpdGVyLSZndDt3KSlgIGFuZCBgSU5JVF9MSVNUX0hFQUQoJmFtcDtpdGVyLSZndDt3LmxoKWAgaXMgY2xlYXIsIGFuZCBgbGlzdF9kZWxfaW5pdGAgY29ycmVjdGx5IHJlaW5pdGlhbGl6ZXMgdGhlIGxpc3QgaGVhZC4gVGhlIGBsaXN0X2VtcHR5YCBjaGVjaywgd2hpY2ggZXhhbWluZXMgYHctJmd0O2xoLm5leHQgPT0gJmFtcDt3LSZndDtsaGAsIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlcmUmIzM5O3Mgbm8gb2J2aW91cyByZWFkaW5nIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIG5vIGRpcmVjdCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgZXZpZGVudC4gVGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBjbGVhciwgbGlzdC1yZWxhdGVkIGJ1Zy4gU3BlY2lmaWNhbGx5LCBsaXN0IGNvcnJ1cHRpb24sIGRvdWJsZSBsaXN0IGRlbGV0aW9uLCBvciBpbmFjY3VyYXRlIHRyYWNraW5nIG9mIHdhbGtlciBsaXN0IG1lbWJlcnNoaXAuIEl0IGRlYWxzIHdpdGggbGlzdCBtYW5pcHVsYXRpb24sIGFuZCBhbnkgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHNob3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgbGlzdCBoYXJkZW5pbmcsIEtBU0FOLCBvciBgQ09ORklHX0RFQlVHX0xJU1RgLiBJJiMzOTtkIHdhbnQgdG8gY2hlY2sgaWYgYW55IG90aGVyIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIGB3LSZndDtsaGAgb3IgdGhlIGBmaWI2X3dhbGtlcmAgc3RydWN0LCBidXQgdGhpcyBpcyBhIHNvbGlkIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWI2X3dhbGtlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZmliLmM9NDI9c3RydWN0IGZpYjZfY2xlYW5lciB7XG5uZXQvaXB2Ni9pcDZfZmliLmM6NDM6XHRzdHJ1Y3QgZmliNl93YWxrZXIgdztcbm5ldC9pcHY2L2lwNl9maWIuYy00NC1cdHN0cnVjdCBuZXQgKm5ldDtcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9NjA9c3RhdGljIHN0cnVjdCBmaWI2X25vZGUgKmZpYjZfcmVwYWlyX3RyZWUoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy02Mi1cdFx0XHRcdFx0ICBzdHJ1Y3QgZmliNl9ub2RlICpmbik7XG5uZXQvaXB2Ni9pcDZfZmliLmM6NjM6c3RhdGljIGludCBmaWI2X3dhbGsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpO1xubmV0L2lwdjYvaXA2X2ZpYi5jOjY0OnN0YXRpYyBpbnQgZmliNl93YWxrX2NvbnRpbnVlKHN0cnVjdCBmaWI2X3dhbGtlciAqdyk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtNjUtXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTczPXN0YXRpYyB2b2lkIGZpYjZfZ2NfdGltZXJfY2Ioc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy03NS0jZGVmaW5lIEZPUl9XQUxLRVJTKG5ldCwgdykgXFxcbm5ldC9pcHY2L2lwNl9maWIuYzo3NjpcdGxpc3RfZm9yX2VhY2hfZW50cnkodywgXHUwMDI2KG5ldCktXHUwMDNlaXB2Ni5maWI2X3dhbGtlcnMsIGxoKVxubmV0L2lwdjYvaXA2X2ZpYi5jLTc3LVxubmV0L2lwdjYvaXA2X2ZpYi5jOjc4OnN0YXRpYyB2b2lkIGZpYjZfd2Fsa2VyX2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG5uZXQvaXB2Ni9pcDZfZmliLmMtNzkte1xubmV0L2lwdjYvaXA2X2ZpYi5jOjgwOlx0d3JpdGVfbG9ja19iaChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcbm5ldC9pcHY2L2lwNl9maWIuYzo4MTpcdGxpc3RfYWRkKFx1MDAyNnctXHUwMDNlbGgsIFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYjZfd2Fsa2Vycyk7XG5uZXQvaXB2Ni9pcDZfZmliLmM6ODI6XHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtODMtfVxubmV0L2lwdjYvaXA2X2ZpYi5jLTg0LVxubmV0L2lwdjYvaXA2X2ZpYi5jOjg1OnN0YXRpYyB2b2lkIGZpYjZfd2Fsa2VyX3VubGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X3dhbGtlciAqdylcbm5ldC9pcHY2L2lwNl9maWIuYy04Ni17XG5uZXQvaXB2Ni9pcDZfZmliLmM6ODc6XHR3cml0ZV9sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTg4LVx0bGlzdF9kZWxfaW5pdChcdTAwMjZ3LVx1MDAzZWxoKTtcbm5ldC9pcHY2L2lwNl9maWIuYzo4OTpcdHdyaXRlX3VubG9ja19iaChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcbm5ldC9pcHY2L2lwNl9maWIuYy05MC19XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTQ0OD1zdGF0aWMgaW50IGZpYjZfcnRfZHVtcChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfZHVtcF9hcmcgKmFyZylcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtNDY5LVxubmV0L2lwdjYvaXA2X2ZpYi5jOjQ3MDpzdGF0aWMgaW50IGZpYjZfbm9kZV9kdW1wKHN0cnVjdCBmaWI2X3dhbGtlciAqdylcbm5ldC9pcHY2L2lwNl9maWIuYy00NzEte1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz00Nzk9c3RhdGljIGludCBmaWI2X3RhYmxlX2R1bXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl90YWJsZSAqdGIsXG5uZXQvaXB2Ni9pcDZfZmliLmM6NDgwOlx0XHRcdCAgIHN0cnVjdCBmaWI2X3dhbGtlciAqdylcbm5ldC9pcHY2L2lwNl9maWIuYy00ODEte1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz00OTI9aW50IGZpYjZfdGFibGVzX2R1bXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy00OTUtXHRzdHJ1Y3QgZmliNl9kdW1wX2FyZyBhcmc7XG5uZXQvaXB2Ni9pcDZfZmliLmM6NDk2Olx0c3RydWN0IGZpYjZfd2Fsa2VyICp3O1xubmV0L2lwdjYvaXA2X2ZpYi5jLTQ5Ny1cdHVuc2lnbmVkIGludCBoO1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy01MjctXG5uZXQvaXB2Ni9pcDZfZmliLmM6NTI4OnN0YXRpYyBpbnQgZmliNl9kdW1wX25vZGUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxubmV0L2lwdjYvaXA2X2ZpYi5jLTUyOS17XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTUzMi1cbm5ldC9pcHY2L2lwNl9maWIuYzo1MzM6XHRmb3JfZWFjaF9maWI2X3dhbGtlcl9ydCh3KSB7XG5uZXQvaXB2Ni9pcDZfZmliLmMtNTM0LVx0XHRyZXMgPSBydDZfZHVtcF9yb3V0ZShydCwgdy1cdTAwM2VhcmdzLCB3LVx1MDAzZXNraXBfaW5fbm9kZSk7XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTU2Mj1zdGF0aWMgdm9pZCBmaWI2X2R1bXBfZW5kKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtNTY0LVx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoY2ItXHUwMDNlc2tiLVx1MDAzZXNrKTtcbm5ldC9pcHY2L2lwNl9maWIuYzo1NjU6XHRzdHJ1Y3QgZmliNl93YWxrZXIgKncgPSAodm9pZCAqKWNiLVx1MDAzZWFyZ3NbMl07XG5uZXQvaXB2Ni9pcDZfZmliLmMtNTY2LVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy01NjktXHRcdFx0Y2ItXHUwMDNlYXJnc1s0XSA9IDA7XG5uZXQvaXB2Ni9pcDZfZmliLmM6NTcwOlx0XHRcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIHcpO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTU3MS1cdFx0fVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz01ODU9c3RhdGljIGludCBmaWI2X2R1bXBfdGFibGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy01ODgtXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xubmV0L2lwdjYvaXA2X2ZpYi5jOjU4OTpcdHN0cnVjdCBmaWI2X3dhbGtlciAqdztcbm5ldC9pcHY2L2lwNl9maWIuYy01OTAtXHRpbnQgcmVzO1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy02MjItXHRcdGlmIChyZXMgXHUwMDNjPSAwKSB7XG5uZXQvaXB2Ni9pcDZfZmliLmM6NjIzOlx0XHRcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIHcpO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTYyNC1cdFx0XHRjYi1cdTAwM2VhcmdzWzRdID0gMDtcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9NjMxPXN0YXRpYyBpbnQgaW5ldDZfZHVtcF9maWIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy02MzktXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDtcbm5ldC9pcHY2L2lwNl9maWIuYzo2NDA6XHRzdHJ1Y3QgZmliNl93YWxrZXIgKnc7XG5uZXQvaXB2Ni9pcDZfZmliLmMtNjQxLVx0c3RydWN0IGZpYjZfdGFibGUgKnRiO1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0xODQxPXN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICpmaWI2X3JlcGFpcl90cmVlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMTg0Ny1cdHN0cnVjdCBmaWI2X25vZGUgKmNoaWxkO1xubmV0L2lwdjYvaXA2X2ZpYi5jOjE4NDg6XHRzdHJ1Y3QgZmliNl93YWxrZXIgKnc7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMTg0OS1cdGludCBpdGVyID0gMDtcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMTkzMi1cbm5ldC9pcHY2L2lwNl9maWIuYzoxOTMzOlx0XHRyZWFkX2xvY2soXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMTkzNC1cdFx0Rk9SX1dBTEtFUlMobmV0LCB3KSB7XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTE5NTYtXHRcdH1cbm5ldC9pcHY2L2lwNl9maWIuYzoxOTU3Olx0XHRyZWFkX3VubG9jayhcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcbm5ldC9pcHY2L2lwNl9maWIuYy0xOTU4LVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0xOTY5PXN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTE5NzMtXHRzdHJ1Y3QgZmliNl9pbmZvICpsZWFmLCAqcmVwbGFjZV9ydCA9IE5VTEw7XG5uZXQvaXB2Ni9pcDZfZmliLmM6MTk3NDpcdHN0cnVjdCBmaWI2X3dhbGtlciAqdztcbm5ldC9pcHY2L2lwNl9maWIuYy0xOTc1LVx0c3RydWN0IGZpYjZfaW5mbyAqcnQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKCpydHAsXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwMjUtXHQvKiBBZGp1c3Qgd2Fsa2VycyAqL1xubmV0L2lwdjYvaXA2X2ZpYi5jOjIwMjY6XHRyZWFkX2xvY2soXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjAyNy1cdEZPUl9XQUxLRVJTKG5ldCwgdykge1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yMDM1LVx0fVxubmV0L2lwdjYvaXA2X2ZpYi5jOjIwMzY6XHRyZWFkX3VubG9jayhcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yMDM3LVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yMDY2PWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTIxMjktXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjEzMDpzdGF0aWMgaW50IGZpYjZfd2Fsa19jb250aW51ZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjEzMS17XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTIyMTktXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjIyMDpzdGF0aWMgaW50IGZpYjZfd2FsayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X3dhbGtlciAqdylcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjIxLXtcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjIyNi1cbm5ldC9pcHY2L2lwNl9maWIuYzoyMjI3Olx0ZmliNl93YWxrZXJfbGluayhuZXQsIHcpO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTIyMjgtXHRyZXMgPSBmaWI2X3dhbGtfY29udGludWUodyk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjIyOS1cdGlmIChyZXMgXHUwMDNjPSAwKVxubmV0L2lwdjYvaXA2X2ZpYi5jOjIyMzA6XHRcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIHcpO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTIyMzEtXHRyZXR1cm4gcmVzO1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yMjMzLVxubmV0L2lwdjYvaXA2X2ZpYi5jOjIyMzQ6c3RhdGljIGludCBmaWI2X2NsZWFuX25vZGUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxubmV0L2lwdjYvaXA2X2ZpYi5jLTIyMzUte1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yMjUzLVxubmV0L2lwdjYvaXA2X2ZpYi5jOjIyNTQ6XHRmb3JfZWFjaF9maWI2X3dhbGtlcl9ydCh3KSB7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjI1NS1cdFx0cmVzID0gYy1cdTAwM2VmdW5jKHJ0LCBjLVx1MDAzZWFyZyk7XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTI0NjQ9c3RhdGljIGludCBfX25ldF9pbml0IGZpYjZfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yNDc3LVx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl9nY19sb2NrKTtcbm5ldC9pcHY2L2lwNl9maWIuYzoyNDc4Olx0cndsb2NrX2luaXQoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XG5uZXQvaXB2Ni9pcDZfZmliLmM6MjQ3OTpcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYjZfd2Fsa2Vycyk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQ4MC1cdHRpbWVyX3NldHVwKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmlwNl9maWJfdGltZXIsIGZpYjZfZ2NfdGltZXJfY2IsIDApO1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yNjA0PXN0YXRpYyBpbnQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI2MzYtXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjYzNzpzdGF0aWMgaW50IGlwdjZfcm91dGVfeWllbGQoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI2Mzgte1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yNjU2PXN0YXRpYyB2b2lkIGlwdjZfcm91dGVfc2VxX3NldHVwX3dhbGsoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcixcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjY2Ni1cdElOSVRfTElTVF9IRUFEKFx1MDAyNml0ZXItXHUwMDNldy5saCk7XG5uZXQvaXB2Ni9pcDZfZmliLmM6MjY2NzpcdGZpYjZfd2Fsa2VyX2xpbmsobmV0LCBcdTAwMjZpdGVyLVx1MDAzZXcpO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTI2NjgtfVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yNzA0PXN0YXRpYyB2b2lkICppcHY2X3JvdXRlX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjcyNi1cdH0gZWxzZSBpZiAociBcdTAwM2MgMCkge1xubmV0L2lwdjYvaXA2X2ZpYi5jOjI3Mjc6XHRcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIFx1MDAyNml0ZXItXHUwMDNldyk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjcyOC1cdFx0cmV0dXJuIE5VTEw7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjcyOS1cdH1cbm5ldC9pcHY2L2lwNl9maWIuYzoyNzMwOlx0ZmliNl93YWxrZXJfdW5saW5rKG5ldCwgXHUwMDI2aXRlci1cdTAwM2V3KTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yNzMxLVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yNzYwPXN0YXRpYyBib29sIGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcilcbm5ldC9pcHY2L2lwNl9maWIuYy0yNzYxLXtcbm5ldC9pcHY2L2lwNl9maWIuYzoyNzYyOlx0c3RydWN0IGZpYjZfd2Fsa2VyICp3ID0gXHUwMDI2aXRlci1cdTAwM2V3O1xubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NjMtXHRyZXR1cm4gdy1cdTAwM2Vub2RlIFx1MDAyNlx1MDAyNiAhbGlzdF9lbXB0eShcdTAwMjZ3LVx1MDAzZWxoKTtcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9Mjc2Nj1zdGF0aWMgdm9pZCBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc3Mi1cdGlmIChpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKGl0ZXIpKVxubmV0L2lwdjYvaXA2X2ZpYi5jOjI3NzM6XHRcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIFx1MDAyNml0ZXItXHUwMDNldyk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc3NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NTQKCQkJCQkJCW91dHB1dDogMTc4CgkJCQkJCQl0aG91Z2h0czogMjYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtNU0FOIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgY2FyZWZ1bGx5IGdvIHRocm91Z2ggdGhpcyBhbmQgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UmIzM5O3JlIG5vdCBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIHdpdGggdGhpcyBwYXRjaC4gRmlyc3QsIGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBhcmUgd2UgcG90ZW50aWFsbHkgbGVha2luZyBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlPyBObywgbm90aGluZyBpbiB0aGlzIGNoYW5nZSB0b3VjaGVzIHRoYXQgYXJlYS4gR29vZC4gTmV4dCwgYXJlIHdlIGJyYW5jaGluZyBvbiBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IExvb2tzIGxpa2UgdGhlIGB3LSZndDtsaGAgbGlzdCBoZWFkIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGluIGVpdGhlciBgaXB2Nl9yb3V0ZV9zZXFfc2V0dXBfd2Fsa2Agb3IgYGZpYjZfbmV0X2luaXRgLCBhbmQgdGhlbiByZWluaXRpYWxpemVkIHdpdGggYGxpc3RfZGVsX2luaXRgLCBzbyB0aGF0IHNlZW1zIHNhZmUuIE1vdmluZyBvbiwgYXJlIHdlIGludHJvZHVjaW5nIGFueSBuZXcgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMgdGhhdCBtaWdodCBiZSBwcm9ibGVtYXRpYz8gTm9wZSwgbm90aGluZyBuZXcgdGhlcmUuIEZpbmFsbHksIGFueSBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3Rocz8gTm8uCgpUaGUgcm9vdCBvZiB0aGlzIHBhdGNoIGlzIHJlYWxseSBhYm91dCBmaXhpbmcgYSBidWcgaW4gdGhlIHdhbGtlciBsaXN0IHRyYWNraW5nLCBzcGVjaWZpY2FsbHkgaW4gaG93IGBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlYCBkZXRlcm1pbmVzIHdoZW4gdG8gY2FsbCBgZmliNl93YWxrZXJfdW5saW5rYCBkdXJpbmcgYHNlcV9zdG9wYC4gVGhlIGtleSBmaXggaXMgbWFraW5nIHN1cmUgYGxpc3RfZGVsX2luaXRgIGlzIHVzZWQsIHNvIHdlIGNhbiByZWxpYWJseSBjaGVjayBpZiB0aGUgd2Fsa2VyIGlzIHN0aWxsIGxpbmtlZCB1c2luZyBgbGlzdF9lbXB0eSgmYW1wO3ctJmd0O2xoKWAuIEVzc2VudGlhbGx5LCB0aGUgY2hhbmdlIHByb3ZpZGVzIGEgY2xlYW5lciB3YXkgdG8gaGFuZGxlIHRoZSBpdGVyYXRvciBzdG9wcGluZyBwb2ludC4gTm93LCB0aGUgcGF0Y2ggKmRvZXMqIHRvdWNoIGxpbmtlZCBsaXN0cywgYnV0IGFueSBjb21tb24gbGlua2VkIGxpc3QgaXNzdWVzIGxpa2UgZG91YmxlIHVubGlua2luZywgbGlzdCBjb3JydXB0aW9uLCBvciBVc2UtQWZ0ZXItRnJlZSBzaXR1YXRpb25zIHNob3VsZCBiZSBmbGFnZ2VkIGJ5IEtBU0FOIG9yIHRoZSBsaXN0IGRlYnVnZ2luZyBmZWF0dXJlcywgbm90IEtNU0FOLiBTbywgaW4gdGVybXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgYW55IHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcywgdGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgbmV3IHJpc2tzLgoKR2l2ZW4gYWxsIG9mIHRoYXQsIEkgY2FuIGNvbmZpZGVudGx5IHNheSB0aGF0IGBOZWVkc0tNU0FOID0gZmFsc2VgLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgbGlzdF9kZWwgd2l0aCBsaXN0X2RlbF9pbml0IGluIGZpYjZfd2Fsa2VyX3VubGluaygpIGFuZCB1cGRhdGVzIGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoKSB0byBjaGVjayBsaXN0X2VtcHR5KFx1MDAyNnctXHUwMDNlbGgpIGluc3RlYWQgb2YgaW5zcGVjdGluZyB3YWxrZXIgc3RhdGUgYW5kIG5vZGUgcG9pbnRlcnMuIFRoaXMgY2hhbmdlIGZpeGVzIGxpc3QgdHJhY2tpbmcgYW5kIGF2b2lkcyBkb3VibGUgbGlzdCBkZWxldGlvbiAvIGxpc3QgY29ycnVwdGlvbiB3aGVuIHN0b3BwaW5nIHRoZSBJUHY2IHJvdXRlIHNlcSBpdGVyYXRpb24uIEFsbCByZWxldmFudCBsaXN0IHN0cnVjdHVyZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkICh2aWEgSU5JVF9MSVNUX0hFQUQgLyBsaXN0X2RlbF9pbml0IC8gbWVtc2V0KSBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayByaXNrcyBhcmUgaW50cm9kdWNlZC4gU3RhbmRhcmQgZGV0ZWN0b3JzIChLQVNBTiAvIENPTkZJR19ERUJVR19MSVNUKSBjb3ZlciBsaXN0IG1hbmlwdWxhdGlvbiBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gcmlza3MgaW4gdGhpcyBhcmVhLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGxpc3RfZGVsIHdpdGggbGlzdF9kZWxfaW5pdCBpbiBmaWI2X3dhbGtlcl91bmxpbmsoKSBhbmQgdXBkYXRlcyBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKCkgdG8gY2hlY2sgbGlzdF9lbXB0eShcdTAwMjZ3LVx1MDAzZWxoKSBpbnN0ZWFkIG9mIGluc3BlY3Rpbmcgd2Fsa2VyIHN0YXRlIGFuZCBub2RlIHBvaW50ZXJzLiBUaGlzIGNoYW5nZSBmaXhlcyBsaXN0IHRyYWNraW5nIGFuZCBhdm9pZHMgZG91YmxlIGxpc3QgZGVsZXRpb24gLyBsaXN0IGNvcnJ1cHRpb24gd2hlbiBzdG9wcGluZyB0aGUgSVB2NiByb3V0ZSBzZXEgaXRlcmF0aW9uLiBBbGwgcmVsZXZhbnQgbGlzdCBzdHJ1Y3R1cmVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCAodmlhIElOSVRfTElTVF9IRUFEIC8gbGlzdF9kZWxfaW5pdCAvIG1lbXNldCkgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgcmlza3MgYXJlIGludHJvZHVjZWQuIFN0YW5kYXJkIGRldGVjdG9ycyAoS0FTQU4gLyBDT05GSUdfREVCVUdfTElTVCkgY292ZXIgbGlzdCBtYW5pcHVsYXRpb24gYW5kIG1lbW9yeSBjb3JydXB0aW9uIHJpc2tzIGluIHRoaXMgYXJlYSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjE3OjU2LjMwOTg4MTUyMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTkwOTcxMjY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJQUk9DX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmliNl93YWxrZXJfdW5saW5rXCIsXG4gICAgXCJpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlXCIsXG4gICAgXCJpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcFwiLFxuICAgIFwiaXB2Nl9yb3V0ZV9zZXFfc3RvcFwiLFxuICAgIFwiaXB2Nl9yb3V0ZV9zZXFfc3RhcnRcIixcbiAgICBcImlwdjZfcm91dGVfc2VxX25leHRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGxpc3RfZGVsIHdpdGggbGlzdF9kZWxfaW5pdCBpbiBmaWI2X3dhbGtlcl91bmxpbmsoKSBhbmQgdXBkYXRlcyBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKCkgdG8gY2hlY2sgbGlzdF9lbXB0eShcXHUwMDI2dy1cXHUwMDNlbGgpIGluc3RlYWQgb2YgaW5zcGVjdGluZyB3YWxrZXIgc3RhdGUgYW5kIG5vZGUgcG9pbnRlcnMuIFRoaXMgY2hhbmdlIGZpeGVzIGxpc3QgdHJhY2tpbmcgYW5kIGF2b2lkcyBkb3VibGUgbGlzdCBkZWxldGlvbiAvIGxpc3QgY29ycnVwdGlvbiB3aGVuIHN0b3BwaW5nIHRoZSBJUHY2IHJvdXRlIHNlcSBpdGVyYXRpb24uIEFsbCByZWxldmFudCBsaXN0IHN0cnVjdHVyZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkICh2aWEgSU5JVF9MSVNUX0hFQUQgLyBsaXN0X2RlbF9pbml0IC8gbWVtc2V0KSBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayByaXNrcyBhcmUgaW50cm9kdWNlZC4gU3RhbmRhcmQgZGV0ZWN0b3JzIChLQVNBTiAvIENPTkZJR19ERUJVR19MSVNUKSBjb3ZlciBsaXN0IG1hbmlwdWxhdGlvbiBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gcmlza3MgaW4gdGhpcyBhcmVhLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJUHY2IEZJQiB3YWxrZXIgbWFuYWdlbWVudCBhbmQgaXRlcmF0aW9uIHN0YXRlIGNoZWNraW5nIGluIG5ldC9pcHY2L2lwNl9maWIuYyAodXNpbmcgbGlzdF9kZWxfaW5pdCBvbiB1bmxpbmtpbmcgYW5kIGNoZWNraW5nICFsaXN0X2VtcHR5IGZvciBhY3RpdmUgaXRlcmF0b3Igc3RhdGUpLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSAvcHJvYy9uZXQvaXB2Nl9yb3V0ZSBzZXFfZmlsZSBvcGVyYXRpb25zIGFuZCBCUEYgSVB2NiByb3V0ZSBpdGVyYXRvcnMgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxNzo1Ni4zMDk4ODczODJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTAzMjIyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDVjNDY0YzAyZGJmMDc4ZjU4OTliNzg0MmM5OGIwNGEzZGE4NDcxZDRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAwODoxNzo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmNcXG5pbmRleCAzZTM4MmJhMTU3M2UzLi45ZWE3NTcwM2IzOGQ0IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNl9maWIuY1xcbisrKyBiL25ldC9pcHY2L2lwNl9maWIuY1xcbkBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyB2b2lkIGZpYjZfd2Fsa2VyX2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpXFxuIHN0YXRpYyB2b2lkIGZpYjZfd2Fsa2VyX3VubGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X3dhbGtlciAqdylcXG4ge1xcbiBcXHR3cml0ZV9sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XFxuLVxcdGxpc3RfZGVsKFxcdTAwMjZ3LVxcdTAwM2VsaCk7XFxuK1xcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnctXFx1MDAzZWxoKTtcXG4gXFx0d3JpdGVfdW5sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XFxuIH1cXG4gXFxuQEAgLTI3NjAsNyArMjc2MCw3IEBAIHN0YXRpYyB2b2lkICppcHY2X3JvdXRlX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxuIHN0YXRpYyBib29sIGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcilcXG4ge1xcbiBcXHRzdHJ1Y3QgZmliNl93YWxrZXIgKncgPSBcXHUwMDI2aXRlci1cXHUwMDNldztcXG4tXFx0cmV0dXJuIHctXFx1MDAzZW5vZGUgXFx1MDAyNlxcdTAwMjYgISh3LVxcdTAwM2VzdGF0ZSA9PSBGV1NfVSBcXHUwMDI2XFx1MDAyNiB3LVxcdTAwM2Vub2RlID09IHctXFx1MDAzZXJvb3QpO1xcbitcXHRyZXR1cm4gdy1cXHUwMDNlbm9kZSBcXHUwMDI2XFx1MDAyNiAhbGlzdF9lbXB0eShcXHUwMDI2dy1cXHUwMDNlbGgpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTc6NTYuOTIxNjEyODUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo5MDg2NjA3MDA2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJQUk9DX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmliNl93YWxrZXJfdW5saW5rXCIsXG4gICAgXCJpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlXCIsXG4gICAgXCJpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcFwiLFxuICAgIFwiaXB2Nl9yb3V0ZV9zZXFfc3RvcFwiLFxuICAgIFwiaXB2Nl9yb3V0ZV9zZXFfc3RhcnRcIixcbiAgICBcImlwdjZfcm91dGVfc2VxX25leHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJUHY2IEZJQiB3YWxrZXIgbWFuYWdlbWVudCBhbmQgaXRlcmF0aW9uIHN0YXRlIGNoZWNraW5nIGluIG5ldC9pcHY2L2lwNl9maWIuYyAodXNpbmcgbGlzdF9kZWxfaW5pdCBvbiB1bmxpbmtpbmcgYW5kIGNoZWNraW5nICFsaXN0X2VtcHR5IGZvciBhY3RpdmUgaXRlcmF0b3Igc3RhdGUpLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSAvcHJvYy9uZXQvaXB2Nl9yb3V0ZSBzZXFfZmlsZSBvcGVyYXRpb25zIGFuZCBCUEYgSVB2NiByb3V0ZSBpdGVyYXRvcnMgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVjNDY0YzAyZGJmMDc4ZjU4OTliNzg0MmM5OGIwNGEzZGE4NDcxZDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDA4OjE3OjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2ZpYi5jIGIvbmV0L2lwdjYvaXA2X2ZpYi5jXG5pbmRleCAzZTM4MmJhMTU3M2UzLi45ZWE3NTcwM2IzOGQ0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X2ZpYi5jXG4rKysgYi9uZXQvaXB2Ni9pcDZfZmliLmNcbkBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyB2b2lkIGZpYjZfd2Fsa2VyX2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4gc3RhdGljIHZvaWQgZmliNl93YWxrZXJfdW5saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxuIHtcbiBcdHdyaXRlX2xvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XG4tXHRsaXN0X2RlbChcdTAwMjZ3LVx1MDAzZWxoKTtcbitcdGxpc3RfZGVsX2luaXQoXHUwMDI2dy1cdTAwM2VsaCk7XG4gXHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XG4gfVxuIFxuQEAgLTI3NjAsNyArMjc2MCw3IEBAIHN0YXRpYyB2b2lkICppcHY2X3JvdXRlX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXG4gc3RhdGljIGJvb2wgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZShzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyKVxuIHtcbiBcdHN0cnVjdCBmaWI2X3dhbGtlciAqdyA9IFx1MDAyNml0ZXItXHUwMDNldztcbi1cdHJldHVybiB3LVx1MDAzZW5vZGUgXHUwMDI2XHUwMDI2ICEody1cdTAwM2VzdGF0ZSA9PSBGV1NfVSBcdTAwMjZcdTAwMjYgdy1cdTAwM2Vub2RlID09IHctXHUwMDNlcm9vdCk7XG4rXHRyZXR1cm4gdy1cdTAwM2Vub2RlIFx1MDAyNlx1MDAyNiAhbGlzdF9lbXB0eShcdTAwMjZ3LVx1MDAzZWxoKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxNzo1Ni45MjE2MTQzMTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzY5Nzc0MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy5cblxuKipBbmFseXppbmcgdGhpcyBLZXJuZWwgUGF0Y2gqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIG5hdHVyYWxseSwgdGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyBkaXZlIGludG8gdGhlIGNvZGUuIE15IGluaXRpYWwgc3RlcCB3aWxsIGJlIHRvIGV4YW1pbmUgYG5ldC9pcHY2L2lwNl9maWIuY2Ag4oCTIHRoYXQncyB3aGVyZSB0aGUgY29yZSBjaGFuZ2VzIHNlZW0gdG8gYmUuIEkgd2FudCB0byBzZWUgdGhpcyBwYXRjaCBpbiBpdHMgcHJvcGVyIGNvbnRleHQuIEknbSBnb2luZyB0byB1c2UgbXkgdHlwaWNhbCBkZWJ1Z2dpbmcgdG9vbHMsIGxpa2VseSBhIGNvbWJpbmF0aW9uIG9mIGBnaXQgYmxhbWVgLCBgZ3JlcGAgYW5kIGEgZ29vZCBJREUgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZSwgdW5kZXJzdGFuZCB0aGUgaGlzdG9yeSwgYW5kIGRldGVybWluZSB3aHkgdGhlc2UgcGFydGljdWxhciBsaW5lcyB3ZXJlIHRvdWNoZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBvZiB0aGlzIHNlY3Rpb24gb2YgdGhlIGNvZGUsIGhvdyB0aGUgY2hhbmdlcyBmaXQgaW50byB0aGUgZXhpc3RpbmcgYXJjaGl0ZWN0dXJlLCBhbmQgd2hhdCB0aGVpciBpbnRlbmRlZCBlZmZlY3QgaXMuIEknbGwgZm9jdXMgb24gdGhlIGFyZWEgYXJvdW5kIHRoZSBtb2RpZmllZCBsaW5lcywgdGFraW5nIGluIGFzIG11Y2ggY29udGV4dCBhcyBJIGNhbi4gVGhpcyBpcyB0aGUgZm91bmRhdGlvbiB1cG9uIHdoaWNoIEknbGwgYnVpbGQgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNDMsIk91dHB1dFRva2VucyI6NzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjE4OjAyLjI5MTM5MjE0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9pcDZfZmliLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzA6XFx0ICpcXHRyZXN1bHQgb2YgcmVkaXJlY3RzLCBwYXRoIE1UVSBjaGFuZ2VzLCBldGMuXFxuICA3MTpcXHQgKi9cXG4gIDcyOlxcdFxcbiAgNzM6XFx0c3RhdGljIHZvaWQgZmliNl9nY190aW1lcl9jYihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XFxuICA3NDpcXHRcXG4gIDc1OlxcdCNkZWZpbmUgRk9SX1dBTEtFUlMobmV0LCB3KSBcXFxcXFxuICA3NjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsIFxcdTAwMjYobmV0KS1cXHUwMDNlaXB2Ni5maWI2X3dhbGtlcnMsIGxoKVxcbiAgNzc6XFx0XFxuICA3ODpcXHRzdGF0aWMgdm9pZCBmaWI2X3dhbGtlcl9saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbiAgNzk6XFx0e1xcbiAgODA6XFx0XFx0d3JpdGVfbG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xcbiAgODE6XFx0XFx0bGlzdF9hZGQoXFx1MDAyNnctXFx1MDAzZWxoLCBcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2Vycyk7XFxuICA4MjpcXHRcXHR3cml0ZV91bmxvY2tfYmgoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcXG4gIDgzOlxcdH1cXG4gIDg0OlxcdFxcbiAgODU6XFx0c3RhdGljIHZvaWQgZmliNl93YWxrZXJfdW5saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbiAgODY6XFx0e1xcbiAgODc6XFx0XFx0d3JpdGVfbG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xcbiAgODg6XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2dy1cXHUwMDNlbGgpO1xcbiAgODk6XFx0XFx0d3JpdGVfdW5sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XFxuICA5MDpcXHR9XFxuICA5MTpcXHRcXG4gIDkyOlxcdHN0YXRpYyBpbnQgZmliNl9uZXdfc2VybnVtKHN0cnVjdCBuZXQgKm5ldClcXG4gIDkzOlxcdHtcXG4gIDk0OlxcdFxcdGludCBuZXcsIG9sZCA9IGF0b21pY19yZWFkKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl9zZXJudW0pO1xcbiAgOTU6XFx0XFxuICA5NjpcXHRcXHRkbyB7XFxuICA5NzpcXHRcXHRcXHRuZXcgPSBvbGQgXFx1MDAzYyBJTlRfTUFYID8gb2xkICsgMSA6IDE7XFxuICA5ODpcXHRcXHR9IHdoaWxlICghYXRvbWljX3RyeV9jbXB4Y2hnKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl9zZXJudW0sIFxcdTAwMjZvbGQsIG5ldykpO1xcbiAgOTk6XFx0XFxuIDEwMDpcXHRcXHRyZXR1cm4gbmV3O1xcbiAxMDE6XFx0fVxcbiAxMDI6XFx0XFxuIDEwMzpcXHRlbnVtIHtcXG4gMTA0OlxcdFxcdEZJQjZfTk9fU0VSTlVNX0NIQU5HRSA9IDAsXFxuIDEwNTpcXHR9O1xcbiAxMDY6XFx0XFxuIDEwNzpcXHR2b2lkIGZpYjZfdXBkYXRlX3Nlcm51bShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSlcXG4gMTA4OlxcdHtcXG4gMTA5OlxcdFxcdHN0cnVjdCBmaWI2X25vZGUgKmZuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxODowMi4yOTE1MjMzMDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9pcDZfZmliLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjc1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjc1MDpcXHRcXHRpZiAoaXRlci1cXHUwMDNldGJsKSB7XFxuMjc1MTpcXHRcXHRcXHRsb2ZmX3QgcCA9IDA7XFxuMjc1MjpcXHRcXG4yNzUzOlxcdFxcdFxcdGlwdjZfcm91dGVfc2VxX3NldHVwX3dhbGsoaXRlciwgbmV0KTtcXG4yNzU0OlxcdFxcdFxcdHJldHVybiBpcHY2X3JvdXRlX3NlcV9uZXh0KHNlcSwgTlVMTCwgXFx1MDAyNnApO1xcbjI3NTU6XFx0XFx0fSBlbHNlIHtcXG4yNzU2OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjI3NTc6XFx0XFx0fVxcbjI3NTg6XFx0fVxcbjI3NTk6XFx0XFxuMjc2MDpcXHRzdGF0aWMgYm9vbCBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIpXFxuMjc2MTpcXHR7XFxuMjc2MjpcXHRcXHRzdHJ1Y3QgZmliNl93YWxrZXIgKncgPSBcXHUwMDI2aXRlci1cXHUwMDNldztcXG4yNzYzOlxcdFxcdHJldHVybiB3LVxcdTAwM2Vub2RlIFxcdTAwMjZcXHUwMDI2ICFsaXN0X2VtcHR5KFxcdTAwMjZ3LVxcdTAwM2VsaCk7XFxuMjc2NDpcXHR9XFxuMjc2NTpcXHRcXG4yNzY2OlxcdHN0YXRpYyB2b2lkIGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbjI3Njc6XFx0XFx0X19yZWxlYXNlcyhSQ1UpXFxuMjc2ODpcXHR7XFxuMjc2OTpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTtcXG4yNzcwOlxcdFxcdHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIgPSBzZXEtXFx1MDAzZXByaXZhdGU7XFxuMjc3MTpcXHRcXG4yNzcyOlxcdFxcdGlmIChpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKGl0ZXIpKVxcbjI3NzM6XFx0XFx0XFx0ZmliNl93YWxrZXJfdW5saW5rKG5ldCwgXFx1MDAyNml0ZXItXFx1MDAzZXcpO1xcbjI3NzQ6XFx0XFxuMjc3NTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yNzc2OlxcdH1cXG4yNzc3OlxcdFxcbjI3Nzg6XFx0I2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxcbjI3Nzk6XFx0c3RhdGljIGludCBpcHY2X3JvdXRlX3Byb2dfc2VxX3Nob3coc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbjI3ODA6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfaXRlcl9tZXRhICptZXRhLFxcbjI3ODE6XFx0XFx0XFx0XFx0XFx0ICAgIHZvaWQgKnYpXFxuMjc4MjpcXHR7XFxuMjc4MzpcXHRcXHRzdHJ1Y3QgYnBmX2l0ZXJfX2lwdjZfcm91dGUgY3R4O1xcbjI3ODQ6XFx0XFxuMjc4NTpcXHRcXHRjdHgubWV0YSA9IG1ldGE7XFxuMjc4NjpcXHRcXHRjdHgucnQgPSB2O1xcbjI3ODc6XFx0XFx0cmV0dXJuIGJwZl9pdGVyX3J1bl9wcm9nKHByb2csIFxcdTAwMjZjdHgpO1xcbjI3ODg6XFx0fVxcbjI3ODk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjE4OjAyLjI5MTYyNDU3OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MTAyNTUzMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGVlcCBEaXZlIGludG8gSVB2NiBSb3V0aW5nIEl0ZXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgSVB2NiByb3V0aW5nIHRhYmxlIGl0ZXJhdGlvbiB3b3Jrcy4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgYGlwdjZfcm91dGVfaXRlcl9hY3RpdmVgLCBgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3BgLCBhbmQgYGlwdjZfcm91dGVfc2VxX3N0YXJ0YCwgYW5kIHRoZSBjYWxsZXJzIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGVtIHdpdGhpbiBgbmV0L2lwdjYvaXA2X2ZpYi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlcXVlbmNpbmcgYW5kIGxpZmVjeWNsZSBvZiB0aGVzZSBpdGVyYXRvciBmdW5jdGlvbnMuIFRoaXMgZmVlbHMgbGlrZSBpdCBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbiBpbnRvIHRoaXMgcGFydCBvZiB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBpcyBiZWluZyBpdGVyYXRlZCBvdmVyLCBob3cgaXQncyBiZWluZyBhY2Nlc3NlZCwgYW5kIHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIHRoZSBzdGFydCBhbmQgc3RvcCBldmVudHMuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0cyBpbnRvIGhvdyB0aGUga2VybmVsIHRyYXZlcnNlcyB0aGUgSVB2NiByb3V0aW5nIHRhYmxlIGVmZmljaWVudGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTYwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxODowNC45MDE4ODI1MDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvaXA2X2ZpYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNzAwOlxcdFxcdFxcdGl0ZXItXFx1MDAzZXcuc2tpcCA9IGl0ZXItXFx1MDAzZXcuY291bnQ7XFxuMjcwMTpcXHRcXHR9XFxuMjcwMjpcXHR9XFxuMjcwMzpcXHRcXG4yNzA0OlxcdHN0YXRpYyB2b2lkICppcHY2X3JvdXRlX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcXG4yNzA1OlxcdHtcXG4yNzA2OlxcdFxcdGludCByO1xcbjI3MDc6XFx0XFx0c3RydWN0IGZpYjZfaW5mbyAqbjtcXG4yNzA4OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpO1xcbjI3MDk6XFx0XFx0c3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlciA9IHNlcS1cXHUwMDNlcHJpdmF0ZTtcXG4yNzEwOlxcdFxcbjI3MTE6XFx0XFx0KysoKnBvcyk7XFxuMjcxMjpcXHRcXHRpZiAoIXYpXFxuMjcxMzpcXHRcXHRcXHRnb3RvIGl0ZXJfdGFibGU7XFxuMjcxNDpcXHRcXG4yNzE1OlxcdFxcdG4gPSByY3VfZGVyZWZlcmVuY2UoKChzdHJ1Y3QgZmliNl9pbmZvICopdiktXFx1MDAzZWZpYjZfbmV4dCk7XFxuMjcxNjpcXHRcXHRpZiAobilcXG4yNzE3OlxcdFxcdFxcdHJldHVybiBuO1xcbjI3MTg6XFx0XFxuMjcxOTpcXHRpdGVyX3RhYmxlOlxcbjI3MjA6XFx0XFx0aXB2Nl9yb3V0ZV9jaGVja19zZXJudW0oaXRlcik7XFxuMjcyMTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNml0ZXItXFx1MDAzZXRibC1cXHUwMDNldGI2X2xvY2spO1xcbjI3MjI6XFx0XFx0ciA9IGZpYjZfd2Fsa19jb250aW51ZShcXHUwMDI2aXRlci1cXHUwMDNldyk7XFxuMjcyMzpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aXRlci1cXHUwMDNldGJsLVxcdTAwM2V0YjZfbG9jayk7XFxuMjcyNDpcXHRcXHRpZiAociBcXHUwMDNlIDApIHtcXG4yNzI1OlxcdFxcdFxcdHJldHVybiBpdGVyLVxcdTAwM2V3LmxlYWY7XFxuMjcyNjpcXHRcXHR9IGVsc2UgaWYgKHIgXFx1MDAzYyAwKSB7XFxuMjcyNzpcXHRcXHRcXHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCBcXHUwMDI2aXRlci1cXHUwMDNldyk7XFxuMjcyODpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4yNzI5OlxcdFxcdH1cXG4yNzMwOlxcdFxcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIFxcdTAwMjZpdGVyLVxcdTAwM2V3KTtcXG4yNzMxOlxcdFxcbjI3MzI6XFx0XFx0aXRlci1cXHUwMDNldGJsID0gaXB2Nl9yb3V0ZV9zZXFfbmV4dF90YWJsZShpdGVyLVxcdTAwM2V0YmwsIG5ldCk7XFxuMjczMzpcXHRcXHRpZiAoIWl0ZXItXFx1MDAzZXRibClcXG4yNzM0OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjI3MzU6XFx0XFxuMjczNjpcXHRcXHRpcHY2X3JvdXRlX3NlcV9zZXR1cF93YWxrKGl0ZXIsIG5ldCk7XFxuMjczNzpcXHRcXHRnb3RvIGl0ZXJfdGFibGU7XFxuMjczODpcXHR9XFxuMjczOTpcXHRcXG4yNzQwOlxcdHN0YXRpYyB2b2lkICppcHY2X3JvdXRlX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxuMjc0MTpcXHRcXHRfX2FjcXVpcmVzKFJDVSlcXG4yNzQyOlxcdHtcXG4yNzQzOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpO1xcbjI3NDQ6XFx0XFx0c3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlciA9IHNlcS1cXHUwMDNlcHJpdmF0ZTtcXG4yNzQ1OlxcdFxcbjI3NDY6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjI3NDc6XFx0XFx0aXRlci1cXHUwMDNldGJsID0gaXB2Nl9yb3V0ZV9zZXFfbmV4dF90YWJsZShOVUxMLCBuZXQpO1xcbjI3NDg6XFx0XFx0aXRlci1cXHUwMDNlc2tpcCA9ICpwb3M7XFxuMjc0OTpcXHRcXG4yNzUwOlxcdFxcdGlmIChpdGVyLVxcdTAwM2V0YmwpIHtcXG4yNzUxOlxcdFxcdFxcdGxvZmZfdCBwID0gMDtcXG4yNzUyOlxcdFxcbjI3NTM6XFx0XFx0XFx0aXB2Nl9yb3V0ZV9zZXFfc2V0dXBfd2FsayhpdGVyLCBuZXQpO1xcbjI3NTQ6XFx0XFx0XFx0cmV0dXJuIGlwdjZfcm91dGVfc2VxX25leHQoc2VxLCBOVUxMLCBcXHUwMDI2cCk7XFxuMjc1NTpcXHRcXHR9IGVsc2Uge1xcbjI3NTY6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMjc1NzpcXHRcXHR9XFxuMjc1ODpcXHR9XFxuMjc1OTpcXHRcXG4yNzYwOlxcdHN0YXRpYyBib29sIGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcilcXG4yNzYxOlxcdHtcXG4yNzYyOlxcdFxcdHN0cnVjdCBmaWI2X3dhbGtlciAqdyA9IFxcdTAwMjZpdGVyLVxcdTAwM2V3O1xcbjI3NjM6XFx0XFx0cmV0dXJuIHctXFx1MDAzZW5vZGUgXFx1MDAyNlxcdTAwMjYgIWxpc3RfZW1wdHkoXFx1MDAyNnctXFx1MDAzZWxoKTtcXG4yNzY0OlxcdH1cXG4yNzY1OlxcdFxcbjI3NjY6XFx0c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuMjc2NzpcXHRcXHRfX3JlbGVhc2VzKFJDVSlcXG4yNzY4OlxcdHtcXG4yNzY5OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpO1xcbjI3NzA6XFx0XFx0c3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlciA9IHNlcS1cXHUwMDNlcHJpdmF0ZTtcXG4yNzcxOlxcdFxcbjI3NzI6XFx0XFx0aWYgKGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoaXRlcikpXFxuMjc3MzpcXHRcXHRcXHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCBcXHUwMDI2aXRlci1cXHUwMDNldyk7XFxuMjc3NDpcXHRcXG4yNzc1OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjI3NzY6XFx0fVxcbjI3Nzc6XFx0XFxuMjc3ODpcXHQjaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpXFxuMjc3OTpcXHRzdGF0aWMgaW50IGlwdjZfcm91dGVfcHJvZ19zZXFfc2hvdyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuMjc4MDpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXFxuMjc4MTpcXHRcXHRcXHRcXHRcXHQgICAgdm9pZCAqdilcXG4yNzgyOlxcdHtcXG4yNzgzOlxcdFxcdHN0cnVjdCBicGZfaXRlcl9faXB2Nl9yb3V0ZSBjdHg7XFxuMjc4NDpcXHRcXG4yNzg1OlxcdFxcdGN0eC5tZXRhID0gbWV0YTtcXG4yNzg2OlxcdFxcdGN0eC5ydCA9IHY7XFxuMjc4NzpcXHRcXHRyZXR1cm4gYnBmX2l0ZXJfcnVuX3Byb2cocHJvZywgXFx1MDAyNmN0eCk7XFxuMjc4ODpcXHR9XFxuMjc4OTpcXHRcXG4yNzkwOlxcdHN0YXRpYyBpbnQgaXB2Nl9yb3V0ZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4yNzkxOlxcdHtcXG4yNzkyOlxcdFxcdHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIgPSBzZXEtXFx1MDAzZXByaXZhdGU7XFxuMjc5MzpcXHRcXHRzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSBtZXRhO1xcbjI3OTQ6XFx0XFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xcbjI3OTU6XFx0XFx0aW50IHJldDtcXG4yNzk2OlxcdFxcbjI3OTc6XFx0XFx0bWV0YS5zZXEgPSBzZXE7XFxuMjc5ODpcXHRcXHRwcm9nID0gYnBmX2l0ZXJfZ2V0X2luZm8oXFx1MDAyNm1ldGEsIGZhbHNlKTtcXG4yNzk5OlxcdFxcdGlmICghcHJvZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTg6MDQuOTAyMDY3NTkyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg0MDczNDQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgSVB2NiByb3V0aW5nIHNpdHVhdGlvbi5cblxuKipJbnZlc3RpZ2F0aW5nIElQdjYgUm91dGUgSXRlcmF0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZWAgYW5kIGFueSByZWxhdGVkIGZ1bmN0aW9ucy4gTGV0J3Mgc2VlIGhvdyBleHRlbnNpdmVseSB0aGVzZSBpdGVyYXRvciBmdW5jdGlvbnMgYXJlIHVzZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gTXkgcGxhbiBpcyB0byBsZXZlcmFnZSBgZ3JlcGAgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgb2NjdXJyZW5jZXMgb2YgYGlwdjZfcm91dGVfaXRlcmAgYW5kLCBjcnVjaWFsbHksIGBmaWI2X3dhbGtlcmAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHBpY3R1cmUgb2Ygd2hlcmUgdGhlc2UgdG9vbHMgYXJlIGVtcGxveWVkLiBUaGlzIHdpbGwgaGVscCB0byBkZXRlcm1pbmUgYW55IGludGVyLWRlcGVuZGVuY2llcyB3aXRoIG90aGVyIHJvdXRlIHJlbGF0ZWQgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzE1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxODowNi43NDI4MDQ1NTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE1MDQ3MDI1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9maWIuYz0yNzQwPXN0YXRpYyB2b2lkICppcHY2X3JvdXRlX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc1OS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6Mjc2MDpzdGF0aWMgYm9vbCBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIpXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NjEte1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTI3NjY9c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc3MS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6Mjc3MjpcXHRpZiAoaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZShpdGVyKSlcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc3My1cXHRcXHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCBcXHUwMDI2aXRlci1cXHUwMDNldyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjE4OjA5Ljg5MzI4MTgyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTYzNzc3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBpcHY2X3JvdXRlX3NlcV9zZXR1cF93YWxrYCBhbmQgYGl0ZXItXHUwMDNld2AgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBpcHY2X3JvdXRlX3NlcV9zZXR1cF93YWxrYCBmdW5jdGlvbiB3b3JrcyBhbmQsIHNwZWNpZmljYWxseSwgaG93IHRoZSBgaXRlci1cdTAwM2V3YCBtZW1iZXIgaXMgc2V0IHVwLiBUaGlzIGxpa2VseSBoYXMgaW1wbGljYXRpb25zIGZvciBzZXF1ZW5jZSBudW1iZXIgaGFuZGxpbmcsIHJvdXRlIHRyYXZlcnNhbCwgb3IgcG90ZW50aWFsbHkgZXZlbiBsb2NraW5nL3N5bmNocm9uaXphdGlvbiB3aXRoaW4gdGhlIElQdjYgcm91dGluZyBjb250ZXh0LiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdG8gcGlucG9pbnQgdGhlIGRlZmluaXRpb24gb2YgdGhpcyBmdW5jdGlvbiBhbmQgdHJhY2UgYmFjayB3aGVyZSB0aGUgYGl0ZXItXHUwMDNld2AgbWVtYmVyIG9mIHdoYXRldmVyIHRoZSBgaXRlcmAgc3RydWN0IGlzLCBnZXRzIGl0cyBpbml0aWFsIHZhbHVlLlxuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJcyBgaXRlci1cdTAwM2V3YCBhIHNpbXBsZSBjb3VudGVyPyBEb2VzIGl0IHJlcHJlc2VudCBhbiBvZmZzZXQgaW50byBhIGRhdGEgc3RydWN0dXJlPyBJcyB0aGVyZSBhIHBvaW50ZXIgaW52b2x2ZWQ/IFRoZSBpbml0aWFsaXphdGlvbiB3aWxsIHByb3ZpZGUgY3JpdGljYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHB1cnBvc2Ugb2YgYGl0ZXItXHUwMDNld2Agd2l0aGluIHRoaXMgcHJvY2Vzcy4gQnkgZXhhbWluaW5nIHRoaXMsIEkgY2FuIHN0YXJ0IHRvIGJ1aWxkIGEgY2xlYXIgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGUgc3lzdGVtIGlzIGRlc2lnbmVkIHRvIHdvcmsuIFRoaXMgZm91bmRhdGlvbmFsIGtub3dsZWRnZSB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb2RlJ3MgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NzAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxODoxMi4zODk2NjI1ODRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwNl9maWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjYwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjYwOlxcdFxcdGl0ZXItXFx1MDAzZXcuZnVuYyA9IGlwdjZfcm91dGVfeWllbGQ7XFxuMjY2MTpcXHRcXHRpdGVyLVxcdTAwM2V3LnJvb3QgPSBcXHUwMDI2aXRlci1cXHUwMDNldGJsLVxcdTAwM2V0YjZfcm9vdDtcXG4yNjYyOlxcdFxcdGl0ZXItXFx1MDAzZXcuc3RhdGUgPSBGV1NfSU5JVDtcXG4yNjYzOlxcdFxcdGl0ZXItXFx1MDAzZXcubm9kZSA9IGl0ZXItXFx1MDAzZXcucm9vdDtcXG4yNjY0OlxcdFxcdGl0ZXItXFx1MDAzZXcuYXJncyA9IGl0ZXI7XFxuMjY2NTpcXHRcXHRpdGVyLVxcdTAwM2VzZXJudW0gPSBSRUFEX09OQ0UoaXRlci1cXHUwMDNldy5yb290LVxcdTAwM2Vmbl9zZXJudW0pO1xcbjI2NjY6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNml0ZXItXFx1MDAzZXcubGgpO1xcbjI2Njc6XFx0XFx0ZmliNl93YWxrZXJfbGluayhuZXQsIFxcdTAwMjZpdGVyLVxcdTAwM2V3KTtcXG4yNjY4OlxcdH1cXG4yNjY5OlxcdFxcbjI2NzA6XFx0c3RhdGljIHN0cnVjdCBmaWI2X3RhYmxlICppcHY2X3JvdXRlX3NlcV9uZXh0X3RhYmxlKHN0cnVjdCBmaWI2X3RhYmxlICp0YmwsXFxuMjY3MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldCAqbmV0KVxcbjI2NzI6XFx0e1xcbjI2NzM6XFx0XFx0dW5zaWduZWQgaW50IGg7XFxuMjY3NDpcXHRcXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTtcXG4yNjc1OlxcdFxcbjI2NzY6XFx0XFx0aWYgKHRibCkge1xcbjI2Nzc6XFx0XFx0XFx0aCA9ICh0YmwtXFx1MDAzZXRiNl9pZCBcXHUwMDI2IChGSUI2X1RBQkxFX0hBU0hTWiAtIDEpKSArIDE7XFxuMjY3ODpcXHRcXHRcXHRub2RlID0gcmN1X2RlcmVmZXJlbmNlKGhsaXN0X25leHRfcmN1KFxcdTAwMjZ0YmwtXFx1MDAzZXRiNl9obGlzdCkpO1xcbjI2Nzk6XFx0XFx0fSBlbHNlIHtcXG4yNjgwOlxcdFxcdFxcdGggPSAwO1xcbjI2ODE6XFx0XFx0XFx0bm9kZSA9IE5VTEw7XFxuMjY4MjpcXHRcXHR9XFxuMjY4MzpcXHRcXG4yNjg0OlxcdFxcdHdoaWxlICghbm9kZSBcXHUwMDI2XFx1MDAyNiBoIFxcdTAwM2MgRklCNl9UQUJMRV9IQVNIU1opIHtcXG4yNjg1OlxcdFxcdFxcdG5vZGUgPSByY3VfZGVyZWZlcmVuY2UoXFxuMjY4NjpcXHRcXHRcXHRcXHRobGlzdF9maXJzdF9yY3UoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5maWJfdGFibGVfaGFzaFtoKytdKSk7XFxuMjY4NzpcXHRcXHR9XFxuMjY4ODpcXHRcXHRyZXR1cm4gaGxpc3RfZW50cnlfc2FmZShub2RlLCBzdHJ1Y3QgZmliNl90YWJsZSwgdGI2X2hsaXN0KTtcXG4yNjg5OlxcdH1cXG4yNjkwOlxcdFxcbjI2OTE6XFx0c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9jaGVja19zZXJudW0oc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcilcXG4yNjkyOlxcdHtcXG4yNjkzOlxcdFxcdGludCBzZXJudW0gPSBSRUFEX09OQ0UoaXRlci1cXHUwMDNldy5yb290LVxcdTAwM2Vmbl9zZXJudW0pO1xcbjI2OTQ6XFx0XFxuMjY5NTpcXHRcXHRpZiAoaXRlci1cXHUwMDNlc2VybnVtICE9IHNlcm51bSkge1xcbjI2OTY6XFx0XFx0XFx0aXRlci1cXHUwMDNlc2VybnVtID0gc2VybnVtO1xcbjI2OTc6XFx0XFx0XFx0aXRlci1cXHUwMDNldy5zdGF0ZSA9IEZXU19JTklUO1xcbjI2OTg6XFx0XFx0XFx0aXRlci1cXHUwMDNldy5ub2RlID0gaXRlci1cXHUwMDNldy5yb290O1xcbjI2OTk6XFx0XFx0XFx0V0FSTl9PTihpdGVyLVxcdTAwM2V3LnNraXApO1xcbjI3MDA6XFx0XFx0XFx0aXRlci1cXHUwMDNldy5za2lwID0gaXRlci1cXHUwMDNldy5jb3VudDtcXG4yNzAxOlxcdFxcdH1cXG4yNzAyOlxcdH1cXG4yNzAzOlxcdFxcbjI3MDQ6XFx0c3RhdGljIHZvaWQgKmlwdjZfcm91dGVfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxODoxMi4zODk4MDI4MzRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgxNzY2NjU1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6XG5cbioqRGlnZ2luZyBEZWVwZXIgaW50byBgZmliNl93YWxrZXJgIEludGVyYWN0aW9ucyoqXG5cbkFscmlnaHQsIHNvIEknbSB0cnlpbmcgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgYGZpYjZfd2Fsa2VyX3VubGlua2AgYW5kIGBmaWI2X3dhbGtlcl9saW5rYCBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgd2hlcmUgZWxzZSB0aGV5IGFyZSBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGBpcDZfZmliLmNgIGZpbGUgb3IgaW5kZWVkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGNvZGUgYmFzZS4gTXkgZ29hbCBpcyB0byBtYXAgb3V0IGV2ZXJ5IHNpbmdsZSBpbnN0YW5jZSBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhcm91bmQgZWFjaCB1c2UuIEtub3dpbmcgdGhlIGNhbGwgZ3JhcGggd2lsbCBoZWxwIG1lIGFudGljaXBhdGUgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb3IgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBhbmQgb3B0aW1pemF0aW9uLiBBIHRob3JvdWdoIGludmVzdGlnYXRpb24gaXMgdGhlIG9ubHkgd2F5IHRvIGVuc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyZSBhbmQgY2FuIG1ha2UgY2hhbmdlcyB3aXRoIGNvbmZpZGVuY2UuIEkgaGF2ZSB0byBsb29rIGJleW9uZCBqdXN0IHRoZSBpbW1lZGlhdGUgc2NvcGUgYW5kIGNvbnNpZGVyIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucy4gSXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgYW5hbHl6aW5nIGFuZCBlbnN1cmluZyBzdGFiaWxpdHkgZm9yIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODQ5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxODozMC41NjY0NzExMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0NzkzMjY2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWI2X3dhbGtlcl9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiLmNsYW5nLWZvcm1hdD03MT1Gb3JFYWNoTWFjcm9zOlxcbi0tXFxuLmNsYW5nLWZvcm1hdC0yOTUtICAtICdmb3JfZWFjaF9maWI2X25vZGVfcnRfcmN1J1xcbi5jbGFuZy1mb3JtYXQ6Mjk2OiAgLSAnZm9yX2VhY2hfZmliNl93YWxrZXJfcnQnXFxuLmNsYW5nLWZvcm1hdC0yOTctICAtICdmb3JfZWFjaF9maWxlX2xvY2snXFxuLS1cXG5pbmNsdWRlL25ldC9pcDZfZmliLmg9MjIyPXN0cnVjdCBmaWI2X3Jlc3VsdCB7XFxuLS1cXG5pbmNsdWRlL25ldC9pcDZfZmliLmgtMjMzLVxcbmluY2x1ZGUvbmV0L2lwNl9maWIuaDoyMzQ6I2RlZmluZSBmb3JfZWFjaF9maWI2X3dhbGtlcl9ydCh3KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL25ldC9pcDZfZmliLmgtMjM1LVxcdGZvciAocnQgPSAodyktXFx1MDAzZWxlYWY7IHJ0O1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjYuaD02Nj1zdHJ1Y3QgbmV0bnNfaXB2NiB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRucy9pcHY2LmgtODItXFx0c3RydWN0IGxpc3RfaGVhZFxcdGZpYjZfd2Fsa2VycztcXG5pbmNsdWRlL25ldC9uZXRucy9pcHY2Lmg6ODM6XFx0cndsb2NrX3RcXHRcXHRmaWI2X3dhbGtlcl9sb2NrO1xcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjYuaC04NC1cXHRzcGlubG9ja190XFx0XFx0ZmliNl9nY19sb2NrO1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTczPXN0YXRpYyB2b2lkIGZpYjZfZ2NfdGltZXJfY2Ioc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTc3LVxcbm5ldC9pcHY2L2lwNl9maWIuYzo3ODpzdGF0aWMgdm9pZCBmaWI2X3dhbGtlcl9saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbm5ldC9pcHY2L2lwNl9maWIuYy03OS17XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjgwOlxcdHdyaXRlX2xvY2tfYmgoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtODEtXFx0bGlzdF9hZGQoXFx1MDAyNnctXFx1MDAzZWxoLCBcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2Vycyk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjgyOlxcdHdyaXRlX3VubG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xcbm5ldC9pcHY2L2lwNl9maWIuYy04My19XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTg0LVxcbm5ldC9pcHY2L2lwNl9maWIuYzo4NTpzdGF0aWMgdm9pZCBmaWI2X3dhbGtlcl91bmxpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTg2LXtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6ODc6XFx0d3JpdGVfbG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xcbm5ldC9pcHY2L2lwNl9maWIuYy04OC1cXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZ3LVxcdTAwM2VsaCk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjg5OlxcdHdyaXRlX3VubG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xcbm5ldC9pcHY2L2lwNl9maWIuYy05MC19XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9NTI4PXN0YXRpYyBpbnQgZmliNl9kdW1wX25vZGUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTUzMi1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6NTMzOlxcdGZvcl9lYWNoX2ZpYjZfd2Fsa2VyX3J0KHcpIHtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtNTM0LVxcdFxcdHJlcyA9IHJ0Nl9kdW1wX3JvdXRlKHJ0LCB3LVxcdTAwM2VhcmdzLCB3LVxcdTAwM2Vza2lwX2luX25vZGUpO1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTU2Mj1zdGF0aWMgdm9pZCBmaWI2X2R1bXBfZW5kKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy01NjktXFx0XFx0XFx0Y2ItXFx1MDAzZWFyZ3NbNF0gPSAwO1xcbm5ldC9pcHY2L2lwNl9maWIuYzo1NzA6XFx0XFx0XFx0ZmliNl93YWxrZXJfdW5saW5rKG5ldCwgdyk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTU3MS1cXHRcXHR9XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9NTg1PXN0YXRpYyBpbnQgZmliNl9kdW1wX3RhYmxlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy02MjItXFx0XFx0aWYgKHJlcyBcXHUwMDNjPSAwKSB7XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjYyMzpcXHRcXHRcXHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCB3KTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtNjI0LVxcdFxcdFxcdGNiLVxcdTAwM2VhcmdzWzRdID0gMDtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0xODQxPXN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICpmaWI2X3JlcGFpcl90cmVlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0xOTMyLVxcbm5ldC9pcHY2L2lwNl9maWIuYzoxOTMzOlxcdFxcdHJlYWRfbG9jayhcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0xOTM0LVxcdFxcdEZPUl9XQUxLRVJTKG5ldCwgdykge1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTE5NTYtXFx0XFx0fVxcbm5ldC9pcHY2L2lwNl9maWIuYzoxOTU3OlxcdFxcdHJlYWRfdW5sb2NrKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTE5NTgtXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MTk2OT1zdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLFxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwMjUtXFx0LyogQWRqdXN0IHdhbGtlcnMgKi9cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjAyNjpcXHRyZWFkX2xvY2soXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjAyNy1cXHRGT1JfV0FMS0VSUyhuZXQsIHcpIHtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yMDM1LVxcdH1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjAzNjpcXHRyZWFkX3VubG9jayhcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yMDM3LVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTIyMjA9c3RhdGljIGludCBmaWI2X3dhbGsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjIyNi1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjIyNzpcXHRmaWI2X3dhbGtlcl9saW5rKG5ldCwgdyk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIyMjgtXFx0cmVzID0gZmliNl93YWxrX2NvbnRpbnVlKHcpO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjI5LVxcdGlmIChyZXMgXFx1MDAzYz0gMClcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjIzMDpcXHRcXHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCB3KTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjIzMS1cXHRyZXR1cm4gcmVzO1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTIyMzQ9c3RhdGljIGludCBmaWI2X2NsZWFuX25vZGUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIyNTMtXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjIyNTQ6XFx0Zm9yX2VhY2hfZmliNl93YWxrZXJfcnQodykge1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjU1LVxcdFxcdHJlcyA9IGMtXFx1MDAzZWZ1bmMocnQsIGMtXFx1MDAzZWFyZyk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjQ2ND1zdGF0aWMgaW50IF9fbmV0X2luaXQgZmliNl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQ3Ny1cXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfZ2NfbG9jayk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI0Nzg6XFx0cndsb2NrX2luaXQoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQ3OS1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2Vycyk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjY1Nj1zdGF0aWMgdm9pZCBpcHY2X3JvdXRlX3NlcV9zZXR1cF93YWxrKHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjY2Ni1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2aXRlci1cXHUwMDNldy5saCk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI2Njc6XFx0ZmliNl93YWxrZXJfbGluayhuZXQsIFxcdTAwMjZpdGVyLVxcdTAwM2V3KTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjY2OC19XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjcwND1zdGF0aWMgdm9pZCAqaXB2Nl9yb3V0ZV9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjcyNi1cXHR9IGVsc2UgaWYgKHIgXFx1MDAzYyAwKSB7XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI3Mjc6XFx0XFx0ZmliNl93YWxrZXJfdW5saW5rKG5ldCwgXFx1MDAyNml0ZXItXFx1MDAzZXcpO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yNzI4LVxcdFxcdHJldHVybiBOVUxMO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yNzI5LVxcdH1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjczMDpcXHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCBcXHUwMDI2aXRlci1cXHUwMDNldyk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3MzEtXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9Mjc2Nj1zdGF0aWMgdm9pZCBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNzcyLVxcdGlmIChpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKGl0ZXIpKVxcbm5ldC9pcHY2L2lwNl9maWIuYzoyNzczOlxcdFxcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIFxcdTAwMjZpdGVyLVxcdTAwM2V3KTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc3NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTg6MzIuNTE0NDEyNDAyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNTExNDEzMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUHY2IEZJQiBXYWxrZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBJUHY2IEZJQiB3YWxrZXIgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L2lwdjYvaXA2X2ZpYi5jYC4gTGV0J3MgYnJlYWsgZG93biB0aGUga2V5IGNoYW5nZXMuIEl0IGxvb2tzIGxpa2UgYGZpYjZfd2Fsa2VyX3VubGluaygpYCBoYXMgc3dpdGNoZWQgZnJvbSBhIHNpbXBsZSBgbGlzdF9kZWwoKWAgdG8gYGxpc3RfZGVsX2luaXQoKWAgb24gdGhlIHdhbGtlcidzIGxpc3QgaGVhZCwgYHctXHUwMDNlbGhgLiBUaGF0J3MgYSBzdWJ0bGUgYnV0IHBvdGVudGlhbGx5IHNpZ25pZmljYW50IGNoYW5nZSBpbiBob3cgdGhlIGxpc3QgaXMgaGFuZGxlZCBhZnRlciByZW1vdmFsLiBJIHdvbmRlciBpZiB0aGVyZSB3ZXJlIHNvbWUgaXNzdWVzIHdpdGggZGFuZ2xpbmcgcG9pbnRlcnMgb3IgcmV1c2UgY29uY2VybnMgYmVpbmcgYWRkcmVzc2VkIHRoZXJlLlxuXG5UaGUgb3RoZXIgbWFqb3IgbW9kaWZpY2F0aW9uIGNvbmNlcm5zIGBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKClgLiBJdCdzIGNoYW5nZWQgdGhlIGNvbmRpdGlvbiBmb3IgZGV0ZXJtaW5pbmcgYW4gXCJhY3RpdmVcIiB3YWxrZXIuIFByZXZpb3VzbHkgaXQgY2hlY2tlZCBgdy1cdTAwM2Vub2RlIFx1MDAyNlx1MDAyNiAhKHctXHUwMDNlc3RhdGUgPT0gRldTX1UgXHUwMDI2XHUwMDI2IHctXHUwMDNlbm9kZSA9PSB3LVx1MDAzZXJvb3QpYCwgYnV0IG5vdyBpdCdzIGNoZWNraW5nIGB3LVx1MDAzZW5vZGUgXHUwMDI2XHUwMDI2ICFsaXN0X2VtcHR5KFx1MDAyNnctXHUwMDNlbGgpYC4gVGhlIG9sZCBjb25kaXRpb24gbG9va3MgbGlrZSBpdCB3YXMgYXR0ZW1wdGluZyB0byBleGNsdWRlIHNvbWUgd2Fsa2VycyBpbiBhICd1bnN0YWJsZScgc3RhdGUgYnV0IG5vdyB0aGUgbmV3IGNvbmRpdGlvbiBzaW1wbHkgY2hlY2tzIHRoYXQgdGhlIHdhbGtlciBpcyBsaW5rZWQgdG8gdGhlIGxpc3QuIFRoaXMgY291bGQgaW1wcm92ZSBwZXJmb3JtYW5jZSwgb3IgY291bGQgaGF2ZSBiZWVuIGNoYW5nZWQgZm9yIG90aGVyIHJlYXNvbnMuXG5cbk5vdywgbGV0J3Mgc2VlIGhvdyB0aGVzZSBjaGFuZ2VzIG1pZ2h0IGltcGFjdCB0aGUgdmlzaWJpbGl0eSBvZiBJUHY2IHJvdXRlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHdhbGtlcnMgYXJlIHVzZWQgYnkgdGhlIHN5c3RlbS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgaW50byBob3cgSVB2NiByb3V0ZXMgYXJlIHJlYWQgdmlhIC9wcm9jL25ldC9pcHY2X3JvdXRlLCBvciBob3cgQlBGIGl0ZXJhdG9ycywgb3IgTmV0bGluayBpbnRlcmZhY2Ugd2l0aCBgaXAgcm91dGUgc2hvd2Agb3Igc2ltaWxhciBjb21tYW5kcyBhcmUgaW1wbGVtZW50ZWQuIEknbGwgbmVlZCB0byBsb2NhdGUgd2hlcmUgdGhlIHJvdXRlIGluZm9ybWF0aW9uIGlzIGV4cG9zZWQgdGhyb3VnaCB0aG9zZSBtZWNoYW5pc21zLiBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb2RlIGluIGBuZXQvaXB2Ni9pcDZfZmliLmNgIHdoZXJlIGZ1bmN0aW9ucyBsaWtlIGBpcHY2X3JvdXRlX3NlcV9vcHNgIG9yIHNpbWlsYXIsIHRoYXQgaGFuZGxlIHRoZSBkYXRhIGFjY2VzcywgYXJlIGRlZmluZWQuIEZyb20gdGhlcmUsIEknbGwgYmUgYWJsZSB0byB0cmFjZSBob3cgdGhlc2Ugd2Fsa2VyIG1vZGlmaWNhdGlvbnMgZGlyZWN0bHkgaW1wYWN0IHRoZSByZXRyaWV2YWwgYW5kIHByZXNlbnRhdGlvbiBvZiB0aGUgcm91dGluZyBkYXRhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUzNiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxODozNS41NjU1NTY0ODFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjQxMDMzNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaXA2X2ZpYi5jPTI3NjA9c3RhdGljIGJvb2wgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZShzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyKVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NjUtXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI3NjY6c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NjctXFx0X19yZWxlYXNlcyhSQ1UpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjgwOD1zdGF0aWMgdm9pZCBpcHY2X3JvdXRlX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI4MTktXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI4MjA6XFx0aXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc2VxLCB2KTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjgyMS19XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjgyOD1zdGF0aWMgdm9pZCBpcHY2X3JvdXRlX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yODI5LXtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjgzMDpcXHRpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcChzZXEsIHYpO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yODMxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTg6MzcuMzg5NjY1MTE0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxOTAyNTIxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUHY2IFJvdXRlIFNlcXVlbmNlIEZpbGUgU3RvcCBPcGVyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGBpcHY2X3JvdXRlX3NlcV9zdG9wYC4gUmlnaHQsIHRoYXQncyB0aGUgc3RvcCBvcGVyYXRpb24gc3BlY2lmaWNhbGx5IGZvciB0aGUgYC9wcm9jL25ldC9pcHY2X3JvdXRlYCBmaWxlLCBhbmQgaW1wb3J0YW50bHksIHRoZSBCUEYgcm91dGUgaXRlcmF0b3IuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBjbGVhbnMgdXAgYWZ0ZXIgYSBzZXF1ZW5jZSBmaWxlIGl0ZXJhdGlvbiBvciBCUEYgcHJvZ3JhbSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBJUHY2IHJvdXRpbmcgdGFibGUuIFRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGdvaW5nIG9uLCBJIHNob3VsZCBwcm9iYWJseSB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlLiBMaW5lcyAyODAwIHRocm91Z2ggMjg2MCBvZiBgbmV0L2lwdjYvaXA2X2ZpYi5jYCBzZWVtIGxpa2UgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIFRoYXQgc2VjdGlvbiBsaWtlbHkgY29udGFpbnMgdGhlIGNvcmUgbG9naWMgZm9yIHRoaXMgc3RvcCBmdW5jdGlvbiBhbmQgd2lsbCBnaXZlIG1lIHRoZSBpbnNpZ2h0cyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBzZWUgaG93IGl0IHJlbGVhc2VzIHJlc291cmNlcywgaGFuZGxlcyBhbnkgbG9ja3MsIGFuZCBlbnN1cmVzIGEgY2xlYW4gZXhpdCBmb3IgdGhlc2Ugcm91dGUgbGlzdGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTI4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTg6NDIuNTc5OTIwOTExWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDc2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9pcDZfZmliLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjgwMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjgwMDpcXHRcXHRcXHRyZXR1cm4gaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3Nob3coc2VxLCB2KTtcXG4yODAxOlxcdFxcbjI4MDI6XFx0XFx0cmV0ID0gaXB2Nl9yb3V0ZV9wcm9nX3NlcV9zaG93KHByb2csIFxcdTAwMjZtZXRhLCB2KTtcXG4yODAzOlxcdFxcdGl0ZXItXFx1MDAzZXcubGVhZiA9IE5VTEw7XFxuMjgwNDpcXHRcXG4yODA1OlxcdFxcdHJldHVybiByZXQ7XFxuMjgwNjpcXHR9XFxuMjgwNzpcXHRcXG4yODA4OlxcdHN0YXRpYyB2b2lkIGlwdjZfcm91dGVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuMjgwOTpcXHR7XFxuMjgxMDpcXHRcXHRzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSBtZXRhO1xcbjI4MTE6XFx0XFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xcbjI4MTI6XFx0XFxuMjgxMzpcXHRcXHRpZiAoIXYpIHtcXG4yODE0OlxcdFxcdFxcdG1ldGEuc2VxID0gc2VxO1xcbjI4MTU6XFx0XFx0XFx0cHJvZyA9IGJwZl9pdGVyX2dldF9pbmZvKFxcdTAwMjZtZXRhLCB0cnVlKTtcXG4yODE2OlxcdFxcdFxcdGlmIChwcm9nKVxcbjI4MTc6XFx0XFx0XFx0XFx0KHZvaWQpaXB2Nl9yb3V0ZV9wcm9nX3NlcV9zaG93KHByb2csIFxcdTAwMjZtZXRhLCB2KTtcXG4yODE4OlxcdFxcdH1cXG4yODE5OlxcdFxcbjI4MjA6XFx0XFx0aXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc2VxLCB2KTtcXG4yODIxOlxcdH1cXG4yODIyOlxcdCNlbHNlXFxuMjgyMzpcXHRzdGF0aWMgaW50IGlwdjZfcm91dGVfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuMjgyNDpcXHR7XFxuMjgyNTpcXHRcXHRyZXR1cm4gaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3Nob3coc2VxLCB2KTtcXG4yODI2OlxcdH1cXG4yODI3OlxcdFxcbjI4Mjg6XFx0c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4yODI5OlxcdHtcXG4yODMwOlxcdFxcdGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wKHNlcSwgdik7XFxuMjgzMTpcXHR9XFxuMjgzMjpcXHQjZW5kaWZcXG4yODMzOlxcdFxcbjI4MzQ6XFx0Y29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGlwdjZfcm91dGVfc2VxX29wcyA9IHtcXG4yODM1OlxcdFxcdC5zdGFydFxcdD0gaXB2Nl9yb3V0ZV9zZXFfc3RhcnQsXFxuMjgzNjpcXHRcXHQubmV4dFxcdD0gaXB2Nl9yb3V0ZV9zZXFfbmV4dCxcXG4yODM3OlxcdFxcdC5zdG9wXFx0PSBpcHY2X3JvdXRlX3NlcV9zdG9wLFxcbjI4Mzg6XFx0XFx0LnNob3dcXHQ9IGlwdjZfcm91dGVfc2VxX3Nob3dcXG4yODM5OlxcdH07XFxuMjg0MDpcXHQjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTg6NDIuNTgwMTM0MjcxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc4NTM3NTEzNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSVB2NiBSb3V0aW5nIFRhYmxlIE1hbmFnZW1lbnQgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHNvbWUgY29kZSBpbnZvbHZlZCBpbiBJUHY2IHJvdXRpbmcgdGFibGUgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBpdGVyYXRpbmcgdGhyb3VnaCBgL3Byb2MvbmV0L2lwdjZfcm91dGVgLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgY2FuIHRoaXMgYmUgdGVzdGVkIGluIGEgc3RhbmRhcmQgU3l6a2FsbGVyIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGUgYW5zd2VyIGlzIGEgc29saWQgeWVzLiBJdCBpbnZvbHZlcyByZWFkaW5nIGZyb20gYC9wcm9jL25ldC9pcHY2X3JvdXRlYCwgYW5kIHRoZW4gcG90ZW50aWFsbHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgSVB2NiByb3V0aW5nIHRhYmxlIGl0c2VsZiBieSBhZGRpbmcgb3IgZGVsZXRpbmcgcm91dGVzIHVzaW5nIG5ldGxpbmsgb3IgaW9jdGwgY2FsbHMgKndoaWxlKiB0aGlzIHJlYWQgaXMgb25nb2luZywgb3IgdXNpbmcgQlBGIGl0ZXJhdG9ycy4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSAoYG5ldC9pcHY2L2lwNl9maWIuY2ApIGFzIHRoZSBwcmltYXJ5IGFyZWEgb2YgaW50ZXJlc3QuXG5cblRoZSBpbXBsaWNhdGlvbnMgYXJlIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIGl0J3MgbWVzc2luZyB3aXRoIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcywgc3BlY2lmaWNhbGx5IGBsaXN0X2RlbF9pbml0YCBzZW1hbnRpY3MsIGFuZCBhbHNvIHRoZSBzdGF0ZSBjaGVja3Mgd2l0aGluIHRoZSB3YWxrZXIgKGBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlYCkuIFRoZSBwcmltYXJ5IGdvYWwgdGhlcmUgaXMgY2xlYXI6IHRvIHByZXZlbnQgZGF0YSBjb3JydXB0aW9uIG9yIGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIHRoZSB3YWxrZXIgYW5kIHRoZSByb3V0aW5nIHRhYmxlIHdoZW4gcm91dGVzIGFyZSBiZWluZyBhZGRlZCBvciBkZWxldGVkIGNvbmN1cnJlbnRseS4gVGhpcyBpcyBhIGNsYXNzaWMgY29uY3VycmVuY3kgcHJvYmxlbS5cblxuQmVmb3JlIEkgZ28gZnVydGhlciwgbGV0J3MgbmFpbCBkb3duIGFueSBwcmVyZXF1aXNpdGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gIEkgYWxyZWFkeSBrbm93IHRoYXQgYENPTkZJR19JUFY2YCBpcyBwcm9iYWJseSByZXF1aXJlZCwgYnV0IGxldCdzIGJlIHN1cmUuIExldCBtZSBzZWUuLi4gd2hlcmUgZG9lcyBgaXA2X2ZpYi5jYCBnZXQgY29tcGlsZWQ/IEEgcXVpY2sgY2hlY2sgb2YgYG5ldC9pcHY2L01ha2VmaWxlYCBzaG91bGQgY29uZmlybSBteSBzdXNwaWNpb25zIGFuZCBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIGFuc3dlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0NDgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxODo1MC40MzM4ODgyMDZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NTc1ODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl9maWJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlPTg9aXB2Ni15IDo9XFx0YWZfaW5ldDYubyBhbnljYXN0Lm8gaXA2X291dHB1dC5vIGlwNl9pbnB1dC5vIGFkZHJjb25mLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlLTktXFx0XFx0YWRkcmxhYmVsLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlOjEwOlxcdFxcdHJvdXRlLm8gaXA2X2ZpYi5vIGlwdjZfc29ja2dsdWUubyBuZGlzYy5vIHVkcC5vIFxcXFxcXG5uZXQvaXB2Ni9NYWtlZmlsZS0xMS1cXHRcXHRyYXcubyBpY21wLm8gbWNhc3QubyByZWFzc2VtYmx5Lm8gdGNwX2lwdjYubyBwaW5nLm8gXFxcXFxcbi0tXFxubmV0L2lwdjYvZmliNl9ub3RpZmllci5jLTgtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRucy9pcHY2LmhcXHUwMDNlXFxubmV0L2lwdjYvZmliNl9ub3RpZmllci5jOjk6I2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfZmliLmhcXHUwMDNlXFxubmV0L2lwdjYvZmliNl9ub3RpZmllci5jLTEwLVxcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYy0xMC0jaW5jbHVkZSBcXHUwMDNjbmV0L2lwLmhcXHUwMDNlXFxubmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYzoxMTojaW5jbHVkZSBcXHUwMDNjbmV0L2lwNl9maWIuaFxcdTAwM2VcXG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jLTEyLSNpbmNsdWRlIFxcdTAwM2NuZXQvbHd0dW5uZWwuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtMTEtI2luY2x1ZGUgXFx1MDAzY25ldC9pcC5oXFx1MDAzZVxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM6MTI6I2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfZmliLmhcXHUwMDNlXFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0xMy0jaW5jbHVkZSBcXHUwMDNjbmV0L2lwNl9yb3V0ZS5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTM2LSNpbmNsdWRlIFxcdTAwM2NuZXQvaXBfZmliLmhcXHUwMDNlXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjM3OiNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X2ZpYi5oXFx1MDAzZVxcbm5ldC9pcHY2L2lwNl9maWIuYy0zOC0jaW5jbHVkZSBcXHUwMDNjbmV0L2lwNl9yb3V0ZS5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTEzODI9c3RhdGljIHZvaWQgZmliNl9zdGFydF9nYyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0KVxcbm5ldC9pcHY2L2lwNl9maWIuYy0xMzgzLXtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MTM4NDpcXHRpZiAoIXRpbWVyX3BlbmRpbmcoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5pcDZfZmliX3RpbWVyKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pcHY2L2lwNl9maWIuYy0xMzg1LVxcdCAgICAocnQtXFx1MDAzZWZpYjZfZmxhZ3MgXFx1MDAyNiBSVEZfRVhQSVJFUykpXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjEzODY6XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuaXA2X2ZpYl90aW1lcixcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMTM4Ny1cXHRcXHRcXHQgIGppZmZpZXMgKyBSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY2LnN5c2N0bC5pcDZfcnRfZ2NfaW50ZXJ2YWwpKTtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0xMzkwPXZvaWQgZmliNl9mb3JjZV9zdGFydF9nYyhzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTEzOTEte1xcbm5ldC9pcHY2L2lwNl9maWIuYzoxMzkyOlxcdGlmICghdGltZXJfcGVuZGluZyhcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmlwNl9maWJfdGltZXIpKVxcbm5ldC9pcHY2L2lwNl9maWIuYzoxMzkzOlxcdFxcdG1vZF90aW1lcihcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmlwNl9maWJfdGltZXIsXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTEzOTQtXFx0XFx0XFx0ICBqaWZmaWVzICsgUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2Ni5zeXNjdGwuaXA2X3J0X2djX2ludGVydmFsKSk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjQyOT12b2lkIGZpYjZfcnVuX2djKHVuc2lnbmVkIGxvbmcgZXhwaXJlcywgc3RydWN0IG5ldCAqbmV0LCBib29sIGZvcmNlKVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI0MzctXFx0fSBlbHNlIGlmICghc3Bpbl90cnlsb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl9nY19sb2NrKSkge1xcbm5ldC9pcHY2L2lwNl9maWIuYzoyNDM4OlxcdFxcdG1vZF90aW1lcihcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmlwNl9maWJfdGltZXIsIGppZmZpZXMgKyBIWik7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI0MzktXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI0NDktXFx0aWYgKGdjX2FyZ3MubW9yZSlcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjQ1MDpcXHRcXHRtb2RfdGltZXIoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5pcDZfZmliX3RpbWVyLFxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNDUxLVxcdFxcdFxcdCAgcm91bmRfamlmZmllcyhub3cgKyBpcDZfcnRfZ2NfaW50ZXJ2YWwpKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQ1Mi1cXHRlbHNlXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI0NTM6XFx0XFx0dGltZXJfZGVsZXRlKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuaXA2X2ZpYl90aW1lcik7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI0NTQtXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5maWI2X2djX2xvY2spO1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTI0NTc9c3RhdGljIHZvaWQgZmliNl9nY190aW1lcl9jYihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQ1OC17XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI0NTk6XFx0c3RydWN0IG5ldCAqYXJnID0gdGltZXJfY29udGFpbmVyX29mKGFyZywgdCwgaXB2Ni5pcDZfZmliX3RpbWVyKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQ2MC1cXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0yNDY0PXN0YXRpYyBpbnQgX19uZXRfaW5pdCBmaWI2X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNDc5LVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl93YWxrZXJzKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjQ4MDpcXHR0aW1lcl9zZXR1cChcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmlwNl9maWJfdGltZXIsIGZpYjZfZ2NfdGltZXJfY2IsIDApO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yNDgxLVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTI1MzY9c3RhdGljIHZvaWQgZmliNl9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjUzOS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjU0MDpcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmlwNl9maWJfdGltZXIpO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yNTQxLVxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTQ5LSNpbmNsdWRlIFxcdTAwM2NuZXQvaXB2Ni5oXFx1MDAzZVxcbm5ldC9pcHY2L2lwNl9ncmUuYzo1MDojaW5jbHVkZSBcXHUwMDNjbmV0L2lwNl9maWIuaFxcdTAwM2VcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtNTEtI2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfcm91dGUuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3JwZmlsdGVyLmMtOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvcm91dGUuaFxcdTAwM2VcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ycGZpbHRlci5jOjEwOiNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X2ZpYi5oXFx1MDAzZVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3JwZmlsdGVyLmMtMTEtI2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfcm91dGUuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jLTgtI2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfcm91dGUuaFxcdTAwM2VcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYzo5OiNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X2ZpYi5oXFx1MDAzZVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jLTEwLSNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X2NoZWNrc3VtLmhcXHUwMDNlXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X2ZpYl9pcHY2LmMtMTMtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mdF9maWJfaXB2Ni5jOjE0OiNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X2ZpYi5oXFx1MDAzZVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZnRfZmliX2lwdjYuYy0xNS0jaW5jbHVkZSBcXHUwMDNjbmV0L2lwNl9yb3V0ZS5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjYvb3V0cHV0X2NvcmUuYy04LSNpbmNsdWRlIFxcdTAwM2NuZXQvaXB2Ni5oXFx1MDAzZVxcbm5ldC9pcHY2L291dHB1dF9jb3JlLmM6OTojaW5jbHVkZSBcXHUwMDNjbmV0L2lwNl9maWIuaFxcdTAwM2VcXG5uZXQvaXB2Ni9vdXRwdXRfY29yZS5jLTEwLSNpbmNsdWRlIFxcdTAwM2NuZXQvYWRkcmNvbmYuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNDctI2luY2x1ZGUgXFx1MDAzY25ldC9pcHY2LmhcXHUwMDNlXFxubmV0L2lwdjYvcm91dGUuYzo0ODojaW5jbHVkZSBcXHUwMDNjbmV0L2lwNl9maWIuaFxcdTAwM2VcXG5uZXQvaXB2Ni9yb3V0ZS5jLTQ5LSNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X3JvdXRlLmhcXHUwMDNlXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMTctI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRucy9nZW5lcmljLmhcXHUwMDNlXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjE4OiNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X2ZpYi5oXFx1MDAzZVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0xOS0jaW5jbHVkZSBcXHUwMDNjbmV0L3JvdXRlLmhcXHUwMDNlXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTgtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRucy9nZW5lcmljLmhcXHUwMDNlXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5OiNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X2ZpYi5oXFx1MDAzZVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMC0jaW5jbHVkZSBcXHUwMDNjbmV0L3JvdXRlLmhcXHUwMDNlXFxuLS1cXG5uZXQvaXB2Ni9zaXQuYy00MS0jaW5jbHVkZSBcXHUwMDNjbmV0L3RyYW5zcF92Ni5oXFx1MDAzZVxcbm5ldC9pcHY2L3NpdC5jOjQyOiNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X2ZpYi5oXFx1MDAzZVxcbm5ldC9pcHY2L3NpdC5jLTQzLSNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X3JvdXRlLmhcXHUwMDNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjE4OjUwLjQ5MzQ2OTg0NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDY1OTcxMzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIElQdjYgQ29uZmlndXJhdGlvbiBpbiB0aGUgS2VybmVsKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVB2NiBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIHByb2MgZmlsZXN5c3RlbS4gVGltZSB0byBjaGVjayBgbmV0L2lwdjYvS2NvbmZpZ2AuIEkga25vdyB0aGUgZ2VuZXJhbCBhcmVhcywgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIHRoYXQgbWlnaHQgaGF2ZSBjaGFuZ2VkIHJlY2VudGx5LCBvciBhIHN1YnRsZSBpbnRlcnBsYXkgYmV0d2VlbiBvcHRpb25zIEknbSBvdmVybG9va2luZy4gU3BlY2lmaWNhbGx5LCBJJ20gbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBtaWdodCBhZmZlY3QgaG93IElQdjYgYWRkcmVzc2VzIGFyZSBwcmVzZW50ZWQgb3IgbWFuaXB1bGF0ZWQgdGhyb3VnaCBgL3Byb2NgLiBUaGlzIGlzIG9mdGVuIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIHdoZXJlIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZSByZXZlYWxzIGtlcm5lbC1sZXZlbCBkZXRhaWxzLiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlIGhhcyB0byBvZmZlci4gSSBuZWVkIHRvIGVuc3VyZSBhIGNsZWFyIG1lbnRhbCBtb2RlbCBvZiB0aGUgaW50ZXJkZXBlbmRlbmNpZXMgYmVmb3JlIGRpdmluZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyODgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxODo1NC45NTk0NDUzMjlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNzMxNDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUFY2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZy01LVxcbm5ldC9pcHY2L0tjb25maWc6NjptZW51Y29uZmlnIElQVjZcXG5uZXQvaXB2Ni9LY29uZmlnLTctXFx0Ym9vbCBcXFwiVGhlIElQdjYgcHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE5PWlmIElQVjZcXG5uZXQvaXB2Ni9LY29uZmlnLTIwLVxcbm5ldC9pcHY2L0tjb25maWc6MjE6Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcXG5uZXQvaXB2Ni9LY29uZmlnLTIyLVxcdGJvb2wgXFxcIklQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzAtXFxubmV0L2lwdjYvS2NvbmZpZzozMTpjb25maWcgSVBWNl9ST1VURV9JTkZPXFxubmV0L2lwdjYvS2NvbmZpZy0zMi1cXHRib29sIFxcXCJJUHY2OiBSb3V0ZSBJbmZvcm1hdGlvbiAoUkZDIDQxOTEpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTM4LVxcbm5ldC9pcHY2L0tjb25maWc6Mzk6Y29uZmlnIElQVjZfT1BUSU1JU1RJQ19EQURcXG5uZXQvaXB2Ni9LY29uZmlnLTQwLVxcdGJvb2wgXFxcIklQdjY6IEVuYWJsZSBSRkMgNDQyOSBPcHRpbWlzdGljIERBRFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTExLVxcbm5ldC9pcHY2L0tjb25maWc6MTEyOmNvbmZpZyBJUFY2X01JUDZcXG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogTW9iaWxpdHlcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTExOS1cXG5uZXQvaXB2Ni9LY29uZmlnOjEyMDpjb25maWcgSVBWNl9JTEFcXG5uZXQvaXB2Ni9LY29uZmlnLTEyMS1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSWRlbnRpZmllciBMb2NhdG9yIEFkZHJlc3NpbmcgKElMQSlcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE0Nj1jb25maWcgSU5FVDZfVFVOTkVMXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE0OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE1MDpjb25maWcgSVBWNl9WVElcXG5uZXQvaXB2Ni9LY29uZmlnLTE1MS1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCAoc2VjdXJlKSBJUHY2OiB0dW5uZWxpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE2MS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE2Mjpjb25maWcgSVBWNl9TSVRcXG5uZXQvaXB2Ni9LY29uZmlnLTE2My1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSVB2Ni1pbi1JUHY0IHR1bm5lbCAoU0lUIGRyaXZlcilcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE3Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjE3Nzpjb25maWcgSVBWNl9TSVRfNlJEXFxubmV0L2lwdjYvS2NvbmZpZy0xNzgtXFx0Ym9vbCBcXFwiSVB2NjogSVB2NiBSYXBpZCBEZXBsb3ltZW50ICg2UkQpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xOTUtXFxubmV0L2lwdjYvS2NvbmZpZzoxOTY6Y29uZmlnIElQVjZfTkRJU0NfTk9ERVRZUEVcXG5uZXQvaXB2Ni9LY29uZmlnLTE5Ny1cXHRib29sXFxubmV0L2lwdjYvS2NvbmZpZy0xOTgtXFxubmV0L2lwdjYvS2NvbmZpZzoxOTk6Y29uZmlnIElQVjZfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjA5LVxcbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxcbm5ldC9pcHY2L0tjb25maWctMjExLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBHUkUgdHVubmVsXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMjctXFxubmV0L2lwdjYvS2NvbmZpZzoyMjg6Y29uZmlnIElQVjZfRk9VXFxubmV0L2lwdjYvS2NvbmZpZy0yMjktXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjMxLVxcbm5ldC9pcHY2L0tjb25maWc6MjMyOmNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTIzMy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMzYtXFxubmV0L2lwdjYvS2NvbmZpZzoyMzc6Y29uZmlnIElQVjZfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjYvS2NvbmZpZy0yMzgtXFx0Ym9vbCBcXFwiSVB2NjogTXVsdGlwbGUgUm91dGluZyBUYWJsZXNcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI0Mi1cXG5uZXQvaXB2Ni9LY29uZmlnOjI0Mzpjb25maWcgSVBWNl9TVUJUUkVFU1xcbm5ldC9pcHY2L0tjb25maWctMjQ0LVxcdGJvb2wgXFxcIklQdjY6IHNvdXJjZSBhZGRyZXNzIGJhc2VkIHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcXG5uZXQvaXB2Ni9LY29uZmlnLTI1OC1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjY0LVxcbm5ldC9pcHY2L0tjb25maWc6MjY1OmNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI3OC1cXG5uZXQvaXB2Ni9LY29uZmlnOjI3OTpjb25maWcgSVBWNl9QSU1TTV9WMlxcbm5ldC9pcHY2L0tjb25maWctMjgwLVxcdGJvb2wgXFxcIklQdjY6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjg1LVxcbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjk5LVxcbm5ldC9pcHY2L0tjb25maWc6MzAwOmNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L0tjb25maWctMzAxLVxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxcbm5ldC9pcHY2L0tjb25maWctMzEzLVxcdGRlZl9ib29sIHlcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzE2LVxcbm5ldC9pcHY2L0tjb25maWc6MzE3OmNvbmZpZyBJUFY2X1JQTF9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMzE4LVxcdGJvb2wgXFxcIklQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzI3LVxcbm5ldC9pcHY2L0tjb25maWc6MzI4OmNvbmZpZyBJUFY2X0lPQU02X0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0zMjktXFx0Ym9vbCBcXFwiSVB2NjogSU9BTSBQcmUtYWxsb2NhdGVkIFRyYWNlIGluc2VydGlvbiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxODo1NS4wNDExODIzMzhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkyNjQzMDUwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2U6XG5cbioqSW52ZXN0aWdhdGluZyBJUHY2IFJvdXRlIEl0ZXJhdGlvbiBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgSVB2NiByb3V0ZXMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSB0aGUgc2VxdWVuY2Ugc3RvcCBhbmQgYWN0aXZlIGl0ZXJhdGlvbi4gSSByZWNhbGwgc2VlaW5nIGBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcGAgYW5kIGBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlYCB1c2VkIHdpdGggc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiB0aGUgYENPTkZJR19QUk9DX0ZTYCBmbGFnIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBUaW1lIHRvIHZlcmlmeS4gTGV0J3MgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgY29kZS4gSSBuZWVkIHRvIGNoZWNrIGxpbmVzIDI2NTAgdGhyb3VnaCAyODUwIG9mIGBuZXQvaXB2Ni9pcDZfZmliLmNgIHRvIHNlZSBob3cgdGhvc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkIGFuZCB1bmRlciB3aGF0IGJ1aWxkIGNvbmRpdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwNjgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxODo1Ni45Njc2MTY1MTdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwNl9maWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjQ1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjQ1OlxcdFxcdFxcdGl0ZXItXFx1MDAzZXcubGVhZiA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoXFxuMjY0NjpcXHRcXHRcXHRcXHRcXHRpdGVyLVxcdTAwM2V3LmxlYWYtXFx1MDAzZWZpYjZfbmV4dCxcXG4yNjQ3OlxcdFxcdFxcdFxcdFxcdGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2aXRlci1cXHUwMDNldGJsLVxcdTAwM2V0YjZfbG9jaykpO1xcbjI2NDg6XFx0XFx0XFx0aXRlci1cXHUwMDNlc2tpcC0tO1xcbjI2NDk6XFx0XFx0XFx0aWYgKCFpdGVyLVxcdTAwM2Vza2lwIFxcdTAwMjZcXHUwMDI2IGl0ZXItXFx1MDAzZXcubGVhZilcXG4yNjUwOlxcdFxcdFxcdFxcdHJldHVybiAxO1xcbjI2NTE6XFx0XFx0fSB3aGlsZSAoaXRlci1cXHUwMDNldy5sZWFmKTtcXG4yNjUyOlxcdFxcbjI2NTM6XFx0XFx0cmV0dXJuIDA7XFxuMjY1NDpcXHR9XFxuMjY1NTpcXHRcXG4yNjU2OlxcdHN0YXRpYyB2b2lkIGlwdjZfcm91dGVfc2VxX3NldHVwX3dhbGsoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcixcXG4yNjU3OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXQgKm5ldClcXG4yNjU4OlxcdHtcXG4yNjU5OlxcdFxcdG1lbXNldChcXHUwMDI2aXRlci1cXHUwMDNldywgMCwgc2l6ZW9mKGl0ZXItXFx1MDAzZXcpKTtcXG4yNjYwOlxcdFxcdGl0ZXItXFx1MDAzZXcuZnVuYyA9IGlwdjZfcm91dGVfeWllbGQ7XFxuMjY2MTpcXHRcXHRpdGVyLVxcdTAwM2V3LnJvb3QgPSBcXHUwMDI2aXRlci1cXHUwMDNldGJsLVxcdTAwM2V0YjZfcm9vdDtcXG4yNjYyOlxcdFxcdGl0ZXItXFx1MDAzZXcuc3RhdGUgPSBGV1NfSU5JVDtcXG4yNjYzOlxcdFxcdGl0ZXItXFx1MDAzZXcubm9kZSA9IGl0ZXItXFx1MDAzZXcucm9vdDtcXG4yNjY0OlxcdFxcdGl0ZXItXFx1MDAzZXcuYXJncyA9IGl0ZXI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjE4OjU2Ljk2NzgxMTQ3N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDY0NTIzNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBDb2RlKipcblxuQWxyaWdodCwgbGV0J3MgcGlucG9pbnQgdGhlIG9yaWdpbiBvZiB0aGF0IGAjaWYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylgIGJsb2NrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBiZWZvcmUgY29tbWl0IDI2NDUuIEknbSBlc3NlbnRpYWxseSB0cmFjaW5nIHRoZSBmZWF0dXJlJ3MgaW5zdGFudGlhdGlvbiBhbmQgd2FudCB0byBzZWUgaG93IHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiBoYXMgZXZvbHZlZCBoaXN0b3JpY2FsbHkuIFVuZGVyc3RhbmRpbmcgaXRzIHBvc2l0aW9uIGlzIGNyaXRpY2FsIGZvciBjb21wcmVoZW5kaW5nIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gSSdtIHByb2JhYmx5IGdvaW5nIHRvIG5lZWQgdG8gbG9vayBhdCBjb21taXQgaGlzdG9yeSBhcm91bmQgdGhhdCB0aW1lZnJhbWUgdG8gc2VlIHdoYXQgdGhhdCBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdhcyBkb2luZyBhdCB0aGF0IHRpbWUgYW5kIHVuZGVyc3RhbmQgaWYgdGhlcmUgd2FzIHNvbWV0aGluZyB0aGF0IGludHJvZHVjZWQgaXQsIG9yIHBlcmhhcHMgbW92ZWQgaXQsIGV0Yy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2NzQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjE4OjU5LjAzMjMzOTA2NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk0MTkzOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmLipDT05GSUdfUFJPQ19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9pcDZfZmliLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaXA2X2ZpYi5jPTI1OTc9dm9pZCBmaWI2X2djX2NsZWFudXAodm9pZClcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNjAyLVxcbm5ldC9pcHY2L2lwNl9maWIuYzoyNjAzOiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yNjA0LXN0YXRpYyBpbnQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjE4OjU5LjEyMTc2NDM1NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzA4NzA1MzIzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVB2NiBSb3V0aW5nIFRhYmxlIEl0ZXJhdGlvbiBhbmQgVW5saW5raW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgZmliNl93YWxrZXJfdW5saW5rYCBhbmQgYGlwdjZfcm91dGVfaXRlcl9hY3RpdmVgLiBUaGUgY29kZSBpbmRpY2F0ZXMgdGhhdCBgZmliNl93YWxrZXJfdW5saW5rYCBpcyBkZWZpbmVkIG91dHNpZGUgYENPTkZJR19QUk9DX0ZTYCwgd2hlcmVhcyBgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZWAgaXMgd2l0aGluIGl0LiBUaGlzIHN1Z2dlc3RzIHRoYXQgYElQVjZgIGFuZCBgUFJPQ19GU2AgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgdG8gd2F0Y2guXG5cbk5vdywgbGV0J3MgdHJhY2UgdGhlIGRlcGVuZGVuY2llcy4gYGZpYjZfd2Fsa2VyX3VubGlua2AgaXMgY2FsbGVkIGJ5IGEgdmFyaWV0eSBvZiBmdW5jdGlvbnMgZGVhbGluZyB3aXRoIGR1bXBpbmcgYW5kIHdhbGtpbmcgdGhlIEZJQiAoRm9yd2FyZGluZyBJbmZvcm1hdGlvbiBCYXNlKTogYGZpYjZfZHVtcF9lbmRgLCBgZmliNl9kdW1wX3RhYmxlYCwgYGZpYjZfd2Fsa2AsIGBpcHY2X3JvdXRlX3NlcV9uZXh0YCwgYW5kIGBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcGAuIGBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlYCBpcyBhIHN0YXRpYyBoZWxwZXIgd2l0aGluIGBpcDZfZmliLmNgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IHN1Z2dlc3RzIGl0J3MgbGlrZWx5IG9wdGltaXplZCBieSB0aGUgY29tcGlsZXIuIGBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcGAgKmNhbGxzKiBgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZWAuIFdlIGFsc28gaGF2ZSB0aGUgc2VxIGZpbGUgb3BlcmF0aW9uIGVudHJ5IHBvaW50czogYGlwdjZfcm91dGVfc2VxX3N0YXJ0YCwgYGlwdjZfcm91dGVfc2VxX25leHRgLCBhbmQgYGlwdjZfcm91dGVfc2VxX3N0b3BgLiAgRmluYWxseSwgYGZpYjZfd2Fsa2AgYW5kIGBmaWI2X3dhbGtfY29udGludWVgIGFyZSB0aGUgd2Fsa2VyIG9wZXJhdGlvbnMgdGhlbXNlbHZlcy5cblxuRm9jdXNpbmcgb24gdGhlIG5hdHVyZSBvZiBgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZWAsIGl0J3MgZGVmaW5lZCBhcyBhIGBzdGF0aWMgYm9vbGAgZnVuY3Rpb24uIFRoaXMgbWVhbnMgaXQncyBsaWtlbHkgaW5saW5lZCwgcHJvdmlkaW5nIG9wcG9ydHVuaXR5IGZvciBjb21waWxlciBvcHRpbWl6YXRpb25zLiBgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3BgIGlzIGFsc28gc3RhdGljLCBhbmQgY2FsbGVkIGJ5IGBpcHY2X3JvdXRlX3NlcV9zdG9wYC4gTGlrZXdpc2UsIGBmaWI2X3dhbGtlcl91bmxpbmtgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiAgVGhlIHNlcSBmaWxlIG9wZXJhdGlvbiBmdW5jdGlvbnMgKGBpcHY2X3JvdXRlX3NlcV9zdGFydGAsIGBpcHY2X3JvdXRlX3NlcV9uZXh0YCwgYGlwdjZfcm91dGVfc2VxX3N0b3BgLCBhbmQgYGlwdjZfcm91dGVfc2VxX3Nob3dgKSBhcmUgYWxsIHdpdGhpbiBgaXA2X2ZpYi5jYCBhcyB3ZWxsLlxuXG5HaXZlbiB0aGF0IGBmaWI2X3dhbGtlcl91bmxpbmtgIGlzIHN0YXRpYyBpbiBgaXA2X2ZpYi5jYCwgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBob3cgdGhleSByZWxhdGUuICBUaGUgYGlwdjZfcm91dGVfc2VxX29wc2Agc3RydWN0IGlzIHBpdm90YWwsIGNvbnRhaW5pbmcgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIGZvciB0aGUgc2VxIGZpbGUgb3BlcmF0aW9uczogYC5zdGFydCA9IGlwdjZfcm91dGVfc2VxX3N0YXJ0YCwgYC5uZXh0ID0gaXB2Nl9yb3V0ZV9zZXFfbmV4dGAsIGAuc3RvcCA9IGlwdjZfcm91dGVfc2VxX3N0b3BgLCBhbmQgYC5zaG93ID0gaXB2Nl9yb3V0ZV9zZXFfc2hvd2AuICBBZ2FpbiwgYGZpYjZfd2Fsa2VyX3VubGlua2AgaXMgY2FsbGVkIGJ5IHRob3NlIGZ1bmN0aW9ucy4gSSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgaW4gYGlwNl9maWIuY2AgKG9yIHBvdGVudGlhbGx5IGByb3V0ZS5jYCkgdGhhdCBleGVyY2lzZSB0aGVzZSBwYXRocywgc3VjaCBhcyBgZmliNl93YWxrZXJfbGlua2AsIGBmaWI2X3dhbGtgLCBhbmQgYGluZXQ2X2R1bXBfZmliYC5cblxuRmluYWxseSwgdGhlIGNyaXRpY2FsIG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgKndoZXJlKiBgaXB2Nl9yb3V0ZV9zZXFfb3BzYCBpcyByZWdpc3RlcmVkLiBUaGF0IHdpbGwgcHJvdmlkZSB0aGUgaG9vayBpbnRvIHRoZSBicm9hZGVyIHN5c3RlbSBhbmQgaG93IHRoaXMgYWxsIGludGVncmF0ZXMgaW50byB0aGUgcHJvY2ZzIGludGVyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMTksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTk6MTYuMjA4ODIwNjg2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzAzNTc0MzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjZfcm91dGVfc2VxX29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pcDZfZmliLmg9NTk2PXN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIge1xcbi0tXFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTYwMy1cXG5pbmNsdWRlL25ldC9pcDZfZmliLmg6NjA0OmV4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaXB2Nl9yb3V0ZV9zZXFfb3BzO1xcbmluY2x1ZGUvbmV0L2lwNl9maWIuaC02MDUtXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjgyOD1zdGF0aWMgdm9pZCBpcHY2X3JvdXRlX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI4MzMtXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI4MzQ6Y29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGlwdjZfcm91dGVfc2VxX29wcyA9IHtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjgzNS1cXHQuc3RhcnRcXHQ9IGlwdjZfcm91dGVfc2VxX3N0YXJ0LFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz02ODA0PXN0YXRpYyBpbnQgX19uZXRfaW5pdCBpcDZfcm91dGVfbmV0X2luaXRfbGF0ZShzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTY4MDctXFx0aWYgKCFwcm9jX2NyZWF0ZV9uZXQoXFxcImlwdjZfcm91dGVcXFwiLCAwLCBuZXQtXFx1MDAzZXByb2NfbmV0LFxcbm5ldC9pcHY2L3JvdXRlLmM6NjgwODpcXHRcXHRcXHQgICAgIFxcdTAwMjZpcHY2X3JvdXRlX3NlcV9vcHMsXFxubmV0L2lwdjYvcm91dGUuYy02ODA5LVxcdFxcdFxcdCAgICAgc2l6ZW9mKHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIpKSlcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9Njg5MD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIGlwdjZfcm91dGVfc2VxX2luZm8gPSB7XFxubmV0L2lwdjYvcm91dGUuYzo2ODkxOlxcdC5zZXFfb3BzXFx0XFx0PSBcXHUwMDI2aXB2Nl9yb3V0ZV9zZXFfb3BzLFxcbm5ldC9pcHY2L3JvdXRlLmMtNjg5Mi1cXHQuaW5pdF9zZXFfcHJpdmF0ZVxcdD0gYnBmX2l0ZXJfaW5pdF9zZXFfbmV0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxOToxOC41MTIzOTk1MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MTk5NzkwNDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IEFzc2Vzc21lbnQ6IElQdjYgUm91dGUgV2Fsa2VyIGFuZCBTZXF1ZW5jZSBJdGVyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBjZW50ZXJzIG9uIHRoZXNlIElQdjYtcmVsYXRlZCBmdW5jdGlvbnM6IGBpcHY2X3JvdXRlX3NlcV9zdGFydGAsIGBpcHY2X3JvdXRlX3NlcV9uZXh0YCwgYGlwdjZfcm91dGVfc2VxX3N0b3BgLCBgaXB2Nl9yb3V0ZV9zZXFfc2hvd2AsIGBmaWI2X3dhbGtlcl91bmxpbmtgLCBgZmliNl93YWxrZXJfbGlua2AsIGBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlYCwgYW5kIGBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcGAuIE15IGZpcnN0IHN0ZXAgaXMgdG8gY29uZmlybSB0aGVzZSBhcmUgaXNvbGF0ZWQgb3IgcGFydCBvZiBhIGJyb2FkZXIgc2V0IG9mIHJlbGF0ZWQgZnVuY3Rpb25zLCBzbyBJJ20gY3Jvc3MtcmVmZXJlbmNpbmcgd2l0aGluIGBpcDZfZmliLmNgIGFuZCBgcm91dGUuY2AgZm9yIGFueSB3YWxrZXItcmVsYXRlZCBpbnRlcmFjdGlvbnMuXG5cbk9rYXksIGNoZWNraW5nIGBuZXQvaXB2Ni9pcDZfZmliLmNgLCBjb25maXJtcyB0aG9zZSwgcGx1cyBgZmliNl9kdW1wX3RhYmxlYC4gR29vZCwgdGhpcyBzdXBwb3J0cyB0aGUgaW5pdGlhbCBmb2N1cy5cblxuSXMgdGhpcyBmdXp6aW5nIHRhcmdldCB2aWFibGU/IEFic29sdXRlbHksIHdpdGhvdXQgcXVlc3Rpb24uIE15IHJlYXNvbmluZyBpcyBzb2xpZDogVGhpcyBpcyByZWFjaGFibGUgY29kZTsgdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBtYW5pcHVsYXRlIHRoZSBJUHY2IEZJQiB3YWxrZXIgbGlzdCBtYW5hZ2VtZW50IGFuZCwgaW1wb3J0YW50bHksIHRoZSBpdGVyYXRvciBzdGF0dXMgY2hlY2tzIGR1cmluZyBgL3Byb2MvbmV0L2lwdjZfcm91dGVgIHNlcV9maWxlIHJlYWRzIGFuZCBCUEYgaXRlcmF0b3IgZXhlY3V0aW9uLiBJdOKAmXMgY29yZSBuZXR3b3JraW5nIChJUHY2IEZJQiByb3V0aW5nIHRhYmxlcyksIGFuZCBpdOKAmXMgZGlyZWN0bHkgYWNjZXNzaWJsZSB2aWEgc3RhbmRhcmQgc29ja2V0cywgbmV0bGluaywgb3IgcHJvY2ZzIHdpdGhpbiBhIFFFTVUvc3l6a2FsbGVyIGVudmlyb25tZW50LiBJdCdzIGxvdy1oYW5naW5nIGZydWl0LlxuXG5Ob3csIGxldCdzIHZlcmlmeSBjb25maWd1cmF0aW9uczogYElQVjZgIGFuZCBgUFJPQ19GU2AgYXJlIGVzc2VudGlhbC4gRXhjZWxsZW50LCBlYXN5IGNoZWNrLlxuXG5MZXQncyBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHM6IEknbSBwcmltYXJpbHkgZm9jdXNlZCBvbiBgZmliNl93YWxrZXJfdW5saW5rYCwgYGlwdjZfcm91dGVfaXRlcl9hY3RpdmVgLCBgaXB2Nl9yb3V0ZV9zZXFfbmV4dGAsIGBpcHY2X3JvdXRlX3NlcV9zdGFydGAsIGBpcHY2X3JvdXRlX3NlcV9zdG9wYCwgYW5kIGBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcGAuXG5cbk9rYXksIGxldCdzIGRvIGEgZmluYWwgc2FuaXR5IGNoZWNrLCBlbnN1cmluZyBldmVyeXRoaW5nIGFsaWduczpcblxuKiAgICoqV29ydGhGdXp6aW5nOiBUcnVlLioqIENsZWFyLlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIFNwZWNpZmljYWxseSByZWxhdGVkIHRvIElQdjYgcm91dGUgd2Fsa2VyIGFuZCBzZXEgaXRlcmF0aW9uOiBgZmliNl93YWxrZXJfdW5saW5rYCwgYGlwdjZfcm91dGVfaXRlcl9hY3RpdmVgLCBgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3BgLCBgaXB2Nl9yb3V0ZV9zZXFfc3RvcGAsIGBpcHY2X3JvdXRlX3NlcV9zdGFydGAsIGBpcHY2X3JvdXRlX3NlcV9uZXh0YC4gWWVzLlxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgSVBWNmAsIGBQUk9DX0ZTYC4gQ29uZmlybWVkLlxuXG5BbHJpZ2h0LCBJJ20gcmVhZHkgdG8gcHJlcGFyZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLiBMZXQncyBnZXQgdGhpcyBzZXQgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODQ1LCJPdXRwdXRUb2tlbnMiOjE4MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxOToyNy43MTIxOTMyNTVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTQ4NjQ1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiUFJPQ19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZpYjZfd2Fsa2VyX3VubGlua1wiLFxuICAgIFwiaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZVwiLFxuICAgIFwiaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3BcIixcbiAgICBcImlwdjZfcm91dGVfc2VxX3N0b3BcIixcbiAgICBcImlwdjZfcm91dGVfc2VxX3N0YXJ0XCIsXG4gICAgXCJpcHY2X3JvdXRlX3NlcV9uZXh0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NiBGSUIgd2Fsa2VyIG1hbmFnZW1lbnQgYW5kIGl0ZXJhdGlvbiBzdGF0ZSBjaGVja2luZyBpbiBuZXQvaXB2Ni9pcDZfZmliLmMgKHVzaW5nIGxpc3RfZGVsX2luaXQgb24gdW5saW5raW5nIGFuZCBjaGVja2luZyAhbGlzdF9lbXB0eSBmb3IgYWN0aXZlIGl0ZXJhdG9yIHN0YXRlKS4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgL3Byb2MvbmV0L2lwdjZfcm91dGUgc2VxX2ZpbGUgb3BlcmF0aW9ucyBhbmQgQlBGIElQdjYgcm91dGUgaXRlcmF0b3JzIGluIHN0YW5kYXJkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJQUk9DX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmliNl93YWxrZXJfdW5saW5rXCIsXG4gICAgXCJpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlXCIsXG4gICAgXCJpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcFwiLFxuICAgIFwiaXB2Nl9yb3V0ZV9zZXFfc3RvcFwiLFxuICAgIFwiaXB2Nl9yb3V0ZV9zZXFfc3RhcnRcIixcbiAgICBcImlwdjZfcm91dGVfc2VxX25leHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJUHY2IEZJQiB3YWxrZXIgbWFuYWdlbWVudCBhbmQgaXRlcmF0aW9uIHN0YXRlIGNoZWNraW5nIGluIG5ldC9pcHY2L2lwNl9maWIuYyAodXNpbmcgbGlzdF9kZWxfaW5pdCBvbiB1bmxpbmtpbmcgYW5kIGNoZWNraW5nICFsaXN0X2VtcHR5IGZvciBhY3RpdmUgaXRlcmF0b3Igc3RhdGUpLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSAvcHJvYy9uZXQvaXB2Nl9yb3V0ZSBzZXFfZmlsZSBvcGVyYXRpb25zIGFuZCBCUEYgSVB2NiByb3V0ZSBpdGVyYXRvcnMgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxOToyNy43ODc2ODY5NTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NDMxODk3MzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTk6MjcuNzg4MjM3ODU0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzQ0MzEzNDIxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGxpc3RfZGVsIHdpdGggbGlzdF9kZWxfaW5pdCBpbiBmaWI2X3dhbGtlcl91bmxpbmsoKSBhbmQgdXBkYXRlcyBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKCkgdG8gY2hlY2sgbGlzdF9lbXB0eShcXHUwMDI2dy1cXHUwMDNlbGgpIGluc3RlYWQgb2YgaW5zcGVjdGluZyB3YWxrZXIgc3RhdGUgYW5kIG5vZGUgcG9pbnRlcnMuIFRoaXMgY2hhbmdlIGZpeGVzIGxpc3QgdHJhY2tpbmcgYW5kIGF2b2lkcyBkb3VibGUgbGlzdCBkZWxldGlvbiAvIGxpc3QgY29ycnVwdGlvbiB3aGVuIHN0b3BwaW5nIHRoZSBJUHY2IHJvdXRlIHNlcSBpdGVyYXRpb24uIEFsbCByZWxldmFudCBsaXN0IHN0cnVjdHVyZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkICh2aWEgSU5JVF9MSVNUX0hFQUQgLyBsaXN0X2RlbF9pbml0IC8gbWVtc2V0KSBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayByaXNrcyBhcmUgaW50cm9kdWNlZC4gU3RhbmRhcmQgZGV0ZWN0b3JzIChLQVNBTiAvIENPTkZJR19ERUJVR19MSVNUKSBjb3ZlciBsaXN0IG1hbmlwdWxhdGlvbiBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gcmlza3MgaW4gdGhpcyBhcmVhLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1YzQ2NGMwMmRiZjA3OGY1ODk5Yjc4NDJjOThiMDRhM2RhODQ3MWQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwODoxNzo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9maWIuYyBiL25ldC9pcHY2L2lwNl9maWIuY1xuaW5kZXggM2UzODJiYTE1NzNlMy4uOWVhNzU3MDNiMzhkNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl9maWIuY1xuKysrIGIvbmV0L2lwdjYvaXA2X2ZpYi5jXG5AQCAtODUsNyArODUsNyBAQCBzdGF0aWMgdm9pZCBmaWI2X3dhbGtlcl9saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxuIHN0YXRpYyB2b2lkIGZpYjZfd2Fsa2VyX3VubGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X3dhbGtlciAqdylcbiB7XG4gXHR3cml0ZV9sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xuLVx0bGlzdF9kZWwoXHUwMDI2dy1cdTAwM2VsaCk7XG4rXHRsaXN0X2RlbF9pbml0KFx1MDAyNnctXHUwMDNlbGgpO1xuIFx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xuIH1cbiBcbkBAIC0yNzYwLDcgKzI3NjAsNyBAQCBzdGF0aWMgdm9pZCAqaXB2Nl9yb3V0ZV9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxuIHN0YXRpYyBib29sIGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcilcbiB7XG4gXHRzdHJ1Y3QgZmliNl93YWxrZXIgKncgPSBcdTAwMjZpdGVyLVx1MDAzZXc7XG4tXHRyZXR1cm4gdy1cdTAwM2Vub2RlIFx1MDAyNlx1MDAyNiAhKHctXHUwMDNlc3RhdGUgPT0gRldTX1UgXHUwMDI2XHUwMDI2IHctXHUwMDNlbm9kZSA9PSB3LVx1MDAzZXJvb3QpO1xuK1x0cmV0dXJuIHctXHUwMDNlbm9kZSBcdTAwMjZcdTAwMjYgIWxpc3RfZW1wdHkoXHUwMDI2dy1cdTAwM2VsaCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTk6MjcuNzg4MjM4OTY0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMjIxNjA3NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIENvZGUgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZmlsZXMgaW52b2x2ZWQsIGFuZCB0aGF0IG1lYW5zIHN0YXJ0aW5nIHdpdGggYG5ldC9pcHY2L2lwNl9maWIuY2AuIFRoYXQncyB3aGVyZSB0aGUgY29kZSBjaGFuZ2UgaXMsIHNvIHRoYXQncyB3aGVyZSB0aGUgYWN0aW9uIGlzLlxuXG5JJ20gdGhpbmtpbmcsIHJpZ2h0LCBsZXQncyB1c2UgdGhlIGxpbmUgbnVtYmVycyBwcm92aWRlZC4gQXJvdW5kIGxpbmVzIDg1IGFuZCAyNzYwLCB0aGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgY29udGV4dHVhbCBncmFzcC4gSSBuZWVkIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCB0aGUgaW1tZWRpYXRlIGltcGFjdCBvZiB0aGUgY2hhbmdlcy5cblxuQWxyaWdodCwgdGltZSB0byBnZXQgdGhlIGNvZGUuIEknbGwgcmVhY2ggZm9yIGByZWFkLWZpbGVgIGFuZCBwdWxsIGluIHRoZSBjb250ZW50cyBvZiBgbmV0L2lwdjYvaXA2X2ZpYi5jYC4gR290dGEgZ2V0IHRoZSBjb2RlIGluIGZyb250IG9mIG1lIHRvIHN0YXJ0IG1ha2luZyBzb21lIGFzc2Vzc21lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjU1LCJPdXRwdXRUb2tlbnMiOjc4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxOTozOS4wMDk4NDkzODRaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwNl9maWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3MDpcXHQgKlxcdHJlc3VsdCBvZiByZWRpcmVjdHMsIHBhdGggTVRVIGNoYW5nZXMsIGV0Yy5cXG4gIDcxOlxcdCAqL1xcbiAgNzI6XFx0XFxuICA3MzpcXHRzdGF0aWMgdm9pZCBmaWI2X2djX3RpbWVyX2NiKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcXG4gIDc0OlxcdFxcbiAgNzU6XFx0I2RlZmluZSBGT1JfV0FMS0VSUyhuZXQsIHcpIFxcXFxcXG4gIDc2OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkodywgXFx1MDAyNihuZXQpLVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2VycywgbGgpXFxuICA3NzpcXHRcXG4gIDc4OlxcdHN0YXRpYyB2b2lkIGZpYjZfd2Fsa2VyX2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpXFxuICA3OTpcXHR7XFxuICA4MDpcXHRcXHR3cml0ZV9sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XFxuICA4MTpcXHRcXHRsaXN0X2FkZChcXHUwMDI2dy1cXHUwMDNlbGgsIFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl93YWxrZXJzKTtcXG4gIDgyOlxcdFxcdHdyaXRlX3VubG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xcbiAgODM6XFx0fVxcbiAgODQ6XFx0XFxuICA4NTpcXHRzdGF0aWMgdm9pZCBmaWI2X3dhbGtlcl91bmxpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpXFxuICA4NjpcXHR7XFxuICA4NzpcXHRcXHR3cml0ZV9sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XFxuICA4ODpcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZ3LVxcdTAwM2VsaCk7XFxuICA4OTpcXHRcXHR3cml0ZV91bmxvY2tfYmgoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcXG4gIDkwOlxcdH1cXG4gIDkxOlxcdFxcbiAgOTI6XFx0c3RhdGljIGludCBmaWI2X25ld19zZXJudW0oc3RydWN0IG5ldCAqbmV0KVxcbiAgOTM6XFx0e1xcbiAgOTQ6XFx0XFx0aW50IG5ldywgb2xkID0gYXRvbWljX3JlYWQoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5maWI2X3Nlcm51bSk7XFxuICA5NTpcXHRcXG4gIDk2OlxcdFxcdGRvIHtcXG4gIDk3OlxcdFxcdFxcdG5ldyA9IG9sZCBcXHUwMDNjIElOVF9NQVggPyBvbGQgKyAxIDogMTtcXG4gIDk4OlxcdFxcdH0gd2hpbGUgKCFhdG9taWNfdHJ5X2NtcHhjaGcoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5maWI2X3Nlcm51bSwgXFx1MDAyNm9sZCwgbmV3KSk7XFxuICA5OTpcXHRcXG4gMTAwOlxcdFxcdHJldHVybiBuZXc7XFxuIDEwMTpcXHR9XFxuIDEwMjpcXHRcXG4gMTAzOlxcdGVudW0ge1xcbiAxMDQ6XFx0XFx0RklCNl9OT19TRVJOVU1fQ0hBTkdFID0gMCxcXG4gMTA1OlxcdH07XFxuIDEwNjpcXHRcXG4gMTA3OlxcdHZvaWQgZmliNl91cGRhdGVfc2VybnVtKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpKVxcbiAxMDg6XFx0e1xcbiAxMDk6XFx0XFx0c3RydWN0IGZpYjZfbm9kZSAqZm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjE5OjM5LjAxMDA4MjA1NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvaXA2X2ZpYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3NTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3NTA6XFx0XFx0aWYgKGl0ZXItXFx1MDAzZXRibCkge1xcbjI3NTE6XFx0XFx0XFx0bG9mZl90IHAgPSAwO1xcbjI3NTI6XFx0XFxuMjc1MzpcXHRcXHRcXHRpcHY2X3JvdXRlX3NlcV9zZXR1cF93YWxrKGl0ZXIsIG5ldCk7XFxuMjc1NDpcXHRcXHRcXHRyZXR1cm4gaXB2Nl9yb3V0ZV9zZXFfbmV4dChzZXEsIE5VTEwsIFxcdTAwMjZwKTtcXG4yNzU1OlxcdFxcdH0gZWxzZSB7XFxuMjc1NjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4yNzU3OlxcdFxcdH1cXG4yNzU4OlxcdH1cXG4yNzU5OlxcdFxcbjI3NjA6XFx0c3RhdGljIGJvb2wgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZShzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyKVxcbjI3NjE6XFx0e1xcbjI3NjI6XFx0XFx0c3RydWN0IGZpYjZfd2Fsa2VyICp3ID0gXFx1MDAyNml0ZXItXFx1MDAzZXc7XFxuMjc2MzpcXHRcXHRyZXR1cm4gdy1cXHUwMDNlbm9kZSBcXHUwMDI2XFx1MDAyNiAhbGlzdF9lbXB0eShcXHUwMDI2dy1cXHUwMDNlbGgpO1xcbjI3NjQ6XFx0fVxcbjI3NjU6XFx0XFxuMjc2NjpcXHRzdGF0aWMgdm9pZCBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4yNzY3OlxcdFxcdF9fcmVsZWFzZXMoUkNVKVxcbjI3Njg6XFx0e1xcbjI3Njk6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7XFxuMjc3MDpcXHRcXHRzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyID0gc2VxLVxcdTAwM2Vwcml2YXRlO1xcbjI3NzE6XFx0XFxuMjc3MjpcXHRcXHRpZiAoaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZShpdGVyKSlcXG4yNzczOlxcdFxcdFxcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIFxcdTAwMjZpdGVyLVxcdTAwM2V3KTtcXG4yNzc0OlxcdFxcbjI3NzU6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjc3NjpcXHR9XFxuMjc3NzpcXHRcXG4yNzc4OlxcdCNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcXG4yNzc5OlxcdHN0YXRpYyBpbnQgaXB2Nl9yb3V0ZV9wcm9nX3NlcV9zaG93KHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4yNzgwOlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcXG4yNzgxOlxcdFxcdFxcdFxcdFxcdCAgICB2b2lkICp2KVxcbjI3ODI6XFx0e1xcbjI3ODM6XFx0XFx0c3RydWN0IGJwZl9pdGVyX19pcHY2X3JvdXRlIGN0eDtcXG4yNzg0OlxcdFxcbjI3ODU6XFx0XFx0Y3R4Lm1ldGEgPSBtZXRhO1xcbjI3ODY6XFx0XFx0Y3R4LnJ0ID0gdjtcXG4yNzg3OlxcdFxcdHJldHVybiBicGZfaXRlcl9ydW5fcHJvZyhwcm9nLCBcXHUwMDI2Y3R4KTtcXG4yNzg4OlxcdH1cXG4yNzg5OlxcdFxcbjI3OTA6XFx0c3RhdGljIGludCBpcHY2X3JvdXRlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbjI3OTE6XFx0e1xcbjI3OTI6XFx0XFx0c3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlciA9IHNlcS1cXHUwMDNlcHJpdmF0ZTtcXG4yNzkzOlxcdFxcdHN0cnVjdCBicGZfaXRlcl9tZXRhIG1ldGE7XFxuMjc5NDpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuMjc5NTpcXHRcXHRpbnQgcmV0O1xcbjI3OTY6XFx0XFxuMjc5NzpcXHRcXHRtZXRhLnNlcSA9IHNlcTtcXG4yNzk4OlxcdFxcdHByb2cgPSBicGZfaXRlcl9nZXRfaW5mbyhcXHUwMDI2bWV0YSwgZmFsc2UpO1xcbjI3OTk6XFx0XFx0aWYgKCFwcm9nKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxOTozOS4wMTAzMDMwMTRaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI2NDIyNzQwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgd2Fsa2luZyB0aHJvdWdoIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBJUHY2IFJvdXRpbmcgVGFibGUgSXRlcmF0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBpcHY2X3JvdXRlX2l0ZXJgIGFuZCBgZmliNl93YWxrZXJgIGFyZSBiZWluZyBzZXQgdXAgYW5kIHVzZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHN0YXJ0IHdpdGggdGhlIG9idmlvdXM6IGZpbmQgb3V0IHdoZXJlIGBpcHY2X3JvdXRlX2l0ZXJgIGlzICpkZWZpbmVkKiBhbmQgKnJlZmVyZW5jZWQqLiBTaW5jZSB0aGlzIGlzIGxpa2VseSB3aXRoaW4gdGhlIElQdjYgcm91dGluZyBpbXBsZW1lbnRhdGlvbiwgYG5ldC9pcHY2L2lwNl9maWIuY2AgaXMgdGhlIHByaW1lIHN1c3BlY3QuIEknbGwgcmVhY2ggZm9yIGEgYGdyZXBgIGNvbW1hbmQgdG8gc2VhcmNoIGRpcmVjdGx5IHdpdGhpbiB0aGF0IGZpbGUgZm9yIGluc3RhbmNlcyBvZiBgaXB2Nl9yb3V0ZV9pdGVyYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIGl0cyB1c2FnZS4gSSdtIGV4cGVjdGluZyB0aGlzIHdpbGwgdW52ZWlsIHNvbWUga2V5IGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgaW50ZWdyYWwgdG8gd2Fsa2luZyB0aGUgSVB2NiByb3V0aW5nIHRhYmxlLiBMZXQncyBzZWUgd2hhdCB3ZSB1bmNvdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTUzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxOTo0Mi4yNzQ1MzM1MjNaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNDEzODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjZfcm91dGVfaXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaXA2X2ZpYi5jPTI2MDQ9c3RhdGljIGludCBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNjA2LVxcdHN0cnVjdCBmaWI2X2luZm8gKnJ0ID0gdjtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjYwNzpcXHRzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyID0gc2VxLVxcdTAwM2Vwcml2YXRlO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yNjA4LVxcdHN0cnVjdCBmaWI2X25oICpmaWI2X25oID0gcnQtXFx1MDAzZWZpYjZfbmg7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjYzNz1zdGF0aWMgaW50IGlwdjZfcm91dGVfeWllbGQoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNjM4LXtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjYzOTpcXHRzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyID0gdy1cXHUwMDNlYXJncztcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjY0MC1cXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNjU1LVxcbm5ldC9pcHY2L2lwNl9maWIuYzoyNjU2OnN0YXRpYyB2b2lkIGlwdjZfcm91dGVfc2VxX3NldHVwX3dhbGsoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcixcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjY1Ny1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjY3MD1zdGF0aWMgc3RydWN0IGZpYjZfdGFibGUgKmlwdjZfcm91dGVfc2VxX25leHRfdGFibGUoc3RydWN0IGZpYjZfdGFibGUgKnRibCxcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNjkwLVxcbm5ldC9pcHY2L2lwNl9maWIuYzoyNjkxOnN0YXRpYyB2b2lkIGlwdjZfcm91dGVfY2hlY2tfc2VybnVtKHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIpXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI2OTIte1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTI3MDQ9c3RhdGljIHZvaWQgKmlwdjZfcm91dGVfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3MDgtXFx0c3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI3MDk6XFx0c3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlciA9IHNlcS1cXHUwMDNlcHJpdmF0ZTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjcxMC1cXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0yNzQwPXN0YXRpYyB2b2lkICppcHY2X3JvdXRlX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc0My1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6Mjc0NDpcXHRzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyID0gc2VxLVxcdTAwM2Vwcml2YXRlO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yNzQ1LVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NTktXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI3NjA6c3RhdGljIGJvb2wgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZShzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyKVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNzYxLXtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0yNzY2PXN0YXRpYyB2b2lkIGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NjktXFx0c3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI3NzA6XFx0c3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlciA9IHNlcS1cXHUwMDNlcHJpdmF0ZTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc3MS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6Mjc3MjpcXHRpZiAoaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZShpdGVyKSlcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc3My1cXHRcXHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCBcXHUwMDI2aXRlci1cXHUwMDNldyk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9Mjc5MD1zdGF0aWMgaW50IGlwdjZfcm91dGVfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3OTEte1xcbm5ldC9pcHY2L2lwNl9maWIuYzoyNzkyOlxcdHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIgPSBzZXEtXFx1MDAzZXByaXZhdGU7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3OTMtXFx0c3RydWN0IGJwZl9pdGVyX21ldGEgbWV0YTtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9NjgwND1zdGF0aWMgaW50IF9fbmV0X2luaXQgaXA2X3JvdXRlX25ldF9pbml0X2xhdGUoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy02ODA4LVxcdFxcdFxcdCAgICAgXFx1MDAyNmlwdjZfcm91dGVfc2VxX29wcyxcXG5uZXQvaXB2Ni9yb3V0ZS5jOjY4MDk6XFx0XFx0XFx0ICAgICBzaXplb2Yoc3RydWN0IGlwdjZfcm91dGVfaXRlcikpKVxcbm5ldC9pcHY2L3JvdXRlLmMtNjgxMC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9Njg5MD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIGlwdjZfcm91dGVfc2VxX2luZm8gPSB7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTY4OTMtXFx0LmZpbmlfc2VxX3ByaXZhdGVcXHQ9IGJwZl9pdGVyX2Zpbmlfc2VxX25ldCxcXG5uZXQvaXB2Ni9yb3V0ZS5jOjY4OTQ6XFx0LnNlcV9wcml2X3NpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyKSxcXG5uZXQvaXB2Ni9yb3V0ZS5jLTY4OTUtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTk6NDIuMzM2OTU5MzkyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5NDI4MTc4NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIElQdjYgRklCIFdhbGtlciBpbiBuZXQvaXB2Ni9pcDZfZmliLmMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBJUHY2IEZJQi4gSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHJvdXRlIHdhbGtlciBhbmQgaXRzIHJlbGF0ZWQgZnVuY3Rpb25zIGZ1bmN0aW9uLiBUaW1lIHRvIGp1bXAgaW50byBsaW5lcyAyNjUwLTI3NTAgb2YgYG5ldC9pcHY2L2lwNl9maWIuY2AuIEknbSBnb2luZyB0byBmb2N1cyBvbiBgaXB2Nl9yb3V0ZV9zZXFfc2V0dXBfd2Fsa2AsIGBmaWI2X3dhbGtlcl9saW5rYCwgYW5kIHRoZSBvdGhlciBwbGF5ZXJzIGluIHRoaXMgbGl0dGxlIHBlcmZvcm1hbmNlIG9mIHJvdXRlIGxvb2t1cC4gSSBleHBlY3QgdG8gc2VlIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBkYXRhIHN0cnVjdHVyZXMsIHRoZSBsb2dpYyBmb3Igd2Fsa2luZyB0aHJvdWdoIHRoZSBGSUIgdHJlZSwgYW5kIHdoYXRldmVyIG9wdGltaXphdGlvbnMgdGhleSdyZSBlbXBsb3lpbmcuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgYnVncykgaGFwcGVuIHdoZW4gcm91dGluZyBJUHY2IHRyYWZmaWMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0aGUgY29tcGxleGl0aWVzIG9mIHByZWZpeCBtYXRjaGluZywgbG9uZ2VzdCBwcmVmaXggbWF0Y2ggKExQTSksIGFuZCBhbnkgYXNzb2NpYXRlZCBjYWNoaW5nLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyB0cmlja3Mgb3Igb3B0aW1pemF0aW9ucyBpbiBwbGF5IGhlcmUuIFRpbWUgdG8gZ2V0IGRvd24gYW5kIGRpcnR5IHdpdGggdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MDgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxOTo0Ny4yNzk3ODAyMzJaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwNl9maWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjUwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjUwOlxcdFxcdFxcdFxcdHJldHVybiAxO1xcbjI2NTE6XFx0XFx0fSB3aGlsZSAoaXRlci1cXHUwMDNldy5sZWFmKTtcXG4yNjUyOlxcdFxcbjI2NTM6XFx0XFx0cmV0dXJuIDA7XFxuMjY1NDpcXHR9XFxuMjY1NTpcXHRcXG4yNjU2OlxcdHN0YXRpYyB2b2lkIGlwdjZfcm91dGVfc2VxX3NldHVwX3dhbGsoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcixcXG4yNjU3OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXQgKm5ldClcXG4yNjU4OlxcdHtcXG4yNjU5OlxcdFxcdG1lbXNldChcXHUwMDI2aXRlci1cXHUwMDNldywgMCwgc2l6ZW9mKGl0ZXItXFx1MDAzZXcpKTtcXG4yNjYwOlxcdFxcdGl0ZXItXFx1MDAzZXcuZnVuYyA9IGlwdjZfcm91dGVfeWllbGQ7XFxuMjY2MTpcXHRcXHRpdGVyLVxcdTAwM2V3LnJvb3QgPSBcXHUwMDI2aXRlci1cXHUwMDNldGJsLVxcdTAwM2V0YjZfcm9vdDtcXG4yNjYyOlxcdFxcdGl0ZXItXFx1MDAzZXcuc3RhdGUgPSBGV1NfSU5JVDtcXG4yNjYzOlxcdFxcdGl0ZXItXFx1MDAzZXcubm9kZSA9IGl0ZXItXFx1MDAzZXcucm9vdDtcXG4yNjY0OlxcdFxcdGl0ZXItXFx1MDAzZXcuYXJncyA9IGl0ZXI7XFxuMjY2NTpcXHRcXHRpdGVyLVxcdTAwM2VzZXJudW0gPSBSRUFEX09OQ0UoaXRlci1cXHUwMDNldy5yb290LVxcdTAwM2Vmbl9zZXJudW0pO1xcbjI2NjY6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNml0ZXItXFx1MDAzZXcubGgpO1xcbjI2Njc6XFx0XFx0ZmliNl93YWxrZXJfbGluayhuZXQsIFxcdTAwMjZpdGVyLVxcdTAwM2V3KTtcXG4yNjY4OlxcdH1cXG4yNjY5OlxcdFxcbjI2NzA6XFx0c3RhdGljIHN0cnVjdCBmaWI2X3RhYmxlICppcHY2X3JvdXRlX3NlcV9uZXh0X3RhYmxlKHN0cnVjdCBmaWI2X3RhYmxlICp0YmwsXFxuMjY3MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldCAqbmV0KVxcbjI2NzI6XFx0e1xcbjI2NzM6XFx0XFx0dW5zaWduZWQgaW50IGg7XFxuMjY3NDpcXHRcXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTtcXG4yNjc1OlxcdFxcbjI2NzY6XFx0XFx0aWYgKHRibCkge1xcbjI2Nzc6XFx0XFx0XFx0aCA9ICh0YmwtXFx1MDAzZXRiNl9pZCBcXHUwMDI2IChGSUI2X1RBQkxFX0hBU0hTWiAtIDEpKSArIDE7XFxuMjY3ODpcXHRcXHRcXHRub2RlID0gcmN1X2RlcmVmZXJlbmNlKGhsaXN0X25leHRfcmN1KFxcdTAwMjZ0YmwtXFx1MDAzZXRiNl9obGlzdCkpO1xcbjI2Nzk6XFx0XFx0fSBlbHNlIHtcXG4yNjgwOlxcdFxcdFxcdGggPSAwO1xcbjI2ODE6XFx0XFx0XFx0bm9kZSA9IE5VTEw7XFxuMjY4MjpcXHRcXHR9XFxuMjY4MzpcXHRcXG4yNjg0OlxcdFxcdHdoaWxlICghbm9kZSBcXHUwMDI2XFx1MDAyNiBoIFxcdTAwM2MgRklCNl9UQUJMRV9IQVNIU1opIHtcXG4yNjg1OlxcdFxcdFxcdG5vZGUgPSByY3VfZGVyZWZlcmVuY2UoXFxuMjY4NjpcXHRcXHRcXHRcXHRobGlzdF9maXJzdF9yY3UoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5maWJfdGFibGVfaGFzaFtoKytdKSk7XFxuMjY4NzpcXHRcXHR9XFxuMjY4ODpcXHRcXHRyZXR1cm4gaGxpc3RfZW50cnlfc2FmZShub2RlLCBzdHJ1Y3QgZmliNl90YWJsZSwgdGI2X2hsaXN0KTtcXG4yNjg5OlxcdH1cXG4yNjkwOlxcdFxcbjI2OTE6XFx0c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9jaGVja19zZXJudW0oc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcilcXG4yNjkyOlxcdHtcXG4yNjkzOlxcdFxcdGludCBzZXJudW0gPSBSRUFEX09OQ0UoaXRlci1cXHUwMDNldy5yb290LVxcdTAwM2Vmbl9zZXJudW0pO1xcbjI2OTQ6XFx0XFxuMjY5NTpcXHRcXHRpZiAoaXRlci1cXHUwMDNlc2VybnVtICE9IHNlcm51bSkge1xcbjI2OTY6XFx0XFx0XFx0aXRlci1cXHUwMDNlc2VybnVtID0gc2VybnVtO1xcbjI2OTc6XFx0XFx0XFx0aXRlci1cXHUwMDNldy5zdGF0ZSA9IEZXU19JTklUO1xcbjI2OTg6XFx0XFx0XFx0aXRlci1cXHUwMDNldy5ub2RlID0gaXRlci1cXHUwMDNldy5yb290O1xcbjI2OTk6XFx0XFx0XFx0V0FSTl9PTihpdGVyLVxcdTAwM2V3LnNraXApO1xcbjI3MDA6XFx0XFx0XFx0aXRlci1cXHUwMDNldy5za2lwID0gaXRlci1cXHUwMDNldy5jb3VudDtcXG4yNzAxOlxcdFxcdH1cXG4yNzAyOlxcdH1cXG4yNzAzOlxcdFxcbjI3MDQ6XFx0c3RhdGljIHZvaWQgKmlwdjZfcm91dGVfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxcbjI3MDU6XFx0e1xcbjI3MDY6XFx0XFx0aW50IHI7XFxuMjcwNzpcXHRcXHRzdHJ1Y3QgZmliNl9pbmZvICpuO1xcbjI3MDg6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7XFxuMjcwOTpcXHRcXHRzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyID0gc2VxLVxcdTAwM2Vwcml2YXRlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxOTo0Ny4yNzk5OTkwNDJaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzI2NjcxODkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQdjYgUm91dGUgV2Fsa2VyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgdHdvIGZ1bmN0aW9uczogYGZpYjZfd2Fsa2VyX3VubGlua2AgYW5kIGBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlYC4gU3BlY2lmaWNhbGx5LCBgbGlzdF9kZWwoXHUwMDI2dy1cdTAwM2VsaClgIGJlY29tZXMgYGxpc3RfZGVsX2luaXQoXHUwMDI2dy1cdTAwM2VsaClgIGFuZCB0aGUgcmV0dXJuIGNvbmRpdGlvbiBpbiBgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZWAgaXMgY2hhbmdlZCBmcm9tIGEgbm9kZS9zdGF0ZSBjaGVjayB0byBgIWxpc3RfZW1wdHkoXHUwMDI2dy1cdTAwM2VsaClgLiBUaGUgY3JpdGljYWwgYXNwZWN0IGhlcmUgaXMgdGhlIHNoaWZ0IGZyb20gYW4gaW5kaXJlY3QgY2hlY2sgb2Ygd2Fsa2VyIHN0YXRlIHRvIGEgZGlyZWN0IGNoZWNrIG9mIGxpc3QgbWVtYmVyc2hpcC5cblxuV2h5PyBXZWxsLCBpdCBsb29rcyBsaWtlIHRoZXJlIHdlcmUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMuIFRoZSBgaXB2Nl9yb3V0ZV9zZXFfc2V0dXBfd2Fsa2AgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHdhbGtlciBhbmQgbGlua3MgaXQgdG8gYG5ldC1cdTAwM2VpcHY2LmZpYjZfd2Fsa2Vyc2AuIENvbnZlcnNlbHksIGBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcGAgY2hlY2tzIGlmIHRoZSB3YWxrZXIgaXMgXCJhY3RpdmVcIiB2aWEgYSBjaGVjayBvbiBhbiBwb3RlbnRpYWxseSBmbGF3ZWQgc3RhdGUgY2hlY2ssIGFuZCBpZiBzbywgdW5saW5rcyBpdC4gVGhlIHByZXZpb3VzIGNvbmRpdGlvbiBmb3IgYWN0aXZlLW5lc3MgaW4gYGlwdjZfcm91dGVfaXRlcl9hY3RpdmVgIHdhcyBzdXNwZWN0LiBJdCB3YXMgdHJ5aW5nIHRvIGluZmVyIGxpc3QgbWVtYmVyc2hpcCBiYXNlZCBvbiB0aGUgd2Fsa2VyJ3Mgbm9kZSBhbmQgc3RhdGUsIHdoaWNoIGNvdWxkIGJlY29tZSBvdXQgb2Ygc3luYywgb3IgYWxsb3cgZm9yIG11bHRpcGxlIGNhbGxzIHRvIGBzZXFfc3RvcGAsIGxlYWRpbmcgdG8gaXNzdWVzIGxpa2UgZG91YmxlIGBsaXN0X2RlbGAgY2FsbHMsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcywgb3IgbGlzdCBjb3JydXB0aW9uLCBvciBmYWlsaW5nIHRvIHJlbW92ZSB0aGUgd2Fsa2VyIGF0IGFsbCwgd2hpY2ggd291bGQgbGVhayB0aGUgd2Fsa2VyLiBUaGUgbmV3LCBtb3JlIGRpcmVjdCBhcHByb2FjaCB1c2luZyBgbGlzdF9kZWxfaW5pdGAgYW5kIGBsaXN0X2VtcHR5YCBhcHBlYXJzIHRvIGJlIGEgbXVjaCBjbGVhbmVyIHNvbHV0aW9uIHRvIGFjY3VyYXRlbHkgdHJhY2sgbGlzdCBtZW1iZXJzaGlwIGFuZCBwcmV2ZW50IHRob3NlIGxpc3QtcmVsYXRlZCBtZW1vcnkgaXNzdWVzLlxuXG5Ob3csIGZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLCBsZXQncyBzZWUgaWYgdGhpcyBpbnRyb2R1Y2VzIG9yIGVsaW1pbmF0ZXMgYW55IHZ1bG5lcmFiaWxpdGllcy4gVGhlIGNvZGUncyBpbml0aWFsaXphdGlvbiB2aWEgYG1lbXNldChcdTAwMjZpdGVyLVx1MDAzZXcsIDAsIHNpemVvZihpdGVyLVx1MDAzZXcpKWAgYW5kIGBJTklUX0xJU1RfSEVBRChcdTAwMjZpdGVyLVx1MDAzZXcubGgpYCBpcyBjbGVhciwgYW5kIGBsaXN0X2RlbF9pbml0YCBjb3JyZWN0bHkgcmVpbml0aWFsaXplcyB0aGUgbGlzdCBoZWFkLiBUaGUgYGxpc3RfZW1wdHlgIGNoZWNrLCB3aGljaCBleGFtaW5lcyBgdy1cdTAwM2VsaC5uZXh0ID09IFx1MDAyNnctXHUwMDNlbGhgLCBpcyBzdHJhaWdodGZvcndhcmQuIFRoZXJlJ3Mgbm8gb2J2aW91cyByZWFkaW5nIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIG5vIGRpcmVjdCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgZXZpZGVudC4gVGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBjbGVhciwgbGlzdC1yZWxhdGVkIGJ1Zy4gU3BlY2lmaWNhbGx5LCBsaXN0IGNvcnJ1cHRpb24sIGRvdWJsZSBsaXN0IGRlbGV0aW9uLCBvciBpbmFjY3VyYXRlIHRyYWNraW5nIG9mIHdhbGtlciBsaXN0IG1lbWJlcnNoaXAuIEl0IGRlYWxzIHdpdGggbGlzdCBtYW5pcHVsYXRpb24sIGFuZCBhbnkgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHNob3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgbGlzdCBoYXJkZW5pbmcsIEtBU0FOLCBvciBgQ09ORklHX0RFQlVHX0xJU1RgLiBJJ2Qgd2FudCB0byBjaGVjayBpZiBhbnkgb3RoZXIgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggYHctXHUwMDNlbGhgIG9yIHRoZSBgZmliNl93YWxrZXJgIHN0cnVjdCwgYnV0IHRoaXMgaXMgYSBzb2xpZCBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkwNiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjE5OjU0LjU0NjcyMDcxN1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1NzcwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmliNl93YWxrZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9maWIuYz00Mj1zdHJ1Y3QgZmliNl9jbGVhbmVyIHtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6NDM6XFx0c3RydWN0IGZpYjZfd2Fsa2VyIHc7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTQ0LVxcdHN0cnVjdCBuZXQgKm5ldDtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz02MD1zdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqZmliNl9yZXBhaXJfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtNjItXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZmliNl9ub2RlICpmbik7XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjYzOnN0YXRpYyBpbnQgZmliNl93YWxrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KTtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6NjQ6c3RhdGljIGludCBmaWI2X3dhbGtfY29udGludWUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtNjUtXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9NzM9c3RhdGljIHZvaWQgZmliNl9nY190aW1lcl9jYihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtNzUtI2RlZmluZSBGT1JfV0FMS0VSUyhuZXQsIHcpIFxcXFxcXG5uZXQvaXB2Ni9pcDZfZmliLmM6NzY6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh3LCBcXHUwMDI2KG5ldCktXFx1MDAzZWlwdjYuZmliNl93YWxrZXJzLCBsaClcXG5uZXQvaXB2Ni9pcDZfZmliLmMtNzctXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjc4OnN0YXRpYyB2b2lkIGZpYjZfd2Fsa2VyX2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTc5LXtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6ODA6XFx0d3JpdGVfbG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xcbm5ldC9pcHY2L2lwNl9maWIuYzo4MTpcXHRsaXN0X2FkZChcXHUwMDI2dy1cXHUwMDNlbGgsIFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl93YWxrZXJzKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6ODI6XFx0d3JpdGVfdW5sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTgzLX1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtODQtXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjg1OnN0YXRpYyB2b2lkIGZpYjZfd2Fsa2VyX3VubGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X3dhbGtlciAqdylcXG5uZXQvaXB2Ni9pcDZfZmliLmMtODYte1xcbm5ldC9pcHY2L2lwNl9maWIuYzo4NzpcXHR3cml0ZV9sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTg4LVxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnctXFx1MDAzZWxoKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6ODk6XFx0d3JpdGVfdW5sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTkwLX1cXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz00NDg9c3RhdGljIGludCBmaWI2X3J0X2R1bXAoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2R1bXBfYXJnICphcmcpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtNDY5LVxcbm5ldC9pcHY2L2lwNl9maWIuYzo0NzA6c3RhdGljIGludCBmaWI2X25vZGVfZHVtcChzdHJ1Y3QgZmliNl93YWxrZXIgKncpXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTQ3MS17XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9NDc5PXN0YXRpYyBpbnQgZmliNl90YWJsZV9kdW1wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfdGFibGUgKnRiLFxcbm5ldC9pcHY2L2lwNl9maWIuYzo0ODA6XFx0XFx0XFx0ICAgc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbm5ldC9pcHY2L2lwNl9maWIuYy00ODEte1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTQ5Mj1pbnQgZmliNl90YWJsZXNfZHVtcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtNDk1LVxcdHN0cnVjdCBmaWI2X2R1bXBfYXJnIGFyZztcXG5uZXQvaXB2Ni9pcDZfZmliLmM6NDk2OlxcdHN0cnVjdCBmaWI2X3dhbGtlciAqdztcXG5uZXQvaXB2Ni9pcDZfZmliLmMtNDk3LVxcdHVuc2lnbmVkIGludCBoO1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTUyNy1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6NTI4OnN0YXRpYyBpbnQgZmliNl9kdW1wX25vZGUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbm5ldC9pcHY2L2lwNl9maWIuYy01Mjkte1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTUzMi1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6NTMzOlxcdGZvcl9lYWNoX2ZpYjZfd2Fsa2VyX3J0KHcpIHtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtNTM0LVxcdFxcdHJlcyA9IHJ0Nl9kdW1wX3JvdXRlKHJ0LCB3LVxcdTAwM2VhcmdzLCB3LVxcdTAwM2Vza2lwX2luX25vZGUpO1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTU2Mj1zdGF0aWMgdm9pZCBmaWI2X2R1bXBfZW5kKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy01NjQtXFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoY2ItXFx1MDAzZXNrYi1cXHUwMDNlc2spO1xcbm5ldC9pcHY2L2lwNl9maWIuYzo1NjU6XFx0c3RydWN0IGZpYjZfd2Fsa2VyICp3ID0gKHZvaWQgKiljYi1cXHUwMDNlYXJnc1syXTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtNTY2LVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTU2OS1cXHRcXHRcXHRjYi1cXHUwMDNlYXJnc1s0XSA9IDA7XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjU3MDpcXHRcXHRcXHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCB3KTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtNTcxLVxcdFxcdH1cXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz01ODU9c3RhdGljIGludCBmaWI2X2R1bXBfdGFibGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTU4OC1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6NTg5OlxcdHN0cnVjdCBmaWI2X3dhbGtlciAqdztcXG5uZXQvaXB2Ni9pcDZfZmliLmMtNTkwLVxcdGludCByZXM7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtNjIyLVxcdFxcdGlmIChyZXMgXFx1MDAzYz0gMCkge1xcbm5ldC9pcHY2L2lwNl9maWIuYzo2MjM6XFx0XFx0XFx0ZmliNl93YWxrZXJfdW5saW5rKG5ldCwgdyk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTYyNC1cXHRcXHRcXHRjYi1cXHUwMDNlYXJnc1s0XSA9IDA7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9NjMxPXN0YXRpYyBpbnQgaW5ldDZfZHVtcF9maWIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTYzOS1cXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6NjQwOlxcdHN0cnVjdCBmaWI2X3dhbGtlciAqdztcXG5uZXQvaXB2Ni9pcDZfZmliLmMtNjQxLVxcdHN0cnVjdCBmaWI2X3RhYmxlICp0YjtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0xODQxPXN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICpmaWI2X3JlcGFpcl90cmVlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0xODQ3LVxcdHN0cnVjdCBmaWI2X25vZGUgKmNoaWxkO1xcbm5ldC9pcHY2L2lwNl9maWIuYzoxODQ4OlxcdHN0cnVjdCBmaWI2X3dhbGtlciAqdztcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMTg0OS1cXHRpbnQgaXRlciA9IDA7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMTkzMi1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MTkzMzpcXHRcXHRyZWFkX2xvY2soXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMTkzNC1cXHRcXHRGT1JfV0FMS0VSUyhuZXQsIHcpIHtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0xOTU2LVxcdFxcdH1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MTk1NzpcXHRcXHRyZWFkX3VubG9jayhcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0xOTU4LVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTE5Njk9c3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0xOTczLVxcdHN0cnVjdCBmaWI2X2luZm8gKmxlYWYsICpyZXBsYWNlX3J0ID0gTlVMTDtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MTk3NDpcXHRzdHJ1Y3QgZmliNl93YWxrZXIgKnc7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTE5NzUtXFx0c3RydWN0IGZpYjZfaW5mbyAqcnQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKCpydHAsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjAyNS1cXHQvKiBBZGp1c3Qgd2Fsa2VycyAqL1xcbm5ldC9pcHY2L2lwNl9maWIuYzoyMDI2OlxcdHJlYWRfbG9jayhcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yMDI3LVxcdEZPUl9XQUxLRVJTKG5ldCwgdykge1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwMzUtXFx0fVxcbm5ldC9pcHY2L2lwNl9maWIuYzoyMDM2OlxcdHJlYWRfdW5sb2NrKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwMzctXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjA2Nj1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIxMjktXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjIxMzA6c3RhdGljIGludCBmaWI2X3dhbGtfY29udGludWUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yMTMxLXtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjE5LVxcbm5ldC9pcHY2L2lwNl9maWIuYzoyMjIwOnN0YXRpYyBpbnQgZmliNl93YWxrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjIxLXtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjI2LVxcbm5ldC9pcHY2L2lwNl9maWIuYzoyMjI3OlxcdGZpYjZfd2Fsa2VyX2xpbmsobmV0LCB3KTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjIyOC1cXHRyZXMgPSBmaWI2X3dhbGtfY29udGludWUodyk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIyMjktXFx0aWYgKHJlcyBcXHUwMDNjPSAwKVxcbm5ldC9pcHY2L2lwNl9maWIuYzoyMjMwOlxcdFxcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIHcpO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjMxLVxcdHJldHVybiByZXM7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjIzMy1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjIzNDpzdGF0aWMgaW50IGZpYjZfY2xlYW5fbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIyMzUte1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIyNTMtXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjIyNTQ6XFx0Zm9yX2VhY2hfZmliNl93YWxrZXJfcnQodykge1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjU1LVxcdFxcdHJlcyA9IGMtXFx1MDAzZWZ1bmMocnQsIGMtXFx1MDAzZWFyZyk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjQ2ND1zdGF0aWMgaW50IF9fbmV0X2luaXQgZmliNl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQ3Ny1cXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfZ2NfbG9jayk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI0Nzg6XFx0cndsb2NrX2luaXQoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjQ3OTpcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2Vycyk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI0ODAtXFx0dGltZXJfc2V0dXAoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5pcDZfZmliX3RpbWVyLCBmaWI2X2djX3RpbWVyX2NiLCAwKTtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0yNjA0PXN0YXRpYyBpbnQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjYzNi1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjYzNzpzdGF0aWMgaW50IGlwdjZfcm91dGVfeWllbGQoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNjM4LXtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0yNjU2PXN0YXRpYyB2b2lkIGlwdjZfcm91dGVfc2VxX3NldHVwX3dhbGsoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcixcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNjY2LVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZpdGVyLVxcdTAwM2V3LmxoKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjY2NzpcXHRmaWI2X3dhbGtlcl9saW5rKG5ldCwgXFx1MDAyNml0ZXItXFx1MDAzZXcpO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yNjY4LX1cXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0yNzA0PXN0YXRpYyB2b2lkICppcHY2X3JvdXRlX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNzI2LVxcdH0gZWxzZSBpZiAociBcXHUwMDNjIDApIHtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjcyNzpcXHRcXHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCBcXHUwMDI2aXRlci1cXHUwMDNldyk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3MjgtXFx0XFx0cmV0dXJuIE5VTEw7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3MjktXFx0fVxcbm5ldC9pcHY2L2lwNl9maWIuYzoyNzMwOlxcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIFxcdTAwMjZpdGVyLVxcdTAwM2V3KTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjczMS1cXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0yNzYwPXN0YXRpYyBib29sIGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcilcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc2MS17XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI3NjI6XFx0c3RydWN0IGZpYjZfd2Fsa2VyICp3ID0gXFx1MDAyNml0ZXItXFx1MDAzZXc7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NjMtXFx0cmV0dXJuIHctXFx1MDAzZW5vZGUgXFx1MDAyNlxcdTAwMjYgIWxpc3RfZW1wdHkoXFx1MDAyNnctXFx1MDAzZWxoKTtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0yNzY2PXN0YXRpYyB2b2lkIGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NzItXFx0aWYgKGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoaXRlcikpXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI3NzM6XFx0XFx0ZmliNl93YWxrZXJfdW5saW5rKG5ldCwgXFx1MDAyNml0ZXItXFx1MDAzZXcpO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yNzc0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxOTo1NC42MDUzMTkwNTZaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzYxNDI0MTU5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLTVNBTiBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBjYXJlZnVsbHkgZ28gdGhyb3VnaCB0aGlzIGFuZCBtYWtlIGFic29sdXRlbHkgc3VyZSB3ZSdyZSBub3QgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyB3aXRoIHRoaXMgcGF0Y2guIEZpcnN0LCBhIHF1aWNrIHNhbml0eSBjaGVjazogYXJlIHdlIHBvdGVudGlhbGx5IGxlYWtpbmcga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZT8gTm8sIG5vdGhpbmcgaW4gdGhpcyBjaGFuZ2UgdG91Y2hlcyB0aGF0IGFyZWEuIEdvb2QuIE5leHQsIGFyZSB3ZSBicmFuY2hpbmcgb24gYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBMb29rcyBsaWtlIHRoZSBgdy1cdTAwM2VsaGAgbGlzdCBoZWFkIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGluIGVpdGhlciBgaXB2Nl9yb3V0ZV9zZXFfc2V0dXBfd2Fsa2Agb3IgYGZpYjZfbmV0X2luaXRgLCBhbmQgdGhlbiByZWluaXRpYWxpemVkIHdpdGggYGxpc3RfZGVsX2luaXRgLCBzbyB0aGF0IHNlZW1zIHNhZmUuIE1vdmluZyBvbiwgYXJlIHdlIGludHJvZHVjaW5nIGFueSBuZXcgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMgdGhhdCBtaWdodCBiZSBwcm9ibGVtYXRpYz8gTm9wZSwgbm90aGluZyBuZXcgdGhlcmUuIEZpbmFsbHksIGFueSBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3Rocz8gTm8uXG5cblRoZSByb290IG9mIHRoaXMgcGF0Y2ggaXMgcmVhbGx5IGFib3V0IGZpeGluZyBhIGJ1ZyBpbiB0aGUgd2Fsa2VyIGxpc3QgdHJhY2tpbmcsIHNwZWNpZmljYWxseSBpbiBob3cgYGlwdjZfcm91dGVfaXRlcl9hY3RpdmVgIGRldGVybWluZXMgd2hlbiB0byBjYWxsIGBmaWI2X3dhbGtlcl91bmxpbmtgIGR1cmluZyBgc2VxX3N0b3BgLiBUaGUga2V5IGZpeCBpcyBtYWtpbmcgc3VyZSBgbGlzdF9kZWxfaW5pdGAgaXMgdXNlZCwgc28gd2UgY2FuIHJlbGlhYmx5IGNoZWNrIGlmIHRoZSB3YWxrZXIgaXMgc3RpbGwgbGlua2VkIHVzaW5nIGBsaXN0X2VtcHR5KFx1MDAyNnctXHUwMDNlbGgpYC4gRXNzZW50aWFsbHksIHRoZSBjaGFuZ2UgcHJvdmlkZXMgYSBjbGVhbmVyIHdheSB0byBoYW5kbGUgdGhlIGl0ZXJhdG9yIHN0b3BwaW5nIHBvaW50LiBOb3csIHRoZSBwYXRjaCAqZG9lcyogdG91Y2ggbGlua2VkIGxpc3RzLCBidXQgYW55IGNvbW1vbiBsaW5rZWQgbGlzdCBpc3N1ZXMgbGlrZSBkb3VibGUgdW5saW5raW5nLCBsaXN0IGNvcnJ1cHRpb24sIG9yIFVzZS1BZnRlci1GcmVlIHNpdHVhdGlvbnMgc2hvdWxkIGJlIGZsYWdnZWQgYnkgS0FTQU4gb3IgdGhlIGxpc3QgZGVidWdnaW5nIGZlYXR1cmVzLCBub3QgS01TQU4uIFNvLCBpbiB0ZXJtcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBhbnkgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLCB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBvciBleHBvc2UgYW55IG5ldyByaXNrcy5cblxuR2l2ZW4gYWxsIG9mIHRoYXQsIEkgY2FuIGNvbmZpZGVudGx5IHNheSB0aGF0IGBOZWVkc0tNU0FOID0gZmFsc2VgLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NTQsIk91dHB1dFRva2VucyI6MTc4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjIwOjAyLjIxOTU2MzM5M1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgbGlzdF9kZWwgd2l0aCBsaXN0X2RlbF9pbml0IGluIGZpYjZfd2Fsa2VyX3VubGluaygpIGFuZCB1cGRhdGVzIGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoKSB0byBjaGVjayBsaXN0X2VtcHR5KFxcdTAwMjZ3LVxcdTAwM2VsaCkgaW5zdGVhZCBvZiBpbnNwZWN0aW5nIHdhbGtlciBzdGF0ZSBhbmQgbm9kZSBwb2ludGVycy4gVGhpcyBjaGFuZ2UgZml4ZXMgbGlzdCB0cmFja2luZyBhbmQgYXZvaWRzIGRvdWJsZSBsaXN0IGRlbGV0aW9uIC8gbGlzdCBjb3JydXB0aW9uIHdoZW4gc3RvcHBpbmcgdGhlIElQdjYgcm91dGUgc2VxIGl0ZXJhdGlvbi4gQWxsIHJlbGV2YW50IGxpc3Qgc3RydWN0dXJlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKHZpYSBJTklUX0xJU1RfSEVBRCAvIGxpc3RfZGVsX2luaXQgLyBtZW1zZXQpIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkLiBTdGFuZGFyZCBkZXRlY3RvcnMgKEtBU0FOIC8gQ09ORklHX0RFQlVHX0xJU1QpIGNvdmVyIGxpc3QgbWFuaXB1bGF0aW9uIGFuZCBtZW1vcnkgY29ycnVwdGlvbiByaXNrcyBpbiB0aGlzIGFyZWEsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGxpc3RfZGVsIHdpdGggbGlzdF9kZWxfaW5pdCBpbiBmaWI2X3dhbGtlcl91bmxpbmsoKSBhbmQgdXBkYXRlcyBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKCkgdG8gY2hlY2sgbGlzdF9lbXB0eShcXHUwMDI2dy1cXHUwMDNlbGgpIGluc3RlYWQgb2YgaW5zcGVjdGluZyB3YWxrZXIgc3RhdGUgYW5kIG5vZGUgcG9pbnRlcnMuIFRoaXMgY2hhbmdlIGZpeGVzIGxpc3QgdHJhY2tpbmcgYW5kIGF2b2lkcyBkb3VibGUgbGlzdCBkZWxldGlvbiAvIGxpc3QgY29ycnVwdGlvbiB3aGVuIHN0b3BwaW5nIHRoZSBJUHY2IHJvdXRlIHNlcSBpdGVyYXRpb24uIEFsbCByZWxldmFudCBsaXN0IHN0cnVjdHVyZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkICh2aWEgSU5JVF9MSVNUX0hFQUQgLyBsaXN0X2RlbF9pbml0IC8gbWVtc2V0KSBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayByaXNrcyBhcmUgaW50cm9kdWNlZC4gU3RhbmRhcmQgZGV0ZWN0b3JzIChLQVNBTiAvIENPTkZJR19ERUJVR19MSVNUKSBjb3ZlciBsaXN0IG1hbmlwdWxhdGlvbiBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gcmlza3MgaW4gdGhpcyBhcmVhLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowfwhdk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 07:56:32 +0000 UTC FinishedAt: 2026-09-08 08:20:03 +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": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "PROC_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "PROC_FS" ], "series_id": "43ff44af-d88b-42fc-a42c-ab238c98f4f4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "fib6_walker_unlink", "ipv6_route_iter_active", "ipv6_route_native_seq_stop", "ipv6_route_seq_stop", "ipv6_route_seq_start", "ipv6_route_seq_next" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7UFJPQ19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZpYjZfd2Fsa2VyX3VubGluayYjMzQ7LAogICAgJiMzNDtpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlJiMzNDssCiAgICAmIzM0O2lwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wJiMzNDssCiAgICAmIzM0O2lwdjZfcm91dGVfc2VxX3N0b3AmIzM0OywKICAgICYjMzQ7aXB2Nl9yb3V0ZV9zZXFfc3RhcnQmIzM0OywKICAgICYjMzQ7aXB2Nl9yb3V0ZV9zZXFfbmV4dCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGxpc3RfZGVsIHdpdGggbGlzdF9kZWxfaW5pdCBpbiBmaWI2X3dhbGtlcl91bmxpbmsoKSBhbmQgdXBkYXRlcyBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKCkgdG8gY2hlY2sgbGlzdF9lbXB0eShcdTAwMjZ3LVx1MDAzZWxoKSBpbnN0ZWFkIG9mIGluc3BlY3Rpbmcgd2Fsa2VyIHN0YXRlIGFuZCBub2RlIHBvaW50ZXJzLiBUaGlzIGNoYW5nZSBmaXhlcyBsaXN0IHRyYWNraW5nIGFuZCBhdm9pZHMgZG91YmxlIGxpc3QgZGVsZXRpb24gLyBsaXN0IGNvcnJ1cHRpb24gd2hlbiBzdG9wcGluZyB0aGUgSVB2NiByb3V0ZSBzZXEgaXRlcmF0aW9uLiBBbGwgcmVsZXZhbnQgbGlzdCBzdHJ1Y3R1cmVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCAodmlhIElOSVRfTElTVF9IRUFEIC8gbGlzdF9kZWxfaW5pdCAvIG1lbXNldCkgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgcmlza3MgYXJlIGludHJvZHVjZWQuIFN0YW5kYXJkIGRldGVjdG9ycyAoS0FTQU4gLyBDT05GSUdfREVCVUdfTElTVCkgY292ZXIgbGlzdCBtYW5pcHVsYXRpb24gYW5kIG1lbW9yeSBjb3JydXB0aW9uIHJpc2tzIGluIHRoaXMgYXJlYSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElQdjYgRklCIHdhbGtlciBtYW5hZ2VtZW50IGFuZCBpdGVyYXRpb24gc3RhdGUgY2hlY2tpbmcgaW4gbmV0L2lwdjYvaXA2X2ZpYi5jICh1c2luZyBsaXN0X2RlbF9pbml0IG9uIHVubGlua2luZyBhbmQgY2hlY2tpbmcgIWxpc3RfZW1wdHkgZm9yIGFjdGl2ZSBpdGVyYXRvciBzdGF0ZSkuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIC9wcm9jL25ldC9pcHY2X3JvdXRlIHNlcV9maWxlIG9wZXJhdGlvbnMgYW5kIEJQRiBJUHY2IHJvdXRlIGl0ZXJhdG9ycyBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1YzQ2NGMwMmRiZjA3OGY1ODk5Yjc4NDJjOThiMDRhM2RhODQ3MWQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwODoxNzo1NSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmNcbmluZGV4IDNlMzgyYmExNTczZTMuLjllYTc1NzAzYjM4ZDQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfZmliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl9maWIuY1xuQEAgLTg1LDcgJiM0Mzs4NSw3IEBAIHN0YXRpYyB2b2lkIGZpYjZfd2Fsa2VyX2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4gc3RhdGljIHZvaWQgZmliNl93YWxrZXJfdW5saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxuIHtcbiBcdHdyaXRlX2xvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XG4tXHRsaXN0X2RlbChcdTAwMjZ3LVx1MDAzZWxoKTtcbiYjNDM7XHRsaXN0X2RlbF9pbml0KFx1MDAyNnctXHUwMDNlbGgpO1xuIFx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xuIH1cbiBcbkBAIC0yNzYwLDcgJiM0MzsyNzYwLDcgQEAgc3RhdGljIHZvaWQgKmlwdjZfcm91dGVfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcbiBzdGF0aWMgYm9vbCBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIpXG4ge1xuIFx0c3RydWN0IGZpYjZfd2Fsa2VyICp3ID0gXHUwMDI2aXRlci1cdTAwM2V3O1xuLVx0cmV0dXJuIHctXHUwMDNlbm9kZSBcdTAwMjZcdTAwMjYgISh3LVx1MDAzZXN0YXRlID09IEZXU19VIFx1MDAyNlx1MDAyNiB3LVx1MDAzZW5vZGUgPT0gdy1cdTAwM2Vyb290KTtcbiYjNDM7XHRyZXR1cm4gdy1cdTAwM2Vub2RlIFx1MDAyNlx1MDAyNiAhbGlzdF9lbXB0eShcdTAwMjZ3LVx1MDAzZWxoKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtQUk9DX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmliNl93YWxrZXJfdW5saW5rJiMzNDssCiAgICAmIzM0O2lwdjZfcm91dGVfaXRlcl9hY3RpdmUmIzM0OywKICAgICYjMzQ7aXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3AmIzM0OywKICAgICYjMzQ7aXB2Nl9yb3V0ZV9zZXFfc3RvcCYjMzQ7LAogICAgJiMzNDtpcHY2X3JvdXRlX3NlcV9zdGFydCYjMzQ7LAogICAgJiMzNDtpcHY2X3JvdXRlX3NlcV9uZXh0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElQdjYgRklCIHdhbGtlciBtYW5hZ2VtZW50IGFuZCBpdGVyYXRpb24gc3RhdGUgY2hlY2tpbmcgaW4gbmV0L2lwdjYvaXA2X2ZpYi5jICh1c2luZyBsaXN0X2RlbF9pbml0IG9uIHVubGlua2luZyBhbmQgY2hlY2tpbmcgIWxpc3RfZW1wdHkgZm9yIGFjdGl2ZSBpdGVyYXRvciBzdGF0ZSkuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIC9wcm9jL25ldC9pcHY2X3JvdXRlIHNlcV9maWxlIG9wZXJhdGlvbnMgYW5kIEJQRiBJUHY2IHJvdXRlIGl0ZXJhdG9ycyBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1YzQ2NGMwMmRiZjA3OGY1ODk5Yjc4NDJjOThiMDRhM2RhODQ3MWQ0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwODoxNzo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9maWIuYyBiL25ldC9pcHY2L2lwNl9maWIuYwppbmRleCAzZTM4MmJhMTU3M2UzLi45ZWE3NTcwM2IzOGQ0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfZmliLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X2ZpYi5jCkBAIC04NSw3ICYjNDM7ODUsNyBAQCBzdGF0aWMgdm9pZCBmaWI2X3dhbGtlcl9saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KQogc3RhdGljIHZvaWQgZmliNl93YWxrZXJfdW5saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KQogewogCXdyaXRlX2xvY2tfYmgoJmFtcDtuZXQtJmd0O2lwdjYuZmliNl93YWxrZXJfbG9jayk7Ci0JbGlzdF9kZWwoJmFtcDt3LSZndDtsaCk7CiYjNDM7CWxpc3RfZGVsX2luaXQoJmFtcDt3LSZndDtsaCk7CiAJd3JpdGVfdW5sb2NrX2JoKCZhbXA7bmV0LSZndDtpcHY2LmZpYjZfd2Fsa2VyX2xvY2spOwogfQogCkBAIC0yNzYwLDcgJiM0MzsyNzYwLDcgQEAgc3RhdGljIHZvaWQgKmlwdjZfcm91dGVfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIHN0YXRpYyBib29sIGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcikKIHsKIAlzdHJ1Y3QgZmliNl93YWxrZXIgKncgPSAmYW1wO2l0ZXItJmd0O3c7Ci0JcmV0dXJuIHctJmd0O25vZGUgJmFtcDsmYW1wOyAhKHctJmd0O3N0YXRlID09IEZXU19VICZhbXA7JmFtcDsgdy0mZ3Q7bm9kZSA9PSB3LSZndDtyb290KTsKJiM0MzsJcmV0dXJuIHctJmd0O25vZGUgJmFtcDsmYW1wOyAhbGlzdF9lbXB0eSgmYW1wO3ctJmd0O2xoKTsKIH0KIAogc3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNDMKCQkJCQkJCW91dHB1dDogNzgKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLgoKKipBbmFseXppbmcgdGhpcyBLZXJuZWwgUGF0Y2gqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgbmF0dXJhbGx5LCB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBnb2luZyB0byBkbyBpcyBkaXZlIGludG8gdGhlIGNvZGUuIE15IGluaXRpYWwgc3RlcCB3aWxsIGJlIHRvIGV4YW1pbmUgYG5ldC9pcHY2L2lwNl9maWIuY2Ag4oCTIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgY2hhbmdlcyBzZWVtIHRvIGJlLiBJIHdhbnQgdG8gc2VlIHRoaXMgcGF0Y2ggaW4gaXRzIHByb3BlciBjb250ZXh0LiBJJiMzOTttIGdvaW5nIHRvIHVzZSBteSB0eXBpY2FsIGRlYnVnZ2luZyB0b29scywgbGlrZWx5IGEgY29tYmluYXRpb24gb2YgYGdpdCBibGFtZWAsIGBncmVwYCBhbmQgYSBnb29kIElERSB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLCB1bmRlcnN0YW5kIHRoZSBoaXN0b3J5LCBhbmQgZGV0ZXJtaW5lIHdoeSB0aGVzZSBwYXJ0aWN1bGFyIGxpbmVzIHdlcmUgdG91Y2hlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIG9mIHRoaXMgc2VjdGlvbiBvZiB0aGUgY29kZSwgaG93IHRoZSBjaGFuZ2VzIGZpdCBpbnRvIHRoZSBleGlzdGluZyBhcmNoaXRlY3R1cmUsIGFuZCB3aGF0IHRoZWlyIGludGVuZGVkIGVmZmVjdCBpcy4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGFyZWEgYXJvdW5kIHRoZSBtb2RpZmllZCBsaW5lcywgdGFraW5nIGluIGFzIG11Y2ggY29udGV4dCBhcyBJIGNhbi4gVGhpcyBpcyB0aGUgZm91bmRhdGlvbiB1cG9uIHdoaWNoIEkmIzM5O2xsIGJ1aWxkIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2ZpYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3MDpcdCAqXHRyZXN1bHQgb2YgcmVkaXJlY3RzLCBwYXRoIE1UVSBjaGFuZ2VzLCBldGMuXG4gIDcxOlx0ICovXG4gIDcyOlx0XG4gIDczOlx0c3RhdGljIHZvaWQgZmliNl9nY190aW1lcl9jYihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG4gIDc0Olx0XG4gIDc1Olx0I2RlZmluZSBGT1JfV0FMS0VSUyhuZXQsIHcpIFxcXG4gIDc2Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsIFx1MDAyNihuZXQpLVx1MDAzZWlwdjYuZmliNl93YWxrZXJzLCBsaClcbiAgNzc6XHRcbiAgNzg6XHRzdGF0aWMgdm9pZCBmaWI2X3dhbGtlcl9saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxuICA3OTpcdHtcbiAgODA6XHRcdHdyaXRlX2xvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XG4gIDgxOlx0XHRsaXN0X2FkZChcdTAwMjZ3LVx1MDAzZWxoLCBcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcnMpO1xuICA4MjpcdFx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xuICA4MzpcdH1cbiAgODQ6XHRcbiAgODU6XHRzdGF0aWMgdm9pZCBmaWI2X3dhbGtlcl91bmxpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4gIDg2Olx0e1xuICA4NzpcdFx0d3JpdGVfbG9ja19iaChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcbiAgODg6XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2dy1cdTAwM2VsaCk7XG4gIDg5Olx0XHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XG4gIDkwOlx0fVxuICA5MTpcdFxuICA5MjpcdHN0YXRpYyBpbnQgZmliNl9uZXdfc2VybnVtKHN0cnVjdCBuZXQgKm5ldClcbiAgOTM6XHR7XG4gIDk0Olx0XHRpbnQgbmV3LCBvbGQgPSBhdG9taWNfcmVhZChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3Nlcm51bSk7XG4gIDk1Olx0XG4gIDk2Olx0XHRkbyB7XG4gIDk3Olx0XHRcdG5ldyA9IG9sZCBcdTAwM2MgSU5UX01BWCA/IG9sZCAmIzQzOyAxIDogMTtcbiAgOTg6XHRcdH0gd2hpbGUgKCFhdG9taWNfdHJ5X2NtcHhjaGcoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl9zZXJudW0sIFx1MDAyNm9sZCwgbmV3KSk7XG4gIDk5Olx0XG4gMTAwOlx0XHRyZXR1cm4gbmV3O1xuIDEwMTpcdH1cbiAxMDI6XHRcbiAxMDM6XHRlbnVtIHtcbiAxMDQ6XHRcdEZJQjZfTk9fU0VSTlVNX0NIQU5HRSA9IDAsXG4gMTA1Olx0fTtcbiAxMDY6XHRcbiAxMDc6XHR2b2lkIGZpYjZfdXBkYXRlX3Nlcm51bShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSlcbiAxMDg6XHR7XG4gMTA5Olx0XHRzdHJ1Y3QgZmliNl9ub2RlICpmbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9maWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc1MDpcdFx0aWYgKGl0ZXItXHUwMDNldGJsKSB7XG4yNzUxOlx0XHRcdGxvZmZfdCBwID0gMDtcbjI3NTI6XHRcbjI3NTM6XHRcdFx0aXB2Nl9yb3V0ZV9zZXFfc2V0dXBfd2FsayhpdGVyLCBuZXQpO1xuMjc1NDpcdFx0XHRyZXR1cm4gaXB2Nl9yb3V0ZV9zZXFfbmV4dChzZXEsIE5VTEwsIFx1MDAyNnApO1xuMjc1NTpcdFx0fSBlbHNlIHtcbjI3NTY6XHRcdFx0cmV0dXJuIE5VTEw7XG4yNzU3Olx0XHR9XG4yNzU4Olx0fVxuMjc1OTpcdFxuMjc2MDpcdHN0YXRpYyBib29sIGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcilcbjI3NjE6XHR7XG4yNzYyOlx0XHRzdHJ1Y3QgZmliNl93YWxrZXIgKncgPSBcdTAwMjZpdGVyLVx1MDAzZXc7XG4yNzYzOlx0XHRyZXR1cm4gdy1cdTAwM2Vub2RlIFx1MDAyNlx1MDAyNiAhbGlzdF9lbXB0eShcdTAwMjZ3LVx1MDAzZWxoKTtcbjI3NjQ6XHR9XG4yNzY1Olx0XG4yNzY2Olx0c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4yNzY3Olx0XHRfX3JlbGVhc2VzKFJDVSlcbjI3Njg6XHR7XG4yNzY5Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTtcbjI3NzA6XHRcdHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIgPSBzZXEtXHUwMDNlcHJpdmF0ZTtcbjI3NzE6XHRcbjI3NzI6XHRcdGlmIChpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKGl0ZXIpKVxuMjc3MzpcdFx0XHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCBcdTAwMjZpdGVyLVx1MDAzZXcpO1xuMjc3NDpcdFxuMjc3NTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yNzc2Olx0fVxuMjc3NzpcdFxuMjc3ODpcdCNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcbjI3Nzk6XHRzdGF0aWMgaW50IGlwdjZfcm91dGVfcHJvZ19zZXFfc2hvdyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4yNzgwOlx0XHRcdFx0XHQgICAgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXG4yNzgxOlx0XHRcdFx0XHQgICAgdm9pZCAqdilcbjI3ODI6XHR7XG4yNzgzOlx0XHRzdHJ1Y3QgYnBmX2l0ZXJfX2lwdjZfcm91dGUgY3R4O1xuMjc4NDpcdFxuMjc4NTpcdFx0Y3R4Lm1ldGEgPSBtZXRhO1xuMjc4NjpcdFx0Y3R4LnJ0ID0gdjtcbjI3ODc6XHRcdHJldHVybiBicGZfaXRlcl9ydW5fcHJvZyhwcm9nLCBcdTAwMjZjdHgpO1xuMjc4ODpcdH1cbjI3ODk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTYwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEZWVwIERpdmUgaW50byBJUHY2IFJvdXRpbmcgSXRlcmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgSVB2NiByb3V0aW5nIHRhYmxlIGl0ZXJhdGlvbiB3b3Jrcy4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgYGlwdjZfcm91dGVfaXRlcl9hY3RpdmVgLCBgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3BgLCBhbmQgYGlwdjZfcm91dGVfc2VxX3N0YXJ0YCwgYW5kIHRoZSBjYWxsZXJzIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGVtIHdpdGhpbiBgbmV0L2lwdjYvaXA2X2ZpYi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlcXVlbmNpbmcgYW5kIGxpZmVjeWNsZSBvZiB0aGVzZSBpdGVyYXRvciBmdW5jdGlvbnMuIFRoaXMgZmVlbHMgbGlrZSBpdCBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbiBpbnRvIHRoaXMgcGFydCBvZiB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBpcyBiZWluZyBpdGVyYXRlZCBvdmVyLCBob3cgaXQmIzM5O3MgYmVpbmcgYWNjZXNzZWQsIGFuZCB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciB0aGUgc3RhcnQgYW5kIHN0b3AgZXZlbnRzLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGdpdmUgbWUgaW5zaWdodHMgaW50byBob3cgdGhlIGtlcm5lbCB0cmF2ZXJzZXMgdGhlIElQdjYgcm91dGluZyB0YWJsZSBlZmZpY2llbnRseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9maWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3MDA6XHRcdFx0aXRlci1cdTAwM2V3LnNraXAgPSBpdGVyLVx1MDAzZXcuY291bnQ7XG4yNzAxOlx0XHR9XG4yNzAyOlx0fVxuMjcwMzpcdFxuMjcwNDpcdHN0YXRpYyB2b2lkICppcHY2X3JvdXRlX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcbjI3MDU6XHR7XG4yNzA2Olx0XHRpbnQgcjtcbjI3MDc6XHRcdHN0cnVjdCBmaWI2X2luZm8gKm47XG4yNzA4Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTtcbjI3MDk6XHRcdHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIgPSBzZXEtXHUwMDNlcHJpdmF0ZTtcbjI3MTA6XHRcbjI3MTE6XHRcdCYjNDM7JiM0MzsoKnBvcyk7XG4yNzEyOlx0XHRpZiAoIXYpXG4yNzEzOlx0XHRcdGdvdG8gaXRlcl90YWJsZTtcbjI3MTQ6XHRcbjI3MTU6XHRcdG4gPSByY3VfZGVyZWZlcmVuY2UoKChzdHJ1Y3QgZmliNl9pbmZvICopdiktXHUwMDNlZmliNl9uZXh0KTtcbjI3MTY6XHRcdGlmIChuKVxuMjcxNzpcdFx0XHRyZXR1cm4gbjtcbjI3MTg6XHRcbjI3MTk6XHRpdGVyX3RhYmxlOlxuMjcyMDpcdFx0aXB2Nl9yb3V0ZV9jaGVja19zZXJudW0oaXRlcik7XG4yNzIxOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aXRlci1cdTAwM2V0YmwtXHUwMDNldGI2X2xvY2spO1xuMjcyMjpcdFx0ciA9IGZpYjZfd2Fsa19jb250aW51ZShcdTAwMjZpdGVyLVx1MDAzZXcpO1xuMjcyMzpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aXRlci1cdTAwM2V0YmwtXHUwMDNldGI2X2xvY2spO1xuMjcyNDpcdFx0aWYgKHIgXHUwMDNlIDApIHtcbjI3MjU6XHRcdFx0cmV0dXJuIGl0ZXItXHUwMDNldy5sZWFmO1xuMjcyNjpcdFx0fSBlbHNlIGlmIChyIFx1MDAzYyAwKSB7XG4yNzI3Olx0XHRcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIFx1MDAyNml0ZXItXHUwMDNldyk7XG4yNzI4Olx0XHRcdHJldHVybiBOVUxMO1xuMjcyOTpcdFx0fVxuMjczMDpcdFx0ZmliNl93YWxrZXJfdW5saW5rKG5ldCwgXHUwMDI2aXRlci1cdTAwM2V3KTtcbjI3MzE6XHRcbjI3MzI6XHRcdGl0ZXItXHUwMDNldGJsID0gaXB2Nl9yb3V0ZV9zZXFfbmV4dF90YWJsZShpdGVyLVx1MDAzZXRibCwgbmV0KTtcbjI3MzM6XHRcdGlmICghaXRlci1cdTAwM2V0YmwpXG4yNzM0Olx0XHRcdHJldHVybiBOVUxMO1xuMjczNTpcdFxuMjczNjpcdFx0aXB2Nl9yb3V0ZV9zZXFfc2V0dXBfd2FsayhpdGVyLCBuZXQpO1xuMjczNzpcdFx0Z290byBpdGVyX3RhYmxlO1xuMjczODpcdH1cbjI3Mzk6XHRcbjI3NDA6XHRzdGF0aWMgdm9pZCAqaXB2Nl9yb3V0ZV9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxuMjc0MTpcdFx0X19hY3F1aXJlcyhSQ1UpXG4yNzQyOlx0e1xuMjc0MzpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7XG4yNzQ0Olx0XHRzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyID0gc2VxLVx1MDAzZXByaXZhdGU7XG4yNzQ1Olx0XG4yNzQ2Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yNzQ3Olx0XHRpdGVyLVx1MDAzZXRibCA9IGlwdjZfcm91dGVfc2VxX25leHRfdGFibGUoTlVMTCwgbmV0KTtcbjI3NDg6XHRcdGl0ZXItXHUwMDNlc2tpcCA9ICpwb3M7XG4yNzQ5Olx0XG4yNzUwOlx0XHRpZiAoaXRlci1cdTAwM2V0YmwpIHtcbjI3NTE6XHRcdFx0bG9mZl90IHAgPSAwO1xuMjc1MjpcdFxuMjc1MzpcdFx0XHRpcHY2X3JvdXRlX3NlcV9zZXR1cF93YWxrKGl0ZXIsIG5ldCk7XG4yNzU0Olx0XHRcdHJldHVybiBpcHY2X3JvdXRlX3NlcV9uZXh0KHNlcSwgTlVMTCwgXHUwMDI2cCk7XG4yNzU1Olx0XHR9IGVsc2Uge1xuMjc1NjpcdFx0XHRyZXR1cm4gTlVMTDtcbjI3NTc6XHRcdH1cbjI3NTg6XHR9XG4yNzU5Olx0XG4yNzYwOlx0c3RhdGljIGJvb2wgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZShzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyKVxuMjc2MTpcdHtcbjI3NjI6XHRcdHN0cnVjdCBmaWI2X3dhbGtlciAqdyA9IFx1MDAyNml0ZXItXHUwMDNldztcbjI3NjM6XHRcdHJldHVybiB3LVx1MDAzZW5vZGUgXHUwMDI2XHUwMDI2ICFsaXN0X2VtcHR5KFx1MDAyNnctXHUwMDNlbGgpO1xuMjc2NDpcdH1cbjI3NjU6XHRcbjI3NjY6XHRzdGF0aWMgdm9pZCBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbjI3Njc6XHRcdF9fcmVsZWFzZXMoUkNVKVxuMjc2ODpcdHtcbjI3Njk6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpO1xuMjc3MDpcdFx0c3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlciA9IHNlcS1cdTAwM2Vwcml2YXRlO1xuMjc3MTpcdFxuMjc3MjpcdFx0aWYgKGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoaXRlcikpXG4yNzczOlx0XHRcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIFx1MDAyNml0ZXItXHUwMDNldyk7XG4yNzc0Olx0XG4yNzc1Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjI3NzY6XHR9XG4yNzc3Olx0XG4yNzc4Olx0I2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxuMjc3OTpcdHN0YXRpYyBpbnQgaXB2Nl9yb3V0ZV9wcm9nX3NlcV9zaG93KHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbjI3ODA6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcbjI3ODE6XHRcdFx0XHRcdCAgICB2b2lkICp2KVxuMjc4MjpcdHtcbjI3ODM6XHRcdHN0cnVjdCBicGZfaXRlcl9faXB2Nl9yb3V0ZSBjdHg7XG4yNzg0Olx0XG4yNzg1Olx0XHRjdHgubWV0YSA9IG1ldGE7XG4yNzg2Olx0XHRjdHgucnQgPSB2O1xuMjc4NzpcdFx0cmV0dXJuIGJwZl9pdGVyX3J1bl9wcm9nKHByb2csIFx1MDAyNmN0eCk7XG4yNzg4Olx0fVxuMjc4OTpcdFxuMjc5MDpcdHN0YXRpYyBpbnQgaXB2Nl9yb3V0ZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbjI3OTE6XHR7XG4yNzkyOlx0XHRzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyID0gc2VxLVx1MDAzZXByaXZhdGU7XG4yNzkzOlx0XHRzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSBtZXRhO1xuMjc5NDpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuMjc5NTpcdFx0aW50IHJldDtcbjI3OTY6XHRcbjI3OTc6XHRcdG1ldGEuc2VxID0gc2VxO1xuMjc5ODpcdFx0cHJvZyA9IGJwZl9pdGVyX2dldF9pbmZvKFx1MDAyNm1ldGEsIGZhbHNlKTtcbjI3OTk6XHRcdGlmICghcHJvZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzE1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBJUHY2IHJvdXRpbmcgc2l0dWF0aW9uLgoKKipJbnZlc3RpZ2F0aW5nIElQdjYgUm91dGUgSXRlcmF0aW9uKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgYGlwdjZfcm91dGVfaXRlcl9hY3RpdmVgIGFuZCBhbnkgcmVsYXRlZCBmdW5jdGlvbnMuIExldCYjMzk7cyBzZWUgaG93IGV4dGVuc2l2ZWx5IHRoZXNlIGl0ZXJhdG9yIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aXRoaW4gdGhlIGNvZGViYXNlLiBNeSBwbGFuIGlzIHRvIGxldmVyYWdlIGBncmVwYCB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCBvY2N1cnJlbmNlcyBvZiBgaXB2Nl9yb3V0ZV9pdGVyYCBhbmQsIGNydWNpYWxseSwgYGZpYjZfd2Fsa2VyYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgcGljdHVyZSBvZiB3aGVyZSB0aGVzZSB0b29scyBhcmUgZW1wbG95ZWQuIFRoaXMgd2lsbCBoZWxwIHRvIGRldGVybWluZSBhbnkgaW50ZXItZGVwZW5kZW5jaWVzIHdpdGggb3RoZXIgcm91dGUgcmVsYXRlZCBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZmliLmM9Mjc0MD1zdGF0aWMgdm9pZCAqaXB2Nl9yb3V0ZV9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yNzU5LVxubmV0L2lwdjYvaXA2X2ZpYi5jOjI3NjA6c3RhdGljIGJvb2wgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZShzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyKVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NjEte1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yNzY2PXN0YXRpYyB2b2lkIGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yNzcxLVxubmV0L2lwdjYvaXA2X2ZpYi5jOjI3NzI6XHRpZiAoaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZShpdGVyKSlcbm5ldC9pcHY2L2lwNl9maWIuYy0yNzczLVx0XHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCBcdTAwMjZpdGVyLVx1MDAzZXcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzcwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgaXB2Nl9yb3V0ZV9zZXFfc2V0dXBfd2Fsa2AgYW5kIGBpdGVyLSZndDt3YCBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBpcHY2X3JvdXRlX3NlcV9zZXR1cF93YWxrYCBmdW5jdGlvbiB3b3JrcyBhbmQsIHNwZWNpZmljYWxseSwgaG93IHRoZSBgaXRlci0mZ3Q7d2AgbWVtYmVyIGlzIHNldCB1cC4gVGhpcyBsaWtlbHkgaGFzIGltcGxpY2F0aW9ucyBmb3Igc2VxdWVuY2UgbnVtYmVyIGhhbmRsaW5nLCByb3V0ZSB0cmF2ZXJzYWwsIG9yIHBvdGVudGlhbGx5IGV2ZW4gbG9ja2luZy9zeW5jaHJvbml6YXRpb24gd2l0aGluIHRoZSBJUHY2IHJvdXRpbmcgY29udGV4dC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRvIHBpbnBvaW50IHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgZnVuY3Rpb24gYW5kIHRyYWNlIGJhY2sgd2hlcmUgdGhlIGBpdGVyLSZndDt3YCBtZW1iZXIgb2Ygd2hhdGV2ZXIgdGhlIGBpdGVyYCBzdHJ1Y3QgaXMsIGdldHMgaXRzIGluaXRpYWwgdmFsdWUuCgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBpbiB0aGUgc3Vycm91bmRpbmcgY29kZS4gSXMgYGl0ZXItJmd0O3dgIGEgc2ltcGxlIGNvdW50ZXI/IERvZXMgaXQgcmVwcmVzZW50IGFuIG9mZnNldCBpbnRvIGEgZGF0YSBzdHJ1Y3R1cmU/IElzIHRoZXJlIGEgcG9pbnRlciBpbnZvbHZlZD8gVGhlIGluaXRpYWxpemF0aW9uIHdpbGwgcHJvdmlkZSBjcml0aWNhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHVycG9zZSBvZiBgaXRlci0mZ3Q7d2Agd2l0aGluIHRoaXMgcHJvY2Vzcy4gQnkgZXhhbWluaW5nIHRoaXMsIEkgY2FuIHN0YXJ0IHRvIGJ1aWxkIGEgY2xlYXIgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGUgc3lzdGVtIGlzIGRlc2lnbmVkIHRvIHdvcmsuIFRoaXMgZm91bmRhdGlvbmFsIGtub3dsZWRnZSB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb2RlJiMzOTtzIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9maWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjY2MDpcdFx0aXRlci1cdTAwM2V3LmZ1bmMgPSBpcHY2X3JvdXRlX3lpZWxkO1xuMjY2MTpcdFx0aXRlci1cdTAwM2V3LnJvb3QgPSBcdTAwMjZpdGVyLVx1MDAzZXRibC1cdTAwM2V0YjZfcm9vdDtcbjI2NjI6XHRcdGl0ZXItXHUwMDNldy5zdGF0ZSA9IEZXU19JTklUO1xuMjY2MzpcdFx0aXRlci1cdTAwM2V3Lm5vZGUgPSBpdGVyLVx1MDAzZXcucm9vdDtcbjI2NjQ6XHRcdGl0ZXItXHUwMDNldy5hcmdzID0gaXRlcjtcbjI2NjU6XHRcdGl0ZXItXHUwMDNlc2VybnVtID0gUkVBRF9PTkNFKGl0ZXItXHUwMDNldy5yb290LVx1MDAzZWZuX3Nlcm51bSk7XG4yNjY2Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZpdGVyLVx1MDAzZXcubGgpO1xuMjY2NzpcdFx0ZmliNl93YWxrZXJfbGluayhuZXQsIFx1MDAyNml0ZXItXHUwMDNldyk7XG4yNjY4Olx0fVxuMjY2OTpcdFxuMjY3MDpcdHN0YXRpYyBzdHJ1Y3QgZmliNl90YWJsZSAqaXB2Nl9yb3V0ZV9zZXFfbmV4dF90YWJsZShzdHJ1Y3QgZmliNl90YWJsZSAqdGJsLFxuMjY3MTpcdFx0XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0ICpuZXQpXG4yNjcyOlx0e1xuMjY3MzpcdFx0dW5zaWduZWQgaW50IGg7XG4yNjc0Olx0XHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTtcbjI2NzU6XHRcbjI2NzY6XHRcdGlmICh0YmwpIHtcbjI2Nzc6XHRcdFx0aCA9ICh0YmwtXHUwMDNldGI2X2lkIFx1MDAyNiAoRklCNl9UQUJMRV9IQVNIU1ogLSAxKSkgJiM0MzsgMTtcbjI2Nzg6XHRcdFx0bm9kZSA9IHJjdV9kZXJlZmVyZW5jZShobGlzdF9uZXh0X3JjdShcdTAwMjZ0YmwtXHUwMDNldGI2X2hsaXN0KSk7XG4yNjc5Olx0XHR9IGVsc2Uge1xuMjY4MDpcdFx0XHRoID0gMDtcbjI2ODE6XHRcdFx0bm9kZSA9IE5VTEw7XG4yNjgyOlx0XHR9XG4yNjgzOlx0XG4yNjg0Olx0XHR3aGlsZSAoIW5vZGUgXHUwMDI2XHUwMDI2IGggXHUwMDNjIEZJQjZfVEFCTEVfSEFTSFNaKSB7XG4yNjg1Olx0XHRcdG5vZGUgPSByY3VfZGVyZWZlcmVuY2UoXG4yNjg2Olx0XHRcdFx0aGxpc3RfZmlyc3RfcmN1KFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYl90YWJsZV9oYXNoW2gmIzQzOyYjNDM7XSkpO1xuMjY4NzpcdFx0fVxuMjY4ODpcdFx0cmV0dXJuIGhsaXN0X2VudHJ5X3NhZmUobm9kZSwgc3RydWN0IGZpYjZfdGFibGUsIHRiNl9obGlzdCk7XG4yNjg5Olx0fVxuMjY5MDpcdFxuMjY5MTpcdHN0YXRpYyB2b2lkIGlwdjZfcm91dGVfY2hlY2tfc2VybnVtKHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIpXG4yNjkyOlx0e1xuMjY5MzpcdFx0aW50IHNlcm51bSA9IFJFQURfT05DRShpdGVyLVx1MDAzZXcucm9vdC1cdTAwM2Vmbl9zZXJudW0pO1xuMjY5NDpcdFxuMjY5NTpcdFx0aWYgKGl0ZXItXHUwMDNlc2VybnVtICE9IHNlcm51bSkge1xuMjY5NjpcdFx0XHRpdGVyLVx1MDAzZXNlcm51bSA9IHNlcm51bTtcbjI2OTc6XHRcdFx0aXRlci1cdTAwM2V3LnN0YXRlID0gRldTX0lOSVQ7XG4yNjk4Olx0XHRcdGl0ZXItXHUwMDNldy5ub2RlID0gaXRlci1cdTAwM2V3LnJvb3Q7XG4yNjk5Olx0XHRcdFdBUk5fT04oaXRlci1cdTAwM2V3LnNraXApO1xuMjcwMDpcdFx0XHRpdGVyLVx1MDAzZXcuc2tpcCA9IGl0ZXItXHUwMDNldy5jb3VudDtcbjI3MDE6XHRcdH1cbjI3MDI6XHR9XG4yNzAzOlx0XG4yNzA0Olx0c3RhdGljIHZvaWQgKmlwdjZfcm91dGVfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODQ5CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqRGlnZ2luZyBEZWVwZXIgaW50byBgZmliNl93YWxrZXJgIEludGVyYWN0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBgZmliNl93YWxrZXJfdW5saW5rYCBhbmQgYGZpYjZfd2Fsa2VyX2xpbmtgIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyB3aGVyZSBlbHNlIHRoZXkgYXJlIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgYGlwNl9maWIuY2AgZmlsZSBvciBpbmRlZWQgYW55d2hlcmUgZWxzZSBpbiB0aGUgY29kZSBiYXNlLiBNeSBnb2FsIGlzIHRvIG1hcCBvdXQgZXZlcnkgc2luZ2xlIGluc3RhbmNlIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFyb3VuZCBlYWNoIHVzZS4gS25vd2luZyB0aGUgY2FsbCBncmFwaCB3aWxsIGhlbHAgbWUgYW50aWNpcGF0ZSBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBvciBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGFuZCBvcHRpbWl6YXRpb24uIEEgdGhvcm91Z2ggaW52ZXN0aWdhdGlvbiBpcyB0aGUgb25seSB3YXkgdG8gZW5zdXJlIEkgZnVsbHkgdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBjYW4gbWFrZSBjaGFuZ2VzIHdpdGggY29uZmlkZW5jZS4gSSBoYXZlIHRvIGxvb2sgYmV5b25kIGp1c3QgdGhlIGltbWVkaWF0ZSBzY29wZSBhbmQgY29uc2lkZXIgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgYW5hbHl6aW5nIGFuZCBlbnN1cmluZyBzdGFiaWxpdHkgZm9yIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWI2X3dhbGtlcl8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7LmNsYW5nLWZvcm1hdD03MT1Gb3JFYWNoTWFjcm9zOlxuLS1cbi5jbGFuZy1mb3JtYXQtMjk1LSAgLSAmIzM5O2Zvcl9lYWNoX2ZpYjZfbm9kZV9ydF9yY3UmIzM5O1xuLmNsYW5nLWZvcm1hdDoyOTY6ICAtICYjMzk7Zm9yX2VhY2hfZmliNl93YWxrZXJfcnQmIzM5O1xuLmNsYW5nLWZvcm1hdC0yOTctICAtICYjMzk7Zm9yX2VhY2hfZmlsZV9sb2NrJiMzOTtcbi0tXG5pbmNsdWRlL25ldC9pcDZfZmliLmg9MjIyPXN0cnVjdCBmaWI2X3Jlc3VsdCB7XG4tLVxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTIzMy1cbmluY2x1ZGUvbmV0L2lwNl9maWIuaDoyMzQ6I2RlZmluZSBmb3JfZWFjaF9maWI2X3dhbGtlcl9ydCh3KVx0XHRcdFx0XHRcXFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTIzNS1cdGZvciAocnQgPSAodyktXHUwMDNlbGVhZjsgcnQ7XHRcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS9uZXQvbmV0bnMvaXB2Ni5oPTY2PXN0cnVjdCBuZXRuc19pcHY2IHtcbi0tXG5pbmNsdWRlL25ldC9uZXRucy9pcHY2LmgtODItXHRzdHJ1Y3QgbGlzdF9oZWFkXHRmaWI2X3dhbGtlcnM7XG5pbmNsdWRlL25ldC9uZXRucy9pcHY2Lmg6ODM6XHRyd2xvY2tfdFx0XHRmaWI2X3dhbGtlcl9sb2NrO1xuaW5jbHVkZS9uZXQvbmV0bnMvaXB2Ni5oLTg0LVx0c3BpbmxvY2tfdFx0XHRmaWI2X2djX2xvY2s7XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTczPXN0YXRpYyB2b2lkIGZpYjZfZ2NfdGltZXJfY2Ioc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy03Ny1cbm5ldC9pcHY2L2lwNl9maWIuYzo3ODpzdGF0aWMgdm9pZCBmaWI2X3dhbGtlcl9saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxubmV0L2lwdjYvaXA2X2ZpYi5jLTc5LXtcbm5ldC9pcHY2L2lwNl9maWIuYzo4MDpcdHdyaXRlX2xvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtODEtXHRsaXN0X2FkZChcdTAwMjZ3LVx1MDAzZWxoLCBcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcnMpO1xubmV0L2lwdjYvaXA2X2ZpYi5jOjgyOlx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTgzLX1cbm5ldC9pcHY2L2lwNl9maWIuYy04NC1cbm5ldC9pcHY2L2lwNl9maWIuYzo4NTpzdGF0aWMgdm9pZCBmaWI2X3dhbGtlcl91bmxpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG5uZXQvaXB2Ni9pcDZfZmliLmMtODYte1xubmV0L2lwdjYvaXA2X2ZpYi5jOjg3Olx0d3JpdGVfbG9ja19iaChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcbm5ldC9pcHY2L2lwNl9maWIuYy04OC1cdGxpc3RfZGVsX2luaXQoXHUwMDI2dy1cdTAwM2VsaCk7XG5uZXQvaXB2Ni9pcDZfZmliLmM6ODk6XHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtOTAtfVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz01Mjg9c3RhdGljIGludCBmaWI2X2R1bXBfbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTUzMi1cbm5ldC9pcHY2L2lwNl9maWIuYzo1MzM6XHRmb3JfZWFjaF9maWI2X3dhbGtlcl9ydCh3KSB7XG5uZXQvaXB2Ni9pcDZfZmliLmMtNTM0LVx0XHRyZXMgPSBydDZfZHVtcF9yb3V0ZShydCwgdy1cdTAwM2VhcmdzLCB3LVx1MDAzZXNraXBfaW5fbm9kZSk7XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTU2Mj1zdGF0aWMgdm9pZCBmaWI2X2R1bXBfZW5kKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtNTY5LVx0XHRcdGNiLVx1MDAzZWFyZ3NbNF0gPSAwO1xubmV0L2lwdjYvaXA2X2ZpYi5jOjU3MDpcdFx0XHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCB3KTtcbm5ldC9pcHY2L2lwNl9maWIuYy01NzEtXHRcdH1cbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9NTg1PXN0YXRpYyBpbnQgZmliNl9kdW1wX3RhYmxlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtNjIyLVx0XHRpZiAocmVzIFx1MDAzYz0gMCkge1xubmV0L2lwdjYvaXA2X2ZpYi5jOjYyMzpcdFx0XHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCB3KTtcbm5ldC9pcHY2L2lwNl9maWIuYy02MjQtXHRcdFx0Y2ItXHUwMDNlYXJnc1s0XSA9IDA7XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTE4NDE9c3RhdGljIHN0cnVjdCBmaWI2X25vZGUgKmZpYjZfcmVwYWlyX3RyZWUoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0xOTMyLVxubmV0L2lwdjYvaXA2X2ZpYi5jOjE5MzM6XHRcdHJlYWRfbG9jayhcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcbm5ldC9pcHY2L2lwNl9maWIuYy0xOTM0LVx0XHRGT1JfV0FMS0VSUyhuZXQsIHcpIHtcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMTk1Ni1cdFx0fVxubmV0L2lwdjYvaXA2X2ZpYi5jOjE5NTc6XHRcdHJlYWRfdW5sb2NrKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTE5NTgtXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTE5Njk9c3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjAyNS1cdC8qIEFkanVzdCB3YWxrZXJzICovXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjAyNjpcdHJlYWRfbG9jayhcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yMDI3LVx0Rk9SX1dBTEtFUlMobmV0LCB3KSB7XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwMzUtXHR9XG5uZXQvaXB2Ni9pcDZfZmliLmM6MjAzNjpcdHJlYWRfdW5sb2NrKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTIwMzctXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTIyMjA9c3RhdGljIGludCBmaWI2X3dhbGsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTIyMjYtXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjIyNzpcdGZpYjZfd2Fsa2VyX2xpbmsobmV0LCB3KTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjI4LVx0cmVzID0gZmliNl93YWxrX2NvbnRpbnVlKHcpO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTIyMjktXHRpZiAocmVzIFx1MDAzYz0gMClcbm5ldC9pcHY2L2lwNl9maWIuYzoyMjMwOlx0XHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCB3KTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjMxLVx0cmV0dXJuIHJlcztcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjIzND1zdGF0aWMgaW50IGZpYjZfY2xlYW5fbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTIyNTMtXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjI1NDpcdGZvcl9lYWNoX2ZpYjZfd2Fsa2VyX3J0KHcpIHtcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjU1LVx0XHRyZXMgPSBjLVx1MDAzZWZ1bmMocnQsIGMtXHUwMDNlYXJnKTtcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjQ2ND1zdGF0aWMgaW50IF9fbmV0X2luaXQgZmliNl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI0NzctXHRzcGluX2xvY2tfaW5pdChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X2djX2xvY2spO1xubmV0L2lwdjYvaXA2X2ZpYi5jOjI0Nzg6XHRyd2xvY2tfaW5pdChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yNDc5LVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl93YWxrZXJzKTtcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjY1Nj1zdGF0aWMgdm9pZCBpcHY2X3JvdXRlX3NlcV9zZXR1cF93YWxrKHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIsXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI2NjYtXHRJTklUX0xJU1RfSEVBRChcdTAwMjZpdGVyLVx1MDAzZXcubGgpO1xubmV0L2lwdjYvaXA2X2ZpYi5jOjI2Njc6XHRmaWI2X3dhbGtlcl9saW5rKG5ldCwgXHUwMDI2aXRlci1cdTAwM2V3KTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yNjY4LX1cbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjcwND1zdGF0aWMgdm9pZCAqaXB2Nl9yb3V0ZV9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3MjYtXHR9IGVsc2UgaWYgKHIgXHUwMDNjIDApIHtcbm5ldC9pcHY2L2lwNl9maWIuYzoyNzI3Olx0XHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCBcdTAwMjZpdGVyLVx1MDAzZXcpO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTI3MjgtXHRcdHJldHVybiBOVUxMO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTI3MjktXHR9XG5uZXQvaXB2Ni9pcDZfZmliLmM6MjczMDpcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIFx1MDAyNml0ZXItXHUwMDNldyk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjczMS1cbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9Mjc2Nj1zdGF0aWMgdm9pZCBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc3Mi1cdGlmIChpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKGl0ZXIpKVxubmV0L2lwdjYvaXA2X2ZpYi5jOjI3NzM6XHRcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIFx1MDAyNml0ZXItXHUwMDNldyk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc3NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MzYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUHY2IEZJQiBXYWxrZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgSVB2NiBGSUIgd2Fsa2VyIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9pcHY2L2lwNl9maWIuY2AuIExldCYjMzk7cyBicmVhayBkb3duIHRoZSBrZXkgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSBgZmliNl93YWxrZXJfdW5saW5rKClgIGhhcyBzd2l0Y2hlZCBmcm9tIGEgc2ltcGxlIGBsaXN0X2RlbCgpYCB0byBgbGlzdF9kZWxfaW5pdCgpYCBvbiB0aGUgd2Fsa2VyJiMzOTtzIGxpc3QgaGVhZCwgYHctJmd0O2xoYC4gVGhhdCYjMzk7cyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlIGluIGhvdyB0aGUgbGlzdCBpcyBoYW5kbGVkIGFmdGVyIHJlbW92YWwuIEkgd29uZGVyIGlmIHRoZXJlIHdlcmUgc29tZSBpc3N1ZXMgd2l0aCBkYW5nbGluZyBwb2ludGVycyBvciByZXVzZSBjb25jZXJucyBiZWluZyBhZGRyZXNzZWQgdGhlcmUuCgpUaGUgb3RoZXIgbWFqb3IgbW9kaWZpY2F0aW9uIGNvbmNlcm5zIGBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKClgLiBJdCYjMzk7cyBjaGFuZ2VkIHRoZSBjb25kaXRpb24gZm9yIGRldGVybWluaW5nIGFuICYjMzQ7YWN0aXZlJiMzNDsgd2Fsa2VyLiBQcmV2aW91c2x5IGl0IGNoZWNrZWQgYHctJmd0O25vZGUgJmFtcDsmYW1wOyAhKHctJmd0O3N0YXRlID09IEZXU19VICZhbXA7JmFtcDsgdy0mZ3Q7bm9kZSA9PSB3LSZndDtyb290KWAsIGJ1dCBub3cgaXQmIzM5O3MgY2hlY2tpbmcgYHctJmd0O25vZGUgJmFtcDsmYW1wOyAhbGlzdF9lbXB0eSgmYW1wO3ctJmd0O2xoKWAuIFRoZSBvbGQgY29uZGl0aW9uIGxvb2tzIGxpa2UgaXQgd2FzIGF0dGVtcHRpbmcgdG8gZXhjbHVkZSBzb21lIHdhbGtlcnMgaW4gYSAmIzM5O3Vuc3RhYmxlJiMzOTsgc3RhdGUgYnV0IG5vdyB0aGUgbmV3IGNvbmRpdGlvbiBzaW1wbHkgY2hlY2tzIHRoYXQgdGhlIHdhbGtlciBpcyBsaW5rZWQgdG8gdGhlIGxpc3QuIFRoaXMgY291bGQgaW1wcm92ZSBwZXJmb3JtYW5jZSwgb3IgY291bGQgaGF2ZSBiZWVuIGNoYW5nZWQgZm9yIG90aGVyIHJlYXNvbnMuCgpOb3csIGxldCYjMzk7cyBzZWUgaG93IHRoZXNlIGNoYW5nZXMgbWlnaHQgaW1wYWN0IHRoZSB2aXNpYmlsaXR5IG9mIElQdjYgcm91dGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugd2Fsa2VycyBhcmUgdXNlZCBieSB0aGUgc3lzdGVtLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIGhvdyBJUHY2IHJvdXRlcyBhcmUgcmVhZCB2aWEgL3Byb2MvbmV0L2lwdjZfcm91dGUsIG9yIGhvdyBCUEYgaXRlcmF0b3JzLCBvciBOZXRsaW5rIGludGVyZmFjZSB3aXRoIGBpcCByb3V0ZSBzaG93YCBvciBzaW1pbGFyIGNvbW1hbmRzIGFyZSBpbXBsZW1lbnRlZC4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgd2hlcmUgdGhlIHJvdXRlIGluZm9ybWF0aW9uIGlzIGV4cG9zZWQgdGhyb3VnaCB0aG9zZSBtZWNoYW5pc21zLiBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb2RlIGluIGBuZXQvaXB2Ni9pcDZfZmliLmNgIHdoZXJlIGZ1bmN0aW9ucyBsaWtlIGBpcHY2X3JvdXRlX3NlcV9vcHNgIG9yIHNpbWlsYXIsIHRoYXQgaGFuZGxlIHRoZSBkYXRhIGFjY2VzcywgYXJlIGRlZmluZWQuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJlIGFibGUgdG8gdHJhY2UgaG93IHRoZXNlIHdhbGtlciBtb2RpZmljYXRpb25zIGRpcmVjdGx5IGltcGFjdCB0aGUgcmV0cmlldmFsIGFuZCBwcmVzZW50YXRpb24gb2YgdGhlIHJvdXRpbmcgZGF0YS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2ZpYi5jPTI3NjA9c3RhdGljIGJvb2wgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZShzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyKVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yNzY1LVxubmV0L2lwdjYvaXA2X2ZpYi5jOjI3NjY6c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc2Ny1cdF9fcmVsZWFzZXMoUkNVKVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yODA4PXN0YXRpYyB2b2lkIGlwdjZfcm91dGVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI4MTktXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjgyMDpcdGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wKHNlcSwgdik7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjgyMS19XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTI4Mjg9c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbm5ldC9pcHY2L2lwNl9maWIuYy0yODI5LXtcbm5ldC9pcHY2L2lwNl9maWIuYzoyODMwOlx0aXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc2VxLCB2KTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yODMxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1MjgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQdjYgUm91dGUgU2VxdWVuY2UgRmlsZSBTdG9wIE9wZXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBgaXB2Nl9yb3V0ZV9zZXFfc3RvcGAuIFJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBzdG9wIG9wZXJhdGlvbiBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgL3Byb2MvbmV0L2lwdjZfcm91dGVgIGZpbGUsIGFuZCBpbXBvcnRhbnRseSwgdGhlIEJQRiByb3V0ZSBpdGVyYXRvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IGNsZWFucyB1cCBhZnRlciBhIHNlcXVlbmNlIGZpbGUgaXRlcmF0aW9uIG9yIEJQRiBwcm9ncmFtIGludGVyYWN0aW9uIHdpdGggdGhlIElQdjYgcm91dGluZyB0YWJsZS4gVG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLCBJIHNob3VsZCBwcm9iYWJseSB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlLiBMaW5lcyAyODAwIHRocm91Z2ggMjg2MCBvZiBgbmV0L2lwdjYvaXA2X2ZpYi5jYCBzZWVtIGxpa2UgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIFRoYXQgc2VjdGlvbiBsaWtlbHkgY29udGFpbnMgdGhlIGNvcmUgbG9naWMgZm9yIHRoaXMgc3RvcCBmdW5jdGlvbiBhbmQgd2lsbCBnaXZlIG1lIHRoZSBpbnNpZ2h0cyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBzZWUgaG93IGl0IHJlbGVhc2VzIHJlc291cmNlcywgaGFuZGxlcyBhbnkgbG9ja3MsIGFuZCBlbnN1cmVzIGEgY2xlYW4gZXhpdCBmb3IgdGhlc2Ugcm91dGUgbGlzdGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2ZpYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODAwOlx0XHRcdHJldHVybiBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc2hvdyhzZXEsIHYpO1xuMjgwMTpcdFxuMjgwMjpcdFx0cmV0ID0gaXB2Nl9yb3V0ZV9wcm9nX3NlcV9zaG93KHByb2csIFx1MDAyNm1ldGEsIHYpO1xuMjgwMzpcdFx0aXRlci1cdTAwM2V3LmxlYWYgPSBOVUxMO1xuMjgwNDpcdFxuMjgwNTpcdFx0cmV0dXJuIHJldDtcbjI4MDY6XHR9XG4yODA3Olx0XG4yODA4Olx0c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbjI4MDk6XHR7XG4yODEwOlx0XHRzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSBtZXRhO1xuMjgxMTpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuMjgxMjpcdFxuMjgxMzpcdFx0aWYgKCF2KSB7XG4yODE0Olx0XHRcdG1ldGEuc2VxID0gc2VxO1xuMjgxNTpcdFx0XHRwcm9nID0gYnBmX2l0ZXJfZ2V0X2luZm8oXHUwMDI2bWV0YSwgdHJ1ZSk7XG4yODE2Olx0XHRcdGlmIChwcm9nKVxuMjgxNzpcdFx0XHRcdCh2b2lkKWlwdjZfcm91dGVfcHJvZ19zZXFfc2hvdyhwcm9nLCBcdTAwMjZtZXRhLCB2KTtcbjI4MTg6XHRcdH1cbjI4MTk6XHRcbjI4MjA6XHRcdGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wKHNlcSwgdik7XG4yODIxOlx0fVxuMjgyMjpcdCNlbHNlXG4yODIzOlx0c3RhdGljIGludCBpcHY2X3JvdXRlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuMjgyNDpcdHtcbjI4MjU6XHRcdHJldHVybiBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc2hvdyhzZXEsIHYpO1xuMjgyNjpcdH1cbjI4Mjc6XHRcbjI4Mjg6XHRzdGF0aWMgdm9pZCBpcHY2X3JvdXRlX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuMjgyOTpcdHtcbjI4MzA6XHRcdGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wKHNlcSwgdik7XG4yODMxOlx0fVxuMjgzMjpcdCNlbmRpZlxuMjgzMzpcdFxuMjgzNDpcdGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBpcHY2X3JvdXRlX3NlcV9vcHMgPSB7XG4yODM1Olx0XHQuc3RhcnRcdD0gaXB2Nl9yb3V0ZV9zZXFfc3RhcnQsXG4yODM2Olx0XHQubmV4dFx0PSBpcHY2X3JvdXRlX3NlcV9uZXh0LFxuMjgzNzpcdFx0LnN0b3BcdD0gaXB2Nl9yb3V0ZV9zZXFfc3RvcCxcbjI4Mzg6XHRcdC5zaG93XHQ9IGlwdjZfcm91dGVfc2VxX3Nob3dcbjI4Mzk6XHR9O1xuMjg0MDpcdCNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ0OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBJUHY2IFJvdXRpbmcgVGFibGUgTWFuYWdlbWVudCBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBzb21lIGNvZGUgaW52b2x2ZWQgaW4gSVB2NiByb3V0aW5nIHRhYmxlIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggaXRlcmF0aW5nIHRocm91Z2ggYC9wcm9jL25ldC9pcHY2X3JvdXRlYC4gVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGNhbiB0aGlzIGJlIHRlc3RlZCBpbiBhIHN0YW5kYXJkIFN5emthbGxlciBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhlIGFuc3dlciBpcyBhIHNvbGlkIHllcy4gSXQgaW52b2x2ZXMgcmVhZGluZyBmcm9tIGAvcHJvYy9uZXQvaXB2Nl9yb3V0ZWAsIGFuZCB0aGVuIHBvdGVudGlhbGx5IGludGVyYWN0aW5nIHdpdGggdGhlIElQdjYgcm91dGluZyB0YWJsZSBpdHNlbGYgYnkgYWRkaW5nIG9yIGRlbGV0aW5nIHJvdXRlcyB1c2luZyBuZXRsaW5rIG9yIGlvY3RsIGNhbGxzICp3aGlsZSogdGhpcyByZWFkIGlzIG9uZ29pbmcsIG9yIHVzaW5nIEJQRiBpdGVyYXRvcnMuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gKGBuZXQvaXB2Ni9pcDZfZmliLmNgKSBhcyB0aGUgcHJpbWFyeSBhcmVhIG9mIGludGVyZXN0LgoKVGhlIGltcGxpY2F0aW9ucyBhcmUgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgbWVzc2luZyB3aXRoIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcywgc3BlY2lmaWNhbGx5IGBsaXN0X2RlbF9pbml0YCBzZW1hbnRpY3MsIGFuZCBhbHNvIHRoZSBzdGF0ZSBjaGVja3Mgd2l0aGluIHRoZSB3YWxrZXIgKGBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlYCkuIFRoZSBwcmltYXJ5IGdvYWwgdGhlcmUgaXMgY2xlYXI6IHRvIHByZXZlbnQgZGF0YSBjb3JydXB0aW9uIG9yIGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIHRoZSB3YWxrZXIgYW5kIHRoZSByb3V0aW5nIHRhYmxlIHdoZW4gcm91dGVzIGFyZSBiZWluZyBhZGRlZCBvciBkZWxldGVkIGNvbmN1cnJlbnRseS4gVGhpcyBpcyBhIGNsYXNzaWMgY29uY3VycmVuY3kgcHJvYmxlbS4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIsIGxldCYjMzk7cyBuYWlsIGRvd24gYW55IHByZXJlcXVpc2l0ZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiAgSSBhbHJlYWR5IGtub3cgdGhhdCBgQ09ORklHX0lQVjZgIGlzIHByb2JhYmx5IHJlcXVpcmVkLCBidXQgbGV0JiMzOTtzIGJlIHN1cmUuIExldCBtZSBzZWUuLi4gd2hlcmUgZG9lcyBgaXA2X2ZpYi5jYCBnZXQgY29tcGlsZWQ/IEEgcXVpY2sgY2hlY2sgb2YgYG5ldC9pcHY2L01ha2VmaWxlYCBzaG91bGQgY29uZmlybSBteSBzdXNwaWNpb25zIGFuZCBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X2ZpYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZT04PWlwdjYteSA6PVx0YWZfaW5ldDYubyBhbnljYXN0Lm8gaXA2X291dHB1dC5vIGlwNl9pbnB1dC5vIGFkZHJjb25mLm8gXFxcbm5ldC9pcHY2L01ha2VmaWxlLTktXHRcdGFkZHJsYWJlbC5vIFxcXG5uZXQvaXB2Ni9NYWtlZmlsZToxMDpcdFx0cm91dGUubyBpcDZfZmliLm8gaXB2Nl9zb2NrZ2x1ZS5vIG5kaXNjLm8gdWRwLm8gXFxcbm5ldC9pcHY2L01ha2VmaWxlLTExLVx0XHRyYXcubyBpY21wLm8gbWNhc3QubyByZWFzc2VtYmx5Lm8gdGNwX2lwdjYubyBwaW5nLm8gXFxcbi0tXG5uZXQvaXB2Ni9maWI2X25vdGlmaWVyLmMtOC0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bnMvaXB2Ni5oXHUwMDNlXG5uZXQvaXB2Ni9maWI2X25vdGlmaWVyLmM6OTojaW5jbHVkZSBcdTAwM2NuZXQvaXA2X2ZpYi5oXHUwMDNlXG5uZXQvaXB2Ni9maWI2X25vdGlmaWVyLmMtMTAtXG4tLVxubmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYy0xMC0jaW5jbHVkZSBcdTAwM2NuZXQvaXAuaFx1MDAzZVxubmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYzoxMTojaW5jbHVkZSBcdTAwM2NuZXQvaXA2X2ZpYi5oXHUwMDNlXG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jLTEyLSNpbmNsdWRlIFx1MDAzY25ldC9sd3R1bm5lbC5oXHUwMDNlXG4tLVxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0xMS0jaW5jbHVkZSBcdTAwM2NuZXQvaXAuaFx1MDAzZVxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYzoxMjojaW5jbHVkZSBcdTAwM2NuZXQvaXA2X2ZpYi5oXHUwMDNlXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTEzLSNpbmNsdWRlIFx1MDAzY25ldC9pcDZfcm91dGUuaFx1MDAzZVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0zNi0jaW5jbHVkZSBcdTAwM2NuZXQvaXBfZmliLmhcdTAwM2Vcbm5ldC9pcHY2L2lwNl9maWIuYzozNzojaW5jbHVkZSBcdTAwM2NuZXQvaXA2X2ZpYi5oXHUwMDNlXG5uZXQvaXB2Ni9pcDZfZmliLmMtMzgtI2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9yb3V0ZS5oXHUwMDNlXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTEzODI9c3RhdGljIHZvaWQgZmliNl9zdGFydF9nYyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0KVxubmV0L2lwdjYvaXA2X2ZpYi5jLTEzODMte1xubmV0L2lwdjYvaXA2X2ZpYi5jOjEzODQ6XHRpZiAoIXRpbWVyX3BlbmRpbmcoXHUwMDI2bmV0LVx1MDAzZWlwdjYuaXA2X2ZpYl90aW1lcikgXHUwMDI2XHUwMDI2XG5uZXQvaXB2Ni9pcDZfZmliLmMtMTM4NS1cdCAgICAocnQtXHUwMDNlZmliNl9mbGFncyBcdTAwMjYgUlRGX0VYUElSRVMpKVxubmV0L2lwdjYvaXA2X2ZpYi5jOjEzODY6XHRcdG1vZF90aW1lcihcdTAwMjZuZXQtXHUwMDNlaXB2Ni5pcDZfZmliX3RpbWVyLFxubmV0L2lwdjYvaXA2X2ZpYi5jLTEzODctXHRcdFx0ICBqaWZmaWVzICYjNDM7IFJFQURfT05DRShuZXQtXHUwMDNlaXB2Ni5zeXNjdGwuaXA2X3J0X2djX2ludGVydmFsKSk7XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTEzOTA9dm9pZCBmaWI2X2ZvcmNlX3N0YXJ0X2djKHN0cnVjdCBuZXQgKm5ldClcbm5ldC9pcHY2L2lwNl9maWIuYy0xMzkxLXtcbm5ldC9pcHY2L2lwNl9maWIuYzoxMzkyOlx0aWYgKCF0aW1lcl9wZW5kaW5nKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmlwNl9maWJfdGltZXIpKVxubmV0L2lwdjYvaXA2X2ZpYi5jOjEzOTM6XHRcdG1vZF90aW1lcihcdTAwMjZuZXQtXHUwMDNlaXB2Ni5pcDZfZmliX3RpbWVyLFxubmV0L2lwdjYvaXA2X2ZpYi5jLTEzOTQtXHRcdFx0ICBqaWZmaWVzICYjNDM7IFJFQURfT05DRShuZXQtXHUwMDNlaXB2Ni5zeXNjdGwuaXA2X3J0X2djX2ludGVydmFsKSk7XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTI0Mjk9dm9pZCBmaWI2X3J1bl9nYyh1bnNpZ25lZCBsb25nIGV4cGlyZXMsIHN0cnVjdCBuZXQgKm5ldCwgYm9vbCBmb3JjZSlcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQzNy1cdH0gZWxzZSBpZiAoIXNwaW5fdHJ5bG9ja19iaChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X2djX2xvY2spKSB7XG5uZXQvaXB2Ni9pcDZfZmliLmM6MjQzODpcdFx0bW9kX3RpbWVyKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmlwNl9maWJfdGltZXIsIGppZmZpZXMgJiM0MzsgSFopO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTI0MzktXHRcdHJldHVybjtcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQ0OS1cdGlmIChnY19hcmdzLm1vcmUpXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjQ1MDpcdFx0bW9kX3RpbWVyKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmlwNl9maWJfdGltZXIsXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQ1MS1cdFx0XHQgIHJvdW5kX2ppZmZpZXMobm93ICYjNDM7IGlwNl9ydF9nY19pbnRlcnZhbCkpO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTI0NTItXHRlbHNlXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjQ1MzpcdFx0dGltZXJfZGVsZXRlKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmlwNl9maWJfdGltZXIpO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTI0NTQtXHRzcGluX3VubG9ja19iaChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X2djX2xvY2spO1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yNDU3PXN0YXRpYyB2b2lkIGZpYjZfZ2NfdGltZXJfY2Ioc3RydWN0IHRpbWVyX2xpc3QgKnQpXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQ1OC17XG5uZXQvaXB2Ni9pcDZfZmliLmM6MjQ1OTpcdHN0cnVjdCBuZXQgKmFyZyA9IHRpbWVyX2NvbnRhaW5lcl9vZihhcmcsIHQsIGlwdjYuaXA2X2ZpYl90aW1lcik7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQ2MC1cbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjQ2ND1zdGF0aWMgaW50IF9fbmV0X2luaXQgZmliNl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI0NzktXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcnMpO1xubmV0L2lwdjYvaXA2X2ZpYi5jOjI0ODA6XHR0aW1lcl9zZXR1cChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5pcDZfZmliX3RpbWVyLCBmaWI2X2djX3RpbWVyX2NiLCAwKTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yNDgxLVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yNTM2PXN0YXRpYyB2b2lkIGZpYjZfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yNTM5LVxubmV0L2lwdjYvaXA2X2ZpYi5jOjI1NDA6XHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZuZXQtXHUwMDNlaXB2Ni5pcDZfZmliX3RpbWVyKTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yNTQxLVxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy00OS0jaW5jbHVkZSBcdTAwM2NuZXQvaXB2Ni5oXHUwMDNlXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6NTA6I2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9maWIuaFx1MDAzZVxubmV0L2lwdjYvaXA2X2dyZS5jLTUxLSNpbmNsdWRlIFx1MDAzY25ldC9pcDZfcm91dGUuaFx1MDAzZVxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3JwZmlsdGVyLmMtOS0jaW5jbHVkZSBcdTAwM2NsaW51eC9yb3V0ZS5oXHUwMDNlXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ycGZpbHRlci5jOjEwOiNpbmNsdWRlIFx1MDAzY25ldC9pcDZfZmliLmhcdTAwM2Vcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3JwZmlsdGVyLmMtMTEtI2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9yb3V0ZS5oXHUwMDNlXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmMtOC0jaW5jbHVkZSBcdTAwM2NuZXQvaXA2X3JvdXRlLmhcdTAwM2Vcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jOjk6I2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9maWIuaFx1MDAzZVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmMtMTAtI2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9jaGVja3N1bS5oXHUwMDNlXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mdF9maWJfaXB2Ni5jLTEzLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mdF9maWJfaXB2Ni5jOjE0OiNpbmNsdWRlIFx1MDAzY25ldC9pcDZfZmliLmhcdTAwM2Vcbm5ldC9pcHY2L25ldGZpbHRlci9uZnRfZmliX2lwdjYuYy0xNS0jaW5jbHVkZSBcdTAwM2NuZXQvaXA2X3JvdXRlLmhcdTAwM2Vcbi0tXG5uZXQvaXB2Ni9vdXRwdXRfY29yZS5jLTgtI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxubmV0L2lwdjYvb3V0cHV0X2NvcmUuYzo5OiNpbmNsdWRlIFx1MDAzY25ldC9pcDZfZmliLmhcdTAwM2Vcbm5ldC9pcHY2L291dHB1dF9jb3JlLmMtMTAtI2luY2x1ZGUgXHUwMDNjbmV0L2FkZHJjb25mLmhcdTAwM2Vcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTQ3LSNpbmNsdWRlIFx1MDAzY25ldC9pcHY2LmhcdTAwM2Vcbm5ldC9pcHY2L3JvdXRlLmM6NDg6I2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9maWIuaFx1MDAzZVxubmV0L2lwdjYvcm91dGUuYy00OS0jaW5jbHVkZSBcdTAwM2NuZXQvaXA2X3JvdXRlLmhcdTAwM2Vcbi0tXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMTctI2luY2x1ZGUgXHUwMDNjbmV0L25ldG5zL2dlbmVyaWMuaFx1MDAzZVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjE4OiNpbmNsdWRlIFx1MDAzY25ldC9pcDZfZmliLmhcdTAwM2Vcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0xOS0jaW5jbHVkZSBcdTAwM2NuZXQvcm91dGUuaFx1MDAzZVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOC0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bnMvZ2VuZXJpYy5oXHUwMDNlXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTk6I2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9maWIuaFx1MDAzZVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwLSNpbmNsdWRlIFx1MDAzY25ldC9yb3V0ZS5oXHUwMDNlXG4tLVxubmV0L2lwdjYvc2l0LmMtNDEtI2luY2x1ZGUgXHUwMDNjbmV0L3RyYW5zcF92Ni5oXHUwMDNlXG5uZXQvaXB2Ni9zaXQuYzo0MjojaW5jbHVkZSBcdTAwM2NuZXQvaXA2X2ZpYi5oXHUwMDNlXG5uZXQvaXB2Ni9zaXQuYy00My0jaW5jbHVkZSBcdTAwM2NuZXQvaXA2X3JvdXRlLmhcdTAwM2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyODgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBJUHY2IENvbmZpZ3VyYXRpb24gaW4gdGhlIEtlcm5lbCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVB2NiBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIHByb2MgZmlsZXN5c3RlbS4gVGltZSB0byBjaGVjayBgbmV0L2lwdjYvS2NvbmZpZ2AuIEkga25vdyB0aGUgZ2VuZXJhbCBhcmVhcywgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyB0aGF0IG1pZ2h0IGhhdmUgY2hhbmdlZCByZWNlbnRseSwgb3IgYSBzdWJ0bGUgaW50ZXJwbGF5IGJldHdlZW4gb3B0aW9ucyBJJiMzOTttIG92ZXJsb29raW5nLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBtaWdodCBhZmZlY3QgaG93IElQdjYgYWRkcmVzc2VzIGFyZSBwcmVzZW50ZWQgb3IgbWFuaXB1bGF0ZWQgdGhyb3VnaCBgL3Byb2NgLiBUaGlzIGlzIG9mdGVuIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIHdoZXJlIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZSByZXZlYWxzIGtlcm5lbC1sZXZlbCBkZXRhaWxzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSBoYXMgdG8gb2ZmZXIuIEkgbmVlZCB0byBlbnN1cmUgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgdGhlIGludGVyZGVwZW5kZW5jaWVzIGJlZm9yZSBkaXZpbmcgaW50byB0aGUgY29kZSBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUFY2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnLTUtXG5uZXQvaXB2Ni9LY29uZmlnOjY6bWVudWNvbmZpZyBJUFY2XG5uZXQvaXB2Ni9LY29uZmlnLTctXHRib29sIFwmIzM0O1RoZSBJUHY2IHByb3RvY29sXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xOT1pZiBJUFY2XG5uZXQvaXB2Ni9LY29uZmlnLTIwLVxubmV0L2lwdjYvS2NvbmZpZzoyMTpjb25maWcgSVBWNl9ST1VURVJfUFJFRlxubmV0L2lwdjYvS2NvbmZpZy0yMi1cdGJvb2wgXCYjMzQ7SVB2NjogUm91dGVyIFByZWZlcmVuY2UgKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMC1cbm5ldC9pcHY2L0tjb25maWc6MzE6Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7SVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zOC1cbm5ldC9pcHY2L0tjb25maWc6Mzk6Y29uZmlnIElQVjZfT1BUSU1JU1RJQ19EQURcbm5ldC9pcHY2L0tjb25maWctNDAtXHRib29sIFwmIzM0O0lQdjY6IEVuYWJsZSBSRkMgNDQyOSBPcHRpbWlzdGljIERBRFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTExMS1cbm5ldC9pcHY2L0tjb25maWc6MTEyOmNvbmZpZyBJUFY2X01JUDZcbm5ldC9pcHY2L0tjb25maWctMTEzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogTW9iaWxpdHlcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTExOS1cbm5ldC9pcHY2L0tjb25maWc6MTIwOmNvbmZpZyBJUFY2X0lMQVxubmV0L2lwdjYvS2NvbmZpZy0xMjEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJZGVudGlmaWVyIExvY2F0b3IgQWRkcmVzc2luZyAoSUxBKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTQ2PWNvbmZpZyBJTkVUNl9UVU5ORUxcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE0OS1cbm5ldC9pcHY2L0tjb25maWc6MTUwOmNvbmZpZyBJUFY2X1ZUSVxubmV0L2lwdjYvS2NvbmZpZy0xNTEtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIChzZWN1cmUpIElQdjY6IHR1bm5lbGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTYxLVxubmV0L2lwdjYvS2NvbmZpZzoxNjI6Y29uZmlnIElQVjZfU0lUXG5uZXQvaXB2Ni9LY29uZmlnLTE2My1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQdjYtaW4tSVB2NCB0dW5uZWwgKFNJVCBkcml2ZXIpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNzYtXG5uZXQvaXB2Ni9LY29uZmlnOjE3Nzpjb25maWcgSVBWNl9TSVRfNlJEXG5uZXQvaXB2Ni9LY29uZmlnLTE3OC1cdGJvb2wgXCYjMzQ7SVB2NjogSVB2NiBSYXBpZCBEZXBsb3ltZW50ICg2UkQpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xOTUtXG5uZXQvaXB2Ni9LY29uZmlnOjE5Njpjb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxubmV0L2lwdjYvS2NvbmZpZy0xOTctXHRib29sXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cbm5ldC9pcHY2L0tjb25maWc6MTk5OmNvbmZpZyBJUFY2X1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUC1pbi1JUHY2IHR1bm5lbCAoUkZDMjQ3MylcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBHUkUgdHVubmVsXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMjctXG5uZXQvaXB2Ni9LY29uZmlnOjIyODpjb25maWcgSVBWNl9GT1Vcbm5ldC9pcHY2L0tjb25maWctMjI5LVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIzMS1cbm5ldC9pcHY2L0tjb25maWc6MjMyOmNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjMzLVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIzNi1cbm5ldC9pcHY2L0tjb25maWc6MjM3OmNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvS2NvbmZpZy0yMzgtXHRib29sIFwmIzM0O0lQdjY6IE11bHRpcGxlIFJvdXRpbmcgVGFibGVzXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNDItXG5uZXQvaXB2Ni9LY29uZmlnOjI0Mzpjb25maWcgSVBWNl9TVUJUUkVFU1xubmV0L2lwdjYvS2NvbmZpZy0yNDQtXHRib29sIFwmIzM0O0lQdjY6IHNvdXJjZSBhZGRyZXNzIGJhc2VkIHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cbm5ldC9pcHY2L0tjb25maWc6MjU3OmNvbmZpZyBJUFY2X01ST1VURVxubmV0L2lwdjYvS2NvbmZpZy0yNTgtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNjQtXG5uZXQvaXB2Ni9LY29uZmlnOjI2NTpjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cdGJvb2wgXCYjMzQ7SVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNzgtXG5uZXQvaXB2Ni9LY29uZmlnOjI3OTpjb25maWcgSVBWNl9QSU1TTV9WMlxubmV0L2lwdjYvS2NvbmZpZy0yODAtXHRib29sIFwmIzM0O0lQdjY6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjg1LVxubmV0L2lwdjYvS2NvbmZpZzoyODY6Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yODctXHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yOTktXG5uZXQvaXB2Ni9LY29uZmlnOjMwMDpjb25maWcgSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L0tjb25maWctMzAxLVx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxubmV0L2lwdjYvS2NvbmZpZy0zMTMtXHRkZWZfYm9vbCB5XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTYtXG5uZXQvaXB2Ni9LY29uZmlnOjMxNzpjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMzE4LVx0Ym9vbCBcJiMzNDtJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMyNy1cbm5ldC9pcHY2L0tjb25maWc6MzI4OmNvbmZpZyBJUFY2X0lPQU02X0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTMyOS1cdGJvb2wgXCYjMzQ7SVB2NjogSU9BTSBQcmUtYWxsb2NhdGVkIFRyYWNlIGluc2VydGlvbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDY4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZToKCioqSW52ZXN0aWdhdGluZyBJUHY2IFJvdXRlIEl0ZXJhdGlvbiBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBJUHY2IHJvdXRlcyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHRoZSBzZXF1ZW5jZSBzdG9wIGFuZCBhY3RpdmUgaXRlcmF0aW9uLiBJIHJlY2FsbCBzZWVpbmcgYGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wYCBhbmQgYGlwdjZfcm91dGVfaXRlcl9hY3RpdmVgIHVzZWQgd2l0aCBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIHRoZSBgQ09ORklHX1BST0NfRlNgIGZsYWcgb3Igc29tZXRoaW5nIHNpbWlsYXIuIFRpbWUgdG8gdmVyaWZ5LiBMZXQmIzM5O3MgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgY29kZS4gSSBuZWVkIHRvIGNoZWNrIGxpbmVzIDI2NTAgdGhyb3VnaCAyODUwIG9mIGBuZXQvaXB2Ni9pcDZfZmliLmNgIHRvIHNlZSBob3cgdGhvc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkIGFuZCB1bmRlciB3aGF0IGJ1aWxkIGNvbmRpdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZmliLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI2NDU6XHRcdFx0aXRlci1cdTAwM2V3LmxlYWYgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKFxuMjY0NjpcdFx0XHRcdFx0aXRlci1cdTAwM2V3LmxlYWYtXHUwMDNlZmliNl9uZXh0LFxuMjY0NzpcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNml0ZXItXHUwMDNldGJsLVx1MDAzZXRiNl9sb2NrKSk7XG4yNjQ4Olx0XHRcdGl0ZXItXHUwMDNlc2tpcC0tO1xuMjY0OTpcdFx0XHRpZiAoIWl0ZXItXHUwMDNlc2tpcCBcdTAwMjZcdTAwMjYgaXRlci1cdTAwM2V3LmxlYWYpXG4yNjUwOlx0XHRcdFx0cmV0dXJuIDE7XG4yNjUxOlx0XHR9IHdoaWxlIChpdGVyLVx1MDAzZXcubGVhZik7XG4yNjUyOlx0XG4yNjUzOlx0XHRyZXR1cm4gMDtcbjI2NTQ6XHR9XG4yNjU1Olx0XG4yNjU2Olx0c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9zZXFfc2V0dXBfd2FsayhzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyLFxuMjY1NzpcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldCAqbmV0KVxuMjY1ODpcdHtcbjI2NTk6XHRcdG1lbXNldChcdTAwMjZpdGVyLVx1MDAzZXcsIDAsIHNpemVvZihpdGVyLVx1MDAzZXcpKTtcbjI2NjA6XHRcdGl0ZXItXHUwMDNldy5mdW5jID0gaXB2Nl9yb3V0ZV95aWVsZDtcbjI2NjE6XHRcdGl0ZXItXHUwMDNldy5yb290ID0gXHUwMDI2aXRlci1cdTAwM2V0YmwtXHUwMDNldGI2X3Jvb3Q7XG4yNjYyOlx0XHRpdGVyLVx1MDAzZXcuc3RhdGUgPSBGV1NfSU5JVDtcbjI2NjM6XHRcdGl0ZXItXHUwMDNldy5ub2RlID0gaXRlci1cdTAwM2V3LnJvb3Q7XG4yNjY0Olx0XHRpdGVyLVx1MDAzZXcuYXJncyA9IGl0ZXI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Njc0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gQ29kZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcGlucG9pbnQgdGhlIG9yaWdpbiBvZiB0aGF0IGAjaWYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylgIGJsb2NrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBiZWZvcmUgY29tbWl0IDI2NDUuIEkmIzM5O20gZXNzZW50aWFsbHkgdHJhY2luZyB0aGUgZmVhdHVyZSYjMzk7cyBpbnN0YW50aWF0aW9uIGFuZCB3YW50IHRvIHNlZSBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhhcyBldm9sdmVkIGhpc3RvcmljYWxseS4gVW5kZXJzdGFuZGluZyBpdHMgcG9zaXRpb24gaXMgY3JpdGljYWwgZm9yIGNvbXByZWhlbmRpbmcgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJJiMzOTttIHByb2JhYmx5IGdvaW5nIHRvIG5lZWQgdG8gbG9vayBhdCBjb21taXQgaGlzdG9yeSBhcm91bmQgdGhhdCB0aW1lZnJhbWUgdG8gc2VlIHdoYXQgdGhhdCBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdhcyBkb2luZyBhdCB0aGF0IHRpbWUgYW5kIHVuZGVyc3RhbmQgaWYgdGhlcmUgd2FzIHNvbWV0aGluZyB0aGF0IGludHJvZHVjZWQgaXQsIG9yIHBlcmhhcHMgbW92ZWQgaXQsIGV0Yy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2lmLipDT05GSUdfUFJPQ19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9maWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZmliLmM9MjU5Nz12b2lkIGZpYjZfZ2NfY2xlYW51cCh2b2lkKVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yNjAyLVxubmV0L2lwdjYvaXA2X2ZpYi5jOjI2MDM6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjYwNC1zdGF0aWMgaW50IGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODAxOQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDY0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSVB2NiBSb3V0aW5nIFRhYmxlIEl0ZXJhdGlvbiBhbmQgVW5saW5raW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIGBmaWI2X3dhbGtlcl91bmxpbmtgIGFuZCBgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZWAuIFRoZSBjb2RlIGluZGljYXRlcyB0aGF0IGBmaWI2X3dhbGtlcl91bmxpbmtgIGlzIGRlZmluZWQgb3V0c2lkZSBgQ09ORklHX1BST0NfRlNgLCB3aGVyZWFzIGBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlYCBpcyB3aXRoaW4gaXQuIFRoaXMgc3VnZ2VzdHMgdGhhdCBgSVBWNmAgYW5kIGBQUk9DX0ZTYCBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9ucyB0byB3YXRjaC4KCk5vdywgbGV0JiMzOTtzIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIGBmaWI2X3dhbGtlcl91bmxpbmtgIGlzIGNhbGxlZCBieSBhIHZhcmlldHkgb2YgZnVuY3Rpb25zIGRlYWxpbmcgd2l0aCBkdW1waW5nIGFuZCB3YWxraW5nIHRoZSBGSUIgKEZvcndhcmRpbmcgSW5mb3JtYXRpb24gQmFzZSk6IGBmaWI2X2R1bXBfZW5kYCwgYGZpYjZfZHVtcF90YWJsZWAsIGBmaWI2X3dhbGtgLCBgaXB2Nl9yb3V0ZV9zZXFfbmV4dGAsIGFuZCBgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3BgLiBgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZWAgaXMgYSBzdGF0aWMgaGVscGVyIHdpdGhpbiBgaXA2X2ZpYi5jYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgb3B0aW1pemVkIGJ5IHRoZSBjb21waWxlci4gYGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wYCAqY2FsbHMqIGBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlYC4gV2UgYWxzbyBoYXZlIHRoZSBzZXEgZmlsZSBvcGVyYXRpb24gZW50cnkgcG9pbnRzOiBgaXB2Nl9yb3V0ZV9zZXFfc3RhcnRgLCBgaXB2Nl9yb3V0ZV9zZXFfbmV4dGAsIGFuZCBgaXB2Nl9yb3V0ZV9zZXFfc3RvcGAuICBGaW5hbGx5LCBgZmliNl93YWxrYCBhbmQgYGZpYjZfd2Fsa19jb250aW51ZWAgYXJlIHRoZSB3YWxrZXIgb3BlcmF0aW9ucyB0aGVtc2VsdmVzLgoKRm9jdXNpbmcgb24gdGhlIG5hdHVyZSBvZiBgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZWAsIGl0JiMzOTtzIGRlZmluZWQgYXMgYSBgc3RhdGljIGJvb2xgIGZ1bmN0aW9uLiBUaGlzIG1lYW5zIGl0JiMzOTtzIGxpa2VseSBpbmxpbmVkLCBwcm92aWRpbmcgb3Bwb3J0dW5pdHkgZm9yIGNvbXBpbGVyIG9wdGltaXphdGlvbnMuIGBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcGAgaXMgYWxzbyBzdGF0aWMsIGFuZCBjYWxsZWQgYnkgYGlwdjZfcm91dGVfc2VxX3N0b3BgLiBMaWtld2lzZSwgYGZpYjZfd2Fsa2VyX3VubGlua2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24uICBUaGUgc2VxIGZpbGUgb3BlcmF0aW9uIGZ1bmN0aW9ucyAoYGlwdjZfcm91dGVfc2VxX3N0YXJ0YCwgYGlwdjZfcm91dGVfc2VxX25leHRgLCBgaXB2Nl9yb3V0ZV9zZXFfc3RvcGAsIGFuZCBgaXB2Nl9yb3V0ZV9zZXFfc2hvd2ApIGFyZSBhbGwgd2l0aGluIGBpcDZfZmliLmNgIGFzIHdlbGwuCgpHaXZlbiB0aGF0IGBmaWI2X3dhbGtlcl91bmxpbmtgIGlzIHN0YXRpYyBpbiBgaXA2X2ZpYi5jYCwgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBob3cgdGhleSByZWxhdGUuICBUaGUgYGlwdjZfcm91dGVfc2VxX29wc2Agc3RydWN0IGlzIHBpdm90YWwsIGNvbnRhaW5pbmcgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIGZvciB0aGUgc2VxIGZpbGUgb3BlcmF0aW9uczogYC5zdGFydCA9IGlwdjZfcm91dGVfc2VxX3N0YXJ0YCwgYC5uZXh0ID0gaXB2Nl9yb3V0ZV9zZXFfbmV4dGAsIGAuc3RvcCA9IGlwdjZfcm91dGVfc2VxX3N0b3BgLCBhbmQgYC5zaG93ID0gaXB2Nl9yb3V0ZV9zZXFfc2hvd2AuICBBZ2FpbiwgYGZpYjZfd2Fsa2VyX3VubGlua2AgaXMgY2FsbGVkIGJ5IHRob3NlIGZ1bmN0aW9ucy4gSSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgaW4gYGlwNl9maWIuY2AgKG9yIHBvdGVudGlhbGx5IGByb3V0ZS5jYCkgdGhhdCBleGVyY2lzZSB0aGVzZSBwYXRocywgc3VjaCBhcyBgZmliNl93YWxrZXJfbGlua2AsIGBmaWI2X3dhbGtgLCBhbmQgYGluZXQ2X2R1bXBfZmliYC4KCkZpbmFsbHksIHRoZSBjcml0aWNhbCBuZXh0IHN0ZXAgaXMgdG8gZGV0ZXJtaW5lICp3aGVyZSogYGlwdjZfcm91dGVfc2VxX29wc2AgaXMgcmVnaXN0ZXJlZC4gVGhhdCB3aWxsIHByb3ZpZGUgdGhlIGhvb2sgaW50byB0aGUgYnJvYWRlciBzeXN0ZW0gYW5kIGhvdyB0aGlzIGFsbCBpbnRlZ3JhdGVzIGludG8gdGhlIHByb2NmcyBpbnRlcmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdjZfcm91dGVfc2VxX29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcDZfZmliLmg9NTk2PXN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIge1xuLS1cbmluY2x1ZGUvbmV0L2lwNl9maWIuaC02MDMtXG5pbmNsdWRlL25ldC9pcDZfZmliLmg6NjA0OmV4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaXB2Nl9yb3V0ZV9zZXFfb3BzO1xuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTYwNS1cbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjgyOD1zdGF0aWMgdm9pZCBpcHY2X3JvdXRlX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yODMzLVxubmV0L2lwdjYvaXA2X2ZpYi5jOjI4MzQ6Y29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGlwdjZfcm91dGVfc2VxX29wcyA9IHtcbm5ldC9pcHY2L2lwNl9maWIuYy0yODM1LVx0LnN0YXJ0XHQ9IGlwdjZfcm91dGVfc2VxX3N0YXJ0LFxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9NjgwND1zdGF0aWMgaW50IF9fbmV0X2luaXQgaXA2X3JvdXRlX25ldF9pbml0X2xhdGUoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNjgwNy1cdGlmICghcHJvY19jcmVhdGVfbmV0KFwmIzM0O2lwdjZfcm91dGVcJiMzNDssIDAsIG5ldC1cdTAwM2Vwcm9jX25ldCxcbm5ldC9pcHY2L3JvdXRlLmM6NjgwODpcdFx0XHQgICAgIFx1MDAyNmlwdjZfcm91dGVfc2VxX29wcyxcbm5ldC9pcHY2L3JvdXRlLmMtNjgwOS1cdFx0XHQgICAgIHNpemVvZihzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyKSkpXG4tLVxubmV0L2lwdjYvcm91dGUuYz02ODkwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gaXB2Nl9yb3V0ZV9zZXFfaW5mbyA9IHtcbm5ldC9pcHY2L3JvdXRlLmM6Njg5MTpcdC5zZXFfb3BzXHRcdD0gXHUwMDI2aXB2Nl9yb3V0ZV9zZXFfb3BzLFxubmV0L2lwdjYvcm91dGUuYy02ODkyLVx0LmluaXRfc2VxX3ByaXZhdGVcdD0gYnBmX2l0ZXJfaW5pdF9zZXFfbmV0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg0NQoJCQkJCQkJb3V0cHV0OiAxODEKCQkJCQkJCXRob3VnaHRzOiA1MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgQXNzZXNzbWVudDogSVB2NiBSb3V0ZSBXYWxrZXIgYW5kIFNlcXVlbmNlIEl0ZXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgY2VudGVycyBvbiB0aGVzZSBJUHY2LXJlbGF0ZWQgZnVuY3Rpb25zOiBgaXB2Nl9yb3V0ZV9zZXFfc3RhcnRgLCBgaXB2Nl9yb3V0ZV9zZXFfbmV4dGAsIGBpcHY2X3JvdXRlX3NlcV9zdG9wYCwgYGlwdjZfcm91dGVfc2VxX3Nob3dgLCBgZmliNl93YWxrZXJfdW5saW5rYCwgYGZpYjZfd2Fsa2VyX2xpbmtgLCBgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZWAsIGFuZCBgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3BgLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGNvbmZpcm0gdGhlc2UgYXJlIGlzb2xhdGVkIG9yIHBhcnQgb2YgYSBicm9hZGVyIHNldCBvZiByZWxhdGVkIGZ1bmN0aW9ucywgc28gSSYjMzk7bSBjcm9zcy1yZWZlcmVuY2luZyB3aXRoaW4gYGlwNl9maWIuY2AgYW5kIGByb3V0ZS5jYCBmb3IgYW55IHdhbGtlci1yZWxhdGVkIGludGVyYWN0aW9ucy4KCk9rYXksIGNoZWNraW5nIGBuZXQvaXB2Ni9pcDZfZmliLmNgLCBjb25maXJtcyB0aG9zZSwgcGx1cyBgZmliNl9kdW1wX3RhYmxlYC4gR29vZCwgdGhpcyBzdXBwb3J0cyB0aGUgaW5pdGlhbCBmb2N1cy4KCklzIHRoaXMgZnV6emluZyB0YXJnZXQgdmlhYmxlPyBBYnNvbHV0ZWx5LCB3aXRob3V0IHF1ZXN0aW9uLiBNeSByZWFzb25pbmcgaXMgc29saWQ6IFRoaXMgaXMgcmVhY2hhYmxlIGNvZGU7IHRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgbWFuaXB1bGF0ZSB0aGUgSVB2NiBGSUIgd2Fsa2VyIGxpc3QgbWFuYWdlbWVudCBhbmQsIGltcG9ydGFudGx5LCB0aGUgaXRlcmF0b3Igc3RhdHVzIGNoZWNrcyBkdXJpbmcgYC9wcm9jL25ldC9pcHY2X3JvdXRlYCBzZXFfZmlsZSByZWFkcyBhbmQgQlBGIGl0ZXJhdG9yIGV4ZWN1dGlvbi4gSXTigJlzIGNvcmUgbmV0d29ya2luZyAoSVB2NiBGSUIgcm91dGluZyB0YWJsZXMpLCBhbmQgaXTigJlzIGRpcmVjdGx5IGFjY2Vzc2libGUgdmlhIHN0YW5kYXJkIHNvY2tldHMsIG5ldGxpbmssIG9yIHByb2NmcyB3aXRoaW4gYSBRRU1VL3N5emthbGxlciBlbnZpcm9ubWVudC4gSXQmIzM5O3MgbG93LWhhbmdpbmcgZnJ1aXQuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgY29uZmlndXJhdGlvbnM6IGBJUFY2YCBhbmQgYFBST0NfRlNgIGFyZSBlc3NlbnRpYWwuIEV4Y2VsbGVudCwgZWFzeSBjaGVjay4KCkxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHM6IEkmIzM5O20gcHJpbWFyaWx5IGZvY3VzZWQgb24gYGZpYjZfd2Fsa2VyX3VubGlua2AsIGBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlYCwgYGlwdjZfcm91dGVfc2VxX25leHRgLCBgaXB2Nl9yb3V0ZV9zZXFfc3RhcnRgLCBgaXB2Nl9yb3V0ZV9zZXFfc3RvcGAsIGFuZCBgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3BgLgoKT2theSwgbGV0JiMzOTtzIGRvIGEgZmluYWwgc2FuaXR5IGNoZWNrLCBlbnN1cmluZyBldmVyeXRoaW5nIGFsaWduczoKCiogICAqKldvcnRoRnV6emluZzogVHJ1ZS4qKiBDbGVhci4KKiAgICoqRm9jdXNTeW1ib2xzOioqIFNwZWNpZmljYWxseSByZWxhdGVkIHRvIElQdjYgcm91dGUgd2Fsa2VyIGFuZCBzZXEgaXRlcmF0aW9uOiBgZmliNl93YWxrZXJfdW5saW5rYCwgYGlwdjZfcm91dGVfaXRlcl9hY3RpdmVgLCBgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3BgLCBgaXB2Nl9yb3V0ZV9zZXFfc3RvcGAsIGBpcHY2X3JvdXRlX3NlcV9zdGFydGAsIGBpcHY2X3JvdXRlX3NlcV9uZXh0YC4gWWVzLgoqICAgKipFbmFibGVDb25maWdzOioqIGBJUFY2YCwgYFBST0NfRlNgLiBDb25maXJtZWQuCgpBbHJpZ2h0LCBJJiMzOTttIHJlYWR5IHRvIHByZXBhcmUgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC4gTGV0JiMzOTtzIGdldCB0aGlzIHNldCB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7UFJPQ19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZpYjZfd2Fsa2VyX3VubGluayYjMzQ7LAogICAgJiMzNDtpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlJiMzNDssCiAgICAmIzM0O2lwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wJiMzNDssCiAgICAmIzM0O2lwdjZfcm91dGVfc2VxX3N0b3AmIzM0OywKICAgICYjMzQ7aXB2Nl9yb3V0ZV9zZXFfc3RhcnQmIzM0OywKICAgICYjMzQ7aXB2Nl9yb3V0ZV9zZXFfbmV4dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBJUHY2IEZJQiB3YWxrZXIgbWFuYWdlbWVudCBhbmQgaXRlcmF0aW9uIHN0YXRlIGNoZWNraW5nIGluIG5ldC9pcHY2L2lwNl9maWIuYyAodXNpbmcgbGlzdF9kZWxfaW5pdCBvbiB1bmxpbmtpbmcgYW5kIGNoZWNraW5nICFsaXN0X2VtcHR5IGZvciBhY3RpdmUgaXRlcmF0b3Igc3RhdGUpLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSAvcHJvYy9uZXQvaXB2Nl9yb3V0ZSBzZXFfZmlsZSBvcGVyYXRpb25zIGFuZCBCUEYgSVB2NiByb3V0ZSBpdGVyYXRvcnMgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaWI2X3dhbGtlcl91bmxpbmsmIzM0OywKICAgICYjMzQ7aXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZSYjMzQ7LAogICAgJiMzNDtpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcCYjMzQ7LAogICAgJiMzNDtpcHY2X3JvdXRlX3NlcV9zdG9wJiMzNDssCiAgICAmIzM0O2lwdjZfcm91dGVfc2VxX3N0YXJ0JiMzNDssCiAgICAmIzM0O2lwdjZfcm91dGVfc2VxX25leHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NiBGSUIgd2Fsa2VyIG1hbmFnZW1lbnQgYW5kIGl0ZXJhdGlvbiBzdGF0ZSBjaGVja2luZyBpbiBuZXQvaXB2Ni9pcDZfZmliLmMgKHVzaW5nIGxpc3RfZGVsX2luaXQgb24gdW5saW5raW5nIGFuZCBjaGVja2luZyAhbGlzdF9lbXB0eSBmb3IgYWN0aXZlIGl0ZXJhdG9yIHN0YXRlKS4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgL3Byb2MvbmV0L2lwdjZfcm91dGUgc2VxX2ZpbGUgb3BlcmF0aW9ucyBhbmQgQlBGIElQdjYgcm91dGUgaXRlcmF0b3JzIGluIHN0YW5kYXJkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGxpc3RfZGVsIHdpdGggbGlzdF9kZWxfaW5pdCBpbiBmaWI2X3dhbGtlcl91bmxpbmsoKSBhbmQgdXBkYXRlcyBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKCkgdG8gY2hlY2sgbGlzdF9lbXB0eShcdTAwMjZ3LVx1MDAzZWxoKSBpbnN0ZWFkIG9mIGluc3BlY3Rpbmcgd2Fsa2VyIHN0YXRlIGFuZCBub2RlIHBvaW50ZXJzLiBUaGlzIGNoYW5nZSBmaXhlcyBsaXN0IHRyYWNraW5nIGFuZCBhdm9pZHMgZG91YmxlIGxpc3QgZGVsZXRpb24gLyBsaXN0IGNvcnJ1cHRpb24gd2hlbiBzdG9wcGluZyB0aGUgSVB2NiByb3V0ZSBzZXEgaXRlcmF0aW9uLiBBbGwgcmVsZXZhbnQgbGlzdCBzdHJ1Y3R1cmVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCAodmlhIElOSVRfTElTVF9IRUFEIC8gbGlzdF9kZWxfaW5pdCAvIG1lbXNldCkgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgcmlza3MgYXJlIGludHJvZHVjZWQuIFN0YW5kYXJkIGRldGVjdG9ycyAoS0FTQU4gLyBDT05GSUdfREVCVUdfTElTVCkgY292ZXIgbGlzdCBtYW5pcHVsYXRpb24gYW5kIG1lbW9yeSBjb3JydXB0aW9uIHJpc2tzIGluIHRoaXMgYXJlYSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1YzQ2NGMwMmRiZjA3OGY1ODk5Yjc4NDJjOThiMDRhM2RhODQ3MWQ0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwODoxNzo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9maWIuYyBiL25ldC9pcHY2L2lwNl9maWIuYwppbmRleCAzZTM4MmJhMTU3M2UzLi45ZWE3NTcwM2IzOGQ0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfZmliLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X2ZpYi5jCkBAIC04NSw3ICYjNDM7ODUsNyBAQCBzdGF0aWMgdm9pZCBmaWI2X3dhbGtlcl9saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KQogc3RhdGljIHZvaWQgZmliNl93YWxrZXJfdW5saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KQogewogCXdyaXRlX2xvY2tfYmgoJmFtcDtuZXQtJmd0O2lwdjYuZmliNl93YWxrZXJfbG9jayk7Ci0JbGlzdF9kZWwoJmFtcDt3LSZndDtsaCk7CiYjNDM7CWxpc3RfZGVsX2luaXQoJmFtcDt3LSZndDtsaCk7CiAJd3JpdGVfdW5sb2NrX2JoKCZhbXA7bmV0LSZndDtpcHY2LmZpYjZfd2Fsa2VyX2xvY2spOwogfQogCkBAIC0yNzYwLDcgJiM0MzsyNzYwLDcgQEAgc3RhdGljIHZvaWQgKmlwdjZfcm91dGVfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIHN0YXRpYyBib29sIGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcikKIHsKIAlzdHJ1Y3QgZmliNl93YWxrZXIgKncgPSAmYW1wO2l0ZXItJmd0O3c7Ci0JcmV0dXJuIHctJmd0O25vZGUgJmFtcDsmYW1wOyAhKHctJmd0O3N0YXRlID09IEZXU19VICZhbXA7JmFtcDsgdy0mZ3Q7bm9kZSA9PSB3LSZndDtyb290KTsKJiM0MzsJcmV0dXJuIHctJmd0O25vZGUgJmFtcDsmYW1wOyAhbGlzdF9lbXB0eSgmYW1wO3ctJmd0O2xoKTsKIH0KIAogc3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjU1CgkJCQkJCQlvdXRwdXQ6IDc4CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZmlsZXMgaW52b2x2ZWQsIGFuZCB0aGF0IG1lYW5zIHN0YXJ0aW5nIHdpdGggYG5ldC9pcHY2L2lwNl9maWIuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvZGUgY2hhbmdlIGlzLCBzbyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBhY3Rpb24gaXMuCgpJJiMzOTttIHRoaW5raW5nLCByaWdodCwgbGV0JiMzOTtzIHVzZSB0aGUgbGluZSBudW1iZXJzIHByb3ZpZGVkLiBBcm91bmQgbGluZXMgODUgYW5kIDI3NjAsIHRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBjb250ZXh0dWFsIGdyYXNwLiBJIG5lZWQgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIHRoZSBpbW1lZGlhdGUgaW1wYWN0IG9mIHRoZSBjaGFuZ2VzLgoKQWxyaWdodCwgdGltZSB0byBnZXQgdGhlIGNvZGUuIEkmIzM5O2xsIHJlYWNoIGZvciBgcmVhZC1maWxlYCBhbmQgcHVsbCBpbiB0aGUgY29udGVudHMgb2YgYG5ldC9pcHY2L2lwNl9maWIuY2AuIEdvdHRhIGdldCB0aGUgY29kZSBpbiBmcm9udCBvZiBtZSB0byBzdGFydCBtYWtpbmcgc29tZSBhc3Nlc3NtZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZmliLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDcwOlx0ICpcdHJlc3VsdCBvZiByZWRpcmVjdHMsIHBhdGggTVRVIGNoYW5nZXMsIGV0Yy5cbiAgNzE6XHQgKi9cbiAgNzI6XHRcbiAgNzM6XHRzdGF0aWMgdm9pZCBmaWI2X2djX3RpbWVyX2NiKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbiAgNzQ6XHRcbiAgNzU6XHQjZGVmaW5lIEZPUl9XQUxLRVJTKG5ldCwgdykgXFxcbiAgNzY6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkodywgXHUwMDI2KG5ldCktXHUwMDNlaXB2Ni5maWI2X3dhbGtlcnMsIGxoKVxuICA3NzpcdFxuICA3ODpcdHN0YXRpYyB2b2lkIGZpYjZfd2Fsa2VyX2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4gIDc5Olx0e1xuICA4MDpcdFx0d3JpdGVfbG9ja19iaChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcbiAgODE6XHRcdGxpc3RfYWRkKFx1MDAyNnctXHUwMDNlbGgsIFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYjZfd2Fsa2Vycyk7XG4gIDgyOlx0XHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XG4gIDgzOlx0fVxuICA4NDpcdFxuICA4NTpcdHN0YXRpYyB2b2lkIGZpYjZfd2Fsa2VyX3VubGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X3dhbGtlciAqdylcbiAgODY6XHR7XG4gIDg3Olx0XHR3cml0ZV9sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xuICA4ODpcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZ3LVx1MDAzZWxoKTtcbiAgODk6XHRcdHdyaXRlX3VubG9ja19iaChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcbiAgOTA6XHR9XG4gIDkxOlx0XG4gIDkyOlx0c3RhdGljIGludCBmaWI2X25ld19zZXJudW0oc3RydWN0IG5ldCAqbmV0KVxuICA5MzpcdHtcbiAgOTQ6XHRcdGludCBuZXcsIG9sZCA9IGF0b21pY19yZWFkKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYjZfc2VybnVtKTtcbiAgOTU6XHRcbiAgOTY6XHRcdGRvIHtcbiAgOTc6XHRcdFx0bmV3ID0gb2xkIFx1MDAzYyBJTlRfTUFYID8gb2xkICYjNDM7IDEgOiAxO1xuICA5ODpcdFx0fSB3aGlsZSAoIWF0b21pY190cnlfY21weGNoZyhcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3Nlcm51bSwgXHUwMDI2b2xkLCBuZXcpKTtcbiAgOTk6XHRcbiAxMDA6XHRcdHJldHVybiBuZXc7XG4gMTAxOlx0fVxuIDEwMjpcdFxuIDEwMzpcdGVudW0ge1xuIDEwNDpcdFx0RklCNl9OT19TRVJOVU1fQ0hBTkdFID0gMCxcbiAxMDU6XHR9O1xuIDEwNjpcdFxuIDEwNzpcdHZvaWQgZmliNl91cGRhdGVfc2VybnVtKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpKVxuIDEwODpcdHtcbiAxMDk6XHRcdHN0cnVjdCBmaWI2X25vZGUgKmZuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9maWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc1MDpcdFx0aWYgKGl0ZXItXHUwMDNldGJsKSB7XG4yNzUxOlx0XHRcdGxvZmZfdCBwID0gMDtcbjI3NTI6XHRcbjI3NTM6XHRcdFx0aXB2Nl9yb3V0ZV9zZXFfc2V0dXBfd2FsayhpdGVyLCBuZXQpO1xuMjc1NDpcdFx0XHRyZXR1cm4gaXB2Nl9yb3V0ZV9zZXFfbmV4dChzZXEsIE5VTEwsIFx1MDAyNnApO1xuMjc1NTpcdFx0fSBlbHNlIHtcbjI3NTY6XHRcdFx0cmV0dXJuIE5VTEw7XG4yNzU3Olx0XHR9XG4yNzU4Olx0fVxuMjc1OTpcdFxuMjc2MDpcdHN0YXRpYyBib29sIGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcilcbjI3NjE6XHR7XG4yNzYyOlx0XHRzdHJ1Y3QgZmliNl93YWxrZXIgKncgPSBcdTAwMjZpdGVyLVx1MDAzZXc7XG4yNzYzOlx0XHRyZXR1cm4gdy1cdTAwM2Vub2RlIFx1MDAyNlx1MDAyNiAhbGlzdF9lbXB0eShcdTAwMjZ3LVx1MDAzZWxoKTtcbjI3NjQ6XHR9XG4yNzY1Olx0XG4yNzY2Olx0c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4yNzY3Olx0XHRfX3JlbGVhc2VzKFJDVSlcbjI3Njg6XHR7XG4yNzY5Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTtcbjI3NzA6XHRcdHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIgPSBzZXEtXHUwMDNlcHJpdmF0ZTtcbjI3NzE6XHRcbjI3NzI6XHRcdGlmIChpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKGl0ZXIpKVxuMjc3MzpcdFx0XHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCBcdTAwMjZpdGVyLVx1MDAzZXcpO1xuMjc3NDpcdFxuMjc3NTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yNzc2Olx0fVxuMjc3NzpcdFxuMjc3ODpcdCNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcbjI3Nzk6XHRzdGF0aWMgaW50IGlwdjZfcm91dGVfcHJvZ19zZXFfc2hvdyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4yNzgwOlx0XHRcdFx0XHQgICAgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXG4yNzgxOlx0XHRcdFx0XHQgICAgdm9pZCAqdilcbjI3ODI6XHR7XG4yNzgzOlx0XHRzdHJ1Y3QgYnBmX2l0ZXJfX2lwdjZfcm91dGUgY3R4O1xuMjc4NDpcdFxuMjc4NTpcdFx0Y3R4Lm1ldGEgPSBtZXRhO1xuMjc4NjpcdFx0Y3R4LnJ0ID0gdjtcbjI3ODc6XHRcdHJldHVybiBicGZfaXRlcl9ydW5fcHJvZyhwcm9nLCBcdTAwMjZjdHgpO1xuMjc4ODpcdH1cbjI3ODk6XHRcbjI3OTA6XHRzdGF0aWMgaW50IGlwdjZfcm91dGVfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4yNzkxOlx0e1xuMjc5MjpcdFx0c3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlciA9IHNlcS1cdTAwM2Vwcml2YXRlO1xuMjc5MzpcdFx0c3RydWN0IGJwZl9pdGVyX21ldGEgbWV0YTtcbjI3OTQ6XHRcdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcbjI3OTU6XHRcdGludCByZXQ7XG4yNzk2Olx0XG4yNzk3Olx0XHRtZXRhLnNlcSA9IHNlcTtcbjI3OTg6XHRcdHByb2cgPSBicGZfaXRlcl9nZXRfaW5mbyhcdTAwMjZtZXRhLCBmYWxzZSk7XG4yNzk5Olx0XHRpZiAoIXByb2cpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NTMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgd2Fsa2luZyB0aHJvdWdoIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gSVB2NiBSb3V0aW5nIFRhYmxlIEl0ZXJhdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGlwdjZfcm91dGVfaXRlcmAgYW5kIGBmaWI2X3dhbGtlcmAgYXJlIGJlaW5nIHNldCB1cCBhbmQgdXNlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3RhcnQgd2l0aCB0aGUgb2J2aW91czogZmluZCBvdXQgd2hlcmUgYGlwdjZfcm91dGVfaXRlcmAgaXMgKmRlZmluZWQqIGFuZCAqcmVmZXJlbmNlZCouIFNpbmNlIHRoaXMgaXMgbGlrZWx5IHdpdGhpbiB0aGUgSVB2NiByb3V0aW5nIGltcGxlbWVudGF0aW9uLCBgbmV0L2lwdjYvaXA2X2ZpYi5jYCBpcyB0aGUgcHJpbWUgc3VzcGVjdC4gSSYjMzk7bGwgcmVhY2ggZm9yIGEgYGdyZXBgIGNvbW1hbmQgdG8gc2VhcmNoIGRpcmVjdGx5IHdpdGhpbiB0aGF0IGZpbGUgZm9yIGluc3RhbmNlcyBvZiBgaXB2Nl9yb3V0ZV9pdGVyYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIGl0cyB1c2FnZS4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB3aWxsIHVudmVpbCBzb21lIGtleSBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGludGVncmFsIHRvIHdhbGtpbmcgdGhlIElQdjYgcm91dGluZyB0YWJsZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIHVuY292ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdjZfcm91dGVfaXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZmliLmM9MjYwND1zdGF0aWMgaW50IGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yNjA2LVx0c3RydWN0IGZpYjZfaW5mbyAqcnQgPSB2O1xubmV0L2lwdjYvaXA2X2ZpYi5jOjI2MDc6XHRzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyID0gc2VxLVx1MDAzZXByaXZhdGU7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjYwOC1cdHN0cnVjdCBmaWI2X25oICpmaWI2X25oID0gcnQtXHUwMDNlZmliNl9uaDtcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjYzNz1zdGF0aWMgaW50IGlwdjZfcm91dGVfeWllbGQoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI2Mzgte1xubmV0L2lwdjYvaXA2X2ZpYi5jOjI2Mzk6XHRzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyID0gdy1cdTAwM2VhcmdzO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTI2NDAtXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI2NTUtXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjY1NjpzdGF0aWMgdm9pZCBpcHY2X3JvdXRlX3NlcV9zZXR1cF93YWxrKHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIsXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjY1Ny1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjY3MD1zdGF0aWMgc3RydWN0IGZpYjZfdGFibGUgKmlwdjZfcm91dGVfc2VxX25leHRfdGFibGUoc3RydWN0IGZpYjZfdGFibGUgKnRibCxcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjY5MC1cbm5ldC9pcHY2L2lwNl9maWIuYzoyNjkxOnN0YXRpYyB2b2lkIGlwdjZfcm91dGVfY2hlY2tfc2VybnVtKHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIpXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjY5Mi17XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTI3MDQ9c3RhdGljIHZvaWQgKmlwdjZfcm91dGVfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yNzA4LVx0c3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7XG5uZXQvaXB2Ni9pcDZfZmliLmM6MjcwOTpcdHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIgPSBzZXEtXHUwMDNlcHJpdmF0ZTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yNzEwLVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yNzQwPXN0YXRpYyB2b2lkICppcHY2X3JvdXRlX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NDMtXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTtcbm5ldC9pcHY2L2lwNl9maWIuYzoyNzQ0Olx0c3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlciA9IHNlcS1cdTAwM2Vwcml2YXRlO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NDUtXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NTktXG5uZXQvaXB2Ni9pcDZfZmliLmM6Mjc2MDpzdGF0aWMgYm9vbCBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIpXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc2MS17XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTI3NjY9c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NjktXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTtcbm5ldC9pcHY2L2lwNl9maWIuYzoyNzcwOlx0c3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlciA9IHNlcS1cdTAwM2Vwcml2YXRlO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NzEtXG5uZXQvaXB2Ni9pcDZfZmliLmM6Mjc3MjpcdGlmIChpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKGl0ZXIpKVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NzMtXHRcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIFx1MDAyNml0ZXItXHUwMDNldyk7XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTI3OTA9c3RhdGljIGludCBpcHY2X3JvdXRlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3OTEte1xubmV0L2lwdjYvaXA2X2ZpYi5jOjI3OTI6XHRzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyID0gc2VxLVx1MDAzZXByaXZhdGU7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc5My1cdHN0cnVjdCBicGZfaXRlcl9tZXRhIG1ldGE7XG4tLVxubmV0L2lwdjYvcm91dGUuYz02ODA0PXN0YXRpYyBpbnQgX19uZXRfaW5pdCBpcDZfcm91dGVfbmV0X2luaXRfbGF0ZShzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2lwdjYvcm91dGUuYy02ODA4LVx0XHRcdCAgICAgXHUwMDI2aXB2Nl9yb3V0ZV9zZXFfb3BzLFxubmV0L2lwdjYvcm91dGUuYzo2ODA5Olx0XHRcdCAgICAgc2l6ZW9mKHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIpKSlcbm5ldC9pcHY2L3JvdXRlLmMtNjgxMC1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxubmV0L2lwdjYvcm91dGUuYz02ODkwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gaXB2Nl9yb3V0ZV9zZXFfaW5mbyA9IHtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTY4OTMtXHQuZmluaV9zZXFfcHJpdmF0ZVx0PSBicGZfaXRlcl9maW5pX3NlcV9uZXQsXG5uZXQvaXB2Ni9yb3V0ZS5jOjY4OTQ6XHQuc2VxX3ByaXZfc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyKSxcbm5ldC9pcHY2L3JvdXRlLmMtNjg5NS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjA4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlOgoKKipEaXZpbmcgaW50byB0aGUgSVB2NiBGSUIgV2Fsa2VyIGluIG5ldC9pcHY2L2lwNl9maWIuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiB0aGUgSVB2NiBGSUIuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSByb3V0ZSB3YWxrZXIgYW5kIGl0cyByZWxhdGVkIGZ1bmN0aW9ucyBmdW5jdGlvbi4gVGltZSB0byBqdW1wIGludG8gbGluZXMgMjY1MC0yNzUwIG9mIGBuZXQvaXB2Ni9pcDZfZmliLmNgLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIGBpcHY2X3JvdXRlX3NlcV9zZXR1cF93YWxrYCwgYGZpYjZfd2Fsa2VyX2xpbmtgLCBhbmQgdGhlIG90aGVyIHBsYXllcnMgaW4gdGhpcyBsaXR0bGUgcGVyZm9ybWFuY2Ugb2Ygcm91dGUgbG9va3VwLiBJIGV4cGVjdCB0byBzZWUgdGhlIGludGVycGxheSBiZXR3ZWVuIGRhdGEgc3RydWN0dXJlcywgdGhlIGxvZ2ljIGZvciB3YWxraW5nIHRocm91Z2ggdGhlIEZJQiB0cmVlLCBhbmQgd2hhdGV2ZXIgb3B0aW1pemF0aW9ucyB0aGV5JiMzOTtyZSBlbXBsb3lpbmcuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgYnVncykgaGFwcGVuIHdoZW4gcm91dGluZyBJUHY2IHRyYWZmaWMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0aGUgY29tcGxleGl0aWVzIG9mIHByZWZpeCBtYXRjaGluZywgbG9uZ2VzdCBwcmVmaXggbWF0Y2ggKExQTSksIGFuZCBhbnkgYXNzb2NpYXRlZCBjYWNoaW5nLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgdHJpY2tzIG9yIG9wdGltaXphdGlvbnMgaW4gcGxheSBoZXJlLiBUaW1lIHRvIGdldCBkb3duIGFuZCBkaXJ0eSB3aXRoIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9maWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjY1MDpcdFx0XHRcdHJldHVybiAxO1xuMjY1MTpcdFx0fSB3aGlsZSAoaXRlci1cdTAwM2V3LmxlYWYpO1xuMjY1MjpcdFxuMjY1MzpcdFx0cmV0dXJuIDA7XG4yNjU0Olx0fVxuMjY1NTpcdFxuMjY1NjpcdHN0YXRpYyB2b2lkIGlwdjZfcm91dGVfc2VxX3NldHVwX3dhbGsoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcixcbjI2NTc6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXQgKm5ldClcbjI2NTg6XHR7XG4yNjU5Olx0XHRtZW1zZXQoXHUwMDI2aXRlci1cdTAwM2V3LCAwLCBzaXplb2YoaXRlci1cdTAwM2V3KSk7XG4yNjYwOlx0XHRpdGVyLVx1MDAzZXcuZnVuYyA9IGlwdjZfcm91dGVfeWllbGQ7XG4yNjYxOlx0XHRpdGVyLVx1MDAzZXcucm9vdCA9IFx1MDAyNml0ZXItXHUwMDNldGJsLVx1MDAzZXRiNl9yb290O1xuMjY2MjpcdFx0aXRlci1cdTAwM2V3LnN0YXRlID0gRldTX0lOSVQ7XG4yNjYzOlx0XHRpdGVyLVx1MDAzZXcubm9kZSA9IGl0ZXItXHUwMDNldy5yb290O1xuMjY2NDpcdFx0aXRlci1cdTAwM2V3LmFyZ3MgPSBpdGVyO1xuMjY2NTpcdFx0aXRlci1cdTAwM2VzZXJudW0gPSBSRUFEX09OQ0UoaXRlci1cdTAwM2V3LnJvb3QtXHUwMDNlZm5fc2VybnVtKTtcbjI2NjY6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNml0ZXItXHUwMDNldy5saCk7XG4yNjY3Olx0XHRmaWI2X3dhbGtlcl9saW5rKG5ldCwgXHUwMDI2aXRlci1cdTAwM2V3KTtcbjI2Njg6XHR9XG4yNjY5Olx0XG4yNjcwOlx0c3RhdGljIHN0cnVjdCBmaWI2X3RhYmxlICppcHY2X3JvdXRlX3NlcV9uZXh0X3RhYmxlKHN0cnVjdCBmaWI2X3RhYmxlICp0YmwsXG4yNjcxOlx0XHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBuZXQgKm5ldClcbjI2NzI6XHR7XG4yNjczOlx0XHR1bnNpZ25lZCBpbnQgaDtcbjI2NzQ6XHRcdHN0cnVjdCBobGlzdF9ub2RlICpub2RlO1xuMjY3NTpcdFxuMjY3NjpcdFx0aWYgKHRibCkge1xuMjY3NzpcdFx0XHRoID0gKHRibC1cdTAwM2V0YjZfaWQgXHUwMDI2IChGSUI2X1RBQkxFX0hBU0hTWiAtIDEpKSAmIzQzOyAxO1xuMjY3ODpcdFx0XHRub2RlID0gcmN1X2RlcmVmZXJlbmNlKGhsaXN0X25leHRfcmN1KFx1MDAyNnRibC1cdTAwM2V0YjZfaGxpc3QpKTtcbjI2Nzk6XHRcdH0gZWxzZSB7XG4yNjgwOlx0XHRcdGggPSAwO1xuMjY4MTpcdFx0XHRub2RlID0gTlVMTDtcbjI2ODI6XHRcdH1cbjI2ODM6XHRcbjI2ODQ6XHRcdHdoaWxlICghbm9kZSBcdTAwMjZcdTAwMjYgaCBcdTAwM2MgRklCNl9UQUJMRV9IQVNIU1opIHtcbjI2ODU6XHRcdFx0bm9kZSA9IHJjdV9kZXJlZmVyZW5jZShcbjI2ODY6XHRcdFx0XHRobGlzdF9maXJzdF9yY3UoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliX3RhYmxlX2hhc2hbaCYjNDM7JiM0MztdKSk7XG4yNjg3Olx0XHR9XG4yNjg4Olx0XHRyZXR1cm4gaGxpc3RfZW50cnlfc2FmZShub2RlLCBzdHJ1Y3QgZmliNl90YWJsZSwgdGI2X2hsaXN0KTtcbjI2ODk6XHR9XG4yNjkwOlx0XG4yNjkxOlx0c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9jaGVja19zZXJudW0oc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcilcbjI2OTI6XHR7XG4yNjkzOlx0XHRpbnQgc2VybnVtID0gUkVBRF9PTkNFKGl0ZXItXHUwMDNldy5yb290LVx1MDAzZWZuX3Nlcm51bSk7XG4yNjk0Olx0XG4yNjk1Olx0XHRpZiAoaXRlci1cdTAwM2VzZXJudW0gIT0gc2VybnVtKSB7XG4yNjk2Olx0XHRcdGl0ZXItXHUwMDNlc2VybnVtID0gc2VybnVtO1xuMjY5NzpcdFx0XHRpdGVyLVx1MDAzZXcuc3RhdGUgPSBGV1NfSU5JVDtcbjI2OTg6XHRcdFx0aXRlci1cdTAwM2V3Lm5vZGUgPSBpdGVyLVx1MDAzZXcucm9vdDtcbjI2OTk6XHRcdFx0V0FSTl9PTihpdGVyLVx1MDAzZXcuc2tpcCk7XG4yNzAwOlx0XHRcdGl0ZXItXHUwMDNldy5za2lwID0gaXRlci1cdTAwM2V3LmNvdW50O1xuMjcwMTpcdFx0fVxuMjcwMjpcdH1cbjI3MDM6XHRcbjI3MDQ6XHRzdGF0aWMgdm9pZCAqaXB2Nl9yb3V0ZV9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpXG4yNzA1Olx0e1xuMjcwNjpcdFx0aW50IHI7XG4yNzA3Olx0XHRzdHJ1Y3QgZmliNl9pbmZvICpuO1xuMjcwODpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7XG4yNzA5Olx0XHRzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyID0gc2VxLVx1MDAzZXByaXZhdGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MDYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUHY2IFJvdXRlIFdhbGtlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgdHdvIGZ1bmN0aW9uczogYGZpYjZfd2Fsa2VyX3VubGlua2AgYW5kIGBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlYC4gU3BlY2lmaWNhbGx5LCBgbGlzdF9kZWwoJmFtcDt3LSZndDtsaClgIGJlY29tZXMgYGxpc3RfZGVsX2luaXQoJmFtcDt3LSZndDtsaClgIGFuZCB0aGUgcmV0dXJuIGNvbmRpdGlvbiBpbiBgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZWAgaXMgY2hhbmdlZCBmcm9tIGEgbm9kZS9zdGF0ZSBjaGVjayB0byBgIWxpc3RfZW1wdHkoJmFtcDt3LSZndDtsaClgLiBUaGUgY3JpdGljYWwgYXNwZWN0IGhlcmUgaXMgdGhlIHNoaWZ0IGZyb20gYW4gaW5kaXJlY3QgY2hlY2sgb2Ygd2Fsa2VyIHN0YXRlIHRvIGEgZGlyZWN0IGNoZWNrIG9mIGxpc3QgbWVtYmVyc2hpcC4KCldoeT8gV2VsbCwgaXQgbG9va3MgbGlrZSB0aGVyZSB3ZXJlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzLiBUaGUgYGlwdjZfcm91dGVfc2VxX3NldHVwX3dhbGtgIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSB3YWxrZXIgYW5kIGxpbmtzIGl0IHRvIGBuZXQtJmd0O2lwdjYuZmliNl93YWxrZXJzYC4gQ29udmVyc2VseSwgYGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wYCBjaGVja3MgaWYgdGhlIHdhbGtlciBpcyAmIzM0O2FjdGl2ZSYjMzQ7IHZpYSBhIGNoZWNrIG9uIGFuIHBvdGVudGlhbGx5IGZsYXdlZCBzdGF0ZSBjaGVjaywgYW5kIGlmIHNvLCB1bmxpbmtzIGl0LiBUaGUgcHJldmlvdXMgY29uZGl0aW9uIGZvciBhY3RpdmUtbmVzcyBpbiBgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZWAgd2FzIHN1c3BlY3QuIEl0IHdhcyB0cnlpbmcgdG8gaW5mZXIgbGlzdCBtZW1iZXJzaGlwIGJhc2VkIG9uIHRoZSB3YWxrZXImIzM5O3Mgbm9kZSBhbmQgc3RhdGUsIHdoaWNoIGNvdWxkIGJlY29tZSBvdXQgb2Ygc3luYywgb3IgYWxsb3cgZm9yIG11bHRpcGxlIGNhbGxzIHRvIGBzZXFfc3RvcGAsIGxlYWRpbmcgdG8gaXNzdWVzIGxpa2UgZG91YmxlIGBsaXN0X2RlbGAgY2FsbHMsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcywgb3IgbGlzdCBjb3JydXB0aW9uLCBvciBmYWlsaW5nIHRvIHJlbW92ZSB0aGUgd2Fsa2VyIGF0IGFsbCwgd2hpY2ggd291bGQgbGVhayB0aGUgd2Fsa2VyLiBUaGUgbmV3LCBtb3JlIGRpcmVjdCBhcHByb2FjaCB1c2luZyBgbGlzdF9kZWxfaW5pdGAgYW5kIGBsaXN0X2VtcHR5YCBhcHBlYXJzIHRvIGJlIGEgbXVjaCBjbGVhbmVyIHNvbHV0aW9uIHRvIGFjY3VyYXRlbHkgdHJhY2sgbGlzdCBtZW1iZXJzaGlwIGFuZCBwcmV2ZW50IHRob3NlIGxpc3QtcmVsYXRlZCBtZW1vcnkgaXNzdWVzLgoKTm93LCBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZSwgbGV0JiMzOTtzIHNlZSBpZiB0aGlzIGludHJvZHVjZXMgb3IgZWxpbWluYXRlcyBhbnkgdnVsbmVyYWJpbGl0aWVzLiBUaGUgY29kZSYjMzk7cyBpbml0aWFsaXphdGlvbiB2aWEgYG1lbXNldCgmYW1wO2l0ZXItJmd0O3csIDAsIHNpemVvZihpdGVyLSZndDt3KSlgIGFuZCBgSU5JVF9MSVNUX0hFQUQoJmFtcDtpdGVyLSZndDt3LmxoKWAgaXMgY2xlYXIsIGFuZCBgbGlzdF9kZWxfaW5pdGAgY29ycmVjdGx5IHJlaW5pdGlhbGl6ZXMgdGhlIGxpc3QgaGVhZC4gVGhlIGBsaXN0X2VtcHR5YCBjaGVjaywgd2hpY2ggZXhhbWluZXMgYHctJmd0O2xoLm5leHQgPT0gJmFtcDt3LSZndDtsaGAsIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlcmUmIzM5O3Mgbm8gb2J2aW91cyByZWFkaW5nIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIG5vIGRpcmVjdCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgZXZpZGVudC4gVGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBjbGVhciwgbGlzdC1yZWxhdGVkIGJ1Zy4gU3BlY2lmaWNhbGx5LCBsaXN0IGNvcnJ1cHRpb24sIGRvdWJsZSBsaXN0IGRlbGV0aW9uLCBvciBpbmFjY3VyYXRlIHRyYWNraW5nIG9mIHdhbGtlciBsaXN0IG1lbWJlcnNoaXAuIEl0IGRlYWxzIHdpdGggbGlzdCBtYW5pcHVsYXRpb24sIGFuZCBhbnkgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHNob3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgbGlzdCBoYXJkZW5pbmcsIEtBU0FOLCBvciBgQ09ORklHX0RFQlVHX0xJU1RgLiBJJiMzOTtkIHdhbnQgdG8gY2hlY2sgaWYgYW55IG90aGVyIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIGB3LSZndDtsaGAgb3IgdGhlIGBmaWI2X3dhbGtlcmAgc3RydWN0LCBidXQgdGhpcyBpcyBhIHNvbGlkIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWI2X3dhbGtlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZmliLmM9NDI9c3RydWN0IGZpYjZfY2xlYW5lciB7XG5uZXQvaXB2Ni9pcDZfZmliLmM6NDM6XHRzdHJ1Y3QgZmliNl93YWxrZXIgdztcbm5ldC9pcHY2L2lwNl9maWIuYy00NC1cdHN0cnVjdCBuZXQgKm5ldDtcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9NjA9c3RhdGljIHN0cnVjdCBmaWI2X25vZGUgKmZpYjZfcmVwYWlyX3RyZWUoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy02Mi1cdFx0XHRcdFx0ICBzdHJ1Y3QgZmliNl9ub2RlICpmbik7XG5uZXQvaXB2Ni9pcDZfZmliLmM6NjM6c3RhdGljIGludCBmaWI2X3dhbGsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpO1xubmV0L2lwdjYvaXA2X2ZpYi5jOjY0OnN0YXRpYyBpbnQgZmliNl93YWxrX2NvbnRpbnVlKHN0cnVjdCBmaWI2X3dhbGtlciAqdyk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtNjUtXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTczPXN0YXRpYyB2b2lkIGZpYjZfZ2NfdGltZXJfY2Ioc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy03NS0jZGVmaW5lIEZPUl9XQUxLRVJTKG5ldCwgdykgXFxcbm5ldC9pcHY2L2lwNl9maWIuYzo3NjpcdGxpc3RfZm9yX2VhY2hfZW50cnkodywgXHUwMDI2KG5ldCktXHUwMDNlaXB2Ni5maWI2X3dhbGtlcnMsIGxoKVxubmV0L2lwdjYvaXA2X2ZpYi5jLTc3LVxubmV0L2lwdjYvaXA2X2ZpYi5jOjc4OnN0YXRpYyB2b2lkIGZpYjZfd2Fsa2VyX2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG5uZXQvaXB2Ni9pcDZfZmliLmMtNzkte1xubmV0L2lwdjYvaXA2X2ZpYi5jOjgwOlx0d3JpdGVfbG9ja19iaChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcbm5ldC9pcHY2L2lwNl9maWIuYzo4MTpcdGxpc3RfYWRkKFx1MDAyNnctXHUwMDNlbGgsIFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYjZfd2Fsa2Vycyk7XG5uZXQvaXB2Ni9pcDZfZmliLmM6ODI6XHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtODMtfVxubmV0L2lwdjYvaXA2X2ZpYi5jLTg0LVxubmV0L2lwdjYvaXA2X2ZpYi5jOjg1OnN0YXRpYyB2b2lkIGZpYjZfd2Fsa2VyX3VubGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X3dhbGtlciAqdylcbm5ldC9pcHY2L2lwNl9maWIuYy04Ni17XG5uZXQvaXB2Ni9pcDZfZmliLmM6ODc6XHR3cml0ZV9sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTg4LVx0bGlzdF9kZWxfaW5pdChcdTAwMjZ3LVx1MDAzZWxoKTtcbm5ldC9pcHY2L2lwNl9maWIuYzo4OTpcdHdyaXRlX3VubG9ja19iaChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcbm5ldC9pcHY2L2lwNl9maWIuYy05MC19XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTQ0OD1zdGF0aWMgaW50IGZpYjZfcnRfZHVtcChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfZHVtcF9hcmcgKmFyZylcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtNDY5LVxubmV0L2lwdjYvaXA2X2ZpYi5jOjQ3MDpzdGF0aWMgaW50IGZpYjZfbm9kZV9kdW1wKHN0cnVjdCBmaWI2X3dhbGtlciAqdylcbm5ldC9pcHY2L2lwNl9maWIuYy00NzEte1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz00Nzk9c3RhdGljIGludCBmaWI2X3RhYmxlX2R1bXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl90YWJsZSAqdGIsXG5uZXQvaXB2Ni9pcDZfZmliLmM6NDgwOlx0XHRcdCAgIHN0cnVjdCBmaWI2X3dhbGtlciAqdylcbm5ldC9pcHY2L2lwNl9maWIuYy00ODEte1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz00OTI9aW50IGZpYjZfdGFibGVzX2R1bXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy00OTUtXHRzdHJ1Y3QgZmliNl9kdW1wX2FyZyBhcmc7XG5uZXQvaXB2Ni9pcDZfZmliLmM6NDk2Olx0c3RydWN0IGZpYjZfd2Fsa2VyICp3O1xubmV0L2lwdjYvaXA2X2ZpYi5jLTQ5Ny1cdHVuc2lnbmVkIGludCBoO1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy01MjctXG5uZXQvaXB2Ni9pcDZfZmliLmM6NTI4OnN0YXRpYyBpbnQgZmliNl9kdW1wX25vZGUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxubmV0L2lwdjYvaXA2X2ZpYi5jLTUyOS17XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTUzMi1cbm5ldC9pcHY2L2lwNl9maWIuYzo1MzM6XHRmb3JfZWFjaF9maWI2X3dhbGtlcl9ydCh3KSB7XG5uZXQvaXB2Ni9pcDZfZmliLmMtNTM0LVx0XHRyZXMgPSBydDZfZHVtcF9yb3V0ZShydCwgdy1cdTAwM2VhcmdzLCB3LVx1MDAzZXNraXBfaW5fbm9kZSk7XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTU2Mj1zdGF0aWMgdm9pZCBmaWI2X2R1bXBfZW5kKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtNTY0LVx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoY2ItXHUwMDNlc2tiLVx1MDAzZXNrKTtcbm5ldC9pcHY2L2lwNl9maWIuYzo1NjU6XHRzdHJ1Y3QgZmliNl93YWxrZXIgKncgPSAodm9pZCAqKWNiLVx1MDAzZWFyZ3NbMl07XG5uZXQvaXB2Ni9pcDZfZmliLmMtNTY2LVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy01NjktXHRcdFx0Y2ItXHUwMDNlYXJnc1s0XSA9IDA7XG5uZXQvaXB2Ni9pcDZfZmliLmM6NTcwOlx0XHRcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIHcpO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTU3MS1cdFx0fVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz01ODU9c3RhdGljIGludCBmaWI2X2R1bXBfdGFibGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy01ODgtXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xubmV0L2lwdjYvaXA2X2ZpYi5jOjU4OTpcdHN0cnVjdCBmaWI2X3dhbGtlciAqdztcbm5ldC9pcHY2L2lwNl9maWIuYy01OTAtXHRpbnQgcmVzO1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy02MjItXHRcdGlmIChyZXMgXHUwMDNjPSAwKSB7XG5uZXQvaXB2Ni9pcDZfZmliLmM6NjIzOlx0XHRcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIHcpO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTYyNC1cdFx0XHRjYi1cdTAwM2VhcmdzWzRdID0gMDtcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9NjMxPXN0YXRpYyBpbnQgaW5ldDZfZHVtcF9maWIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy02MzktXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDtcbm5ldC9pcHY2L2lwNl9maWIuYzo2NDA6XHRzdHJ1Y3QgZmliNl93YWxrZXIgKnc7XG5uZXQvaXB2Ni9pcDZfZmliLmMtNjQxLVx0c3RydWN0IGZpYjZfdGFibGUgKnRiO1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0xODQxPXN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICpmaWI2X3JlcGFpcl90cmVlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMTg0Ny1cdHN0cnVjdCBmaWI2X25vZGUgKmNoaWxkO1xubmV0L2lwdjYvaXA2X2ZpYi5jOjE4NDg6XHRzdHJ1Y3QgZmliNl93YWxrZXIgKnc7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMTg0OS1cdGludCBpdGVyID0gMDtcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMTkzMi1cbm5ldC9pcHY2L2lwNl9maWIuYzoxOTMzOlx0XHRyZWFkX2xvY2soXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMTkzNC1cdFx0Rk9SX1dBTEtFUlMobmV0LCB3KSB7XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTE5NTYtXHRcdH1cbm5ldC9pcHY2L2lwNl9maWIuYzoxOTU3Olx0XHRyZWFkX3VubG9jayhcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcbm5ldC9pcHY2L2lwNl9maWIuYy0xOTU4LVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0xOTY5PXN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTE5NzMtXHRzdHJ1Y3QgZmliNl9pbmZvICpsZWFmLCAqcmVwbGFjZV9ydCA9IE5VTEw7XG5uZXQvaXB2Ni9pcDZfZmliLmM6MTk3NDpcdHN0cnVjdCBmaWI2X3dhbGtlciAqdztcbm5ldC9pcHY2L2lwNl9maWIuYy0xOTc1LVx0c3RydWN0IGZpYjZfaW5mbyAqcnQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKCpydHAsXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwMjUtXHQvKiBBZGp1c3Qgd2Fsa2VycyAqL1xubmV0L2lwdjYvaXA2X2ZpYi5jOjIwMjY6XHRyZWFkX2xvY2soXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjAyNy1cdEZPUl9XQUxLRVJTKG5ldCwgdykge1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yMDM1LVx0fVxubmV0L2lwdjYvaXA2X2ZpYi5jOjIwMzY6XHRyZWFkX3VubG9jayhcdTAwMjZuZXQtXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yMDM3LVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yMDY2PWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTIxMjktXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjEzMDpzdGF0aWMgaW50IGZpYjZfd2Fsa19jb250aW51ZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjEzMS17XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTIyMTktXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjIyMDpzdGF0aWMgaW50IGZpYjZfd2FsayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X3dhbGtlciAqdylcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjIxLXtcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjIyNi1cbm5ldC9pcHY2L2lwNl9maWIuYzoyMjI3Olx0ZmliNl93YWxrZXJfbGluayhuZXQsIHcpO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTIyMjgtXHRyZXMgPSBmaWI2X3dhbGtfY29udGludWUodyk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjIyOS1cdGlmIChyZXMgXHUwMDNjPSAwKVxubmV0L2lwdjYvaXA2X2ZpYi5jOjIyMzA6XHRcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIHcpO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTIyMzEtXHRyZXR1cm4gcmVzO1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yMjMzLVxubmV0L2lwdjYvaXA2X2ZpYi5jOjIyMzQ6c3RhdGljIGludCBmaWI2X2NsZWFuX25vZGUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxubmV0L2lwdjYvaXA2X2ZpYi5jLTIyMzUte1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yMjUzLVxubmV0L2lwdjYvaXA2X2ZpYi5jOjIyNTQ6XHRmb3JfZWFjaF9maWI2X3dhbGtlcl9ydCh3KSB7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjI1NS1cdFx0cmVzID0gYy1cdTAwM2VmdW5jKHJ0LCBjLVx1MDAzZWFyZyk7XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTI0NjQ9c3RhdGljIGludCBfX25ldF9pbml0IGZpYjZfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yNDc3LVx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl9nY19sb2NrKTtcbm5ldC9pcHY2L2lwNl9maWIuYzoyNDc4Olx0cndsb2NrX2luaXQoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XG5uZXQvaXB2Ni9pcDZfZmliLmM6MjQ3OTpcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYjZfd2Fsa2Vycyk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQ4MC1cdHRpbWVyX3NldHVwKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmlwNl9maWJfdGltZXIsIGZpYjZfZ2NfdGltZXJfY2IsIDApO1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yNjA0PXN0YXRpYyBpbnQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI2MzYtXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjYzNzpzdGF0aWMgaW50IGlwdjZfcm91dGVfeWllbGQoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI2Mzgte1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yNjU2PXN0YXRpYyB2b2lkIGlwdjZfcm91dGVfc2VxX3NldHVwX3dhbGsoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcixcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjY2Ni1cdElOSVRfTElTVF9IRUFEKFx1MDAyNml0ZXItXHUwMDNldy5saCk7XG5uZXQvaXB2Ni9pcDZfZmliLmM6MjY2NzpcdGZpYjZfd2Fsa2VyX2xpbmsobmV0LCBcdTAwMjZpdGVyLVx1MDAzZXcpO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTI2NjgtfVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yNzA0PXN0YXRpYyB2b2lkICppcHY2X3JvdXRlX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjcyNi1cdH0gZWxzZSBpZiAociBcdTAwM2MgMCkge1xubmV0L2lwdjYvaXA2X2ZpYi5jOjI3Mjc6XHRcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIFx1MDAyNml0ZXItXHUwMDNldyk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjcyOC1cdFx0cmV0dXJuIE5VTEw7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjcyOS1cdH1cbm5ldC9pcHY2L2lwNl9maWIuYzoyNzMwOlx0ZmliNl93YWxrZXJfdW5saW5rKG5ldCwgXHUwMDI2aXRlci1cdTAwM2V3KTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yNzMxLVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yNzYwPXN0YXRpYyBib29sIGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcilcbm5ldC9pcHY2L2lwNl9maWIuYy0yNzYxLXtcbm5ldC9pcHY2L2lwNl9maWIuYzoyNzYyOlx0c3RydWN0IGZpYjZfd2Fsa2VyICp3ID0gXHUwMDI2aXRlci1cdTAwM2V3O1xubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NjMtXHRyZXR1cm4gdy1cdTAwM2Vub2RlIFx1MDAyNlx1MDAyNiAhbGlzdF9lbXB0eShcdTAwMjZ3LVx1MDAzZWxoKTtcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmM9Mjc2Nj1zdGF0aWMgdm9pZCBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc3Mi1cdGlmIChpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKGl0ZXIpKVxubmV0L2lwdjYvaXA2X2ZpYi5jOjI3NzM6XHRcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIFx1MDAyNml0ZXItXHUwMDNldyk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc3NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NTQKCQkJCQkJCW91dHB1dDogMTc4CgkJCQkJCQl0aG91Z2h0czogMjYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtNU0FOIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgY2FyZWZ1bGx5IGdvIHRocm91Z2ggdGhpcyBhbmQgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UmIzM5O3JlIG5vdCBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIHdpdGggdGhpcyBwYXRjaC4gRmlyc3QsIGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBhcmUgd2UgcG90ZW50aWFsbHkgbGVha2luZyBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlPyBObywgbm90aGluZyBpbiB0aGlzIGNoYW5nZSB0b3VjaGVzIHRoYXQgYXJlYS4gR29vZC4gTmV4dCwgYXJlIHdlIGJyYW5jaGluZyBvbiBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IExvb2tzIGxpa2UgdGhlIGB3LSZndDtsaGAgbGlzdCBoZWFkIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGluIGVpdGhlciBgaXB2Nl9yb3V0ZV9zZXFfc2V0dXBfd2Fsa2Agb3IgYGZpYjZfbmV0X2luaXRgLCBhbmQgdGhlbiByZWluaXRpYWxpemVkIHdpdGggYGxpc3RfZGVsX2luaXRgLCBzbyB0aGF0IHNlZW1zIHNhZmUuIE1vdmluZyBvbiwgYXJlIHdlIGludHJvZHVjaW5nIGFueSBuZXcgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMgdGhhdCBtaWdodCBiZSBwcm9ibGVtYXRpYz8gTm9wZSwgbm90aGluZyBuZXcgdGhlcmUuIEZpbmFsbHksIGFueSBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3Rocz8gTm8uCgpUaGUgcm9vdCBvZiB0aGlzIHBhdGNoIGlzIHJlYWxseSBhYm91dCBmaXhpbmcgYSBidWcgaW4gdGhlIHdhbGtlciBsaXN0IHRyYWNraW5nLCBzcGVjaWZpY2FsbHkgaW4gaG93IGBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlYCBkZXRlcm1pbmVzIHdoZW4gdG8gY2FsbCBgZmliNl93YWxrZXJfdW5saW5rYCBkdXJpbmcgYHNlcV9zdG9wYC4gVGhlIGtleSBmaXggaXMgbWFraW5nIHN1cmUgYGxpc3RfZGVsX2luaXRgIGlzIHVzZWQsIHNvIHdlIGNhbiByZWxpYWJseSBjaGVjayBpZiB0aGUgd2Fsa2VyIGlzIHN0aWxsIGxpbmtlZCB1c2luZyBgbGlzdF9lbXB0eSgmYW1wO3ctJmd0O2xoKWAuIEVzc2VudGlhbGx5LCB0aGUgY2hhbmdlIHByb3ZpZGVzIGEgY2xlYW5lciB3YXkgdG8gaGFuZGxlIHRoZSBpdGVyYXRvciBzdG9wcGluZyBwb2ludC4gTm93LCB0aGUgcGF0Y2ggKmRvZXMqIHRvdWNoIGxpbmtlZCBsaXN0cywgYnV0IGFueSBjb21tb24gbGlua2VkIGxpc3QgaXNzdWVzIGxpa2UgZG91YmxlIHVubGlua2luZywgbGlzdCBjb3JydXB0aW9uLCBvciBVc2UtQWZ0ZXItRnJlZSBzaXR1YXRpb25zIHNob3VsZCBiZSBmbGFnZ2VkIGJ5IEtBU0FOIG9yIHRoZSBsaXN0IGRlYnVnZ2luZyBmZWF0dXJlcywgbm90IEtNU0FOLiBTbywgaW4gdGVybXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgYW55IHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcywgdGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgbmV3IHJpc2tzLgoKR2l2ZW4gYWxsIG9mIHRoYXQsIEkgY2FuIGNvbmZpZGVudGx5IHNheSB0aGF0IGBOZWVkc0tNU0FOID0gZmFsc2VgLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgbGlzdF9kZWwgd2l0aCBsaXN0X2RlbF9pbml0IGluIGZpYjZfd2Fsa2VyX3VubGluaygpIGFuZCB1cGRhdGVzIGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoKSB0byBjaGVjayBsaXN0X2VtcHR5KFx1MDAyNnctXHUwMDNlbGgpIGluc3RlYWQgb2YgaW5zcGVjdGluZyB3YWxrZXIgc3RhdGUgYW5kIG5vZGUgcG9pbnRlcnMuIFRoaXMgY2hhbmdlIGZpeGVzIGxpc3QgdHJhY2tpbmcgYW5kIGF2b2lkcyBkb3VibGUgbGlzdCBkZWxldGlvbiAvIGxpc3QgY29ycnVwdGlvbiB3aGVuIHN0b3BwaW5nIHRoZSBJUHY2IHJvdXRlIHNlcSBpdGVyYXRpb24uIEFsbCByZWxldmFudCBsaXN0IHN0cnVjdHVyZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkICh2aWEgSU5JVF9MSVNUX0hFQUQgLyBsaXN0X2RlbF9pbml0IC8gbWVtc2V0KSBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayByaXNrcyBhcmUgaW50cm9kdWNlZC4gU3RhbmRhcmQgZGV0ZWN0b3JzIChLQVNBTiAvIENPTkZJR19ERUJVR19MSVNUKSBjb3ZlciBsaXN0IG1hbmlwdWxhdGlvbiBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gcmlza3MgaW4gdGhpcyBhcmVhLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGxpc3RfZGVsIHdpdGggbGlzdF9kZWxfaW5pdCBpbiBmaWI2X3dhbGtlcl91bmxpbmsoKSBhbmQgdXBkYXRlcyBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKCkgdG8gY2hlY2sgbGlzdF9lbXB0eShcdTAwMjZ3LVx1MDAzZWxoKSBpbnN0ZWFkIG9mIGluc3BlY3Rpbmcgd2Fsa2VyIHN0YXRlIGFuZCBub2RlIHBvaW50ZXJzLiBUaGlzIGNoYW5nZSBmaXhlcyBsaXN0IHRyYWNraW5nIGFuZCBhdm9pZHMgZG91YmxlIGxpc3QgZGVsZXRpb24gLyBsaXN0IGNvcnJ1cHRpb24gd2hlbiBzdG9wcGluZyB0aGUgSVB2NiByb3V0ZSBzZXEgaXRlcmF0aW9uLiBBbGwgcmVsZXZhbnQgbGlzdCBzdHJ1Y3R1cmVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCAodmlhIElOSVRfTElTVF9IRUFEIC8gbGlzdF9kZWxfaW5pdCAvIG1lbXNldCkgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgcmlza3MgYXJlIGludHJvZHVjZWQuIFN0YW5kYXJkIGRldGVjdG9ycyAoS0FTQU4gLyBDT05GSUdfREVCVUdfTElTVCkgY292ZXIgbGlzdCBtYW5pcHVsYXRpb24gYW5kIG1lbW9yeSBjb3JydXB0aW9uIHJpc2tzIGluIHRoaXMgYXJlYSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjE3OjU2LjMwOTg4MTUyMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTkwOTcxMjY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJQUk9DX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmliNl93YWxrZXJfdW5saW5rXCIsXG4gICAgXCJpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlXCIsXG4gICAgXCJpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcFwiLFxuICAgIFwiaXB2Nl9yb3V0ZV9zZXFfc3RvcFwiLFxuICAgIFwiaXB2Nl9yb3V0ZV9zZXFfc3RhcnRcIixcbiAgICBcImlwdjZfcm91dGVfc2VxX25leHRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGxpc3RfZGVsIHdpdGggbGlzdF9kZWxfaW5pdCBpbiBmaWI2X3dhbGtlcl91bmxpbmsoKSBhbmQgdXBkYXRlcyBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKCkgdG8gY2hlY2sgbGlzdF9lbXB0eShcXHUwMDI2dy1cXHUwMDNlbGgpIGluc3RlYWQgb2YgaW5zcGVjdGluZyB3YWxrZXIgc3RhdGUgYW5kIG5vZGUgcG9pbnRlcnMuIFRoaXMgY2hhbmdlIGZpeGVzIGxpc3QgdHJhY2tpbmcgYW5kIGF2b2lkcyBkb3VibGUgbGlzdCBkZWxldGlvbiAvIGxpc3QgY29ycnVwdGlvbiB3aGVuIHN0b3BwaW5nIHRoZSBJUHY2IHJvdXRlIHNlcSBpdGVyYXRpb24uIEFsbCByZWxldmFudCBsaXN0IHN0cnVjdHVyZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkICh2aWEgSU5JVF9MSVNUX0hFQUQgLyBsaXN0X2RlbF9pbml0IC8gbWVtc2V0KSBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayByaXNrcyBhcmUgaW50cm9kdWNlZC4gU3RhbmRhcmQgZGV0ZWN0b3JzIChLQVNBTiAvIENPTkZJR19ERUJVR19MSVNUKSBjb3ZlciBsaXN0IG1hbmlwdWxhdGlvbiBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gcmlza3MgaW4gdGhpcyBhcmVhLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJUHY2IEZJQiB3YWxrZXIgbWFuYWdlbWVudCBhbmQgaXRlcmF0aW9uIHN0YXRlIGNoZWNraW5nIGluIG5ldC9pcHY2L2lwNl9maWIuYyAodXNpbmcgbGlzdF9kZWxfaW5pdCBvbiB1bmxpbmtpbmcgYW5kIGNoZWNraW5nICFsaXN0X2VtcHR5IGZvciBhY3RpdmUgaXRlcmF0b3Igc3RhdGUpLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSAvcHJvYy9uZXQvaXB2Nl9yb3V0ZSBzZXFfZmlsZSBvcGVyYXRpb25zIGFuZCBCUEYgSVB2NiByb3V0ZSBpdGVyYXRvcnMgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxNzo1Ni4zMDk4ODczODJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTAzMjIyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDVjNDY0YzAyZGJmMDc4ZjU4OTliNzg0MmM5OGIwNGEzZGE4NDcxZDRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAwODoxNzo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmNcXG5pbmRleCAzZTM4MmJhMTU3M2UzLi45ZWE3NTcwM2IzOGQ0IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNl9maWIuY1xcbisrKyBiL25ldC9pcHY2L2lwNl9maWIuY1xcbkBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyB2b2lkIGZpYjZfd2Fsa2VyX2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpXFxuIHN0YXRpYyB2b2lkIGZpYjZfd2Fsa2VyX3VubGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X3dhbGtlciAqdylcXG4ge1xcbiBcXHR3cml0ZV9sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XFxuLVxcdGxpc3RfZGVsKFxcdTAwMjZ3LVxcdTAwM2VsaCk7XFxuK1xcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnctXFx1MDAzZWxoKTtcXG4gXFx0d3JpdGVfdW5sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XFxuIH1cXG4gXFxuQEAgLTI3NjAsNyArMjc2MCw3IEBAIHN0YXRpYyB2b2lkICppcHY2X3JvdXRlX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxuIHN0YXRpYyBib29sIGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcilcXG4ge1xcbiBcXHRzdHJ1Y3QgZmliNl93YWxrZXIgKncgPSBcXHUwMDI2aXRlci1cXHUwMDNldztcXG4tXFx0cmV0dXJuIHctXFx1MDAzZW5vZGUgXFx1MDAyNlxcdTAwMjYgISh3LVxcdTAwM2VzdGF0ZSA9PSBGV1NfVSBcXHUwMDI2XFx1MDAyNiB3LVxcdTAwM2Vub2RlID09IHctXFx1MDAzZXJvb3QpO1xcbitcXHRyZXR1cm4gdy1cXHUwMDNlbm9kZSBcXHUwMDI2XFx1MDAyNiAhbGlzdF9lbXB0eShcXHUwMDI2dy1cXHUwMDNlbGgpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTc6NTYuOTIxNjEyODUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo5MDg2NjA3MDA2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJQUk9DX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmliNl93YWxrZXJfdW5saW5rXCIsXG4gICAgXCJpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlXCIsXG4gICAgXCJpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcFwiLFxuICAgIFwiaXB2Nl9yb3V0ZV9zZXFfc3RvcFwiLFxuICAgIFwiaXB2Nl9yb3V0ZV9zZXFfc3RhcnRcIixcbiAgICBcImlwdjZfcm91dGVfc2VxX25leHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJUHY2IEZJQiB3YWxrZXIgbWFuYWdlbWVudCBhbmQgaXRlcmF0aW9uIHN0YXRlIGNoZWNraW5nIGluIG5ldC9pcHY2L2lwNl9maWIuYyAodXNpbmcgbGlzdF9kZWxfaW5pdCBvbiB1bmxpbmtpbmcgYW5kIGNoZWNraW5nICFsaXN0X2VtcHR5IGZvciBhY3RpdmUgaXRlcmF0b3Igc3RhdGUpLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSAvcHJvYy9uZXQvaXB2Nl9yb3V0ZSBzZXFfZmlsZSBvcGVyYXRpb25zIGFuZCBCUEYgSVB2NiByb3V0ZSBpdGVyYXRvcnMgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVjNDY0YzAyZGJmMDc4ZjU4OTliNzg0MmM5OGIwNGEzZGE4NDcxZDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDA4OjE3OjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2ZpYi5jIGIvbmV0L2lwdjYvaXA2X2ZpYi5jXG5pbmRleCAzZTM4MmJhMTU3M2UzLi45ZWE3NTcwM2IzOGQ0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X2ZpYi5jXG4rKysgYi9uZXQvaXB2Ni9pcDZfZmliLmNcbkBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyB2b2lkIGZpYjZfd2Fsa2VyX2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4gc3RhdGljIHZvaWQgZmliNl93YWxrZXJfdW5saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxuIHtcbiBcdHdyaXRlX2xvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XG4tXHRsaXN0X2RlbChcdTAwMjZ3LVx1MDAzZWxoKTtcbitcdGxpc3RfZGVsX2luaXQoXHUwMDI2dy1cdTAwM2VsaCk7XG4gXHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XG4gfVxuIFxuQEAgLTI3NjAsNyArMjc2MCw3IEBAIHN0YXRpYyB2b2lkICppcHY2X3JvdXRlX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXG4gc3RhdGljIGJvb2wgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZShzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyKVxuIHtcbiBcdHN0cnVjdCBmaWI2X3dhbGtlciAqdyA9IFx1MDAyNml0ZXItXHUwMDNldztcbi1cdHJldHVybiB3LVx1MDAzZW5vZGUgXHUwMDI2XHUwMDI2ICEody1cdTAwM2VzdGF0ZSA9PSBGV1NfVSBcdTAwMjZcdTAwMjYgdy1cdTAwM2Vub2RlID09IHctXHUwMDNlcm9vdCk7XG4rXHRyZXR1cm4gdy1cdTAwM2Vub2RlIFx1MDAyNlx1MDAyNiAhbGlzdF9lbXB0eShcdTAwMjZ3LVx1MDAzZWxoKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxNzo1Ni45MjE2MTQzMTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzY5Nzc0MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy5cblxuKipBbmFseXppbmcgdGhpcyBLZXJuZWwgUGF0Y2gqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIG5hdHVyYWxseSwgdGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyBkaXZlIGludG8gdGhlIGNvZGUuIE15IGluaXRpYWwgc3RlcCB3aWxsIGJlIHRvIGV4YW1pbmUgYG5ldC9pcHY2L2lwNl9maWIuY2Ag4oCTIHRoYXQncyB3aGVyZSB0aGUgY29yZSBjaGFuZ2VzIHNlZW0gdG8gYmUuIEkgd2FudCB0byBzZWUgdGhpcyBwYXRjaCBpbiBpdHMgcHJvcGVyIGNvbnRleHQuIEknbSBnb2luZyB0byB1c2UgbXkgdHlwaWNhbCBkZWJ1Z2dpbmcgdG9vbHMsIGxpa2VseSBhIGNvbWJpbmF0aW9uIG9mIGBnaXQgYmxhbWVgLCBgZ3JlcGAgYW5kIGEgZ29vZCBJREUgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZSwgdW5kZXJzdGFuZCB0aGUgaGlzdG9yeSwgYW5kIGRldGVybWluZSB3aHkgdGhlc2UgcGFydGljdWxhciBsaW5lcyB3ZXJlIHRvdWNoZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBvZiB0aGlzIHNlY3Rpb24gb2YgdGhlIGNvZGUsIGhvdyB0aGUgY2hhbmdlcyBmaXQgaW50byB0aGUgZXhpc3RpbmcgYXJjaGl0ZWN0dXJlLCBhbmQgd2hhdCB0aGVpciBpbnRlbmRlZCBlZmZlY3QgaXMuIEknbGwgZm9jdXMgb24gdGhlIGFyZWEgYXJvdW5kIHRoZSBtb2RpZmllZCBsaW5lcywgdGFraW5nIGluIGFzIG11Y2ggY29udGV4dCBhcyBJIGNhbi4gVGhpcyBpcyB0aGUgZm91bmRhdGlvbiB1cG9uIHdoaWNoIEknbGwgYnVpbGQgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNDMsIk91dHB1dFRva2VucyI6NzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjE4OjAyLjI5MTM5MjE0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9pcDZfZmliLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzA6XFx0ICpcXHRyZXN1bHQgb2YgcmVkaXJlY3RzLCBwYXRoIE1UVSBjaGFuZ2VzLCBldGMuXFxuICA3MTpcXHQgKi9cXG4gIDcyOlxcdFxcbiAgNzM6XFx0c3RhdGljIHZvaWQgZmliNl9nY190aW1lcl9jYihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XFxuICA3NDpcXHRcXG4gIDc1OlxcdCNkZWZpbmUgRk9SX1dBTEtFUlMobmV0LCB3KSBcXFxcXFxuICA3NjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsIFxcdTAwMjYobmV0KS1cXHUwMDNlaXB2Ni5maWI2X3dhbGtlcnMsIGxoKVxcbiAgNzc6XFx0XFxuICA3ODpcXHRzdGF0aWMgdm9pZCBmaWI2X3dhbGtlcl9saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbiAgNzk6XFx0e1xcbiAgODA6XFx0XFx0d3JpdGVfbG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xcbiAgODE6XFx0XFx0bGlzdF9hZGQoXFx1MDAyNnctXFx1MDAzZWxoLCBcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2Vycyk7XFxuICA4MjpcXHRcXHR3cml0ZV91bmxvY2tfYmgoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcXG4gIDgzOlxcdH1cXG4gIDg0OlxcdFxcbiAgODU6XFx0c3RhdGljIHZvaWQgZmliNl93YWxrZXJfdW5saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbiAgODY6XFx0e1xcbiAgODc6XFx0XFx0d3JpdGVfbG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xcbiAgODg6XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2dy1cXHUwMDNlbGgpO1xcbiAgODk6XFx0XFx0d3JpdGVfdW5sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XFxuICA5MDpcXHR9XFxuICA5MTpcXHRcXG4gIDkyOlxcdHN0YXRpYyBpbnQgZmliNl9uZXdfc2VybnVtKHN0cnVjdCBuZXQgKm5ldClcXG4gIDkzOlxcdHtcXG4gIDk0OlxcdFxcdGludCBuZXcsIG9sZCA9IGF0b21pY19yZWFkKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl9zZXJudW0pO1xcbiAgOTU6XFx0XFxuICA5NjpcXHRcXHRkbyB7XFxuICA5NzpcXHRcXHRcXHRuZXcgPSBvbGQgXFx1MDAzYyBJTlRfTUFYID8gb2xkICsgMSA6IDE7XFxuICA5ODpcXHRcXHR9IHdoaWxlICghYXRvbWljX3RyeV9jbXB4Y2hnKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl9zZXJudW0sIFxcdTAwMjZvbGQsIG5ldykpO1xcbiAgOTk6XFx0XFxuIDEwMDpcXHRcXHRyZXR1cm4gbmV3O1xcbiAxMDE6XFx0fVxcbiAxMDI6XFx0XFxuIDEwMzpcXHRlbnVtIHtcXG4gMTA0OlxcdFxcdEZJQjZfTk9fU0VSTlVNX0NIQU5HRSA9IDAsXFxuIDEwNTpcXHR9O1xcbiAxMDY6XFx0XFxuIDEwNzpcXHR2b2lkIGZpYjZfdXBkYXRlX3Nlcm51bShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSlcXG4gMTA4OlxcdHtcXG4gMTA5OlxcdFxcdHN0cnVjdCBmaWI2X25vZGUgKmZuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxODowMi4yOTE1MjMzMDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9pcDZfZmliLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjc1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjc1MDpcXHRcXHRpZiAoaXRlci1cXHUwMDNldGJsKSB7XFxuMjc1MTpcXHRcXHRcXHRsb2ZmX3QgcCA9IDA7XFxuMjc1MjpcXHRcXG4yNzUzOlxcdFxcdFxcdGlwdjZfcm91dGVfc2VxX3NldHVwX3dhbGsoaXRlciwgbmV0KTtcXG4yNzU0OlxcdFxcdFxcdHJldHVybiBpcHY2X3JvdXRlX3NlcV9uZXh0KHNlcSwgTlVMTCwgXFx1MDAyNnApO1xcbjI3NTU6XFx0XFx0fSBlbHNlIHtcXG4yNzU2OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjI3NTc6XFx0XFx0fVxcbjI3NTg6XFx0fVxcbjI3NTk6XFx0XFxuMjc2MDpcXHRzdGF0aWMgYm9vbCBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIpXFxuMjc2MTpcXHR7XFxuMjc2MjpcXHRcXHRzdHJ1Y3QgZmliNl93YWxrZXIgKncgPSBcXHUwMDI2aXRlci1cXHUwMDNldztcXG4yNzYzOlxcdFxcdHJldHVybiB3LVxcdTAwM2Vub2RlIFxcdTAwMjZcXHUwMDI2ICFsaXN0X2VtcHR5KFxcdTAwMjZ3LVxcdTAwM2VsaCk7XFxuMjc2NDpcXHR9XFxuMjc2NTpcXHRcXG4yNzY2OlxcdHN0YXRpYyB2b2lkIGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbjI3Njc6XFx0XFx0X19yZWxlYXNlcyhSQ1UpXFxuMjc2ODpcXHR7XFxuMjc2OTpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTtcXG4yNzcwOlxcdFxcdHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIgPSBzZXEtXFx1MDAzZXByaXZhdGU7XFxuMjc3MTpcXHRcXG4yNzcyOlxcdFxcdGlmIChpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKGl0ZXIpKVxcbjI3NzM6XFx0XFx0XFx0ZmliNl93YWxrZXJfdW5saW5rKG5ldCwgXFx1MDAyNml0ZXItXFx1MDAzZXcpO1xcbjI3NzQ6XFx0XFxuMjc3NTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yNzc2OlxcdH1cXG4yNzc3OlxcdFxcbjI3Nzg6XFx0I2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxcbjI3Nzk6XFx0c3RhdGljIGludCBpcHY2X3JvdXRlX3Byb2dfc2VxX3Nob3coc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbjI3ODA6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfaXRlcl9tZXRhICptZXRhLFxcbjI3ODE6XFx0XFx0XFx0XFx0XFx0ICAgIHZvaWQgKnYpXFxuMjc4MjpcXHR7XFxuMjc4MzpcXHRcXHRzdHJ1Y3QgYnBmX2l0ZXJfX2lwdjZfcm91dGUgY3R4O1xcbjI3ODQ6XFx0XFxuMjc4NTpcXHRcXHRjdHgubWV0YSA9IG1ldGE7XFxuMjc4NjpcXHRcXHRjdHgucnQgPSB2O1xcbjI3ODc6XFx0XFx0cmV0dXJuIGJwZl9pdGVyX3J1bl9wcm9nKHByb2csIFxcdTAwMjZjdHgpO1xcbjI3ODg6XFx0fVxcbjI3ODk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjE4OjAyLjI5MTYyNDU3OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MTAyNTUzMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGVlcCBEaXZlIGludG8gSVB2NiBSb3V0aW5nIEl0ZXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgSVB2NiByb3V0aW5nIHRhYmxlIGl0ZXJhdGlvbiB3b3Jrcy4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgYGlwdjZfcm91dGVfaXRlcl9hY3RpdmVgLCBgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3BgLCBhbmQgYGlwdjZfcm91dGVfc2VxX3N0YXJ0YCwgYW5kIHRoZSBjYWxsZXJzIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGVtIHdpdGhpbiBgbmV0L2lwdjYvaXA2X2ZpYi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlcXVlbmNpbmcgYW5kIGxpZmVjeWNsZSBvZiB0aGVzZSBpdGVyYXRvciBmdW5jdGlvbnMuIFRoaXMgZmVlbHMgbGlrZSBpdCBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbiBpbnRvIHRoaXMgcGFydCBvZiB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBpcyBiZWluZyBpdGVyYXRlZCBvdmVyLCBob3cgaXQncyBiZWluZyBhY2Nlc3NlZCwgYW5kIHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIHRoZSBzdGFydCBhbmQgc3RvcCBldmVudHMuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0cyBpbnRvIGhvdyB0aGUga2VybmVsIHRyYXZlcnNlcyB0aGUgSVB2NiByb3V0aW5nIHRhYmxlIGVmZmljaWVudGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTYwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxODowNC45MDE4ODI1MDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvaXA2X2ZpYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNzAwOlxcdFxcdFxcdGl0ZXItXFx1MDAzZXcuc2tpcCA9IGl0ZXItXFx1MDAzZXcuY291bnQ7XFxuMjcwMTpcXHRcXHR9XFxuMjcwMjpcXHR9XFxuMjcwMzpcXHRcXG4yNzA0OlxcdHN0YXRpYyB2b2lkICppcHY2X3JvdXRlX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcXG4yNzA1OlxcdHtcXG4yNzA2OlxcdFxcdGludCByO1xcbjI3MDc6XFx0XFx0c3RydWN0IGZpYjZfaW5mbyAqbjtcXG4yNzA4OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpO1xcbjI3MDk6XFx0XFx0c3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlciA9IHNlcS1cXHUwMDNlcHJpdmF0ZTtcXG4yNzEwOlxcdFxcbjI3MTE6XFx0XFx0KysoKnBvcyk7XFxuMjcxMjpcXHRcXHRpZiAoIXYpXFxuMjcxMzpcXHRcXHRcXHRnb3RvIGl0ZXJfdGFibGU7XFxuMjcxNDpcXHRcXG4yNzE1OlxcdFxcdG4gPSByY3VfZGVyZWZlcmVuY2UoKChzdHJ1Y3QgZmliNl9pbmZvICopdiktXFx1MDAzZWZpYjZfbmV4dCk7XFxuMjcxNjpcXHRcXHRpZiAobilcXG4yNzE3OlxcdFxcdFxcdHJldHVybiBuO1xcbjI3MTg6XFx0XFxuMjcxOTpcXHRpdGVyX3RhYmxlOlxcbjI3MjA6XFx0XFx0aXB2Nl9yb3V0ZV9jaGVja19zZXJudW0oaXRlcik7XFxuMjcyMTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNml0ZXItXFx1MDAzZXRibC1cXHUwMDNldGI2X2xvY2spO1xcbjI3MjI6XFx0XFx0ciA9IGZpYjZfd2Fsa19jb250aW51ZShcXHUwMDI2aXRlci1cXHUwMDNldyk7XFxuMjcyMzpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aXRlci1cXHUwMDNldGJsLVxcdTAwM2V0YjZfbG9jayk7XFxuMjcyNDpcXHRcXHRpZiAociBcXHUwMDNlIDApIHtcXG4yNzI1OlxcdFxcdFxcdHJldHVybiBpdGVyLVxcdTAwM2V3LmxlYWY7XFxuMjcyNjpcXHRcXHR9IGVsc2UgaWYgKHIgXFx1MDAzYyAwKSB7XFxuMjcyNzpcXHRcXHRcXHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCBcXHUwMDI2aXRlci1cXHUwMDNldyk7XFxuMjcyODpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4yNzI5OlxcdFxcdH1cXG4yNzMwOlxcdFxcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIFxcdTAwMjZpdGVyLVxcdTAwM2V3KTtcXG4yNzMxOlxcdFxcbjI3MzI6XFx0XFx0aXRlci1cXHUwMDNldGJsID0gaXB2Nl9yb3V0ZV9zZXFfbmV4dF90YWJsZShpdGVyLVxcdTAwM2V0YmwsIG5ldCk7XFxuMjczMzpcXHRcXHRpZiAoIWl0ZXItXFx1MDAzZXRibClcXG4yNzM0OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjI3MzU6XFx0XFxuMjczNjpcXHRcXHRpcHY2X3JvdXRlX3NlcV9zZXR1cF93YWxrKGl0ZXIsIG5ldCk7XFxuMjczNzpcXHRcXHRnb3RvIGl0ZXJfdGFibGU7XFxuMjczODpcXHR9XFxuMjczOTpcXHRcXG4yNzQwOlxcdHN0YXRpYyB2b2lkICppcHY2X3JvdXRlX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxuMjc0MTpcXHRcXHRfX2FjcXVpcmVzKFJDVSlcXG4yNzQyOlxcdHtcXG4yNzQzOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpO1xcbjI3NDQ6XFx0XFx0c3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlciA9IHNlcS1cXHUwMDNlcHJpdmF0ZTtcXG4yNzQ1OlxcdFxcbjI3NDY6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjI3NDc6XFx0XFx0aXRlci1cXHUwMDNldGJsID0gaXB2Nl9yb3V0ZV9zZXFfbmV4dF90YWJsZShOVUxMLCBuZXQpO1xcbjI3NDg6XFx0XFx0aXRlci1cXHUwMDNlc2tpcCA9ICpwb3M7XFxuMjc0OTpcXHRcXG4yNzUwOlxcdFxcdGlmIChpdGVyLVxcdTAwM2V0YmwpIHtcXG4yNzUxOlxcdFxcdFxcdGxvZmZfdCBwID0gMDtcXG4yNzUyOlxcdFxcbjI3NTM6XFx0XFx0XFx0aXB2Nl9yb3V0ZV9zZXFfc2V0dXBfd2FsayhpdGVyLCBuZXQpO1xcbjI3NTQ6XFx0XFx0XFx0cmV0dXJuIGlwdjZfcm91dGVfc2VxX25leHQoc2VxLCBOVUxMLCBcXHUwMDI2cCk7XFxuMjc1NTpcXHRcXHR9IGVsc2Uge1xcbjI3NTY6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMjc1NzpcXHRcXHR9XFxuMjc1ODpcXHR9XFxuMjc1OTpcXHRcXG4yNzYwOlxcdHN0YXRpYyBib29sIGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcilcXG4yNzYxOlxcdHtcXG4yNzYyOlxcdFxcdHN0cnVjdCBmaWI2X3dhbGtlciAqdyA9IFxcdTAwMjZpdGVyLVxcdTAwM2V3O1xcbjI3NjM6XFx0XFx0cmV0dXJuIHctXFx1MDAzZW5vZGUgXFx1MDAyNlxcdTAwMjYgIWxpc3RfZW1wdHkoXFx1MDAyNnctXFx1MDAzZWxoKTtcXG4yNzY0OlxcdH1cXG4yNzY1OlxcdFxcbjI3NjY6XFx0c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuMjc2NzpcXHRcXHRfX3JlbGVhc2VzKFJDVSlcXG4yNzY4OlxcdHtcXG4yNzY5OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpO1xcbjI3NzA6XFx0XFx0c3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlciA9IHNlcS1cXHUwMDNlcHJpdmF0ZTtcXG4yNzcxOlxcdFxcbjI3NzI6XFx0XFx0aWYgKGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoaXRlcikpXFxuMjc3MzpcXHRcXHRcXHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCBcXHUwMDI2aXRlci1cXHUwMDNldyk7XFxuMjc3NDpcXHRcXG4yNzc1OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjI3NzY6XFx0fVxcbjI3Nzc6XFx0XFxuMjc3ODpcXHQjaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpXFxuMjc3OTpcXHRzdGF0aWMgaW50IGlwdjZfcm91dGVfcHJvZ19zZXFfc2hvdyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuMjc4MDpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXFxuMjc4MTpcXHRcXHRcXHRcXHRcXHQgICAgdm9pZCAqdilcXG4yNzgyOlxcdHtcXG4yNzgzOlxcdFxcdHN0cnVjdCBicGZfaXRlcl9faXB2Nl9yb3V0ZSBjdHg7XFxuMjc4NDpcXHRcXG4yNzg1OlxcdFxcdGN0eC5tZXRhID0gbWV0YTtcXG4yNzg2OlxcdFxcdGN0eC5ydCA9IHY7XFxuMjc4NzpcXHRcXHRyZXR1cm4gYnBmX2l0ZXJfcnVuX3Byb2cocHJvZywgXFx1MDAyNmN0eCk7XFxuMjc4ODpcXHR9XFxuMjc4OTpcXHRcXG4yNzkwOlxcdHN0YXRpYyBpbnQgaXB2Nl9yb3V0ZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4yNzkxOlxcdHtcXG4yNzkyOlxcdFxcdHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIgPSBzZXEtXFx1MDAzZXByaXZhdGU7XFxuMjc5MzpcXHRcXHRzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSBtZXRhO1xcbjI3OTQ6XFx0XFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xcbjI3OTU6XFx0XFx0aW50IHJldDtcXG4yNzk2OlxcdFxcbjI3OTc6XFx0XFx0bWV0YS5zZXEgPSBzZXE7XFxuMjc5ODpcXHRcXHRwcm9nID0gYnBmX2l0ZXJfZ2V0X2luZm8oXFx1MDAyNm1ldGEsIGZhbHNlKTtcXG4yNzk5OlxcdFxcdGlmICghcHJvZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTg6MDQuOTAyMDY3NTkyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg0MDczNDQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgSVB2NiByb3V0aW5nIHNpdHVhdGlvbi5cblxuKipJbnZlc3RpZ2F0aW5nIElQdjYgUm91dGUgSXRlcmF0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZWAgYW5kIGFueSByZWxhdGVkIGZ1bmN0aW9ucy4gTGV0J3Mgc2VlIGhvdyBleHRlbnNpdmVseSB0aGVzZSBpdGVyYXRvciBmdW5jdGlvbnMgYXJlIHVzZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gTXkgcGxhbiBpcyB0byBsZXZlcmFnZSBgZ3JlcGAgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgb2NjdXJyZW5jZXMgb2YgYGlwdjZfcm91dGVfaXRlcmAgYW5kLCBjcnVjaWFsbHksIGBmaWI2X3dhbGtlcmAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHBpY3R1cmUgb2Ygd2hlcmUgdGhlc2UgdG9vbHMgYXJlIGVtcGxveWVkLiBUaGlzIHdpbGwgaGVscCB0byBkZXRlcm1pbmUgYW55IGludGVyLWRlcGVuZGVuY2llcyB3aXRoIG90aGVyIHJvdXRlIHJlbGF0ZWQgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzE1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxODowNi43NDI4MDQ1NTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE1MDQ3MDI1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9maWIuYz0yNzQwPXN0YXRpYyB2b2lkICppcHY2X3JvdXRlX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc1OS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6Mjc2MDpzdGF0aWMgYm9vbCBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIpXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NjEte1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTI3NjY9c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc3MS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6Mjc3MjpcXHRpZiAoaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZShpdGVyKSlcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc3My1cXHRcXHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCBcXHUwMDI2aXRlci1cXHUwMDNldyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjE4OjA5Ljg5MzI4MTgyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTYzNzc3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBpcHY2X3JvdXRlX3NlcV9zZXR1cF93YWxrYCBhbmQgYGl0ZXItXHUwMDNld2AgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBpcHY2X3JvdXRlX3NlcV9zZXR1cF93YWxrYCBmdW5jdGlvbiB3b3JrcyBhbmQsIHNwZWNpZmljYWxseSwgaG93IHRoZSBgaXRlci1cdTAwM2V3YCBtZW1iZXIgaXMgc2V0IHVwLiBUaGlzIGxpa2VseSBoYXMgaW1wbGljYXRpb25zIGZvciBzZXF1ZW5jZSBudW1iZXIgaGFuZGxpbmcsIHJvdXRlIHRyYXZlcnNhbCwgb3IgcG90ZW50aWFsbHkgZXZlbiBsb2NraW5nL3N5bmNocm9uaXphdGlvbiB3aXRoaW4gdGhlIElQdjYgcm91dGluZyBjb250ZXh0LiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdG8gcGlucG9pbnQgdGhlIGRlZmluaXRpb24gb2YgdGhpcyBmdW5jdGlvbiBhbmQgdHJhY2UgYmFjayB3aGVyZSB0aGUgYGl0ZXItXHUwMDNld2AgbWVtYmVyIG9mIHdoYXRldmVyIHRoZSBgaXRlcmAgc3RydWN0IGlzLCBnZXRzIGl0cyBpbml0aWFsIHZhbHVlLlxuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJcyBgaXRlci1cdTAwM2V3YCBhIHNpbXBsZSBjb3VudGVyPyBEb2VzIGl0IHJlcHJlc2VudCBhbiBvZmZzZXQgaW50byBhIGRhdGEgc3RydWN0dXJlPyBJcyB0aGVyZSBhIHBvaW50ZXIgaW52b2x2ZWQ/IFRoZSBpbml0aWFsaXphdGlvbiB3aWxsIHByb3ZpZGUgY3JpdGljYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHB1cnBvc2Ugb2YgYGl0ZXItXHUwMDNld2Agd2l0aGluIHRoaXMgcHJvY2Vzcy4gQnkgZXhhbWluaW5nIHRoaXMsIEkgY2FuIHN0YXJ0IHRvIGJ1aWxkIGEgY2xlYXIgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGUgc3lzdGVtIGlzIGRlc2lnbmVkIHRvIHdvcmsuIFRoaXMgZm91bmRhdGlvbmFsIGtub3dsZWRnZSB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb2RlJ3MgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NzAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxODoxMi4zODk2NjI1ODRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwNl9maWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjYwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjYwOlxcdFxcdGl0ZXItXFx1MDAzZXcuZnVuYyA9IGlwdjZfcm91dGVfeWllbGQ7XFxuMjY2MTpcXHRcXHRpdGVyLVxcdTAwM2V3LnJvb3QgPSBcXHUwMDI2aXRlci1cXHUwMDNldGJsLVxcdTAwM2V0YjZfcm9vdDtcXG4yNjYyOlxcdFxcdGl0ZXItXFx1MDAzZXcuc3RhdGUgPSBGV1NfSU5JVDtcXG4yNjYzOlxcdFxcdGl0ZXItXFx1MDAzZXcubm9kZSA9IGl0ZXItXFx1MDAzZXcucm9vdDtcXG4yNjY0OlxcdFxcdGl0ZXItXFx1MDAzZXcuYXJncyA9IGl0ZXI7XFxuMjY2NTpcXHRcXHRpdGVyLVxcdTAwM2VzZXJudW0gPSBSRUFEX09OQ0UoaXRlci1cXHUwMDNldy5yb290LVxcdTAwM2Vmbl9zZXJudW0pO1xcbjI2NjY6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNml0ZXItXFx1MDAzZXcubGgpO1xcbjI2Njc6XFx0XFx0ZmliNl93YWxrZXJfbGluayhuZXQsIFxcdTAwMjZpdGVyLVxcdTAwM2V3KTtcXG4yNjY4OlxcdH1cXG4yNjY5OlxcdFxcbjI2NzA6XFx0c3RhdGljIHN0cnVjdCBmaWI2X3RhYmxlICppcHY2X3JvdXRlX3NlcV9uZXh0X3RhYmxlKHN0cnVjdCBmaWI2X3RhYmxlICp0YmwsXFxuMjY3MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldCAqbmV0KVxcbjI2NzI6XFx0e1xcbjI2NzM6XFx0XFx0dW5zaWduZWQgaW50IGg7XFxuMjY3NDpcXHRcXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTtcXG4yNjc1OlxcdFxcbjI2NzY6XFx0XFx0aWYgKHRibCkge1xcbjI2Nzc6XFx0XFx0XFx0aCA9ICh0YmwtXFx1MDAzZXRiNl9pZCBcXHUwMDI2IChGSUI2X1RBQkxFX0hBU0hTWiAtIDEpKSArIDE7XFxuMjY3ODpcXHRcXHRcXHRub2RlID0gcmN1X2RlcmVmZXJlbmNlKGhsaXN0X25leHRfcmN1KFxcdTAwMjZ0YmwtXFx1MDAzZXRiNl9obGlzdCkpO1xcbjI2Nzk6XFx0XFx0fSBlbHNlIHtcXG4yNjgwOlxcdFxcdFxcdGggPSAwO1xcbjI2ODE6XFx0XFx0XFx0bm9kZSA9IE5VTEw7XFxuMjY4MjpcXHRcXHR9XFxuMjY4MzpcXHRcXG4yNjg0OlxcdFxcdHdoaWxlICghbm9kZSBcXHUwMDI2XFx1MDAyNiBoIFxcdTAwM2MgRklCNl9UQUJMRV9IQVNIU1opIHtcXG4yNjg1OlxcdFxcdFxcdG5vZGUgPSByY3VfZGVyZWZlcmVuY2UoXFxuMjY4NjpcXHRcXHRcXHRcXHRobGlzdF9maXJzdF9yY3UoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5maWJfdGFibGVfaGFzaFtoKytdKSk7XFxuMjY4NzpcXHRcXHR9XFxuMjY4ODpcXHRcXHRyZXR1cm4gaGxpc3RfZW50cnlfc2FmZShub2RlLCBzdHJ1Y3QgZmliNl90YWJsZSwgdGI2X2hsaXN0KTtcXG4yNjg5OlxcdH1cXG4yNjkwOlxcdFxcbjI2OTE6XFx0c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9jaGVja19zZXJudW0oc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcilcXG4yNjkyOlxcdHtcXG4yNjkzOlxcdFxcdGludCBzZXJudW0gPSBSRUFEX09OQ0UoaXRlci1cXHUwMDNldy5yb290LVxcdTAwM2Vmbl9zZXJudW0pO1xcbjI2OTQ6XFx0XFxuMjY5NTpcXHRcXHRpZiAoaXRlci1cXHUwMDNlc2VybnVtICE9IHNlcm51bSkge1xcbjI2OTY6XFx0XFx0XFx0aXRlci1cXHUwMDNlc2VybnVtID0gc2VybnVtO1xcbjI2OTc6XFx0XFx0XFx0aXRlci1cXHUwMDNldy5zdGF0ZSA9IEZXU19JTklUO1xcbjI2OTg6XFx0XFx0XFx0aXRlci1cXHUwMDNldy5ub2RlID0gaXRlci1cXHUwMDNldy5yb290O1xcbjI2OTk6XFx0XFx0XFx0V0FSTl9PTihpdGVyLVxcdTAwM2V3LnNraXApO1xcbjI3MDA6XFx0XFx0XFx0aXRlci1cXHUwMDNldy5za2lwID0gaXRlci1cXHUwMDNldy5jb3VudDtcXG4yNzAxOlxcdFxcdH1cXG4yNzAyOlxcdH1cXG4yNzAzOlxcdFxcbjI3MDQ6XFx0c3RhdGljIHZvaWQgKmlwdjZfcm91dGVfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxODoxMi4zODk4MDI4MzRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgxNzY2NjU1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6XG5cbioqRGlnZ2luZyBEZWVwZXIgaW50byBgZmliNl93YWxrZXJgIEludGVyYWN0aW9ucyoqXG5cbkFscmlnaHQsIHNvIEknbSB0cnlpbmcgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgYGZpYjZfd2Fsa2VyX3VubGlua2AgYW5kIGBmaWI2X3dhbGtlcl9saW5rYCBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgd2hlcmUgZWxzZSB0aGV5IGFyZSBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGBpcDZfZmliLmNgIGZpbGUgb3IgaW5kZWVkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGNvZGUgYmFzZS4gTXkgZ29hbCBpcyB0byBtYXAgb3V0IGV2ZXJ5IHNpbmdsZSBpbnN0YW5jZSBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhcm91bmQgZWFjaCB1c2UuIEtub3dpbmcgdGhlIGNhbGwgZ3JhcGggd2lsbCBoZWxwIG1lIGFudGljaXBhdGUgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb3IgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBhbmQgb3B0aW1pemF0aW9uLiBBIHRob3JvdWdoIGludmVzdGlnYXRpb24gaXMgdGhlIG9ubHkgd2F5IHRvIGVuc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyZSBhbmQgY2FuIG1ha2UgY2hhbmdlcyB3aXRoIGNvbmZpZGVuY2UuIEkgaGF2ZSB0byBsb29rIGJleW9uZCBqdXN0IHRoZSBpbW1lZGlhdGUgc2NvcGUgYW5kIGNvbnNpZGVyIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucy4gSXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgYW5hbHl6aW5nIGFuZCBlbnN1cmluZyBzdGFiaWxpdHkgZm9yIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODQ5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxODozMC41NjY0NzExMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0NzkzMjY2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWI2X3dhbGtlcl9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiLmNsYW5nLWZvcm1hdD03MT1Gb3JFYWNoTWFjcm9zOlxcbi0tXFxuLmNsYW5nLWZvcm1hdC0yOTUtICAtICdmb3JfZWFjaF9maWI2X25vZGVfcnRfcmN1J1xcbi5jbGFuZy1mb3JtYXQ6Mjk2OiAgLSAnZm9yX2VhY2hfZmliNl93YWxrZXJfcnQnXFxuLmNsYW5nLWZvcm1hdC0yOTctICAtICdmb3JfZWFjaF9maWxlX2xvY2snXFxuLS1cXG5pbmNsdWRlL25ldC9pcDZfZmliLmg9MjIyPXN0cnVjdCBmaWI2X3Jlc3VsdCB7XFxuLS1cXG5pbmNsdWRlL25ldC9pcDZfZmliLmgtMjMzLVxcbmluY2x1ZGUvbmV0L2lwNl9maWIuaDoyMzQ6I2RlZmluZSBmb3JfZWFjaF9maWI2X3dhbGtlcl9ydCh3KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL25ldC9pcDZfZmliLmgtMjM1LVxcdGZvciAocnQgPSAodyktXFx1MDAzZWxlYWY7IHJ0O1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjYuaD02Nj1zdHJ1Y3QgbmV0bnNfaXB2NiB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRucy9pcHY2LmgtODItXFx0c3RydWN0IGxpc3RfaGVhZFxcdGZpYjZfd2Fsa2VycztcXG5pbmNsdWRlL25ldC9uZXRucy9pcHY2Lmg6ODM6XFx0cndsb2NrX3RcXHRcXHRmaWI2X3dhbGtlcl9sb2NrO1xcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjYuaC04NC1cXHRzcGlubG9ja190XFx0XFx0ZmliNl9nY19sb2NrO1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTczPXN0YXRpYyB2b2lkIGZpYjZfZ2NfdGltZXJfY2Ioc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTc3LVxcbm5ldC9pcHY2L2lwNl9maWIuYzo3ODpzdGF0aWMgdm9pZCBmaWI2X3dhbGtlcl9saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbm5ldC9pcHY2L2lwNl9maWIuYy03OS17XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjgwOlxcdHdyaXRlX2xvY2tfYmgoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtODEtXFx0bGlzdF9hZGQoXFx1MDAyNnctXFx1MDAzZWxoLCBcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2Vycyk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjgyOlxcdHdyaXRlX3VubG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xcbm5ldC9pcHY2L2lwNl9maWIuYy04My19XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTg0LVxcbm5ldC9pcHY2L2lwNl9maWIuYzo4NTpzdGF0aWMgdm9pZCBmaWI2X3dhbGtlcl91bmxpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTg2LXtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6ODc6XFx0d3JpdGVfbG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xcbm5ldC9pcHY2L2lwNl9maWIuYy04OC1cXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZ3LVxcdTAwM2VsaCk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjg5OlxcdHdyaXRlX3VubG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xcbm5ldC9pcHY2L2lwNl9maWIuYy05MC19XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9NTI4PXN0YXRpYyBpbnQgZmliNl9kdW1wX25vZGUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTUzMi1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6NTMzOlxcdGZvcl9lYWNoX2ZpYjZfd2Fsa2VyX3J0KHcpIHtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtNTM0LVxcdFxcdHJlcyA9IHJ0Nl9kdW1wX3JvdXRlKHJ0LCB3LVxcdTAwM2VhcmdzLCB3LVxcdTAwM2Vza2lwX2luX25vZGUpO1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTU2Mj1zdGF0aWMgdm9pZCBmaWI2X2R1bXBfZW5kKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy01NjktXFx0XFx0XFx0Y2ItXFx1MDAzZWFyZ3NbNF0gPSAwO1xcbm5ldC9pcHY2L2lwNl9maWIuYzo1NzA6XFx0XFx0XFx0ZmliNl93YWxrZXJfdW5saW5rKG5ldCwgdyk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTU3MS1cXHRcXHR9XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9NTg1PXN0YXRpYyBpbnQgZmliNl9kdW1wX3RhYmxlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy02MjItXFx0XFx0aWYgKHJlcyBcXHUwMDNjPSAwKSB7XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjYyMzpcXHRcXHRcXHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCB3KTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtNjI0LVxcdFxcdFxcdGNiLVxcdTAwM2VhcmdzWzRdID0gMDtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0xODQxPXN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICpmaWI2X3JlcGFpcl90cmVlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0xOTMyLVxcbm5ldC9pcHY2L2lwNl9maWIuYzoxOTMzOlxcdFxcdHJlYWRfbG9jayhcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0xOTM0LVxcdFxcdEZPUl9XQUxLRVJTKG5ldCwgdykge1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTE5NTYtXFx0XFx0fVxcbm5ldC9pcHY2L2lwNl9maWIuYzoxOTU3OlxcdFxcdHJlYWRfdW5sb2NrKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTE5NTgtXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MTk2OT1zdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLFxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwMjUtXFx0LyogQWRqdXN0IHdhbGtlcnMgKi9cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjAyNjpcXHRyZWFkX2xvY2soXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjAyNy1cXHRGT1JfV0FMS0VSUyhuZXQsIHcpIHtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yMDM1LVxcdH1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjAzNjpcXHRyZWFkX3VubG9jayhcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yMDM3LVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTIyMjA9c3RhdGljIGludCBmaWI2X3dhbGsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjIyNi1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjIyNzpcXHRmaWI2X3dhbGtlcl9saW5rKG5ldCwgdyk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIyMjgtXFx0cmVzID0gZmliNl93YWxrX2NvbnRpbnVlKHcpO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjI5LVxcdGlmIChyZXMgXFx1MDAzYz0gMClcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjIzMDpcXHRcXHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCB3KTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjIzMS1cXHRyZXR1cm4gcmVzO1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTIyMzQ9c3RhdGljIGludCBmaWI2X2NsZWFuX25vZGUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIyNTMtXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjIyNTQ6XFx0Zm9yX2VhY2hfZmliNl93YWxrZXJfcnQodykge1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjU1LVxcdFxcdHJlcyA9IGMtXFx1MDAzZWZ1bmMocnQsIGMtXFx1MDAzZWFyZyk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjQ2ND1zdGF0aWMgaW50IF9fbmV0X2luaXQgZmliNl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQ3Ny1cXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfZ2NfbG9jayk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI0Nzg6XFx0cndsb2NrX2luaXQoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQ3OS1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2Vycyk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjY1Nj1zdGF0aWMgdm9pZCBpcHY2X3JvdXRlX3NlcV9zZXR1cF93YWxrKHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjY2Ni1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2aXRlci1cXHUwMDNldy5saCk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI2Njc6XFx0ZmliNl93YWxrZXJfbGluayhuZXQsIFxcdTAwMjZpdGVyLVxcdTAwM2V3KTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjY2OC19XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjcwND1zdGF0aWMgdm9pZCAqaXB2Nl9yb3V0ZV9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjcyNi1cXHR9IGVsc2UgaWYgKHIgXFx1MDAzYyAwKSB7XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI3Mjc6XFx0XFx0ZmliNl93YWxrZXJfdW5saW5rKG5ldCwgXFx1MDAyNml0ZXItXFx1MDAzZXcpO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yNzI4LVxcdFxcdHJldHVybiBOVUxMO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yNzI5LVxcdH1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjczMDpcXHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCBcXHUwMDI2aXRlci1cXHUwMDNldyk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3MzEtXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9Mjc2Nj1zdGF0aWMgdm9pZCBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNzcyLVxcdGlmIChpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKGl0ZXIpKVxcbm5ldC9pcHY2L2lwNl9maWIuYzoyNzczOlxcdFxcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIFxcdTAwMjZpdGVyLVxcdTAwM2V3KTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc3NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTg6MzIuNTE0NDEyNDAyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNTExNDEzMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUHY2IEZJQiBXYWxrZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBJUHY2IEZJQiB3YWxrZXIgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L2lwdjYvaXA2X2ZpYi5jYC4gTGV0J3MgYnJlYWsgZG93biB0aGUga2V5IGNoYW5nZXMuIEl0IGxvb2tzIGxpa2UgYGZpYjZfd2Fsa2VyX3VubGluaygpYCBoYXMgc3dpdGNoZWQgZnJvbSBhIHNpbXBsZSBgbGlzdF9kZWwoKWAgdG8gYGxpc3RfZGVsX2luaXQoKWAgb24gdGhlIHdhbGtlcidzIGxpc3QgaGVhZCwgYHctXHUwMDNlbGhgLiBUaGF0J3MgYSBzdWJ0bGUgYnV0IHBvdGVudGlhbGx5IHNpZ25pZmljYW50IGNoYW5nZSBpbiBob3cgdGhlIGxpc3QgaXMgaGFuZGxlZCBhZnRlciByZW1vdmFsLiBJIHdvbmRlciBpZiB0aGVyZSB3ZXJlIHNvbWUgaXNzdWVzIHdpdGggZGFuZ2xpbmcgcG9pbnRlcnMgb3IgcmV1c2UgY29uY2VybnMgYmVpbmcgYWRkcmVzc2VkIHRoZXJlLlxuXG5UaGUgb3RoZXIgbWFqb3IgbW9kaWZpY2F0aW9uIGNvbmNlcm5zIGBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKClgLiBJdCdzIGNoYW5nZWQgdGhlIGNvbmRpdGlvbiBmb3IgZGV0ZXJtaW5pbmcgYW4gXCJhY3RpdmVcIiB3YWxrZXIuIFByZXZpb3VzbHkgaXQgY2hlY2tlZCBgdy1cdTAwM2Vub2RlIFx1MDAyNlx1MDAyNiAhKHctXHUwMDNlc3RhdGUgPT0gRldTX1UgXHUwMDI2XHUwMDI2IHctXHUwMDNlbm9kZSA9PSB3LVx1MDAzZXJvb3QpYCwgYnV0IG5vdyBpdCdzIGNoZWNraW5nIGB3LVx1MDAzZW5vZGUgXHUwMDI2XHUwMDI2ICFsaXN0X2VtcHR5KFx1MDAyNnctXHUwMDNlbGgpYC4gVGhlIG9sZCBjb25kaXRpb24gbG9va3MgbGlrZSBpdCB3YXMgYXR0ZW1wdGluZyB0byBleGNsdWRlIHNvbWUgd2Fsa2VycyBpbiBhICd1bnN0YWJsZScgc3RhdGUgYnV0IG5vdyB0aGUgbmV3IGNvbmRpdGlvbiBzaW1wbHkgY2hlY2tzIHRoYXQgdGhlIHdhbGtlciBpcyBsaW5rZWQgdG8gdGhlIGxpc3QuIFRoaXMgY291bGQgaW1wcm92ZSBwZXJmb3JtYW5jZSwgb3IgY291bGQgaGF2ZSBiZWVuIGNoYW5nZWQgZm9yIG90aGVyIHJlYXNvbnMuXG5cbk5vdywgbGV0J3Mgc2VlIGhvdyB0aGVzZSBjaGFuZ2VzIG1pZ2h0IGltcGFjdCB0aGUgdmlzaWJpbGl0eSBvZiBJUHY2IHJvdXRlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHdhbGtlcnMgYXJlIHVzZWQgYnkgdGhlIHN5c3RlbS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgaW50byBob3cgSVB2NiByb3V0ZXMgYXJlIHJlYWQgdmlhIC9wcm9jL25ldC9pcHY2X3JvdXRlLCBvciBob3cgQlBGIGl0ZXJhdG9ycywgb3IgTmV0bGluayBpbnRlcmZhY2Ugd2l0aCBgaXAgcm91dGUgc2hvd2Agb3Igc2ltaWxhciBjb21tYW5kcyBhcmUgaW1wbGVtZW50ZWQuIEknbGwgbmVlZCB0byBsb2NhdGUgd2hlcmUgdGhlIHJvdXRlIGluZm9ybWF0aW9uIGlzIGV4cG9zZWQgdGhyb3VnaCB0aG9zZSBtZWNoYW5pc21zLiBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb2RlIGluIGBuZXQvaXB2Ni9pcDZfZmliLmNgIHdoZXJlIGZ1bmN0aW9ucyBsaWtlIGBpcHY2X3JvdXRlX3NlcV9vcHNgIG9yIHNpbWlsYXIsIHRoYXQgaGFuZGxlIHRoZSBkYXRhIGFjY2VzcywgYXJlIGRlZmluZWQuIEZyb20gdGhlcmUsIEknbGwgYmUgYWJsZSB0byB0cmFjZSBob3cgdGhlc2Ugd2Fsa2VyIG1vZGlmaWNhdGlvbnMgZGlyZWN0bHkgaW1wYWN0IHRoZSByZXRyaWV2YWwgYW5kIHByZXNlbnRhdGlvbiBvZiB0aGUgcm91dGluZyBkYXRhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUzNiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxODozNS41NjU1NTY0ODFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjQxMDMzNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaXA2X2ZpYi5jPTI3NjA9c3RhdGljIGJvb2wgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZShzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyKVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NjUtXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI3NjY6c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NjctXFx0X19yZWxlYXNlcyhSQ1UpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjgwOD1zdGF0aWMgdm9pZCBpcHY2X3JvdXRlX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI4MTktXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI4MjA6XFx0aXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc2VxLCB2KTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjgyMS19XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjgyOD1zdGF0aWMgdm9pZCBpcHY2X3JvdXRlX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yODI5LXtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjgzMDpcXHRpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcChzZXEsIHYpO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yODMxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTg6MzcuMzg5NjY1MTE0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxOTAyNTIxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUHY2IFJvdXRlIFNlcXVlbmNlIEZpbGUgU3RvcCBPcGVyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGBpcHY2X3JvdXRlX3NlcV9zdG9wYC4gUmlnaHQsIHRoYXQncyB0aGUgc3RvcCBvcGVyYXRpb24gc3BlY2lmaWNhbGx5IGZvciB0aGUgYC9wcm9jL25ldC9pcHY2X3JvdXRlYCBmaWxlLCBhbmQgaW1wb3J0YW50bHksIHRoZSBCUEYgcm91dGUgaXRlcmF0b3IuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBjbGVhbnMgdXAgYWZ0ZXIgYSBzZXF1ZW5jZSBmaWxlIGl0ZXJhdGlvbiBvciBCUEYgcHJvZ3JhbSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBJUHY2IHJvdXRpbmcgdGFibGUuIFRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGdvaW5nIG9uLCBJIHNob3VsZCBwcm9iYWJseSB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlLiBMaW5lcyAyODAwIHRocm91Z2ggMjg2MCBvZiBgbmV0L2lwdjYvaXA2X2ZpYi5jYCBzZWVtIGxpa2UgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIFRoYXQgc2VjdGlvbiBsaWtlbHkgY29udGFpbnMgdGhlIGNvcmUgbG9naWMgZm9yIHRoaXMgc3RvcCBmdW5jdGlvbiBhbmQgd2lsbCBnaXZlIG1lIHRoZSBpbnNpZ2h0cyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBzZWUgaG93IGl0IHJlbGVhc2VzIHJlc291cmNlcywgaGFuZGxlcyBhbnkgbG9ja3MsIGFuZCBlbnN1cmVzIGEgY2xlYW4gZXhpdCBmb3IgdGhlc2Ugcm91dGUgbGlzdGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTI4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTg6NDIuNTc5OTIwOTExWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDc2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9pcDZfZmliLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjgwMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjgwMDpcXHRcXHRcXHRyZXR1cm4gaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3Nob3coc2VxLCB2KTtcXG4yODAxOlxcdFxcbjI4MDI6XFx0XFx0cmV0ID0gaXB2Nl9yb3V0ZV9wcm9nX3NlcV9zaG93KHByb2csIFxcdTAwMjZtZXRhLCB2KTtcXG4yODAzOlxcdFxcdGl0ZXItXFx1MDAzZXcubGVhZiA9IE5VTEw7XFxuMjgwNDpcXHRcXG4yODA1OlxcdFxcdHJldHVybiByZXQ7XFxuMjgwNjpcXHR9XFxuMjgwNzpcXHRcXG4yODA4OlxcdHN0YXRpYyB2b2lkIGlwdjZfcm91dGVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuMjgwOTpcXHR7XFxuMjgxMDpcXHRcXHRzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSBtZXRhO1xcbjI4MTE6XFx0XFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xcbjI4MTI6XFx0XFxuMjgxMzpcXHRcXHRpZiAoIXYpIHtcXG4yODE0OlxcdFxcdFxcdG1ldGEuc2VxID0gc2VxO1xcbjI4MTU6XFx0XFx0XFx0cHJvZyA9IGJwZl9pdGVyX2dldF9pbmZvKFxcdTAwMjZtZXRhLCB0cnVlKTtcXG4yODE2OlxcdFxcdFxcdGlmIChwcm9nKVxcbjI4MTc6XFx0XFx0XFx0XFx0KHZvaWQpaXB2Nl9yb3V0ZV9wcm9nX3NlcV9zaG93KHByb2csIFxcdTAwMjZtZXRhLCB2KTtcXG4yODE4OlxcdFxcdH1cXG4yODE5OlxcdFxcbjI4MjA6XFx0XFx0aXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3Aoc2VxLCB2KTtcXG4yODIxOlxcdH1cXG4yODIyOlxcdCNlbHNlXFxuMjgyMzpcXHRzdGF0aWMgaW50IGlwdjZfcm91dGVfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuMjgyNDpcXHR7XFxuMjgyNTpcXHRcXHRyZXR1cm4gaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3Nob3coc2VxLCB2KTtcXG4yODI2OlxcdH1cXG4yODI3OlxcdFxcbjI4Mjg6XFx0c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4yODI5OlxcdHtcXG4yODMwOlxcdFxcdGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wKHNlcSwgdik7XFxuMjgzMTpcXHR9XFxuMjgzMjpcXHQjZW5kaWZcXG4yODMzOlxcdFxcbjI4MzQ6XFx0Y29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGlwdjZfcm91dGVfc2VxX29wcyA9IHtcXG4yODM1OlxcdFxcdC5zdGFydFxcdD0gaXB2Nl9yb3V0ZV9zZXFfc3RhcnQsXFxuMjgzNjpcXHRcXHQubmV4dFxcdD0gaXB2Nl9yb3V0ZV9zZXFfbmV4dCxcXG4yODM3OlxcdFxcdC5zdG9wXFx0PSBpcHY2X3JvdXRlX3NlcV9zdG9wLFxcbjI4Mzg6XFx0XFx0LnNob3dcXHQ9IGlwdjZfcm91dGVfc2VxX3Nob3dcXG4yODM5OlxcdH07XFxuMjg0MDpcXHQjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTg6NDIuNTgwMTM0MjcxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc4NTM3NTEzNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSVB2NiBSb3V0aW5nIFRhYmxlIE1hbmFnZW1lbnQgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHNvbWUgY29kZSBpbnZvbHZlZCBpbiBJUHY2IHJvdXRpbmcgdGFibGUgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBpdGVyYXRpbmcgdGhyb3VnaCBgL3Byb2MvbmV0L2lwdjZfcm91dGVgLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgY2FuIHRoaXMgYmUgdGVzdGVkIGluIGEgc3RhbmRhcmQgU3l6a2FsbGVyIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGUgYW5zd2VyIGlzIGEgc29saWQgeWVzLiBJdCBpbnZvbHZlcyByZWFkaW5nIGZyb20gYC9wcm9jL25ldC9pcHY2X3JvdXRlYCwgYW5kIHRoZW4gcG90ZW50aWFsbHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgSVB2NiByb3V0aW5nIHRhYmxlIGl0c2VsZiBieSBhZGRpbmcgb3IgZGVsZXRpbmcgcm91dGVzIHVzaW5nIG5ldGxpbmsgb3IgaW9jdGwgY2FsbHMgKndoaWxlKiB0aGlzIHJlYWQgaXMgb25nb2luZywgb3IgdXNpbmcgQlBGIGl0ZXJhdG9ycy4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSAoYG5ldC9pcHY2L2lwNl9maWIuY2ApIGFzIHRoZSBwcmltYXJ5IGFyZWEgb2YgaW50ZXJlc3QuXG5cblRoZSBpbXBsaWNhdGlvbnMgYXJlIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIGl0J3MgbWVzc2luZyB3aXRoIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcywgc3BlY2lmaWNhbGx5IGBsaXN0X2RlbF9pbml0YCBzZW1hbnRpY3MsIGFuZCBhbHNvIHRoZSBzdGF0ZSBjaGVja3Mgd2l0aGluIHRoZSB3YWxrZXIgKGBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlYCkuIFRoZSBwcmltYXJ5IGdvYWwgdGhlcmUgaXMgY2xlYXI6IHRvIHByZXZlbnQgZGF0YSBjb3JydXB0aW9uIG9yIGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIHRoZSB3YWxrZXIgYW5kIHRoZSByb3V0aW5nIHRhYmxlIHdoZW4gcm91dGVzIGFyZSBiZWluZyBhZGRlZCBvciBkZWxldGVkIGNvbmN1cnJlbnRseS4gVGhpcyBpcyBhIGNsYXNzaWMgY29uY3VycmVuY3kgcHJvYmxlbS5cblxuQmVmb3JlIEkgZ28gZnVydGhlciwgbGV0J3MgbmFpbCBkb3duIGFueSBwcmVyZXF1aXNpdGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gIEkgYWxyZWFkeSBrbm93IHRoYXQgYENPTkZJR19JUFY2YCBpcyBwcm9iYWJseSByZXF1aXJlZCwgYnV0IGxldCdzIGJlIHN1cmUuIExldCBtZSBzZWUuLi4gd2hlcmUgZG9lcyBgaXA2X2ZpYi5jYCBnZXQgY29tcGlsZWQ/IEEgcXVpY2sgY2hlY2sgb2YgYG5ldC9pcHY2L01ha2VmaWxlYCBzaG91bGQgY29uZmlybSBteSBzdXNwaWNpb25zIGFuZCBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIGFuc3dlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0NDgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxODo1MC40MzM4ODgyMDZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NTc1ODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl9maWJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlPTg9aXB2Ni15IDo9XFx0YWZfaW5ldDYubyBhbnljYXN0Lm8gaXA2X291dHB1dC5vIGlwNl9pbnB1dC5vIGFkZHJjb25mLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlLTktXFx0XFx0YWRkcmxhYmVsLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlOjEwOlxcdFxcdHJvdXRlLm8gaXA2X2ZpYi5vIGlwdjZfc29ja2dsdWUubyBuZGlzYy5vIHVkcC5vIFxcXFxcXG5uZXQvaXB2Ni9NYWtlZmlsZS0xMS1cXHRcXHRyYXcubyBpY21wLm8gbWNhc3QubyByZWFzc2VtYmx5Lm8gdGNwX2lwdjYubyBwaW5nLm8gXFxcXFxcbi0tXFxubmV0L2lwdjYvZmliNl9ub3RpZmllci5jLTgtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRucy9pcHY2LmhcXHUwMDNlXFxubmV0L2lwdjYvZmliNl9ub3RpZmllci5jOjk6I2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfZmliLmhcXHUwMDNlXFxubmV0L2lwdjYvZmliNl9ub3RpZmllci5jLTEwLVxcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYy0xMC0jaW5jbHVkZSBcXHUwMDNjbmV0L2lwLmhcXHUwMDNlXFxubmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYzoxMTojaW5jbHVkZSBcXHUwMDNjbmV0L2lwNl9maWIuaFxcdTAwM2VcXG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jLTEyLSNpbmNsdWRlIFxcdTAwM2NuZXQvbHd0dW5uZWwuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtMTEtI2luY2x1ZGUgXFx1MDAzY25ldC9pcC5oXFx1MDAzZVxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM6MTI6I2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfZmliLmhcXHUwMDNlXFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0xMy0jaW5jbHVkZSBcXHUwMDNjbmV0L2lwNl9yb3V0ZS5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTM2LSNpbmNsdWRlIFxcdTAwM2NuZXQvaXBfZmliLmhcXHUwMDNlXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjM3OiNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X2ZpYi5oXFx1MDAzZVxcbm5ldC9pcHY2L2lwNl9maWIuYy0zOC0jaW5jbHVkZSBcXHUwMDNjbmV0L2lwNl9yb3V0ZS5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTEzODI9c3RhdGljIHZvaWQgZmliNl9zdGFydF9nYyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0KVxcbm5ldC9pcHY2L2lwNl9maWIuYy0xMzgzLXtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MTM4NDpcXHRpZiAoIXRpbWVyX3BlbmRpbmcoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5pcDZfZmliX3RpbWVyKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pcHY2L2lwNl9maWIuYy0xMzg1LVxcdCAgICAocnQtXFx1MDAzZWZpYjZfZmxhZ3MgXFx1MDAyNiBSVEZfRVhQSVJFUykpXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjEzODY6XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuaXA2X2ZpYl90aW1lcixcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMTM4Ny1cXHRcXHRcXHQgIGppZmZpZXMgKyBSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY2LnN5c2N0bC5pcDZfcnRfZ2NfaW50ZXJ2YWwpKTtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0xMzkwPXZvaWQgZmliNl9mb3JjZV9zdGFydF9nYyhzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTEzOTEte1xcbm5ldC9pcHY2L2lwNl9maWIuYzoxMzkyOlxcdGlmICghdGltZXJfcGVuZGluZyhcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmlwNl9maWJfdGltZXIpKVxcbm5ldC9pcHY2L2lwNl9maWIuYzoxMzkzOlxcdFxcdG1vZF90aW1lcihcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmlwNl9maWJfdGltZXIsXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTEzOTQtXFx0XFx0XFx0ICBqaWZmaWVzICsgUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2Ni5zeXNjdGwuaXA2X3J0X2djX2ludGVydmFsKSk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjQyOT12b2lkIGZpYjZfcnVuX2djKHVuc2lnbmVkIGxvbmcgZXhwaXJlcywgc3RydWN0IG5ldCAqbmV0LCBib29sIGZvcmNlKVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI0MzctXFx0fSBlbHNlIGlmICghc3Bpbl90cnlsb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl9nY19sb2NrKSkge1xcbm5ldC9pcHY2L2lwNl9maWIuYzoyNDM4OlxcdFxcdG1vZF90aW1lcihcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmlwNl9maWJfdGltZXIsIGppZmZpZXMgKyBIWik7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI0MzktXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI0NDktXFx0aWYgKGdjX2FyZ3MubW9yZSlcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjQ1MDpcXHRcXHRtb2RfdGltZXIoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5pcDZfZmliX3RpbWVyLFxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNDUxLVxcdFxcdFxcdCAgcm91bmRfamlmZmllcyhub3cgKyBpcDZfcnRfZ2NfaW50ZXJ2YWwpKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQ1Mi1cXHRlbHNlXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI0NTM6XFx0XFx0dGltZXJfZGVsZXRlKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuaXA2X2ZpYl90aW1lcik7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI0NTQtXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5maWI2X2djX2xvY2spO1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTI0NTc9c3RhdGljIHZvaWQgZmliNl9nY190aW1lcl9jYihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQ1OC17XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI0NTk6XFx0c3RydWN0IG5ldCAqYXJnID0gdGltZXJfY29udGFpbmVyX29mKGFyZywgdCwgaXB2Ni5pcDZfZmliX3RpbWVyKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQ2MC1cXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0yNDY0PXN0YXRpYyBpbnQgX19uZXRfaW5pdCBmaWI2X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNDc5LVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl93YWxrZXJzKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjQ4MDpcXHR0aW1lcl9zZXR1cChcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmlwNl9maWJfdGltZXIsIGZpYjZfZ2NfdGltZXJfY2IsIDApO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yNDgxLVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTI1MzY9c3RhdGljIHZvaWQgZmliNl9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjUzOS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjU0MDpcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmlwNl9maWJfdGltZXIpO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yNTQxLVxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTQ5LSNpbmNsdWRlIFxcdTAwM2NuZXQvaXB2Ni5oXFx1MDAzZVxcbm5ldC9pcHY2L2lwNl9ncmUuYzo1MDojaW5jbHVkZSBcXHUwMDNjbmV0L2lwNl9maWIuaFxcdTAwM2VcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtNTEtI2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfcm91dGUuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3JwZmlsdGVyLmMtOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvcm91dGUuaFxcdTAwM2VcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ycGZpbHRlci5jOjEwOiNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X2ZpYi5oXFx1MDAzZVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3JwZmlsdGVyLmMtMTEtI2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfcm91dGUuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jLTgtI2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfcm91dGUuaFxcdTAwM2VcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYzo5OiNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X2ZpYi5oXFx1MDAzZVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jLTEwLSNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X2NoZWNrc3VtLmhcXHUwMDNlXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X2ZpYl9pcHY2LmMtMTMtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mdF9maWJfaXB2Ni5jOjE0OiNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X2ZpYi5oXFx1MDAzZVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZnRfZmliX2lwdjYuYy0xNS0jaW5jbHVkZSBcXHUwMDNjbmV0L2lwNl9yb3V0ZS5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjYvb3V0cHV0X2NvcmUuYy04LSNpbmNsdWRlIFxcdTAwM2NuZXQvaXB2Ni5oXFx1MDAzZVxcbm5ldC9pcHY2L291dHB1dF9jb3JlLmM6OTojaW5jbHVkZSBcXHUwMDNjbmV0L2lwNl9maWIuaFxcdTAwM2VcXG5uZXQvaXB2Ni9vdXRwdXRfY29yZS5jLTEwLSNpbmNsdWRlIFxcdTAwM2NuZXQvYWRkcmNvbmYuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNDctI2luY2x1ZGUgXFx1MDAzY25ldC9pcHY2LmhcXHUwMDNlXFxubmV0L2lwdjYvcm91dGUuYzo0ODojaW5jbHVkZSBcXHUwMDNjbmV0L2lwNl9maWIuaFxcdTAwM2VcXG5uZXQvaXB2Ni9yb3V0ZS5jLTQ5LSNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X3JvdXRlLmhcXHUwMDNlXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMTctI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRucy9nZW5lcmljLmhcXHUwMDNlXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjE4OiNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X2ZpYi5oXFx1MDAzZVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0xOS0jaW5jbHVkZSBcXHUwMDNjbmV0L3JvdXRlLmhcXHUwMDNlXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTgtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRucy9nZW5lcmljLmhcXHUwMDNlXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5OiNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X2ZpYi5oXFx1MDAzZVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMC0jaW5jbHVkZSBcXHUwMDNjbmV0L3JvdXRlLmhcXHUwMDNlXFxuLS1cXG5uZXQvaXB2Ni9zaXQuYy00MS0jaW5jbHVkZSBcXHUwMDNjbmV0L3RyYW5zcF92Ni5oXFx1MDAzZVxcbm5ldC9pcHY2L3NpdC5jOjQyOiNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X2ZpYi5oXFx1MDAzZVxcbm5ldC9pcHY2L3NpdC5jLTQzLSNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X3JvdXRlLmhcXHUwMDNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjE4OjUwLjQ5MzQ2OTg0NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDY1OTcxMzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIElQdjYgQ29uZmlndXJhdGlvbiBpbiB0aGUgS2VybmVsKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVB2NiBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIHByb2MgZmlsZXN5c3RlbS4gVGltZSB0byBjaGVjayBgbmV0L2lwdjYvS2NvbmZpZ2AuIEkga25vdyB0aGUgZ2VuZXJhbCBhcmVhcywgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIHRoYXQgbWlnaHQgaGF2ZSBjaGFuZ2VkIHJlY2VudGx5LCBvciBhIHN1YnRsZSBpbnRlcnBsYXkgYmV0d2VlbiBvcHRpb25zIEknbSBvdmVybG9va2luZy4gU3BlY2lmaWNhbGx5LCBJJ20gbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBtaWdodCBhZmZlY3QgaG93IElQdjYgYWRkcmVzc2VzIGFyZSBwcmVzZW50ZWQgb3IgbWFuaXB1bGF0ZWQgdGhyb3VnaCBgL3Byb2NgLiBUaGlzIGlzIG9mdGVuIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIHdoZXJlIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZSByZXZlYWxzIGtlcm5lbC1sZXZlbCBkZXRhaWxzLiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlIGhhcyB0byBvZmZlci4gSSBuZWVkIHRvIGVuc3VyZSBhIGNsZWFyIG1lbnRhbCBtb2RlbCBvZiB0aGUgaW50ZXJkZXBlbmRlbmNpZXMgYmVmb3JlIGRpdmluZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyODgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxODo1NC45NTk0NDUzMjlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNzMxNDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUFY2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZy01LVxcbm5ldC9pcHY2L0tjb25maWc6NjptZW51Y29uZmlnIElQVjZcXG5uZXQvaXB2Ni9LY29uZmlnLTctXFx0Ym9vbCBcXFwiVGhlIElQdjYgcHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE5PWlmIElQVjZcXG5uZXQvaXB2Ni9LY29uZmlnLTIwLVxcbm5ldC9pcHY2L0tjb25maWc6MjE6Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcXG5uZXQvaXB2Ni9LY29uZmlnLTIyLVxcdGJvb2wgXFxcIklQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzAtXFxubmV0L2lwdjYvS2NvbmZpZzozMTpjb25maWcgSVBWNl9ST1VURV9JTkZPXFxubmV0L2lwdjYvS2NvbmZpZy0zMi1cXHRib29sIFxcXCJJUHY2OiBSb3V0ZSBJbmZvcm1hdGlvbiAoUkZDIDQxOTEpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTM4LVxcbm5ldC9pcHY2L0tjb25maWc6Mzk6Y29uZmlnIElQVjZfT1BUSU1JU1RJQ19EQURcXG5uZXQvaXB2Ni9LY29uZmlnLTQwLVxcdGJvb2wgXFxcIklQdjY6IEVuYWJsZSBSRkMgNDQyOSBPcHRpbWlzdGljIERBRFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTExLVxcbm5ldC9pcHY2L0tjb25maWc6MTEyOmNvbmZpZyBJUFY2X01JUDZcXG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogTW9iaWxpdHlcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTExOS1cXG5uZXQvaXB2Ni9LY29uZmlnOjEyMDpjb25maWcgSVBWNl9JTEFcXG5uZXQvaXB2Ni9LY29uZmlnLTEyMS1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSWRlbnRpZmllciBMb2NhdG9yIEFkZHJlc3NpbmcgKElMQSlcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE0Nj1jb25maWcgSU5FVDZfVFVOTkVMXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE0OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE1MDpjb25maWcgSVBWNl9WVElcXG5uZXQvaXB2Ni9LY29uZmlnLTE1MS1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCAoc2VjdXJlKSBJUHY2OiB0dW5uZWxpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE2MS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE2Mjpjb25maWcgSVBWNl9TSVRcXG5uZXQvaXB2Ni9LY29uZmlnLTE2My1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSVB2Ni1pbi1JUHY0IHR1bm5lbCAoU0lUIGRyaXZlcilcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE3Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjE3Nzpjb25maWcgSVBWNl9TSVRfNlJEXFxubmV0L2lwdjYvS2NvbmZpZy0xNzgtXFx0Ym9vbCBcXFwiSVB2NjogSVB2NiBSYXBpZCBEZXBsb3ltZW50ICg2UkQpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xOTUtXFxubmV0L2lwdjYvS2NvbmZpZzoxOTY6Y29uZmlnIElQVjZfTkRJU0NfTk9ERVRZUEVcXG5uZXQvaXB2Ni9LY29uZmlnLTE5Ny1cXHRib29sXFxubmV0L2lwdjYvS2NvbmZpZy0xOTgtXFxubmV0L2lwdjYvS2NvbmZpZzoxOTk6Y29uZmlnIElQVjZfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjA5LVxcbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxcbm5ldC9pcHY2L0tjb25maWctMjExLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBHUkUgdHVubmVsXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMjctXFxubmV0L2lwdjYvS2NvbmZpZzoyMjg6Y29uZmlnIElQVjZfRk9VXFxubmV0L2lwdjYvS2NvbmZpZy0yMjktXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjMxLVxcbm5ldC9pcHY2L0tjb25maWc6MjMyOmNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTIzMy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMzYtXFxubmV0L2lwdjYvS2NvbmZpZzoyMzc6Y29uZmlnIElQVjZfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjYvS2NvbmZpZy0yMzgtXFx0Ym9vbCBcXFwiSVB2NjogTXVsdGlwbGUgUm91dGluZyBUYWJsZXNcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI0Mi1cXG5uZXQvaXB2Ni9LY29uZmlnOjI0Mzpjb25maWcgSVBWNl9TVUJUUkVFU1xcbm5ldC9pcHY2L0tjb25maWctMjQ0LVxcdGJvb2wgXFxcIklQdjY6IHNvdXJjZSBhZGRyZXNzIGJhc2VkIHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcXG5uZXQvaXB2Ni9LY29uZmlnLTI1OC1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjY0LVxcbm5ldC9pcHY2L0tjb25maWc6MjY1OmNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI3OC1cXG5uZXQvaXB2Ni9LY29uZmlnOjI3OTpjb25maWcgSVBWNl9QSU1TTV9WMlxcbm5ldC9pcHY2L0tjb25maWctMjgwLVxcdGJvb2wgXFxcIklQdjY6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjg1LVxcbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjk5LVxcbm5ldC9pcHY2L0tjb25maWc6MzAwOmNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L0tjb25maWctMzAxLVxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxcbm5ldC9pcHY2L0tjb25maWctMzEzLVxcdGRlZl9ib29sIHlcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzE2LVxcbm5ldC9pcHY2L0tjb25maWc6MzE3OmNvbmZpZyBJUFY2X1JQTF9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMzE4LVxcdGJvb2wgXFxcIklQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzI3LVxcbm5ldC9pcHY2L0tjb25maWc6MzI4OmNvbmZpZyBJUFY2X0lPQU02X0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0zMjktXFx0Ym9vbCBcXFwiSVB2NjogSU9BTSBQcmUtYWxsb2NhdGVkIFRyYWNlIGluc2VydGlvbiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxODo1NS4wNDExODIzMzhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkyNjQzMDUwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2U6XG5cbioqSW52ZXN0aWdhdGluZyBJUHY2IFJvdXRlIEl0ZXJhdGlvbiBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgSVB2NiByb3V0ZXMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSB0aGUgc2VxdWVuY2Ugc3RvcCBhbmQgYWN0aXZlIGl0ZXJhdGlvbi4gSSByZWNhbGwgc2VlaW5nIGBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcGAgYW5kIGBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlYCB1c2VkIHdpdGggc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiB0aGUgYENPTkZJR19QUk9DX0ZTYCBmbGFnIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBUaW1lIHRvIHZlcmlmeS4gTGV0J3MgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgY29kZS4gSSBuZWVkIHRvIGNoZWNrIGxpbmVzIDI2NTAgdGhyb3VnaCAyODUwIG9mIGBuZXQvaXB2Ni9pcDZfZmliLmNgIHRvIHNlZSBob3cgdGhvc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkIGFuZCB1bmRlciB3aGF0IGJ1aWxkIGNvbmRpdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwNjgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxODo1Ni45Njc2MTY1MTdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwNl9maWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjQ1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjQ1OlxcdFxcdFxcdGl0ZXItXFx1MDAzZXcubGVhZiA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoXFxuMjY0NjpcXHRcXHRcXHRcXHRcXHRpdGVyLVxcdTAwM2V3LmxlYWYtXFx1MDAzZWZpYjZfbmV4dCxcXG4yNjQ3OlxcdFxcdFxcdFxcdFxcdGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2aXRlci1cXHUwMDNldGJsLVxcdTAwM2V0YjZfbG9jaykpO1xcbjI2NDg6XFx0XFx0XFx0aXRlci1cXHUwMDNlc2tpcC0tO1xcbjI2NDk6XFx0XFx0XFx0aWYgKCFpdGVyLVxcdTAwM2Vza2lwIFxcdTAwMjZcXHUwMDI2IGl0ZXItXFx1MDAzZXcubGVhZilcXG4yNjUwOlxcdFxcdFxcdFxcdHJldHVybiAxO1xcbjI2NTE6XFx0XFx0fSB3aGlsZSAoaXRlci1cXHUwMDNldy5sZWFmKTtcXG4yNjUyOlxcdFxcbjI2NTM6XFx0XFx0cmV0dXJuIDA7XFxuMjY1NDpcXHR9XFxuMjY1NTpcXHRcXG4yNjU2OlxcdHN0YXRpYyB2b2lkIGlwdjZfcm91dGVfc2VxX3NldHVwX3dhbGsoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcixcXG4yNjU3OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXQgKm5ldClcXG4yNjU4OlxcdHtcXG4yNjU5OlxcdFxcdG1lbXNldChcXHUwMDI2aXRlci1cXHUwMDNldywgMCwgc2l6ZW9mKGl0ZXItXFx1MDAzZXcpKTtcXG4yNjYwOlxcdFxcdGl0ZXItXFx1MDAzZXcuZnVuYyA9IGlwdjZfcm91dGVfeWllbGQ7XFxuMjY2MTpcXHRcXHRpdGVyLVxcdTAwM2V3LnJvb3QgPSBcXHUwMDI2aXRlci1cXHUwMDNldGJsLVxcdTAwM2V0YjZfcm9vdDtcXG4yNjYyOlxcdFxcdGl0ZXItXFx1MDAzZXcuc3RhdGUgPSBGV1NfSU5JVDtcXG4yNjYzOlxcdFxcdGl0ZXItXFx1MDAzZXcubm9kZSA9IGl0ZXItXFx1MDAzZXcucm9vdDtcXG4yNjY0OlxcdFxcdGl0ZXItXFx1MDAzZXcuYXJncyA9IGl0ZXI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjE4OjU2Ljk2NzgxMTQ3N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDY0NTIzNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBDb2RlKipcblxuQWxyaWdodCwgbGV0J3MgcGlucG9pbnQgdGhlIG9yaWdpbiBvZiB0aGF0IGAjaWYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylgIGJsb2NrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBiZWZvcmUgY29tbWl0IDI2NDUuIEknbSBlc3NlbnRpYWxseSB0cmFjaW5nIHRoZSBmZWF0dXJlJ3MgaW5zdGFudGlhdGlvbiBhbmQgd2FudCB0byBzZWUgaG93IHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiBoYXMgZXZvbHZlZCBoaXN0b3JpY2FsbHkuIFVuZGVyc3RhbmRpbmcgaXRzIHBvc2l0aW9uIGlzIGNyaXRpY2FsIGZvciBjb21wcmVoZW5kaW5nIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gSSdtIHByb2JhYmx5IGdvaW5nIHRvIG5lZWQgdG8gbG9vayBhdCBjb21taXQgaGlzdG9yeSBhcm91bmQgdGhhdCB0aW1lZnJhbWUgdG8gc2VlIHdoYXQgdGhhdCBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdhcyBkb2luZyBhdCB0aGF0IHRpbWUgYW5kIHVuZGVyc3RhbmQgaWYgdGhlcmUgd2FzIHNvbWV0aGluZyB0aGF0IGludHJvZHVjZWQgaXQsIG9yIHBlcmhhcHMgbW92ZWQgaXQsIGV0Yy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2NzQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjE4OjU5LjAzMjMzOTA2NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk0MTkzOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmLipDT05GSUdfUFJPQ19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9pcDZfZmliLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaXA2X2ZpYi5jPTI1OTc9dm9pZCBmaWI2X2djX2NsZWFudXAodm9pZClcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNjAyLVxcbm5ldC9pcHY2L2lwNl9maWIuYzoyNjAzOiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yNjA0LXN0YXRpYyBpbnQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjE4OjU5LjEyMTc2NDM1NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzA4NzA1MzIzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVB2NiBSb3V0aW5nIFRhYmxlIEl0ZXJhdGlvbiBhbmQgVW5saW5raW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgZmliNl93YWxrZXJfdW5saW5rYCBhbmQgYGlwdjZfcm91dGVfaXRlcl9hY3RpdmVgLiBUaGUgY29kZSBpbmRpY2F0ZXMgdGhhdCBgZmliNl93YWxrZXJfdW5saW5rYCBpcyBkZWZpbmVkIG91dHNpZGUgYENPTkZJR19QUk9DX0ZTYCwgd2hlcmVhcyBgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZWAgaXMgd2l0aGluIGl0LiBUaGlzIHN1Z2dlc3RzIHRoYXQgYElQVjZgIGFuZCBgUFJPQ19GU2AgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgdG8gd2F0Y2guXG5cbk5vdywgbGV0J3MgdHJhY2UgdGhlIGRlcGVuZGVuY2llcy4gYGZpYjZfd2Fsa2VyX3VubGlua2AgaXMgY2FsbGVkIGJ5IGEgdmFyaWV0eSBvZiBmdW5jdGlvbnMgZGVhbGluZyB3aXRoIGR1bXBpbmcgYW5kIHdhbGtpbmcgdGhlIEZJQiAoRm9yd2FyZGluZyBJbmZvcm1hdGlvbiBCYXNlKTogYGZpYjZfZHVtcF9lbmRgLCBgZmliNl9kdW1wX3RhYmxlYCwgYGZpYjZfd2Fsa2AsIGBpcHY2X3JvdXRlX3NlcV9uZXh0YCwgYW5kIGBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcGAuIGBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlYCBpcyBhIHN0YXRpYyBoZWxwZXIgd2l0aGluIGBpcDZfZmliLmNgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IHN1Z2dlc3RzIGl0J3MgbGlrZWx5IG9wdGltaXplZCBieSB0aGUgY29tcGlsZXIuIGBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcGAgKmNhbGxzKiBgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZWAuIFdlIGFsc28gaGF2ZSB0aGUgc2VxIGZpbGUgb3BlcmF0aW9uIGVudHJ5IHBvaW50czogYGlwdjZfcm91dGVfc2VxX3N0YXJ0YCwgYGlwdjZfcm91dGVfc2VxX25leHRgLCBhbmQgYGlwdjZfcm91dGVfc2VxX3N0b3BgLiAgRmluYWxseSwgYGZpYjZfd2Fsa2AgYW5kIGBmaWI2X3dhbGtfY29udGludWVgIGFyZSB0aGUgd2Fsa2VyIG9wZXJhdGlvbnMgdGhlbXNlbHZlcy5cblxuRm9jdXNpbmcgb24gdGhlIG5hdHVyZSBvZiBgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZWAsIGl0J3MgZGVmaW5lZCBhcyBhIGBzdGF0aWMgYm9vbGAgZnVuY3Rpb24uIFRoaXMgbWVhbnMgaXQncyBsaWtlbHkgaW5saW5lZCwgcHJvdmlkaW5nIG9wcG9ydHVuaXR5IGZvciBjb21waWxlciBvcHRpbWl6YXRpb25zLiBgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3BgIGlzIGFsc28gc3RhdGljLCBhbmQgY2FsbGVkIGJ5IGBpcHY2X3JvdXRlX3NlcV9zdG9wYC4gTGlrZXdpc2UsIGBmaWI2X3dhbGtlcl91bmxpbmtgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiAgVGhlIHNlcSBmaWxlIG9wZXJhdGlvbiBmdW5jdGlvbnMgKGBpcHY2X3JvdXRlX3NlcV9zdGFydGAsIGBpcHY2X3JvdXRlX3NlcV9uZXh0YCwgYGlwdjZfcm91dGVfc2VxX3N0b3BgLCBhbmQgYGlwdjZfcm91dGVfc2VxX3Nob3dgKSBhcmUgYWxsIHdpdGhpbiBgaXA2X2ZpYi5jYCBhcyB3ZWxsLlxuXG5HaXZlbiB0aGF0IGBmaWI2X3dhbGtlcl91bmxpbmtgIGlzIHN0YXRpYyBpbiBgaXA2X2ZpYi5jYCwgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBob3cgdGhleSByZWxhdGUuICBUaGUgYGlwdjZfcm91dGVfc2VxX29wc2Agc3RydWN0IGlzIHBpdm90YWwsIGNvbnRhaW5pbmcgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIGZvciB0aGUgc2VxIGZpbGUgb3BlcmF0aW9uczogYC5zdGFydCA9IGlwdjZfcm91dGVfc2VxX3N0YXJ0YCwgYC5uZXh0ID0gaXB2Nl9yb3V0ZV9zZXFfbmV4dGAsIGAuc3RvcCA9IGlwdjZfcm91dGVfc2VxX3N0b3BgLCBhbmQgYC5zaG93ID0gaXB2Nl9yb3V0ZV9zZXFfc2hvd2AuICBBZ2FpbiwgYGZpYjZfd2Fsa2VyX3VubGlua2AgaXMgY2FsbGVkIGJ5IHRob3NlIGZ1bmN0aW9ucy4gSSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgaW4gYGlwNl9maWIuY2AgKG9yIHBvdGVudGlhbGx5IGByb3V0ZS5jYCkgdGhhdCBleGVyY2lzZSB0aGVzZSBwYXRocywgc3VjaCBhcyBgZmliNl93YWxrZXJfbGlua2AsIGBmaWI2X3dhbGtgLCBhbmQgYGluZXQ2X2R1bXBfZmliYC5cblxuRmluYWxseSwgdGhlIGNyaXRpY2FsIG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgKndoZXJlKiBgaXB2Nl9yb3V0ZV9zZXFfb3BzYCBpcyByZWdpc3RlcmVkLiBUaGF0IHdpbGwgcHJvdmlkZSB0aGUgaG9vayBpbnRvIHRoZSBicm9hZGVyIHN5c3RlbSBhbmQgaG93IHRoaXMgYWxsIGludGVncmF0ZXMgaW50byB0aGUgcHJvY2ZzIGludGVyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMTksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTk6MTYuMjA4ODIwNjg2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzAzNTc0MzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjZfcm91dGVfc2VxX29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pcDZfZmliLmg9NTk2PXN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIge1xcbi0tXFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTYwMy1cXG5pbmNsdWRlL25ldC9pcDZfZmliLmg6NjA0OmV4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaXB2Nl9yb3V0ZV9zZXFfb3BzO1xcbmluY2x1ZGUvbmV0L2lwNl9maWIuaC02MDUtXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjgyOD1zdGF0aWMgdm9pZCBpcHY2X3JvdXRlX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI4MzMtXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI4MzQ6Y29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGlwdjZfcm91dGVfc2VxX29wcyA9IHtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjgzNS1cXHQuc3RhcnRcXHQ9IGlwdjZfcm91dGVfc2VxX3N0YXJ0LFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz02ODA0PXN0YXRpYyBpbnQgX19uZXRfaW5pdCBpcDZfcm91dGVfbmV0X2luaXRfbGF0ZShzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTY4MDctXFx0aWYgKCFwcm9jX2NyZWF0ZV9uZXQoXFxcImlwdjZfcm91dGVcXFwiLCAwLCBuZXQtXFx1MDAzZXByb2NfbmV0LFxcbm5ldC9pcHY2L3JvdXRlLmM6NjgwODpcXHRcXHRcXHQgICAgIFxcdTAwMjZpcHY2X3JvdXRlX3NlcV9vcHMsXFxubmV0L2lwdjYvcm91dGUuYy02ODA5LVxcdFxcdFxcdCAgICAgc2l6ZW9mKHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIpKSlcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9Njg5MD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIGlwdjZfcm91dGVfc2VxX2luZm8gPSB7XFxubmV0L2lwdjYvcm91dGUuYzo2ODkxOlxcdC5zZXFfb3BzXFx0XFx0PSBcXHUwMDI2aXB2Nl9yb3V0ZV9zZXFfb3BzLFxcbm5ldC9pcHY2L3JvdXRlLmMtNjg5Mi1cXHQuaW5pdF9zZXFfcHJpdmF0ZVxcdD0gYnBmX2l0ZXJfaW5pdF9zZXFfbmV0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxOToxOC41MTIzOTk1MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MTk5NzkwNDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IEFzc2Vzc21lbnQ6IElQdjYgUm91dGUgV2Fsa2VyIGFuZCBTZXF1ZW5jZSBJdGVyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBjZW50ZXJzIG9uIHRoZXNlIElQdjYtcmVsYXRlZCBmdW5jdGlvbnM6IGBpcHY2X3JvdXRlX3NlcV9zdGFydGAsIGBpcHY2X3JvdXRlX3NlcV9uZXh0YCwgYGlwdjZfcm91dGVfc2VxX3N0b3BgLCBgaXB2Nl9yb3V0ZV9zZXFfc2hvd2AsIGBmaWI2X3dhbGtlcl91bmxpbmtgLCBgZmliNl93YWxrZXJfbGlua2AsIGBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlYCwgYW5kIGBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcGAuIE15IGZpcnN0IHN0ZXAgaXMgdG8gY29uZmlybSB0aGVzZSBhcmUgaXNvbGF0ZWQgb3IgcGFydCBvZiBhIGJyb2FkZXIgc2V0IG9mIHJlbGF0ZWQgZnVuY3Rpb25zLCBzbyBJJ20gY3Jvc3MtcmVmZXJlbmNpbmcgd2l0aGluIGBpcDZfZmliLmNgIGFuZCBgcm91dGUuY2AgZm9yIGFueSB3YWxrZXItcmVsYXRlZCBpbnRlcmFjdGlvbnMuXG5cbk9rYXksIGNoZWNraW5nIGBuZXQvaXB2Ni9pcDZfZmliLmNgLCBjb25maXJtcyB0aG9zZSwgcGx1cyBgZmliNl9kdW1wX3RhYmxlYC4gR29vZCwgdGhpcyBzdXBwb3J0cyB0aGUgaW5pdGlhbCBmb2N1cy5cblxuSXMgdGhpcyBmdXp6aW5nIHRhcmdldCB2aWFibGU/IEFic29sdXRlbHksIHdpdGhvdXQgcXVlc3Rpb24uIE15IHJlYXNvbmluZyBpcyBzb2xpZDogVGhpcyBpcyByZWFjaGFibGUgY29kZTsgdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBtYW5pcHVsYXRlIHRoZSBJUHY2IEZJQiB3YWxrZXIgbGlzdCBtYW5hZ2VtZW50IGFuZCwgaW1wb3J0YW50bHksIHRoZSBpdGVyYXRvciBzdGF0dXMgY2hlY2tzIGR1cmluZyBgL3Byb2MvbmV0L2lwdjZfcm91dGVgIHNlcV9maWxlIHJlYWRzIGFuZCBCUEYgaXRlcmF0b3IgZXhlY3V0aW9uLiBJdOKAmXMgY29yZSBuZXR3b3JraW5nIChJUHY2IEZJQiByb3V0aW5nIHRhYmxlcyksIGFuZCBpdOKAmXMgZGlyZWN0bHkgYWNjZXNzaWJsZSB2aWEgc3RhbmRhcmQgc29ja2V0cywgbmV0bGluaywgb3IgcHJvY2ZzIHdpdGhpbiBhIFFFTVUvc3l6a2FsbGVyIGVudmlyb25tZW50LiBJdCdzIGxvdy1oYW5naW5nIGZydWl0LlxuXG5Ob3csIGxldCdzIHZlcmlmeSBjb25maWd1cmF0aW9uczogYElQVjZgIGFuZCBgUFJPQ19GU2AgYXJlIGVzc2VudGlhbC4gRXhjZWxsZW50LCBlYXN5IGNoZWNrLlxuXG5MZXQncyBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHM6IEknbSBwcmltYXJpbHkgZm9jdXNlZCBvbiBgZmliNl93YWxrZXJfdW5saW5rYCwgYGlwdjZfcm91dGVfaXRlcl9hY3RpdmVgLCBgaXB2Nl9yb3V0ZV9zZXFfbmV4dGAsIGBpcHY2X3JvdXRlX3NlcV9zdGFydGAsIGBpcHY2X3JvdXRlX3NlcV9zdG9wYCwgYW5kIGBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcGAuXG5cbk9rYXksIGxldCdzIGRvIGEgZmluYWwgc2FuaXR5IGNoZWNrLCBlbnN1cmluZyBldmVyeXRoaW5nIGFsaWduczpcblxuKiAgICoqV29ydGhGdXp6aW5nOiBUcnVlLioqIENsZWFyLlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIFNwZWNpZmljYWxseSByZWxhdGVkIHRvIElQdjYgcm91dGUgd2Fsa2VyIGFuZCBzZXEgaXRlcmF0aW9uOiBgZmliNl93YWxrZXJfdW5saW5rYCwgYGlwdjZfcm91dGVfaXRlcl9hY3RpdmVgLCBgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3BgLCBgaXB2Nl9yb3V0ZV9zZXFfc3RvcGAsIGBpcHY2X3JvdXRlX3NlcV9zdGFydGAsIGBpcHY2X3JvdXRlX3NlcV9uZXh0YC4gWWVzLlxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgSVBWNmAsIGBQUk9DX0ZTYC4gQ29uZmlybWVkLlxuXG5BbHJpZ2h0LCBJJ20gcmVhZHkgdG8gcHJlcGFyZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLiBMZXQncyBnZXQgdGhpcyBzZXQgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODQ1LCJPdXRwdXRUb2tlbnMiOjE4MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxOToyNy43MTIxOTMyNTVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTQ4NjQ1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiUFJPQ19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZpYjZfd2Fsa2VyX3VubGlua1wiLFxuICAgIFwiaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZVwiLFxuICAgIFwiaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3N0b3BcIixcbiAgICBcImlwdjZfcm91dGVfc2VxX3N0b3BcIixcbiAgICBcImlwdjZfcm91dGVfc2VxX3N0YXJ0XCIsXG4gICAgXCJpcHY2X3JvdXRlX3NlcV9uZXh0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NiBGSUIgd2Fsa2VyIG1hbmFnZW1lbnQgYW5kIGl0ZXJhdGlvbiBzdGF0ZSBjaGVja2luZyBpbiBuZXQvaXB2Ni9pcDZfZmliLmMgKHVzaW5nIGxpc3RfZGVsX2luaXQgb24gdW5saW5raW5nIGFuZCBjaGVja2luZyAhbGlzdF9lbXB0eSBmb3IgYWN0aXZlIGl0ZXJhdG9yIHN0YXRlKS4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgL3Byb2MvbmV0L2lwdjZfcm91dGUgc2VxX2ZpbGUgb3BlcmF0aW9ucyBhbmQgQlBGIElQdjYgcm91dGUgaXRlcmF0b3JzIGluIHN0YW5kYXJkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJQUk9DX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmliNl93YWxrZXJfdW5saW5rXCIsXG4gICAgXCJpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlXCIsXG4gICAgXCJpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcFwiLFxuICAgIFwiaXB2Nl9yb3V0ZV9zZXFfc3RvcFwiLFxuICAgIFwiaXB2Nl9yb3V0ZV9zZXFfc3RhcnRcIixcbiAgICBcImlwdjZfcm91dGVfc2VxX25leHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJUHY2IEZJQiB3YWxrZXIgbWFuYWdlbWVudCBhbmQgaXRlcmF0aW9uIHN0YXRlIGNoZWNraW5nIGluIG5ldC9pcHY2L2lwNl9maWIuYyAodXNpbmcgbGlzdF9kZWxfaW5pdCBvbiB1bmxpbmtpbmcgYW5kIGNoZWNraW5nICFsaXN0X2VtcHR5IGZvciBhY3RpdmUgaXRlcmF0b3Igc3RhdGUpLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSAvcHJvYy9uZXQvaXB2Nl9yb3V0ZSBzZXFfZmlsZSBvcGVyYXRpb25zIGFuZCBCUEYgSVB2NiByb3V0ZSBpdGVyYXRvcnMgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxOToyNy43ODc2ODY5NTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NDMxODk3MzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTk6MjcuNzg4MjM3ODU0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzQ0MzEzNDIxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGxpc3RfZGVsIHdpdGggbGlzdF9kZWxfaW5pdCBpbiBmaWI2X3dhbGtlcl91bmxpbmsoKSBhbmQgdXBkYXRlcyBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKCkgdG8gY2hlY2sgbGlzdF9lbXB0eShcXHUwMDI2dy1cXHUwMDNlbGgpIGluc3RlYWQgb2YgaW5zcGVjdGluZyB3YWxrZXIgc3RhdGUgYW5kIG5vZGUgcG9pbnRlcnMuIFRoaXMgY2hhbmdlIGZpeGVzIGxpc3QgdHJhY2tpbmcgYW5kIGF2b2lkcyBkb3VibGUgbGlzdCBkZWxldGlvbiAvIGxpc3QgY29ycnVwdGlvbiB3aGVuIHN0b3BwaW5nIHRoZSBJUHY2IHJvdXRlIHNlcSBpdGVyYXRpb24uIEFsbCByZWxldmFudCBsaXN0IHN0cnVjdHVyZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkICh2aWEgSU5JVF9MSVNUX0hFQUQgLyBsaXN0X2RlbF9pbml0IC8gbWVtc2V0KSBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayByaXNrcyBhcmUgaW50cm9kdWNlZC4gU3RhbmRhcmQgZGV0ZWN0b3JzIChLQVNBTiAvIENPTkZJR19ERUJVR19MSVNUKSBjb3ZlciBsaXN0IG1hbmlwdWxhdGlvbiBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gcmlza3MgaW4gdGhpcyBhcmVhLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1YzQ2NGMwMmRiZjA3OGY1ODk5Yjc4NDJjOThiMDRhM2RhODQ3MWQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwODoxNzo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9maWIuYyBiL25ldC9pcHY2L2lwNl9maWIuY1xuaW5kZXggM2UzODJiYTE1NzNlMy4uOWVhNzU3MDNiMzhkNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl9maWIuY1xuKysrIGIvbmV0L2lwdjYvaXA2X2ZpYi5jXG5AQCAtODUsNyArODUsNyBAQCBzdGF0aWMgdm9pZCBmaWI2X3dhbGtlcl9saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxuIHN0YXRpYyB2b2lkIGZpYjZfd2Fsa2VyX3VubGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X3dhbGtlciAqdylcbiB7XG4gXHR3cml0ZV9sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xuLVx0bGlzdF9kZWwoXHUwMDI2dy1cdTAwM2VsaCk7XG4rXHRsaXN0X2RlbF9pbml0KFx1MDAyNnctXHUwMDNlbGgpO1xuIFx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xuIH1cbiBcbkBAIC0yNzYwLDcgKzI3NjAsNyBAQCBzdGF0aWMgdm9pZCAqaXB2Nl9yb3V0ZV9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxuIHN0YXRpYyBib29sIGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcilcbiB7XG4gXHRzdHJ1Y3QgZmliNl93YWxrZXIgKncgPSBcdTAwMjZpdGVyLVx1MDAzZXc7XG4tXHRyZXR1cm4gdy1cdTAwM2Vub2RlIFx1MDAyNlx1MDAyNiAhKHctXHUwMDNlc3RhdGUgPT0gRldTX1UgXHUwMDI2XHUwMDI2IHctXHUwMDNlbm9kZSA9PSB3LVx1MDAzZXJvb3QpO1xuK1x0cmV0dXJuIHctXHUwMDNlbm9kZSBcdTAwMjZcdTAwMjYgIWxpc3RfZW1wdHkoXHUwMDI2dy1cdTAwM2VsaCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTk6MjcuNzg4MjM4OTY0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMjIxNjA3NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIENvZGUgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZmlsZXMgaW52b2x2ZWQsIGFuZCB0aGF0IG1lYW5zIHN0YXJ0aW5nIHdpdGggYG5ldC9pcHY2L2lwNl9maWIuY2AuIFRoYXQncyB3aGVyZSB0aGUgY29kZSBjaGFuZ2UgaXMsIHNvIHRoYXQncyB3aGVyZSB0aGUgYWN0aW9uIGlzLlxuXG5JJ20gdGhpbmtpbmcsIHJpZ2h0LCBsZXQncyB1c2UgdGhlIGxpbmUgbnVtYmVycyBwcm92aWRlZC4gQXJvdW5kIGxpbmVzIDg1IGFuZCAyNzYwLCB0aGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgY29udGV4dHVhbCBncmFzcC4gSSBuZWVkIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCB0aGUgaW1tZWRpYXRlIGltcGFjdCBvZiB0aGUgY2hhbmdlcy5cblxuQWxyaWdodCwgdGltZSB0byBnZXQgdGhlIGNvZGUuIEknbGwgcmVhY2ggZm9yIGByZWFkLWZpbGVgIGFuZCBwdWxsIGluIHRoZSBjb250ZW50cyBvZiBgbmV0L2lwdjYvaXA2X2ZpYi5jYC4gR290dGEgZ2V0IHRoZSBjb2RlIGluIGZyb250IG9mIG1lIHRvIHN0YXJ0IG1ha2luZyBzb21lIGFzc2Vzc21lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjU1LCJPdXRwdXRUb2tlbnMiOjc4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxOTozOS4wMDk4NDkzODRaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwNl9maWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3MDpcXHQgKlxcdHJlc3VsdCBvZiByZWRpcmVjdHMsIHBhdGggTVRVIGNoYW5nZXMsIGV0Yy5cXG4gIDcxOlxcdCAqL1xcbiAgNzI6XFx0XFxuICA3MzpcXHRzdGF0aWMgdm9pZCBmaWI2X2djX3RpbWVyX2NiKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcXG4gIDc0OlxcdFxcbiAgNzU6XFx0I2RlZmluZSBGT1JfV0FMS0VSUyhuZXQsIHcpIFxcXFxcXG4gIDc2OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkodywgXFx1MDAyNihuZXQpLVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2VycywgbGgpXFxuICA3NzpcXHRcXG4gIDc4OlxcdHN0YXRpYyB2b2lkIGZpYjZfd2Fsa2VyX2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpXFxuICA3OTpcXHR7XFxuICA4MDpcXHRcXHR3cml0ZV9sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XFxuICA4MTpcXHRcXHRsaXN0X2FkZChcXHUwMDI2dy1cXHUwMDNlbGgsIFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl93YWxrZXJzKTtcXG4gIDgyOlxcdFxcdHdyaXRlX3VubG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xcbiAgODM6XFx0fVxcbiAgODQ6XFx0XFxuICA4NTpcXHRzdGF0aWMgdm9pZCBmaWI2X3dhbGtlcl91bmxpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpXFxuICA4NjpcXHR7XFxuICA4NzpcXHRcXHR3cml0ZV9sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XFxuICA4ODpcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZ3LVxcdTAwM2VsaCk7XFxuICA4OTpcXHRcXHR3cml0ZV91bmxvY2tfYmgoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcXG4gIDkwOlxcdH1cXG4gIDkxOlxcdFxcbiAgOTI6XFx0c3RhdGljIGludCBmaWI2X25ld19zZXJudW0oc3RydWN0IG5ldCAqbmV0KVxcbiAgOTM6XFx0e1xcbiAgOTQ6XFx0XFx0aW50IG5ldywgb2xkID0gYXRvbWljX3JlYWQoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5maWI2X3Nlcm51bSk7XFxuICA5NTpcXHRcXG4gIDk2OlxcdFxcdGRvIHtcXG4gIDk3OlxcdFxcdFxcdG5ldyA9IG9sZCBcXHUwMDNjIElOVF9NQVggPyBvbGQgKyAxIDogMTtcXG4gIDk4OlxcdFxcdH0gd2hpbGUgKCFhdG9taWNfdHJ5X2NtcHhjaGcoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5maWI2X3Nlcm51bSwgXFx1MDAyNm9sZCwgbmV3KSk7XFxuICA5OTpcXHRcXG4gMTAwOlxcdFxcdHJldHVybiBuZXc7XFxuIDEwMTpcXHR9XFxuIDEwMjpcXHRcXG4gMTAzOlxcdGVudW0ge1xcbiAxMDQ6XFx0XFx0RklCNl9OT19TRVJOVU1fQ0hBTkdFID0gMCxcXG4gMTA1OlxcdH07XFxuIDEwNjpcXHRcXG4gMTA3OlxcdHZvaWQgZmliNl91cGRhdGVfc2VybnVtKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpKVxcbiAxMDg6XFx0e1xcbiAxMDk6XFx0XFx0c3RydWN0IGZpYjZfbm9kZSAqZm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjE5OjM5LjAxMDA4MjA1NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvaXA2X2ZpYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3NTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3NTA6XFx0XFx0aWYgKGl0ZXItXFx1MDAzZXRibCkge1xcbjI3NTE6XFx0XFx0XFx0bG9mZl90IHAgPSAwO1xcbjI3NTI6XFx0XFxuMjc1MzpcXHRcXHRcXHRpcHY2X3JvdXRlX3NlcV9zZXR1cF93YWxrKGl0ZXIsIG5ldCk7XFxuMjc1NDpcXHRcXHRcXHRyZXR1cm4gaXB2Nl9yb3V0ZV9zZXFfbmV4dChzZXEsIE5VTEwsIFxcdTAwMjZwKTtcXG4yNzU1OlxcdFxcdH0gZWxzZSB7XFxuMjc1NjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4yNzU3OlxcdFxcdH1cXG4yNzU4OlxcdH1cXG4yNzU5OlxcdFxcbjI3NjA6XFx0c3RhdGljIGJvb2wgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZShzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyKVxcbjI3NjE6XFx0e1xcbjI3NjI6XFx0XFx0c3RydWN0IGZpYjZfd2Fsa2VyICp3ID0gXFx1MDAyNml0ZXItXFx1MDAzZXc7XFxuMjc2MzpcXHRcXHRyZXR1cm4gdy1cXHUwMDNlbm9kZSBcXHUwMDI2XFx1MDAyNiAhbGlzdF9lbXB0eShcXHUwMDI2dy1cXHUwMDNlbGgpO1xcbjI3NjQ6XFx0fVxcbjI3NjU6XFx0XFxuMjc2NjpcXHRzdGF0aWMgdm9pZCBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4yNzY3OlxcdFxcdF9fcmVsZWFzZXMoUkNVKVxcbjI3Njg6XFx0e1xcbjI3Njk6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7XFxuMjc3MDpcXHRcXHRzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyID0gc2VxLVxcdTAwM2Vwcml2YXRlO1xcbjI3NzE6XFx0XFxuMjc3MjpcXHRcXHRpZiAoaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZShpdGVyKSlcXG4yNzczOlxcdFxcdFxcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIFxcdTAwMjZpdGVyLVxcdTAwM2V3KTtcXG4yNzc0OlxcdFxcbjI3NzU6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjc3NjpcXHR9XFxuMjc3NzpcXHRcXG4yNzc4OlxcdCNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcXG4yNzc5OlxcdHN0YXRpYyBpbnQgaXB2Nl9yb3V0ZV9wcm9nX3NlcV9zaG93KHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4yNzgwOlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcXG4yNzgxOlxcdFxcdFxcdFxcdFxcdCAgICB2b2lkICp2KVxcbjI3ODI6XFx0e1xcbjI3ODM6XFx0XFx0c3RydWN0IGJwZl9pdGVyX19pcHY2X3JvdXRlIGN0eDtcXG4yNzg0OlxcdFxcbjI3ODU6XFx0XFx0Y3R4Lm1ldGEgPSBtZXRhO1xcbjI3ODY6XFx0XFx0Y3R4LnJ0ID0gdjtcXG4yNzg3OlxcdFxcdHJldHVybiBicGZfaXRlcl9ydW5fcHJvZyhwcm9nLCBcXHUwMDI2Y3R4KTtcXG4yNzg4OlxcdH1cXG4yNzg5OlxcdFxcbjI3OTA6XFx0c3RhdGljIGludCBpcHY2X3JvdXRlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbjI3OTE6XFx0e1xcbjI3OTI6XFx0XFx0c3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlciA9IHNlcS1cXHUwMDNlcHJpdmF0ZTtcXG4yNzkzOlxcdFxcdHN0cnVjdCBicGZfaXRlcl9tZXRhIG1ldGE7XFxuMjc5NDpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuMjc5NTpcXHRcXHRpbnQgcmV0O1xcbjI3OTY6XFx0XFxuMjc5NzpcXHRcXHRtZXRhLnNlcSA9IHNlcTtcXG4yNzk4OlxcdFxcdHByb2cgPSBicGZfaXRlcl9nZXRfaW5mbyhcXHUwMDI2bWV0YSwgZmFsc2UpO1xcbjI3OTk6XFx0XFx0aWYgKCFwcm9nKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxOTozOS4wMTAzMDMwMTRaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI2NDIyNzQwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgd2Fsa2luZyB0aHJvdWdoIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBJUHY2IFJvdXRpbmcgVGFibGUgSXRlcmF0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBpcHY2X3JvdXRlX2l0ZXJgIGFuZCBgZmliNl93YWxrZXJgIGFyZSBiZWluZyBzZXQgdXAgYW5kIHVzZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHN0YXJ0IHdpdGggdGhlIG9idmlvdXM6IGZpbmQgb3V0IHdoZXJlIGBpcHY2X3JvdXRlX2l0ZXJgIGlzICpkZWZpbmVkKiBhbmQgKnJlZmVyZW5jZWQqLiBTaW5jZSB0aGlzIGlzIGxpa2VseSB3aXRoaW4gdGhlIElQdjYgcm91dGluZyBpbXBsZW1lbnRhdGlvbiwgYG5ldC9pcHY2L2lwNl9maWIuY2AgaXMgdGhlIHByaW1lIHN1c3BlY3QuIEknbGwgcmVhY2ggZm9yIGEgYGdyZXBgIGNvbW1hbmQgdG8gc2VhcmNoIGRpcmVjdGx5IHdpdGhpbiB0aGF0IGZpbGUgZm9yIGluc3RhbmNlcyBvZiBgaXB2Nl9yb3V0ZV9pdGVyYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIGl0cyB1c2FnZS4gSSdtIGV4cGVjdGluZyB0aGlzIHdpbGwgdW52ZWlsIHNvbWUga2V5IGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgaW50ZWdyYWwgdG8gd2Fsa2luZyB0aGUgSVB2NiByb3V0aW5nIHRhYmxlLiBMZXQncyBzZWUgd2hhdCB3ZSB1bmNvdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTUzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxOTo0Mi4yNzQ1MzM1MjNaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNDEzODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjZfcm91dGVfaXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaXA2X2ZpYi5jPTI2MDQ9c3RhdGljIGludCBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNjA2LVxcdHN0cnVjdCBmaWI2X2luZm8gKnJ0ID0gdjtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjYwNzpcXHRzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyID0gc2VxLVxcdTAwM2Vwcml2YXRlO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yNjA4LVxcdHN0cnVjdCBmaWI2X25oICpmaWI2X25oID0gcnQtXFx1MDAzZWZpYjZfbmg7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjYzNz1zdGF0aWMgaW50IGlwdjZfcm91dGVfeWllbGQoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNjM4LXtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjYzOTpcXHRzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyID0gdy1cXHUwMDNlYXJncztcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjY0MC1cXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNjU1LVxcbm5ldC9pcHY2L2lwNl9maWIuYzoyNjU2OnN0YXRpYyB2b2lkIGlwdjZfcm91dGVfc2VxX3NldHVwX3dhbGsoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcixcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjY1Ny1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjY3MD1zdGF0aWMgc3RydWN0IGZpYjZfdGFibGUgKmlwdjZfcm91dGVfc2VxX25leHRfdGFibGUoc3RydWN0IGZpYjZfdGFibGUgKnRibCxcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNjkwLVxcbm5ldC9pcHY2L2lwNl9maWIuYzoyNjkxOnN0YXRpYyB2b2lkIGlwdjZfcm91dGVfY2hlY2tfc2VybnVtKHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIpXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI2OTIte1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTI3MDQ9c3RhdGljIHZvaWQgKmlwdjZfcm91dGVfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3MDgtXFx0c3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI3MDk6XFx0c3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlciA9IHNlcS1cXHUwMDNlcHJpdmF0ZTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjcxMC1cXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0yNzQwPXN0YXRpYyB2b2lkICppcHY2X3JvdXRlX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc0My1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6Mjc0NDpcXHRzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyID0gc2VxLVxcdTAwM2Vwcml2YXRlO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yNzQ1LVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NTktXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI3NjA6c3RhdGljIGJvb2wgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZShzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyKVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNzYxLXtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0yNzY2PXN0YXRpYyB2b2lkIGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NjktXFx0c3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI3NzA6XFx0c3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlciA9IHNlcS1cXHUwMDNlcHJpdmF0ZTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc3MS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6Mjc3MjpcXHRpZiAoaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZShpdGVyKSlcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc3My1cXHRcXHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCBcXHUwMDI2aXRlci1cXHUwMDNldyk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9Mjc5MD1zdGF0aWMgaW50IGlwdjZfcm91dGVfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3OTEte1xcbm5ldC9pcHY2L2lwNl9maWIuYzoyNzkyOlxcdHN0cnVjdCBpcHY2X3JvdXRlX2l0ZXIgKml0ZXIgPSBzZXEtXFx1MDAzZXByaXZhdGU7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3OTMtXFx0c3RydWN0IGJwZl9pdGVyX21ldGEgbWV0YTtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9NjgwND1zdGF0aWMgaW50IF9fbmV0X2luaXQgaXA2X3JvdXRlX25ldF9pbml0X2xhdGUoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy02ODA4LVxcdFxcdFxcdCAgICAgXFx1MDAyNmlwdjZfcm91dGVfc2VxX29wcyxcXG5uZXQvaXB2Ni9yb3V0ZS5jOjY4MDk6XFx0XFx0XFx0ICAgICBzaXplb2Yoc3RydWN0IGlwdjZfcm91dGVfaXRlcikpKVxcbm5ldC9pcHY2L3JvdXRlLmMtNjgxMC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9Njg5MD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIGlwdjZfcm91dGVfc2VxX2luZm8gPSB7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTY4OTMtXFx0LmZpbmlfc2VxX3ByaXZhdGVcXHQ9IGJwZl9pdGVyX2Zpbmlfc2VxX25ldCxcXG5uZXQvaXB2Ni9yb3V0ZS5jOjY4OTQ6XFx0LnNlcV9wcml2X3NpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyKSxcXG5uZXQvaXB2Ni9yb3V0ZS5jLTY4OTUtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTk6NDIuMzM2OTU5MzkyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5NDI4MTc4NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIElQdjYgRklCIFdhbGtlciBpbiBuZXQvaXB2Ni9pcDZfZmliLmMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBJUHY2IEZJQi4gSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHJvdXRlIHdhbGtlciBhbmQgaXRzIHJlbGF0ZWQgZnVuY3Rpb25zIGZ1bmN0aW9uLiBUaW1lIHRvIGp1bXAgaW50byBsaW5lcyAyNjUwLTI3NTAgb2YgYG5ldC9pcHY2L2lwNl9maWIuY2AuIEknbSBnb2luZyB0byBmb2N1cyBvbiBgaXB2Nl9yb3V0ZV9zZXFfc2V0dXBfd2Fsa2AsIGBmaWI2X3dhbGtlcl9saW5rYCwgYW5kIHRoZSBvdGhlciBwbGF5ZXJzIGluIHRoaXMgbGl0dGxlIHBlcmZvcm1hbmNlIG9mIHJvdXRlIGxvb2t1cC4gSSBleHBlY3QgdG8gc2VlIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBkYXRhIHN0cnVjdHVyZXMsIHRoZSBsb2dpYyBmb3Igd2Fsa2luZyB0aHJvdWdoIHRoZSBGSUIgdHJlZSwgYW5kIHdoYXRldmVyIG9wdGltaXphdGlvbnMgdGhleSdyZSBlbXBsb3lpbmcuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgYnVncykgaGFwcGVuIHdoZW4gcm91dGluZyBJUHY2IHRyYWZmaWMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0aGUgY29tcGxleGl0aWVzIG9mIHByZWZpeCBtYXRjaGluZywgbG9uZ2VzdCBwcmVmaXggbWF0Y2ggKExQTSksIGFuZCBhbnkgYXNzb2NpYXRlZCBjYWNoaW5nLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyB0cmlja3Mgb3Igb3B0aW1pemF0aW9ucyBpbiBwbGF5IGhlcmUuIFRpbWUgdG8gZ2V0IGRvd24gYW5kIGRpcnR5IHdpdGggdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MDgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxOTo0Ny4yNzk3ODAyMzJaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwNl9maWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjUwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjUwOlxcdFxcdFxcdFxcdHJldHVybiAxO1xcbjI2NTE6XFx0XFx0fSB3aGlsZSAoaXRlci1cXHUwMDNldy5sZWFmKTtcXG4yNjUyOlxcdFxcbjI2NTM6XFx0XFx0cmV0dXJuIDA7XFxuMjY1NDpcXHR9XFxuMjY1NTpcXHRcXG4yNjU2OlxcdHN0YXRpYyB2b2lkIGlwdjZfcm91dGVfc2VxX3NldHVwX3dhbGsoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcixcXG4yNjU3OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXQgKm5ldClcXG4yNjU4OlxcdHtcXG4yNjU5OlxcdFxcdG1lbXNldChcXHUwMDI2aXRlci1cXHUwMDNldywgMCwgc2l6ZW9mKGl0ZXItXFx1MDAzZXcpKTtcXG4yNjYwOlxcdFxcdGl0ZXItXFx1MDAzZXcuZnVuYyA9IGlwdjZfcm91dGVfeWllbGQ7XFxuMjY2MTpcXHRcXHRpdGVyLVxcdTAwM2V3LnJvb3QgPSBcXHUwMDI2aXRlci1cXHUwMDNldGJsLVxcdTAwM2V0YjZfcm9vdDtcXG4yNjYyOlxcdFxcdGl0ZXItXFx1MDAzZXcuc3RhdGUgPSBGV1NfSU5JVDtcXG4yNjYzOlxcdFxcdGl0ZXItXFx1MDAzZXcubm9kZSA9IGl0ZXItXFx1MDAzZXcucm9vdDtcXG4yNjY0OlxcdFxcdGl0ZXItXFx1MDAzZXcuYXJncyA9IGl0ZXI7XFxuMjY2NTpcXHRcXHRpdGVyLVxcdTAwM2VzZXJudW0gPSBSRUFEX09OQ0UoaXRlci1cXHUwMDNldy5yb290LVxcdTAwM2Vmbl9zZXJudW0pO1xcbjI2NjY6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNml0ZXItXFx1MDAzZXcubGgpO1xcbjI2Njc6XFx0XFx0ZmliNl93YWxrZXJfbGluayhuZXQsIFxcdTAwMjZpdGVyLVxcdTAwM2V3KTtcXG4yNjY4OlxcdH1cXG4yNjY5OlxcdFxcbjI2NzA6XFx0c3RhdGljIHN0cnVjdCBmaWI2X3RhYmxlICppcHY2X3JvdXRlX3NlcV9uZXh0X3RhYmxlKHN0cnVjdCBmaWI2X3RhYmxlICp0YmwsXFxuMjY3MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldCAqbmV0KVxcbjI2NzI6XFx0e1xcbjI2NzM6XFx0XFx0dW5zaWduZWQgaW50IGg7XFxuMjY3NDpcXHRcXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTtcXG4yNjc1OlxcdFxcbjI2NzY6XFx0XFx0aWYgKHRibCkge1xcbjI2Nzc6XFx0XFx0XFx0aCA9ICh0YmwtXFx1MDAzZXRiNl9pZCBcXHUwMDI2IChGSUI2X1RBQkxFX0hBU0hTWiAtIDEpKSArIDE7XFxuMjY3ODpcXHRcXHRcXHRub2RlID0gcmN1X2RlcmVmZXJlbmNlKGhsaXN0X25leHRfcmN1KFxcdTAwMjZ0YmwtXFx1MDAzZXRiNl9obGlzdCkpO1xcbjI2Nzk6XFx0XFx0fSBlbHNlIHtcXG4yNjgwOlxcdFxcdFxcdGggPSAwO1xcbjI2ODE6XFx0XFx0XFx0bm9kZSA9IE5VTEw7XFxuMjY4MjpcXHRcXHR9XFxuMjY4MzpcXHRcXG4yNjg0OlxcdFxcdHdoaWxlICghbm9kZSBcXHUwMDI2XFx1MDAyNiBoIFxcdTAwM2MgRklCNl9UQUJMRV9IQVNIU1opIHtcXG4yNjg1OlxcdFxcdFxcdG5vZGUgPSByY3VfZGVyZWZlcmVuY2UoXFxuMjY4NjpcXHRcXHRcXHRcXHRobGlzdF9maXJzdF9yY3UoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5maWJfdGFibGVfaGFzaFtoKytdKSk7XFxuMjY4NzpcXHRcXHR9XFxuMjY4ODpcXHRcXHRyZXR1cm4gaGxpc3RfZW50cnlfc2FmZShub2RlLCBzdHJ1Y3QgZmliNl90YWJsZSwgdGI2X2hsaXN0KTtcXG4yNjg5OlxcdH1cXG4yNjkwOlxcdFxcbjI2OTE6XFx0c3RhdGljIHZvaWQgaXB2Nl9yb3V0ZV9jaGVja19zZXJudW0oc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcilcXG4yNjkyOlxcdHtcXG4yNjkzOlxcdFxcdGludCBzZXJudW0gPSBSRUFEX09OQ0UoaXRlci1cXHUwMDNldy5yb290LVxcdTAwM2Vmbl9zZXJudW0pO1xcbjI2OTQ6XFx0XFxuMjY5NTpcXHRcXHRpZiAoaXRlci1cXHUwMDNlc2VybnVtICE9IHNlcm51bSkge1xcbjI2OTY6XFx0XFx0XFx0aXRlci1cXHUwMDNlc2VybnVtID0gc2VybnVtO1xcbjI2OTc6XFx0XFx0XFx0aXRlci1cXHUwMDNldy5zdGF0ZSA9IEZXU19JTklUO1xcbjI2OTg6XFx0XFx0XFx0aXRlci1cXHUwMDNldy5ub2RlID0gaXRlci1cXHUwMDNldy5yb290O1xcbjI2OTk6XFx0XFx0XFx0V0FSTl9PTihpdGVyLVxcdTAwM2V3LnNraXApO1xcbjI3MDA6XFx0XFx0XFx0aXRlci1cXHUwMDNldy5za2lwID0gaXRlci1cXHUwMDNldy5jb3VudDtcXG4yNzAxOlxcdFxcdH1cXG4yNzAyOlxcdH1cXG4yNzAzOlxcdFxcbjI3MDQ6XFx0c3RhdGljIHZvaWQgKmlwdjZfcm91dGVfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxcbjI3MDU6XFx0e1xcbjI3MDY6XFx0XFx0aW50IHI7XFxuMjcwNzpcXHRcXHRzdHJ1Y3QgZmliNl9pbmZvICpuO1xcbjI3MDg6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7XFxuMjcwOTpcXHRcXHRzdHJ1Y3QgaXB2Nl9yb3V0ZV9pdGVyICppdGVyID0gc2VxLVxcdTAwM2Vwcml2YXRlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxOTo0Ny4yNzk5OTkwNDJaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzI2NjcxODkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQdjYgUm91dGUgV2Fsa2VyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgdHdvIGZ1bmN0aW9uczogYGZpYjZfd2Fsa2VyX3VubGlua2AgYW5kIGBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlYC4gU3BlY2lmaWNhbGx5LCBgbGlzdF9kZWwoXHUwMDI2dy1cdTAwM2VsaClgIGJlY29tZXMgYGxpc3RfZGVsX2luaXQoXHUwMDI2dy1cdTAwM2VsaClgIGFuZCB0aGUgcmV0dXJuIGNvbmRpdGlvbiBpbiBgaXB2Nl9yb3V0ZV9pdGVyX2FjdGl2ZWAgaXMgY2hhbmdlZCBmcm9tIGEgbm9kZS9zdGF0ZSBjaGVjayB0byBgIWxpc3RfZW1wdHkoXHUwMDI2dy1cdTAwM2VsaClgLiBUaGUgY3JpdGljYWwgYXNwZWN0IGhlcmUgaXMgdGhlIHNoaWZ0IGZyb20gYW4gaW5kaXJlY3QgY2hlY2sgb2Ygd2Fsa2VyIHN0YXRlIHRvIGEgZGlyZWN0IGNoZWNrIG9mIGxpc3QgbWVtYmVyc2hpcC5cblxuV2h5PyBXZWxsLCBpdCBsb29rcyBsaWtlIHRoZXJlIHdlcmUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMuIFRoZSBgaXB2Nl9yb3V0ZV9zZXFfc2V0dXBfd2Fsa2AgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHdhbGtlciBhbmQgbGlua3MgaXQgdG8gYG5ldC1cdTAwM2VpcHY2LmZpYjZfd2Fsa2Vyc2AuIENvbnZlcnNlbHksIGBpcHY2X3JvdXRlX25hdGl2ZV9zZXFfc3RvcGAgY2hlY2tzIGlmIHRoZSB3YWxrZXIgaXMgXCJhY3RpdmVcIiB2aWEgYSBjaGVjayBvbiBhbiBwb3RlbnRpYWxseSBmbGF3ZWQgc3RhdGUgY2hlY2ssIGFuZCBpZiBzbywgdW5saW5rcyBpdC4gVGhlIHByZXZpb3VzIGNvbmRpdGlvbiBmb3IgYWN0aXZlLW5lc3MgaW4gYGlwdjZfcm91dGVfaXRlcl9hY3RpdmVgIHdhcyBzdXNwZWN0LiBJdCB3YXMgdHJ5aW5nIHRvIGluZmVyIGxpc3QgbWVtYmVyc2hpcCBiYXNlZCBvbiB0aGUgd2Fsa2VyJ3Mgbm9kZSBhbmQgc3RhdGUsIHdoaWNoIGNvdWxkIGJlY29tZSBvdXQgb2Ygc3luYywgb3IgYWxsb3cgZm9yIG11bHRpcGxlIGNhbGxzIHRvIGBzZXFfc3RvcGAsIGxlYWRpbmcgdG8gaXNzdWVzIGxpa2UgZG91YmxlIGBsaXN0X2RlbGAgY2FsbHMsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcywgb3IgbGlzdCBjb3JydXB0aW9uLCBvciBmYWlsaW5nIHRvIHJlbW92ZSB0aGUgd2Fsa2VyIGF0IGFsbCwgd2hpY2ggd291bGQgbGVhayB0aGUgd2Fsa2VyLiBUaGUgbmV3LCBtb3JlIGRpcmVjdCBhcHByb2FjaCB1c2luZyBgbGlzdF9kZWxfaW5pdGAgYW5kIGBsaXN0X2VtcHR5YCBhcHBlYXJzIHRvIGJlIGEgbXVjaCBjbGVhbmVyIHNvbHV0aW9uIHRvIGFjY3VyYXRlbHkgdHJhY2sgbGlzdCBtZW1iZXJzaGlwIGFuZCBwcmV2ZW50IHRob3NlIGxpc3QtcmVsYXRlZCBtZW1vcnkgaXNzdWVzLlxuXG5Ob3csIGZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLCBsZXQncyBzZWUgaWYgdGhpcyBpbnRyb2R1Y2VzIG9yIGVsaW1pbmF0ZXMgYW55IHZ1bG5lcmFiaWxpdGllcy4gVGhlIGNvZGUncyBpbml0aWFsaXphdGlvbiB2aWEgYG1lbXNldChcdTAwMjZpdGVyLVx1MDAzZXcsIDAsIHNpemVvZihpdGVyLVx1MDAzZXcpKWAgYW5kIGBJTklUX0xJU1RfSEVBRChcdTAwMjZpdGVyLVx1MDAzZXcubGgpYCBpcyBjbGVhciwgYW5kIGBsaXN0X2RlbF9pbml0YCBjb3JyZWN0bHkgcmVpbml0aWFsaXplcyB0aGUgbGlzdCBoZWFkLiBUaGUgYGxpc3RfZW1wdHlgIGNoZWNrLCB3aGljaCBleGFtaW5lcyBgdy1cdTAwM2VsaC5uZXh0ID09IFx1MDAyNnctXHUwMDNlbGhgLCBpcyBzdHJhaWdodGZvcndhcmQuIFRoZXJlJ3Mgbm8gb2J2aW91cyByZWFkaW5nIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIG5vIGRpcmVjdCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgZXZpZGVudC4gVGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBjbGVhciwgbGlzdC1yZWxhdGVkIGJ1Zy4gU3BlY2lmaWNhbGx5LCBsaXN0IGNvcnJ1cHRpb24sIGRvdWJsZSBsaXN0IGRlbGV0aW9uLCBvciBpbmFjY3VyYXRlIHRyYWNraW5nIG9mIHdhbGtlciBsaXN0IG1lbWJlcnNoaXAuIEl0IGRlYWxzIHdpdGggbGlzdCBtYW5pcHVsYXRpb24sIGFuZCBhbnkgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHNob3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgbGlzdCBoYXJkZW5pbmcsIEtBU0FOLCBvciBgQ09ORklHX0RFQlVHX0xJU1RgLiBJJ2Qgd2FudCB0byBjaGVjayBpZiBhbnkgb3RoZXIgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggYHctXHUwMDNlbGhgIG9yIHRoZSBgZmliNl93YWxrZXJgIHN0cnVjdCwgYnV0IHRoaXMgaXMgYSBzb2xpZCBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkwNiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjE5OjU0LjU0NjcyMDcxN1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1NzcwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmliNl93YWxrZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9maWIuYz00Mj1zdHJ1Y3QgZmliNl9jbGVhbmVyIHtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6NDM6XFx0c3RydWN0IGZpYjZfd2Fsa2VyIHc7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTQ0LVxcdHN0cnVjdCBuZXQgKm5ldDtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz02MD1zdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqZmliNl9yZXBhaXJfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtNjItXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZmliNl9ub2RlICpmbik7XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjYzOnN0YXRpYyBpbnQgZmliNl93YWxrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KTtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6NjQ6c3RhdGljIGludCBmaWI2X3dhbGtfY29udGludWUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtNjUtXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9NzM9c3RhdGljIHZvaWQgZmliNl9nY190aW1lcl9jYihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtNzUtI2RlZmluZSBGT1JfV0FMS0VSUyhuZXQsIHcpIFxcXFxcXG5uZXQvaXB2Ni9pcDZfZmliLmM6NzY6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh3LCBcXHUwMDI2KG5ldCktXFx1MDAzZWlwdjYuZmliNl93YWxrZXJzLCBsaClcXG5uZXQvaXB2Ni9pcDZfZmliLmMtNzctXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjc4OnN0YXRpYyB2b2lkIGZpYjZfd2Fsa2VyX2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl93YWxrZXIgKncpXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTc5LXtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6ODA6XFx0d3JpdGVfbG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xcbm5ldC9pcHY2L2lwNl9maWIuYzo4MTpcXHRsaXN0X2FkZChcXHUwMDI2dy1cXHUwMDNlbGgsIFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl93YWxrZXJzKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6ODI6XFx0d3JpdGVfdW5sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTgzLX1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtODQtXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjg1OnN0YXRpYyB2b2lkIGZpYjZfd2Fsa2VyX3VubGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X3dhbGtlciAqdylcXG5uZXQvaXB2Ni9pcDZfZmliLmMtODYte1xcbm5ldC9pcHY2L2lwNl9maWIuYzo4NzpcXHR3cml0ZV9sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTg4LVxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnctXFx1MDAzZWxoKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6ODk6XFx0d3JpdGVfdW5sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTkwLX1cXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz00NDg9c3RhdGljIGludCBmaWI2X3J0X2R1bXAoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2R1bXBfYXJnICphcmcpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtNDY5LVxcbm5ldC9pcHY2L2lwNl9maWIuYzo0NzA6c3RhdGljIGludCBmaWI2X25vZGVfZHVtcChzdHJ1Y3QgZmliNl93YWxrZXIgKncpXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTQ3MS17XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9NDc5PXN0YXRpYyBpbnQgZmliNl90YWJsZV9kdW1wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfdGFibGUgKnRiLFxcbm5ldC9pcHY2L2lwNl9maWIuYzo0ODA6XFx0XFx0XFx0ICAgc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbm5ldC9pcHY2L2lwNl9maWIuYy00ODEte1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTQ5Mj1pbnQgZmliNl90YWJsZXNfZHVtcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtNDk1LVxcdHN0cnVjdCBmaWI2X2R1bXBfYXJnIGFyZztcXG5uZXQvaXB2Ni9pcDZfZmliLmM6NDk2OlxcdHN0cnVjdCBmaWI2X3dhbGtlciAqdztcXG5uZXQvaXB2Ni9pcDZfZmliLmMtNDk3LVxcdHVuc2lnbmVkIGludCBoO1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTUyNy1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6NTI4OnN0YXRpYyBpbnQgZmliNl9kdW1wX25vZGUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbm5ldC9pcHY2L2lwNl9maWIuYy01Mjkte1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTUzMi1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6NTMzOlxcdGZvcl9lYWNoX2ZpYjZfd2Fsa2VyX3J0KHcpIHtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtNTM0LVxcdFxcdHJlcyA9IHJ0Nl9kdW1wX3JvdXRlKHJ0LCB3LVxcdTAwM2VhcmdzLCB3LVxcdTAwM2Vza2lwX2luX25vZGUpO1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTU2Mj1zdGF0aWMgdm9pZCBmaWI2X2R1bXBfZW5kKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy01NjQtXFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoY2ItXFx1MDAzZXNrYi1cXHUwMDNlc2spO1xcbm5ldC9pcHY2L2lwNl9maWIuYzo1NjU6XFx0c3RydWN0IGZpYjZfd2Fsa2VyICp3ID0gKHZvaWQgKiljYi1cXHUwMDNlYXJnc1syXTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtNTY2LVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTU2OS1cXHRcXHRcXHRjYi1cXHUwMDNlYXJnc1s0XSA9IDA7XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjU3MDpcXHRcXHRcXHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCB3KTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtNTcxLVxcdFxcdH1cXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz01ODU9c3RhdGljIGludCBmaWI2X2R1bXBfdGFibGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTU4OC1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6NTg5OlxcdHN0cnVjdCBmaWI2X3dhbGtlciAqdztcXG5uZXQvaXB2Ni9pcDZfZmliLmMtNTkwLVxcdGludCByZXM7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtNjIyLVxcdFxcdGlmIChyZXMgXFx1MDAzYz0gMCkge1xcbm5ldC9pcHY2L2lwNl9maWIuYzo2MjM6XFx0XFx0XFx0ZmliNl93YWxrZXJfdW5saW5rKG5ldCwgdyk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTYyNC1cXHRcXHRcXHRjYi1cXHUwMDNlYXJnc1s0XSA9IDA7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9NjMxPXN0YXRpYyBpbnQgaW5ldDZfZHVtcF9maWIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTYzOS1cXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6NjQwOlxcdHN0cnVjdCBmaWI2X3dhbGtlciAqdztcXG5uZXQvaXB2Ni9pcDZfZmliLmMtNjQxLVxcdHN0cnVjdCBmaWI2X3RhYmxlICp0YjtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0xODQxPXN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICpmaWI2X3JlcGFpcl90cmVlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0xODQ3LVxcdHN0cnVjdCBmaWI2X25vZGUgKmNoaWxkO1xcbm5ldC9pcHY2L2lwNl9maWIuYzoxODQ4OlxcdHN0cnVjdCBmaWI2X3dhbGtlciAqdztcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMTg0OS1cXHRpbnQgaXRlciA9IDA7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMTkzMi1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MTkzMzpcXHRcXHRyZWFkX2xvY2soXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMTkzNC1cXHRcXHRGT1JfV0FMS0VSUyhuZXQsIHcpIHtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0xOTU2LVxcdFxcdH1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MTk1NzpcXHRcXHRyZWFkX3VubG9jayhcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0xOTU4LVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTE5Njk9c3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0xOTczLVxcdHN0cnVjdCBmaWI2X2luZm8gKmxlYWYsICpyZXBsYWNlX3J0ID0gTlVMTDtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MTk3NDpcXHRzdHJ1Y3QgZmliNl93YWxrZXIgKnc7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTE5NzUtXFx0c3RydWN0IGZpYjZfaW5mbyAqcnQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKCpydHAsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjAyNS1cXHQvKiBBZGp1c3Qgd2Fsa2VycyAqL1xcbm5ldC9pcHY2L2lwNl9maWIuYzoyMDI2OlxcdHJlYWRfbG9jayhcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2VyX2xvY2spO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yMDI3LVxcdEZPUl9XQUxLRVJTKG5ldCwgdykge1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwMzUtXFx0fVxcbm5ldC9pcHY2L2lwNl9maWIuYzoyMDM2OlxcdHJlYWRfdW5sb2NrKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZmliNl93YWxrZXJfbG9jayk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwMzctXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjA2Nj1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIxMjktXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjIxMzA6c3RhdGljIGludCBmaWI2X3dhbGtfY29udGludWUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yMTMxLXtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjE5LVxcbm5ldC9pcHY2L2lwNl9maWIuYzoyMjIwOnN0YXRpYyBpbnQgZmliNl93YWxrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjIxLXtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjI2LVxcbm5ldC9pcHY2L2lwNl9maWIuYzoyMjI3OlxcdGZpYjZfd2Fsa2VyX2xpbmsobmV0LCB3KTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjIyOC1cXHRyZXMgPSBmaWI2X3dhbGtfY29udGludWUodyk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIyMjktXFx0aWYgKHJlcyBcXHUwMDNjPSAwKVxcbm5ldC9pcHY2L2lwNl9maWIuYzoyMjMwOlxcdFxcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIHcpO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjMxLVxcdHJldHVybiByZXM7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjIzMy1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjIzNDpzdGF0aWMgaW50IGZpYjZfY2xlYW5fbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIyMzUte1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIyNTMtXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjIyNTQ6XFx0Zm9yX2VhY2hfZmliNl93YWxrZXJfcnQodykge1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjU1LVxcdFxcdHJlcyA9IGMtXFx1MDAzZWZ1bmMocnQsIGMtXFx1MDAzZWFyZyk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjQ2ND1zdGF0aWMgaW50IF9fbmV0X2luaXQgZmliNl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQ3Ny1cXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfZ2NfbG9jayk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI0Nzg6XFx0cndsb2NrX2luaXQoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5maWI2X3dhbGtlcl9sb2NrKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjQ3OTpcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmZpYjZfd2Fsa2Vycyk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI0ODAtXFx0dGltZXJfc2V0dXAoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5pcDZfZmliX3RpbWVyLCBmaWI2X2djX3RpbWVyX2NiLCAwKTtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0yNjA0PXN0YXRpYyBpbnQgaXB2Nl9yb3V0ZV9uYXRpdmVfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjYzNi1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjYzNzpzdGF0aWMgaW50IGlwdjZfcm91dGVfeWllbGQoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNjM4LXtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0yNjU2PXN0YXRpYyB2b2lkIGlwdjZfcm91dGVfc2VxX3NldHVwX3dhbGsoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcixcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNjY2LVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZpdGVyLVxcdTAwM2V3LmxoKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjY2NzpcXHRmaWI2X3dhbGtlcl9saW5rKG5ldCwgXFx1MDAyNml0ZXItXFx1MDAzZXcpO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yNjY4LX1cXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0yNzA0PXN0YXRpYyB2b2lkICppcHY2X3JvdXRlX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNzI2LVxcdH0gZWxzZSBpZiAociBcXHUwMDNjIDApIHtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjcyNzpcXHRcXHRmaWI2X3dhbGtlcl91bmxpbmsobmV0LCBcXHUwMDI2aXRlci1cXHUwMDNldyk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3MjgtXFx0XFx0cmV0dXJuIE5VTEw7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3MjktXFx0fVxcbm5ldC9pcHY2L2lwNl9maWIuYzoyNzMwOlxcdGZpYjZfd2Fsa2VyX3VubGluayhuZXQsIFxcdTAwMjZpdGVyLVxcdTAwM2V3KTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjczMS1cXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0yNzYwPXN0YXRpYyBib29sIGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoc3RydWN0IGlwdjZfcm91dGVfaXRlciAqaXRlcilcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjc2MS17XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI3NjI6XFx0c3RydWN0IGZpYjZfd2Fsa2VyICp3ID0gXFx1MDAyNml0ZXItXFx1MDAzZXc7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NjMtXFx0cmV0dXJuIHctXFx1MDAzZW5vZGUgXFx1MDAyNlxcdTAwMjYgIWxpc3RfZW1wdHkoXFx1MDAyNnctXFx1MDAzZWxoKTtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0yNzY2PXN0YXRpYyB2b2lkIGlwdjZfcm91dGVfbmF0aXZlX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI3NzItXFx0aWYgKGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoaXRlcikpXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI3NzM6XFx0XFx0ZmliNl93YWxrZXJfdW5saW5rKG5ldCwgXFx1MDAyNml0ZXItXFx1MDAzZXcpO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yNzc0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxOTo1NC42MDUzMTkwNTZaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzYxNDI0MTU5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLTVNBTiBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBjYXJlZnVsbHkgZ28gdGhyb3VnaCB0aGlzIGFuZCBtYWtlIGFic29sdXRlbHkgc3VyZSB3ZSdyZSBub3QgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyB3aXRoIHRoaXMgcGF0Y2guIEZpcnN0LCBhIHF1aWNrIHNhbml0eSBjaGVjazogYXJlIHdlIHBvdGVudGlhbGx5IGxlYWtpbmcga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZT8gTm8sIG5vdGhpbmcgaW4gdGhpcyBjaGFuZ2UgdG91Y2hlcyB0aGF0IGFyZWEuIEdvb2QuIE5leHQsIGFyZSB3ZSBicmFuY2hpbmcgb24gYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBMb29rcyBsaWtlIHRoZSBgdy1cdTAwM2VsaGAgbGlzdCBoZWFkIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGluIGVpdGhlciBgaXB2Nl9yb3V0ZV9zZXFfc2V0dXBfd2Fsa2Agb3IgYGZpYjZfbmV0X2luaXRgLCBhbmQgdGhlbiByZWluaXRpYWxpemVkIHdpdGggYGxpc3RfZGVsX2luaXRgLCBzbyB0aGF0IHNlZW1zIHNhZmUuIE1vdmluZyBvbiwgYXJlIHdlIGludHJvZHVjaW5nIGFueSBuZXcgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMgdGhhdCBtaWdodCBiZSBwcm9ibGVtYXRpYz8gTm9wZSwgbm90aGluZyBuZXcgdGhlcmUuIEZpbmFsbHksIGFueSBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3Rocz8gTm8uXG5cblRoZSByb290IG9mIHRoaXMgcGF0Y2ggaXMgcmVhbGx5IGFib3V0IGZpeGluZyBhIGJ1ZyBpbiB0aGUgd2Fsa2VyIGxpc3QgdHJhY2tpbmcsIHNwZWNpZmljYWxseSBpbiBob3cgYGlwdjZfcm91dGVfaXRlcl9hY3RpdmVgIGRldGVybWluZXMgd2hlbiB0byBjYWxsIGBmaWI2X3dhbGtlcl91bmxpbmtgIGR1cmluZyBgc2VxX3N0b3BgLiBUaGUga2V5IGZpeCBpcyBtYWtpbmcgc3VyZSBgbGlzdF9kZWxfaW5pdGAgaXMgdXNlZCwgc28gd2UgY2FuIHJlbGlhYmx5IGNoZWNrIGlmIHRoZSB3YWxrZXIgaXMgc3RpbGwgbGlua2VkIHVzaW5nIGBsaXN0X2VtcHR5KFx1MDAyNnctXHUwMDNlbGgpYC4gRXNzZW50aWFsbHksIHRoZSBjaGFuZ2UgcHJvdmlkZXMgYSBjbGVhbmVyIHdheSB0byBoYW5kbGUgdGhlIGl0ZXJhdG9yIHN0b3BwaW5nIHBvaW50LiBOb3csIHRoZSBwYXRjaCAqZG9lcyogdG91Y2ggbGlua2VkIGxpc3RzLCBidXQgYW55IGNvbW1vbiBsaW5rZWQgbGlzdCBpc3N1ZXMgbGlrZSBkb3VibGUgdW5saW5raW5nLCBsaXN0IGNvcnJ1cHRpb24sIG9yIFVzZS1BZnRlci1GcmVlIHNpdHVhdGlvbnMgc2hvdWxkIGJlIGZsYWdnZWQgYnkgS0FTQU4gb3IgdGhlIGxpc3QgZGVidWdnaW5nIGZlYXR1cmVzLCBub3QgS01TQU4uIFNvLCBpbiB0ZXJtcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBhbnkgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLCB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBvciBleHBvc2UgYW55IG5ldyByaXNrcy5cblxuR2l2ZW4gYWxsIG9mIHRoYXQsIEkgY2FuIGNvbmZpZGVudGx5IHNheSB0aGF0IGBOZWVkc0tNU0FOID0gZmFsc2VgLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NTQsIk91dHB1dFRva2VucyI6MTc4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjIwOjAyLjIxOTU2MzM5M1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgbGlzdF9kZWwgd2l0aCBsaXN0X2RlbF9pbml0IGluIGZpYjZfd2Fsa2VyX3VubGluaygpIGFuZCB1cGRhdGVzIGlwdjZfcm91dGVfaXRlcl9hY3RpdmUoKSB0byBjaGVjayBsaXN0X2VtcHR5KFxcdTAwMjZ3LVxcdTAwM2VsaCkgaW5zdGVhZCBvZiBpbnNwZWN0aW5nIHdhbGtlciBzdGF0ZSBhbmQgbm9kZSBwb2ludGVycy4gVGhpcyBjaGFuZ2UgZml4ZXMgbGlzdCB0cmFja2luZyBhbmQgYXZvaWRzIGRvdWJsZSBsaXN0IGRlbGV0aW9uIC8gbGlzdCBjb3JydXB0aW9uIHdoZW4gc3RvcHBpbmcgdGhlIElQdjYgcm91dGUgc2VxIGl0ZXJhdGlvbi4gQWxsIHJlbGV2YW50IGxpc3Qgc3RydWN0dXJlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKHZpYSBJTklUX0xJU1RfSEVBRCAvIGxpc3RfZGVsX2luaXQgLyBtZW1zZXQpIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkLiBTdGFuZGFyZCBkZXRlY3RvcnMgKEtBU0FOIC8gQ09ORklHX0RFQlVHX0xJU1QpIGNvdmVyIGxpc3QgbWFuaXB1bGF0aW9uIGFuZCBtZW1vcnkgY29ycnVwdGlvbiByaXNrcyBpbiB0aGlzIGFyZWEsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGxpc3RfZGVsIHdpdGggbGlzdF9kZWxfaW5pdCBpbiBmaWI2X3dhbGtlcl91bmxpbmsoKSBhbmQgdXBkYXRlcyBpcHY2X3JvdXRlX2l0ZXJfYWN0aXZlKCkgdG8gY2hlY2sgbGlzdF9lbXB0eShcXHUwMDI2dy1cXHUwMDNlbGgpIGluc3RlYWQgb2YgaW5zcGVjdGluZyB3YWxrZXIgc3RhdGUgYW5kIG5vZGUgcG9pbnRlcnMuIFRoaXMgY2hhbmdlIGZpeGVzIGxpc3QgdHJhY2tpbmcgYW5kIGF2b2lkcyBkb3VibGUgbGlzdCBkZWxldGlvbiAvIGxpc3QgY29ycnVwdGlvbiB3aGVuIHN0b3BwaW5nIHRoZSBJUHY2IHJvdXRlIHNlcSBpdGVyYXRpb24uIEFsbCByZWxldmFudCBsaXN0IHN0cnVjdHVyZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkICh2aWEgSU5JVF9MSVNUX0hFQUQgLyBsaXN0X2RlbF9pbml0IC8gbWVtc2V0KSBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayByaXNrcyBhcmUgaW50cm9kdWNlZC4gU3RhbmRhcmQgZGV0ZWN0b3JzIChLQVNBTiAvIENPTkZJR19ERUJVR19MSVNUKSBjb3ZlciBsaXN0IG1hbmlwdWxhdGlvbiBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gcmlza3MgaW4gdGhpcyBhcmVhLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowfwhdk[1] Phase: Succeeded StartedAt: 2026-09-08 08:20:12 +0000 UTC FinishedAt: 2026-09-08 08:20:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwhdk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 08:20:12 +0000 UTC FinishedAt: 2026-09-08 08:20:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwhdk[2] Phase: Succeeded StartedAt: 2026-09-08 08:20:12 +0000 UTC FinishedAt: 2026-09-08 12:00:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 08:20:12 +0000 UTC FinishedAt: 2026-09-08 12:00:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","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-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 08:20:12 +0000 UTC FinishedAt: 2026-09-08 08:20:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 08:20:12 +0000 UTC FinishedAt: 2026-09-08 08:20:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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-workflowfwhdk/series-workflowfwhdk-convert-artifact-1126738420/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 08:20:23 +0000 UTC FinishedAt: 2026-09-08 08:37:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 08:20:23 +0000 UTC FinishedAt: 2026-09-08 08:37:39 +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:*113aa377-e20a-4619-9723-06a60cae006d,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-workflowfwhdk/series-workflowfwhdk-convert-artifact-1126738420/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": "fc1f3d27-6a86-4eb3-99ca-1780367c8147", "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-workflowfwhdk/series-workflowfwhdk-build-action-1020432114/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 08:20:23 +0000 UTC FinishedAt: 2026-09-08 08:37:29 +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:*113aa377-e20a-4619-9723-06a60cae006d,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-workflowfwhdk/series-workflowfwhdk-convert-artifact-1126738420/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": "fc1f3d27-6a86-4eb3-99ca-1780367c8147", "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-workflowfwhdk/series-workflowfwhdk-build-action-1020432114/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 08:37:39 +0000 UTC FinishedAt: 2026-09-08 08:37:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 08:37:39 +0000 UTC FinishedAt: 2026-09-08 08:37:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 08:37:39 +0000 UTC FinishedAt: 2026-09-08 08:37:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 08:37:39 +0000 UTC FinishedAt: 2026-09-08 08:37:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","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-workflowfwhdk/series-workflowfwhdk-convert-artifact-2327430579/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 08:37:49 +0000 UTC FinishedAt: 2026-09-08 08:39:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 08:37:49 +0000 UTC FinishedAt: 2026-09-08 08:39:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fc1f3d27-6a86-4eb3-99ca-1780367c8147,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-workflowfwhdk/series-workflowfwhdk-build-action-1020432114/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-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 08:39:54 +0000 UTC FinishedAt: 2026-09-08 08:39:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 08:39:54 +0000 UTC FinishedAt: 2026-09-08 08:39:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 08:39:54 +0000 UTC FinishedAt: 2026-09-08 08:56:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 08:39:54 +0000 UTC FinishedAt: 2026-09-08 08:56:09 +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:*113aa377-e20a-4619-9723-06a60cae006d,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-workflowfwhdk/series-workflowfwhdk-convert-artifact-2327430579/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": "ffaa5c46-b52c-4193-b092-10343ed73925", "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-workflowfwhdk/series-workflowfwhdk-build-action-983223911/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 08:39:54 +0000 UTC FinishedAt: 2026-09-08 08:55:59 +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:*113aa377-e20a-4619-9723-06a60cae006d,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-workflowfwhdk/series-workflowfwhdk-convert-artifact-2327430579/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": "ffaa5c46-b52c-4193-b092-10343ed73925", "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-workflowfwhdk/series-workflowfwhdk-build-action-983223911/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 08:56:09 +0000 UTC FinishedAt: 2026-09-08 08:56:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 08:56:09 +0000 UTC FinishedAt: 2026-09-08 08:56:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 08:56:09 +0000 UTC FinishedAt: 2026-09-08 08:58:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 08:56:09 +0000 UTC FinishedAt: 2026-09-08 08:58:04 +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:*ffaa5c46-b52c-4193-b092-10343ed73925,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-workflowfwhdk/series-workflowfwhdk-build-action-983223911/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-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 08:58:14 +0000 UTC FinishedAt: 2026-09-08 12:00:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 08:58:14 +0000 UTC FinishedAt: 2026-09-08 12:00:47 +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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"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:*fc1f3d27-6a86-4eb3-99ca-1780367c8147,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ffaa5c46-b52c-4193-b092-10343ed73925,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-workflowfwhdk/series-workflowfwhdk-build-action-1020432114/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-workflowfwhdk/series-workflowfwhdk-build-action-983223911/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 08:58:14 +0000 UTC FinishedAt: 2026-09-08 08:58:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 08:58:14 +0000 UTC FinishedAt: 2026-09-08 08:58:20 +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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"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-workflowfwhdk/series-workflowfwhdk-convert-artifact-236713644/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 08:58:14 +0000 UTC FinishedAt: 2026-09-08 08:58:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 08:58:14 +0000 UTC FinishedAt: 2026-09-08 08:58:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 08:58:14 +0000 UTC FinishedAt: 2026-09-08 08:58:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 08:58:24 +0000 UTC FinishedAt: 2026-09-08 12:00:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwhdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"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":["fib6_walker_unlink","ipv6_route_iter_active","ipv6_route_native_seq_stop","ipv6_route_seq_stop","ipv6_route_seq_start","ipv6_route_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","PROC_FS"],"series_id":"43ff44af-d88b-42fc-a42c-ab238c98f4f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 08:58:24 +0000 UTC FinishedAt: 2026-09-08 12:00:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fc1f3d27-6a86-4eb3-99ca-1780367c8147,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ffaa5c46-b52c-4193-b092-10343ed73925,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-workflowfwhdk/series-workflowfwhdk-build-action-1020432114/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-workflowfwhdk/series-workflowfwhdk-build-action-983223911/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-workflowfwhdk/series-workflowfwhdk-convert-artifact-236713644/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,}