Name: series-workflow25n6q Phase: Succeeded StartedAt: 2026-08-10 14:18:44 +0000 UTC FinishedAt: 2026-08-10 19:15:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow25n6q[0] Phase: Succeeded StartedAt: 2026-08-10 14:18:44 +0000 UTC FinishedAt: 2026-08-10 15:25:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow25n6q[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 14:18:44 +0000 UTC FinishedAt: 2026-08-10 15:25:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_NET", "VHOST_VSOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_NET", "VHOST_VSOCK" ], "series_id": "7e5d7f22-3161-4b3f-a71a-6e26ca96ac05" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "vhost_chr_read_iter", "vhost_init_device_iotlb", "vhost_clear_msg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9ORVQmIzM0OywKICAgICYjMzQ7VkhPU1RfVlNPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF9jaHJfcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O3Zob3N0X2luaXRfZGV2aWNlX2lvdGxiJiMzNDssCiAgICAmIzM0O3Zob3N0X2NsZWFyX21zZyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NhbCBgc25hcHNob3RgIHVuaW9uIGluIGB2aG9zdF9jaHJfcmVhZF9pdGVyYCB3aGljaCBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSB2aWEgYGNvcHlfdG9faXRlcl9mdWxsYC4gSG93ZXZlciwgdGhpcyBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIGJlY2F1c2U6XG4xLiBUaGUgYHNuYXBzaG90YCBpcyBwb3B1bGF0ZWQgdXNpbmcgYG1lbWNweWAgZnJvbSBhbiBleGlzdGluZyBtZXNzYWdlIG5vZGUgKGBmaXJzdC1cdTAwM2Vtc2dfdjJgIG9yIGBmaXJzdC1cdTAwM2Vtc2dgKS5cbjIuIFRoZSBzb3VyY2UgbWVzc2FnZSBub2RlIGlzIGFsbG9jYXRlZCBpbiBgdmhvc3RfbmV3X21zZ2AgdXNpbmcgYGt6YWxsb2NgICh2aWEgYGt6YWxsb2Nfb2JqYCksIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB0aGUgZW50aXJlIHN0cnVjdHVyZSwgaW5jbHVkaW5nIGFueSBjb21waWxlci1pbnNlcnRlZCBwYWRkaW5nLCBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkLlxuMy4gV2hlbiBhIG1lc3NhZ2UgaXMgcmV1c2VkIGFuZCBpdHMgdHlwZSBjaGFuZ2VzLCBgdmhvc3Rfc2V0X2lvdGxiX21pc3NgIGV4cGxpY2l0bHkgY2FsbHMgYG1lbXNldGAgdG8gemVybyBvdXQgdGhlIG1lc3NhZ2UgZmllbGRzLCBlbnN1cmluZyBubyBzdGFsZSBkYXRhIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyByZW1haW5zLlxuNC4gVGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBleGFjdGx5IG1hdGNoZXMgdGhlIHNpemUgb2YgdGhlIGZ1bGx5IGluaXRpYWxpemVkIG1lc3NhZ2Ugc3RydWN0dXJlLlxuXG5UaGUgcmVtYWluZGVyIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBsaXN0IG1hbmlwdWxhdGlvbnMsIHN0YXRlIHRyYWNraW5nIChgaW90bGJfbWlzc19zdGF0ZWApLCBhbmQgY29hbGVzY2luZyBsb2dpYyB0byBwcmV2ZW50IElPVExCIG1pc3MgZmxvb2RzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGxpc3QgY29ycnVwdGlvbiwgb3IgZGVhZGxvY2tzKSBhcmUgcGVyZmVjdGx5IHN1aXRlZCBmb3Igc3RhbmRhcmQgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN0YXRlIG1hY2hpbmUgZm9yIGhhbmRsaW5nIHZob3N0IElPVExCIG1pc3NlcywgY29hbGVzY2luZyBkdXBsaWNhdGUgbWlzcyBtZXNzYWdlcyB0byB1c2Vyc3BhY2UuIFRoaXMgaW52b2x2ZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgdmhvc3QgY29kZSwgc3BlY2lmaWNhbGx5IGluIHRoZSBjaGFyYWN0ZXIgZGV2aWNlIHJlYWQgaGFuZGxlciAodmhvc3RfY2hyX3JlYWRfaXRlciksIGRldmljZSBpbml0aWFsaXphdGlvbiAodmhvc3RfaW5pdF9kZXZpY2VfaW90bGIpLCBhbmQgbWVzc2FnZSBjbGVhcmluZyAodmhvc3RfY2xlYXJfbXNnKS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdmhvc3QgZGV2aWNlIG5vZGVzIChlLmcuLCAvZGV2L3Zob3N0LW5ldCwgL2Rldi92aG9zdC12c29jaykgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgc3RhdGUgbWFjaGluZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgZGVhZGxvY2tzLCBtZW1vcnkgbGVha3MsIG9yIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRhYmI3MTk5ZDU0OTEwYTY4MTk1MmVmOGZkODU4ZGNkZDc3N2Y1OTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxNTowODo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmMgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcbmluZGV4IDRjNTI1YjNlMTZlYWQuLmVhYjkwNGI0YjQ4NGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuY1xuQEAgLTM0LDYgJiM0MzszNCwxMyBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3Zob3N0LmhcJiMzNDtcbiBcbiYjNDM7ZW51bSB2aG9zdF9pb3RsYl9taXNzX3N0YXRlIHtcbiYjNDM7XHRWSE9TVF9JT1RMQl9NSVNTX05PTkUsXG4mIzQzO1x0VkhPU1RfSU9UTEJfTUlTU19SRUFELFxuJiM0MztcdFZIT1NUX0lPVExCX01JU1NfUkVBRElORyxcbiYjNDM7XHRWSE9TVF9JT1RMQl9NSVNTX1BFTkRJTkcsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyB1c2hvcnQgbWF4X21lbV9yZWdpb25zID0gNjQ7XG4gbW9kdWxlX3BhcmFtKG1heF9tZW1fcmVnaW9ucywgdXNob3J0LCAwNDQ0KTtcbiBNT0RVTEVfUEFSTV9ERVNDKG1heF9tZW1fcmVnaW9ucyxcbkBAIC02MTMsNiAmIzQzOzYyMCw5IEBAIHZvaWQgdmhvc3RfZGV2X2luaXQoc3RydWN0IHZob3N0X2RldiAqZGV2LFxuIFx0XHR2cS1cdTAwM2VoZWFkcyA9IE5VTEw7XG4gXHRcdHZxLVx1MDAzZW5oZWFkcyA9IE5VTEw7XG4gXHRcdHZxLVx1MDAzZWRldiA9IGRldjtcbiYjNDM7XHRcdHZxLVx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgPSBWSE9TVF9JT1RMQl9NSVNTX05PTkU7XG4mIzQzO1x0XHR2cS1cdTAwM2Vpb3RsYl9taXNzX3NlcSA9IDA7XG4mIzQzO1x0XHR2cS1cdTAwM2Vpb3RsYl9taXNzX25vZGUgPSBOVUxMO1xuIFx0XHRtdXRleF9pbml0KFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiBcdFx0dmhvc3RfdnFfcmVzZXQoZGV2LCB2cSk7XG4gXHRcdGlmICh2cS1cdTAwM2VoYW5kbGVfa2ljaylcbkBAIC0xMTc3LDYgJiM0MzsxMTg3LDIwIEBAIHZvaWQgdmhvc3RfZGV2X3N0b3Aoc3RydWN0IHZob3N0X2RldiAqZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kZXZfc3RvcCk7XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHZob3N0X3VudHJhY2tfaW90bGJfbWlzcyhzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IG5vZGUtXHUwMDNldnE7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2dnEtXHUwMDNlZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAodnEtXHUwMDNlaW90bGJfbWlzc19ub2RlICE9IG5vZGUpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHZxLVx1MDAzZWlvdGxiX21pc3Nfbm9kZSA9IE5VTEw7XG4mIzQzO1x0dnEtXHUwMDNlaW90bGJfbWlzc19zdGF0ZSA9IFZIT1NUX0lPVExCX01JU1NfTk9ORTtcbiYjNDM7XHR2cS1cdTAwM2Vpb3RsYl9taXNzX3NlcSYjNDM7JiM0Mzs7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCB2aG9zdF9jbGVhcl9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2KVxuIHtcbiBcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSwgKm47XG5AQCAtMTE4NCwxMiAmIzQzOzEyMDgsMTQgQEAgdm9pZCB2aG9zdF9jbGVhcl9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2KVxuIFx0c3Bpbl9sb2NrKFx1MDAyNmRldi1cdTAwM2Vpb3RsYl9sb2NrKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShub2RlLCBuLCBcdTAwMjZkZXYtXHUwMDNlcmVhZF9saXN0LCBub2RlKSB7XG4tXHRcdGxpc3RfZGVsKFx1MDAyNm5vZGUtXHUwMDNlbm9kZSk7XG4mIzQzO1x0XHRsaXN0X2RlbF9pbml0KFx1MDAyNm5vZGUtXHUwMDNlbm9kZSk7XG4mIzQzO1x0XHR2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Mobm9kZSk7XG4gXHRcdGtmcmVlKG5vZGUpO1xuIFx0fVxuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG4sIFx1MDAyNmRldi1cdTAwM2VwZW5kaW5nX2xpc3QsIG5vZGUpIHtcbi1cdFx0bGlzdF9kZWwoXHUwMDI2bm9kZS1cdTAwM2Vub2RlKTtcbiYjNDM7XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2bm9kZS1cdTAwM2Vub2RlKTtcbiYjNDM7XHRcdHZob3N0X3VudHJhY2tfaW90bGJfbWlzcyhub2RlKTtcbiBcdFx0a2ZyZWUobm9kZSk7XG4gXHR9XG4gXG5AQCAtMTU4NSwyMCAmIzQzOzE2MTEsNzMgQEAgc3RhdGljIGlubGluZSBpbnQgdmhvc3RfZ2V0X2Rlc2Moc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4gXHRyZXR1cm4gdmhvc3RfY29weV9mcm9tX3VzZXIodnEsIGRlc2MsIHZxLVx1MDAzZWRlc2MgJiM0MzsgaWR4LCBzaXplb2YoKmRlc2MpKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICpcbiYjNDM7dmhvc3RfZ2V0X2lvdGxiX21zZyhzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAobm9kZS1cdTAwM2Vtc2cudHlwZSA9PSBWSE9TVF9JT1RMQl9NU0dfVjIpXG4mIzQzO1x0XHRyZXR1cm4gXHUwMDI2bm9kZS1cdTAwM2Vtc2dfdjIuaW90bGI7XG4mIzQzO1xuJiM0MztcdHJldHVybiBcdTAwMjZub2RlLVx1MDAzZW1zZy5pb3RsYjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdmhvc3Rfc2V0X2lvdGxiX21pc3Moc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlLCBib29sIHYyLFxuJiM0MztcdFx0XHRcdCB1NjQgaW92YSwgaW50IGFjY2VzcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1zZztcbiYjNDM7XHR1MzIgdHlwZSA9IHYyID8gVkhPU1RfSU9UTEJfTVNHX1YyIDogVkhPU1RfSU9UTEJfTVNHO1xuJiM0MztcbiYjNDM7XHRpZiAobm9kZS1cdTAwM2Vtc2cudHlwZSAhPSB0eXBlKVxuJiM0MztcdFx0bWVtc2V0KFx1MDAyNm5vZGUtXHUwMDNlbXNnX3YyLCAwLCBzaXplb2Yobm9kZS1cdTAwM2Vtc2dfdjIpKTtcbiYjNDM7XHRub2RlLVx1MDAzZW1zZy50eXBlID0gdHlwZTtcbiYjNDM7XHRtc2cgPSB2aG9zdF9nZXRfaW90bGJfbXNnKG5vZGUpO1xuJiM0MztcbiYjNDM7XHRtc2ctXHUwMDNldHlwZSA9IFZIT1NUX0lPVExCX01JU1M7XG4mIzQzO1x0bXNnLVx1MDAzZWlvdmEgPSBpb3ZhO1xuJiM0MztcdG1zZy1cdTAwM2VwZXJtID0gYWNjZXNzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB2aG9zdF9pb3RsYl91cGRhdGVfY292ZXJzKHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKnVwZGF0ZSxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptaXNzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG1pc3MtXHUwMDNldHlwZSA9PSBWSE9TVF9JT1RMQl9NSVNTIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICB1cGRhdGUtXHUwMDNlaW92YSBcdTAwM2M9IG1pc3MtXHUwMDNlaW92YSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgbWlzcy1cdTAwM2Vpb3ZhIC0gdXBkYXRlLVx1MDAzZWlvdmEgXHUwMDNjIHVwZGF0ZS1cdTAwM2VzaXplIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICAodXBkYXRlLVx1MDAzZXBlcm0gXHUwMDI2IG1pc3MtXHUwMDNlcGVybSkgPT0gbWlzcy1cdTAwM2VwZXJtO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHZob3N0X2lvdGxiX25vdGlmeV92cShzdHJ1Y3Qgdmhvc3RfZGV2ICpkLFxuIFx0XHRcdFx0ICBzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2cpXG4ge1xuIFx0c3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlLCAqbjtcbiYjNDM7XHRpbnQgaTtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZkLVx1MDAzZWlvdGxiX2xvY2spO1xuIFxuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGQtXHUwMDNlbnZxczsgJiM0MzsmIzQzO2kpIHtcbiYjNDM7XHRcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gZC1cdTAwM2V2cXNbaV07XG4mIzQzO1xuJiM0MztcdFx0bm9kZSA9IHZxLVx1MDAzZWlvdGxiX21pc3Nfbm9kZTtcbiYjNDM7XHRcdGlmICghbm9kZSB8fFxuJiM0MztcdFx0ICAgICF2aG9zdF9pb3RsYl91cGRhdGVfY292ZXJzKG1zZyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICB2aG9zdF9nZXRfaW90bGJfbXNnKG5vZGUpKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZub2RlLVx1MDAzZW5vZGUpO1xuJiM0MztcdFx0dmhvc3RfdW50cmFja19pb3RsYl9taXNzKG5vZGUpO1xuJiM0MztcdFx0dmhvc3RfcG9sbF9xdWV1ZShcdTAwMjZ2cS1cdTAwM2Vwb2xsKTtcbiYjNDM7XHRcdGtmcmVlKG5vZGUpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobm9kZSwgbiwgXHUwMDI2ZC1cdTAwM2VwZW5kaW5nX2xpc3QsIG5vZGUpIHtcbiBcdFx0c3RydWN0IHZob3N0X2lvdGxiX21zZyAqdnFfbXNnID0gXHUwMDI2bm9kZS1cdTAwM2Vtc2cuaW90bGI7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5vZGUtXHUwMDNldnEtXHUwMDNlaW90bGJfbWlzc19ub2RlID09IG5vZGUpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAobXNnLVx1MDAzZWlvdmEgXHUwMDNjPSB2cV9tc2ctXHUwMDNlaW92YSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIG1zZy1cdTAwM2Vpb3ZhICYjNDM7IG1zZy1cdTAwM2VzaXplIC0gMSBcdTAwM2U9IHZxX21zZy1cdTAwM2Vpb3ZhIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgdnFfbXNnLVx1MDAzZXR5cGUgPT0gVkhPU1RfSU9UTEJfTUlTUykge1xuIFx0XHRcdHZob3N0X3BvbGxfcXVldWUoXHUwMDI2bm9kZS1cdTAwM2V2cS1cdTAwM2Vwb2xsKTtcbi1cdFx0XHRsaXN0X2RlbChcdTAwMjZub2RlLVx1MDAzZW5vZGUpO1xuJiM0MztcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNm5vZGUtXHUwMDNlbm9kZSk7XG4gXHRcdFx0a2ZyZWUobm9kZSk7XG4gXHRcdH1cbiBcdH1cbkBAIC0xNzU1LDkgJiM0MzsxODM0LDE4IEBAIHNzaXplX3Qgdmhvc3RfY2hyX3JlYWRfaXRlcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCBpb3ZfaXRlciAqdG8sXG4gXHRcdFx0ICAgIGludCBub2Jsb2NrKVxuIHtcbiBcdERFRklORV9XQUlUKHdhaXQpO1xuLVx0c3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlO1xuJiM0MztcdHVuaW9uIHtcbiYjNDM7XHRcdHN0cnVjdCB2aG9zdF9tc2cgbXNnO1xuJiM0MztcdFx0c3RydWN0IHZob3N0X21zZ192MiBtc2dfdjI7XG4mIzQzO1x0fSBzbmFwc2hvdDtcbiYjNDM7XHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm1pc3NfdG9rZW4gPSBOVUxMO1xuJiM0MztcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKm1pc3NfdnEgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSA9IE5VTEw7XG4mIzQzO1x0dTY0IG1pc3Nfc2VxID0gMDtcbiBcdHNzaXplX3QgcmV0ID0gMDtcbiBcdHVuc2lnbmVkIHNpemUgPSBzaXplb2Yoc3RydWN0IHZob3N0X21zZyk7XG4mIzQzO1x0Ym9vbCBzaG9ydF9idWZmZXIgPSBmYWxzZTtcbiYjNDM7XHRib29sIHdha2UgPSBmYWxzZTtcbiBcbiBcdGlmIChpb3ZfaXRlcl9jb3VudCh0bykgXHUwMDNjIHNpemUpXG4gXHRcdHJldHVybiAwO1xuQEAgLTE3NjcsOCAmIzQzOzE4NTUsMzYgQEAgc3NpemVfdCB2aG9zdF9jaHJfcmVhZF9pdGVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IGlvdl9pdGVyICp0byxcbiBcdFx0XHRwcmVwYXJlX3RvX3dhaXQoXHUwMDI2ZGV2LVx1MDAzZXdhaXQsIFx1MDAyNndhaXQsXG4gXHRcdFx0XHRcdFRBU0tfSU5URVJSVVBUSUJMRSk7XG4gXG4tXHRcdG5vZGUgPSB2aG9zdF9kZXF1ZXVlX21zZyhkZXYsIFx1MDAyNmRldi1cdTAwM2VyZWFkX2xpc3QpO1xuLVx0XHRpZiAobm9kZSlcbiYjNDM7XHRcdHNwaW5fbG9jayhcdTAwMjZkZXYtXHUwMDNlaW90bGJfbG9jayk7XG4mIzQzO1x0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXJlYWRfbGlzdCkpIHtcbiYjNDM7XHRcdFx0c3RydWN0IHZob3N0X21zZ19ub2RlICpmaXJzdDtcbiYjNDM7XG4mIzQzO1x0XHRcdGZpcnN0ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZkZXYtXHUwMDNlcmVhZF9saXN0LFxuJiM0MztcdFx0XHRcdFx0XHQgc3RydWN0IHZob3N0X21zZ19ub2RlLCBub2RlKTtcbiYjNDM7XHRcdFx0aWYgKGZpcnN0LVx1MDAzZXZxLVx1MDAzZWlvdGxiX21pc3Nfbm9kZSA9PSBmaXJzdCkge1xuJiM0MztcdFx0XHRcdHNpemUgPSBmaXJzdC1cdTAwM2Vtc2cudHlwZSA9PSBWSE9TVF9JT1RMQl9NU0dfVjIgP1xuJiM0MztcdFx0XHRcdCAgICAgICBzaXplb2YoZmlyc3QtXHUwMDNlbXNnX3YyKSA6IHNpemVvZihmaXJzdC1cdTAwM2Vtc2cpO1xuJiM0MztcdFx0XHRcdGlmIChpb3ZfaXRlcl9jb3VudCh0bykgXHUwMDNjIHNpemUpIHtcbiYjNDM7XHRcdFx0XHRcdHNob3J0X2J1ZmZlciA9IHRydWU7XG4mIzQzO1x0XHRcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0XHRcdG1lbWNweShcdTAwMjZzbmFwc2hvdC5tc2dfdjIsIFx1MDAyNmZpcnN0LVx1MDAzZW1zZ192MixcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzaXplKTtcbiYjNDM7XHRcdFx0XHRcdGxpc3RfbW92ZV90YWlsKFx1MDAyNmZpcnN0LVx1MDAzZW5vZGUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZkZXYtXHUwMDNlcGVuZGluZ19saXN0KTtcbiYjNDM7XHRcdFx0XHRcdGZpcnN0LVx1MDAzZXZxLVx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgPVxuJiM0MztcdFx0XHRcdFx0XHRWSE9TVF9JT1RMQl9NSVNTX1JFQURJTkc7XG4mIzQzO1x0XHRcdFx0XHRtaXNzX3ZxID0gZmlyc3QtXHUwMDNldnE7XG4mIzQzO1x0XHRcdFx0XHRtaXNzX3Rva2VuID0gZmlyc3Q7XG4mIzQzO1x0XHRcdFx0XHRtaXNzX3NlcSA9IGZpcnN0LVx1MDAzZXZxLVx1MDAzZWlvdGxiX21pc3Nfc2VxO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmZpcnN0LVx1MDAzZW5vZGUpO1xuJiM0MztcdFx0XHRcdG5vZGUgPSBmaXJzdDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuJiM0MztcbiYjNDM7XHRcdGlmIChub2RlIHx8IG1pc3NfdnEgfHwgc2hvcnRfYnVmZmVyKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRpZiAobm9ibG9jaykge1xuIFx0XHRcdHJldCA9IC1FQUdBSU47XG5AQCAtMTc4OSw2ICYjNDM7MTkwNSwzNCBAQCBzc2l6ZV90IHZob3N0X2Nocl9yZWFkX2l0ZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3QgaW92X2l0ZXIgKnRvLFxuIFx0aWYgKCFub2Jsb2NrKVxuIFx0XHRmaW5pc2hfd2FpdChcdTAwMjZkZXYtXHUwMDNld2FpdCwgXHUwMDI2d2FpdCk7XG4gXG4mIzQzO1x0aWYgKHNob3J0X2J1ZmZlcilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAobWlzc192cSkge1xuJiM0MztcdFx0Ym9vbCBjb3BpZWQgPSBjb3B5X3RvX2l0ZXJfZnVsbChcdTAwMjZzbmFwc2hvdC5tc2dfdjIsIHNpemUsIHRvKTtcbiYjNDM7XG4mIzQzO1x0XHRzcGluX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuJiM0MztcdFx0bm9kZSA9IG1pc3NfdnEtXHUwMDNlaW90bGJfbWlzc19ub2RlO1xuJiM0MztcdFx0aWYgKG5vZGUgPT0gbWlzc190b2tlbiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBtaXNzX3ZxLVx1MDAzZWlvdGxiX21pc3Nfc2VxID09IG1pc3Nfc2VxIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIG1pc3NfdnEtXHUwMDNlaW90bGJfbWlzc19zdGF0ZSA9PSBWSE9TVF9JT1RMQl9NSVNTX1JFQURJTkcpIHtcbiYjNDM7XHRcdFx0aWYgKGNvcGllZCkge1xuJiM0MztcdFx0XHRcdG1pc3NfdnEtXHUwMDNlaW90bGJfbWlzc19zdGF0ZSA9XG4mIzQzO1x0XHRcdFx0XHRWSE9TVF9JT1RMQl9NSVNTX1BFTkRJTkc7XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2bm9kZS1cdTAwM2Vub2RlLCBcdTAwMjZkZXYtXHUwMDNlcmVhZF9saXN0KTtcbiYjNDM7XHRcdFx0XHRtaXNzX3ZxLVx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgPSBWSE9TVF9JT1RMQl9NSVNTX1JFQUQ7XG4mIzQzO1x0XHRcdFx0d2FrZSA9IHRydWU7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmRldi1cdTAwM2Vpb3RsYl9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAod2FrZSlcbiYjNDM7XHRcdFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGwoXHUwMDI2ZGV2LVx1MDAzZXdhaXQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIEVQT0xMSU4gfCBFUE9MTFJETk9STSk7XG4mIzQzO1x0XHRyZXR1cm4gY29waWVkID8gc2l6ZSA6IC1FRkFVTFQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChub2RlKSB7XG4gXHRcdHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1zZztcbiBcdFx0dm9pZCAqc3RhcnQgPSBcdTAwMjZub2RlLVx1MDAzZW1zZztcbkBAIC0xODE5LDI5ICYjNDM7MTk2Myw2OSBAQCBzc2l6ZV90IHZob3N0X2Nocl9yZWFkX2l0ZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3QgaW92X2l0ZXIgKnRvLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9jaHJfcmVhZF9pdGVyKTtcbiBcbiYjNDM7c3RhdGljIGJvb2wgdmhvc3RfaW90bGJfbWlzc19jb2FsZXNjZShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgYm9vbCB2MixcbiYjNDM7XHRcdFx0XHQgICAgICB1NjQgaW92YSwgaW50IGFjY2VzcywgYm9vbCAqd2FrZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSA9IHZxLVx1MDAzZWlvdGxiX21pc3Nfbm9kZTtcbiYjNDM7XHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2c7XG4mIzQzO1x0dTMyIHR5cGUgPSB2MiA/IFZIT1NUX0lPVExCX01TR19WMiA6IFZIT1NUX0lPVExCX01TRztcbiYjNDM7XHRib29sIHNhbWU7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2dnEtXHUwMDNlZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5vZGUpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG1zZyA9IHZob3N0X2dldF9pb3RsYl9tc2cobm9kZSk7XG4mIzQzO1x0c2FtZSA9IG5vZGUtXHUwMDNlbXNnLnR5cGUgPT0gdHlwZSBcdTAwMjZcdTAwMjYgbXNnLVx1MDAzZXR5cGUgPT0gVkhPU1RfSU9UTEJfTUlTUyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgbXNnLVx1MDAzZWlvdmEgPT0gaW92YSBcdTAwMjZcdTAwMjYgbXNnLVx1MDAzZXBlcm0gPT0gYWNjZXNzO1xuJiM0MztcdGlmIChzYW1lIFx1MDAyNlx1MDAyNiB2cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlICE9IFZIT1NUX0lPVExCX01JU1NfUkVBRElORylcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAoIXNhbWUpXG4mIzQzO1x0XHR2aG9zdF9zZXRfaW90bGJfbWlzcyhub2RlLCB2MiwgaW92YSwgYWNjZXNzKTtcbiYjNDM7XHR2cS1cdTAwM2Vpb3RsYl9taXNzX3NlcSYjNDM7JiM0Mzs7XG4mIzQzO1x0aWYgKHZxLVx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgIT0gVkhPU1RfSU9UTEJfTUlTU19SRUFEKSB7XG4mIzQzO1x0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZub2RlLVx1MDAzZW5vZGUsIFx1MDAyNnZxLVx1MDAzZWRldi1cdTAwM2VyZWFkX2xpc3QpO1xuJiM0MztcdFx0dnEtXHUwMDNlaW90bGJfbWlzc19zdGF0ZSA9IFZIT1NUX0lPVExCX01JU1NfUkVBRDtcbiYjNDM7XHRcdCp3YWtlID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgdmhvc3RfaW90bGJfbWlzcyhzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgdTY0IGlvdmEsIGludCBhY2Nlc3MpXG4ge1xuIFx0c3RydWN0IHZob3N0X2RldiAqZGV2ID0gdnEtXHUwMDNlZGV2O1xuIFx0c3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlO1xuLVx0c3RydWN0IHZob3N0X2lvdGxiX21zZyAqbXNnO1xuIFx0Ym9vbCB2MiA9IHZob3N0X2JhY2tlbmRfaGFzX2ZlYXR1cmUodnEsIFZIT1NUX0JBQ0tFTkRfRl9JT1RMQl9NU0dfVjIpO1xuJiM0MztcdGJvb2wgd2FrZSA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNmRldi1cdTAwM2Vpb3RsYl9sb2NrKTtcbiYjNDM7XHRpZiAodmhvc3RfaW90bGJfbWlzc19jb2FsZXNjZSh2cSwgdjIsIGlvdmEsIGFjY2VzcywgXHUwMDI2d2FrZSkpIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmRldi1cdTAwM2Vpb3RsYl9sb2NrKTtcbiYjNDM7XHRcdGlmICh3YWtlKVxuJiM0MztcdFx0XHR3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbChcdTAwMjZkZXYtXHUwMDNld2FpdCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgRVBPTExJTiB8IEVQT0xMUkROT1JNKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZkZXYtXHUwMDNlaW90bGJfbG9jayk7XG4gXG4gXHRub2RlID0gdmhvc3RfbmV3X21zZyh2cSwgdjIgPyBWSE9TVF9JT1RMQl9NU0dfVjIgOiBWSE9TVF9JT1RMQl9NU0cpO1xuIFx0aWYgKCFub2RlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR2aG9zdF9zZXRfaW90bGJfbWlzcyhub2RlLCB2MiwgaW92YSwgYWNjZXNzKTtcbiBcbi1cdGlmICh2Mikge1xuLVx0XHRub2RlLVx1MDAzZW1zZ192Mi50eXBlID0gVkhPU1RfSU9UTEJfTVNHX1YyO1xuLVx0XHRtc2cgPSBcdTAwMjZub2RlLVx1MDAzZW1zZ192Mi5pb3RsYjtcbi1cdH0gZWxzZSB7XG4tXHRcdG1zZyA9IFx1MDAyNm5vZGUtXHUwMDNlbXNnLmlvdGxiO1xuLVx0fVxuLVxuLVx0bXNnLVx1MDAzZXR5cGUgPSBWSE9TVF9JT1RMQl9NSVNTO1xuLVx0bXNnLVx1MDAzZWlvdmEgPSBpb3ZhO1xuLVx0bXNnLVx1MDAzZXBlcm0gPSBhY2Nlc3M7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNmRldi1cdTAwM2Vpb3RsYl9sb2NrKTtcbiYjNDM7XHR2cS1cdTAwM2Vpb3RsYl9taXNzX25vZGUgPSBub2RlO1xuJiM0MztcdHZxLVx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgPSBWSE9TVF9JT1RMQl9NSVNTX1JFQUQ7XG4mIzQzO1x0dnEtXHUwMDNlaW90bGJfbWlzc19zZXEmIzQzOyYjNDM7O1xuJiM0MztcdGxpc3RfYWRkX3RhaWwoXHUwMDI2bm9kZS1cdTAwM2Vub2RlLCBcdTAwMjZkZXYtXHUwMDNlcmVhZF9saXN0KTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZkZXYtXHUwMDNlaW90bGJfbG9jayk7XG4gXG4tXHR2aG9zdF9lbnF1ZXVlX21zZyhkZXYsIFx1MDAyNmRldi1cdTAwM2VyZWFkX2xpc3QsIG5vZGUpO1xuJiM0MztcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKFx1MDAyNmRldi1cdTAwM2V3YWl0LCBFUE9MTElOIHwgRVBPTExSRE5PUk0pO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTIyNzAsMjcgJiM0MzsyNDU0LDU5IEBAIGxvbmcgdmhvc3RfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X2RldiAqZCwgdW5zaWduZWQgaW50IGlvY3RsLCB2b2lkIF9fdXNlciAqYXJnXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X3ZyaW5nX2lvY3RsKTtcbiBcbiYjNDM7c3RhdGljIGJvb2wgdmhvc3RfcmV0cnlfaW90bGJfbWlzc2VzKHN0cnVjdCB2aG9zdF9kZXYgKmQpXG4mIzQzO3tcbiYjNDM7XHRib29sIHdha2UgPSBmYWxzZTtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZkLVx1MDAzZWlvdGxiX2xvY2spO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkLVx1MDAzZW52cXM7ICYjNDM7JiM0MztpKSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGQtXHUwMDNldnFzW2ldO1xuJiM0MztcdFx0c3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlID0gdnEtXHUwMDNlaW90bGJfbWlzc19ub2RlO1xuJiM0MztcbiYjNDM7XHRcdGlmICghbm9kZSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0dnEtXHUwMDNlaW90bGJfbWlzc19zZXEmIzQzOyYjNDM7O1xuJiM0MztcdFx0aWYgKHZxLVx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgIT0gVkhPU1RfSU9UTEJfTUlTU19SRUFEKVxuJiM0MztcdFx0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZub2RlLVx1MDAzZW5vZGUsIFx1MDAyNmQtXHUwMDNlcmVhZF9saXN0KTtcbiYjNDM7XHRcdHZxLVx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgPSBWSE9TVF9JT1RMQl9NSVNTX1JFQUQ7XG4mIzQzO1x0XHR3YWtlID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB3YWtlO1xuJiM0Mzt9XG4mIzQzO1xuIGludCB2aG9zdF9pbml0X2RldmljZV9pb3RsYihzdHJ1Y3Qgdmhvc3RfZGV2ICpkKVxuIHtcbiBcdHN0cnVjdCB2aG9zdF9pb3RsYiAqbmlvdGxiLCAqb2lvdGxiO1xuJiM0MztcdGJvb2wgd2FrZTtcbiBcdGludCBpO1xuIFxuIFx0bmlvdGxiID0gaW90bGJfYWxsb2MoKTtcbiBcdGlmICghbmlvdGxiKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiYjNDM7XHR2aG9zdF9kZXZfbG9ja192cXMoZCk7XG4gXHRvaW90bGIgPSBkLVx1MDAzZWlvdGxiO1xuIFx0ZC1cdTAwM2Vpb3RsYiA9IG5pb3RsYjtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGQtXHUwMDNlbnZxczsgJiM0MzsmIzQzO2kpIHtcbiBcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBkLVx1MDAzZXZxc1tpXTtcbiBcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gXHRcdHZxLVx1MDAzZWlvdGxiID0gbmlvdGxiO1xuIFx0XHRfX3Zob3N0X3ZxX21ldGFfcmVzZXQodnEpO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuIFx0fVxuIFxuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZkLVx1MDAzZWlvdGxiX2xvY2spO1xuJiM0MztcdHdha2UgPSB2aG9zdF9yZXRyeV9pb3RsYl9taXNzZXMoZCk7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2ZC1cdTAwM2Vpb3RsYl9sb2NrKTtcbiYjNDM7XHR2aG9zdF9kZXZfdW5sb2NrX3ZxcyhkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHdha2UpXG4mIzQzO1x0XHR3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbChcdTAwMjZkLVx1MDAzZXdhaXQsXG4mIzQzO1x0XHRcdFx0XHQgICBFUE9MTElOIHwgRVBPTExSRE5PUk0pO1xuIFx0dmhvc3RfaW90bGJfZnJlZShvaW90bGIpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMzMwMCw3ICYjNDM7MzUxNiw4IEBAIHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqdmhvc3RfZGVxdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LFxuIFx0aWYgKCFsaXN0X2VtcHR5KGhlYWQpKSB7XG4gXHRcdG5vZGUgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCB2aG9zdF9tc2dfbm9kZSxcbiBcdFx0XHRcdFx0bm9kZSk7XG4tXHRcdGxpc3RfZGVsKFx1MDAyNm5vZGUtXHUwMDNlbm9kZSk7XG4mIzQzO1x0XHRsaXN0X2RlbF9pbml0KFx1MDAyNm5vZGUtXHUwMDNlbm9kZSk7XG4mIzQzO1x0XHR2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Mobm9kZSk7XG4gXHR9XG4gXHRzcGluX3VubG9jayhcdTAwMjZkZXYtXHUwMDNlaW90bGJfbG9jayk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5oIGIvZHJpdmVycy92aG9zdC92aG9zdC5oXG5pbmRleCAwMTkyYWRlNmU3NDkxLi41MGZjY2M4NWQ1OTQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmhcbkBAIC0yOSw2ICYjNDM7MjksNyBAQCBzdHJ1Y3Qgdmhvc3Rfd29yayB7XG4gXG4gc3RydWN0IHZob3N0X3dvcmtlcjtcbiBzdHJ1Y3Qgdmhvc3RfZGV2O1xuJiM0MztzdHJ1Y3Qgdmhvc3RfbXNnX25vZGU7XG4gXG4gc3RydWN0IHZob3N0X3dvcmtlcl9vcHMge1xuIFx0aW50ICgqY3JlYXRlKShzdHJ1Y3Qgdmhvc3Rfd29ya2VyICp3b3JrZXIsIHN0cnVjdCB2aG9zdF9kZXYgKmRldixcbkBAIC0xNjMsNyAmIzQzOzE2NCwxMiBAQCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlIHtcbiBcdC8qIFJpbmcgZW5kaWFubmVzcyByZXF1ZXN0ZWQgYnkgdXNlcnNwYWNlIGZvciBjcm9zcy1lbmRpYW4gc3VwcG9ydC4gKi9cbiBcdGJvb2wgdXNlcl9iZTtcbiAjZW5kaWZcbiYjNDM7XHQvKiBQcm90ZWN0ZWQgYnkgZGV2LVx1MDAzZWlvdGxiX2xvY2suICovXG4mIzQzO1x0dTggaW90bGJfbWlzc19zdGF0ZTtcbiBcdHUzMiBidXN5bG9vcF90aW1lb3V0O1xuJiM0MztcdC8qIFByb3RlY3RlZCBieSBkZXYtXHUwMDNlaW90bGJfbG9jay4gKi9cbiYjNDM7XHR1NjQgaW90bGJfbWlzc19zZXE7XG4mIzQzO1x0c3RydWN0IHZob3N0X21zZ19ub2RlICppb3RsYl9taXNzX25vZGU7XG4gfTtcbiBcbiBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9ORVQmIzM0OywKICAgICYjMzQ7VkhPU1RfVlNPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF9jaHJfcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O3Zob3N0X2luaXRfZGV2aWNlX2lvdGxiJiMzNDssCiAgICAmIzM0O3Zob3N0X2NsZWFyX21zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN0YXRlIG1hY2hpbmUgZm9yIGhhbmRsaW5nIHZob3N0IElPVExCIG1pc3NlcywgY29hbGVzY2luZyBkdXBsaWNhdGUgbWlzcyBtZXNzYWdlcyB0byB1c2Vyc3BhY2UuIFRoaXMgaW52b2x2ZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgdmhvc3QgY29kZSwgc3BlY2lmaWNhbGx5IGluIHRoZSBjaGFyYWN0ZXIgZGV2aWNlIHJlYWQgaGFuZGxlciAodmhvc3RfY2hyX3JlYWRfaXRlciksIGRldmljZSBpbml0aWFsaXphdGlvbiAodmhvc3RfaW5pdF9kZXZpY2VfaW90bGIpLCBhbmQgbWVzc2FnZSBjbGVhcmluZyAodmhvc3RfY2xlYXJfbXNnKS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdmhvc3QgZGV2aWNlIG5vZGVzIChlLmcuLCAvZGV2L3Zob3N0LW5ldCwgL2Rldi92aG9zdC12c29jaykgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgc3RhdGUgbWFjaGluZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgZGVhZGxvY2tzLCBtZW1vcnkgbGVha3MsIG9yIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRhYmI3MTk5ZDU0OTEwYTY4MTk1MmVmOGZkODU4ZGNkZDc3N2Y1OTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAxNTowODo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYwppbmRleCA0YzUyNWIzZTE2ZWFkLi5lYWI5MDRiNGI0ODRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC92aG9zdC5jCkBAIC0zNCw2ICYjNDM7MzQsMTMgQEAKIAogI2luY2x1ZGUgJiMzNDt2aG9zdC5oJiMzNDsKIAomIzQzO2VudW0gdmhvc3RfaW90bGJfbWlzc19zdGF0ZSB7CiYjNDM7CVZIT1NUX0lPVExCX01JU1NfTk9ORSwKJiM0MzsJVkhPU1RfSU9UTEJfTUlTU19SRUFELAomIzQzOwlWSE9TVF9JT1RMQl9NSVNTX1JFQURJTkcsCiYjNDM7CVZIT1NUX0lPVExCX01JU1NfUEVORElORywKJiM0Mzt9OwomIzQzOwogc3RhdGljIHVzaG9ydCBtYXhfbWVtX3JlZ2lvbnMgPSA2NDsKIG1vZHVsZV9wYXJhbShtYXhfbWVtX3JlZ2lvbnMsIHVzaG9ydCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1heF9tZW1fcmVnaW9ucywKQEAgLTYxMyw2ICYjNDM7NjIwLDkgQEAgdm9pZCB2aG9zdF9kZXZfaW5pdChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsCiAJCXZxLSZndDtoZWFkcyA9IE5VTEw7CiAJCXZxLSZndDtuaGVhZHMgPSBOVUxMOwogCQl2cS0mZ3Q7ZGV2ID0gZGV2OwomIzQzOwkJdnEtJmd0O2lvdGxiX21pc3Nfc3RhdGUgPSBWSE9TVF9JT1RMQl9NSVNTX05PTkU7CiYjNDM7CQl2cS0mZ3Q7aW90bGJfbWlzc19zZXEgPSAwOwomIzQzOwkJdnEtJmd0O2lvdGxiX21pc3Nfbm9kZSA9IE5VTEw7CiAJCW11dGV4X2luaXQoJmFtcDt2cS0mZ3Q7bXV0ZXgpOwogCQl2aG9zdF92cV9yZXNldChkZXYsIHZxKTsKIAkJaWYgKHZxLSZndDtoYW5kbGVfa2ljaykKQEAgLTExNzcsNiAmIzQzOzExODcsMjAgQEAgdm9pZCB2aG9zdF9kZXZfc3RvcChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpCiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kZXZfc3RvcCk7CiAKJiM0MztzdGF0aWMgdm9pZCB2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Moc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlKQomIzQzO3sKJiM0MzsJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBub2RlLSZndDt2cTsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3ZxLSZndDtkZXYtJmd0O2lvdGxiX2xvY2spOwomIzQzOwomIzQzOwlpZiAodnEtJmd0O2lvdGxiX21pc3Nfbm9kZSAhPSBub2RlKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl2cS0mZ3Q7aW90bGJfbWlzc19ub2RlID0gTlVMTDsKJiM0MzsJdnEtJmd0O2lvdGxiX21pc3Nfc3RhdGUgPSBWSE9TVF9JT1RMQl9NSVNTX05PTkU7CiYjNDM7CXZxLSZndDtpb3RsYl9taXNzX3NlcSYjNDM7JiM0Mzs7CiYjNDM7fQomIzQzOwogdm9pZCB2aG9zdF9jbGVhcl9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2KQogewogCXN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSwgKm47CkBAIC0xMTg0LDEyICYjNDM7MTIwOCwxNCBAQCB2b2lkIHZob3N0X2NsZWFyX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpCiAJc3Bpbl9sb2NrKCZhbXA7ZGV2LSZndDtpb3RsYl9sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShub2RlLCBuLCAmYW1wO2Rldi0mZ3Q7cmVhZF9saXN0LCBub2RlKSB7Ci0JCWxpc3RfZGVsKCZhbXA7bm9kZS0mZ3Q7bm9kZSk7CiYjNDM7CQlsaXN0X2RlbF9pbml0KCZhbXA7bm9kZS0mZ3Q7bm9kZSk7CiYjNDM7CQl2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Mobm9kZSk7CiAJCWtmcmVlKG5vZGUpOwogCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShub2RlLCBuLCAmYW1wO2Rldi0mZ3Q7cGVuZGluZ19saXN0LCBub2RlKSB7Ci0JCWxpc3RfZGVsKCZhbXA7bm9kZS0mZ3Q7bm9kZSk7CiYjNDM7CQlsaXN0X2RlbF9pbml0KCZhbXA7bm9kZS0mZ3Q7bm9kZSk7CiYjNDM7CQl2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Mobm9kZSk7CiAJCWtmcmVlKG5vZGUpOwogCX0KIApAQCAtMTU4NSwyMCAmIzQzOzE2MTEsNzMgQEAgc3RhdGljIGlubGluZSBpbnQgdmhvc3RfZ2V0X2Rlc2Moc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsCiAJcmV0dXJuIHZob3N0X2NvcHlfZnJvbV91c2VyKHZxLCBkZXNjLCB2cS0mZ3Q7ZGVzYyAmIzQzOyBpZHgsIHNpemVvZigqZGVzYykpOwogfQogCiYjNDM7c3RhdGljIHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKgomIzQzO3Zob3N0X2dldF9pb3RsYl9tc2coc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlKQomIzQzO3sKJiM0MzsJaWYgKG5vZGUtJmd0O21zZy50eXBlID09IFZIT1NUX0lPVExCX01TR19WMikKJiM0MzsJCXJldHVybiAmYW1wO25vZGUtJmd0O21zZ192Mi5pb3RsYjsKJiM0MzsKJiM0MzsJcmV0dXJuICZhbXA7bm9kZS0mZ3Q7bXNnLmlvdGxiOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB2aG9zdF9zZXRfaW90bGJfbWlzcyhzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUsIGJvb2wgdjIsCiYjNDM7CQkJCSB1NjQgaW92YSwgaW50IGFjY2VzcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1zZzsKJiM0MzsJdTMyIHR5cGUgPSB2MiA/IFZIT1NUX0lPVExCX01TR19WMiA6IFZIT1NUX0lPVExCX01TRzsKJiM0MzsKJiM0MzsJaWYgKG5vZGUtJmd0O21zZy50eXBlICE9IHR5cGUpCiYjNDM7CQltZW1zZXQoJmFtcDtub2RlLSZndDttc2dfdjIsIDAsIHNpemVvZihub2RlLSZndDttc2dfdjIpKTsKJiM0MzsJbm9kZS0mZ3Q7bXNnLnR5cGUgPSB0eXBlOwomIzQzOwltc2cgPSB2aG9zdF9nZXRfaW90bGJfbXNnKG5vZGUpOwomIzQzOwomIzQzOwltc2ctJmd0O3R5cGUgPSBWSE9TVF9JT1RMQl9NSVNTOwomIzQzOwltc2ctJmd0O2lvdmEgPSBpb3ZhOwomIzQzOwltc2ctJmd0O3Blcm0gPSBhY2Nlc3M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHZob3N0X2lvdGxiX3VwZGF0ZV9jb3ZlcnMoc3RydWN0IHZob3N0X2lvdGxiX21zZyAqdXBkYXRlLAomIzQzOwkJCQkgICAgICBzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptaXNzKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1pc3MtJmd0O3R5cGUgPT0gVkhPU1RfSU9UTEJfTUlTUyAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICB1cGRhdGUtJmd0O2lvdmEgJmx0Oz0gbWlzcy0mZ3Q7aW92YSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBtaXNzLSZndDtpb3ZhIC0gdXBkYXRlLSZndDtpb3ZhICZsdDsgdXBkYXRlLSZndDtzaXplICZhbXA7JmFtcDsKJiM0MzsJICAgICAgICh1cGRhdGUtJmd0O3Blcm0gJmFtcDsgbWlzcy0mZ3Q7cGVybSkgPT0gbWlzcy0mZ3Q7cGVybTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB2aG9zdF9pb3RsYl9ub3RpZnlfdnEoc3RydWN0IHZob3N0X2RldiAqZCwKIAkJCQkgIHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1zZykKIHsKIAlzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUsICpuOwomIzQzOwlpbnQgaTsKIAogCXNwaW5fbG9jaygmYW1wO2QtJmd0O2lvdGxiX2xvY2spOwogCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBkLSZndDtudnFzOyAmIzQzOyYjNDM7aSkgewomIzQzOwkJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBkLSZndDt2cXNbaV07CiYjNDM7CiYjNDM7CQlub2RlID0gdnEtJmd0O2lvdGxiX21pc3Nfbm9kZTsKJiM0MzsJCWlmICghbm9kZSB8fAomIzQzOwkJICAgICF2aG9zdF9pb3RsYl91cGRhdGVfY292ZXJzKG1zZywKJiM0MzsJCQkJCSAgICAgICB2aG9zdF9nZXRfaW90bGJfbXNnKG5vZGUpKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWxpc3RfZGVsX2luaXQoJmFtcDtub2RlLSZndDtub2RlKTsKJiM0MzsJCXZob3N0X3VudHJhY2tfaW90bGJfbWlzcyhub2RlKTsKJiM0MzsJCXZob3N0X3BvbGxfcXVldWUoJmFtcDt2cS0mZ3Q7cG9sbCk7CiYjNDM7CQlrZnJlZShub2RlKTsKJiM0MzsJfQomIzQzOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShub2RlLCBuLCAmYW1wO2QtJmd0O3BlbmRpbmdfbGlzdCwgbm9kZSkgewogCQlzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICp2cV9tc2cgPSAmYW1wO25vZGUtJmd0O21zZy5pb3RsYjsKJiM0MzsKJiM0MzsJCWlmIChub2RlLSZndDt2cS0mZ3Q7aW90bGJfbWlzc19ub2RlID09IG5vZGUpCiYjNDM7CQkJY29udGludWU7CiAJCWlmIChtc2ctJmd0O2lvdmEgJmx0Oz0gdnFfbXNnLSZndDtpb3ZhICZhbXA7JmFtcDsKIAkJICAgIG1zZy0mZ3Q7aW92YSAmIzQzOyBtc2ctJmd0O3NpemUgLSAxICZndDs9IHZxX21zZy0mZ3Q7aW92YSAmYW1wOyZhbXA7CiAJCSAgICB2cV9tc2ctJmd0O3R5cGUgPT0gVkhPU1RfSU9UTEJfTUlTUykgewogCQkJdmhvc3RfcG9sbF9xdWV1ZSgmYW1wO25vZGUtJmd0O3ZxLSZndDtwb2xsKTsKLQkJCWxpc3RfZGVsKCZhbXA7bm9kZS0mZ3Q7bm9kZSk7CiYjNDM7CQkJbGlzdF9kZWxfaW5pdCgmYW1wO25vZGUtJmd0O25vZGUpOwogCQkJa2ZyZWUobm9kZSk7CiAJCX0KIAl9CkBAIC0xNzU1LDkgJiM0MzsxODM0LDE4IEBAIHNzaXplX3Qgdmhvc3RfY2hyX3JlYWRfaXRlcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCBpb3ZfaXRlciAqdG8sCiAJCQkgICAgaW50IG5vYmxvY2spCiB7CiAJREVGSU5FX1dBSVQod2FpdCk7Ci0Jc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlOwomIzQzOwl1bmlvbiB7CiYjNDM7CQlzdHJ1Y3Qgdmhvc3RfbXNnIG1zZzsKJiM0MzsJCXN0cnVjdCB2aG9zdF9tc2dfdjIgbXNnX3YyOwomIzQzOwl9IHNuYXBzaG90OwomIzQzOwlzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm1pc3NfdG9rZW4gPSBOVUxMOwomIzQzOwlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICptaXNzX3ZxID0gTlVMTDsKJiM0MzsJc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlID0gTlVMTDsKJiM0MzsJdTY0IG1pc3Nfc2VxID0gMDsKIAlzc2l6ZV90IHJldCA9IDA7CiAJdW5zaWduZWQgc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgdmhvc3RfbXNnKTsKJiM0MzsJYm9vbCBzaG9ydF9idWZmZXIgPSBmYWxzZTsKJiM0MzsJYm9vbCB3YWtlID0gZmFsc2U7CiAKIAlpZiAoaW92X2l0ZXJfY291bnQodG8pICZsdDsgc2l6ZSkKIAkJcmV0dXJuIDA7CkBAIC0xNzY3LDggJiM0MzsxODU1LDM2IEBAIHNzaXplX3Qgdmhvc3RfY2hyX3JlYWRfaXRlcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCBpb3ZfaXRlciAqdG8sCiAJCQlwcmVwYXJlX3RvX3dhaXQoJmFtcDtkZXYtJmd0O3dhaXQsICZhbXA7d2FpdCwKIAkJCQkJVEFTS19JTlRFUlJVUFRJQkxFKTsKIAotCQlub2RlID0gdmhvc3RfZGVxdWV1ZV9tc2coZGV2LCAmYW1wO2Rldi0mZ3Q7cmVhZF9saXN0KTsKLQkJaWYgKG5vZGUpCiYjNDM7CQlzcGluX2xvY2soJmFtcDtkZXYtJmd0O2lvdGxiX2xvY2spOwomIzQzOwkJaWYgKCFsaXN0X2VtcHR5KCZhbXA7ZGV2LSZndDtyZWFkX2xpc3QpKSB7CiYjNDM7CQkJc3RydWN0IHZob3N0X21zZ19ub2RlICpmaXJzdDsKJiM0MzsKJiM0MzsJCQlmaXJzdCA9IGxpc3RfZmlyc3RfZW50cnkoJmFtcDtkZXYtJmd0O3JlYWRfbGlzdCwKJiM0MzsJCQkJCQkgc3RydWN0IHZob3N0X21zZ19ub2RlLCBub2RlKTsKJiM0MzsJCQlpZiAoZmlyc3QtJmd0O3ZxLSZndDtpb3RsYl9taXNzX25vZGUgPT0gZmlyc3QpIHsKJiM0MzsJCQkJc2l6ZSA9IGZpcnN0LSZndDttc2cudHlwZSA9PSBWSE9TVF9JT1RMQl9NU0dfVjIgPwomIzQzOwkJCQkgICAgICAgc2l6ZW9mKGZpcnN0LSZndDttc2dfdjIpIDogc2l6ZW9mKGZpcnN0LSZndDttc2cpOwomIzQzOwkJCQlpZiAoaW92X2l0ZXJfY291bnQodG8pICZsdDsgc2l6ZSkgewomIzQzOwkJCQkJc2hvcnRfYnVmZmVyID0gdHJ1ZTsKJiM0MzsJCQkJfSBlbHNlIHsKJiM0MzsJCQkJCW1lbWNweSgmYW1wO3NuYXBzaG90Lm1zZ192MiwgJmFtcDtmaXJzdC0mZ3Q7bXNnX3YyLAomIzQzOwkJCQkJICAgICAgIHNpemUpOwomIzQzOwkJCQkJbGlzdF9tb3ZlX3RhaWwoJmFtcDtmaXJzdC0mZ3Q7bm9kZSwKJiM0MzsJCQkJCQkgICAgICAgJmFtcDtkZXYtJmd0O3BlbmRpbmdfbGlzdCk7CiYjNDM7CQkJCQlmaXJzdC0mZ3Q7dnEtJmd0O2lvdGxiX21pc3Nfc3RhdGUgPQomIzQzOwkJCQkJCVZIT1NUX0lPVExCX01JU1NfUkVBRElORzsKJiM0MzsJCQkJCW1pc3NfdnEgPSBmaXJzdC0mZ3Q7dnE7CiYjNDM7CQkJCQltaXNzX3Rva2VuID0gZmlyc3Q7CiYjNDM7CQkJCQltaXNzX3NlcSA9IGZpcnN0LSZndDt2cS0mZ3Q7aW90bGJfbWlzc19zZXE7CiYjNDM7CQkJCX0KJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQlsaXN0X2RlbF9pbml0KCZhbXA7Zmlyc3QtJmd0O25vZGUpOwomIzQzOwkJCQlub2RlID0gZmlyc3Q7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwkJc3Bpbl91bmxvY2soJmFtcDtkZXYtJmd0O2lvdGxiX2xvY2spOwomIzQzOwomIzQzOwkJaWYgKG5vZGUgfHwgbWlzc192cSB8fCBzaG9ydF9idWZmZXIpCiAJCQlicmVhazsKIAkJaWYgKG5vYmxvY2spIHsKIAkJCXJldCA9IC1FQUdBSU47CkBAIC0xNzg5LDYgJiM0MzsxOTA1LDM0IEBAIHNzaXplX3Qgdmhvc3RfY2hyX3JlYWRfaXRlcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCBpb3ZfaXRlciAqdG8sCiAJaWYgKCFub2Jsb2NrKQogCQlmaW5pc2hfd2FpdCgmYW1wO2Rldi0mZ3Q7d2FpdCwgJmFtcDt3YWl0KTsKIAomIzQzOwlpZiAoc2hvcnRfYnVmZmVyKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChtaXNzX3ZxKSB7CiYjNDM7CQlib29sIGNvcGllZCA9IGNvcHlfdG9faXRlcl9mdWxsKCZhbXA7c25hcHNob3QubXNnX3YyLCBzaXplLCB0byk7CiYjNDM7CiYjNDM7CQlzcGluX2xvY2soJmFtcDtkZXYtJmd0O2lvdGxiX2xvY2spOwomIzQzOwkJbm9kZSA9IG1pc3NfdnEtJmd0O2lvdGxiX21pc3Nfbm9kZTsKJiM0MzsJCWlmIChub2RlID09IG1pc3NfdG9rZW4gJmFtcDsmYW1wOwomIzQzOwkJICAgIG1pc3NfdnEtJmd0O2lvdGxiX21pc3Nfc2VxID09IG1pc3Nfc2VxICZhbXA7JmFtcDsKJiM0MzsJCSAgICBtaXNzX3ZxLSZndDtpb3RsYl9taXNzX3N0YXRlID09IFZIT1NUX0lPVExCX01JU1NfUkVBRElORykgewomIzQzOwkJCWlmIChjb3BpZWQpIHsKJiM0MzsJCQkJbWlzc192cS0mZ3Q7aW90bGJfbWlzc19zdGF0ZSA9CiYjNDM7CQkJCQlWSE9TVF9JT1RMQl9NSVNTX1BFTkRJTkc7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJbGlzdF9tb3ZlX3RhaWwoJmFtcDtub2RlLSZndDtub2RlLCAmYW1wO2Rldi0mZ3Q7cmVhZF9saXN0KTsKJiM0MzsJCQkJbWlzc192cS0mZ3Q7aW90bGJfbWlzc19zdGF0ZSA9IFZIT1NUX0lPVExCX01JU1NfUkVBRDsKJiM0MzsJCQkJd2FrZSA9IHRydWU7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwkJc3Bpbl91bmxvY2soJmFtcDtkZXYtJmd0O2lvdGxiX2xvY2spOwomIzQzOwomIzQzOwkJaWYgKHdha2UpCiYjNDM7CQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGwoJmFtcDtkZXYtJmd0O3dhaXQsCiYjNDM7CQkJCQkJICAgRVBPTExJTiB8IEVQT0xMUkROT1JNKTsKJiM0MzsJCXJldHVybiBjb3BpZWQgPyBzaXplIDogLUVGQVVMVDsKJiM0MzsJfQomIzQzOwogCWlmIChub2RlKSB7CiAJCXN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1zZzsKIAkJdm9pZCAqc3RhcnQgPSAmYW1wO25vZGUtJmd0O21zZzsKQEAgLTE4MTksMjkgJiM0MzsxOTYzLDY5IEBAIHNzaXplX3Qgdmhvc3RfY2hyX3JlYWRfaXRlcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCBpb3ZfaXRlciAqdG8sCiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9jaHJfcmVhZF9pdGVyKTsKIAomIzQzO3N0YXRpYyBib29sIHZob3N0X2lvdGxiX21pc3NfY29hbGVzY2Uoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIGJvb2wgdjIsCiYjNDM7CQkJCSAgICAgIHU2NCBpb3ZhLCBpbnQgYWNjZXNzLCBib29sICp3YWtlKQomIzQzO3sKJiM0MzsJc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlID0gdnEtJmd0O2lvdGxiX21pc3Nfbm9kZTsKJiM0MzsJc3RydWN0IHZob3N0X2lvdGxiX21zZyAqbXNnOwomIzQzOwl1MzIgdHlwZSA9IHYyID8gVkhPU1RfSU9UTEJfTVNHX1YyIDogVkhPU1RfSU9UTEJfTVNHOwomIzQzOwlib29sIHNhbWU7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt2cS0mZ3Q7ZGV2LSZndDtpb3RsYl9sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKCFub2RlKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwltc2cgPSB2aG9zdF9nZXRfaW90bGJfbXNnKG5vZGUpOwomIzQzOwlzYW1lID0gbm9kZS0mZ3Q7bXNnLnR5cGUgPT0gdHlwZSAmYW1wOyZhbXA7IG1zZy0mZ3Q7dHlwZSA9PSBWSE9TVF9JT1RMQl9NSVNTICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIG1zZy0mZ3Q7aW92YSA9PSBpb3ZhICZhbXA7JmFtcDsgbXNnLSZndDtwZXJtID09IGFjY2VzczsKJiM0MzsJaWYgKHNhbWUgJmFtcDsmYW1wOyB2cS0mZ3Q7aW90bGJfbWlzc19zdGF0ZSAhPSBWSE9TVF9JT1RMQl9NSVNTX1JFQURJTkcpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKCFzYW1lKQomIzQzOwkJdmhvc3Rfc2V0X2lvdGxiX21pc3Mobm9kZSwgdjIsIGlvdmEsIGFjY2Vzcyk7CiYjNDM7CXZxLSZndDtpb3RsYl9taXNzX3NlcSYjNDM7JiM0Mzs7CiYjNDM7CWlmICh2cS0mZ3Q7aW90bGJfbWlzc19zdGF0ZSAhPSBWSE9TVF9JT1RMQl9NSVNTX1JFQUQpIHsKJiM0MzsJCWxpc3RfbW92ZV90YWlsKCZhbXA7bm9kZS0mZ3Q7bm9kZSwgJmFtcDt2cS0mZ3Q7ZGV2LSZndDtyZWFkX2xpc3QpOwomIzQzOwkJdnEtJmd0O2lvdGxiX21pc3Nfc3RhdGUgPSBWSE9TVF9JT1RMQl9NSVNTX1JFQUQ7CiYjNDM7CQkqd2FrZSA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCB2aG9zdF9pb3RsYl9taXNzKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCB1NjQgaW92YSwgaW50IGFjY2VzcykKIHsKIAlzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYgPSB2cS0mZ3Q7ZGV2OwogCXN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZTsKLQlzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2c7CiAJYm9vbCB2MiA9IHZob3N0X2JhY2tlbmRfaGFzX2ZlYXR1cmUodnEsIFZIT1NUX0JBQ0tFTkRfRl9JT1RMQl9NU0dfVjIpOwomIzQzOwlib29sIHdha2UgPSBmYWxzZTsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3ZxLSZndDttdXRleCk7CiYjNDM7CiYjNDM7CXNwaW5fbG9jaygmYW1wO2Rldi0mZ3Q7aW90bGJfbG9jayk7CiYjNDM7CWlmICh2aG9zdF9pb3RsYl9taXNzX2NvYWxlc2NlKHZxLCB2MiwgaW92YSwgYWNjZXNzLCAmYW1wO3dha2UpKSB7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO2Rldi0mZ3Q7aW90bGJfbG9jayk7CiYjNDM7CQlpZiAod2FrZSkKJiM0MzsJCQl3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbCgmYW1wO2Rldi0mZ3Q7d2FpdCwKJiM0MzsJCQkJCQkgICBFUE9MTElOIHwgRVBPTExSRE5PUk0pOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtkZXYtJmd0O2lvdGxiX2xvY2spOwogCiAJbm9kZSA9IHZob3N0X25ld19tc2codnEsIHYyID8gVkhPU1RfSU9UTEJfTVNHX1YyIDogVkhPU1RfSU9UTEJfTVNHKTsKIAlpZiAoIW5vZGUpCiAJCXJldHVybiAtRU5PTUVNOwomIzQzOwl2aG9zdF9zZXRfaW90bGJfbWlzcyhub2RlLCB2MiwgaW92YSwgYWNjZXNzKTsKIAotCWlmICh2MikgewotCQlub2RlLSZndDttc2dfdjIudHlwZSA9IFZIT1NUX0lPVExCX01TR19WMjsKLQkJbXNnID0gJmFtcDtub2RlLSZndDttc2dfdjIuaW90bGI7Ci0JfSBlbHNlIHsKLQkJbXNnID0gJmFtcDtub2RlLSZndDttc2cuaW90bGI7Ci0JfQotCi0JbXNnLSZndDt0eXBlID0gVkhPU1RfSU9UTEJfTUlTUzsKLQltc2ctJmd0O2lvdmEgPSBpb3ZhOwotCW1zZy0mZ3Q7cGVybSA9IGFjY2VzczsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7ZGV2LSZndDtpb3RsYl9sb2NrKTsKJiM0MzsJdnEtJmd0O2lvdGxiX21pc3Nfbm9kZSA9IG5vZGU7CiYjNDM7CXZxLSZndDtpb3RsYl9taXNzX3N0YXRlID0gVkhPU1RfSU9UTEJfTUlTU19SRUFEOwomIzQzOwl2cS0mZ3Q7aW90bGJfbWlzc19zZXEmIzQzOyYjNDM7OwomIzQzOwlsaXN0X2FkZF90YWlsKCZhbXA7bm9kZS0mZ3Q7bm9kZSwgJmFtcDtkZXYtJmd0O3JlYWRfbGlzdCk7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7ZGV2LSZndDtpb3RsYl9sb2NrKTsKIAotCXZob3N0X2VucXVldWVfbXNnKGRldiwgJmFtcDtkZXYtJmd0O3JlYWRfbGlzdCwgbm9kZSk7CiYjNDM7CXdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKCZhbXA7ZGV2LSZndDt3YWl0LCBFUE9MTElOIHwgRVBPTExSRE5PUk0pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMjcwLDI3ICYjNDM7MjQ1NCw1OSBAQCBsb25nIHZob3N0X3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF9kZXYgKmQsIHVuc2lnbmVkIGludCBpb2N0bCwgdm9pZCBfX3VzZXIgKmFyZwogfQogRVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfdnJpbmdfaW9jdGwpOwogCiYjNDM7c3RhdGljIGJvb2wgdmhvc3RfcmV0cnlfaW90bGJfbWlzc2VzKHN0cnVjdCB2aG9zdF9kZXYgKmQpCiYjNDM7ewomIzQzOwlib29sIHdha2UgPSBmYWxzZTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtkLSZndDtpb3RsYl9sb2NrKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGQtJmd0O252cXM7ICYjNDM7JiM0MztpKSB7CiYjNDM7CQlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGQtJmd0O3Zxc1tpXTsKJiM0MzsJCXN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSA9IHZxLSZndDtpb3RsYl9taXNzX25vZGU7CiYjNDM7CiYjNDM7CQlpZiAoIW5vZGUpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQl2cS0mZ3Q7aW90bGJfbWlzc19zZXEmIzQzOyYjNDM7OwomIzQzOwkJaWYgKHZxLSZndDtpb3RsYl9taXNzX3N0YXRlICE9IFZIT1NUX0lPVExCX01JU1NfUkVBRCkKJiM0MzsJCQlsaXN0X21vdmVfdGFpbCgmYW1wO25vZGUtJmd0O25vZGUsICZhbXA7ZC0mZ3Q7cmVhZF9saXN0KTsKJiM0MzsJCXZxLSZndDtpb3RsYl9taXNzX3N0YXRlID0gVkhPU1RfSU9UTEJfTUlTU19SRUFEOwomIzQzOwkJd2FrZSA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHdha2U7CiYjNDM7fQomIzQzOwogaW50IHZob3N0X2luaXRfZGV2aWNlX2lvdGxiKHN0cnVjdCB2aG9zdF9kZXYgKmQpCiB7CiAJc3RydWN0IHZob3N0X2lvdGxiICpuaW90bGIsICpvaW90bGI7CiYjNDM7CWJvb2wgd2FrZTsKIAlpbnQgaTsKIAogCW5pb3RsYiA9IGlvdGxiX2FsbG9jKCk7CiAJaWYgKCFuaW90bGIpCiAJCXJldHVybiAtRU5PTUVNOwogCiYjNDM7CXZob3N0X2Rldl9sb2NrX3ZxcyhkKTsKIAlvaW90bGIgPSBkLSZndDtpb3RsYjsKIAlkLSZndDtpb3RsYiA9IG5pb3RsYjsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBkLSZndDtudnFzOyAmIzQzOyYjNDM7aSkgewogCQlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGQtJmd0O3Zxc1tpXTsKIAotCQltdXRleF9sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKIAkJdnEtJmd0O2lvdGxiID0gbmlvdGxiOwogCQlfX3Zob3N0X3ZxX21ldGFfcmVzZXQodnEpOwotCQltdXRleF91bmxvY2soJmFtcDt2cS0mZ3Q7bXV0ZXgpOwogCX0KIAomIzQzOwlzcGluX2xvY2soJmFtcDtkLSZndDtpb3RsYl9sb2NrKTsKJiM0MzsJd2FrZSA9IHZob3N0X3JldHJ5X2lvdGxiX21pc3NlcyhkKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtkLSZndDtpb3RsYl9sb2NrKTsKJiM0MzsJdmhvc3RfZGV2X3VubG9ja192cXMoZCk7CiYjNDM7CiYjNDM7CWlmICh3YWtlKQomIzQzOwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGwoJmFtcDtkLSZndDt3YWl0LAomIzQzOwkJCQkJICAgRVBPTExJTiB8IEVQT0xMUkROT1JNKTsKIAl2aG9zdF9pb3RsYl9mcmVlKG9pb3RsYik7CiAKIAlyZXR1cm4gMDsKQEAgLTMzMDAsNyAmIzQzOzM1MTYsOCBAQCBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKnZob3N0X2RlcXVldWVfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwKIAlpZiAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKIAkJbm9kZSA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IHZob3N0X21zZ19ub2RlLAogCQkJCQlub2RlKTsKLQkJbGlzdF9kZWwoJmFtcDtub2RlLSZndDtub2RlKTsKJiM0MzsJCWxpc3RfZGVsX2luaXQoJmFtcDtub2RlLSZndDtub2RlKTsKJiM0MzsJCXZob3N0X3VudHJhY2tfaW90bGJfbWlzcyhub2RlKTsKIAl9CiAJc3Bpbl91bmxvY2soJmFtcDtkZXYtJmd0O2lvdGxiX2xvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmggYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmgKaW5kZXggMDE5MmFkZTZlNzQ5MS4uNTBmY2NjODVkNTk0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaApAQCAtMjksNiAmIzQzOzI5LDcgQEAgc3RydWN0IHZob3N0X3dvcmsgewogCiBzdHJ1Y3Qgdmhvc3Rfd29ya2VyOwogc3RydWN0IHZob3N0X2RldjsKJiM0MztzdHJ1Y3Qgdmhvc3RfbXNnX25vZGU7CiAKIHN0cnVjdCB2aG9zdF93b3JrZXJfb3BzIHsKIAlpbnQgKCpjcmVhdGUpKHN0cnVjdCB2aG9zdF93b3JrZXIgKndvcmtlciwgc3RydWN0IHZob3N0X2RldiAqZGV2LApAQCAtMTYzLDcgJiM0MzsxNjQsMTIgQEAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSB7CiAJLyogUmluZyBlbmRpYW5uZXNzIHJlcXVlc3RlZCBieSB1c2Vyc3BhY2UgZm9yIGNyb3NzLWVuZGlhbiBzdXBwb3J0LiAqLwogCWJvb2wgdXNlcl9iZTsKICNlbmRpZgomIzQzOwkvKiBQcm90ZWN0ZWQgYnkgZGV2LSZndDtpb3RsYl9sb2NrLiAqLwomIzQzOwl1OCBpb3RsYl9taXNzX3N0YXRlOwogCXUzMiBidXN5bG9vcF90aW1lb3V0OwomIzQzOwkvKiBQcm90ZWN0ZWQgYnkgZGV2LSZndDtpb3RsYl9sb2NrLiAqLwomIzQzOwl1NjQgaW90bGJfbWlzc19zZXE7CiYjNDM7CXN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqaW90bGJfbWlzc19ub2RlOwogfTsKIAogc3RydWN0IHZob3N0X21zZ19ub2RlIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc5OAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDM0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZob3N0IElPVExCIE1pc3MgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgaG93IElPVExCIG1pc3NlcyBhcmUgaGFuZGxlZCB3aXRoaW4gdmhvc3QsIHNwZWNpZmljYWxseSBpbiBgZHJpdmVycy92aG9zdC92aG9zdC5jYCBhbmQgYGRyaXZlcnMvdmhvc3Qvdmhvc3QuaGAuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgdGhlIGludHJvZHVjdGlvbiBvZiBgdmhvc3RfaW90bGJfbWlzc19zdGF0ZWAsIHdoaWNoIGlzIGRlc2lnbmVkIHRvIHRyYWNrIHRoZXNlIG1pc3NlcyBvbiBhIHBlci12aXJ0cXVldWUgYmFzaXMuIFRoZSBnb2FsLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRvIGNvYWxlc2NlIHRoZSBtaXNzIG1lc3NhZ2VzIGFuZCBwcmV2ZW50IHRoZSB1c2Vyc3BhY2UgZnJvbSBnZXR0aW5nIGludW5kYXRlZCB3aXRoIHJlZHVuZGFudCBub3RpZmljYXRpb25zLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgZnV6emFiaWxpdHkuIEdpdmVuIHRoYXQgdmhvc3QgaXMgYSBmdW5kYW1lbnRhbCBzdWJzeXN0ZW0gdW5kZXJwaW5uaW5nIEtWTSwgUUVNVSwgYW5kIG90aGVyIHZpcnR1YWxpemF0aW9uIHRvb2xzLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGEgd29ydGh3aGlsZSB0YXJnZXQuIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgY3JpdGljYWwgZnVuY3Rpb25zOiBgdmhvc3RfY2hyX3JlYWRfaXRlcmAsIGB2aG9zdF9pb3RsYl9taXNzYCwgYHZob3N0X2luaXRfZGV2aWNlX2lvdGxiYCwgYW5kIGB2aG9zdF9jbGVhcl9tc2dgLCBhbW9uZyBvdGhlcnMuIEkga25vdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCB0aGUgYC9kZXYvdmhvc3QtbmV0YCwgYC9kZXYvdmhvc3QtdnNvY2tgIGFuZCBzaW1pbGFyIGNoYXJhY3RlciBkZXZpY2VzLCB3aGljaCBtYWtlcyB0aGVtIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIFRoYW5rZnVsbHksIFN5emthbGxlciBhbHJlYWR5IGhhcyB2aG9zdCBkZXNjcmlwdGlvbnMsIHNpbXBsaWZ5aW5nIHRoZSBmdXp6aW5nIHNldHVwLiBUaGUgY2hhbmdlcyBoZXJlIGFsc28gc2VlbSBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQgYW5kIG5vdCB0cml2aWFsLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIGB2aG9zdF9jaHJfcmVhZF9pdGVyYCBpcyB0aGUgdmhvc3QgY2hhcmFjdGVyIGRldmljZSByZWFkIGhhbmRsZXIuIGB2aG9zdF9pb3RsYl9taXNzYCBpcyBjbGVhcmx5IHRyaWdnZXJlZCB3aGVuIGFuIElPVExCIG1pc3Mgb2NjdXJzLiBgdmhvc3RfaW5pdF9kZXZpY2VfaW90bGJgIHNlZW1zIHRvIGJlIGNhbGxlZCBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLCBwb3NzaWJseSB2aWEgYFZIT1NUX1NFVF9CQUNLRU5EX0ZFQVRVUkVTYCBvciBhIHJlbGF0ZWQgaW9jdGwuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgY2FsbCBmbG93IHRvIGNvbmZpcm0gaXQmIzM5O3MgcmVhY2hlZCBpbiB0aGUgcmlnaHQgcGxhY2VzLiBBbmQsIGZpbmFsbHksIGB2aG9zdF9jbGVhcl9tc2dgIGFwcGVhcnMgdG8gYmUgcmVsYXRlZCB0byBkZXZpY2Ugc2h1dGRvd24gb3IgcmVzZXQuCgpJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgY29kZSBmb3IgY2FsbHMgdG8gYHZob3N0X2luaXRfZGV2aWNlX2lvdGxiYCB0byB2ZXJpZnkgd2hlcmUgaXQmIzM5O3MgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9pbml0X2RldmljZV9pb3RsYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L25ldC5jPTE2NjY9c3RhdGljIGludCB2aG9zdF9uZXRfc2V0X2ZlYXR1cmVzKHN0cnVjdCB2aG9zdF9uZXQgKm4sIGNvbnN0IHU2NCAqZmVhdHVyZXMpXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xNjk2LVx0aWYgKHZpcnRpb19mZWF0dXJlc190ZXN0X2JpdChmZWF0dXJlcywgVklSVElPX0ZfQUNDRVNTX1BMQVRGT1JNKSkge1xuZHJpdmVycy92aG9zdC9uZXQuYzoxNjk3Olx0XHRpZiAodmhvc3RfaW5pdF9kZXZpY2VfaW90bGIoXHUwMDI2bi1cdTAwM2VkZXYpKVxuZHJpdmVycy92aG9zdC9uZXQuYy0xNjk4LVx0XHRcdGdvdG8gb3V0X3VubG9jaztcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9MjQ1Nz1zdGF0aWMgYm9vbCB2aG9zdF9yZXRyeV9pb3RsYl9taXNzZXMoc3RydWN0IHZob3N0X2RldiAqZClcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjQ4MC1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoyNDgxOmludCB2aG9zdF9pbml0X2RldmljZV9pb3RsYihzdHJ1Y3Qgdmhvc3RfZGV2ICpkKVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTI0ODIte1xuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yNTEzLX1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoyNTE0OkVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2luaXRfZGV2aWNlX2lvdGxiKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yNTE1LVxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaD0yODQ9c3NpemVfdCB2aG9zdF9jaHJfd3JpdGVfaXRlcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjg1LVx0XHRcdCAgICAgc3RydWN0IGlvdl9pdGVyICpmcm9tKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaDoyODY6aW50IHZob3N0X2luaXRfZGV2aWNlX2lvdGxiKHN0cnVjdCB2aG9zdF9kZXYgKmQpO1xuZHJpdmVycy92aG9zdC92aG9zdC5oLTI4Ny1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9ODU0PXN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc2V0X2ZlYXR1cmVzKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssIHU2NCBmZWF0dXJlcylcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODY4LVx0aWYgKChmZWF0dXJlcyBcdTAwMjYgKDFVTEwgXHUwMDNjXHUwMDNjIFZJUlRJT19GX0FDQ0VTU19QTEFURk9STSkpKSB7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6ODY5Olx0XHRpZiAodmhvc3RfaW5pdF9kZXZpY2VfaW90bGIoXHUwMDI2dnNvY2stXHUwMDNlZGV2KSlcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04NzAtXHRcdFx0Z290byBlcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE5MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFZob3N0IElPVExCIE1pc3NlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBob3cgdGhlIHZob3N0IGluZnJhc3RydWN0dXJlIGhhbmRsZXMgbWVtb3J5IGFjY2Vzc2VzLCBzcGVjaWZpY2FsbHkgd2hlcmUgdGhpbmdzIG1pZ2h0IGJlIGdvaW5nIHdyb25nLiBJdCBzZWVtcyBsaWtlIGB2aG9zdF9pbml0X2RldmljZV9pb3RsYmAgaXMgYSBrZXkgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uIEkgc2VlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGB2aG9zdF9uZXRfc2V0X2ZlYXR1cmVzYCBhbmQgYHZob3N0X3Zzb2NrX3NldF9mZWF0dXJlc2AsIGluZGljYXRpbmcgaXQmIzM5O3MgaW52b2x2ZWQgaW4gc2V0dGluZyB1cCB0aGUgSU9UTEIgKElucHV0L091dHB1dCBUcmFuc2xhdGlvbiBMb29rYXNpZGUgQnVmZmVyKSBmb3IgbmV0d29yayBhbmQgdnNvY2sgdmhvc3QgZGV2aWNlcy4gVGhhdCBtYWtlcyBzZW5zZSwgdGhvc2UgYXJlIGNvbW1vbiBlbnRyeSBwb2ludHMuCgpOb3csIGB2aG9zdF9jaHJfcmVhZF9pdGVyYCBpcyB0aGUgcmVhZCBoYW5kbGVyIGZvciB2aG9zdCBkZXZpY2VzLiBUaGF0JiMzOTtzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLCBhcyBhbnkgcmVhZHMgd2lsbCBsaWtlbHkgZnVubmVsIHRocm91Z2ggdGhlcmUuCgpUaGUgcmVhbCBwb2ludCBvZiBpbnRlcmVzdCwgdGhvdWdoLCBpcyBgdmhvc3RfaW90bGJfbWlzc2AuIFRoaXMgYXBwZWFycyB0byBiZSBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgcHJvYmFibHkgbm90IGludGVuZGVkIGZvciBkaXJlY3QgdXNlIGVsc2V3aGVyZS4gTXkgc3VzcGljaW9uIGlzLCBpdCYjMzk7cyB0cmlnZ2VyZWQgd2hlbiB2aG9zdCBhdHRlbXB0cyB0byBhY2Nlc3MgbWVtb3J5IGFuZCB0aGUgbG9va3VwIGluIHRoZSBJT1RMQiBmYWlscy4gVGhpcyBtZWFucyBhIHRyYW5zbGF0aW9uIGlzIG5lZWRlZC4gR2l2ZW4gdGhhdCwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBlZmZvcnRzIG9uIHVuZGVyc3RhbmRpbmcgd2hhdCBsZWFkcyB0byB0aGUgZXhlY3V0aW9uIG9mIGB2aG9zdF9pb3RsYl9taXNzYC4gSXQgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgaW50ZXJlc3RpbmcgYW5kIHdpbGwgYmUgdGhlIHRhcmdldCBvZiBteSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X2lvdGxiX21pc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5jLTM2LVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjM3OmVudW0gdmhvc3RfaW90bGJfbWlzc19zdGF0ZSB7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzgtXHRWSE9TVF9JT1RMQl9NSVNTX05PTkUsXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTE5NjQ9RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfY2hyX3JlYWRfaXRlcik7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTk2NS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoxOTY2OnN0YXRpYyBib29sIHZob3N0X2lvdGxiX21pc3NfY29hbGVzY2Uoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIGJvb2wgdjIsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTk2Ny1cdFx0XHRcdCAgICAgIHU2NCBpb3ZhLCBpbnQgYWNjZXNzLCBib29sICp3YWtlKVxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0xOTk2LVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjE5OTc6c3RhdGljIGludCB2aG9zdF9pb3RsYl9taXNzKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCB1NjQgaW92YSwgaW50IGFjY2VzcylcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0xOTk4LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjAwNi1cdHNwaW5fbG9jayhcdTAwMjZkZXYtXHUwMDNlaW90bGJfbG9jayk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MjAwNzpcdGlmICh2aG9zdF9pb3RsYl9taXNzX2NvYWxlc2NlKHZxLCB2MiwgaW92YSwgYWNjZXNzLCBcdTAwMjZ3YWtlKSkge1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTIwMDgtXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmRldi1cdTAwM2Vpb3RsYl9sb2NrKTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9MjA2MD1zdGF0aWMgYm9vbCBpb3RsYl9hY2Nlc3Nfb2soc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTIwNzItXHRcdGlmIChtYXAgPT0gTlVMTCB8fCBtYXAtXHUwMDNlc3RhcnQgXHUwMDNlIGFkZHIpIHtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoyMDczOlx0XHRcdHZob3N0X2lvdGxiX21pc3ModnEsIGFkZHIsIGFjY2Vzcyk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjA3NC1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTI4NTc9c3RhdGljIGludCB0cmFuc2xhdGVfZGVzYyhzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgdTY0IGFkZHIsIHUzMiBsZW4sXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTI4OTctXHRpZiAocmV0ID09IC1FQUdBSU4pXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6Mjg5ODpcdFx0dmhvc3RfaW90bGJfbWlzcyh2cSwgYWRkciwgYWNjZXNzKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yODk5LVx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjE3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFZob3N0IElPVExCIGFuZCBSZWFkIEhhbmRsZXJzKioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGlzIHZob3N0IGNvZGUuIEl0IHNlZW1zIGxpa2UgYHZob3N0X2lvdGxiX21pc3NgIGlzIGEgc3RhdGljIHZhcmlhYmxlLCB3aGljaCBtZWFucyBpdCYjMzk7cyBub3QgZ29pbmcgdG8gYmUgaGVscGZ1bCBhcyBhIHN5bWJvbCB0byBmb2N1cyBvbi4gVGhhdCYjMzk7cyBhIGRlYWQgZW5kLCBhdCBsZWFzdCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGFwcHJvYWNoLgoKSG93ZXZlciwgYHZob3N0X2Nocl9yZWFkX2l0ZXJgIGlzIGV4cG9ydGVkLCBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyB0aGUgcmVhZCBoYW5kbGVyLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nOyBpdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIHdhbnQgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gaW4gdGhpcyBwYXJ0IG9mIHRoZSBhcmNoaXRlY3R1cmUuIEFuZCBoZXksIGB2aG9zdF9pbml0X2RldmljZV9pb3RsYmAgaXMgYWxzbyBleHBvcnRlZCwgd2hpY2ggc2VlbXMgcmVsYXRlZC4KCkxldCYjMzk7cyBkcmlsbCBkb3duIGFuZCB0cmFjayBkb3duIHdoZXJlIGB2aG9zdF9jaHJfcmVhZF9pdGVyYCBpcyBiZWluZyB1c2VkLiBUaGF0JiMzOTtsbCBiZSB0aGUgYmVzdCB3YXkgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBwcm9jZXNzLiBUaW1lIHRvIHN0YXJ0IHRoZSBodW50IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X2Nocl9yZWFkX2l0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9uZXQuYz0xODM4PXN0YXRpYyBzc2l6ZV90IHZob3N0X25ldF9jaHJfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4NDQtXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE4NDU6XHRyZXR1cm4gdmhvc3RfY2hyX3JlYWRfaXRlcihkZXYsIHRvLCBub2Jsb2NrKTtcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg0Ni19XG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTE4MzE9RVhQT1JUX1NZTUJPTCh2aG9zdF9jaHJfcG9sbCk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTgzMi1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoxODMzOnNzaXplX3Qgdmhvc3RfY2hyX3JlYWRfaXRlcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCBpb3ZfaXRlciAqdG8sXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTgzNC1cdFx0XHQgICAgaW50IG5vYmxvY2spXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTE5NjMtfVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjE5NjQ6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfY2hyX3JlYWRfaXRlcik7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTk2NS1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg9MjgwPV9fcG9sbF90IHZob3N0X2Nocl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjgxLVx0XHRcdCAgICBwb2xsX3RhYmxlICp3YWl0KTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaDoyODI6c3NpemVfdCB2aG9zdF9jaHJfcmVhZF9pdGVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IGlvdl9pdGVyICp0byxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC0yODMtXHRcdFx0ICAgIGludCBub2Jsb2NrKTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9OTQ0PXN0YXRpYyBzc2l6ZV90IHZob3N0X3Zzb2NrX2Nocl9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05NTAtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTUxOlx0cmV0dXJuIHZob3N0X2Nocl9yZWFkX2l0ZXIoZGV2LCB0bywgbm9ibG9jayk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTUyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA1OQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBteSB0aGlua2luZyByaWdodCBub3cgaXMgY2VudGVyZWQgb24gYSBzcGVjaWZpYyBhcmVhIHdpdGhpbiB0aGUgY29kZS4KCioqRGl2aW5nIGludG8gdGhlIFZob3N0IENvZGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIHRoZSBgdmhvc3RfY2hyX3JlYWRfaXRlcmAgc3ltYm9sOyBpdCBzZWVtcyBsaWtlIGEgdXNlZnVsIGVudHJ5IHBvaW50IGZvciB0aGlzIGludmVzdGlnYXRpb24uIEJ1dCBJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCBhbm90aGVyIGZ1bmN0aW9uIHRoYXQmIzM5O3MgcG90ZW50aWFsbHkgcmVsYXRlZCwgYHZob3N0X2luaXRfZGV2aWNlX2lvdGxiYC4gQWgsIEkgc2VlLCBpdCBnZXRzIGludm9rZWQgd2hlbiBgVklSVElPX0ZfQUNDRVNTX1BMQVRGT1JNYCBpcyBlbmFibGVkLiBUaGF0IGNvdWxkIGJlIGEgY2x1ZSB3b3J0aCBmb2xsb3dpbmcsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC4gT2theSwgbmV4dCBzdGVwLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYHZob3N0X2NsZWFyX21zZ2AgdG8gc2VlIGhvdyB0aGF0IGludGVyYWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfY2xlYXJfbXNnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmM9MTUzNT1zdGF0aWMgbG9uZyB2aG9zdF9uZXRfc2V0X2JhY2tlbmQoc3RydWN0IHZob3N0X25ldCAqbiwgdW5zaWduZWQgaW5kZXgsIGludCBmZClcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE1NTYtXHRpZiAoZmQgPT0gLTEpXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE1NTc6XHRcdHZob3N0X2NsZWFyX21zZyhcdTAwMjZuLVx1MDAzZWRldik7XG5kcml2ZXJzL3Zob3N0L25ldC5jLTE1NTgtXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTExOTA9c3RhdGljIHZvaWQgdmhvc3RfdW50cmFja19pb3RsYl9taXNzKHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSlcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTIwMy1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoxMjA0OnZvaWQgdmhvc3RfY2xlYXJfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0xMjA1LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTIyMy19XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MTIyNDpFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9jbGVhcl9tc2cpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTEyMjUtXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9MTIyNj12b2lkIHZob3N0X2Rldl9jbGVhbnVwKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTI0Ny1cdGRldi1cdTAwM2Vpb3RsYiA9IE5VTEw7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MTI0ODpcdHZob3N0X2NsZWFyX21zZyhkZXYpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTEyNDktXHR3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbChcdTAwMjZkZXYtXHUwMDNld2FpdCwgRVBPTExJTiB8IEVQT0xMUkROT1JNKTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg9MjMzPWJvb2wgdmhvc3RfbG9nX2FjY2Vzc19vayhzdHJ1Y3Qgdmhvc3RfZGV2ICopO1xuZHJpdmVycy92aG9zdC92aG9zdC5oOjIzNDp2b2lkIHZob3N0X2NsZWFyX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpO1xuZHJpdmVycy92aG9zdC92aG9zdC5oLTIzNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3OTEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IG1pbmQgaXMganVtcGluZyBhcm91bmQgYSBiaXQgaGVyZSwgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLgoKKipGb2N1c2luZyBvbiBQb3RlbnRpYWwgSG90c3BvdHMgaW4gdGhlIHZob3N0IENvZGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgZ29vZCBwbGFjZXMgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGFyZWFzIHRoYXQgYXJlIGxpa2VseSB0byBiZSBzZWVpbmcgYSBsb3Qgb2YgYWN0aXZpdHkuIGB2aG9zdF9jbGVhcl9tc2dgLi4uIHRoYXQmIzM5O3MgYSBkZWNlbnQgY2FuZGlkYXRlLCBzZWVtcyBsaWtlIGl0IGNvdWxkIGJlIGEgZm9jdXMgc3ltYm9sLiBCdXQgaG9sZCBvbiwgd2hhdCBhYm91dCBgdmhvc3RfaW90bGJfbm90aWZ5X3ZxYD8gSG1tLCBpdCYjMzk7cyBzdGF0aWMsIHNvIHRoYXQgbWlnaHQgbGltaXQgaXRzIHNjb3BlLCBidXQgSSBzaG91bGQgc3RpbGwga2VlcCBpdCBpbiBtaW5kIGFzIGEgcG90ZW50aWFsIGFyZWEgdG8gaW52ZXN0aWdhdGUuIE9rYXksIG5leHQgdXAsIGhvdyBhYm91dCBgdmhvc3RfdnJpbmdfaW9jdGxgPyBJdCYjMzk7cyBleHBvcnRlZCwgYW5kIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBpb2N0bHMsIHdoaWNoIG9mdGVuIGltcGxpZXMgc29tZSBhbW91bnQgb2YgSS9PIGludGVyYWN0aW9uLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldC4gVGhvdWdoLCBvbiBzZWNvbmQgdGhvdWdodCwgaXQgc2VlbXMgcHJldHR5IGdlbmVyaWMuLi4gaXTigJlzIGEgaG90LXBhdGggZnVuY3Rpb24gZm9yIGlvY3RscyBpbiBnZW5lcmFsLCBub3QgbmVjZXNzYXJpbHkgdGllZCB0byBhbnkgc3BlY2lmaWMgZGV2aWNlIG9yIHByb2Nlc3MuIE9rYXksIHRoYXQmIzM5O3Mgbm90IHF1aXRlIGFzIGludGVyZXN0aW5nLgoKV2FpdCBhIHNlY29uZC4uLiBhaCwgdGhlcmUmIzM5O3MgYW5vdGhlciB0aG91Z2h0ISBJIHNlZSBgdmhvc3RfY2hyX3JlYWRfaXRlcmAgY2FsbGVkIGZyb20gYHZob3N0X25ldF9jaHJfcmVhZF9pdGVyYCBhbmQgYHZob3N0X3Zzb2NrX2Nocl9yZWFkX2l0ZXJgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIGl04oCZcyB0aGUgYmFzZSBmb3IgY29tbW9uIHJlYWQgaXRlcmF0aW9ucy4gTGV0IG1lIGp1c3QgY29uZmlybSBpZiBgVkhPU1RfTkVUYCBhbmQgYFZIT1NUX1ZTT0NLYCBhcmUsIGluIGZhY3QsIHRoZSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBUaGF0IHdvdWxkIGhlbHAgdG8gc2VlIGlmIGB2aG9zdF9jaHJfcmVhZF9pdGVyYCBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZIT1NUX05FVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWc9MzI9aWYgVkhPU1RfTUVOVVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTMzLVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjM0OmNvbmZpZyBWSE9TVF9ORVRcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zNS1cdHRyaXN0YXRlIFwmIzM0O0hvc3Qga2VybmVsIGFjY2VsZXJhdG9yIGZvciB2aXJ0aW8gbmV0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzkyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQXNzZXNzaW5nIFZpcnR1YWxpemVkIFNvY2tldCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7VGltZSB0byBkaXZlIGludG8gdGhlIHZpcnR1YWxpemVkIHNvY2tldCBzaXR1YXRpb24uJiMzNDsgTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgY29uZmlnIFZIT1NUX1ZTT0NLYCBzZXR0aW5nLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIHN0YXRlIG9mIHRoZSB2aG9zdC12c29jayBjb25maWd1cmF0aW9uLiBJcyBpdCBlbmFibGVkLCBkaXNhYmxlZCwgb3IgYnVpbHQgYXMgYSBtb2R1bGU/IFVuZGVyc3RhbmRpbmcgdGhpcyBpcyB0aGUgZm91bmRhdGlvbmFsIGZpcnN0IHN0ZXAuIERlcGVuZGluZyBvbiB0aGUgYW5zd2VyLCBpdCBnaXZlcyB0aGUgZGlyZWN0aW9uIG9mIGZ1cnRoZXIgdHJvdWJsZXNob290aW5nLCBvciBhdCBsZWFzdCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjdXJyZW50IHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkhPU1RfVlNPQ0smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnPTQ2PWNvbmZpZyBWSE9TVF9TQ1NJXG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTU1LVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjU2OmNvbmZpZyBWSE9TVF9WU09DS1xuZHJpdmVycy92aG9zdC9LY29uZmlnLTU3LVx0dHJpc3RhdGUgXCYjMzQ7dmhvc3QgdmlydGlvLXZzb2NrIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYzMQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQ29uZmlndXJhdGlvbiBDaGVjayoqCgpBbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBJIG5lZWQgdG8gZ2V0IGEgYmFzZWxpbmUgdW5kZXJzdGFuZGluZyBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB0byBjaGVjayB0aGUgYGNvbmZpZyBWSE9TVGAgc2V0dGluZ3MuIFRoaXMgaXMgdXN1YWxseSB0aGUgcXVpY2tlc3Qgd2F5IHRvIGlkZW50aWZ5IHRoZSBiYXNpYyB2aXJ0dWFsIGhvc3Qgc2V0dXAuIEkgd2FudCB0byBzZWUgd2hhdCYjMzk7cyBkZWZpbmVkIGF0IHRoZSB0b3AgbGV2ZWwgYW5kIGVuc3VyZSBldmVyeXRoaW5nIGlzIGJlaGF2aW5nIGFzIEkgZXhwZWN0LiBJdCYjMzk7bGwgZ2l2ZSBtZSBhIGZhc3Qgb3ZlcnZpZXcgb2YgaG93IHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIGlzIGRlc2lnbmVkLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hldGhlciB0aGUgdmhvc3QgaXMgbWlzY29uZmlndXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZIT1NUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjI6Y29uZmlnIFZIT1NUX0lPVExCXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMy1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTgtXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6OTpjb25maWcgVkhPU1RfUklOR1xuZHJpdmVycy92aG9zdC9LY29uZmlnLTEwLVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMTUtXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MTY6Y29uZmlnIFZIT1NUX1RBU0tcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0xNy1cdGJvb2xcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMTktXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MjA6Y29uZmlnIFZIT1NUXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMjEtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0yNy1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzoyODptZW51Y29uZmlnIFZIT1NUX01FTlVcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0yOS1cdGJvb2wgXCYjMzQ7VkhPU1QgZHJpdmVyc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZz0zMj1pZiBWSE9TVF9NRU5VXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzMtXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MzQ6Y29uZmlnIFZIT1NUX05FVFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTM1LVx0dHJpc3RhdGUgXCYjMzQ7SG9zdCBrZXJuZWwgYWNjZWxlcmF0b3IgZm9yIHZpcnRpbyBuZXRcJiMzNDtcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDUtXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NDY6Y29uZmlnIFZIT1NUX1NDU0lcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy00Ny1cdHRyaXN0YXRlIFwmIzM0O1ZIT1NUX1NDU0kgVENNIGZhYnJpYyBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTUtXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NTY6Y29uZmlnIFZIT1NUX1ZTT0NLXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTctXHR0cmlzdGF0ZSBcJiMzNDt2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTY5LVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjcwOmNvbmZpZyBWSE9TVF9WRFBBXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzEtXHR0cmlzdGF0ZSBcJiMzNDtWaG9zdCBkcml2ZXIgZm9yIHZEUEEtYmFzZWQgYmFja2VuZFwmIzM0O1xuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy04Mi1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo4Mzpjb25maWcgVkhPU1RfQ1JPU1NfRU5ESUFOX0xFR0FDWVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtDcm9zcy1lbmRpYW4gc3VwcG9ydCBmb3Igdmhvc3RcJiMzNDtcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctOTctXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6OTg6Y29uZmlnIFZIT1NUX0VOQUJMRV9GT1JLX09XTkVSX0NPTlRST0xcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy05OS1cdGJvb2wgXCYjMzQ7RW5hYmxlIFZIT1NUX0VOQUJMRV9GT1JLX09XTkVSX0NPTlRST0xcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MjUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA3NTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVmhvc3QgQ29kZSBDaGFuZ2VzOiBBIFF1aWNrIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIG92ZXIgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQgcHJpbWFyaWx5IGltcGFjdHMgYGRyaXZlcnMvdmhvc3Qvdmhvc3QuY2AuIEkgY2FuIHNlZSB0aGF0IGBDT05GSUdfVkhPU1RgIGlzIHRoZSBrZXkgY29uZmlnIGhlcmUsIGFuZCB0aGF0IGl0JiMzOTtzIHB1bGxlZCBpbiBieSB0aGUgbGlrZXMgb2YgYFZIT1NUX05FVGAgYW5kIGBWSE9TVF9WU09DS2AsIHNvIGVuYWJsaW5nIHRob3NlIHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LgoKSSYjMzk7dmUgemVyb2VkIGluIG9uIHRoZSBtb2RpZmllZCBleHBvcnRlZCBmdW5jdGlvbnMuIGB2aG9zdF9pbml0X2RldmljZV9pb3RsYmAsIGB2aG9zdF9jaHJfcmVhZF9pdGVyYCwgYW5kIGB2aG9zdF9jbGVhcl9tc2dgIGFyZSBkZWZpbml0ZWx5IG9mIGludGVyZXN0LiBJIGNvbmZpcm1lZCB0aGF0IGB2aG9zdF9pbml0X2RldmljZV9pb3RsYmAgaXMgYW4gKmV4aXN0aW5nKiBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQsIGFuZCB0aGUgZGlmZiBzaG93cyB0aGUgYWRkaXRpb24gb2YgYSBuZXcgc3RhdGUgbWFjaGluZSByZWxhdGVkIHRvIElPVExCIG1pc3Nlcy4gTG9va3MgbGlrZSBhIHNvbGlkIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIHZob3N0IGNvZGUuIEkgYWxzbyB2ZXJpZmllZCB0aGF0IGB2aG9zdF9jaHJfcmVhZF9pdGVyYCBhbmQgYHZob3N0X2NsZWFyX21zZ2AgaGF2ZSBiZWVuIG1vZGlmaWVkIGFzIHdlbGwuCgpUaGUgY2hhbmdlcyBhcHBlYXIgdG8gaW1wbGVtZW50IGEgbWVjaGFuaXNtIHRvIGF2b2lkIHNlbmRpbmcgZHVwbGljYXRlIG1pc3MgbWVzc2FnZXMgd2hpY2ggaW5kaWNhdGVzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvZGUuCgpGb3IgZnV6emluZywgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiB0aG9zZSB0aHJlZSBrZXkgc3ltYm9sczogYHZob3N0X2Nocl9yZWFkX2l0ZXJgLCBgdmhvc3RfaW5pdF9kZXZpY2VfaW90bGJgLCBhbmQgYHZob3N0X2NsZWFyX21zZ2AuIEFuZCBvZiBjb3Vyc2UsIEkmIzM5O2xsIGJlIHVzaW5nIGBWSE9TVF9ORVRgLCBgVkhPU1RfVlNPQ0tgLCBhbmQgYFZIT1NUYCBhcyBteSBwcmltYXJ5IGNvbmZpZyBvcHRpb25zLgoKSnVzdCB0byBiZSB0aG9yb3VnaCwgSSBxdWlja2x5IGNoZWNrZWQgZm9yIG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBtb2RpZmllZC4gSSBmb3VuZCB0aGF0IGB2aG9zdF9kZXZfaW5pdGAgaGFzIGJlZW4gbW9kaWZpZWQsIGFuZCBgdmhvc3RfZGVxdWV1ZV9tc2dgIGhhcyBiZWVuIGNoYW5nZWQgYXMgd2VsbC4gU28gSSYjMzk7bGwga2VlcCBhbiBleWUgb24gdGhvc2UgYXMgSSBkaWcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9kZXF1ZXVlX21zZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zob3N0LmM9MzUwOD1FWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9lbnF1ZXVlX21zZyk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUwOS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozNTEwOnN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqdmhvc3RfZGVxdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MTEtXHRcdFx0XHRcdCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTI1LX1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozNTI2OkVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2RlcXVldWVfbXNnKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTI3LVxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaD0yNzM9dm9pZCB2aG9zdF9lbnF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5oLTI3NS1cdFx0ICAgICAgIHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg6Mjc2OnN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqdmhvc3RfZGVxdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LFxuZHJpdmVycy92aG9zdC92aG9zdC5oLTI3Ny1cdFx0XHRcdFx0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkwNQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGB2aG9zdF9kZXF1ZXVlX21zZ2AmIzM5O3MgVXNhZ2UqKgoKUmlnaHQsIGB2aG9zdF9kZXF1ZXVlX21zZ2AgaXMgZXhwb3NlZC4gT2theSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBjaGVjayB0aGUgY3Jvc3MtcmVmZXJlbmNlcy4gSSYjMzk7bGwgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGNhbGwgc2l0ZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gZmluZCB0aGUgbW9kdWxlcyAqY2FsbGluZyogdGhpcyBmdW5jdGlvbi4gS25vd2luZyB0aGF0IHdpbGwgZ2l2ZSBtZSBhIHZlcnkgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSBhbmQgZGVwZW5kZW5jaWVzLiBJcyBpdCBvbmx5IHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gdGhlIHZob3N0IHN1YnN5c3RlbSwgb3IgZG9lcyBpdCBoYXZlIHdpZGVyIGltcGxpY2F0aW9ucz8gQSBxdWljayBzZWFyY2ggb2YgdGhlIGNvZGViYXNlIHNob3VsZCByZXZlYWwgdGhlIGltbWVkaWF0ZSBjYWxsZXJzLiBUaGF0JiMzOTtsbCBwcm92aWRlIHRoZSBncm91bmR3b3JrIGZvciBkZXRlcm1pbmluZyB0aGUgYXJjaGl0ZWN0dXJlJiMzOTtzIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfZGVxdWV1ZV9tc2cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5jPTM1MDg9RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZW5xdWV1ZV9tc2cpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MDktXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzUxMDpzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKnZob3N0X2RlcXVldWVfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTExLVx0XHRcdFx0XHQgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUyNS19XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzUyNjpFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kZXF1ZXVlX21zZyk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUyNy1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg9MjczPXZvaWQgdmhvc3RfZW5xdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LFxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC0yNzUtXHRcdCAgICAgICBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUpO1xuZHJpdmVycy92aG9zdC92aG9zdC5oOjI3NjpzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKnZob3N0X2RlcXVldWVfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC0yNzctXHRcdFx0XHRcdCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0MjIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgRGlzYXBwZWFyYW5jZSBvZiBgdmhvc3RfZGVxdWV1ZV9tc2dgKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGB2aG9zdF9kZXF1ZXVlX21zZ2Agc2VlbXMgdG8gYmUgY2FsbGVkICpvbmx5KiB3aXRoaW4gYHZob3N0LmNgLiBJIGRpZCBhIHF1aWNrIGBncmVwYCwgYW5kIGl0IGRpZG4mIzM5O3QgdHVybiB1cCBhbnkgb3RoZXIgb2NjdXJyZW5jZXMgaW4gdGhlIGNvZGViYXNlIGJlc2lkZXMgYHZob3N0LmNgLCB3aGljaCBpcyBvZGQuCgpIb2xkIG9uLi4uIEkgcmVtZW1iZXIgc2VlaW5nIHNvbWV0aGluZyBhYm91dCB0aGlzIGluIHRoZSBwYXRjaCBub3Rlcy4gQWgsIGhlcmUgaXQgaXM6IHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBgdmhvc3RfZGVxdWV1ZV9tc2dgIGJlaW5nIGNhbGxlZCBpbiBgdmhvc3RfY2hyX3JlYWRfaXRlcmAuIEJ1dCwgdGhhdCBjYWxsIGhhcyBiZWVuICpyZW1vdmVkKiBpbiB0aGUgcGF0Y2ggYW5kIHJlcGxhY2VkIHdpdGggc29tZSBjb2RlIHVzaW5nIGBzcGluX2xvY2tgIGFuZCBjaGVja2luZyB0aGUgYHJlYWRfbGlzdGAuCgpTbywgaXQmIzM5O3MgcHJldHR5IGNsZWFyOiBgdmhvc3RfZGVxdWV1ZV9tc2dgICppc24mIzM5O3QqIHVzZWQgaW4gYHZob3N0X2Nocl9yZWFkX2l0ZXJgIGFueW1vcmUuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIG5vdyBpcy4uLiBpcyBpdCB1c2VkICphbnl3aGVyZSBlbHNlKj8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgbm90IGJlaW5nIGNhbGxlZCBieSBhbnl0aGluZyBlbHNlLiBUaW1lIHRvIGRvIGFub3RoZXIgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X2RlcXVldWVfbXNnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvdmhvc3QuYz0zNTA4PUVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2VucXVldWVfbXNnKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTA5LVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjM1MTA6c3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9kZXF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUxMS1cdFx0XHRcdFx0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MjUtfVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjM1MjY6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGVxdWV1ZV9tc2cpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MjctXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5oPTI3Mz12b2lkIHZob3N0X2VucXVldWVfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjc1LVx0XHQgICAgICAgc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaDoyNzY6c3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9kZXF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjc3LVx0XHRcdFx0XHQgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTY1CgkJCQkJCQlvdXRwdXQ6IDIxNQoJCQkJCQkJdGhvdWdodHM6IDMwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBWaG9zdCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgdGhyb3VnaCB0aGlzIHBhdGNoIGFuZCBoZXJlJiMzOTtzIG15IHRha2U6IHRoZSBmdW5jdGlvbiBgdmhvc3RfZGVxdWV1ZV9tc2dgIGFwcGVhcnMgdG8gYmUgdW51c2VkLCB3aGljaCBpcyBvZGQuIEkgZGlkIGEgZ2xvYmFsIGdyZXAsIHNvIEkmIzM5O20gcHJldHR5IGNvbmZpZGVudCBpdCYjMzk7cyBub3QgYmVpbmcgY2FsbGVkIGFueXdoZXJlIGluIHRoZSBrZXJuZWwgdHJlZSwgdW5sZXNzIGl0JiMzOTtzIGluIHNvbWUgZXh0cmVtZWx5IG9ic2N1cmUsIG5vbi1zdGFuZGFyZCB2aG9zdCBkcml2ZXIuIEJ1dCBmcm9tIHdoYXQgSSBjYW4gc2VlLCBpdCYjMzk7cyBqdXN0IGFuIGV4cG9ydGVkIGZ1bmN0aW9uIHNpdHRpbmcgdGhlcmUsIGRvaW5nIG5vdGhpbmcuCgpOb3csIGxldCYjMzk7cyBnZXQgdG8gdGhlIG1lYXQgb2YgdGhpcyBwYXRjaC4gSSBzZWUgY2hhbmdlcyBmb2N1c2VkIG9uIGB2aG9zdF9jaHJfcmVhZF9pdGVyYCwgYHZob3N0X2luaXRfZGV2aWNlX2lvdGxiYCwgYW5kIGB2aG9zdF9jbGVhcl9tc2dgLiBUaGVzZSBhcmUgY3JpdGljYWwsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGNvbnRleHQuIFRoZSBwYXRjaCAqaW50cm9kdWNlcyBhIG5ldyBzdGF0ZSBtYWNoaW5lKiBkZXNpZ25lZCB0byBoYW5kbGUgdmhvc3QgSU9UTEIgbWlzc2VzIGFuZCwgaW1wb3J0YW50bHksIGNvYWxlc2NlcyB0aG9zZSBtZXNzYWdlcyB0aGF0IGdldCBwYXNzZWQgdXAgdG8gdXNlcnNwYWNlLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgYWJvdXQgb3B0aW1pemluZyBob3cgdGhlIGtlcm5lbCBkZWFscyB3aXRoIG1lbW9yeSBhZGRyZXNzIHRyYW5zbGF0aW9uIGFuZCByZWR1Y2luZyB0aGUgbnVtYmVyIG9mIG5vdGlmaWNhdGlvbnMgc2VudCB0byB0aGUgdXNlcnNwYWNlIHByb2Nlc3MsIHJpZ2h0PwoKU28sIGJlY2F1c2UgdGhpcyB0b3VjaGVzIGNvcmUgdmhvc3QgY29kZSwgYW5kIHRoYXQgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBgL2Rldi92aG9zdC1uZXRgIGFuZCBgL2Rldi92aG9zdC12c29ja2AgZGV2aWNlcywgdGhpcyBpcyBnb2luZyB0byBuZWVkIHNvbWUgc2VyaW91cyBmdXp6aW5nLiBUaGUgZ29hbCBvZiB0aGF0IGZ1enppbmcgaXMgdG8gcm9vdCBvdXQgYW55IHBvdGVudGlhbCBuYXN0aWVzIHRoZSBuZXcgc3RhdGUgbWFjaGluZSBtaWdodCBpbnRyb2R1Y2UuIEkmIzM5O20gdGhpbmtpbmcgZGVhZGxvY2tzIGFyZSBhIHBvc3NpYmlsaXR5LCBhcyB3aXRoIGFueSBzdGF0ZSBtYWNoaW5lIGNoYW5nZSwgYW5kIG9mIGNvdXJzZSwgbWVtb3J5IGxlYWtzIGFuZCB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXRpZXMgYXJlIGFsd2F5cyBvbiB0aGUgdGFibGUgd2hlbiB5b3XigJlyZSBkZWFsaW5nIHdpdGggYXN5bmNocm9ub3VzIGNvbW11bmljYXRpb24gYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXJzcGFjZS4KCkFscmlnaHQsIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgZ29vZCBoYW5kbGUgb24gdGhpcyBhbmQgYW0gcmVhZHkgdG8gZGl2ZSBpbnRvIHRoZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9ORVQmIzM0OywKICAgICYjMzQ7VkhPU1RfVlNPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF9jaHJfcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O3Zob3N0X2luaXRfZGV2aWNlX2lvdGxiJiMzNDssCiAgICAmIzM0O3Zob3N0X2NsZWFyX21zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN0YXRlIG1hY2hpbmUgZm9yIGhhbmRsaW5nIHZob3N0IElPVExCIG1pc3NlcywgY29hbGVzY2luZyBkdXBsaWNhdGUgbWlzcyBtZXNzYWdlcyB0byB1c2Vyc3BhY2UuIFRoaXMgaW52b2x2ZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgdmhvc3QgY29kZSwgc3BlY2lmaWNhbGx5IGluIHRoZSBjaGFyYWN0ZXIgZGV2aWNlIHJlYWQgaGFuZGxlciAodmhvc3RfY2hyX3JlYWRfaXRlciksIGRldmljZSBpbml0aWFsaXphdGlvbiAodmhvc3RfaW5pdF9kZXZpY2VfaW90bGIpLCBhbmQgbWVzc2FnZSBjbGVhcmluZyAodmhvc3RfY2xlYXJfbXNnKS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdmhvc3QgZGV2aWNlIG5vZGVzIChlLmcuLCAvZGV2L3Zob3N0LW5ldCwgL2Rldi92aG9zdC12c29jaykgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgc3RhdGUgbWFjaGluZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgZGVhZGxvY2tzLCBtZW1vcnkgbGVha3MsIG9yIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1RfTkVUJiMzNDssCiAgICAmIzM0O1ZIT1NUX1ZTT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3RfY2hyX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDt2aG9zdF9pbml0X2RldmljZV9pb3RsYiYjMzQ7LAogICAgJiMzNDt2aG9zdF9jbGVhcl9tc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzdGF0ZSBtYWNoaW5lIGZvciBoYW5kbGluZyB2aG9zdCBJT1RMQiBtaXNzZXMsIGNvYWxlc2NpbmcgZHVwbGljYXRlIG1pc3MgbWVzc2FnZXMgdG8gdXNlcnNwYWNlLiBUaGlzIGludm9sdmVzIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIHZob3N0IGNvZGUsIHNwZWNpZmljYWxseSBpbiB0aGUgY2hhcmFjdGVyIGRldmljZSByZWFkIGhhbmRsZXIgKHZob3N0X2Nocl9yZWFkX2l0ZXIpLCBkZXZpY2UgaW5pdGlhbGl6YXRpb24gKHZob3N0X2luaXRfZGV2aWNlX2lvdGxiKSwgYW5kIG1lc3NhZ2UgY2xlYXJpbmcgKHZob3N0X2NsZWFyX21zZykuIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHZob3N0IGRldmljZSBub2RlcyAoZS5nLiwgL2Rldi92aG9zdC1uZXQsIC9kZXYvdmhvc3QtdnNvY2spIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IHN0YXRlIG1hY2hpbmUgZG9lc24mIzM5O3QgaW50cm9kdWNlIGRlYWRsb2NrcywgbWVtb3J5IGxlYWtzLCBvciB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXRpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjE0bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjE0bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9jYWwgYHNuYXBzaG90YCB1bmlvbiBpbiBgdmhvc3RfY2hyX3JlYWRfaXRlcmAgd2hpY2ggaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgdmlhIGBjb3B5X3RvX2l0ZXJfZnVsbGAuIEhvd2V2ZXIsIHRoaXMgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyBiZWNhdXNlOlxuMS4gVGhlIGBzbmFwc2hvdGAgaXMgcG9wdWxhdGVkIHVzaW5nIGBtZW1jcHlgIGZyb20gYW4gZXhpc3RpbmcgbWVzc2FnZSBub2RlIChgZmlyc3QtXHUwMDNlbXNnX3YyYCBvciBgZmlyc3QtXHUwMDNlbXNnYCkuXG4yLiBUaGUgc291cmNlIG1lc3NhZ2Ugbm9kZSBpcyBhbGxvY2F0ZWQgaW4gYHZob3N0X25ld19tc2dgIHVzaW5nIGBremFsbG9jYCAodmlhIGBremFsbG9jX29iamApLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIGVudGlyZSBzdHJ1Y3R1cmUsIGluY2x1ZGluZyBhbnkgY29tcGlsZXItaW5zZXJ0ZWQgcGFkZGluZywgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC5cbjMuIFdoZW4gYSBtZXNzYWdlIGlzIHJldXNlZCBhbmQgaXRzIHR5cGUgY2hhbmdlcywgYHZob3N0X3NldF9pb3RsYl9taXNzYCBleHBsaWNpdGx5IGNhbGxzIGBtZW1zZXRgIHRvIHplcm8gb3V0IHRoZSBtZXNzYWdlIGZpZWxkcywgZW5zdXJpbmcgbm8gc3RhbGUgZGF0YSBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcgcmVtYWlucy5cbjQuIFRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIHRvIHVzZXIgc3BhY2UgZXhhY3RseSBtYXRjaGVzIHRoZSBzaXplIG9mIHRoZSBmdWxseSBpbml0aWFsaXplZCBtZXNzYWdlIHN0cnVjdHVyZS5cblxuVGhlIHJlbWFpbmRlciBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgbGlzdCBtYW5pcHVsYXRpb25zLCBzdGF0ZSB0cmFja2luZyAoYGlvdGxiX21pc3Nfc3RhdGVgKSwgYW5kIGNvYWxlc2NpbmcgbG9naWMgdG8gcHJldmVudCBJT1RMQiBtaXNzIGZsb29kcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBsaXN0IGNvcnJ1cHRpb24sIG9yIGRlYWRsb2NrcykgYXJlIHBlcmZlY3RseSBzdWl0ZWQgZm9yIHN0YW5kYXJkIEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGFiYjcxOTlkNTQ5MTBhNjgxOTUyZWY4ZmQ4NThkY2RkNzc3ZjU5MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDE1OjA4OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5jIGIvZHJpdmVycy92aG9zdC92aG9zdC5jCmluZGV4IDRjNTI1YjNlMTZlYWQuLmVhYjkwNGI0YjQ4NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmMKQEAgLTM0LDYgJiM0MzszNCwxMyBAQAogCiAjaW5jbHVkZSAmIzM0O3Zob3N0LmgmIzM0OwogCiYjNDM7ZW51bSB2aG9zdF9pb3RsYl9taXNzX3N0YXRlIHsKJiM0MzsJVkhPU1RfSU9UTEJfTUlTU19OT05FLAomIzQzOwlWSE9TVF9JT1RMQl9NSVNTX1JFQUQsCiYjNDM7CVZIT1NUX0lPVExCX01JU1NfUkVBRElORywKJiM0MzsJVkhPU1RfSU9UTEJfTUlTU19QRU5ESU5HLAomIzQzO307CiYjNDM7CiBzdGF0aWMgdXNob3J0IG1heF9tZW1fcmVnaW9ucyA9IDY0OwogbW9kdWxlX3BhcmFtKG1heF9tZW1fcmVnaW9ucywgdXNob3J0LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobWF4X21lbV9yZWdpb25zLApAQCAtNjEzLDYgJiM0Mzs2MjAsOSBAQCB2b2lkIHZob3N0X2Rldl9pbml0KHN0cnVjdCB2aG9zdF9kZXYgKmRldiwKIAkJdnEtJmd0O2hlYWRzID0gTlVMTDsKIAkJdnEtJmd0O25oZWFkcyA9IE5VTEw7CiAJCXZxLSZndDtkZXYgPSBkZXY7CiYjNDM7CQl2cS0mZ3Q7aW90bGJfbWlzc19zdGF0ZSA9IFZIT1NUX0lPVExCX01JU1NfTk9ORTsKJiM0MzsJCXZxLSZndDtpb3RsYl9taXNzX3NlcSA9IDA7CiYjNDM7CQl2cS0mZ3Q7aW90bGJfbWlzc19ub2RlID0gTlVMTDsKIAkJbXV0ZXhfaW5pdCgmYW1wO3ZxLSZndDttdXRleCk7CiAJCXZob3N0X3ZxX3Jlc2V0KGRldiwgdnEpOwogCQlpZiAodnEtJmd0O2hhbmRsZV9raWNrKQpAQCAtMTE3Nyw2ICYjNDM7MTE4NywyMCBAQCB2b2lkIHZob3N0X2Rldl9zdG9wKHN0cnVjdCB2aG9zdF9kZXYgKmRldikKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2Rldl9zdG9wKTsKIAomIzQzO3N0YXRpYyB2b2lkIHZob3N0X3VudHJhY2tfaW90bGJfbWlzcyhzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IG5vZGUtJmd0O3ZxOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7dnEtJmd0O2Rldi0mZ3Q7aW90bGJfbG9jayk7CiYjNDM7CiYjNDM7CWlmICh2cS0mZ3Q7aW90bGJfbWlzc19ub2RlICE9IG5vZGUpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXZxLSZndDtpb3RsYl9taXNzX25vZGUgPSBOVUxMOwomIzQzOwl2cS0mZ3Q7aW90bGJfbWlzc19zdGF0ZSA9IFZIT1NUX0lPVExCX01JU1NfTk9ORTsKJiM0MzsJdnEtJmd0O2lvdGxiX21pc3Nfc2VxJiM0MzsmIzQzOzsKJiM0Mzt9CiYjNDM7CiB2b2lkIHZob3N0X2NsZWFyX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlLCAqbjsKQEAgLTExODQsMTIgJiM0MzsxMjA4LDE0IEBAIHZvaWQgdmhvc3RfY2xlYXJfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldikKIAlzcGluX2xvY2soJmFtcDtkZXYtJmd0O2lvdGxiX2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG4sICZhbXA7ZGV2LSZndDtyZWFkX2xpc3QsIG5vZGUpIHsKLQkJbGlzdF9kZWwoJmFtcDtub2RlLSZndDtub2RlKTsKJiM0MzsJCWxpc3RfZGVsX2luaXQoJmFtcDtub2RlLSZndDtub2RlKTsKJiM0MzsJCXZob3N0X3VudHJhY2tfaW90bGJfbWlzcyhub2RlKTsKIAkJa2ZyZWUobm9kZSk7CiAJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG4sICZhbXA7ZGV2LSZndDtwZW5kaW5nX2xpc3QsIG5vZGUpIHsKLQkJbGlzdF9kZWwoJmFtcDtub2RlLSZndDtub2RlKTsKJiM0MzsJCWxpc3RfZGVsX2luaXQoJmFtcDtub2RlLSZndDtub2RlKTsKJiM0MzsJCXZob3N0X3VudHJhY2tfaW90bGJfbWlzcyhub2RlKTsKIAkJa2ZyZWUobm9kZSk7CiAJfQogCkBAIC0xNTg1LDIwICYjNDM7MTYxMSw3MyBAQCBzdGF0aWMgaW5saW5lIGludCB2aG9zdF9nZXRfZGVzYyhzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwKIAlyZXR1cm4gdmhvc3RfY29weV9mcm9tX3VzZXIodnEsIGRlc2MsIHZxLSZndDtkZXNjICYjNDM7IGlkeCwgc2l6ZW9mKCpkZXNjKSk7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IHZob3N0X2lvdGxiX21zZyAqCiYjNDM7dmhvc3RfZ2V0X2lvdGxiX21zZyhzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUpCiYjNDM7ewomIzQzOwlpZiAobm9kZS0mZ3Q7bXNnLnR5cGUgPT0gVkhPU1RfSU9UTEJfTVNHX1YyKQomIzQzOwkJcmV0dXJuICZhbXA7bm9kZS0mZ3Q7bXNnX3YyLmlvdGxiOwomIzQzOwomIzQzOwlyZXR1cm4gJmFtcDtub2RlLSZndDttc2cuaW90bGI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZob3N0X3NldF9pb3RsYl9taXNzKHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSwgYm9vbCB2MiwKJiM0MzsJCQkJIHU2NCBpb3ZhLCBpbnQgYWNjZXNzKQomIzQzO3sKJiM0MzsJc3RydWN0IHZob3N0X2lvdGxiX21zZyAqbXNnOwomIzQzOwl1MzIgdHlwZSA9IHYyID8gVkhPU1RfSU9UTEJfTVNHX1YyIDogVkhPU1RfSU9UTEJfTVNHOwomIzQzOwomIzQzOwlpZiAobm9kZS0mZ3Q7bXNnLnR5cGUgIT0gdHlwZSkKJiM0MzsJCW1lbXNldCgmYW1wO25vZGUtJmd0O21zZ192MiwgMCwgc2l6ZW9mKG5vZGUtJmd0O21zZ192MikpOwomIzQzOwlub2RlLSZndDttc2cudHlwZSA9IHR5cGU7CiYjNDM7CW1zZyA9IHZob3N0X2dldF9pb3RsYl9tc2cobm9kZSk7CiYjNDM7CiYjNDM7CW1zZy0mZ3Q7dHlwZSA9IFZIT1NUX0lPVExCX01JU1M7CiYjNDM7CW1zZy0mZ3Q7aW92YSA9IGlvdmE7CiYjNDM7CW1zZy0mZ3Q7cGVybSA9IGFjY2VzczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgdmhvc3RfaW90bGJfdXBkYXRlX2NvdmVycyhzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICp1cGRhdGUsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1pc3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gbWlzcy0mZ3Q7dHlwZSA9PSBWSE9TVF9JT1RMQl9NSVNTICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHVwZGF0ZS0mZ3Q7aW92YSAmbHQ7PSBtaXNzLSZndDtpb3ZhICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIG1pc3MtJmd0O2lvdmEgLSB1cGRhdGUtJmd0O2lvdmEgJmx0OyB1cGRhdGUtJmd0O3NpemUgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgKHVwZGF0ZS0mZ3Q7cGVybSAmYW1wOyBtaXNzLSZndDtwZXJtKSA9PSBtaXNzLSZndDtwZXJtOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHZob3N0X2lvdGxiX25vdGlmeV92cShzdHJ1Y3Qgdmhvc3RfZGV2ICpkLAogCQkJCSAgc3RydWN0IHZob3N0X2lvdGxiX21zZyAqbXNnKQogewogCXN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSwgKm47CiYjNDM7CWludCBpOwogCiAJc3Bpbl9sb2NrKCZhbXA7ZC0mZ3Q7aW90bGJfbG9jayk7CiAKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGQtJmd0O252cXM7ICYjNDM7JiM0MztpKSB7CiYjNDM7CQlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGQtJmd0O3Zxc1tpXTsKJiM0MzsKJiM0MzsJCW5vZGUgPSB2cS0mZ3Q7aW90bGJfbWlzc19ub2RlOwomIzQzOwkJaWYgKCFub2RlIHx8CiYjNDM7CQkgICAgIXZob3N0X2lvdGxiX3VwZGF0ZV9jb3ZlcnMobXNnLAomIzQzOwkJCQkJICAgICAgIHZob3N0X2dldF9pb3RsYl9tc2cobm9kZSkpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJbGlzdF9kZWxfaW5pdCgmYW1wO25vZGUtJmd0O25vZGUpOwomIzQzOwkJdmhvc3RfdW50cmFja19pb3RsYl9taXNzKG5vZGUpOwomIzQzOwkJdmhvc3RfcG9sbF9xdWV1ZSgmYW1wO3ZxLSZndDtwb2xsKTsKJiM0MzsJCWtmcmVlKG5vZGUpOwomIzQzOwl9CiYjNDM7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG4sICZhbXA7ZC0mZ3Q7cGVuZGluZ19saXN0LCBub2RlKSB7CiAJCXN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKnZxX21zZyA9ICZhbXA7bm9kZS0mZ3Q7bXNnLmlvdGxiOwomIzQzOwomIzQzOwkJaWYgKG5vZGUtJmd0O3ZxLSZndDtpb3RsYl9taXNzX25vZGUgPT0gbm9kZSkKJiM0MzsJCQljb250aW51ZTsKIAkJaWYgKG1zZy0mZ3Q7aW92YSAmbHQ7PSB2cV9tc2ctJmd0O2lvdmEgJmFtcDsmYW1wOwogCQkgICAgbXNnLSZndDtpb3ZhICYjNDM7IG1zZy0mZ3Q7c2l6ZSAtIDEgJmd0Oz0gdnFfbXNnLSZndDtpb3ZhICZhbXA7JmFtcDsKIAkJICAgIHZxX21zZy0mZ3Q7dHlwZSA9PSBWSE9TVF9JT1RMQl9NSVNTKSB7CiAJCQl2aG9zdF9wb2xsX3F1ZXVlKCZhbXA7bm9kZS0mZ3Q7dnEtJmd0O3BvbGwpOwotCQkJbGlzdF9kZWwoJmFtcDtub2RlLSZndDtub2RlKTsKJiM0MzsJCQlsaXN0X2RlbF9pbml0KCZhbXA7bm9kZS0mZ3Q7bm9kZSk7CiAJCQlrZnJlZShub2RlKTsKIAkJfQogCX0KQEAgLTE3NTUsOSAmIzQzOzE4MzQsMTggQEAgc3NpemVfdCB2aG9zdF9jaHJfcmVhZF9pdGVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IGlvdl9pdGVyICp0bywKIAkJCSAgICBpbnQgbm9ibG9jaykKIHsKIAlERUZJTkVfV0FJVCh3YWl0KTsKLQlzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGU7CiYjNDM7CXVuaW9uIHsKJiM0MzsJCXN0cnVjdCB2aG9zdF9tc2cgbXNnOwomIzQzOwkJc3RydWN0IHZob3N0X21zZ192MiBtc2dfdjI7CiYjNDM7CX0gc25hcHNob3Q7CiYjNDM7CXN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbWlzc190b2tlbiA9IE5VTEw7CiYjNDM7CXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKm1pc3NfdnEgPSBOVUxMOwomIzQzOwlzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUgPSBOVUxMOwomIzQzOwl1NjQgbWlzc19zZXEgPSAwOwogCXNzaXplX3QgcmV0ID0gMDsKIAl1bnNpZ25lZCBzaXplID0gc2l6ZW9mKHN0cnVjdCB2aG9zdF9tc2cpOwomIzQzOwlib29sIHNob3J0X2J1ZmZlciA9IGZhbHNlOwomIzQzOwlib29sIHdha2UgPSBmYWxzZTsKIAogCWlmIChpb3ZfaXRlcl9jb3VudCh0bykgJmx0OyBzaXplKQogCQlyZXR1cm4gMDsKQEAgLTE3NjcsOCAmIzQzOzE4NTUsMzYgQEAgc3NpemVfdCB2aG9zdF9jaHJfcmVhZF9pdGVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IGlvdl9pdGVyICp0bywKIAkJCXByZXBhcmVfdG9fd2FpdCgmYW1wO2Rldi0mZ3Q7d2FpdCwgJmFtcDt3YWl0LAogCQkJCQlUQVNLX0lOVEVSUlVQVElCTEUpOwogCi0JCW5vZGUgPSB2aG9zdF9kZXF1ZXVlX21zZyhkZXYsICZhbXA7ZGV2LSZndDtyZWFkX2xpc3QpOwotCQlpZiAobm9kZSkKJiM0MzsJCXNwaW5fbG9jaygmYW1wO2Rldi0mZ3Q7aW90bGJfbG9jayk7CiYjNDM7CQlpZiAoIWxpc3RfZW1wdHkoJmFtcDtkZXYtJmd0O3JlYWRfbGlzdCkpIHsKJiM0MzsJCQlzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKmZpcnN0OwomIzQzOwomIzQzOwkJCWZpcnN0ID0gbGlzdF9maXJzdF9lbnRyeSgmYW1wO2Rldi0mZ3Q7cmVhZF9saXN0LAomIzQzOwkJCQkJCSBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUsIG5vZGUpOwomIzQzOwkJCWlmIChmaXJzdC0mZ3Q7dnEtJmd0O2lvdGxiX21pc3Nfbm9kZSA9PSBmaXJzdCkgewomIzQzOwkJCQlzaXplID0gZmlyc3QtJmd0O21zZy50eXBlID09IFZIT1NUX0lPVExCX01TR19WMiA/CiYjNDM7CQkJCSAgICAgICBzaXplb2YoZmlyc3QtJmd0O21zZ192MikgOiBzaXplb2YoZmlyc3QtJmd0O21zZyk7CiYjNDM7CQkJCWlmIChpb3ZfaXRlcl9jb3VudCh0bykgJmx0OyBzaXplKSB7CiYjNDM7CQkJCQlzaG9ydF9idWZmZXIgPSB0cnVlOwomIzQzOwkJCQl9IGVsc2UgewomIzQzOwkJCQkJbWVtY3B5KCZhbXA7c25hcHNob3QubXNnX3YyLCAmYW1wO2ZpcnN0LSZndDttc2dfdjIsCiYjNDM7CQkJCQkgICAgICAgc2l6ZSk7CiYjNDM7CQkJCQlsaXN0X21vdmVfdGFpbCgmYW1wO2ZpcnN0LSZndDtub2RlLAomIzQzOwkJCQkJCSAgICAgICAmYW1wO2Rldi0mZ3Q7cGVuZGluZ19saXN0KTsKJiM0MzsJCQkJCWZpcnN0LSZndDt2cS0mZ3Q7aW90bGJfbWlzc19zdGF0ZSA9CiYjNDM7CQkJCQkJVkhPU1RfSU9UTEJfTUlTU19SRUFESU5HOwomIzQzOwkJCQkJbWlzc192cSA9IGZpcnN0LSZndDt2cTsKJiM0MzsJCQkJCW1pc3NfdG9rZW4gPSBmaXJzdDsKJiM0MzsJCQkJCW1pc3Nfc2VxID0gZmlyc3QtJmd0O3ZxLSZndDtpb3RsYl9taXNzX3NlcTsKJiM0MzsJCQkJfQomIzQzOwkJCX0gZWxzZSB7CiYjNDM7CQkJCWxpc3RfZGVsX2luaXQoJmFtcDtmaXJzdC0mZ3Q7bm9kZSk7CiYjNDM7CQkJCW5vZGUgPSBmaXJzdDsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO2Rldi0mZ3Q7aW90bGJfbG9jayk7CiYjNDM7CiYjNDM7CQlpZiAobm9kZSB8fCBtaXNzX3ZxIHx8IHNob3J0X2J1ZmZlcikKIAkJCWJyZWFrOwogCQlpZiAobm9ibG9jaykgewogCQkJcmV0ID0gLUVBR0FJTjsKQEAgLTE3ODksNiAmIzQzOzE5MDUsMzQgQEAgc3NpemVfdCB2aG9zdF9jaHJfcmVhZF9pdGVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IGlvdl9pdGVyICp0bywKIAlpZiAoIW5vYmxvY2spCiAJCWZpbmlzaF93YWl0KCZhbXA7ZGV2LSZndDt3YWl0LCAmYW1wO3dhaXQpOwogCiYjNDM7CWlmIChzaG9ydF9idWZmZXIpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKG1pc3NfdnEpIHsKJiM0MzsJCWJvb2wgY29waWVkID0gY29weV90b19pdGVyX2Z1bGwoJmFtcDtzbmFwc2hvdC5tc2dfdjIsIHNpemUsIHRvKTsKJiM0MzsKJiM0MzsJCXNwaW5fbG9jaygmYW1wO2Rldi0mZ3Q7aW90bGJfbG9jayk7CiYjNDM7CQlub2RlID0gbWlzc192cS0mZ3Q7aW90bGJfbWlzc19ub2RlOwomIzQzOwkJaWYgKG5vZGUgPT0gbWlzc190b2tlbiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbWlzc192cS0mZ3Q7aW90bGJfbWlzc19zZXEgPT0gbWlzc19zZXEgJmFtcDsmYW1wOwomIzQzOwkJICAgIG1pc3NfdnEtJmd0O2lvdGxiX21pc3Nfc3RhdGUgPT0gVkhPU1RfSU9UTEJfTUlTU19SRUFESU5HKSB7CiYjNDM7CQkJaWYgKGNvcGllZCkgewomIzQzOwkJCQltaXNzX3ZxLSZndDtpb3RsYl9taXNzX3N0YXRlID0KJiM0MzsJCQkJCVZIT1NUX0lPVExCX01JU1NfUEVORElORzsKJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQlsaXN0X21vdmVfdGFpbCgmYW1wO25vZGUtJmd0O25vZGUsICZhbXA7ZGV2LSZndDtyZWFkX2xpc3QpOwomIzQzOwkJCQltaXNzX3ZxLSZndDtpb3RsYl9taXNzX3N0YXRlID0gVkhPU1RfSU9UTEJfTUlTU19SRUFEOwomIzQzOwkJCQl3YWtlID0gdHJ1ZTsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO2Rldi0mZ3Q7aW90bGJfbG9jayk7CiYjNDM7CiYjNDM7CQlpZiAod2FrZSkKJiM0MzsJCQl3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbCgmYW1wO2Rldi0mZ3Q7d2FpdCwKJiM0MzsJCQkJCQkgICBFUE9MTElOIHwgRVBPTExSRE5PUk0pOwomIzQzOwkJcmV0dXJuIGNvcGllZCA/IHNpemUgOiAtRUZBVUxUOwomIzQzOwl9CiYjNDM7CiAJaWYgKG5vZGUpIHsKIAkJc3RydWN0IHZob3N0X2lvdGxiX21zZyAqbXNnOwogCQl2b2lkICpzdGFydCA9ICZhbXA7bm9kZS0mZ3Q7bXNnOwpAQCAtMTgxOSwyOSAmIzQzOzE5NjMsNjkgQEAgc3NpemVfdCB2aG9zdF9jaHJfcmVhZF9pdGVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IGlvdl9pdGVyICp0bywKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2Nocl9yZWFkX2l0ZXIpOwogCiYjNDM7c3RhdGljIGJvb2wgdmhvc3RfaW90bGJfbWlzc19jb2FsZXNjZShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgYm9vbCB2MiwKJiM0MzsJCQkJICAgICAgdTY0IGlvdmEsIGludCBhY2Nlc3MsIGJvb2wgKndha2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUgPSB2cS0mZ3Q7aW90bGJfbWlzc19ub2RlOwomIzQzOwlzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2c7CiYjNDM7CXUzMiB0eXBlID0gdjIgPyBWSE9TVF9JT1RMQl9NU0dfVjIgOiBWSE9TVF9JT1RMQl9NU0c7CiYjNDM7CWJvb2wgc2FtZTsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3ZxLSZndDtkZXYtJmd0O2lvdGxiX2xvY2spOwomIzQzOwomIzQzOwlpZiAoIW5vZGUpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW1zZyA9IHZob3N0X2dldF9pb3RsYl9tc2cobm9kZSk7CiYjNDM7CXNhbWUgPSBub2RlLSZndDttc2cudHlwZSA9PSB0eXBlICZhbXA7JmFtcDsgbXNnLSZndDt0eXBlID09IFZIT1NUX0lPVExCX01JU1MgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgbXNnLSZndDtpb3ZhID09IGlvdmEgJmFtcDsmYW1wOyBtc2ctJmd0O3Blcm0gPT0gYWNjZXNzOwomIzQzOwlpZiAoc2FtZSAmYW1wOyZhbXA7IHZxLSZndDtpb3RsYl9taXNzX3N0YXRlICE9IFZIT1NUX0lPVExCX01JU1NfUkVBRElORykKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlpZiAoIXNhbWUpCiYjNDM7CQl2aG9zdF9zZXRfaW90bGJfbWlzcyhub2RlLCB2MiwgaW92YSwgYWNjZXNzKTsKJiM0MzsJdnEtJmd0O2lvdGxiX21pc3Nfc2VxJiM0MzsmIzQzOzsKJiM0MzsJaWYgKHZxLSZndDtpb3RsYl9taXNzX3N0YXRlICE9IFZIT1NUX0lPVExCX01JU1NfUkVBRCkgewomIzQzOwkJbGlzdF9tb3ZlX3RhaWwoJmFtcDtub2RlLSZndDtub2RlLCAmYW1wO3ZxLSZndDtkZXYtJmd0O3JlYWRfbGlzdCk7CiYjNDM7CQl2cS0mZ3Q7aW90bGJfbWlzc19zdGF0ZSA9IFZIT1NUX0lPVExCX01JU1NfUkVBRDsKJiM0MzsJCSp3YWtlID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHZob3N0X2lvdGxiX21pc3Moc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHU2NCBpb3ZhLCBpbnQgYWNjZXNzKQogewogCXN0cnVjdCB2aG9zdF9kZXYgKmRldiA9IHZxLSZndDtkZXY7CiAJc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlOwotCXN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1zZzsKIAlib29sIHYyID0gdmhvc3RfYmFja2VuZF9oYXNfZmVhdHVyZSh2cSwgVkhPU1RfQkFDS0VORF9GX0lPVExCX01TR19WMik7CiYjNDM7CWJvb2wgd2FrZSA9IGZhbHNlOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7dnEtJmd0O211dGV4KTsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7ZGV2LSZndDtpb3RsYl9sb2NrKTsKJiM0MzsJaWYgKHZob3N0X2lvdGxiX21pc3NfY29hbGVzY2UodnEsIHYyLCBpb3ZhLCBhY2Nlc3MsICZhbXA7d2FrZSkpIHsKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7ZGV2LSZndDtpb3RsYl9sb2NrKTsKJiM0MzsJCWlmICh3YWtlKQomIzQzOwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKCZhbXA7ZGV2LSZndDt3YWl0LAomIzQzOwkJCQkJCSAgIEVQT0xMSU4gfCBFUE9MTFJETk9STSk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9jaygmYW1wO2Rldi0mZ3Q7aW90bGJfbG9jayk7CiAKIAlub2RlID0gdmhvc3RfbmV3X21zZyh2cSwgdjIgPyBWSE9TVF9JT1RMQl9NU0dfVjIgOiBWSE9TVF9JT1RMQl9NU0cpOwogCWlmICghbm9kZSkKIAkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CXZob3N0X3NldF9pb3RsYl9taXNzKG5vZGUsIHYyLCBpb3ZhLCBhY2Nlc3MpOwogCi0JaWYgKHYyKSB7Ci0JCW5vZGUtJmd0O21zZ192Mi50eXBlID0gVkhPU1RfSU9UTEJfTVNHX1YyOwotCQltc2cgPSAmYW1wO25vZGUtJmd0O21zZ192Mi5pb3RsYjsKLQl9IGVsc2UgewotCQltc2cgPSAmYW1wO25vZGUtJmd0O21zZy5pb3RsYjsKLQl9Ci0KLQltc2ctJmd0O3R5cGUgPSBWSE9TVF9JT1RMQl9NSVNTOwotCW1zZy0mZ3Q7aW92YSA9IGlvdmE7Ci0JbXNnLSZndDtwZXJtID0gYWNjZXNzOwomIzQzOwlzcGluX2xvY2soJmFtcDtkZXYtJmd0O2lvdGxiX2xvY2spOwomIzQzOwl2cS0mZ3Q7aW90bGJfbWlzc19ub2RlID0gbm9kZTsKJiM0MzsJdnEtJmd0O2lvdGxiX21pc3Nfc3RhdGUgPSBWSE9TVF9JT1RMQl9NSVNTX1JFQUQ7CiYjNDM7CXZxLSZndDtpb3RsYl9taXNzX3NlcSYjNDM7JiM0Mzs7CiYjNDM7CWxpc3RfYWRkX3RhaWwoJmFtcDtub2RlLSZndDtub2RlLCAmYW1wO2Rldi0mZ3Q7cmVhZF9saXN0KTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtkZXYtJmd0O2lvdGxiX2xvY2spOwogCi0Jdmhvc3RfZW5xdWV1ZV9tc2coZGV2LCAmYW1wO2Rldi0mZ3Q7cmVhZF9saXN0LCBub2RlKTsKJiM0MzsJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGwoJmFtcDtkZXYtJmd0O3dhaXQsIEVQT0xMSU4gfCBFUE9MTFJETk9STSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIyNzAsMjcgJiM0MzsyNDU0LDU5IEBAIGxvbmcgdmhvc3RfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X2RldiAqZCwgdW5zaWduZWQgaW50IGlvY3RsLCB2b2lkIF9fdXNlciAqYXJnCiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF92cmluZ19pb2N0bCk7CiAKJiM0MztzdGF0aWMgYm9vbCB2aG9zdF9yZXRyeV9pb3RsYl9taXNzZXMoc3RydWN0IHZob3N0X2RldiAqZCkKJiM0Mzt7CiYjNDM7CWJvb2wgd2FrZSA9IGZhbHNlOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2QtJmd0O2lvdGxiX2xvY2spOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZC0mZ3Q7bnZxczsgJiM0MzsmIzQzO2kpIHsKJiM0MzsJCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gZC0mZ3Q7dnFzW2ldOwomIzQzOwkJc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlID0gdnEtJmd0O2lvdGxiX21pc3Nfbm9kZTsKJiM0MzsKJiM0MzsJCWlmICghbm9kZSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXZxLSZndDtpb3RsYl9taXNzX3NlcSYjNDM7JiM0Mzs7CiYjNDM7CQlpZiAodnEtJmd0O2lvdGxiX21pc3Nfc3RhdGUgIT0gVkhPU1RfSU9UTEJfTUlTU19SRUFEKQomIzQzOwkJCWxpc3RfbW92ZV90YWlsKCZhbXA7bm9kZS0mZ3Q7bm9kZSwgJmFtcDtkLSZndDtyZWFkX2xpc3QpOwomIzQzOwkJdnEtJmd0O2lvdGxiX21pc3Nfc3RhdGUgPSBWSE9TVF9JT1RMQl9NSVNTX1JFQUQ7CiYjNDM7CQl3YWtlID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gd2FrZTsKJiM0Mzt9CiYjNDM7CiBpbnQgdmhvc3RfaW5pdF9kZXZpY2VfaW90bGIoc3RydWN0IHZob3N0X2RldiAqZCkKIHsKIAlzdHJ1Y3Qgdmhvc3RfaW90bGIgKm5pb3RsYiwgKm9pb3RsYjsKJiM0MzsJYm9vbCB3YWtlOwogCWludCBpOwogCiAJbmlvdGxiID0gaW90bGJfYWxsb2MoKTsKIAlpZiAoIW5pb3RsYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKJiM0MzsJdmhvc3RfZGV2X2xvY2tfdnFzKGQpOwogCW9pb3RsYiA9IGQtJmd0O2lvdGxiOwogCWQtJmd0O2lvdGxiID0gbmlvdGxiOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IGQtJmd0O252cXM7ICYjNDM7JiM0MztpKSB7CiAJCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gZC0mZ3Q7dnFzW2ldOwogCi0JCW11dGV4X2xvY2soJmFtcDt2cS0mZ3Q7bXV0ZXgpOwogCQl2cS0mZ3Q7aW90bGIgPSBuaW90bGI7CiAJCV9fdmhvc3RfdnFfbWV0YV9yZXNldCh2cSk7Ci0JCW11dGV4X3VubG9jaygmYW1wO3ZxLSZndDttdXRleCk7CiAJfQogCiYjNDM7CXNwaW5fbG9jaygmYW1wO2QtJmd0O2lvdGxiX2xvY2spOwomIzQzOwl3YWtlID0gdmhvc3RfcmV0cnlfaW90bGJfbWlzc2VzKGQpOwomIzQzOwlzcGluX3VubG9jaygmYW1wO2QtJmd0O2lvdGxiX2xvY2spOwomIzQzOwl2aG9zdF9kZXZfdW5sb2NrX3ZxcyhkKTsKJiM0MzsKJiM0MzsJaWYgKHdha2UpCiYjNDM7CQl3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbCgmYW1wO2QtJmd0O3dhaXQsCiYjNDM7CQkJCQkgICBFUE9MTElOIHwgRVBPTExSRE5PUk0pOwogCXZob3N0X2lvdGxiX2ZyZWUob2lvdGxiKTsKIAogCXJldHVybiAwOwpAQCAtMzMwMCw3ICYjNDM7MzUxNiw4IEBAIHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqdmhvc3RfZGVxdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LAogCWlmICghbGlzdF9lbXB0eShoZWFkKSkgewogCQlub2RlID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUsCiAJCQkJCW5vZGUpOwotCQlsaXN0X2RlbCgmYW1wO25vZGUtJmd0O25vZGUpOwomIzQzOwkJbGlzdF9kZWxfaW5pdCgmYW1wO25vZGUtJmd0O25vZGUpOwomIzQzOwkJdmhvc3RfdW50cmFja19pb3RsYl9taXNzKG5vZGUpOwogCX0KIAlzcGluX3VubG9jaygmYW1wO2Rldi0mZ3Q7aW90bGJfbG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaCBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaAppbmRleCAwMTkyYWRlNmU3NDkxLi41MGZjY2M4NWQ1OTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC92aG9zdC5oCkBAIC0yOSw2ICYjNDM7MjksNyBAQCBzdHJ1Y3Qgdmhvc3Rfd29yayB7CiAKIHN0cnVjdCB2aG9zdF93b3JrZXI7CiBzdHJ1Y3Qgdmhvc3RfZGV2OwomIzQzO3N0cnVjdCB2aG9zdF9tc2dfbm9kZTsKIAogc3RydWN0IHZob3N0X3dvcmtlcl9vcHMgewogCWludCAoKmNyZWF0ZSkoc3RydWN0IHZob3N0X3dvcmtlciAqd29ya2VyLCBzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsCkBAIC0xNjMsNyAmIzQzOzE2NCwxMiBAQCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlIHsKIAkvKiBSaW5nIGVuZGlhbm5lc3MgcmVxdWVzdGVkIGJ5IHVzZXJzcGFjZSBmb3IgY3Jvc3MtZW5kaWFuIHN1cHBvcnQuICovCiAJYm9vbCB1c2VyX2JlOwogI2VuZGlmCiYjNDM7CS8qIFByb3RlY3RlZCBieSBkZXYtJmd0O2lvdGxiX2xvY2suICovCiYjNDM7CXU4IGlvdGxiX21pc3Nfc3RhdGU7CiAJdTMyIGJ1c3lsb29wX3RpbWVvdXQ7CiYjNDM7CS8qIFByb3RlY3RlZCBieSBkZXYtJmd0O2lvdGxiX2xvY2suICovCiYjNDM7CXU2NCBpb3RsYl9taXNzX3NlcTsKJiM0MzsJc3RydWN0IHZob3N0X21zZ19ub2RlICppb3RsYl9taXNzX25vZGU7CiB9OwogCiBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDExMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElPVExCIE1pc3MgVHJhY2tpbmcgaW4gdmhvc3QqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gSU9UTEIgbWlzcyBoYW5kbGluZyB3aXRoaW4gdGhlIHZob3N0IGluZnJhc3RydWN0dXJlLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG1vZGlmaWNhdGlvbiBpcyBpbiBgZHJpdmVycy92aG9zdC92aG9zdC5jYCBhbmQgYGRyaXZlcnMvdmhvc3Qvdmhvc3QuaGAsIGFuZCB0aGUgZ29hbCBpcyB0byB0cmFjayBJT1RMQiBtaXNzZXMgYXQgdGhlIHZpcnRxdWV1ZSBsZXZlbCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZXkmIzM5O3ZlIGFkZGVkIGBpb3RsYl9taXNzX3N0YXRlYCwgYGlvdGxiX21pc3Nfc2VxYCwgYW5kIGBpb3RsYl9taXNzX25vZGVgIHRvIHRoZSBgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZWAuIFRoYXQgZ2l2ZXMgdXMgcGVyLXZpcnRxdWV1ZSBzdGF0ZSBmb3IgSU9UTEIgbWlzcyBtYW5hZ2VtZW50LCBhbmQgdGhlIHNlcXVlbmNlIG51bWJlciBzdWdnZXN0cyBzb21lIHNvcnQgb2Ygb3JkZXJpbmcgb3IgdHJhY2tpbmcuCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIGB2aG9zdF9jaHJfcmVhZF9pdGVyYC4gVGhpcyBpcyB3aGVyZSB0aGUgZGF0YSBmcm9tIHRoZSB2aG9zdCBkZXZpY2UgaXMgcmVhZCBpbnRvIHVzZXIgc3BhY2UuIFRoZSBpbXBvcnRhbnQgc2VjdGlvbiBzZWVtcyB0byBiZSB0aGUgYWRkZWQgY29kZSB0aGF0IGRlYWxzIHdpdGggcmVhZGluZyBJT1RMQiBtaXNzIG1lc3NhZ2VzLiBJdCBsb29rcyBsaWtlIGl0IHRyaWVzIHRvIGF0b21pY2FsbHkgYWNxdWlyZSBhIG1lc3NhZ2UgKHVzaW5nIGBzcGluX2xvY2tgIGFuZCB0aGUgYHJlYWRfbGlzdGApLgoKVGhlIGxvZ2ljIGxvb2tzIGxpa2UgaXQgY2hlY2tzIGlmIHRoZSBmaXJzdCBtZXNzYWdlIGluIGBkZXYtJmd0O3JlYWRfbGlzdGAgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIElPVExCIG1pc3MgKGBmaXJzdC0mZ3Q7dnEtJmd0O2lvdGxiX21pc3Nfbm9kZSA9PSBmaXJzdGApLiBJZiBzbywgYW5kIGlmIHRoZXJlJiMzOTtzIGVub3VnaCBzcGFjZSBpbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLCBpdCBtb3ZlcyB0aGUgbWVzc2FnZSBmcm9tIGBkZXYtJmd0O3JlYWRfbGlzdGAgdG8gYGRldi0mZ3Q7cGVuZGluZ19saXN0YCwgc2V0cyB0aGUgYGlvdGxiX21pc3Nfc3RhdGVgIHRvIGBWSE9TVF9JT1RMQl9NSVNTX1JFQURJTkdgIG9uIHRoZSB2aXJ0cXVldWUsIGFuZCBzdG9yZXMgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWlzcyAobGlrZSB0aGUgdmlydHF1ZXVlIHBvaW50ZXIsIHRoZSBtZXNzYWdlIHRva2VuLCBhbmQgdGhlIHNlcXVlbmNlIG51bWJlcikuIFRoZW4sIGl0IGNvcGllcyB0aGUgbWVzc2FnZSB0byBhIGxvY2FsIGBzbmFwc2hvdGAgdW5pb24gYW5kIGV4aXRzLiBJZiB0aGVyZSYjMzk7cyBub3QgZW5vdWdoIHNwYWNlIGluIHRoZSBidWZmZXIsIGl0IGp1c3QgcmV0dXJucy4KClRoZSBrZXkgb2JzZXJ2YXRpb24gaXMgaG93IHRoZSBkYXRhIGlzIGhhbmRsZWQuIGBmaXJzdC0mZ3Q7bXNnX3YyYCBpcyBjb3BpZWQgdG8gYHNuYXBzaG90Lm1zZ192MmAsIGFuZCB0aGUgYHNuYXBzaG90YCBpcyBhIHVuaW9uIHRoYXQgY29udGFpbnMgYm90aCBgdmhvc3RfbXNnYCBhbmQgYHZob3N0X21zZ192MmAuIFRoZSBjb2RlIHN1YnNlcXVlbnRseSB1c2VzIGBjb3B5X3RvX2l0ZXJfZnVsbGAgdG8gZ2V0IHRoZSBkYXRhIHRvIHVzZXIgc3BhY2UuCgpOb3csIEkmIzM5O20gYSBiaXQgY29uY2VybmVkLiBUaGUgcGF0Y2ggY29waWVzIGBmaXJzdC0mZ3Q7bXNnX3YyYCB3aXRob3V0IGFueSBleHBsaWNpdCBpbml0aWFsaXphdGlvbiBvZiB0aGUgZW50aXJlIGBmaXJzdC0mZ3Q7bXNnX3YyYCBzdHJ1Y3QgYXQgdGhhdCBwb2ludCwgb3RoZXIgdGhhbiBjaGVja2luZyBmb3IgdGhlIHJlcXVpcmVkIGJ1ZmZlciBzaXplLiBMZXQmIzM5O3Mgc2VlIGhvdyBgdmhvc3Rfc2V0X2lvdGxiX21pc3NgIGluaXRpYWxpemVzIHRoaXMgbWVzc2FnZS4gT2theSwgaWYgYG5vZGUtJmd0O21zZy50eXBlICE9IHR5cGVgIHRoZW4gaXQgemVyb3MgdGhlIGBub2RlLSZndDttc2dfdjJgLiBCdXQgZG9lcyB0aGF0IGFsd2F5cyBoYXBwZW4/IGB2aG9zdF9zZXRfaW90bGJfbWlzc2AgZ2V0cyBjYWxsZWQgd2l0aGluIGB2aG9zdF9pb3RsYl9taXNzYCwgYnV0IHRoZSBjcnVjaWFsIGNoZWNrIGlzIGluIGB2aG9zdF9uZXdfbXNnYC4gSSBoYXZlIHRvIGNoZWNrIGB2aG9zdF9uZXdfbXNnYCB0byBzZWUgaWYgdGhlIGFsbG9jYXRlZCBgbm9kZWAgaXMgaW5pdGlhbGl6ZWQgdG8gemVybywgYmVmb3JlIGB2aG9zdF9zZXRfaW90bGJfbWlzc2AgZ2V0cyBjYWxsZWQgYW5kIHBvdGVudGlhbGx5IHplcm8mIzM5O3Mgb3V0IHRoZSBgbXNnX3YyYCB1bmlvbi4gSWYgYHZob3N0X25ld19tc2dgIGlzbiYjMzk7dCB6ZXJvaW5nIHRoZSBtZW1vcnksIHRoZW4gdGhpcyBpcyBhIHBvdGVudGlhbCByZWFkLXVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdHkhIFRoaXMgaXMgdGhlIG1vc3QgY3J1Y2lhbCBwYXJ0IHRvIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9uZXdfbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvdmhvc3QuYz0xOTk3PXN0YXRpYyBpbnQgdmhvc3RfaW90bGJfbWlzcyhzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgdTY0IGlvdmEsIGludCBhY2Nlc3MpXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTIwMTUtXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MjAxNjpcdG5vZGUgPSB2aG9zdF9uZXdfbXNnKHZxLCB2MiA/IFZIT1NUX0lPVExCX01TR19WMiA6IFZIT1NUX0lPVExCX01TRyk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjAxNy1cdGlmICghbm9kZSlcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9MzQ4Mz1FWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kaXNhYmxlX25vdGlmeSk7XG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM0ODUtLyogQ3JlYXRlIGEgbmV3IG1lc3NhZ2UuICovXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzQ4NjpzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKnZob3N0X25ld19tc2coc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIGludCB0eXBlKVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM0ODcte1xuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNDk2LX1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozNDk3OkVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X25ld19tc2cpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTM0OTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5NDkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyB0aGUgYHZob3N0X25ld19tc2dgIGltcGxlbWVudGF0aW9uLCBmcm9tIGEgc2Vhc29uZWQgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHZob3N0X25ld19tc2cqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYHZob3N0X25ld19tc2dgLiBJJiMzOTt2ZSBzZWVuIHRoaXMgZnVuY3Rpb24gYmVmb3JlLCBhbmQgaXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlIGluIGhvdyB2aXJ0dWFsIGhvc3RzIGFyZSBlc3RhYmxpc2hlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb3JlIGFzcGVjdHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIGNyZWF0aW5nIG9yIGluaXRpYWxpemluZyBhIG5ldyB2aXJ0dWFsIGhvc3QgY29ubmVjdGlvbiwgbGlrZWx5IHNpZ25hbGluZyBzb21lIG5ldyBjb25uZWN0aW9uIGluZm9ybWF0aW9uIGZyb20gYSBndWVzdCB0byB0aGUgaG9zdC4KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIHJlc291cmNlIGFsbG9jYXRpb24sIG1lc3NhZ2UgcGFyc2luZywgYW5kIGFueSBpbml0aWFsIGNoZWNrcyBpdCBwZXJmb3Jtcy4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaWYgaXQgaW50ZXJmYWNlcyBkaXJlY3RseSB3aXRoIHRoZSB2aXJ0aW8gZHJpdmVyIG9yIHdoZXRoZXIgaXQgZGVsZWdhdGVzIHRoZXNlIHRhc2tzLgoKSSBleHBlY3QgdG8gc2VlIHNvbWUga2luZCBvZiBoYW5kc2hha2UgbG9naWMsIGVuc3VyaW5nIHByb3BlciBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgZ3Vlc3QgYW5kIGhvc3QuIFRoZSBtZXNzYWdlIGxpa2VseSBpbmNsdWRlcyBkZXRhaWxzIGxpa2UgdGhlIGZlYXR1cmVzIG5lZ290aWF0ZWQsIG1lbW9yeSByZWdpb25zIGV4cG9zZWQsIGFuZCBwb3RlbnRpYWxseSBldmVuIGluaXRpYWxpemF0aW9uIGNvbW1hbmRzLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIOKAkyB0aGUgc2V0LXVwIG9mIHRoZSBzaGFyZWQgbWVtb3J5IHJlZ2lvbnMsIHdoaWNoIGFyZSBzbyB2aXRhbCB0byB2aG9zdOKAmXMgZWZmaWNpZW5jeS4KCknigJltIGFsc28gaW50ZXJlc3RlZCBpbiBpdHMgZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgdGhlIGluaXRpYWwgY29ubmVjdGlvbiBzZXR1cD8gRG9lcyBpdCBzaW1wbHkgcmV0dXJuIGFuIGVycm9yLCBvciBhcmUgdGhlcmUgbW9yZSBlbGFib3JhdGUgbWVjaGFuaXNtcyBsaWtlIHJldHJpZXMgb3IgZmFsbGJhY2sgcm91dGluZXM/IEl0IHNob3VsZCBhbHNvIGNoZWNrIGZvciBhIGxhY2sgb2YgcmVzb3VyY2VzLgoKVWx0aW1hdGVseSwgSeKAmW0gYW50aWNpcGF0aW5nIHRoYXQgYHZob3N0X25ld19tc2dgIGlzIHRoZSBnYXRld2F5IHRoYXQgc2V0cyB0aGUgc3RhZ2UgZm9yIGEgaGlnaGx5IG9wdGltaXplZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gSXQgaXMgd2hlcmUgZXZlcnl0aGluZyBiZWdpbnMuIEkmIzM5O20gZXhjaXRlZCB0byBzZWUgdGhlIGludHJpY2FjaWVzIG9mIGl0cyBleGVjdXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQ4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNDg1Olx0LyogQ3JlYXRlIGEgbmV3IG1lc3NhZ2UuICovXG4zNDg2Olx0c3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9uZXdfbXNnKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBpbnQgdHlwZSlcbjM0ODc6XHR7XG4zNDg4Olx0XHQvKiBNYWtlIHN1cmUgYWxsIHBhZGRpbmcgd2l0aGluIHRoZSBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQuICovXG4zNDg5Olx0XHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUgPSBremFsbG9jX29iaigqbm9kZSk7XG4zNDkwOlx0XHRpZiAoIW5vZGUpXG4zNDkxOlx0XHRcdHJldHVybiBOVUxMO1xuMzQ5MjpcdFxuMzQ5MzpcdFx0bm9kZS1cdTAwM2V2cSA9IHZxO1xuMzQ5NDpcdFx0bm9kZS1cdTAwM2Vtc2cudHlwZSA9IHR5cGU7XG4zNDk1Olx0XHRyZXR1cm4gbm9kZTtcbjM0OTY6XHR9XG4zNDk3Olx0RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfbmV3X21zZyk7XG4zNDk4Olx0XG4zNDk5Olx0dm9pZCB2aG9zdF9lbnF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXG4zNTAwOlx0XHRcdCAgICAgICBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUpXG4zNTAxOlx0e1xuMzUwMjpcdFx0c3Bpbl9sb2NrKFx1MDAyNmRldi1cdTAwM2Vpb3RsYl9sb2NrKTtcbjM1MDM6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2bm9kZS1cdTAwM2Vub2RlLCBoZWFkKTtcbjM1MDQ6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmRldi1cdTAwM2Vpb3RsYl9sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY3MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDYyOTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvdmhvc3QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzQ4MDpcdFx0XHRcdCAgICAgICBcdTAwMjZ2cS1cdTAwM2V1c2VkLVx1MDAzZWZsYWdzLCByKTtcbjM0ODE6XHRcdH1cbjM0ODI6XHR9XG4zNDgzOlx0RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGlzYWJsZV9ub3RpZnkpO1xuMzQ4NDpcdFxuMzQ4NTpcdC8qIENyZWF0ZSBhIG5ldyBtZXNzYWdlLiAqL1xuMzQ4NjpcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqdmhvc3RfbmV3X21zZyhzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgaW50IHR5cGUpXG4zNDg3Olx0e1xuMzQ4ODpcdFx0LyogTWFrZSBzdXJlIGFsbCBwYWRkaW5nIHdpdGhpbiB0aGUgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLiAqL1xuMzQ4OTpcdFx0c3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlID0ga3phbGxvY19vYmooKm5vZGUpO1xuMzQ5MDpcdFx0aWYgKCFub2RlKVxuMzQ5MTpcdFx0XHRyZXR1cm4gTlVMTDtcbjM0OTI6XHRcbjM0OTM6XHRcdG5vZGUtXHUwMDNldnEgPSB2cTtcbjM0OTQ6XHRcdG5vZGUtXHUwMDNlbXNnLnR5cGUgPSB0eXBlO1xuMzQ5NTpcdFx0cmV0dXJuIG5vZGU7XG4zNDk2Olx0fVxuMzQ5NzpcdEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X25ld19tc2cpO1xuMzQ5ODpcdFxuMzQ5OTpcdHZvaWQgdmhvc3RfZW5xdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Mjk5NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFplcm8tSW5pdGlhbGl6YXRpb24gSXNzdWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUgPSBremFsbG9jX29iaigqbm9kZSk7YCBsaW5lLiBga3phbGxvY19vYmpgLi4uIGFoYSwgaXQmIzM5O3MgdmVyeSBsaWtlbHkgYSBtYWNybyBmb3IgYWxsb2NhdGluZyBhbmQgemVyby1pbml0aWFsaXppbmcgdGhlIG1lbW9yeSBmb3IgdGhlIG5vZGUuICBUaGF0IG1lYW5zIHRoZSBlbnRpcmUgYG5vZGVgIG9iamVjdCBpcyB6ZXJvZWQgb3V0IGF0IHRoZSBzdGFydC4gIFRoYXQmIzM5O3MgaW1wb3J0YW50LgoKVGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucywgaWYgaXQmIzM5O3MgemVyb2VkLCB0aGVuIGFsbCBmaWVsZHMgaW4gdGhlIGBub2RlYCBzdHJ1Y3QsIGluY2x1ZGluZyBgbm9kZS0mZ3Q7bXNnX3YyYCwgd2lsbCBiZSBpbml0aWFsaXplZCB0byB6ZXJvLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGNvZGUgdGhhdCB1c2VzIHRoaXMgbm9kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgdmhvc3Rfc2V0X2lvdGxiX21pc3NgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgd2l0aCBwYXJ0aWFsbHkgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmVzLgoKUmlnaHQsIHNvIGhlcmUmIzM5O3Mgd2hhdCBgdmhvc3Rfc2V0X2lvdGxiX21pc3NgIGRvZXM6CmBgYGMKc3RhdGljIHZvaWQgdmhvc3Rfc2V0X2lvdGxiX21pc3Moc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlLCBib29sIHYyLAoJCQkJIHU2NCBpb3ZhLCBpbnQgYWNjZXNzKQp7CglzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2c7Cgl1MzIgdHlwZSA9IHYyID8gVkhPU1RfSU9UTEJfTVNHX1YyIDogVkhPU1RfSU9UTEJfTVNHOwoKCWlmIChub2RlLSZndDttc2cudHlwZSAhPSB0eXBlKQoJCW1lbXNldCgmYW1wO25vZGUtJmd0O21zZ192MiwgMCwgc2l6ZW9mKG5vZGUtJmd0O21zZ192MikpOwoJbm9kZS0mZ3Q7bXNnLnR5cGUgPSB0eXBlOwoJbXNnID0gdmhvc3RfZ2V0X2lvdGxiX21zZyhub2RlKTsKCgltc2ctJmd0O3R5cGUgPSBWSE9TVF9JT1RMQl9NSVNTOwoJbXNnLSZndDtpb3ZhID0gaW92YTsKCW1zZy0mZ3Q7cGVybSA9IGFjY2VzczsKfQpgYGAKCk9rYXksIHNvIGlmIHRoZSBgbm9kZS0mZ3Q7bXNnLnR5cGVgIGlzbiYjMzk7dCB0aGUgZXhwZWN0ZWQgdHlwZSwgdGhlbiBpdCB6ZXJvLWluaXRpYWxpemVzIGBub2RlLSZndDttc2dfdjJgIGJlZm9yZSBwcm9jZWVkaW5nLiAgSXQgdGhlbiBzZXRzIGBtc2ctJmd0O3R5cGVgLCBgbXNnLSZndDtpb3ZhYCwgYW5kIGBtc2ctJmd0O3Blcm1gLiBNeSBjb25jZXJuIGlzIHdoZXRoZXIgYW55IG90aGVyIGZpZWxkcyB3aXRoaW4gYG1zZ2AgbWlnaHQgcmVxdWlyZSBleHBsaWNpdCBpbml0aWFsaXphdGlvbi4gSXQmIzM5O3MgYSBxdWljayBmb2xsb3cgdXAsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgbWVtc2V0IGhhbmRsZXMgYWxsIHRoZSByZWxldmFudCBzY2VuYXJpb3MuIEkmIzM5O2xsIHRha2UgYSBxdWljayBnbGFuY2UgYXQgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCB2aG9zdF9pb3RsYl9tc2dgIGFuZCB2ZXJpZnkgdGhhdCB0aGUgb3RoZXIgZmllbGRzIGFyZSBlaXRoZXIgemVyby1pbml0aWFsaXplZCBieSBkZWZhdWx0IG9yIHByb3Blcmx5IGhhbmRsZWQgZWxzZXdoZXJlIGluIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCB2aG9zdF9pb3RsYl9tc2cgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L3Zob3N0LmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzkwMwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSB2aG9zdF9pb3RsYl9tc2cgU3RydWN0dXJlKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgbXkgYmVhcmluZ3Mgb24gdGhlIGB2aG9zdF9pb3RsYl9tc2dgIHN0cnVjdHVyZS4gSSYjMzk7bSB0aGlua2luZyB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vayBpcyB0aGUgc3RhbmRhcmQgbG9jYXRpb246IGBpbmNsdWRlL3VhcGkvbGludXgvdmhvc3RfdHlwZXMuaGAsIG9yIHNvbWV0aGluZyBhbmFsb2dvdXMgaW4gdGhlIGtlcm5lbCBoZWFkZXJzLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbiBpdCYjMzk7bGwgYmUgZGVmaW5lZCB0aGVyZSwgZ2l2ZW4gaXQmIzM5O3MgYSBtZXNzYWdlIHR5cGUgcmVsYXRlZCB0byB2aG9zdCwgYW5kIHRoZSBgdWFwaWAgZGlyZWN0b3J5IGlzIHdoZXJlIHRoZSBrZXJuZWwgZXhwb3J0cyBzdHJ1Y3R1cmVzIGZvciB1c2Vyc3BhY2UgaW50ZXJhY3Rpb24uIEl0JiMzOTtzIHByZXR0eSBmdW5kYW1lbnRhbCwgc28gSSBleHBlY3QgaXQmIzM5O2xsIGJlIGluIG9uZSBvZiB0aGUgY29yZSB2aG9zdCBoZWFkZXIgZmlsZXMuIExldCBtZSBnbyB0YWtlIGEgbG9vayB0aGVyZSwgYW5kIHNlZSB3aGF0IHRoZSBmaWVsZHMgYXJlIGFuZCBob3cgaXQmIzM5O3MgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHZob3N0X2lvdGxiX21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC92aG9zdF90eXBlcy5oPTU5PXN0cnVjdCB2aG9zdF92cmluZ193b3JrZXIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92aG9zdF90eXBlcy5oLTY2LS8qIG5vIGFsaWdubWVudCByZXF1aXJlbWVudCAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3Zob3N0X3R5cGVzLmg6Njc6c3RydWN0IHZob3N0X2lvdGxiX21zZyB7XG5pbmNsdWRlL3VhcGkvbGludXgvdmhvc3RfdHlwZXMuaC02OC1cdF9fdTY0IGlvdmE7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3Zob3N0X3R5cGVzLmg9OTY9c3RydWN0IHZob3N0X21zZyB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3Zob3N0X3R5cGVzLmgtOTgtXHR1bmlvbiB7XG5pbmNsdWRlL3VhcGkvbGludXgvdmhvc3RfdHlwZXMuaDo5OTpcdFx0c3RydWN0IHZob3N0X2lvdGxiX21zZyBpb3RsYjtcbmluY2x1ZGUvdWFwaS9saW51eC92aG9zdF90eXBlcy5oLTEwMC1cdFx0X191OCBwYWRkaW5nWzY0XTtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmhvc3RfdHlwZXMuaD0xMDQ9c3RydWN0IHZob3N0X21zZ192MiB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3Zob3N0X3R5cGVzLmgtMTA3LVx0dW5pb24ge1xuaW5jbHVkZS91YXBpL2xpbnV4L3Zob3N0X3R5cGVzLmg6MTA4Olx0XHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnIGlvdGxiO1xuaW5jbHVkZS91YXBpL2xpbnV4L3Zob3N0X3R5cGVzLmgtMTA5LVx0XHRfX3U4IHBhZGRpbmdbNjRdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDQ4MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHN0cnVjdCB2aG9zdF9pb3RsYl9tc2dgKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgYHN0cnVjdCB2aG9zdF9pb3RsYl9tc2dgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBJL08gdHJhbnNsYXRpb24gbG9va2FzaWRlIGJ1ZmZlciBtZXNzYWdlIHN0cnVjdHVyZSB3aXRoaW4gdGhlIHZob3N0IGNvbnRleHQuIFRoaXMgbGlrZWx5IGRlYWxzIHdpdGggYWNjZWxlcmF0ZWQgZ3Vlc3QgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBJIG5lZWQgdG8gcGFyc2UgaXRzIGNvbnRlbnRzIHRvIHVuZGVyc3RhbmQgaG93IEkvTyB2aXJ0dWFsIGFkZHJlc3NlcyBhcmUgbWFwcGVkIHRvIHBoeXNpY2FsIGFkZHJlc3NlcywgYW5kIGhvdyB0aGUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSB2aG9zdCBrZXJuZWwgbW9kdWxlIGFuZCB0aGUgdmhvc3QgdXNlcnNwYWNlIGltcGxlbWVudGF0aW9uIGlzIHN0cnVjdHVyZWQgaW4gdGhpcyBjYXNlLiBJIGV4cGVjdCBpdCB0byBoYXZlIGZpZWxkcyByZWxhdGVkIHRvIHRoZSB2aXJ0dWFsIGFkZHJlc3MsIHRoZSBwaHlzaWNhbCBhZGRyZXNzLCB0aGUgc2l6ZSBvZiB0aGUgdHJhbnNsYXRpb24sIGZsYWdzIGluZGljYXRpbmcgbWVtb3J5IGF0dHJpYnV0ZXMgb3IgYWNjZXNzIHBlcm1pc3Npb25zLCBhbmQgcG90ZW50aWFsbHkgYSBzZXF1ZW5jZSBudW1iZXIgZm9yIHRyYWNraW5nIGFuZCBlbnN1cmluZyBvcmRlcmluZy4gSSYjMzk7bSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHR5cGVzIHVzZWQgZm9yIHRoZSBhZGRyZXNzZXMsIGFzIHRoYXQgd2lsbCByZXZlYWwgdGhlIGFkZHJlc3Mgc3BhY2UgYW5kIG1lbW9yeSBtb2RlbCBhdCBwbGF5LiBBcmUgdGhleSAzMi1iaXQsIDY0LWJpdCwgb3IgcGVyaGFwcyBldmVuIGxhcmdlcj8gQW55IGhpbnRzIGFib3V0IGNhY2hpbmcgYmVoYXZpb3Igd291bGQgYmUgaW50ZXJlc3RpbmcuIEkmIzM5O20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgYHZob3N0X21lbW9yeWAgc3RydWN0dXJlcywgYXMgdGhleSYjMzk7cmUgdGhlIGJyZWFkIGFuZCBidXR0ZXIgb2YgbWVtb3J5IG1hbmFnZW1lbnQgaW4gdGhpcyBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGNsZXZlciB0cmlja2VyeSBvciBvcHRpbWl6YXRpb25zIGJha2VkIGluIGhlcmUsIHN1Y2ggYXMgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGZlYXR1cmVzLiBSaWdodCwgdGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L3Zob3N0X3R5cGVzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDY3Olx0c3RydWN0IHZob3N0X2lvdGxiX21zZyB7XG4gIDY4Olx0XHRfX3U2NCBpb3ZhO1xuICA2OTpcdFx0X191NjQgc2l6ZTtcbiAgNzA6XHRcdF9fdTY0IHVhZGRyO1xuICA3MTpcdCNkZWZpbmUgVkhPU1RfQUNDRVNTX1JPICAgICAgMHgxXG4gIDcyOlx0I2RlZmluZSBWSE9TVF9BQ0NFU1NfV08gICAgICAweDJcbiAgNzM6XHQjZGVmaW5lIFZIT1NUX0FDQ0VTU19SVyAgICAgIDB4M1xuICA3NDpcdFx0X191OCBwZXJtO1xuICA3NTpcdCNkZWZpbmUgVkhPU1RfSU9UTEJfTUlTUyAgICAgICAgICAgMVxuICA3NjpcdCNkZWZpbmUgVkhPU1RfSU9UTEJfVVBEQVRFICAgICAgICAgMlxuICA3NzpcdCNkZWZpbmUgVkhPU1RfSU9UTEJfSU5WQUxJREFURSAgICAgM1xuICA3ODpcdCNkZWZpbmUgVkhPU1RfSU9UTEJfQUNDRVNTX0ZBSUwgICAgNFxuICA3OTpcdC8qXG4gIDgwOlx0ICogVkhPU1RfSU9UTEJfQkFUQ0hfQkVHSU4gYW5kIFZIT1NUX0lPVExCX0JBVENIX0VORCBhbGxvdyBtb2RpZnlpbmdcbiAgODE6XHQgKiBtdWx0aXBsZSBtYXBwaW5ncyBpbiBvbmUgZ286IGJlZ2lubmluZyB3aXRoXG4gIDgyOlx0ICogVkhPU1RfSU9UTEJfQkFUQ0hfQkVHSU4sIGZvbGxvd2VkIGJ5IGFueSBudW1iZXIgb2ZcbiAgODM6XHQgKiBWSE9TVF9JT1RMQl9VUERBVEUgbWVzc2FnZXMsIGFuZCBlbmRpbmcgd2l0aCBWSE9TVF9JT1RMQl9CQVRDSF9FTkQuXG4gIDg0Olx0ICogV2hlbiBvbmUgb2YgdGhlc2UgdHdvIHZhbHVlcyBpcyB1c2VkIGFzIHRoZSBtZXNzYWdlIHR5cGUsIHRoZSByZXN0XG4gIDg1Olx0ICogb2YgdGhlIGZpZWxkcyBpbiB0aGUgbWVzc2FnZSBhcmUgaWdub3JlZC4gVGhlcmUmIzM5O3Mgbm8gZ3VhcmFudGVlIHRoYXRcbiAgODY6XHQgKiB0aGVzZSBjaGFuZ2VzIHRha2UgcGxhY2UgYXV0b21hdGljYWxseSBpbiB0aGUgZGV2aWNlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTE5NQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgdmhvc3RfaW90bGJfbXNnIFN0cnVjdHVyZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnYCBkZWZpbml0aW9uLiBJIHNlZSBpdCYjMzk7cyBnb3QgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBJL08gdHJhbnNsYXRpb24gZW50cmllczogYGlvdmFgLCB3aGljaCBpcyB0aGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzczsgYHNpemVgLCB0aGUgZXh0ZW50IG9mIHRoZSBtYXBwaW5nOyBgdWFkZHJgLCB3aGljaCBpcyB0aGUgdXNlci1zcGFjZSB2aXJ0dWFsIGFkZHJlc3M7IGBwZXJtYCwgZGVzY3JpYmluZyB0aGUgYWNjZXNzIHBlcm1pc3Npb25zOyBhbmQgZmluYWxseSwgYHR5cGVgLCB3aGljaCBJJiMzOTttIGd1ZXNzaW5nIHNwZWNpZmllcyB0aGUgdHlwZSBvZiBtYXBwaW5nLiBOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIG90aGVyIGZpZWxkcyBhbmQgcmVsYXRlZCBzdHJ1Y3R1cmVzIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBtZXNzYWdlIG9yY2hlc3RyYXRlcyB0aGUgSS9PIHRyYW5zbGF0aW9uIHByb2Nlc3MuIEkgbmVlZCB0byBmdWxseSBncmFzcCBob3cgdGhpcyBpcyBkZXNpZ25lZCBzbyB0aGF0IEkgY2FuIG9wdGltaXplIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC92aG9zdF90eXBlcy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4NzpcdCAqL1xuICA4ODpcdCNkZWZpbmUgVkhPU1RfSU9UTEJfQkFUQ0hfQkVHSU4gICAgNVxuICA4OTpcdCNkZWZpbmUgVkhPU1RfSU9UTEJfQkFUQ0hfRU5EICAgICAgNlxuICA5MDpcdFx0X191OCB0eXBlO1xuICA5MTpcdH07XG4gIDkyOlx0XG4gIDkzOlx0I2RlZmluZSBWSE9TVF9JT1RMQl9NU0cgMHgxXG4gIDk0Olx0I2RlZmluZSBWSE9TVF9JT1RMQl9NU0dfVjIgMHgyXG4gIDk1Olx0XG4gIDk2Olx0c3RydWN0IHZob3N0X21zZyB7XG4gIDk3Olx0XHRpbnQgdHlwZTtcbiAgOTg6XHRcdHVuaW9uIHtcbiAgOTk6XHRcdFx0c3RydWN0IHZob3N0X2lvdGxiX21zZyBpb3RsYjtcbiAxMDA6XHRcdFx0X191OCBwYWRkaW5nWzY0XTtcbiAxMDE6XHRcdH07XG4gMTAyOlx0fTtcbiAxMDM6XHRcbiAxMDQ6XHRzdHJ1Y3Qgdmhvc3RfbXNnX3YyIHtcbiAxMDU6XHRcdF9fdTMyIHR5cGU7XG4gMTA2Olx0XHRfX3UzMiBhc2lkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTcwMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgdmhvc3QgU3RydWN0dXJlKioKCk9rYXksIGhvbGQgb24gYSBtaW51dGUuIEkgc2VlbSB0byByZWNhbGwgdGhhdCB0aGUgYHN0cnVjdCB2aG9zdF9tc2dfbm9kZWAgaXMgZGVmaW5lZCBpbiBgZHJpdmVycy92aG9zdC92aG9zdC5oYC4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhhdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIGNvcnJlY3QgZGVmaW5pdGlvbiBmb3IgbXkgY3VycmVudCBhbmFseXNpcy4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0aGVyZSBhbmQgZ2V0IGEgcHJlY2lzZSBsb29rIGF0IGl0cyBtZW1iZXJzIGFuZCBob3cgaXQmIzM5O3Mgc3RydWN0dXJlZC4gR290dGEgZW5zdXJlIEkmIzM5O20gb3BlcmF0aW5nIG9uIHNvbGlkIGdyb3VuZCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB2aG9zdCYjMzk7cyBjb21wbGV4aXRpZXMuIFRoaXMgc3RydWN0IGlzIHByb2JhYmx5IGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG1lc3NhZ2UgcGFzc2luZyBvciBkYXRhIHN0cnVjdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCB2aG9zdF9tc2dfbm9kZSBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zob3N0LmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5oPTk1PXN0cnVjdCB2aG9zdF92aXJ0cXVldWUge1xuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC0xNzQtXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg6MTc1OnN0cnVjdCB2aG9zdF9tc2dfbm9kZSB7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMTc2LSAgdW5pb24ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjAwMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHN0cnVjdCB2aG9zdF9tc2dfbm9kZWAqKgoKT2theSwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGVgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZXNlIG1lc3NhZ2Ugbm9kZXMgYXJlIHN0cnVjdHVyZWQgd2l0aGluIHRoZSB2aG9zdCBzdWJzeXN0ZW0uIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBpcyBhIGNvcmUgYnVpbGRpbmcgYmxvY2sgZm9yIG1hbmFnaW5nIHRoZSBjb21tdW5pY2F0aW9uIGZsb3cgYmV0d2VlbiB0aGUgaG9zdCBhbmQgdGhlIGd1ZXN0LCBsaWtlbHkgdGllZCB0byBzaGFyZWQgbWVtb3J5IGFuZCBldmVudCBjaGFubmVscy4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBob3cgdGhpcyByZWxhdGVzIHRvIG90aGVyIGRhdGEgc3RydWN0dXJlcyBpbiB0aGUgdmhvc3Qgc3BhY2UgLSBpcyB0aGlzIHBhcnQgb2YgdGhlIHJpbmcgYnVmZmVyIG1hbmFnZW1lbnQsIG9yIHNvbWV0aGluZyBtb3JlIGZ1bmRhbWVudGFsIGZvciBpbnRlci1WTSBtZXNzYWdpbmc/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGZpZWxkcyB0aGF0IHBvaW50IHRvIGJ1ZmZlcnMsIGRlc2NyaWJlIG1lc3NhZ2UgdHlwZXMsIGFuZCBoYW5kbGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIE15IHByaW1hcnkgcXVlc3Rpb25zIHJpZ2h0IG5vdyByZXZvbHZlIGFyb3VuZCB0aGUgZmllbGRzIHRoZW1zZWx2ZXMgYW5kIGhvdyB0aGV5IGFyZSB1c2VkLCBsb29raW5nIGZvciBpbnNpZ2h0cyBpbnRvIHRoZSBsb2NraW5nIHN0cmF0ZWd5IHVzZWQgZm9yIGNvbmN1cnJlbmN5IGFuZCBob3cgZGF0YSBjb25zaXN0ZW5jeSBpcyBhY2hpZXZlZC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIHJldmVhbHMgYW55dGhpbmcgYWJvdXQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIGluIHRoZSBtZXNzYWdlIGhhbmRsaW5nIHByb2Nlc3MuIEkmIzM5O20gYWxzbyBpbnRlcmVzdGVkIGluIGhvdyB0aGlzIG5vZGUgaW50ZWdyYXRlcyB3aXRoIHRoZSBsYXJnZXIgZnJhbWV3b3JrIC0gaXMgaXQgcGFydCBvZiBhIGxpbmtlZCBsaXN0LCBhIHRyZWUsIG9yIHNvbWUgb3RoZXIgb3JnYW5pemF0aW9uYWwgc3RydWN0dXJlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIHRoaXMgc3RydWN0dXJlIOKAkyBjcmVhdGlvbiwgdXNhZ2UsIGFuZCBkZXN0cnVjdGlvbiDigJMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzU6XHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUge1xuIDE3NjpcdCAgdW5pb24ge1xuIDE3NzpcdFx0ICBzdHJ1Y3Qgdmhvc3RfbXNnIG1zZztcbiAxNzg6XHRcdCAgc3RydWN0IHZob3N0X21zZ192MiBtc2dfdjI7XG4gMTc5Olx0ICB9O1xuIDE4MDpcdCAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7XG4gMTgxOlx0ICBzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7XG4gMTgyOlx0fTtcbiAxODM6XHRcbiAxODQ6XHRzdHJ1Y3Qgdmhvc3RfZGV2IHtcbiAxODU6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuIDE4NjpcdFx0c3RydWN0IG11dGV4IG11dGV4O1xuIDE4NzpcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqKnZxcztcbiAxODg6XHRcdGludCBudnFzO1xuIDE4OTpcdFx0c3RydWN0IGV2ZW50ZmRfY3R4ICpsb2dfY3R4O1xuIDE5MDpcdFx0c3RydWN0IHZob3N0X2lvdGxiICp1bWVtO1xuIDE5MTpcdFx0c3RydWN0IHZob3N0X2lvdGxiICppb3RsYjtcbiAxOTI6XHRcdHNwaW5sb2NrX3QgaW90bGJfbG9jaztcbiAxOTM6XHRcdHN0cnVjdCBsaXN0X2hlYWQgcmVhZF9saXN0O1xuIDE5NDpcdFx0c3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX2xpc3Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NjExCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgdmhvc3RfbmV3X21zZ2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHZob3N0X25ld19tc2dgIGZ1bmN0aW9uIGluIHRoZSB2aG9zdCBjb2RlLiBJdCBsb29rcyBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIGhhdmUgYSBuYWdnaW5nIGZlZWxpbmcgSSBtaWdodCBoYXZlIG1pc3NlZCBzb21ldGhpbmcgc3VidGxlIGluIGFuIGVhcmxpZXIgc2Nhbi4gTGV0IG1lIG1ha2Ugc3VyZSBJJiMzOTttIGZvbGxvd2luZy4gVGhlIGdvYWwgaXMgdG8gYWxsb2NhdGUgYSBuZXcgbWVzc2FnZSBub2RlLCBhbmQgdGhlIGNvZGUgYXBwZWFycyB0byBiZSB1c2luZyBga3phbGxvY2AgdG8gZG8gdGhhdC4gSSYjMzk7bSBzZWVpbmcgYHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSA9IGt6YWxsb2Moc2l6ZW9mICpub2RlLCBHRlBfS0VSTkVMKTtgIC0gc28gaXQmIzM5O3MgYSBrZXJuZWwgemVybyBhbGxvY2F0aW9uIHdpdGggbWVtb3J5IHJlc2VydmVkIGZyb20gYEdGUF9LRVJORUxgLiBUaGlzIGxvb2tzIHJpZ2h0LCBhbGxvY2F0aW5nIHRoZSBjb3JyZWN0IHNpemUsIGVuc3VyaW5nIGluaXRpYWxpemF0aW9uIHRvIHplcm8uIEkgdGhvdWdodCBJIGhhZCBzZWVuIGBremFsbG9jX29iaigqbm9kZSlgIGluIGEgcHJldmlvdXMgZ2xhbmNlIHRocm91Z2gsIGJ1dCBJJiMzOTttIG1pc3Rha2VuIC0gaXQmIzM5O3MgdGhlIHN0YW5kYXJkIGNhbGwgdG8gYGt6YWxsb2NgLCBhbGxvY2F0aW5nIG1lbW9yeSBmb3IgdGhlIGB2aG9zdF9tc2dfbm9kZWAgc3RydWN0dXJlIGFuZCBpbml0aWFsaXppbmcgaXQgdG8gemVybywgd2hpY2ggaXMgZ29vZCBwcmFjdGljZS4gVGhlIHN1YnNlcXVlbnQgYXNzaWdubWVudHMgb2YgYG5vZGUtJmd0O3ZxYCBhbmQgYG5vZGUtJmd0O21zZy50eXBlYCBzZWVtIGZpbmUuIEl0JiMzOTtzIHByb3Blcmx5IGluaXRpYWxpemluZyB0aGUgbm9kZSYjMzk7cyBmaWVsZHMuIFRoZSBjcnVjaWFsIHBhcnQgaGVyZSBpcyB0aGUgY29ycmVjdCBhbGxvY2F0aW9uIG9mIG1lbW9yeS4gVGhpcyBhbGwgbWFrZXMgc2Vuc2UsIGFuZCBJIHRoaW5rIGl0JiMzOTtzIGFzIGl0IHNob3VsZCBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zob3N0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM0ODU6XHQvKiBDcmVhdGUgYSBuZXcgbWVzc2FnZS4gKi9cbjM0ODY6XHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKnZob3N0X25ld19tc2coc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIGludCB0eXBlKVxuMzQ4NzpcdHtcbjM0ODg6XHRcdC8qIE1ha2Ugc3VyZSBhbGwgcGFkZGluZyB3aXRoaW4gdGhlIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZC4gKi9cbjM0ODk6XHRcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSA9IGt6YWxsb2Nfb2JqKCpub2RlKTtcbjM0OTA6XHRcdGlmICghbm9kZSlcbjM0OTE6XHRcdFx0cmV0dXJuIE5VTEw7XG4zNDkyOlx0XG4zNDkzOlx0XHRub2RlLVx1MDAzZXZxID0gdnE7XG4zNDk0Olx0XHRub2RlLVx1MDAzZW1zZy50eXBlID0gdHlwZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcyNTMKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipVbnJhdmVsaW5nIHRoZSBga3phbGxvY19vYmpgIEVuaWdtYSoqCgpSaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgYGt6YWxsb2Nfb2JqKCpub2RlKWAuIE15IGluaXRpYWwgaHVuY2ggaXMgc3BvdC1vbiDigJMgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHRoZSBjYWxsLCBidXQgYSBtYWNybz8gTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IHRoYXQsIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGF0JiMzOTtzIGdvaW5nIHRvIGJlIGtleS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBremFsbG9jX29iamAgbWFjcm8gZXhwYW5kcyB0by4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgd2hhdCBpdCYjMzk7cyB0cnlpbmcgdG8gZG8gaW4gdGhlIGdyZWF0ZXIgY29udGV4dCBvZiB0aGUgY29kZS4gVGhpcyB3aWxsIGJlIHRoZSBwaXZvdGFsIHBvaW50IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIGt6YWxsb2Nfb2JqJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2xhYi5oPTEwNzA9dm9pZCAqa21hbGxvY19ub2xvY2soc2l6ZV90IHNpemUsIGdmcF90IGdmcF9mbGFncywgaW50IG5vZGUpO1xuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNTEtLyogQWxsIGt6YWxsb2MgYWxpYXNlcyBmb3Iga21hbGxvY18ob2JqfG9ianN8ZmxleCkuICovXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTUyOiNkZWZpbmUga3phbGxvY19vYmooUCwgLi4uKSBcXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTE1My1cdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgMSlcbmluY2x1ZGUvbGludXgvc2xhYi5oOjExNTQ6I2RlZmluZSBremFsbG9jX29ianMoUCwgQ09VTlQsIC4uLikgXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNTUtXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIENPVU5UKVxuLS1cbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oPTIwMD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBrbWVtX2NhY2hlX3NoZWFmX3NpemUoc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxuLS1cbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTIxMC1cbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oOjIxMTojZGVmaW5lIGt6YWxsb2Nfb2JqKFAsIC4uLikgXFxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTIxMi1cdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgMSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc3ODUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA5ODU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBJc3N1ZXMgaW4gdmhvc3QgSU9UTEIgTWlzcyBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBtZXRpY3Vsb3VzbHkgZXhhbWluZWQgdGhpcyB2aG9zdCBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgcmVsYXRlZCB0byBJT1RMQiBtaXNzIGhhbmRsaW5nLiBNeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBhbnkgbmV3IG9wcG9ydHVuaXRpZXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGJlIGxlYWtlZCB0byB1c2VyIHNwYWNlLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gIExldCYjMzk7cyBicmVhayBkb3duIG15IHRob3VnaHQgcHJvY2VzczoKCiogICAqKkluaXRpYWxpemF0aW9uIGlzIEtleToqKiAgVGhlIGBremFsbG9jX29iamAgZnVuY3Rpb24sIHdoaWNoIGlzIHV0aWxpemVkIGV4dGVuc2l2ZWx5IHdoZW4gY3JlYXRpbmcgYHZob3N0X21zZ19ub2RlYCBzdHJ1Y3R1cmVzIChlLmcuLCB3aXRoaW4gYHZob3N0X25ld19tc2dgKSwgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LCBzaW5jZSBpdCBlbnN1cmVzIHRoZSBlbnRpcmUgYWxsb2NhdGVkIG1lbW9yeSBpcyB6ZXJvZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgYHN0cnVjdCB2aG9zdF9tc2dfbm9kZWAgYW5kIGl0cyBpbnRlcm5hbCB1bmlvbnMgaXMgYWx3YXlzIGRlZmluZWQuICBFdmVyeSBiaXQgaXMgc2V0IHRvIHplcm8gaW5pdGlhbGx5LgoKKiAgICoqYHZob3N0X3NldF9pb3RsYl9taXNzYCAmYW1wOyBaZXJvaW5nOioqIFRoZSBgdmhvc3Rfc2V0X2lvdGxiX21pc3NgIGZ1bmN0aW9uIGlzIGNydWNpYWwuIElmIHRoZSBgbXNnLnR5cGVgIGNoYW5nZXMsIGl0IG5vdyB1c2VzIGBtZW1zZXRgIHRvIHplcm8gb3V0IHRoZSBjb250ZW50cyBvZiBgbXNnX3YyYCBiZWZvcmUgdXBkYXRpbmcgYG1zZy50eXBlYC4gVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IGFueSBwb3RlbnRpYWwgZ2FyYmFnZSBsZWZ0IGluIHRoZSBgbXNnX3YyYCB1bmlvbiB3aGVuIGEgVjEgbWlzcyBpcyByZXBsYWNlZCBieSBhIFYyIG1pc3MgKG9yIHZpY2UgdmVyc2EpLiAgSWYgdGhlIHR5cGVzIGFyZSBpZGVudGljYWwsIGBtZW1zZXRgIGlzIHNraXBwZWQuIEhvd2V2ZXIsIHRoZXJlJiMzOTtzIG5vIGhhcm0gaW4gc2tpcHBpbmcgdGhlIGBtZW1zZXRgIGJlY2F1c2UgdGhlIG1lbW9yeSBpcyBhbHJlYWR5IHplcm9lZCAoZnJvbSB0aGUgcHJldmlvdXMgYGt6YWxsb2NgIG9yIGBtZW1zZXRgKS4KCiogICAqKkNvYWxlc2NpbmcgYW5kIFJldXNlOioqIGB2aG9zdF9pb3RsYl9taXNzX2NvYWxlc2NlYCByZXVzZXMgZXhpc3RpbmcgYHZob3N0X21zZ19ub2RlYCBpbnN0YW5jZXMuICBJZiB0aGUgbWlzcyBkYXRhICpkb2VzbiYjMzk7dCogY2hhbmdlLCB0aGUgbm9kZSBpcyByZXVzZWQuICBgdmhvc3Rfc2V0X2lvdGxiX21pc3NgIHdpbGwgZ2V0IGNhbGxlZCwgaWYgYW55dGhpbmcgY2hhbmdlZCwgd2hpY2ggaGFuZGxlcyB0aGUgemVyb2luZyBhbmQgdXBkYXRlcyBhcyBkZXNjcmliZWQuIFRoZSBjb2RlIGF2b2lkcyB1bm5lY2Vzc2FyeSBgbWVtY3B5YCBvcGVyYXRpb25zLgoKKiAgICoqVGhlIGBzbmFwc2hvdGAgVW5pb24gYW5kIENvcHlpbmcgdG8gVXNlciBTcGFjZToqKiBUaGUgbWFpbiBhcmVhIG9mIGNvbmNlcm4sIGFuZCBteSBtYWluIGZvY3VzLCBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIHRoZSBsb2NhbCBgc25hcHNob3RgIHVuaW9uIHdpdGhpbiBgdmhvc3RfY2hyX3JlYWRfaXRlcmAuICBUaGlzIGlzIHVzZWQgdG8gaGFuZGxlIGNvcHlpbmcgaW5mb3JtYXRpb24gdG8gdXNlciBzcGFjZSB3aGlsZSBob2xkaW5nIGxvY2tzLiAgSSB0aG9yb3VnaGx5IGFzc2Vzc2VkIHRoZSBgbWVtY3B5YCBvcGVyYXRpb25zIGZyb20gdGhlIGBmaXJzdC0mZ3Q7bXNnX3YyYCBpbnRvIHRoZSBgc25hcHNob3RgIHVuaW9uIGFuZCBzdWJzZXF1ZW50IGBjb3B5X3RvX2l0ZXJfZnVsbGAgdG8gdXNlciBzcGFjZSwgYXMgdGhhdOKAmXMgdGhlIHBhdGggaW50byB1c2VyIHNwYWNlLiBTaW5jZSB0aGUgc291cmNlIGRhdGEgaXMgemVyb2VkIGluaXRpYWxseSwgYW5kIHRoZXJlIGlzIG5vIGNvcHlpbmcgYW55IG90aGVyIGRhdGEgaW50byB0aGUgYHNuYXBzaG90YCB1bmlvbiwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4KCiogICAqKkFsaWdubWVudCBhbmQgUGFkZGluZzoqKiAgSSBjYXJlZnVsbHkgZXhhbWluZWQgdGhlIHBhZGRpbmcgd2l0aGluIGBzdHJ1Y3Qgdmhvc3RfbXNnYCAod2hpY2ggaGFzIDQgYnl0ZXMgb2YgcGFkZGluZykgYW5kIGBzdHJ1Y3Qgdmhvc3RfbXNnX3YyYCwgYXMgdGhpcyBpcyBhIGZyZXF1ZW50IHNvdXJjZSBvZiBjb25jZXJuLiBIb3dldmVyLCB0aGUgcGFkZGluZyBpbiBgc3RydWN0IHZob3N0X21zZ2AgaXMgYWx3YXlzIHplcm9lZCBieSB0aGUgaW5pdGlhbGl6YXRpb24uIFRoaXMgemVyb2VkIHBhZGRpbmcgZ2V0cyBjb3BpZWQgdG8gdGhlIGBzbmFwc2hvdGAgdW5pb24gYW5kIHN1YnNlcXVlbnRseSBnZXRzIGNvcGllZCB0byB1c2VyIHNwYWNlLiAgVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgY29waWVkLiBBbHNvLCB0aGVyZSBpcyBubyBwYWRkaW5nIGJldHdlZW4gdGhlIGZpZWxkcyBvZiBgc3RydWN0IHZob3N0X21zZ192MmAsIHNvIHRoZXJlJiMzOTtzIG5vIHJpc2sgb2YgYWNjaWRlbnRhbGx5IHJlYWRpbmcgdW5pbml0aWFsaXplZCB2YWx1ZXMgdGhlcmUuCgoqICAgKipDb250cm9sIEZsb3cgYW5kIFN0YXRlOioqIEkgYW5hbHl6ZWQgYWxsIHJlbGV2YW50IGNvbnRyb2wgZmxvd3MsIGluY2x1ZGluZyBjYXNlcyB3aGVyZSB0aGUgbm9kZSBpcyBjb2FsZXNjZWQgKHJldXNlZCkgb3IgcmV0cmllZCwgYW5kIGFsc28gY2hlY2tlZCBmb3IgYW55IGluZm9ybWF0aW9uIGxlYWtzIG9yIGlzc3VlcyB3aXRoIG1lc3NhZ2UgdHlwZXMgKFYxIHZzLiBWMikuIEl04oCZcyBhbGwgY29uc2lzdGVudCBhbmQgc2FmZS4gVGhlIHVzZSBvZiBgdmhvc3RfaW90bGJfbWlzc19zdGF0ZWAgZW5zdXJlcyBwcm9wZXIgaGFuZGxpbmcgb2YgdGhlIG1lc3NhZ2Ugc3RhdGVzIGFuZCBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMuCgoqICAgKipEYXRhIFN0cnVjdHVyZXMgYW5kIEluaXRpYWxpemF0aW9uOioqIEkgcmV2aWV3ZWQgd2hlcmUgYW5kIGhvdyBzdHJ1Y3R1cmVzIGxpa2UgYHZob3N0X2lvdGxiX21zZ2AgYW5kIGB2aG9zdF9tc2dfbm9kZWAgYXJlIGluaXRpYWxpemVkLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbXBhY3Qgb2YgdGhlIGBremFsbG9jX29iamAsIHdoaWNoIGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbi4KCiogICAqKktNU0FOIENvbnNpZGVyYXRpb246KiogIFRoZSBjaGFuZ2VzIGRvICpub3QqIGludHJvZHVjZSBLTVNBTiB2aW9sYXRpb25zLiBUaGUgYG1lbWNweWAgb3BlcmF0aW9uIGlzIHNhZmUgYmVjYXVzZSB0aGUgc291cmNlIGBmaXJzdC0mZ3Q7bXNnX3YyYCBpcyBhbHdheXMgemVyb2VkIChmdWxseSBpbml0aWFsaXplZCkuIFRoZSBsb2dpYyBpcyBzdHJ1Y3R1cmVkIHNvIHRoZXJlIGFyZSBubyBzaXR1YXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtYmVycyB3b3VsZCBnZXQgcmVhZC4KCiogICAqKlVudXNlZCBQYXRoIChmb3IgdjEpKiogVGhlIG9sZGVyIGNvZGUgcGF0aCB0byBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSBubyBsb25nZXIgdXNlcyB0aGUgYG1lbWNweWAgYW5kIGRvZXMgbm90IHVzZSBgc25hcHNob3RgLiBUaGlzIGF2b2lkcyB1bm5lY2Vzc2FyeSBjb3BpZXMuCgoqICAgKipgdmhvc3RfdW50cmFja19pb3RsYl9taXNzYCBVc2FnZToqKiAgVGhlIGZ1bmN0aW9uIGB2aG9zdF91bnRyYWNrX2lvdGxiX21pc3NgIGlzIHVzZWQgcHJvcGVybHkgdG8gdHJhY2sgdGhlIHBvaW50ZXJzLCBhbmQgaXMgaGFuZGxlZCBpbiBhIHdheSB0aGF0IGF2b2lkcyBtZW1vcnkgc2FmZXR5IGlzc3VlcyBsaWtlIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2hlbiB0aGUgdmhvc3QgbWVzc2FnZSBub2RlcyBhcmUgZnJlZWQgb3IgdW50cmFja2VkLgoKSW4gc2hvcnQKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9kZXF1ZXVlX21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvdmhvc3QuYz0zNTA4PUVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2VucXVldWVfbXNnKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTA5LVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjM1MTA6c3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9kZXF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUxMS1cdFx0XHRcdFx0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MjUtfVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjM1MjY6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGVxdWV1ZV9tc2cpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MjctXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5oPTI3Mz12b2lkIHZob3N0X2VucXVldWVfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjc1LVx0XHQgICAgICAgc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaDoyNzY6c3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9kZXF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjc3LVx0XHRcdFx0XHQgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT42bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5MDA3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBDcm9zcy1Ecml2ZXIgRGVwZW5kZW5jeSoqCgpBbHJpZ2h0LCB0aGlzIGZ1bmN0aW9uIGhhcyBiZWVuIGBFWFBPUlRfU1lNQk9MYCYjMzk7ZCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gSXQmIzM5O3MgZGVzaWduZWQgdG8gYmUgZXh0ZXJuYWxseSBhY2Nlc3NpYmxlLCBtZWFuaW5nIG90aGVyIHZob3N0IGRyaXZlcnMgY291bGQgcG90ZW50aWFsbHkgYmUgbGV2ZXJhZ2luZyBpdC4gVGhpcyBuZWNlc3NpdGF0ZXMgYSBjYXJlZnVsIGxvb2sgYXQgdXBzdHJlYW0gdXNhZ2UuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgYHZob3N0X25ldGAsIGB2aG9zdF9zY3NpYCwgb3IgYHZob3N0X3Zzb2NrYCDigJMgb3IgcGVyaGFwcyBldmVuIHNvbWUgb3RoZXIgbGVzcyBjb21tb24gdmhvc3QgaW1wbGVtZW50YXRpb25zIOKAkyBhcmUgZGVwZW5kaW5nIG9uIHRoaXMgZnVuY3Rpb24mIzM5O3MgYmVoYXZpb3IuIEkgbmVlZCB0byB0cmFjZSB0aGUgcmVmZXJlbmNlcyB0byBlbnN1cmUgdGhhdCBhbnkgbW9kaWZpY2F0aW9uIGhlcmUgd29uJiMzOTt0IGNyZWF0ZSBhbiB1bmV4cGVjdGVkIHJlZ3Jlc3Npb24gaW4gYSBzZWVtaW5nbHkgdW5yZWxhdGVkIGFyZWEgb2YgdGhlIHZob3N0IHN1YnN5c3RlbS4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdobyYjMzk7cyBjYWxsaW5nIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9kZXF1ZXVlX21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvdmhvc3QuYz0zNTA4PUVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2VucXVldWVfbXNnKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTA5LVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjM1MTA6c3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9kZXF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUxMS1cdFx0XHRcdFx0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MjUtfVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjM1MjY6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGVxdWV1ZV9tc2cpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MjctXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5oPTI3Mz12b2lkIHZob3N0X2VucXVldWVfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjc1LVx0XHQgICAgICAgc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaDoyNzY6c3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9kZXF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjc3LVx0XHRcdFx0XHQgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5NTYwCgkJCQkJCQlvdXRwdXQ6IDMxOQoJCQkJCQkJdGhvdWdodHM6IDk4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBKdXN0aWZpY2F0aW9uIGZvciBWaG9zdCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGB2aG9zdF9kZXF1ZXVlX21zZ2AgaXNuJiMzOTt0IHVzZWQgKmFueXdoZXJlKiBpbiB0aGUgYGRyaXZlcnMvdmhvc3QvYCBkaXJlY3RvcnksIHdoaWNoIGlzIGludGVyZXN0aW5nLiAgYHZob3N0X2Nocl9yZWFkX2l0ZXJgIHVzZWQgdG8gY2FsbCBpdCwgYnV0IG5vdCBhbnltb3JlIGZvciB0aGUgYHJlYWRfbGlzdGAuICBJcyBpdCBiZWluZyB1c2VkIHdpdGggYHBlbmRpbmdfbGlzdGA/IE5vcGUsIGB2aG9zdF9jaHJfcmVhZF9pdGVyYCBpc24mIzM5O3QgdG91Y2hpbmcgdGhhdCBxdWV1ZSB3aXRoIHRoaXMgZnVuY3Rpb24uIEFoYSEgSSByZW1lbWJlciBub3cgLSBgcGVuZGluZ19saXN0YCBpcyBjbGVhcmVkIGluIGB2aG9zdF9jbGVhcl9tc2dgIGFuZCBgdmhvc3RfaW90bGJfbm90aWZ5X3ZxYC4KClNvLCB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgSU9UTEIgbWlzcyBmbG9vZCB2dWxuZXJhYmlsaXR5LCBvciByZXRyeSBwcm9ibGVtcy4KCkNyaXRpY2FsbHksIHRoZSBwYXRjaCAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MsIGFuZCBJIG5lZWQgdG8gZG9jdW1lbnQgdGhlIHJlYXNvbmluZy4gVGhlIGBzbmFwc2hvdGAgdW5pb24gaXMgY29tcGxldGVseSBwb3B1bGF0ZWQgdGhyb3VnaCBhIGBtZW1jcHlgIGZyb20gYSBmdWxseSB6ZXJvZWQgYHN0cnVjdCB2aG9zdF9tc2dfbm9kZWAgdGhhdCB3YXMgYGt6YWxsb2Nfb2JqYCBhbGxvY2F0ZWQgYW5kIHplcm9lZC4gIFdlIGFyZSBub3QgcHVsbGluZyBhbnkgc3RhbGUgZGF0YSwgbm9yIGFyZSB3ZSBsZWFraW5nIGFueSB1bmluaXRpYWxpemVkIHBhZGRpbmcuICBUaGUgYHN0cnVjdCB2aG9zdF9tc2dgIHBhZGRpbmcsIGFuZCBhbnkgcGFkZGluZyBpbiB0aGUgYHN0cnVjdCB2aG9zdF9tc2dfdjJgLCBpcyBhbHNvIHplcm9lZC4gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIHVzZWQgaW4gYW55IGNvbmRpdGlvbmFsIGxvZ2ljLCBhbmQgdGhlcmUgYXJlIG5vIGNvbXBsZXggc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGVyZSBhcmUgbm8gYm91bmRzIGNoZWNrIGlzc3VlcyBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG1lbW9yeSBsZWFrcyBmcm9tIHVuaW5pdGlhbGl6ZWQgYnVmZmVycy4KCkkgbmVlZCB0byBjb25maXJtIHNpemVzIHRob3VnaC4gTGV0IG1lIGNoZWNrIHRoZSBgc25hcHNob3RgIHVuaW9uIHNpemUgYW5kIHRoZSBgY29weV90b19pdGVyX2Z1bGxgIGNhbGwuCgpgYGBjCgl1bmlvbiB7CgkJc3RydWN0IHZob3N0X21zZyBtc2c7CgkJc3RydWN0IHZob3N0X21zZ192MiBtc2dfdjI7Cgl9IHNuYXBzaG90OwpgYGAKCmBzaXplb2Yoc25hcHNob3QpYCBpcyB0aGUgbWF4aW11bSBvZiB0aGUgc2l6ZXMgb2YgdGhlIHR3byBzdHJ1Y3R1cmVzIHdpdGhpbiB0aGUgdW5pb24uIGBzaXplb2Yoc3RydWN0IHZob3N0X21zZylgIGlzIDQgKHR5cGUpICYjNDM7IDQgKHBhZGRpbmcpICYjNDM7IDY0ICh1bmlvbikgPSA3MiBieXRlcy4gYHNpemVvZihzdHJ1Y3Qgdmhvc3RfbXNnX3YyKWAgaXMgNCAodHlwZSkgJiM0MzsgNCAoYXNpZCkgJiM0MzsgNjQgKHVuaW9uKSA9IDcyIGJ5dGVzLiAgU28sIGJvdGggYXJlIDcyIGJ5dGVzLiAgVGhlIGBzaXplYCBhcmd1bWVudCBpbiB0aGUgYG1lbWNweWAgaXMgZWl0aGVyIGBzaXplb2YoZmlyc3QtJmd0O21zZ192MilgICg3Mikgb3IgYHNpemVvZihmaXJzdC0mZ3Q7bXNnKWAgKDcyKSwgc28gYWx3YXlzIDcyIGJ5dGVzLiAgVGhlIGBtZW1jcHkoJmFtcDtzbmFwc2hvdC5tc2dfdjIsICZhbXA7Zmlyc3QtJmd0O21zZ192Miwgc2l6ZSk7YCBjb3BpZXMgNzIgYnl0ZXMsIGFuZCB0aGUgYGNvcHlfdG9faXRlcl9mdWxsYCBhbHNvIGNvcGllcyA3MiBieXRlcy4gIEV2ZXJ5dGhpbmcgaXMgcGVyZmVjdGx5IHNpemVkIGFuZCBpbml0aWFsaXplZC4gTm8gaXNzdWVzLgoKVGhlcmVmb3JlLCB0aGUgcmVhc29uaW5nIGlzIGFzIGZvbGxvd3M6CgoxLiAgQSBsb2NhbCBgc25hcHNob3RgIHVuaW9uIGlzIGludHJvZHVjZWQgYW5kIGNvcGllZCB0byB1c2VyIHNwYWNlIGluIGB2aG9zdF9jaHJfcmVhZF9pdGVyYC4KMi4gIGBzbmFwc2hvdGAgaXMgcG9wdWxhdGVkIHVzaW5nIGBtZW1jcHlgIGZyb20gYGZpcnN0LSZndDttc2dfdjJgIG9yIGBmaXJzdC0mZ3Q7bXNnYC4KMy4gIGBmaXJzdGAgaXMgYSBgc3RydWN0IHZob3N0X21zZ19ub2RlYCBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgIGluIGB2aG9zdF9uZXdfbXNnYCwgd2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgZW50aXJlIHN0cnVjdHVyZS4KNC4gIElmIGB2aG9zdF9zZXRfaW90bGJfbWlzc2AgY2hhbmdlcyB0aGUgbWVzc2FnZSB0eXBlLCBpdCBleHBsaWNpdGx5IHplcm8mIzM5O3MgdGhlIGVudGlyZSBtZXNzYWdlLgo1LiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCB0byB1c2VyIHNwYWNlIChgc2l6ZWApIG1hdGNoZXMgdGhlIGluaXRpYWxpemVkIG1lc3NhZ2Ugc3RydWN0dXJlLgo2LiBUaHVzLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBjYW4gbGVhayB0byB1c2VyIHNwYWNlLgo3LiAgVGhlIHJlc3QgZm9jdXNlcyBvbiBsaXN0IG1hbmlwdWxhdGlvbnMsIGBpb3RsYl9taXNzX3N0YXRlYCB0cmFja2luZywgYW5kIGNvYWxlc2NpbmcgbG9naWMsIGZvciBmbG9vZCBjb250cm9sLiBBbnkgYnVncyBoZXJlIHdvdWxkIG1hbmlmZXN0IGFzIGxvZ2ljYWwgZXJyb3JzLCBkZWFkbG9ja3MsIG9yIFVBRi9PT0IgYWNjZXNzZXMsIGFuZCBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCBhbmQgS0NTQU4uCjguICBUaGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLgoKSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LiBJJiMzOTtsbCBpbnZva2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2FsIGBzbmFwc2hvdGAgdW5pb24gaW4gYHZob3N0X2Nocl9yZWFkX2l0ZXJgIHdoaWNoIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIHZpYSBgY29weV90b19pdGVyX2Z1bGxgLiBIb3dldmVyLCB0aGlzIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgYmVjYXVzZTpcbjEuIFRoZSBgc25hcHNob3RgIGlzIHBvcHVsYXRlZCB1c2luZyBgbWVtY3B5YCBmcm9tIGFuIGV4aXN0aW5nIG1lc3NhZ2Ugbm9kZSAoYGZpcnN0LVx1MDAzZW1zZ192MmAgb3IgYGZpcnN0LVx1MDAzZW1zZ2ApLlxuMi4gVGhlIHNvdXJjZSBtZXNzYWdlIG5vZGUgaXMgYWxsb2NhdGVkIGluIGB2aG9zdF9uZXdfbXNnYCB1c2luZyBga3phbGxvY2AgKHZpYSBga3phbGxvY19vYmpgKSwgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBlbnRpcmUgc3RydWN0dXJlLCBpbmNsdWRpbmcgYW55IGNvbXBpbGVyLWluc2VydGVkIHBhZGRpbmcsIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuXG4zLiBXaGVuIGEgbWVzc2FnZSBpcyByZXVzZWQgYW5kIGl0cyB0eXBlIGNoYW5nZXMsIGB2aG9zdF9zZXRfaW90bGJfbWlzc2AgZXhwbGljaXRseSBjYWxscyBgbWVtc2V0YCB0byB6ZXJvIG91dCB0aGUgbWVzc2FnZSBmaWVsZHMsIGVuc3VyaW5nIG5vIHN0YWxlIGRhdGEgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nIHJlbWFpbnMuXG40LiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCB0byB1c2VyIHNwYWNlIGV4YWN0bHkgbWF0Y2hlcyB0aGUgc2l6ZSBvZiB0aGUgZnVsbHkgaW5pdGlhbGl6ZWQgbWVzc2FnZSBzdHJ1Y3R1cmUuXG5cblRoZSByZW1haW5kZXIgb2YgdGhlIHBhdGNoIGludm9sdmVzIGxpc3QgbWFuaXB1bGF0aW9ucywgc3RhdGUgdHJhY2tpbmcgKGBpb3RsYl9taXNzX3N0YXRlYCksIGFuZCBjb2FsZXNjaW5nIGxvZ2ljIHRvIHByZXZlbnQgSU9UTEIgbWlzcyBmbG9vZHMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgbGlzdCBjb3JydXB0aW9uLCBvciBkZWFkbG9ja3MpIGFyZSBwZXJmZWN0bHkgc3VpdGVkIGZvciBzdGFuZGFyZCBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9jYWwgYHNuYXBzaG90YCB1bmlvbiBpbiBgdmhvc3RfY2hyX3JlYWRfaXRlcmAgd2hpY2ggaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgdmlhIGBjb3B5X3RvX2l0ZXJfZnVsbGAuIEhvd2V2ZXIsIHRoaXMgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyBiZWNhdXNlOlxuMS4gVGhlIGBzbmFwc2hvdGAgaXMgcG9wdWxhdGVkIHVzaW5nIGBtZW1jcHlgIGZyb20gYW4gZXhpc3RpbmcgbWVzc2FnZSBub2RlIChgZmlyc3QtXHUwMDNlbXNnX3YyYCBvciBgZmlyc3QtXHUwMDNlbXNnYCkuXG4yLiBUaGUgc291cmNlIG1lc3NhZ2Ugbm9kZSBpcyBhbGxvY2F0ZWQgaW4gYHZob3N0X25ld19tc2dgIHVzaW5nIGBremFsbG9jYCAodmlhIGBremFsbG9jX29iamApLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIGVudGlyZSBzdHJ1Y3R1cmUsIGluY2x1ZGluZyBhbnkgY29tcGlsZXItaW5zZXJ0ZWQgcGFkZGluZywgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC5cbjMuIFdoZW4gYSBtZXNzYWdlIGlzIHJldXNlZCBhbmQgaXRzIHR5cGUgY2hhbmdlcywgYHZob3N0X3NldF9pb3RsYl9taXNzYCBleHBsaWNpdGx5IGNhbGxzIGBtZW1zZXRgIHRvIHplcm8gb3V0IHRoZSBtZXNzYWdlIGZpZWxkcywgZW5zdXJpbmcgbm8gc3RhbGUgZGF0YSBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcgcmVtYWlucy5cbjQuIFRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIHRvIHVzZXIgc3BhY2UgZXhhY3RseSBtYXRjaGVzIHRoZSBzaXplIG9mIHRoZSBmdWxseSBpbml0aWFsaXplZCBtZXNzYWdlIHN0cnVjdHVyZS5cblxuVGhlIHJlbWFpbmRlciBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgbGlzdCBtYW5pcHVsYXRpb25zLCBzdGF0ZSB0cmFja2luZyAoYGlvdGxiX21pc3Nfc3RhdGVgKSwgYW5kIGNvYWxlc2NpbmcgbG9naWMgdG8gcHJldmVudCBJT1RMQiBtaXNzIGZsb29kcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBsaXN0IGNvcnJ1cHRpb24sIG9yIGRlYWRsb2NrcykgYXJlIHBlcmZlY3RseSBzdWl0ZWQgZm9yIHN0YW5kYXJkIEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDg6NTguNTI2MjcxODA4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU1MzI0OTQyNjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX05FVFwiLFxuICAgIFwiVkhPU1RfVlNPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF9jaHJfcmVhZF9pdGVyXCIsXG4gICAgXCJ2aG9zdF9pbml0X2RldmljZV9pb3RsYlwiLFxuICAgIFwidmhvc3RfY2xlYXJfbXNnXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9jYWwgYHNuYXBzaG90YCB1bmlvbiBpbiBgdmhvc3RfY2hyX3JlYWRfaXRlcmAgd2hpY2ggaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgdmlhIGBjb3B5X3RvX2l0ZXJfZnVsbGAuIEhvd2V2ZXIsIHRoaXMgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyBiZWNhdXNlOlxcbjEuIFRoZSBgc25hcHNob3RgIGlzIHBvcHVsYXRlZCB1c2luZyBgbWVtY3B5YCBmcm9tIGFuIGV4aXN0aW5nIG1lc3NhZ2Ugbm9kZSAoYGZpcnN0LVxcdTAwM2Vtc2dfdjJgIG9yIGBmaXJzdC1cXHUwMDNlbXNnYCkuXFxuMi4gVGhlIHNvdXJjZSBtZXNzYWdlIG5vZGUgaXMgYWxsb2NhdGVkIGluIGB2aG9zdF9uZXdfbXNnYCB1c2luZyBga3phbGxvY2AgKHZpYSBga3phbGxvY19vYmpgKSwgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBlbnRpcmUgc3RydWN0dXJlLCBpbmNsdWRpbmcgYW55IGNvbXBpbGVyLWluc2VydGVkIHBhZGRpbmcsIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuXFxuMy4gV2hlbiBhIG1lc3NhZ2UgaXMgcmV1c2VkIGFuZCBpdHMgdHlwZSBjaGFuZ2VzLCBgdmhvc3Rfc2V0X2lvdGxiX21pc3NgIGV4cGxpY2l0bHkgY2FsbHMgYG1lbXNldGAgdG8gemVybyBvdXQgdGhlIG1lc3NhZ2UgZmllbGRzLCBlbnN1cmluZyBubyBzdGFsZSBkYXRhIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyByZW1haW5zLlxcbjQuIFRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIHRvIHVzZXIgc3BhY2UgZXhhY3RseSBtYXRjaGVzIHRoZSBzaXplIG9mIHRoZSBmdWxseSBpbml0aWFsaXplZCBtZXNzYWdlIHN0cnVjdHVyZS5cXG5cXG5UaGUgcmVtYWluZGVyIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBsaXN0IG1hbmlwdWxhdGlvbnMsIHN0YXRlIHRyYWNraW5nIChgaW90bGJfbWlzc19zdGF0ZWApLCBhbmQgY29hbGVzY2luZyBsb2dpYyB0byBwcmV2ZW50IElPVExCIG1pc3MgZmxvb2RzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGxpc3QgY29ycnVwdGlvbiwgb3IgZGVhZGxvY2tzKSBhcmUgcGVyZmVjdGx5IHN1aXRlZCBmb3Igc3RhbmRhcmQgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3RhdGUgbWFjaGluZSBmb3IgaGFuZGxpbmcgdmhvc3QgSU9UTEIgbWlzc2VzLCBjb2FsZXNjaW5nIGR1cGxpY2F0ZSBtaXNzIG1lc3NhZ2VzIHRvIHVzZXJzcGFjZS4gVGhpcyBpbnZvbHZlcyBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSB2aG9zdCBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNoYXJhY3RlciBkZXZpY2UgcmVhZCBoYW5kbGVyICh2aG9zdF9jaHJfcmVhZF9pdGVyKSwgZGV2aWNlIGluaXRpYWxpemF0aW9uICh2aG9zdF9pbml0X2RldmljZV9pb3RsYiksIGFuZCBtZXNzYWdlIGNsZWFyaW5nICh2aG9zdF9jbGVhcl9tc2cpLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB2aG9zdCBkZXZpY2Ugbm9kZXMgKGUuZy4sIC9kZXYvdmhvc3QtbmV0LCAvZGV2L3Zob3N0LXZzb2NrKSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBzdGF0ZSBtYWNoaW5lIGRvZXNuJ3QgaW50cm9kdWNlIGRlYWRsb2NrcywgbWVtb3J5IGxlYWtzLCBvciB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXRpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA4OjU4LjUyNjI3NjYyOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MjE4NjE1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRhYmI3MTk5ZDU0OTEwYTY4MTk1MmVmOGZkODU4ZGNkZDc3N2Y1OTNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTU6MDg6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5jIGIvZHJpdmVycy92aG9zdC92aG9zdC5jXFxuaW5kZXggNGM1MjViM2UxNmVhZC4uZWFiOTA0YjRiNDg0YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcXG4rKysgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcXG5AQCAtMzQsNiArMzQsMTMgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJ2aG9zdC5oXFxcIlxcbiBcXG4rZW51bSB2aG9zdF9pb3RsYl9taXNzX3N0YXRlIHtcXG4rXFx0VkhPU1RfSU9UTEJfTUlTU19OT05FLFxcbitcXHRWSE9TVF9JT1RMQl9NSVNTX1JFQUQsXFxuK1xcdFZIT1NUX0lPVExCX01JU1NfUkVBRElORyxcXG4rXFx0VkhPU1RfSU9UTEJfTUlTU19QRU5ESU5HLFxcbit9O1xcbitcXG4gc3RhdGljIHVzaG9ydCBtYXhfbWVtX3JlZ2lvbnMgPSA2NDtcXG4gbW9kdWxlX3BhcmFtKG1heF9tZW1fcmVnaW9ucywgdXNob3J0LCAwNDQ0KTtcXG4gTU9EVUxFX1BBUk1fREVTQyhtYXhfbWVtX3JlZ2lvbnMsXFxuQEAgLTYxMyw2ICs2MjAsOSBAQCB2b2lkIHZob3N0X2Rldl9pbml0KHN0cnVjdCB2aG9zdF9kZXYgKmRldixcXG4gXFx0XFx0dnEtXFx1MDAzZWhlYWRzID0gTlVMTDtcXG4gXFx0XFx0dnEtXFx1MDAzZW5oZWFkcyA9IE5VTEw7XFxuIFxcdFxcdHZxLVxcdTAwM2VkZXYgPSBkZXY7XFxuK1xcdFxcdHZxLVxcdTAwM2Vpb3RsYl9taXNzX3N0YXRlID0gVkhPU1RfSU9UTEJfTUlTU19OT05FO1xcbitcXHRcXHR2cS1cXHUwMDNlaW90bGJfbWlzc19zZXEgPSAwO1xcbitcXHRcXHR2cS1cXHUwMDNlaW90bGJfbWlzc19ub2RlID0gTlVMTDtcXG4gXFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4gXFx0XFx0dmhvc3RfdnFfcmVzZXQoZGV2LCB2cSk7XFxuIFxcdFxcdGlmICh2cS1cXHUwMDNlaGFuZGxlX2tpY2spXFxuQEAgLTExNzcsNiArMTE4NywyMCBAQCB2b2lkIHZob3N0X2Rldl9zdG9wKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kZXZfc3RvcCk7XFxuIFxcbitzdGF0aWMgdm9pZCB2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Moc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlKVxcbit7XFxuK1xcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gbm9kZS1cXHUwMDNldnE7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZ2cS1cXHUwMDNlZGV2LVxcdTAwM2Vpb3RsYl9sb2NrKTtcXG4rXFxuK1xcdGlmICh2cS1cXHUwMDNlaW90bGJfbWlzc19ub2RlICE9IG5vZGUpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHZxLVxcdTAwM2Vpb3RsYl9taXNzX25vZGUgPSBOVUxMO1xcbitcXHR2cS1cXHUwMDNlaW90bGJfbWlzc19zdGF0ZSA9IFZIT1NUX0lPVExCX01JU1NfTk9ORTtcXG4rXFx0dnEtXFx1MDAzZWlvdGxiX21pc3Nfc2VxKys7XFxuK31cXG4rXFxuIHZvaWQgdmhvc3RfY2xlYXJfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcXG4ge1xcbiBcXHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUsICpuO1xcbkBAIC0xMTg0LDEyICsxMjA4LDE0IEBAIHZvaWQgdmhvc3RfY2xlYXJfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWlvdGxiX2xvY2spO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG4sIFxcdTAwMjZkZXYtXFx1MDAzZXJlYWRfbGlzdCwgbm9kZSkge1xcbi1cXHRcXHRsaXN0X2RlbChcXHUwMDI2bm9kZS1cXHUwMDNlbm9kZSk7XFxuK1xcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNm5vZGUtXFx1MDAzZW5vZGUpO1xcbitcXHRcXHR2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Mobm9kZSk7XFxuIFxcdFxcdGtmcmVlKG5vZGUpO1xcbiBcXHR9XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobm9kZSwgbiwgXFx1MDAyNmRldi1cXHUwMDNlcGVuZGluZ19saXN0LCBub2RlKSB7XFxuLVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZub2RlLVxcdTAwM2Vub2RlKTtcXG4rXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2bm9kZS1cXHUwMDNlbm9kZSk7XFxuK1xcdFxcdHZob3N0X3VudHJhY2tfaW90bGJfbWlzcyhub2RlKTtcXG4gXFx0XFx0a2ZyZWUobm9kZSk7XFxuIFxcdH1cXG4gXFxuQEAgLTE1ODUsMjAgKzE2MTEsNzMgQEAgc3RhdGljIGlubGluZSBpbnQgdmhvc3RfZ2V0X2Rlc2Moc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuIFxcdHJldHVybiB2aG9zdF9jb3B5X2Zyb21fdXNlcih2cSwgZGVzYywgdnEtXFx1MDAzZWRlc2MgKyBpZHgsIHNpemVvZigqZGVzYykpO1xcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IHZob3N0X2lvdGxiX21zZyAqXFxuK3Zob3N0X2dldF9pb3RsYl9tc2coc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlKVxcbit7XFxuK1xcdGlmIChub2RlLVxcdTAwM2Vtc2cudHlwZSA9PSBWSE9TVF9JT1RMQl9NU0dfVjIpXFxuK1xcdFxcdHJldHVybiBcXHUwMDI2bm9kZS1cXHUwMDNlbXNnX3YyLmlvdGxiO1xcbitcXG4rXFx0cmV0dXJuIFxcdTAwMjZub2RlLVxcdTAwM2Vtc2cuaW90bGI7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHZob3N0X3NldF9pb3RsYl9taXNzKHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSwgYm9vbCB2MixcXG4rXFx0XFx0XFx0XFx0IHU2NCBpb3ZhLCBpbnQgYWNjZXNzKVxcbit7XFxuK1xcdHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1zZztcXG4rXFx0dTMyIHR5cGUgPSB2MiA/IFZIT1NUX0lPVExCX01TR19WMiA6IFZIT1NUX0lPVExCX01TRztcXG4rXFxuK1xcdGlmIChub2RlLVxcdTAwM2Vtc2cudHlwZSAhPSB0eXBlKVxcbitcXHRcXHRtZW1zZXQoXFx1MDAyNm5vZGUtXFx1MDAzZW1zZ192MiwgMCwgc2l6ZW9mKG5vZGUtXFx1MDAzZW1zZ192MikpO1xcbitcXHRub2RlLVxcdTAwM2Vtc2cudHlwZSA9IHR5cGU7XFxuK1xcdG1zZyA9IHZob3N0X2dldF9pb3RsYl9tc2cobm9kZSk7XFxuK1xcbitcXHRtc2ctXFx1MDAzZXR5cGUgPSBWSE9TVF9JT1RMQl9NSVNTO1xcbitcXHRtc2ctXFx1MDAzZWlvdmEgPSBpb3ZhO1xcbitcXHRtc2ctXFx1MDAzZXBlcm0gPSBhY2Nlc3M7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHZob3N0X2lvdGxiX3VwZGF0ZV9jb3ZlcnMoc3RydWN0IHZob3N0X2lvdGxiX21zZyAqdXBkYXRlLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptaXNzKVxcbit7XFxuK1xcdHJldHVybiBtaXNzLVxcdTAwM2V0eXBlID09IFZIT1NUX0lPVExCX01JU1MgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIHVwZGF0ZS1cXHUwMDNlaW92YSBcXHUwMDNjPSBtaXNzLVxcdTAwM2Vpb3ZhIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICBtaXNzLVxcdTAwM2Vpb3ZhIC0gdXBkYXRlLVxcdTAwM2Vpb3ZhIFxcdTAwM2MgdXBkYXRlLVxcdTAwM2VzaXplIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICAodXBkYXRlLVxcdTAwM2VwZXJtIFxcdTAwMjYgbWlzcy1cXHUwMDNlcGVybSkgPT0gbWlzcy1cXHUwMDNlcGVybTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdmhvc3RfaW90bGJfbm90aWZ5X3ZxKHN0cnVjdCB2aG9zdF9kZXYgKmQsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IHZob3N0X2lvdGxiX21zZyAqbXNnKVxcbiB7XFxuIFxcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSwgKm47XFxuK1xcdGludCBpO1xcbiBcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZkLVxcdTAwM2Vpb3RsYl9sb2NrKTtcXG4gXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkLVxcdTAwM2VudnFzOyArK2kpIHtcXG4rXFx0XFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBkLVxcdTAwM2V2cXNbaV07XFxuK1xcbitcXHRcXHRub2RlID0gdnEtXFx1MDAzZWlvdGxiX21pc3Nfbm9kZTtcXG4rXFx0XFx0aWYgKCFub2RlIHx8XFxuK1xcdFxcdCAgICAhdmhvc3RfaW90bGJfdXBkYXRlX2NvdmVycyhtc2csXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICB2aG9zdF9nZXRfaW90bGJfbXNnKG5vZGUpKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZub2RlLVxcdTAwM2Vub2RlKTtcXG4rXFx0XFx0dmhvc3RfdW50cmFja19pb3RsYl9taXNzKG5vZGUpO1xcbitcXHRcXHR2aG9zdF9wb2xsX3F1ZXVlKFxcdTAwMjZ2cS1cXHUwMDNlcG9sbCk7XFxuK1xcdFxcdGtmcmVlKG5vZGUpO1xcbitcXHR9XFxuK1xcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobm9kZSwgbiwgXFx1MDAyNmQtXFx1MDAzZXBlbmRpbmdfbGlzdCwgbm9kZSkge1xcbiBcXHRcXHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICp2cV9tc2cgPSBcXHUwMDI2bm9kZS1cXHUwMDNlbXNnLmlvdGxiO1xcbitcXG4rXFx0XFx0aWYgKG5vZGUtXFx1MDAzZXZxLVxcdTAwM2Vpb3RsYl9taXNzX25vZGUgPT0gbm9kZSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGlmIChtc2ctXFx1MDAzZWlvdmEgXFx1MDAzYz0gdnFfbXNnLVxcdTAwM2Vpb3ZhIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBtc2ctXFx1MDAzZWlvdmEgKyBtc2ctXFx1MDAzZXNpemUgLSAxIFxcdTAwM2U9IHZxX21zZy1cXHUwMDNlaW92YSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgdnFfbXNnLVxcdTAwM2V0eXBlID09IFZIT1NUX0lPVExCX01JU1MpIHtcXG4gXFx0XFx0XFx0dmhvc3RfcG9sbF9xdWV1ZShcXHUwMDI2bm9kZS1cXHUwMDNldnEtXFx1MDAzZXBvbGwpO1xcbi1cXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2bm9kZS1cXHUwMDNlbm9kZSk7XFxuK1xcdFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNm5vZGUtXFx1MDAzZW5vZGUpO1xcbiBcXHRcXHRcXHRrZnJlZShub2RlKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuQEAgLTE3NTUsOSArMTgzNCwxOCBAQCBzc2l6ZV90IHZob3N0X2Nocl9yZWFkX2l0ZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3QgaW92X2l0ZXIgKnRvLFxcbiBcXHRcXHRcXHQgICAgaW50IG5vYmxvY2spXFxuIHtcXG4gXFx0REVGSU5FX1dBSVQod2FpdCk7XFxuLVxcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZTtcXG4rXFx0dW5pb24ge1xcbitcXHRcXHRzdHJ1Y3Qgdmhvc3RfbXNnIG1zZztcXG4rXFx0XFx0c3RydWN0IHZob3N0X21zZ192MiBtc2dfdjI7XFxuK1xcdH0gc25hcHNob3Q7XFxuK1xcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbWlzc190b2tlbiA9IE5VTEw7XFxuK1xcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKm1pc3NfdnEgPSBOVUxMO1xcbitcXHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUgPSBOVUxMO1xcbitcXHR1NjQgbWlzc19zZXEgPSAwO1xcbiBcXHRzc2l6ZV90IHJldCA9IDA7XFxuIFxcdHVuc2lnbmVkIHNpemUgPSBzaXplb2Yoc3RydWN0IHZob3N0X21zZyk7XFxuK1xcdGJvb2wgc2hvcnRfYnVmZmVyID0gZmFsc2U7XFxuK1xcdGJvb2wgd2FrZSA9IGZhbHNlO1xcbiBcXG4gXFx0aWYgKGlvdl9pdGVyX2NvdW50KHRvKSBcXHUwMDNjIHNpemUpXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xNzY3LDggKzE4NTUsMzYgQEAgc3NpemVfdCB2aG9zdF9jaHJfcmVhZF9pdGVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IGlvdl9pdGVyICp0byxcXG4gXFx0XFx0XFx0cHJlcGFyZV90b193YWl0KFxcdTAwMjZkZXYtXFx1MDAzZXdhaXQsIFxcdTAwMjZ3YWl0LFxcbiBcXHRcXHRcXHRcXHRcXHRUQVNLX0lOVEVSUlVQVElCTEUpO1xcbiBcXG4tXFx0XFx0bm9kZSA9IHZob3N0X2RlcXVldWVfbXNnKGRldiwgXFx1MDAyNmRldi1cXHUwMDNlcmVhZF9saXN0KTtcXG4tXFx0XFx0aWYgKG5vZGUpXFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2ZGV2LVxcdTAwM2Vpb3RsYl9sb2NrKTtcXG4rXFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZkZXYtXFx1MDAzZXJlYWRfbGlzdCkpIHtcXG4rXFx0XFx0XFx0c3RydWN0IHZob3N0X21zZ19ub2RlICpmaXJzdDtcXG4rXFxuK1xcdFxcdFxcdGZpcnN0ID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2ZGV2LVxcdTAwM2VyZWFkX2xpc3QsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUsIG5vZGUpO1xcbitcXHRcXHRcXHRpZiAoZmlyc3QtXFx1MDAzZXZxLVxcdTAwM2Vpb3RsYl9taXNzX25vZGUgPT0gZmlyc3QpIHtcXG4rXFx0XFx0XFx0XFx0c2l6ZSA9IGZpcnN0LVxcdTAwM2Vtc2cudHlwZSA9PSBWSE9TVF9JT1RMQl9NU0dfVjIgP1xcbitcXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKGZpcnN0LVxcdTAwM2Vtc2dfdjIpIDogc2l6ZW9mKGZpcnN0LVxcdTAwM2Vtc2cpO1xcbitcXHRcXHRcXHRcXHRpZiAoaW92X2l0ZXJfY291bnQodG8pIFxcdTAwM2Mgc2l6ZSkge1xcbitcXHRcXHRcXHRcXHRcXHRzaG9ydF9idWZmZXIgPSB0cnVlO1xcbitcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnNuYXBzaG90Lm1zZ192MiwgXFx1MDAyNmZpcnN0LVxcdTAwM2Vtc2dfdjIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBzaXplKTtcXG4rXFx0XFx0XFx0XFx0XFx0bGlzdF9tb3ZlX3RhaWwoXFx1MDAyNmZpcnN0LVxcdTAwM2Vub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmRldi1cXHUwMDNlcGVuZGluZ19saXN0KTtcXG4rXFx0XFx0XFx0XFx0XFx0Zmlyc3QtXFx1MDAzZXZxLVxcdTAwM2Vpb3RsYl9taXNzX3N0YXRlID1cXG4rXFx0XFx0XFx0XFx0XFx0XFx0VkhPU1RfSU9UTEJfTUlTU19SRUFESU5HO1xcbitcXHRcXHRcXHRcXHRcXHRtaXNzX3ZxID0gZmlyc3QtXFx1MDAzZXZxO1xcbitcXHRcXHRcXHRcXHRcXHRtaXNzX3Rva2VuID0gZmlyc3Q7XFxuK1xcdFxcdFxcdFxcdFxcdG1pc3Nfc2VxID0gZmlyc3QtXFx1MDAzZXZxLVxcdTAwM2Vpb3RsYl9taXNzX3NlcTtcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZmaXJzdC1cXHUwMDNlbm9kZSk7XFxuK1xcdFxcdFxcdFxcdG5vZGUgPSBmaXJzdDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWlvdGxiX2xvY2spO1xcbitcXG4rXFx0XFx0aWYgKG5vZGUgfHwgbWlzc192cSB8fCBzaG9ydF9idWZmZXIpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRpZiAobm9ibG9jaykge1xcbiBcXHRcXHRcXHRyZXQgPSAtRUFHQUlOO1xcbkBAIC0xNzg5LDYgKzE5MDUsMzQgQEAgc3NpemVfdCB2aG9zdF9jaHJfcmVhZF9pdGVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IGlvdl9pdGVyICp0byxcXG4gXFx0aWYgKCFub2Jsb2NrKVxcbiBcXHRcXHRmaW5pc2hfd2FpdChcXHUwMDI2ZGV2LVxcdTAwM2V3YWl0LCBcXHUwMDI2d2FpdCk7XFxuIFxcbitcXHRpZiAoc2hvcnRfYnVmZmVyKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChtaXNzX3ZxKSB7XFxuK1xcdFxcdGJvb2wgY29waWVkID0gY29weV90b19pdGVyX2Z1bGwoXFx1MDAyNnNuYXBzaG90Lm1zZ192Miwgc2l6ZSwgdG8pO1xcbitcXG4rXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWlvdGxiX2xvY2spO1xcbitcXHRcXHRub2RlID0gbWlzc192cS1cXHUwMDNlaW90bGJfbWlzc19ub2RlO1xcbitcXHRcXHRpZiAobm9kZSA9PSBtaXNzX3Rva2VuIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBtaXNzX3ZxLVxcdTAwM2Vpb3RsYl9taXNzX3NlcSA9PSBtaXNzX3NlcSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgbWlzc192cS1cXHUwMDNlaW90bGJfbWlzc19zdGF0ZSA9PSBWSE9TVF9JT1RMQl9NSVNTX1JFQURJTkcpIHtcXG4rXFx0XFx0XFx0aWYgKGNvcGllZCkge1xcbitcXHRcXHRcXHRcXHRtaXNzX3ZxLVxcdTAwM2Vpb3RsYl9taXNzX3N0YXRlID1cXG4rXFx0XFx0XFx0XFx0XFx0VkhPU1RfSU9UTEJfTUlTU19QRU5ESU5HO1xcbitcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHRsaXN0X21vdmVfdGFpbChcXHUwMDI2bm9kZS1cXHUwMDNlbm9kZSwgXFx1MDAyNmRldi1cXHUwMDNlcmVhZF9saXN0KTtcXG4rXFx0XFx0XFx0XFx0bWlzc192cS1cXHUwMDNlaW90bGJfbWlzc19zdGF0ZSA9IFZIT1NUX0lPVExCX01JU1NfUkVBRDtcXG4rXFx0XFx0XFx0XFx0d2FrZSA9IHRydWU7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2ZGV2LVxcdTAwM2Vpb3RsYl9sb2NrKTtcXG4rXFxuK1xcdFxcdGlmICh3YWtlKVxcbitcXHRcXHRcXHR3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbChcXHUwMDI2ZGV2LVxcdTAwM2V3YWl0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBFUE9MTElOIHwgRVBPTExSRE5PUk0pO1xcbitcXHRcXHRyZXR1cm4gY29waWVkID8gc2l6ZSA6IC1FRkFVTFQ7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChub2RlKSB7XFxuIFxcdFxcdHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1zZztcXG4gXFx0XFx0dm9pZCAqc3RhcnQgPSBcXHUwMDI2bm9kZS1cXHUwMDNlbXNnO1xcbkBAIC0xODE5LDI5ICsxOTYzLDY5IEBAIHNzaXplX3Qgdmhvc3RfY2hyX3JlYWRfaXRlcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCBpb3ZfaXRlciAqdG8sXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfY2hyX3JlYWRfaXRlcik7XFxuIFxcbitzdGF0aWMgYm9vbCB2aG9zdF9pb3RsYl9taXNzX2NvYWxlc2NlKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBib29sIHYyLFxcbitcXHRcXHRcXHRcXHQgICAgICB1NjQgaW92YSwgaW50IGFjY2VzcywgYm9vbCAqd2FrZSlcXG4re1xcbitcXHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUgPSB2cS1cXHUwMDNlaW90bGJfbWlzc19ub2RlO1xcbitcXHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2c7XFxuK1xcdHUzMiB0eXBlID0gdjIgPyBWSE9TVF9JT1RMQl9NU0dfVjIgOiBWSE9TVF9JT1RMQl9NU0c7XFxuK1xcdGJvb2wgc2FtZTtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnZxLVxcdTAwM2VkZXYtXFx1MDAzZWlvdGxiX2xvY2spO1xcbitcXG4rXFx0aWYgKCFub2RlKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRtc2cgPSB2aG9zdF9nZXRfaW90bGJfbXNnKG5vZGUpO1xcbitcXHRzYW1lID0gbm9kZS1cXHUwMDNlbXNnLnR5cGUgPT0gdHlwZSBcXHUwMDI2XFx1MDAyNiBtc2ctXFx1MDAzZXR5cGUgPT0gVkhPU1RfSU9UTEJfTUlTUyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgbXNnLVxcdTAwM2Vpb3ZhID09IGlvdmEgXFx1MDAyNlxcdTAwMjYgbXNnLVxcdTAwM2VwZXJtID09IGFjY2VzcztcXG4rXFx0aWYgKHNhbWUgXFx1MDAyNlxcdTAwMjYgdnEtXFx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgIT0gVkhPU1RfSU9UTEJfTUlTU19SRUFESU5HKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdGlmICghc2FtZSlcXG4rXFx0XFx0dmhvc3Rfc2V0X2lvdGxiX21pc3Mobm9kZSwgdjIsIGlvdmEsIGFjY2Vzcyk7XFxuK1xcdHZxLVxcdTAwM2Vpb3RsYl9taXNzX3NlcSsrO1xcbitcXHRpZiAodnEtXFx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgIT0gVkhPU1RfSU9UTEJfTUlTU19SRUFEKSB7XFxuK1xcdFxcdGxpc3RfbW92ZV90YWlsKFxcdTAwMjZub2RlLVxcdTAwM2Vub2RlLCBcXHUwMDI2dnEtXFx1MDAzZWRldi1cXHUwMDNlcmVhZF9saXN0KTtcXG4rXFx0XFx0dnEtXFx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgPSBWSE9TVF9JT1RMQl9NSVNTX1JFQUQ7XFxuK1xcdFxcdCp3YWtlID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgdmhvc3RfaW90bGJfbWlzcyhzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgdTY0IGlvdmEsIGludCBhY2Nlc3MpXFxuIHtcXG4gXFx0c3RydWN0IHZob3N0X2RldiAqZGV2ID0gdnEtXFx1MDAzZWRldjtcXG4gXFx0c3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlO1xcbi1cXHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2c7XFxuIFxcdGJvb2wgdjIgPSB2aG9zdF9iYWNrZW5kX2hhc19mZWF0dXJlKHZxLCBWSE9TVF9CQUNLRU5EX0ZfSU9UTEJfTVNHX1YyKTtcXG4rXFx0Ym9vbCB3YWtlID0gZmFsc2U7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWlvdGxiX2xvY2spO1xcbitcXHRpZiAodmhvc3RfaW90bGJfbWlzc19jb2FsZXNjZSh2cSwgdjIsIGlvdmEsIGFjY2VzcywgXFx1MDAyNndha2UpKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWlvdGxiX2xvY2spO1xcbitcXHRcXHRpZiAod2FrZSlcXG4rXFx0XFx0XFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGwoXFx1MDAyNmRldi1cXHUwMDNld2FpdCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgRVBPTExJTiB8IEVQT0xMUkROT1JNKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNmRldi1cXHUwMDNlaW90bGJfbG9jayk7XFxuIFxcbiBcXHRub2RlID0gdmhvc3RfbmV3X21zZyh2cSwgdjIgPyBWSE9TVF9JT1RMQl9NU0dfVjIgOiBWSE9TVF9JT1RMQl9NU0cpO1xcbiBcXHRpZiAoIW5vZGUpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR2aG9zdF9zZXRfaW90bGJfbWlzcyhub2RlLCB2MiwgaW92YSwgYWNjZXNzKTtcXG4gXFxuLVxcdGlmICh2Mikge1xcbi1cXHRcXHRub2RlLVxcdTAwM2Vtc2dfdjIudHlwZSA9IFZIT1NUX0lPVExCX01TR19WMjtcXG4tXFx0XFx0bXNnID0gXFx1MDAyNm5vZGUtXFx1MDAzZW1zZ192Mi5pb3RsYjtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0bXNnID0gXFx1MDAyNm5vZGUtXFx1MDAzZW1zZy5pb3RsYjtcXG4tXFx0fVxcbi1cXG4tXFx0bXNnLVxcdTAwM2V0eXBlID0gVkhPU1RfSU9UTEJfTUlTUztcXG4tXFx0bXNnLVxcdTAwM2Vpb3ZhID0gaW92YTtcXG4tXFx0bXNnLVxcdTAwM2VwZXJtID0gYWNjZXNzO1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmRldi1cXHUwMDNlaW90bGJfbG9jayk7XFxuK1xcdHZxLVxcdTAwM2Vpb3RsYl9taXNzX25vZGUgPSBub2RlO1xcbitcXHR2cS1cXHUwMDNlaW90bGJfbWlzc19zdGF0ZSA9IFZIT1NUX0lPVExCX01JU1NfUkVBRDtcXG4rXFx0dnEtXFx1MDAzZWlvdGxiX21pc3Nfc2VxKys7XFxuK1xcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNm5vZGUtXFx1MDAzZW5vZGUsIFxcdTAwMjZkZXYtXFx1MDAzZXJlYWRfbGlzdCk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWlvdGxiX2xvY2spO1xcbiBcXG4tXFx0dmhvc3RfZW5xdWV1ZV9tc2coZGV2LCBcXHUwMDI2ZGV2LVxcdTAwM2VyZWFkX2xpc3QsIG5vZGUpO1xcbitcXHR3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbChcXHUwMDI2ZGV2LVxcdTAwM2V3YWl0LCBFUE9MTElOIHwgRVBPTExSRE5PUk0pO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMjI3MCwyNyArMjQ1NCw1OSBAQCBsb25nIHZob3N0X3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF9kZXYgKmQsIHVuc2lnbmVkIGludCBpb2N0bCwgdm9pZCBfX3VzZXIgKmFyZ1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X3ZyaW5nX2lvY3RsKTtcXG4gXFxuK3N0YXRpYyBib29sIHZob3N0X3JldHJ5X2lvdGxiX21pc3NlcyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkKVxcbit7XFxuK1xcdGJvb2wgd2FrZSA9IGZhbHNlO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmQtXFx1MDAzZWlvdGxiX2xvY2spO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGQtXFx1MDAzZW52cXM7ICsraSkge1xcbitcXHRcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGQtXFx1MDAzZXZxc1tpXTtcXG4rXFx0XFx0c3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlID0gdnEtXFx1MDAzZWlvdGxiX21pc3Nfbm9kZTtcXG4rXFxuK1xcdFxcdGlmICghbm9kZSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHR2cS1cXHUwMDNlaW90bGJfbWlzc19zZXErKztcXG4rXFx0XFx0aWYgKHZxLVxcdTAwM2Vpb3RsYl9taXNzX3N0YXRlICE9IFZIT1NUX0lPVExCX01JU1NfUkVBRClcXG4rXFx0XFx0XFx0bGlzdF9tb3ZlX3RhaWwoXFx1MDAyNm5vZGUtXFx1MDAzZW5vZGUsIFxcdTAwMjZkLVxcdTAwM2VyZWFkX2xpc3QpO1xcbitcXHRcXHR2cS1cXHUwMDNlaW90bGJfbWlzc19zdGF0ZSA9IFZIT1NUX0lPVExCX01JU1NfUkVBRDtcXG4rXFx0XFx0d2FrZSA9IHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB3YWtlO1xcbit9XFxuK1xcbiBpbnQgdmhvc3RfaW5pdF9kZXZpY2VfaW90bGIoc3RydWN0IHZob3N0X2RldiAqZClcXG4ge1xcbiBcXHRzdHJ1Y3Qgdmhvc3RfaW90bGIgKm5pb3RsYiwgKm9pb3RsYjtcXG4rXFx0Ym9vbCB3YWtlO1xcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdG5pb3RsYiA9IGlvdGxiX2FsbG9jKCk7XFxuIFxcdGlmICghbmlvdGxiKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuK1xcdHZob3N0X2Rldl9sb2NrX3ZxcyhkKTtcXG4gXFx0b2lvdGxiID0gZC1cXHUwMDNlaW90bGI7XFxuIFxcdGQtXFx1MDAzZWlvdGxiID0gbmlvdGxiO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGQtXFx1MDAzZW52cXM7ICsraSkge1xcbiBcXHRcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGQtXFx1MDAzZXZxc1tpXTtcXG4gXFxuLVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuIFxcdFxcdHZxLVxcdTAwM2Vpb3RsYiA9IG5pb3RsYjtcXG4gXFx0XFx0X192aG9zdF92cV9tZXRhX3Jlc2V0KHZxKTtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbiBcXHR9XFxuIFxcbitcXHRzcGluX2xvY2soXFx1MDAyNmQtXFx1MDAzZWlvdGxiX2xvY2spO1xcbitcXHR3YWtlID0gdmhvc3RfcmV0cnlfaW90bGJfbWlzc2VzKGQpO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2ZC1cXHUwMDNlaW90bGJfbG9jayk7XFxuK1xcdHZob3N0X2Rldl91bmxvY2tfdnFzKGQpO1xcbitcXG4rXFx0aWYgKHdha2UpXFxuK1xcdFxcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKFxcdTAwMjZkLVxcdTAwM2V3YWl0LFxcbitcXHRcXHRcXHRcXHRcXHQgICBFUE9MTElOIHwgRVBPTExSRE5PUk0pO1xcbiBcXHR2aG9zdF9pb3RsYl9mcmVlKG9pb3RsYik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMzMwMCw3ICszNTE2LDggQEAgc3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9kZXF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXFxuIFxcdGlmICghbGlzdF9lbXB0eShoZWFkKSkge1xcbiBcXHRcXHRub2RlID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdG5vZGUpO1xcbi1cXHRcXHRsaXN0X2RlbChcXHUwMDI2bm9kZS1cXHUwMDNlbm9kZSk7XFxuK1xcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNm5vZGUtXFx1MDAzZW5vZGUpO1xcbitcXHRcXHR2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Mobm9kZSk7XFxuIFxcdH1cXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNmRldi1cXHUwMDNlaW90bGJfbG9jayk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmggYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmhcXG5pbmRleCAwMTkyYWRlNmU3NDkxLi41MGZjY2M4NWQ1OTQwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaFxcbisrKyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaFxcbkBAIC0yOSw2ICsyOSw3IEBAIHN0cnVjdCB2aG9zdF93b3JrIHtcXG4gXFxuIHN0cnVjdCB2aG9zdF93b3JrZXI7XFxuIHN0cnVjdCB2aG9zdF9kZXY7XFxuK3N0cnVjdCB2aG9zdF9tc2dfbm9kZTtcXG4gXFxuIHN0cnVjdCB2aG9zdF93b3JrZXJfb3BzIHtcXG4gXFx0aW50ICgqY3JlYXRlKShzdHJ1Y3Qgdmhvc3Rfd29ya2VyICp3b3JrZXIsIHN0cnVjdCB2aG9zdF9kZXYgKmRldixcXG5AQCAtMTYzLDcgKzE2NCwxMiBAQCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlIHtcXG4gXFx0LyogUmluZyBlbmRpYW5uZXNzIHJlcXVlc3RlZCBieSB1c2Vyc3BhY2UgZm9yIGNyb3NzLWVuZGlhbiBzdXBwb3J0LiAqL1xcbiBcXHRib29sIHVzZXJfYmU7XFxuICNlbmRpZlxcbitcXHQvKiBQcm90ZWN0ZWQgYnkgZGV2LVxcdTAwM2Vpb3RsYl9sb2NrLiAqL1xcbitcXHR1OCBpb3RsYl9taXNzX3N0YXRlO1xcbiBcXHR1MzIgYnVzeWxvb3BfdGltZW91dDtcXG4rXFx0LyogUHJvdGVjdGVkIGJ5IGRldi1cXHUwMDNlaW90bGJfbG9jay4gKi9cXG4rXFx0dTY0IGlvdGxiX21pc3Nfc2VxO1xcbitcXHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKmlvdGxiX21pc3Nfbm9kZTtcXG4gfTtcXG4gXFxuIHN0cnVjdCB2aG9zdF9tc2dfbm9kZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA4OjU5LjkwOTA5MzE2MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjgwMDE1NjQ2ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX05FVFwiLFxuICAgIFwiVkhPU1RfVlNPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF9jaHJfcmVhZF9pdGVyXCIsXG4gICAgXCJ2aG9zdF9pbml0X2RldmljZV9pb3RsYlwiLFxuICAgIFwidmhvc3RfY2xlYXJfbXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzdGF0ZSBtYWNoaW5lIGZvciBoYW5kbGluZyB2aG9zdCBJT1RMQiBtaXNzZXMsIGNvYWxlc2NpbmcgZHVwbGljYXRlIG1pc3MgbWVzc2FnZXMgdG8gdXNlcnNwYWNlLiBUaGlzIGludm9sdmVzIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIHZob3N0IGNvZGUsIHNwZWNpZmljYWxseSBpbiB0aGUgY2hhcmFjdGVyIGRldmljZSByZWFkIGhhbmRsZXIgKHZob3N0X2Nocl9yZWFkX2l0ZXIpLCBkZXZpY2UgaW5pdGlhbGl6YXRpb24gKHZob3N0X2luaXRfZGV2aWNlX2lvdGxiKSwgYW5kIG1lc3NhZ2UgY2xlYXJpbmcgKHZob3N0X2NsZWFyX21zZykuIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHZob3N0IGRldmljZSBub2RlcyAoZS5nLiwgL2Rldi92aG9zdC1uZXQsIC9kZXYvdmhvc3QtdnNvY2spIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IHN0YXRlIG1hY2hpbmUgZG9lc24ndCBpbnRyb2R1Y2UgZGVhZGxvY2tzLCBtZW1vcnkgbGVha3MsIG9yIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGFiYjcxOTlkNTQ5MTBhNjgxOTUyZWY4ZmQ4NThkY2RkNzc3ZjU5M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE1OjA4OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5jIGIvZHJpdmVycy92aG9zdC92aG9zdC5jXG5pbmRleCA0YzUyNWIzZTE2ZWFkLi5lYWI5MDRiNGI0ODRjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcbkBAIC0zNCw2ICszNCwxMyBAQFxuIFxuICNpbmNsdWRlIFwidmhvc3QuaFwiXG4gXG4rZW51bSB2aG9zdF9pb3RsYl9taXNzX3N0YXRlIHtcbitcdFZIT1NUX0lPVExCX01JU1NfTk9ORSxcbitcdFZIT1NUX0lPVExCX01JU1NfUkVBRCxcbitcdFZIT1NUX0lPVExCX01JU1NfUkVBRElORyxcbitcdFZIT1NUX0lPVExCX01JU1NfUEVORElORyxcbit9O1xuK1xuIHN0YXRpYyB1c2hvcnQgbWF4X21lbV9yZWdpb25zID0gNjQ7XG4gbW9kdWxlX3BhcmFtKG1heF9tZW1fcmVnaW9ucywgdXNob3J0LCAwNDQ0KTtcbiBNT0RVTEVfUEFSTV9ERVNDKG1heF9tZW1fcmVnaW9ucyxcbkBAIC02MTMsNiArNjIwLDkgQEAgdm9pZCB2aG9zdF9kZXZfaW5pdChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG4gXHRcdHZxLVx1MDAzZWhlYWRzID0gTlVMTDtcbiBcdFx0dnEtXHUwMDNlbmhlYWRzID0gTlVMTDtcbiBcdFx0dnEtXHUwMDNlZGV2ID0gZGV2O1xuK1x0XHR2cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlID0gVkhPU1RfSU9UTEJfTUlTU19OT05FO1xuK1x0XHR2cS1cdTAwM2Vpb3RsYl9taXNzX3NlcSA9IDA7XG4rXHRcdHZxLVx1MDAzZWlvdGxiX21pc3Nfbm9kZSA9IE5VTEw7XG4gXHRcdG11dGV4X2luaXQoXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuIFx0XHR2aG9zdF92cV9yZXNldChkZXYsIHZxKTtcbiBcdFx0aWYgKHZxLVx1MDAzZWhhbmRsZV9raWNrKVxuQEAgLTExNzcsNiArMTE4NywyMCBAQCB2b2lkIHZob3N0X2Rldl9zdG9wKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGV2X3N0b3ApO1xuIFxuK3N0YXRpYyB2b2lkIHZob3N0X3VudHJhY2tfaW90bGJfbWlzcyhzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUpXG4re1xuK1x0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBub2RlLVx1MDAzZXZxO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2cS1cdTAwM2VkZXYtXHUwMDNlaW90bGJfbG9jayk7XG4rXG4rXHRpZiAodnEtXHUwMDNlaW90bGJfbWlzc19ub2RlICE9IG5vZGUpXG4rXHRcdHJldHVybjtcbitcbitcdHZxLVx1MDAzZWlvdGxiX21pc3Nfbm9kZSA9IE5VTEw7XG4rXHR2cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlID0gVkhPU1RfSU9UTEJfTUlTU19OT05FO1xuK1x0dnEtXHUwMDNlaW90bGJfbWlzc19zZXErKztcbit9XG4rXG4gdm9pZCB2aG9zdF9jbGVhcl9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2KVxuIHtcbiBcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSwgKm47XG5AQCAtMTE4NCwxMiArMTIwOCwxNCBAQCB2b2lkIHZob3N0X2NsZWFyX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpXG4gXHRzcGluX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG4sIFx1MDAyNmRldi1cdTAwM2VyZWFkX2xpc3QsIG5vZGUpIHtcbi1cdFx0bGlzdF9kZWwoXHUwMDI2bm9kZS1cdTAwM2Vub2RlKTtcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZub2RlLVx1MDAzZW5vZGUpO1xuK1x0XHR2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Mobm9kZSk7XG4gXHRcdGtmcmVlKG5vZGUpO1xuIFx0fVxuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG4sIFx1MDAyNmRldi1cdTAwM2VwZW5kaW5nX2xpc3QsIG5vZGUpIHtcbi1cdFx0bGlzdF9kZWwoXHUwMDI2bm9kZS1cdTAwM2Vub2RlKTtcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZub2RlLVx1MDAzZW5vZGUpO1xuK1x0XHR2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Mobm9kZSk7XG4gXHRcdGtmcmVlKG5vZGUpO1xuIFx0fVxuIFxuQEAgLTE1ODUsMjAgKzE2MTEsNzMgQEAgc3RhdGljIGlubGluZSBpbnQgdmhvc3RfZ2V0X2Rlc2Moc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4gXHRyZXR1cm4gdmhvc3RfY29weV9mcm9tX3VzZXIodnEsIGRlc2MsIHZxLVx1MDAzZWRlc2MgKyBpZHgsIHNpemVvZigqZGVzYykpO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IHZob3N0X2lvdGxiX21zZyAqXG4rdmhvc3RfZ2V0X2lvdGxiX21zZyhzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUpXG4re1xuK1x0aWYgKG5vZGUtXHUwMDNlbXNnLnR5cGUgPT0gVkhPU1RfSU9UTEJfTVNHX1YyKVxuK1x0XHRyZXR1cm4gXHUwMDI2bm9kZS1cdTAwM2Vtc2dfdjIuaW90bGI7XG4rXG4rXHRyZXR1cm4gXHUwMDI2bm9kZS1cdTAwM2Vtc2cuaW90bGI7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHZob3N0X3NldF9pb3RsYl9taXNzKHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSwgYm9vbCB2MixcbitcdFx0XHRcdCB1NjQgaW92YSwgaW50IGFjY2Vzcylcbit7XG4rXHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2c7XG4rXHR1MzIgdHlwZSA9IHYyID8gVkhPU1RfSU9UTEJfTVNHX1YyIDogVkhPU1RfSU9UTEJfTVNHO1xuK1xuK1x0aWYgKG5vZGUtXHUwMDNlbXNnLnR5cGUgIT0gdHlwZSlcbitcdFx0bWVtc2V0KFx1MDAyNm5vZGUtXHUwMDNlbXNnX3YyLCAwLCBzaXplb2Yobm9kZS1cdTAwM2Vtc2dfdjIpKTtcbitcdG5vZGUtXHUwMDNlbXNnLnR5cGUgPSB0eXBlO1xuK1x0bXNnID0gdmhvc3RfZ2V0X2lvdGxiX21zZyhub2RlKTtcbitcbitcdG1zZy1cdTAwM2V0eXBlID0gVkhPU1RfSU9UTEJfTUlTUztcbitcdG1zZy1cdTAwM2Vpb3ZhID0gaW92YTtcbitcdG1zZy1cdTAwM2VwZXJtID0gYWNjZXNzO1xuK31cbitcbitzdGF0aWMgYm9vbCB2aG9zdF9pb3RsYl91cGRhdGVfY292ZXJzKHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKnVwZGF0ZSxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1pc3MpXG4re1xuK1x0cmV0dXJuIG1pc3MtXHUwMDNldHlwZSA9PSBWSE9TVF9JT1RMQl9NSVNTIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHVwZGF0ZS1cdTAwM2Vpb3ZhIFx1MDAzYz0gbWlzcy1cdTAwM2Vpb3ZhIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIG1pc3MtXHUwMDNlaW92YSAtIHVwZGF0ZS1cdTAwM2Vpb3ZhIFx1MDAzYyB1cGRhdGUtXHUwMDNlc2l6ZSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICAodXBkYXRlLVx1MDAzZXBlcm0gXHUwMDI2IG1pc3MtXHUwMDNlcGVybSkgPT0gbWlzcy1cdTAwM2VwZXJtO1xuK31cbitcbiBzdGF0aWMgdm9pZCB2aG9zdF9pb3RsYl9ub3RpZnlfdnEoc3RydWN0IHZob3N0X2RldiAqZCxcbiBcdFx0XHRcdCAgc3RydWN0IHZob3N0X2lvdGxiX21zZyAqbXNnKVxuIHtcbiBcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSwgKm47XG4rXHRpbnQgaTtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZkLVx1MDAzZWlvdGxiX2xvY2spO1xuIFxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZC1cdTAwM2VudnFzOyArK2kpIHtcbitcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBkLVx1MDAzZXZxc1tpXTtcbitcbitcdFx0bm9kZSA9IHZxLVx1MDAzZWlvdGxiX21pc3Nfbm9kZTtcbitcdFx0aWYgKCFub2RlIHx8XG4rXHRcdCAgICAhdmhvc3RfaW90bGJfdXBkYXRlX2NvdmVycyhtc2csXG4rXHRcdFx0XHRcdCAgICAgICB2aG9zdF9nZXRfaW90bGJfbXNnKG5vZGUpKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZub2RlLVx1MDAzZW5vZGUpO1xuK1x0XHR2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Mobm9kZSk7XG4rXHRcdHZob3N0X3BvbGxfcXVldWUoXHUwMDI2dnEtXHUwMDNlcG9sbCk7XG4rXHRcdGtmcmVlKG5vZGUpO1xuK1x0fVxuK1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG4sIFx1MDAyNmQtXHUwMDNlcGVuZGluZ19saXN0LCBub2RlKSB7XG4gXHRcdHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKnZxX21zZyA9IFx1MDAyNm5vZGUtXHUwMDNlbXNnLmlvdGxiO1xuK1xuK1x0XHRpZiAobm9kZS1cdTAwM2V2cS1cdTAwM2Vpb3RsYl9taXNzX25vZGUgPT0gbm9kZSlcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKG1zZy1cdTAwM2Vpb3ZhIFx1MDAzYz0gdnFfbXNnLVx1MDAzZWlvdmEgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBtc2ctXHUwMDNlaW92YSArIG1zZy1cdTAwM2VzaXplIC0gMSBcdTAwM2U9IHZxX21zZy1cdTAwM2Vpb3ZhIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgdnFfbXNnLVx1MDAzZXR5cGUgPT0gVkhPU1RfSU9UTEJfTUlTUykge1xuIFx0XHRcdHZob3N0X3BvbGxfcXVldWUoXHUwMDI2bm9kZS1cdTAwM2V2cS1cdTAwM2Vwb2xsKTtcbi1cdFx0XHRsaXN0X2RlbChcdTAwMjZub2RlLVx1MDAzZW5vZGUpO1xuK1x0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2bm9kZS1cdTAwM2Vub2RlKTtcbiBcdFx0XHRrZnJlZShub2RlKTtcbiBcdFx0fVxuIFx0fVxuQEAgLTE3NTUsOSArMTgzNCwxOCBAQCBzc2l6ZV90IHZob3N0X2Nocl9yZWFkX2l0ZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3QgaW92X2l0ZXIgKnRvLFxuIFx0XHRcdCAgICBpbnQgbm9ibG9jaylcbiB7XG4gXHRERUZJTkVfV0FJVCh3YWl0KTtcbi1cdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZTtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHZob3N0X21zZyBtc2c7XG4rXHRcdHN0cnVjdCB2aG9zdF9tc2dfdjIgbXNnX3YyO1xuK1x0fSBzbmFwc2hvdDtcbitcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbWlzc190b2tlbiA9IE5VTEw7XG4rXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICptaXNzX3ZxID0gTlVMTDtcbitcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSA9IE5VTEw7XG4rXHR1NjQgbWlzc19zZXEgPSAwO1xuIFx0c3NpemVfdCByZXQgPSAwO1xuIFx0dW5zaWduZWQgc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgdmhvc3RfbXNnKTtcbitcdGJvb2wgc2hvcnRfYnVmZmVyID0gZmFsc2U7XG4rXHRib29sIHdha2UgPSBmYWxzZTtcbiBcbiBcdGlmIChpb3ZfaXRlcl9jb3VudCh0bykgXHUwMDNjIHNpemUpXG4gXHRcdHJldHVybiAwO1xuQEAgLTE3NjcsOCArMTg1NSwzNiBAQCBzc2l6ZV90IHZob3N0X2Nocl9yZWFkX2l0ZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3QgaW92X2l0ZXIgKnRvLFxuIFx0XHRcdHByZXBhcmVfdG9fd2FpdChcdTAwMjZkZXYtXHUwMDNld2FpdCwgXHUwMDI2d2FpdCxcbiBcdFx0XHRcdFx0VEFTS19JTlRFUlJVUFRJQkxFKTtcbiBcbi1cdFx0bm9kZSA9IHZob3N0X2RlcXVldWVfbXNnKGRldiwgXHUwMDI2ZGV2LVx1MDAzZXJlYWRfbGlzdCk7XG4tXHRcdGlmIChub2RlKVxuK1x0XHRzcGluX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuK1x0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXJlYWRfbGlzdCkpIHtcbitcdFx0XHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKmZpcnN0O1xuK1xuK1x0XHRcdGZpcnN0ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZkZXYtXHUwMDNlcmVhZF9saXN0LFxuK1x0XHRcdFx0XHRcdCBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUsIG5vZGUpO1xuK1x0XHRcdGlmIChmaXJzdC1cdTAwM2V2cS1cdTAwM2Vpb3RsYl9taXNzX25vZGUgPT0gZmlyc3QpIHtcbitcdFx0XHRcdHNpemUgPSBmaXJzdC1cdTAwM2Vtc2cudHlwZSA9PSBWSE9TVF9JT1RMQl9NU0dfVjIgP1xuK1x0XHRcdFx0ICAgICAgIHNpemVvZihmaXJzdC1cdTAwM2Vtc2dfdjIpIDogc2l6ZW9mKGZpcnN0LVx1MDAzZW1zZyk7XG4rXHRcdFx0XHRpZiAoaW92X2l0ZXJfY291bnQodG8pIFx1MDAzYyBzaXplKSB7XG4rXHRcdFx0XHRcdHNob3J0X2J1ZmZlciA9IHRydWU7XG4rXHRcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0XHRtZW1jcHkoXHUwMDI2c25hcHNob3QubXNnX3YyLCBcdTAwMjZmaXJzdC1cdTAwM2Vtc2dfdjIsXG4rXHRcdFx0XHRcdCAgICAgICBzaXplKTtcbitcdFx0XHRcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2Zmlyc3QtXHUwMDNlbm9kZSxcbitcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2ZGV2LVx1MDAzZXBlbmRpbmdfbGlzdCk7XG4rXHRcdFx0XHRcdGZpcnN0LVx1MDAzZXZxLVx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgPVxuK1x0XHRcdFx0XHRcdFZIT1NUX0lPVExCX01JU1NfUkVBRElORztcbitcdFx0XHRcdFx0bWlzc192cSA9IGZpcnN0LVx1MDAzZXZxO1xuK1x0XHRcdFx0XHRtaXNzX3Rva2VuID0gZmlyc3Q7XG4rXHRcdFx0XHRcdG1pc3Nfc2VxID0gZmlyc3QtXHUwMDNldnEtXHUwMDNlaW90bGJfbWlzc19zZXE7XG4rXHRcdFx0XHR9XG4rXHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2Zmlyc3QtXHUwMDNlbm9kZSk7XG4rXHRcdFx0XHRub2RlID0gZmlyc3Q7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmRldi1cdTAwM2Vpb3RsYl9sb2NrKTtcbitcbitcdFx0aWYgKG5vZGUgfHwgbWlzc192cSB8fCBzaG9ydF9idWZmZXIpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGlmIChub2Jsb2NrKSB7XG4gXHRcdFx0cmV0ID0gLUVBR0FJTjtcbkBAIC0xNzg5LDYgKzE5MDUsMzQgQEAgc3NpemVfdCB2aG9zdF9jaHJfcmVhZF9pdGVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IGlvdl9pdGVyICp0byxcbiBcdGlmICghbm9ibG9jaylcbiBcdFx0ZmluaXNoX3dhaXQoXHUwMDI2ZGV2LVx1MDAzZXdhaXQsIFx1MDAyNndhaXQpO1xuIFxuK1x0aWYgKHNob3J0X2J1ZmZlcilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAobWlzc192cSkge1xuK1x0XHRib29sIGNvcGllZCA9IGNvcHlfdG9faXRlcl9mdWxsKFx1MDAyNnNuYXBzaG90Lm1zZ192Miwgc2l6ZSwgdG8pO1xuK1xuK1x0XHRzcGluX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuK1x0XHRub2RlID0gbWlzc192cS1cdTAwM2Vpb3RsYl9taXNzX25vZGU7XG4rXHRcdGlmIChub2RlID09IG1pc3NfdG9rZW4gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBtaXNzX3ZxLVx1MDAzZWlvdGxiX21pc3Nfc2VxID09IG1pc3Nfc2VxIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgbWlzc192cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlID09IFZIT1NUX0lPVExCX01JU1NfUkVBRElORykge1xuK1x0XHRcdGlmIChjb3BpZWQpIHtcbitcdFx0XHRcdG1pc3NfdnEtXHUwMDNlaW90bGJfbWlzc19zdGF0ZSA9XG4rXHRcdFx0XHRcdFZIT1NUX0lPVExCX01JU1NfUEVORElORztcbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2bm9kZS1cdTAwM2Vub2RlLCBcdTAwMjZkZXYtXHUwMDNlcmVhZF9saXN0KTtcbitcdFx0XHRcdG1pc3NfdnEtXHUwMDNlaW90bGJfbWlzc19zdGF0ZSA9IFZIT1NUX0lPVExCX01JU1NfUkVBRDtcbitcdFx0XHRcdHdha2UgPSB0cnVlO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0XHRzcGluX3VubG9jayhcdTAwMjZkZXYtXHUwMDNlaW90bGJfbG9jayk7XG4rXG4rXHRcdGlmICh3YWtlKVxuK1x0XHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKFx1MDAyNmRldi1cdTAwM2V3YWl0LFxuK1x0XHRcdFx0XHRcdCAgIEVQT0xMSU4gfCBFUE9MTFJETk9STSk7XG4rXHRcdHJldHVybiBjb3BpZWQgPyBzaXplIDogLUVGQVVMVDtcbitcdH1cbitcbiBcdGlmIChub2RlKSB7XG4gXHRcdHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1zZztcbiBcdFx0dm9pZCAqc3RhcnQgPSBcdTAwMjZub2RlLVx1MDAzZW1zZztcbkBAIC0xODE5LDI5ICsxOTYzLDY5IEBAIHNzaXplX3Qgdmhvc3RfY2hyX3JlYWRfaXRlcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCBpb3ZfaXRlciAqdG8sXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2Nocl9yZWFkX2l0ZXIpO1xuIFxuK3N0YXRpYyBib29sIHZob3N0X2lvdGxiX21pc3NfY29hbGVzY2Uoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIGJvb2wgdjIsXG4rXHRcdFx0XHQgICAgICB1NjQgaW92YSwgaW50IGFjY2VzcywgYm9vbCAqd2FrZSlcbit7XG4rXHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUgPSB2cS1cdTAwM2Vpb3RsYl9taXNzX25vZGU7XG4rXHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2c7XG4rXHR1MzIgdHlwZSA9IHYyID8gVkhPU1RfSU9UTEJfTVNHX1YyIDogVkhPU1RfSU9UTEJfTVNHO1xuK1x0Ym9vbCBzYW1lO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2cS1cdTAwM2VkZXYtXHUwMDNlaW90bGJfbG9jayk7XG4rXG4rXHRpZiAoIW5vZGUpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG1zZyA9IHZob3N0X2dldF9pb3RsYl9tc2cobm9kZSk7XG4rXHRzYW1lID0gbm9kZS1cdTAwM2Vtc2cudHlwZSA9PSB0eXBlIFx1MDAyNlx1MDAyNiBtc2ctXHUwMDNldHlwZSA9PSBWSE9TVF9JT1RMQl9NSVNTIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIG1zZy1cdTAwM2Vpb3ZhID09IGlvdmEgXHUwMDI2XHUwMDI2IG1zZy1cdTAwM2VwZXJtID09IGFjY2VzcztcbitcdGlmIChzYW1lIFx1MDAyNlx1MDAyNiB2cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlICE9IFZIT1NUX0lPVExCX01JU1NfUkVBRElORylcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRpZiAoIXNhbWUpXG4rXHRcdHZob3N0X3NldF9pb3RsYl9taXNzKG5vZGUsIHYyLCBpb3ZhLCBhY2Nlc3MpO1xuK1x0dnEtXHUwMDNlaW90bGJfbWlzc19zZXErKztcbitcdGlmICh2cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlICE9IFZIT1NUX0lPVExCX01JU1NfUkVBRCkge1xuK1x0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZub2RlLVx1MDAzZW5vZGUsIFx1MDAyNnZxLVx1MDAzZWRldi1cdTAwM2VyZWFkX2xpc3QpO1xuK1x0XHR2cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlID0gVkhPU1RfSU9UTEJfTUlTU19SRUFEO1xuK1x0XHQqd2FrZSA9IHRydWU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gc3RhdGljIGludCB2aG9zdF9pb3RsYl9taXNzKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCB1NjQgaW92YSwgaW50IGFjY2VzcylcbiB7XG4gXHRzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYgPSB2cS1cdTAwM2VkZXY7XG4gXHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGU7XG4tXHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2c7XG4gXHRib29sIHYyID0gdmhvc3RfYmFja2VuZF9oYXNfZmVhdHVyZSh2cSwgVkhPU1RfQkFDS0VORF9GX0lPVExCX01TR19WMik7XG4rXHRib29sIHdha2UgPSBmYWxzZTtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuK1xuK1x0c3Bpbl9sb2NrKFx1MDAyNmRldi1cdTAwM2Vpb3RsYl9sb2NrKTtcbitcdGlmICh2aG9zdF9pb3RsYl9taXNzX2NvYWxlc2NlKHZxLCB2MiwgaW92YSwgYWNjZXNzLCBcdTAwMjZ3YWtlKSkge1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZkZXYtXHUwMDNlaW90bGJfbG9jayk7XG4rXHRcdGlmICh3YWtlKVxuK1x0XHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKFx1MDAyNmRldi1cdTAwM2V3YWl0LFxuK1x0XHRcdFx0XHRcdCAgIEVQT0xMSU4gfCBFUE9MTFJETk9STSk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1x0c3Bpbl91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuIFxuIFx0bm9kZSA9IHZob3N0X25ld19tc2codnEsIHYyID8gVkhPU1RfSU9UTEJfTVNHX1YyIDogVkhPU1RfSU9UTEJfTVNHKTtcbiBcdGlmICghbm9kZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR2aG9zdF9zZXRfaW90bGJfbWlzcyhub2RlLCB2MiwgaW92YSwgYWNjZXNzKTtcbiBcbi1cdGlmICh2Mikge1xuLVx0XHRub2RlLVx1MDAzZW1zZ192Mi50eXBlID0gVkhPU1RfSU9UTEJfTVNHX1YyO1xuLVx0XHRtc2cgPSBcdTAwMjZub2RlLVx1MDAzZW1zZ192Mi5pb3RsYjtcbi1cdH0gZWxzZSB7XG4tXHRcdG1zZyA9IFx1MDAyNm5vZGUtXHUwMDNlbXNnLmlvdGxiO1xuLVx0fVxuLVxuLVx0bXNnLVx1MDAzZXR5cGUgPSBWSE9TVF9JT1RMQl9NSVNTO1xuLVx0bXNnLVx1MDAzZWlvdmEgPSBpb3ZhO1xuLVx0bXNnLVx1MDAzZXBlcm0gPSBhY2Nlc3M7XG4rXHRzcGluX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuK1x0dnEtXHUwMDNlaW90bGJfbWlzc19ub2RlID0gbm9kZTtcbitcdHZxLVx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgPSBWSE9TVF9JT1RMQl9NSVNTX1JFQUQ7XG4rXHR2cS1cdTAwM2Vpb3RsYl9taXNzX3NlcSsrO1xuK1x0bGlzdF9hZGRfdGFpbChcdTAwMjZub2RlLVx1MDAzZW5vZGUsIFx1MDAyNmRldi1cdTAwM2VyZWFkX2xpc3QpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuIFxuLVx0dmhvc3RfZW5xdWV1ZV9tc2coZGV2LCBcdTAwMjZkZXYtXHUwMDNlcmVhZF9saXN0LCBub2RlKTtcbitcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKFx1MDAyNmRldi1cdTAwM2V3YWl0LCBFUE9MTElOIHwgRVBPTExSRE5PUk0pO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTIyNzAsMjcgKzI0NTQsNTkgQEAgbG9uZyB2aG9zdF92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfZGV2ICpkLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHZvaWQgX191c2VyICphcmdcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfdnJpbmdfaW9jdGwpO1xuIFxuK3N0YXRpYyBib29sIHZob3N0X3JldHJ5X2lvdGxiX21pc3NlcyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkKVxuK3tcbitcdGJvb2wgd2FrZSA9IGZhbHNlO1xuK1x0aW50IGk7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmQtXHUwMDNlaW90bGJfbG9jayk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkLVx1MDAzZW52cXM7ICsraSkge1xuK1x0XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGQtXHUwMDNldnFzW2ldO1xuK1x0XHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUgPSB2cS1cdTAwM2Vpb3RsYl9taXNzX25vZGU7XG4rXG4rXHRcdGlmICghbm9kZSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0dnEtXHUwMDNlaW90bGJfbWlzc19zZXErKztcbitcdFx0aWYgKHZxLVx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgIT0gVkhPU1RfSU9UTEJfTUlTU19SRUFEKVxuK1x0XHRcdGxpc3RfbW92ZV90YWlsKFx1MDAyNm5vZGUtXHUwMDNlbm9kZSwgXHUwMDI2ZC1cdTAwM2VyZWFkX2xpc3QpO1xuK1x0XHR2cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlID0gVkhPU1RfSU9UTEJfTUlTU19SRUFEO1xuK1x0XHR3YWtlID0gdHJ1ZTtcbitcdH1cbitcbitcdHJldHVybiB3YWtlO1xuK31cbitcbiBpbnQgdmhvc3RfaW5pdF9kZXZpY2VfaW90bGIoc3RydWN0IHZob3N0X2RldiAqZClcbiB7XG4gXHRzdHJ1Y3Qgdmhvc3RfaW90bGIgKm5pb3RsYiwgKm9pb3RsYjtcbitcdGJvb2wgd2FrZTtcbiBcdGludCBpO1xuIFxuIFx0bmlvdGxiID0gaW90bGJfYWxsb2MoKTtcbiBcdGlmICghbmlvdGxiKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbitcdHZob3N0X2Rldl9sb2NrX3ZxcyhkKTtcbiBcdG9pb3RsYiA9IGQtXHUwMDNlaW90bGI7XG4gXHRkLVx1MDAzZWlvdGxiID0gbmlvdGxiO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZC1cdTAwM2VudnFzOyArK2kpIHtcbiBcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBkLVx1MDAzZXZxc1tpXTtcbiBcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gXHRcdHZxLVx1MDAzZWlvdGxiID0gbmlvdGxiO1xuIFx0XHRfX3Zob3N0X3ZxX21ldGFfcmVzZXQodnEpO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuIFx0fVxuIFxuK1x0c3Bpbl9sb2NrKFx1MDAyNmQtXHUwMDNlaW90bGJfbG9jayk7XG4rXHR3YWtlID0gdmhvc3RfcmV0cnlfaW90bGJfbWlzc2VzKGQpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2ZC1cdTAwM2Vpb3RsYl9sb2NrKTtcbitcdHZob3N0X2Rldl91bmxvY2tfdnFzKGQpO1xuK1xuK1x0aWYgKHdha2UpXG4rXHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKFx1MDAyNmQtXHUwMDNld2FpdCxcbitcdFx0XHRcdFx0ICAgRVBPTExJTiB8IEVQT0xMUkROT1JNKTtcbiBcdHZob3N0X2lvdGxiX2ZyZWUob2lvdGxiKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTMzMDAsNyArMzUxNiw4IEBAIHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqdmhvc3RfZGVxdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LFxuIFx0aWYgKCFsaXN0X2VtcHR5KGhlYWQpKSB7XG4gXHRcdG5vZGUgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCB2aG9zdF9tc2dfbm9kZSxcbiBcdFx0XHRcdFx0bm9kZSk7XG4tXHRcdGxpc3RfZGVsKFx1MDAyNm5vZGUtXHUwMDNlbm9kZSk7XG4rXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2bm9kZS1cdTAwM2Vub2RlKTtcbitcdFx0dmhvc3RfdW50cmFja19pb3RsYl9taXNzKG5vZGUpO1xuIFx0fVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaCBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaFxuaW5kZXggMDE5MmFkZTZlNzQ5MS4uNTBmY2NjODVkNTk0MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaFxuKysrIGIvZHJpdmVycy92aG9zdC92aG9zdC5oXG5AQCAtMjksNiArMjksNyBAQCBzdHJ1Y3Qgdmhvc3Rfd29yayB7XG4gXG4gc3RydWN0IHZob3N0X3dvcmtlcjtcbiBzdHJ1Y3Qgdmhvc3RfZGV2O1xuK3N0cnVjdCB2aG9zdF9tc2dfbm9kZTtcbiBcbiBzdHJ1Y3Qgdmhvc3Rfd29ya2VyX29wcyB7XG4gXHRpbnQgKCpjcmVhdGUpKHN0cnVjdCB2aG9zdF93b3JrZXIgKndvcmtlciwgc3RydWN0IHZob3N0X2RldiAqZGV2LFxuQEAgLTE2Myw3ICsxNjQsMTIgQEAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSB7XG4gXHQvKiBSaW5nIGVuZGlhbm5lc3MgcmVxdWVzdGVkIGJ5IHVzZXJzcGFjZSBmb3IgY3Jvc3MtZW5kaWFuIHN1cHBvcnQuICovXG4gXHRib29sIHVzZXJfYmU7XG4gI2VuZGlmXG4rXHQvKiBQcm90ZWN0ZWQgYnkgZGV2LVx1MDAzZWlvdGxiX2xvY2suICovXG4rXHR1OCBpb3RsYl9taXNzX3N0YXRlO1xuIFx0dTMyIGJ1c3lsb29wX3RpbWVvdXQ7XG4rXHQvKiBQcm90ZWN0ZWQgYnkgZGV2LVx1MDAzZWlvdGxiX2xvY2suICovXG4rXHR1NjQgaW90bGJfbWlzc19zZXE7XG4rXHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKmlvdGxiX21pc3Nfbm9kZTtcbiB9O1xuIFxuIHN0cnVjdCB2aG9zdF9tc2dfbm9kZSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowODo1OS45MDkwOTQ0MjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjI5NjA3OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVmhvc3QgSU9UTEIgTWlzcyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgaG93IElPVExCIG1pc3NlcyBhcmUgaGFuZGxlZCB3aXRoaW4gdmhvc3QsIHNwZWNpZmljYWxseSBpbiBgZHJpdmVycy92aG9zdC92aG9zdC5jYCBhbmQgYGRyaXZlcnMvdmhvc3Qvdmhvc3QuaGAuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgdGhlIGludHJvZHVjdGlvbiBvZiBgdmhvc3RfaW90bGJfbWlzc19zdGF0ZWAsIHdoaWNoIGlzIGRlc2lnbmVkIHRvIHRyYWNrIHRoZXNlIG1pc3NlcyBvbiBhIHBlci12aXJ0cXVldWUgYmFzaXMuIFRoZSBnb2FsLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRvIGNvYWxlc2NlIHRoZSBtaXNzIG1lc3NhZ2VzIGFuZCBwcmV2ZW50IHRoZSB1c2Vyc3BhY2UgZnJvbSBnZXR0aW5nIGludW5kYXRlZCB3aXRoIHJlZHVuZGFudCBub3RpZmljYXRpb25zLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBmdXp6YWJpbGl0eS4gR2l2ZW4gdGhhdCB2aG9zdCBpcyBhIGZ1bmRhbWVudGFsIHN1YnN5c3RlbSB1bmRlcnBpbm5pbmcgS1ZNLCBRRU1VLCBhbmQgb3RoZXIgdmlydHVhbGl6YXRpb24gdG9vbHMsIGl0J3MgZGVmaW5pdGVseSBhIHdvcnRod2hpbGUgdGFyZ2V0LiBUaGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGNyaXRpY2FsIGZ1bmN0aW9uczogYHZob3N0X2Nocl9yZWFkX2l0ZXJgLCBgdmhvc3RfaW90bGJfbWlzc2AsIGB2aG9zdF9pbml0X2RldmljZV9pb3RsYmAsIGFuZCBgdmhvc3RfY2xlYXJfbXNnYCwgYW1vbmcgb3RoZXJzLiBJIGtub3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhlIGAvZGV2L3Zob3N0LW5ldGAsIGAvZGV2L3Zob3N0LXZzb2NrYCBhbmQgc2ltaWxhciBjaGFyYWN0ZXIgZGV2aWNlcywgd2hpY2ggbWFrZXMgdGhlbSBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBUaGFua2Z1bGx5LCBTeXprYWxsZXIgYWxyZWFkeSBoYXMgdmhvc3QgZGVzY3JpcHRpb25zLCBzaW1wbGlmeWluZyB0aGUgZnV6emluZyBzZXR1cC4gVGhlIGNoYW5nZXMgaGVyZSBhbHNvIHNlZW0gZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50IGFuZCBub3QgdHJpdmlhbC5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBmb3IgZnV6emluZy4gYHZob3N0X2Nocl9yZWFkX2l0ZXJgIGlzIHRoZSB2aG9zdCBjaGFyYWN0ZXIgZGV2aWNlIHJlYWQgaGFuZGxlci4gYHZob3N0X2lvdGxiX21pc3NgIGlzIGNsZWFybHkgdHJpZ2dlcmVkIHdoZW4gYW4gSU9UTEIgbWlzcyBvY2N1cnMuIGB2aG9zdF9pbml0X2RldmljZV9pb3RsYmAgc2VlbXMgdG8gYmUgY2FsbGVkIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24sIHBvc3NpYmx5IHZpYSBgVkhPU1RfU0VUX0JBQ0tFTkRfRkVBVFVSRVNgIG9yIGEgcmVsYXRlZCBpb2N0bC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGNhbGwgZmxvdyB0byBjb25maXJtIGl0J3MgcmVhY2hlZCBpbiB0aGUgcmlnaHQgcGxhY2VzLiBBbmQsIGZpbmFsbHksIGB2aG9zdF9jbGVhcl9tc2dgIGFwcGVhcnMgdG8gYmUgcmVsYXRlZCB0byBkZXZpY2Ugc2h1dGRvd24gb3IgcmVzZXQuXG5cbkknbSBnb2luZyB0byBzdGFydCBieSBzZWFyY2hpbmcgdGhlIGNvZGUgZm9yIGNhbGxzIHRvIGB2aG9zdF9pbml0X2RldmljZV9pb3RsYmAgdG8gdmVyaWZ5IHdoZXJlIGl0J3MgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc5OCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA5OjA2LjUzODcwNDQyMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU3MTYxMzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X2luaXRfZGV2aWNlX2lvdGxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmM9MTY2Nj1zdGF0aWMgaW50IHZob3N0X25ldF9zZXRfZmVhdHVyZXMoc3RydWN0IHZob3N0X25ldCAqbiwgY29uc3QgdTY0ICpmZWF0dXJlcylcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTY5Ni1cXHRpZiAodmlydGlvX2ZlYXR1cmVzX3Rlc3RfYml0KGZlYXR1cmVzLCBWSVJUSU9fRl9BQ0NFU1NfUExBVEZPUk0pKSB7XFxuZHJpdmVycy92aG9zdC9uZXQuYzoxNjk3OlxcdFxcdGlmICh2aG9zdF9pbml0X2RldmljZV9pb3RsYihcXHUwMDI2bi1cXHUwMDNlZGV2KSlcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE2OTgtXFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jPTI0NTc9c3RhdGljIGJvb2wgdmhvc3RfcmV0cnlfaW90bGJfbWlzc2VzKHN0cnVjdCB2aG9zdF9kZXYgKmQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjQ4MC1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MjQ4MTppbnQgdmhvc3RfaW5pdF9kZXZpY2VfaW90bGIoc3RydWN0IHZob3N0X2RldiAqZClcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjQ4Mi17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjUxMy19XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjI1MTQ6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfaW5pdF9kZXZpY2VfaW90bGIpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yNTE1LVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5oPTI4ND1zc2l6ZV90IHZob3N0X2Nocl93cml0ZV9pdGVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjg1LVxcdFxcdFxcdCAgICAgc3RydWN0IGlvdl9pdGVyICpmcm9tKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg6Mjg2OmludCB2aG9zdF9pbml0X2RldmljZV9pb3RsYihzdHJ1Y3Qgdmhvc3RfZGV2ICpkKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjg3LVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTg1ND1zdGF0aWMgaW50IHZob3N0X3Zzb2NrX3NldF9mZWF0dXJlcyhzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLCB1NjQgZmVhdHVyZXMpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODY4LVxcdGlmICgoZmVhdHVyZXMgXFx1MDAyNiAoMVVMTCBcXHUwMDNjXFx1MDAzYyBWSVJUSU9fRl9BQ0NFU1NfUExBVEZPUk0pKSkge1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4Njk6XFx0XFx0aWYgKHZob3N0X2luaXRfZGV2aWNlX2lvdGxiKFxcdTAwMjZ2c29jay1cXHUwMDNlZGV2KSlcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODcwLVxcdFxcdFxcdGdvdG8gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowOTowNy45OTU4Njk4NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NjU0MjQ3NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBWaG9zdCBJT1RMQiBNaXNzZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyB0aGUgdmhvc3QgaW5mcmFzdHJ1Y3R1cmUgaGFuZGxlcyBtZW1vcnkgYWNjZXNzZXMsIHNwZWNpZmljYWxseSB3aGVyZSB0aGluZ3MgbWlnaHQgYmUgZ29pbmcgd3JvbmcuIEl0IHNlZW1zIGxpa2UgYHZob3N0X2luaXRfZGV2aWNlX2lvdGxiYCBpcyBhIGtleSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gSSBzZWUgaXQncyBjYWxsZWQgZnJvbSBgdmhvc3RfbmV0X3NldF9mZWF0dXJlc2AgYW5kIGB2aG9zdF92c29ja19zZXRfZmVhdHVyZXNgLCBpbmRpY2F0aW5nIGl0J3MgaW52b2x2ZWQgaW4gc2V0dGluZyB1cCB0aGUgSU9UTEIgKElucHV0L091dHB1dCBUcmFuc2xhdGlvbiBMb29rYXNpZGUgQnVmZmVyKSBmb3IgbmV0d29yayBhbmQgdnNvY2sgdmhvc3QgZGV2aWNlcy4gVGhhdCBtYWtlcyBzZW5zZSwgdGhvc2UgYXJlIGNvbW1vbiBlbnRyeSBwb2ludHMuXG5cbk5vdywgYHZob3N0X2Nocl9yZWFkX2l0ZXJgIGlzIHRoZSByZWFkIGhhbmRsZXIgZm9yIHZob3N0IGRldmljZXMuIFRoYXQncyBnb29kIHRvIGtlZXAgaW4gbWluZCwgYXMgYW55IHJlYWRzIHdpbGwgbGlrZWx5IGZ1bm5lbCB0aHJvdWdoIHRoZXJlLlxuXG5UaGUgcmVhbCBwb2ludCBvZiBpbnRlcmVzdCwgdGhvdWdoLCBpcyBgdmhvc3RfaW90bGJfbWlzc2AuIFRoaXMgYXBwZWFycyB0byBiZSBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQncyBwcm9iYWJseSBub3QgaW50ZW5kZWQgZm9yIGRpcmVjdCB1c2UgZWxzZXdoZXJlLiBNeSBzdXNwaWNpb24gaXMsIGl0J3MgdHJpZ2dlcmVkIHdoZW4gdmhvc3QgYXR0ZW1wdHMgdG8gYWNjZXNzIG1lbW9yeSBhbmQgdGhlIGxvb2t1cCBpbiB0aGUgSU9UTEIgZmFpbHMuIFRoaXMgbWVhbnMgYSB0cmFuc2xhdGlvbiBpcyBuZWVkZWQuIEdpdmVuIHRoYXQsIEknbSBnb2luZyB0byBmb2N1cyBteSBlZmZvcnRzIG9uIHVuZGVyc3RhbmRpbmcgd2hhdCBsZWFkcyB0byB0aGUgZXhlY3V0aW9uIG9mIGB2aG9zdF9pb3RsYl9taXNzYC4gSXQgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgaW50ZXJlc3RpbmcgYW5kIHdpbGwgYmUgdGhlIHRhcmdldCBvZiBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTkwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA5OjExLjk2MTI5NzAwNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg3NzQ3MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X2lvdGxiX21pc3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92aG9zdC5jLTM2LVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozNzplbnVtIHZob3N0X2lvdGxiX21pc3Nfc3RhdGUge1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zOC1cXHRWSE9TVF9JT1RMQl9NSVNTX05PTkUsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9MTk2ND1FWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9jaHJfcmVhZF9pdGVyKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTk2NS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MTk2NjpzdGF0aWMgYm9vbCB2aG9zdF9pb3RsYl9taXNzX2NvYWxlc2NlKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBib29sIHYyLFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0xOTY3LVxcdFxcdFxcdFxcdCAgICAgIHU2NCBpb3ZhLCBpbnQgYWNjZXNzLCBib29sICp3YWtlKVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTE5OTYtXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjE5OTc6c3RhdGljIGludCB2aG9zdF9pb3RsYl9taXNzKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCB1NjQgaW92YSwgaW50IGFjY2VzcylcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTk5OC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjAwNi1cXHRzcGluX2xvY2soXFx1MDAyNmRldi1cXHUwMDNlaW90bGJfbG9jayk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjIwMDc6XFx0aWYgKHZob3N0X2lvdGxiX21pc3NfY29hbGVzY2UodnEsIHYyLCBpb3ZhLCBhY2Nlc3MsIFxcdTAwMjZ3YWtlKSkge1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yMDA4LVxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWlvdGxiX2xvY2spO1xcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jPTIwNjA9c3RhdGljIGJvb2wgaW90bGJfYWNjZXNzX29rKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTIwNzItXFx0XFx0aWYgKG1hcCA9PSBOVUxMIHx8IG1hcC1cXHUwMDNlc3RhcnQgXFx1MDAzZSBhZGRyKSB7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjIwNzM6XFx0XFx0XFx0dmhvc3RfaW90bGJfbWlzcyh2cSwgYWRkciwgYWNjZXNzKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjA3NC1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9Mjg1Nz1zdGF0aWMgaW50IHRyYW5zbGF0ZV9kZXNjKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCB1NjQgYWRkciwgdTMyIGxlbixcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yODk3LVxcdGlmIChyZXQgPT0gLUVBR0FJTilcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6Mjg5ODpcXHRcXHR2aG9zdF9pb3RsYl9taXNzKHZxLCBhZGRyLCBhY2Nlc3MpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yODk5LVxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA5OjEzLjU0OTA1MDMzNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMTA5MzgxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFZob3N0IElPVExCIGFuZCBSZWFkIEhhbmRsZXJzKipcblxuT2theSwgc28gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhpcyB2aG9zdCBjb2RlLiBJdCBzZWVtcyBsaWtlIGB2aG9zdF9pb3RsYl9taXNzYCBpcyBhIHN0YXRpYyB2YXJpYWJsZSwgd2hpY2ggbWVhbnMgaXQncyBub3QgZ29pbmcgdG8gYmUgaGVscGZ1bCBhcyBhIHN5bWJvbCB0byBmb2N1cyBvbi4gVGhhdCdzIGEgZGVhZCBlbmQsIGF0IGxlYXN0IGZvciB0aGlzIHBhcnRpY3VsYXIgYXBwcm9hY2guXG5cbkhvd2V2ZXIsIGB2aG9zdF9jaHJfcmVhZF9pdGVyYCBpcyBleHBvcnRlZCwgYW5kIGl0J3MgZmxhZ2dlZCBhcyB0aGUgcmVhZCBoYW5kbGVyLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IGl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgSSB3YW50IHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuIEl0J3MgYSBrZXkgZnVuY3Rpb24gaW4gdGhpcyBwYXJ0IG9mIHRoZSBhcmNoaXRlY3R1cmUuIEFuZCBoZXksIGB2aG9zdF9pbml0X2RldmljZV9pb3RsYmAgaXMgYWxzbyBleHBvcnRlZCwgd2hpY2ggc2VlbXMgcmVsYXRlZC5cblxuTGV0J3MgZHJpbGwgZG93biBhbmQgdHJhY2sgZG93biB3aGVyZSBgdmhvc3RfY2hyX3JlYWRfaXRlcmAgaXMgYmVpbmcgdXNlZC4gVGhhdCdsbCBiZSB0aGUgYmVzdCB3YXkgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBwcm9jZXNzLiBUaW1lIHRvIHN0YXJ0IHRoZSBodW50IVxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjE3LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDk6MTcuNTU5OTkwNDk2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTExMTk2NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfY2hyX3JlYWRfaXRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jPTE4Mzg9c3RhdGljIHNzaXplX3Qgdmhvc3RfbmV0X2Nocl9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODQ0LVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTg0NTpcXHRyZXR1cm4gdmhvc3RfY2hyX3JlYWRfaXRlcihkZXYsIHRvLCBub2Jsb2NrKTtcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4NDYtfVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jPTE4MzE9RVhQT1JUX1NZTUJPTCh2aG9zdF9jaHJfcG9sbCk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTE4MzItXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjE4MzM6c3NpemVfdCB2aG9zdF9jaHJfcmVhZF9pdGVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IGlvdl9pdGVyICp0byxcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTgzNC1cXHRcXHRcXHQgICAgaW50IG5vYmxvY2spXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTk2My19XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjE5NjQ6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfY2hyX3JlYWRfaXRlcik7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTE5NjUtXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg9MjgwPV9fcG9sbF90IHZob3N0X2Nocl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXFxuZHJpdmVycy92aG9zdC92aG9zdC5oLTI4MS1cXHRcXHRcXHQgICAgcG9sbF90YWJsZSAqd2FpdCk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5oOjI4Mjpzc2l6ZV90IHZob3N0X2Nocl9yZWFkX2l0ZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3QgaW92X2l0ZXIgKnRvLFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC0yODMtXFx0XFx0XFx0ICAgIGludCBub2Jsb2NrKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz05NDQ9c3RhdGljIHNzaXplX3Qgdmhvc3RfdnNvY2tfY2hyX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTUwLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5NTE6XFx0cmV0dXJuIHZob3N0X2Nocl9yZWFkX2l0ZXIoZGV2LCB0bywgbm9ibG9jayk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTk1Mi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA5OjE4Ljk1MTExNTcwOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTU0NzYyMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgdGhpbmtpbmcgcmlnaHQgbm93IGlzIGNlbnRlcmVkIG9uIGEgc3BlY2lmaWMgYXJlYSB3aXRoaW4gdGhlIGNvZGUuXG5cbioqRGl2aW5nIGludG8gdGhlIFZob3N0IENvZGUqKlxuXG5SaWdodCwgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUgYHZob3N0X2Nocl9yZWFkX2l0ZXJgIHN5bWJvbDsgaXQgc2VlbXMgbGlrZSBhIHVzZWZ1bCBlbnRyeSBwb2ludCBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uLiBCdXQgSSdtIGFsc28gY3VyaW91cyBhYm91dCBhbm90aGVyIGZ1bmN0aW9uIHRoYXQncyBwb3RlbnRpYWxseSByZWxhdGVkLCBgdmhvc3RfaW5pdF9kZXZpY2VfaW90bGJgLiBBaCwgSSBzZWUsIGl0IGdldHMgaW52b2tlZCB3aGVuIGBWSVJUSU9fRl9BQ0NFU1NfUExBVEZPUk1gIGlzIGVuYWJsZWQuIFRoYXQgY291bGQgYmUgYSBjbHVlIHdvcnRoIGZvbGxvd2luZywgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LiBPa2F5LCBuZXh0IHN0ZXAsIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGB2aG9zdF9jbGVhcl9tc2dgIHRvIHNlZSBob3cgdGhhdCBpbnRlcmFjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDU5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDk6MjIuNTY2NTk0Mjc4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQzMjk4MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X2NsZWFyX21zZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jPTE1MzU9c3RhdGljIGxvbmcgdmhvc3RfbmV0X3NldF9iYWNrZW5kKHN0cnVjdCB2aG9zdF9uZXQgKm4sIHVuc2lnbmVkIGluZGV4LCBpbnQgZmQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE1NTYtXFx0aWYgKGZkID09IC0xKVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTU1NzpcXHRcXHR2aG9zdF9jbGVhcl9tc2coXFx1MDAyNm4tXFx1MDAzZWRldik7XFxuZHJpdmVycy92aG9zdC9uZXQuYy0xNTU4LVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jPTExOTA9c3RhdGljIHZvaWQgdmhvc3RfdW50cmFja19pb3RsYl9taXNzKHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSlcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0xMjAzLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoxMjA0OnZvaWQgdmhvc3RfY2xlYXJfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTIwNS17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTIyMy19XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjEyMjQ6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfY2xlYXJfbXNnKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTIyNS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9MTIyNj12b2lkIHZob3N0X2Rldl9jbGVhbnVwKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0xMjQ3LVxcdGRldi1cXHUwMDNlaW90bGIgPSBOVUxMO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoxMjQ4OlxcdHZob3N0X2NsZWFyX21zZyhkZXYpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0xMjQ5LVxcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKFxcdTAwMjZkZXYtXFx1MDAzZXdhaXQsIEVQT0xMSU4gfCBFUE9MTFJETk9STSk7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg9MjMzPWJvb2wgdmhvc3RfbG9nX2FjY2Vzc19vayhzdHJ1Y3Qgdmhvc3RfZGV2ICopO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaDoyMzQ6dm9pZCB2aG9zdF9jbGVhcl9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2KTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjM1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowOToyMy45MDk5MDI1MzVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM5MjQ0MjA1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBtaW5kIGlzIGp1bXBpbmcgYXJvdW5kIGEgYml0IGhlcmUsIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhpcy5cblxuKipGb2N1c2luZyBvbiBQb3RlbnRpYWwgSG90c3BvdHMgaW4gdGhlIHZob3N0IENvZGUqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGdvb2QgcGxhY2VzIHRvIGZvY3VzIG15IGF0dGVudGlvbiwgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBhcmVhcyB0aGF0IGFyZSBsaWtlbHkgdG8gYmUgc2VlaW5nIGEgbG90IG9mIGFjdGl2aXR5LiBgdmhvc3RfY2xlYXJfbXNnYC4uLiB0aGF0J3MgYSBkZWNlbnQgY2FuZGlkYXRlLCBzZWVtcyBsaWtlIGl0IGNvdWxkIGJlIGEgZm9jdXMgc3ltYm9sLiBCdXQgaG9sZCBvbiwgd2hhdCBhYm91dCBgdmhvc3RfaW90bGJfbm90aWZ5X3ZxYD8gSG1tLCBpdCdzIHN0YXRpYywgc28gdGhhdCBtaWdodCBsaW1pdCBpdHMgc2NvcGUsIGJ1dCBJIHNob3VsZCBzdGlsbCBrZWVwIGl0IGluIG1pbmQgYXMgYSBwb3RlbnRpYWwgYXJlYSB0byBpbnZlc3RpZ2F0ZS4gT2theSwgbmV4dCB1cCwgaG93IGFib3V0IGB2aG9zdF92cmluZ19pb2N0bGA/IEl0J3MgZXhwb3J0ZWQsIGFuZCBpdCdzIGRlYWxpbmcgd2l0aCBpb2N0bHMsIHdoaWNoIG9mdGVuIGltcGxpZXMgc29tZSBhbW91bnQgb2YgSS9PIGludGVyYWN0aW9uLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldC4gVGhvdWdoLCBvbiBzZWNvbmQgdGhvdWdodCwgaXQgc2VlbXMgcHJldHR5IGdlbmVyaWMuLi4gaXTigJlzIGEgaG90LXBhdGggZnVuY3Rpb24gZm9yIGlvY3RscyBpbiBnZW5lcmFsLCBub3QgbmVjZXNzYXJpbHkgdGllZCB0byBhbnkgc3BlY2lmaWMgZGV2aWNlIG9yIHByb2Nlc3MuIE9rYXksIHRoYXQncyBub3QgcXVpdGUgYXMgaW50ZXJlc3RpbmcuXG5cbldhaXQgYSBzZWNvbmQuLi4gYWgsIHRoZXJlJ3MgYW5vdGhlciB0aG91Z2h0ISBJIHNlZSBgdmhvc3RfY2hyX3JlYWRfaXRlcmAgY2FsbGVkIGZyb20gYHZob3N0X25ldF9jaHJfcmVhZF9pdGVyYCBhbmQgYHZob3N0X3Zzb2NrX2Nocl9yZWFkX2l0ZXJgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgaXTigJlzIHRoZSBiYXNlIGZvciBjb21tb24gcmVhZCBpdGVyYXRpb25zLiBMZXQgbWUganVzdCBjb25maXJtIGlmIGBWSE9TVF9ORVRgIGFuZCBgVkhPU1RfVlNPQ0tgIGFyZSwgaW4gZmFjdCwgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIFRoYXQgd291bGQgaGVscCB0byBzZWUgaWYgYHZob3N0X2Nocl9yZWFkX2l0ZXJgIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc5MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowOToyOS4zMDIzNDcwOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0ODA5MzU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkhPU1RfTkVUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZz0zMj1pZiBWSE9TVF9NRU5VXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTMzLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzozNDpjb25maWcgVkhPU1RfTkVUXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTM1LVxcdHRyaXN0YXRlIFxcXCJIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDk6MzAuNzUwNDQ1NTI5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDIyMDgxNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFzc2Vzc2luZyBWaXJ0dWFsaXplZCBTb2NrZXQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgXCJUaW1lIHRvIGRpdmUgaW50byB0aGUgdmlydHVhbGl6ZWQgc29ja2V0IHNpdHVhdGlvbi5cIiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBjb25maWcgVkhPU1RfVlNPQ0tgIHNldHRpbmcuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgc3RhdGUgb2YgdGhlIHZob3N0LXZzb2NrIGNvbmZpZ3VyYXRpb24uIElzIGl0IGVuYWJsZWQsIGRpc2FibGVkLCBvciBidWlsdCBhcyBhIG1vZHVsZT8gVW5kZXJzdGFuZGluZyB0aGlzIGlzIHRoZSBmb3VuZGF0aW9uYWwgZmlyc3Qgc3RlcC4gRGVwZW5kaW5nIG9uIHRoZSBhbnN3ZXIsIGl0IGdpdmVzIHRoZSBkaXJlY3Rpb24gb2YgZnVydGhlciB0cm91Ymxlc2hvb3RpbmcsIG9yIGF0IGxlYXN0IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGN1cnJlbnQgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzkyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDk6MzQuNDkyNjU1NzA5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU2Njk4MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSE9TVF9WU09DS1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWc9NDY9Y29uZmlnIFZIT1NUX1NDU0lcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01NS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NTY6Y29uZmlnIFZIT1NUX1ZTT0NLXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTU3LVxcdHRyaXN0YXRlIFxcXCJ2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowOTozNS45NDkzNTg4MzhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ3NDM1MjY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQ29uZmlndXJhdGlvbiBDaGVjayoqXG5cbkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAsIEkgbmVlZCB0byBnZXQgYSBiYXNlbGluZSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQncyBnb2luZyBvbi4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgdG8gY2hlY2sgdGhlIGBjb25maWcgVkhPU1RgIHNldHRpbmdzLiBUaGlzIGlzIHVzdWFsbHkgdGhlIHF1aWNrZXN0IHdheSB0byBpZGVudGlmeSB0aGUgYmFzaWMgdmlydHVhbCBob3N0IHNldHVwLiBJIHdhbnQgdG8gc2VlIHdoYXQncyBkZWZpbmVkIGF0IHRoZSB0b3AgbGV2ZWwgYW5kIGVuc3VyZSBldmVyeXRoaW5nIGlzIGJlaGF2aW5nIGFzIEkgZXhwZWN0LiBJdCdsbCBnaXZlIG1lIGEgZmFzdCBvdmVydmlldyBvZiBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gaXMgZGVzaWduZWQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIHRoZSB2aG9zdCBpcyBtaXNjb25maWd1cmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYzMSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDk6NDAuNDIzNzEzNTA4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU1ODI3NzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSE9TVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6Mjpjb25maWcgVkhPU1RfSU9UTEJcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMy1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTgtXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjk6Y29uZmlnIFZIT1NUX1JJTkdcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMTAtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0xNS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MTY6Y29uZmlnIFZIT1NUX1RBU0tcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMTctXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTE5LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzoyMDpjb25maWcgVkhPU1RcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMjEtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0yNy1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6Mjg6bWVudWNvbmZpZyBWSE9TVF9NRU5VXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTI5LVxcdGJvb2wgXFxcIlZIT1NUIGRyaXZlcnNcXFwiXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9MzI9aWYgVkhPU1RfTUVOVVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zMy1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MzQ6Y29uZmlnIFZIT1NUX05FVFxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zNS1cXHR0cmlzdGF0ZSBcXFwiSG9zdCBrZXJuZWwgYWNjZWxlcmF0b3IgZm9yIHZpcnRpbyBuZXRcXFwiXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDUtXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjQ2OmNvbmZpZyBWSE9TVF9TQ1NJXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTQ3LVxcdHRyaXN0YXRlIFxcXCJWSE9TVF9TQ1NJIFRDTSBmYWJyaWMgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTU1LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo1Njpjb25maWcgVkhPU1RfVlNPQ0tcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTctXFx0dHJpc3RhdGUgXFxcInZob3N0IHZpcnRpby12c29jayBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNjktXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjcwOmNvbmZpZyBWSE9TVF9WRFBBXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTcxLVxcdHRyaXN0YXRlIFxcXCJWaG9zdCBkcml2ZXIgZm9yIHZEUEEtYmFzZWQgYmFja2VuZFxcXCJcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy04Mi1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6ODM6Y29uZmlnIFZIT1NUX0NST1NTX0VORElBTl9MRUdBQ1lcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctODQtXFx0Ym9vbCBcXFwiQ3Jvc3MtZW5kaWFuIHN1cHBvcnQgZm9yIHZob3N0XFxcIlxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTk3LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo5ODpjb25maWcgVkhPU1RfRU5BQkxFX0ZPUktfT1dORVJfQ09OVFJPTFxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy05OS1cXHRib29sIFxcXCJFbmFibGUgVkhPU1RfRU5BQkxFX0ZPUktfT1dORVJfQ09OVFJPTFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDk6NDEuODc5NTg2OTI3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMjgzNzI2MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlZob3N0IENvZGUgQ2hhbmdlczogQSBRdWljayBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgb3ZlciB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCBwcmltYXJpbHkgaW1wYWN0cyBgZHJpdmVycy92aG9zdC92aG9zdC5jYC4gSSBjYW4gc2VlIHRoYXQgYENPTkZJR19WSE9TVGAgaXMgdGhlIGtleSBjb25maWcgaGVyZSwgYW5kIHRoYXQgaXQncyBwdWxsZWQgaW4gYnkgdGhlIGxpa2VzIG9mIGBWSE9TVF9ORVRgIGFuZCBgVkhPU1RfVlNPQ0tgLCBzbyBlbmFibGluZyB0aG9zZSBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydC5cblxuSSd2ZSB6ZXJvZWQgaW4gb24gdGhlIG1vZGlmaWVkIGV4cG9ydGVkIGZ1bmN0aW9ucy4gYHZob3N0X2luaXRfZGV2aWNlX2lvdGxiYCwgYHZob3N0X2Nocl9yZWFkX2l0ZXJgLCBhbmQgYHZob3N0X2NsZWFyX21zZ2AgYXJlIGRlZmluaXRlbHkgb2YgaW50ZXJlc3QuIEkgY29uZmlybWVkIHRoYXQgYHZob3N0X2luaXRfZGV2aWNlX2lvdGxiYCBpcyBhbiAqZXhpc3RpbmcqIGZ1bmN0aW9uIHRoYXQncyBiZWVuIG1vZGlmaWVkLCBhbmQgdGhlIGRpZmYgc2hvd3MgdGhlIGFkZGl0aW9uIG9mIGEgbmV3IHN0YXRlIG1hY2hpbmUgcmVsYXRlZCB0byBJT1RMQiBtaXNzZXMuIExvb2tzIGxpa2UgYSBzb2xpZCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSB2aG9zdCBjb2RlLiBJIGFsc28gdmVyaWZpZWQgdGhhdCBgdmhvc3RfY2hyX3JlYWRfaXRlcmAgYW5kIGB2aG9zdF9jbGVhcl9tc2dgIGhhdmUgYmVlbiBtb2RpZmllZCBhcyB3ZWxsLlxuXG5UaGUgY2hhbmdlcyBhcHBlYXIgdG8gaW1wbGVtZW50IGEgbWVjaGFuaXNtIHRvIGF2b2lkIHNlbmRpbmcgZHVwbGljYXRlIG1pc3MgbWVzc2FnZXMgd2hpY2ggaW5kaWNhdGVzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvZGUuXG5cbkZvciBmdXp6aW5nLCBJJ20gZ29pbmcgdG8gZm9jdXMgb24gdGhvc2UgdGhyZWUga2V5IHN5bWJvbHM6IGB2aG9zdF9jaHJfcmVhZF9pdGVyYCwgYHZob3N0X2luaXRfZGV2aWNlX2lvdGxiYCwgYW5kIGB2aG9zdF9jbGVhcl9tc2dgLiBBbmQgb2YgY291cnNlLCBJJ2xsIGJlIHVzaW5nIGBWSE9TVF9ORVRgLCBgVkhPU1RfVlNPQ0tgLCBhbmQgYFZIT1NUYCBhcyBteSBwcmltYXJ5IGNvbmZpZyBvcHRpb25zLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHF1aWNrbHkgY2hlY2tlZCBmb3Igb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkLiBJIGZvdW5kIHRoYXQgYHZob3N0X2Rldl9pbml0YCBoYXMgYmVlbiBtb2RpZmllZCwgYW5kIGB2aG9zdF9kZXF1ZXVlX21zZ2AgaGFzIGJlZW4gY2hhbmdlZCBhcyB3ZWxsLiBTbyBJJ2xsIGtlZXAgYW4gZXllIG9uIHRob3NlIGFzIEkgZGlnIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MjUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDk6NTMuMTYzMzE1MTMzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg0MzQ0ODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X2RlcXVldWVfbXNnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3Qvdmhvc3QuYz0zNTA4PUVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2VucXVldWVfbXNnKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUwOS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzUxMDpzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKnZob3N0X2RlcXVldWVfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUxMS1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTI1LX1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzUyNjpFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kZXF1ZXVlX21zZyk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MjctXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg9MjczPXZvaWQgdmhvc3RfZW5xdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LFxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5oLTI3NS1cXHRcXHQgICAgICAgc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg6Mjc2OnN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqdmhvc3RfZGVxdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC0yNzctXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowOTo1NC41NDc2NjU0MjdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4ODYyOTQ3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYHZob3N0X2RlcXVldWVfbXNnYCdzIFVzYWdlKipcblxuUmlnaHQsIGB2aG9zdF9kZXF1ZXVlX21zZ2AgaXMgZXhwb3NlZC4gT2theSwgdGhhdCdzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGNoZWNrIHRoZSBjcm9zcy1yZWZlcmVuY2VzLiBJJ2xsIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBjYWxsIHNpdGVzLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBJIG5lZWQgdG8gZmluZCB0aGUgbW9kdWxlcyAqY2FsbGluZyogdGhpcyBmdW5jdGlvbi4gS25vd2luZyB0aGF0IHdpbGwgZ2l2ZSBtZSBhIHZlcnkgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSBhbmQgZGVwZW5kZW5jaWVzLiBJcyBpdCBvbmx5IHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gdGhlIHZob3N0IHN1YnN5c3RlbSwgb3IgZG9lcyBpdCBoYXZlIHdpZGVyIGltcGxpY2F0aW9ucz8gQSBxdWljayBzZWFyY2ggb2YgdGhlIGNvZGViYXNlIHNob3VsZCByZXZlYWwgdGhlIGltbWVkaWF0ZSBjYWxsZXJzLiBUaGF0J2xsIHByb3ZpZGUgdGhlIGdyb3VuZHdvcmsgZm9yIGRldGVybWluaW5nIHRoZSBhcmNoaXRlY3R1cmUncyBkZXNpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTA1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDk6NTguMjM2Mjk2OTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzQzNDg5MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfZGVxdWV1ZV9tc2dcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92aG9zdC5jPTM1MDg9RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZW5xdWV1ZV9tc2cpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTA5LVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozNTEwOnN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqdmhvc3RfZGVxdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTExLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MjUtfVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozNTI2OkVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2RlcXVldWVfbXNnKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUyNy1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaD0yNzM9dm9pZCB2aG9zdF9lbnF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjc1LVxcdFxcdCAgICAgICBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaDoyNzY6c3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9kZXF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXFxuZHJpdmVycy92aG9zdC92aG9zdC5oLTI3Ny1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA5OjU5LjY3MDY1MDU4MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjQ1Nzk2NzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIERpc2FwcGVhcmFuY2Ugb2YgYHZob3N0X2RlcXVldWVfbXNnYCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYHZob3N0X2RlcXVldWVfbXNnYCBzZWVtcyB0byBiZSBjYWxsZWQgKm9ubHkqIHdpdGhpbiBgdmhvc3QuY2AuIEkgZGlkIGEgcXVpY2sgYGdyZXBgLCBhbmQgaXQgZGlkbid0IHR1cm4gdXAgYW55IG90aGVyIG9jY3VycmVuY2VzIGluIHRoZSBjb2RlYmFzZSBiZXNpZGVzIGB2aG9zdC5jYCwgd2hpY2ggaXMgb2RkLlxuXG5Ib2xkIG9uLi4uIEkgcmVtZW1iZXIgc2VlaW5nIHNvbWV0aGluZyBhYm91dCB0aGlzIGluIHRoZSBwYXRjaCBub3Rlcy4gQWgsIGhlcmUgaXQgaXM6IHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBgdmhvc3RfZGVxdWV1ZV9tc2dgIGJlaW5nIGNhbGxlZCBpbiBgdmhvc3RfY2hyX3JlYWRfaXRlcmAuIEJ1dCwgdGhhdCBjYWxsIGhhcyBiZWVuICpyZW1vdmVkKiBpbiB0aGUgcGF0Y2ggYW5kIHJlcGxhY2VkIHdpdGggc29tZSBjb2RlIHVzaW5nIGBzcGluX2xvY2tgIGFuZCBjaGVja2luZyB0aGUgYHJlYWRfbGlzdGAuXG5cblNvLCBpdCdzIHByZXR0eSBjbGVhcjogYHZob3N0X2RlcXVldWVfbXNnYCAqaXNuJ3QqIHVzZWQgaW4gYHZob3N0X2Nocl9yZWFkX2l0ZXJgIGFueW1vcmUuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIG5vdyBpcy4uLiBpcyBpdCB1c2VkICphbnl3aGVyZSBlbHNlKj8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgbm90IGJlaW5nIGNhbGxlZCBieSBhbnl0aGluZyBlbHNlLiBUaW1lIHRvIGRvIGFub3RoZXIgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDIyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjEwOjA1LjMxNjQ0OTg5OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyOTE3MjIyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF9kZXF1ZXVlX21zZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmM9MzUwOD1FWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9lbnF1ZXVlX21zZyk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MDktXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjM1MTA6c3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9kZXF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MTEtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUyNS19XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjM1MjY6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGVxdWV1ZV9tc2cpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTI3LVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5oPTI3Mz12b2lkIHZob3N0X2VucXVldWVfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC0yNzUtXFx0XFx0ICAgICAgIHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5oOjI3NjpzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKnZob3N0X2RlcXVldWVfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjc3LVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MTA6MDYuNzQ1NjI2NDQ5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMTEwNTA1NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFZob3N0IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgdGhyb3VnaCB0aGlzIHBhdGNoIGFuZCBoZXJlJ3MgbXkgdGFrZTogdGhlIGZ1bmN0aW9uIGB2aG9zdF9kZXF1ZXVlX21zZ2AgYXBwZWFycyB0byBiZSB1bnVzZWQsIHdoaWNoIGlzIG9kZC4gSSBkaWQgYSBnbG9iYWwgZ3JlcCwgc28gSSdtIHByZXR0eSBjb25maWRlbnQgaXQncyBub3QgYmVpbmcgY2FsbGVkIGFueXdoZXJlIGluIHRoZSBrZXJuZWwgdHJlZSwgdW5sZXNzIGl0J3MgaW4gc29tZSBleHRyZW1lbHkgb2JzY3VyZSwgbm9uLXN0YW5kYXJkIHZob3N0IGRyaXZlci4gQnV0IGZyb20gd2hhdCBJIGNhbiBzZWUsIGl0J3MganVzdCBhbiBleHBvcnRlZCBmdW5jdGlvbiBzaXR0aW5nIHRoZXJlLCBkb2luZyBub3RoaW5nLlxuXG5Ob3csIGxldCdzIGdldCB0byB0aGUgbWVhdCBvZiB0aGlzIHBhdGNoLiBJIHNlZSBjaGFuZ2VzIGZvY3VzZWQgb24gYHZob3N0X2Nocl9yZWFkX2l0ZXJgLCBgdmhvc3RfaW5pdF9kZXZpY2VfaW90bGJgLCBhbmQgYHZob3N0X2NsZWFyX21zZ2AuIFRoZXNlIGFyZSBjcml0aWNhbCwgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29udGV4dC4gVGhlIHBhdGNoICppbnRyb2R1Y2VzIGEgbmV3IHN0YXRlIG1hY2hpbmUqIGRlc2lnbmVkIHRvIGhhbmRsZSB2aG9zdCBJT1RMQiBtaXNzZXMgYW5kLCBpbXBvcnRhbnRseSwgY29hbGVzY2VzIHRob3NlIG1lc3NhZ2VzIHRoYXQgZ2V0IHBhc3NlZCB1cCB0byB1c2Vyc3BhY2UuIEVzc2VudGlhbGx5LCBpdCdzIGFib3V0IG9wdGltaXppbmcgaG93IHRoZSBrZXJuZWwgZGVhbHMgd2l0aCBtZW1vcnkgYWRkcmVzcyB0cmFuc2xhdGlvbiBhbmQgcmVkdWNpbmcgdGhlIG51bWJlciBvZiBub3RpZmljYXRpb25zIHNlbnQgdG8gdGhlIHVzZXJzcGFjZSBwcm9jZXNzLCByaWdodD9cblxuU28sIGJlY2F1c2UgdGhpcyB0b3VjaGVzIGNvcmUgdmhvc3QgY29kZSwgYW5kIHRoYXQgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBgL2Rldi92aG9zdC1uZXRgIGFuZCBgL2Rldi92aG9zdC12c29ja2AgZGV2aWNlcywgdGhpcyBpcyBnb2luZyB0byBuZWVkIHNvbWUgc2VyaW91cyBmdXp6aW5nLiBUaGUgZ29hbCBvZiB0aGF0IGZ1enppbmcgaXMgdG8gcm9vdCBvdXQgYW55IHBvdGVudGlhbCBuYXN0aWVzIHRoZSBuZXcgc3RhdGUgbWFjaGluZSBtaWdodCBpbnRyb2R1Y2UuIEknbSB0aGlua2luZyBkZWFkbG9ja3MgYXJlIGEgcG9zc2liaWxpdHksIGFzIHdpdGggYW55IHN0YXRlIG1hY2hpbmUgY2hhbmdlLCBhbmQgb2YgY291cnNlLCBtZW1vcnkgbGVha3MgYW5kIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcyBhcmUgYWx3YXlzIG9uIHRoZSB0YWJsZSB3aGVuIHlvdeKAmXJlIGRlYWxpbmcgd2l0aCBhc3luY2hyb25vdXMgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlcnNwYWNlLlxuXG5BbHJpZ2h0LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuIEkgdGhpbmsgSSd2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB0aGlzIGFuZCBhbSByZWFkeSB0byBkaXZlIGludG8gdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNjUsIk91dHB1dFRva2VucyI6MjE1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjEwOjE5Ljg1NjEzNDExOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NjAzMjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9ORVRcIixcbiAgICBcIlZIT1NUX1ZTT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfY2hyX3JlYWRfaXRlclwiLFxuICAgIFwidmhvc3RfaW5pdF9kZXZpY2VfaW90bGJcIixcbiAgICBcInZob3N0X2NsZWFyX21zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3RhdGUgbWFjaGluZSBmb3IgaGFuZGxpbmcgdmhvc3QgSU9UTEIgbWlzc2VzLCBjb2FsZXNjaW5nIGR1cGxpY2F0ZSBtaXNzIG1lc3NhZ2VzIHRvIHVzZXJzcGFjZS4gVGhpcyBpbnZvbHZlcyBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSB2aG9zdCBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNoYXJhY3RlciBkZXZpY2UgcmVhZCBoYW5kbGVyICh2aG9zdF9jaHJfcmVhZF9pdGVyKSwgZGV2aWNlIGluaXRpYWxpemF0aW9uICh2aG9zdF9pbml0X2RldmljZV9pb3RsYiksIGFuZCBtZXNzYWdlIGNsZWFyaW5nICh2aG9zdF9jbGVhcl9tc2cpLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB2aG9zdCBkZXZpY2Ugbm9kZXMgKGUuZy4sIC9kZXYvdmhvc3QtbmV0LCAvZGV2L3Zob3N0LXZzb2NrKSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBzdGF0ZSBtYWNoaW5lIGRvZXNuJ3QgaW50cm9kdWNlIGRlYWRsb2NrcywgbWVtb3J5IGxlYWtzLCBvciB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXRpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfTkVUXCIsXG4gICAgXCJWSE9TVF9WU09DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X2Nocl9yZWFkX2l0ZXJcIixcbiAgICBcInZob3N0X2luaXRfZGV2aWNlX2lvdGxiXCIsXG4gICAgXCJ2aG9zdF9jbGVhcl9tc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN0YXRlIG1hY2hpbmUgZm9yIGhhbmRsaW5nIHZob3N0IElPVExCIG1pc3NlcywgY29hbGVzY2luZyBkdXBsaWNhdGUgbWlzcyBtZXNzYWdlcyB0byB1c2Vyc3BhY2UuIFRoaXMgaW52b2x2ZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgdmhvc3QgY29kZSwgc3BlY2lmaWNhbGx5IGluIHRoZSBjaGFyYWN0ZXIgZGV2aWNlIHJlYWQgaGFuZGxlciAodmhvc3RfY2hyX3JlYWRfaXRlciksIGRldmljZSBpbml0aWFsaXphdGlvbiAodmhvc3RfaW5pdF9kZXZpY2VfaW90bGIpLCBhbmQgbWVzc2FnZSBjbGVhcmluZyAodmhvc3RfY2xlYXJfbXNnKS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdmhvc3QgZGV2aWNlIG5vZGVzIChlLmcuLCAvZGV2L3Zob3N0LW5ldCwgL2Rldi92aG9zdC12c29jaykgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgc3RhdGUgbWFjaGluZSBkb2Vzbid0IGludHJvZHVjZSBkZWFkbG9ja3MsIG1lbW9yeSBsZWFrcywgb3IgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNToxMDoxOS45MjQ3NDM0MjRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MzkyNjQ1ODAwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjEwOjE5LjkyNTE3MzAzNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NzM5MjYwMjIwODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NhbCBgc25hcHNob3RgIHVuaW9uIGluIGB2aG9zdF9jaHJfcmVhZF9pdGVyYCB3aGljaCBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSB2aWEgYGNvcHlfdG9faXRlcl9mdWxsYC4gSG93ZXZlciwgdGhpcyBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIGJlY2F1c2U6XFxuMS4gVGhlIGBzbmFwc2hvdGAgaXMgcG9wdWxhdGVkIHVzaW5nIGBtZW1jcHlgIGZyb20gYW4gZXhpc3RpbmcgbWVzc2FnZSBub2RlIChgZmlyc3QtXFx1MDAzZW1zZ192MmAgb3IgYGZpcnN0LVxcdTAwM2Vtc2dgKS5cXG4yLiBUaGUgc291cmNlIG1lc3NhZ2Ugbm9kZSBpcyBhbGxvY2F0ZWQgaW4gYHZob3N0X25ld19tc2dgIHVzaW5nIGBremFsbG9jYCAodmlhIGBremFsbG9jX29iamApLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIGVudGlyZSBzdHJ1Y3R1cmUsIGluY2x1ZGluZyBhbnkgY29tcGlsZXItaW5zZXJ0ZWQgcGFkZGluZywgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC5cXG4zLiBXaGVuIGEgbWVzc2FnZSBpcyByZXVzZWQgYW5kIGl0cyB0eXBlIGNoYW5nZXMsIGB2aG9zdF9zZXRfaW90bGJfbWlzc2AgZXhwbGljaXRseSBjYWxscyBgbWVtc2V0YCB0byB6ZXJvIG91dCB0aGUgbWVzc2FnZSBmaWVsZHMsIGVuc3VyaW5nIG5vIHN0YWxlIGRhdGEgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nIHJlbWFpbnMuXFxuNC4gVGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBleGFjdGx5IG1hdGNoZXMgdGhlIHNpemUgb2YgdGhlIGZ1bGx5IGluaXRpYWxpemVkIG1lc3NhZ2Ugc3RydWN0dXJlLlxcblxcblRoZSByZW1haW5kZXIgb2YgdGhlIHBhdGNoIGludm9sdmVzIGxpc3QgbWFuaXB1bGF0aW9ucywgc3RhdGUgdHJhY2tpbmcgKGBpb3RsYl9taXNzX3N0YXRlYCksIGFuZCBjb2FsZXNjaW5nIGxvZ2ljIHRvIHByZXZlbnQgSU9UTEIgbWlzcyBmbG9vZHMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgbGlzdCBjb3JydXB0aW9uLCBvciBkZWFkbG9ja3MpIGFyZSBwZXJmZWN0bHkgc3VpdGVkIGZvciBzdGFuZGFyZCBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGFiYjcxOTlkNTQ5MTBhNjgxOTUyZWY4ZmQ4NThkY2RkNzc3ZjU5M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE1OjA4OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5jIGIvZHJpdmVycy92aG9zdC92aG9zdC5jXG5pbmRleCA0YzUyNWIzZTE2ZWFkLi5lYWI5MDRiNGI0ODRjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcbkBAIC0zNCw2ICszNCwxMyBAQFxuIFxuICNpbmNsdWRlIFwidmhvc3QuaFwiXG4gXG4rZW51bSB2aG9zdF9pb3RsYl9taXNzX3N0YXRlIHtcbitcdFZIT1NUX0lPVExCX01JU1NfTk9ORSxcbitcdFZIT1NUX0lPVExCX01JU1NfUkVBRCxcbitcdFZIT1NUX0lPVExCX01JU1NfUkVBRElORyxcbitcdFZIT1NUX0lPVExCX01JU1NfUEVORElORyxcbit9O1xuK1xuIHN0YXRpYyB1c2hvcnQgbWF4X21lbV9yZWdpb25zID0gNjQ7XG4gbW9kdWxlX3BhcmFtKG1heF9tZW1fcmVnaW9ucywgdXNob3J0LCAwNDQ0KTtcbiBNT0RVTEVfUEFSTV9ERVNDKG1heF9tZW1fcmVnaW9ucyxcbkBAIC02MTMsNiArNjIwLDkgQEAgdm9pZCB2aG9zdF9kZXZfaW5pdChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG4gXHRcdHZxLVx1MDAzZWhlYWRzID0gTlVMTDtcbiBcdFx0dnEtXHUwMDNlbmhlYWRzID0gTlVMTDtcbiBcdFx0dnEtXHUwMDNlZGV2ID0gZGV2O1xuK1x0XHR2cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlID0gVkhPU1RfSU9UTEJfTUlTU19OT05FO1xuK1x0XHR2cS1cdTAwM2Vpb3RsYl9taXNzX3NlcSA9IDA7XG4rXHRcdHZxLVx1MDAzZWlvdGxiX21pc3Nfbm9kZSA9IE5VTEw7XG4gXHRcdG11dGV4X2luaXQoXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuIFx0XHR2aG9zdF92cV9yZXNldChkZXYsIHZxKTtcbiBcdFx0aWYgKHZxLVx1MDAzZWhhbmRsZV9raWNrKVxuQEAgLTExNzcsNiArMTE4NywyMCBAQCB2b2lkIHZob3N0X2Rldl9zdG9wKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGV2X3N0b3ApO1xuIFxuK3N0YXRpYyB2b2lkIHZob3N0X3VudHJhY2tfaW90bGJfbWlzcyhzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUpXG4re1xuK1x0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBub2RlLVx1MDAzZXZxO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2cS1cdTAwM2VkZXYtXHUwMDNlaW90bGJfbG9jayk7XG4rXG4rXHRpZiAodnEtXHUwMDNlaW90bGJfbWlzc19ub2RlICE9IG5vZGUpXG4rXHRcdHJldHVybjtcbitcbitcdHZxLVx1MDAzZWlvdGxiX21pc3Nfbm9kZSA9IE5VTEw7XG4rXHR2cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlID0gVkhPU1RfSU9UTEJfTUlTU19OT05FO1xuK1x0dnEtXHUwMDNlaW90bGJfbWlzc19zZXErKztcbit9XG4rXG4gdm9pZCB2aG9zdF9jbGVhcl9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2KVxuIHtcbiBcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSwgKm47XG5AQCAtMTE4NCwxMiArMTIwOCwxNCBAQCB2b2lkIHZob3N0X2NsZWFyX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpXG4gXHRzcGluX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG4sIFx1MDAyNmRldi1cdTAwM2VyZWFkX2xpc3QsIG5vZGUpIHtcbi1cdFx0bGlzdF9kZWwoXHUwMDI2bm9kZS1cdTAwM2Vub2RlKTtcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZub2RlLVx1MDAzZW5vZGUpO1xuK1x0XHR2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Mobm9kZSk7XG4gXHRcdGtmcmVlKG5vZGUpO1xuIFx0fVxuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG4sIFx1MDAyNmRldi1cdTAwM2VwZW5kaW5nX2xpc3QsIG5vZGUpIHtcbi1cdFx0bGlzdF9kZWwoXHUwMDI2bm9kZS1cdTAwM2Vub2RlKTtcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZub2RlLVx1MDAzZW5vZGUpO1xuK1x0XHR2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Mobm9kZSk7XG4gXHRcdGtmcmVlKG5vZGUpO1xuIFx0fVxuIFxuQEAgLTE1ODUsMjAgKzE2MTEsNzMgQEAgc3RhdGljIGlubGluZSBpbnQgdmhvc3RfZ2V0X2Rlc2Moc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4gXHRyZXR1cm4gdmhvc3RfY29weV9mcm9tX3VzZXIodnEsIGRlc2MsIHZxLVx1MDAzZWRlc2MgKyBpZHgsIHNpemVvZigqZGVzYykpO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IHZob3N0X2lvdGxiX21zZyAqXG4rdmhvc3RfZ2V0X2lvdGxiX21zZyhzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUpXG4re1xuK1x0aWYgKG5vZGUtXHUwMDNlbXNnLnR5cGUgPT0gVkhPU1RfSU9UTEJfTVNHX1YyKVxuK1x0XHRyZXR1cm4gXHUwMDI2bm9kZS1cdTAwM2Vtc2dfdjIuaW90bGI7XG4rXG4rXHRyZXR1cm4gXHUwMDI2bm9kZS1cdTAwM2Vtc2cuaW90bGI7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHZob3N0X3NldF9pb3RsYl9taXNzKHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSwgYm9vbCB2MixcbitcdFx0XHRcdCB1NjQgaW92YSwgaW50IGFjY2Vzcylcbit7XG4rXHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2c7XG4rXHR1MzIgdHlwZSA9IHYyID8gVkhPU1RfSU9UTEJfTVNHX1YyIDogVkhPU1RfSU9UTEJfTVNHO1xuK1xuK1x0aWYgKG5vZGUtXHUwMDNlbXNnLnR5cGUgIT0gdHlwZSlcbitcdFx0bWVtc2V0KFx1MDAyNm5vZGUtXHUwMDNlbXNnX3YyLCAwLCBzaXplb2Yobm9kZS1cdTAwM2Vtc2dfdjIpKTtcbitcdG5vZGUtXHUwMDNlbXNnLnR5cGUgPSB0eXBlO1xuK1x0bXNnID0gdmhvc3RfZ2V0X2lvdGxiX21zZyhub2RlKTtcbitcbitcdG1zZy1cdTAwM2V0eXBlID0gVkhPU1RfSU9UTEJfTUlTUztcbitcdG1zZy1cdTAwM2Vpb3ZhID0gaW92YTtcbitcdG1zZy1cdTAwM2VwZXJtID0gYWNjZXNzO1xuK31cbitcbitzdGF0aWMgYm9vbCB2aG9zdF9pb3RsYl91cGRhdGVfY292ZXJzKHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKnVwZGF0ZSxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1pc3MpXG4re1xuK1x0cmV0dXJuIG1pc3MtXHUwMDNldHlwZSA9PSBWSE9TVF9JT1RMQl9NSVNTIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHVwZGF0ZS1cdTAwM2Vpb3ZhIFx1MDAzYz0gbWlzcy1cdTAwM2Vpb3ZhIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIG1pc3MtXHUwMDNlaW92YSAtIHVwZGF0ZS1cdTAwM2Vpb3ZhIFx1MDAzYyB1cGRhdGUtXHUwMDNlc2l6ZSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICAodXBkYXRlLVx1MDAzZXBlcm0gXHUwMDI2IG1pc3MtXHUwMDNlcGVybSkgPT0gbWlzcy1cdTAwM2VwZXJtO1xuK31cbitcbiBzdGF0aWMgdm9pZCB2aG9zdF9pb3RsYl9ub3RpZnlfdnEoc3RydWN0IHZob3N0X2RldiAqZCxcbiBcdFx0XHRcdCAgc3RydWN0IHZob3N0X2lvdGxiX21zZyAqbXNnKVxuIHtcbiBcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSwgKm47XG4rXHRpbnQgaTtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZkLVx1MDAzZWlvdGxiX2xvY2spO1xuIFxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZC1cdTAwM2VudnFzOyArK2kpIHtcbitcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBkLVx1MDAzZXZxc1tpXTtcbitcbitcdFx0bm9kZSA9IHZxLVx1MDAzZWlvdGxiX21pc3Nfbm9kZTtcbitcdFx0aWYgKCFub2RlIHx8XG4rXHRcdCAgICAhdmhvc3RfaW90bGJfdXBkYXRlX2NvdmVycyhtc2csXG4rXHRcdFx0XHRcdCAgICAgICB2aG9zdF9nZXRfaW90bGJfbXNnKG5vZGUpKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZub2RlLVx1MDAzZW5vZGUpO1xuK1x0XHR2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Mobm9kZSk7XG4rXHRcdHZob3N0X3BvbGxfcXVldWUoXHUwMDI2dnEtXHUwMDNlcG9sbCk7XG4rXHRcdGtmcmVlKG5vZGUpO1xuK1x0fVxuK1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG4sIFx1MDAyNmQtXHUwMDNlcGVuZGluZ19saXN0LCBub2RlKSB7XG4gXHRcdHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKnZxX21zZyA9IFx1MDAyNm5vZGUtXHUwMDNlbXNnLmlvdGxiO1xuK1xuK1x0XHRpZiAobm9kZS1cdTAwM2V2cS1cdTAwM2Vpb3RsYl9taXNzX25vZGUgPT0gbm9kZSlcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKG1zZy1cdTAwM2Vpb3ZhIFx1MDAzYz0gdnFfbXNnLVx1MDAzZWlvdmEgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBtc2ctXHUwMDNlaW92YSArIG1zZy1cdTAwM2VzaXplIC0gMSBcdTAwM2U9IHZxX21zZy1cdTAwM2Vpb3ZhIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgdnFfbXNnLVx1MDAzZXR5cGUgPT0gVkhPU1RfSU9UTEJfTUlTUykge1xuIFx0XHRcdHZob3N0X3BvbGxfcXVldWUoXHUwMDI2bm9kZS1cdTAwM2V2cS1cdTAwM2Vwb2xsKTtcbi1cdFx0XHRsaXN0X2RlbChcdTAwMjZub2RlLVx1MDAzZW5vZGUpO1xuK1x0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2bm9kZS1cdTAwM2Vub2RlKTtcbiBcdFx0XHRrZnJlZShub2RlKTtcbiBcdFx0fVxuIFx0fVxuQEAgLTE3NTUsOSArMTgzNCwxOCBAQCBzc2l6ZV90IHZob3N0X2Nocl9yZWFkX2l0ZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3QgaW92X2l0ZXIgKnRvLFxuIFx0XHRcdCAgICBpbnQgbm9ibG9jaylcbiB7XG4gXHRERUZJTkVfV0FJVCh3YWl0KTtcbi1cdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZTtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHZob3N0X21zZyBtc2c7XG4rXHRcdHN0cnVjdCB2aG9zdF9tc2dfdjIgbXNnX3YyO1xuK1x0fSBzbmFwc2hvdDtcbitcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbWlzc190b2tlbiA9IE5VTEw7XG4rXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICptaXNzX3ZxID0gTlVMTDtcbitcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSA9IE5VTEw7XG4rXHR1NjQgbWlzc19zZXEgPSAwO1xuIFx0c3NpemVfdCByZXQgPSAwO1xuIFx0dW5zaWduZWQgc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgdmhvc3RfbXNnKTtcbitcdGJvb2wgc2hvcnRfYnVmZmVyID0gZmFsc2U7XG4rXHRib29sIHdha2UgPSBmYWxzZTtcbiBcbiBcdGlmIChpb3ZfaXRlcl9jb3VudCh0bykgXHUwMDNjIHNpemUpXG4gXHRcdHJldHVybiAwO1xuQEAgLTE3NjcsOCArMTg1NSwzNiBAQCBzc2l6ZV90IHZob3N0X2Nocl9yZWFkX2l0ZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3QgaW92X2l0ZXIgKnRvLFxuIFx0XHRcdHByZXBhcmVfdG9fd2FpdChcdTAwMjZkZXYtXHUwMDNld2FpdCwgXHUwMDI2d2FpdCxcbiBcdFx0XHRcdFx0VEFTS19JTlRFUlJVUFRJQkxFKTtcbiBcbi1cdFx0bm9kZSA9IHZob3N0X2RlcXVldWVfbXNnKGRldiwgXHUwMDI2ZGV2LVx1MDAzZXJlYWRfbGlzdCk7XG4tXHRcdGlmIChub2RlKVxuK1x0XHRzcGluX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuK1x0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXJlYWRfbGlzdCkpIHtcbitcdFx0XHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKmZpcnN0O1xuK1xuK1x0XHRcdGZpcnN0ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZkZXYtXHUwMDNlcmVhZF9saXN0LFxuK1x0XHRcdFx0XHRcdCBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUsIG5vZGUpO1xuK1x0XHRcdGlmIChmaXJzdC1cdTAwM2V2cS1cdTAwM2Vpb3RsYl9taXNzX25vZGUgPT0gZmlyc3QpIHtcbitcdFx0XHRcdHNpemUgPSBmaXJzdC1cdTAwM2Vtc2cudHlwZSA9PSBWSE9TVF9JT1RMQl9NU0dfVjIgP1xuK1x0XHRcdFx0ICAgICAgIHNpemVvZihmaXJzdC1cdTAwM2Vtc2dfdjIpIDogc2l6ZW9mKGZpcnN0LVx1MDAzZW1zZyk7XG4rXHRcdFx0XHRpZiAoaW92X2l0ZXJfY291bnQodG8pIFx1MDAzYyBzaXplKSB7XG4rXHRcdFx0XHRcdHNob3J0X2J1ZmZlciA9IHRydWU7XG4rXHRcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0XHRtZW1jcHkoXHUwMDI2c25hcHNob3QubXNnX3YyLCBcdTAwMjZmaXJzdC1cdTAwM2Vtc2dfdjIsXG4rXHRcdFx0XHRcdCAgICAgICBzaXplKTtcbitcdFx0XHRcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2Zmlyc3QtXHUwMDNlbm9kZSxcbitcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2ZGV2LVx1MDAzZXBlbmRpbmdfbGlzdCk7XG4rXHRcdFx0XHRcdGZpcnN0LVx1MDAzZXZxLVx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgPVxuK1x0XHRcdFx0XHRcdFZIT1NUX0lPVExCX01JU1NfUkVBRElORztcbitcdFx0XHRcdFx0bWlzc192cSA9IGZpcnN0LVx1MDAzZXZxO1xuK1x0XHRcdFx0XHRtaXNzX3Rva2VuID0gZmlyc3Q7XG4rXHRcdFx0XHRcdG1pc3Nfc2VxID0gZmlyc3QtXHUwMDNldnEtXHUwMDNlaW90bGJfbWlzc19zZXE7XG4rXHRcdFx0XHR9XG4rXHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2Zmlyc3QtXHUwMDNlbm9kZSk7XG4rXHRcdFx0XHRub2RlID0gZmlyc3Q7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmRldi1cdTAwM2Vpb3RsYl9sb2NrKTtcbitcbitcdFx0aWYgKG5vZGUgfHwgbWlzc192cSB8fCBzaG9ydF9idWZmZXIpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGlmIChub2Jsb2NrKSB7XG4gXHRcdFx0cmV0ID0gLUVBR0FJTjtcbkBAIC0xNzg5LDYgKzE5MDUsMzQgQEAgc3NpemVfdCB2aG9zdF9jaHJfcmVhZF9pdGVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IGlvdl9pdGVyICp0byxcbiBcdGlmICghbm9ibG9jaylcbiBcdFx0ZmluaXNoX3dhaXQoXHUwMDI2ZGV2LVx1MDAzZXdhaXQsIFx1MDAyNndhaXQpO1xuIFxuK1x0aWYgKHNob3J0X2J1ZmZlcilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAobWlzc192cSkge1xuK1x0XHRib29sIGNvcGllZCA9IGNvcHlfdG9faXRlcl9mdWxsKFx1MDAyNnNuYXBzaG90Lm1zZ192Miwgc2l6ZSwgdG8pO1xuK1xuK1x0XHRzcGluX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuK1x0XHRub2RlID0gbWlzc192cS1cdTAwM2Vpb3RsYl9taXNzX25vZGU7XG4rXHRcdGlmIChub2RlID09IG1pc3NfdG9rZW4gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBtaXNzX3ZxLVx1MDAzZWlvdGxiX21pc3Nfc2VxID09IG1pc3Nfc2VxIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgbWlzc192cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlID09IFZIT1NUX0lPVExCX01JU1NfUkVBRElORykge1xuK1x0XHRcdGlmIChjb3BpZWQpIHtcbitcdFx0XHRcdG1pc3NfdnEtXHUwMDNlaW90bGJfbWlzc19zdGF0ZSA9XG4rXHRcdFx0XHRcdFZIT1NUX0lPVExCX01JU1NfUEVORElORztcbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2bm9kZS1cdTAwM2Vub2RlLCBcdTAwMjZkZXYtXHUwMDNlcmVhZF9saXN0KTtcbitcdFx0XHRcdG1pc3NfdnEtXHUwMDNlaW90bGJfbWlzc19zdGF0ZSA9IFZIT1NUX0lPVExCX01JU1NfUkVBRDtcbitcdFx0XHRcdHdha2UgPSB0cnVlO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0XHRzcGluX3VubG9jayhcdTAwMjZkZXYtXHUwMDNlaW90bGJfbG9jayk7XG4rXG4rXHRcdGlmICh3YWtlKVxuK1x0XHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKFx1MDAyNmRldi1cdTAwM2V3YWl0LFxuK1x0XHRcdFx0XHRcdCAgIEVQT0xMSU4gfCBFUE9MTFJETk9STSk7XG4rXHRcdHJldHVybiBjb3BpZWQgPyBzaXplIDogLUVGQVVMVDtcbitcdH1cbitcbiBcdGlmIChub2RlKSB7XG4gXHRcdHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1zZztcbiBcdFx0dm9pZCAqc3RhcnQgPSBcdTAwMjZub2RlLVx1MDAzZW1zZztcbkBAIC0xODE5LDI5ICsxOTYzLDY5IEBAIHNzaXplX3Qgdmhvc3RfY2hyX3JlYWRfaXRlcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCBpb3ZfaXRlciAqdG8sXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2Nocl9yZWFkX2l0ZXIpO1xuIFxuK3N0YXRpYyBib29sIHZob3N0X2lvdGxiX21pc3NfY29hbGVzY2Uoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIGJvb2wgdjIsXG4rXHRcdFx0XHQgICAgICB1NjQgaW92YSwgaW50IGFjY2VzcywgYm9vbCAqd2FrZSlcbit7XG4rXHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUgPSB2cS1cdTAwM2Vpb3RsYl9taXNzX25vZGU7XG4rXHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2c7XG4rXHR1MzIgdHlwZSA9IHYyID8gVkhPU1RfSU9UTEJfTVNHX1YyIDogVkhPU1RfSU9UTEJfTVNHO1xuK1x0Ym9vbCBzYW1lO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2cS1cdTAwM2VkZXYtXHUwMDNlaW90bGJfbG9jayk7XG4rXG4rXHRpZiAoIW5vZGUpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG1zZyA9IHZob3N0X2dldF9pb3RsYl9tc2cobm9kZSk7XG4rXHRzYW1lID0gbm9kZS1cdTAwM2Vtc2cudHlwZSA9PSB0eXBlIFx1MDAyNlx1MDAyNiBtc2ctXHUwMDNldHlwZSA9PSBWSE9TVF9JT1RMQl9NSVNTIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIG1zZy1cdTAwM2Vpb3ZhID09IGlvdmEgXHUwMDI2XHUwMDI2IG1zZy1cdTAwM2VwZXJtID09IGFjY2VzcztcbitcdGlmIChzYW1lIFx1MDAyNlx1MDAyNiB2cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlICE9IFZIT1NUX0lPVExCX01JU1NfUkVBRElORylcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRpZiAoIXNhbWUpXG4rXHRcdHZob3N0X3NldF9pb3RsYl9taXNzKG5vZGUsIHYyLCBpb3ZhLCBhY2Nlc3MpO1xuK1x0dnEtXHUwMDNlaW90bGJfbWlzc19zZXErKztcbitcdGlmICh2cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlICE9IFZIT1NUX0lPVExCX01JU1NfUkVBRCkge1xuK1x0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZub2RlLVx1MDAzZW5vZGUsIFx1MDAyNnZxLVx1MDAzZWRldi1cdTAwM2VyZWFkX2xpc3QpO1xuK1x0XHR2cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlID0gVkhPU1RfSU9UTEJfTUlTU19SRUFEO1xuK1x0XHQqd2FrZSA9IHRydWU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gc3RhdGljIGludCB2aG9zdF9pb3RsYl9taXNzKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCB1NjQgaW92YSwgaW50IGFjY2VzcylcbiB7XG4gXHRzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYgPSB2cS1cdTAwM2VkZXY7XG4gXHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGU7XG4tXHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2c7XG4gXHRib29sIHYyID0gdmhvc3RfYmFja2VuZF9oYXNfZmVhdHVyZSh2cSwgVkhPU1RfQkFDS0VORF9GX0lPVExCX01TR19WMik7XG4rXHRib29sIHdha2UgPSBmYWxzZTtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuK1xuK1x0c3Bpbl9sb2NrKFx1MDAyNmRldi1cdTAwM2Vpb3RsYl9sb2NrKTtcbitcdGlmICh2aG9zdF9pb3RsYl9taXNzX2NvYWxlc2NlKHZxLCB2MiwgaW92YSwgYWNjZXNzLCBcdTAwMjZ3YWtlKSkge1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZkZXYtXHUwMDNlaW90bGJfbG9jayk7XG4rXHRcdGlmICh3YWtlKVxuK1x0XHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKFx1MDAyNmRldi1cdTAwM2V3YWl0LFxuK1x0XHRcdFx0XHRcdCAgIEVQT0xMSU4gfCBFUE9MTFJETk9STSk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1x0c3Bpbl91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuIFxuIFx0bm9kZSA9IHZob3N0X25ld19tc2codnEsIHYyID8gVkhPU1RfSU9UTEJfTVNHX1YyIDogVkhPU1RfSU9UTEJfTVNHKTtcbiBcdGlmICghbm9kZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR2aG9zdF9zZXRfaW90bGJfbWlzcyhub2RlLCB2MiwgaW92YSwgYWNjZXNzKTtcbiBcbi1cdGlmICh2Mikge1xuLVx0XHRub2RlLVx1MDAzZW1zZ192Mi50eXBlID0gVkhPU1RfSU9UTEJfTVNHX1YyO1xuLVx0XHRtc2cgPSBcdTAwMjZub2RlLVx1MDAzZW1zZ192Mi5pb3RsYjtcbi1cdH0gZWxzZSB7XG4tXHRcdG1zZyA9IFx1MDAyNm5vZGUtXHUwMDNlbXNnLmlvdGxiO1xuLVx0fVxuLVxuLVx0bXNnLVx1MDAzZXR5cGUgPSBWSE9TVF9JT1RMQl9NSVNTO1xuLVx0bXNnLVx1MDAzZWlvdmEgPSBpb3ZhO1xuLVx0bXNnLVx1MDAzZXBlcm0gPSBhY2Nlc3M7XG4rXHRzcGluX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuK1x0dnEtXHUwMDNlaW90bGJfbWlzc19ub2RlID0gbm9kZTtcbitcdHZxLVx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgPSBWSE9TVF9JT1RMQl9NSVNTX1JFQUQ7XG4rXHR2cS1cdTAwM2Vpb3RsYl9taXNzX3NlcSsrO1xuK1x0bGlzdF9hZGRfdGFpbChcdTAwMjZub2RlLVx1MDAzZW5vZGUsIFx1MDAyNmRldi1cdTAwM2VyZWFkX2xpc3QpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuIFxuLVx0dmhvc3RfZW5xdWV1ZV9tc2coZGV2LCBcdTAwMjZkZXYtXHUwMDNlcmVhZF9saXN0LCBub2RlKTtcbitcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKFx1MDAyNmRldi1cdTAwM2V3YWl0LCBFUE9MTElOIHwgRVBPTExSRE5PUk0pO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTIyNzAsMjcgKzI0NTQsNTkgQEAgbG9uZyB2aG9zdF92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfZGV2ICpkLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHZvaWQgX191c2VyICphcmdcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfdnJpbmdfaW9jdGwpO1xuIFxuK3N0YXRpYyBib29sIHZob3N0X3JldHJ5X2lvdGxiX21pc3NlcyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkKVxuK3tcbitcdGJvb2wgd2FrZSA9IGZhbHNlO1xuK1x0aW50IGk7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmQtXHUwMDNlaW90bGJfbG9jayk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkLVx1MDAzZW52cXM7ICsraSkge1xuK1x0XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGQtXHUwMDNldnFzW2ldO1xuK1x0XHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUgPSB2cS1cdTAwM2Vpb3RsYl9taXNzX25vZGU7XG4rXG4rXHRcdGlmICghbm9kZSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0dnEtXHUwMDNlaW90bGJfbWlzc19zZXErKztcbitcdFx0aWYgKHZxLVx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgIT0gVkhPU1RfSU9UTEJfTUlTU19SRUFEKVxuK1x0XHRcdGxpc3RfbW92ZV90YWlsKFx1MDAyNm5vZGUtXHUwMDNlbm9kZSwgXHUwMDI2ZC1cdTAwM2VyZWFkX2xpc3QpO1xuK1x0XHR2cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlID0gVkhPU1RfSU9UTEJfTUlTU19SRUFEO1xuK1x0XHR3YWtlID0gdHJ1ZTtcbitcdH1cbitcbitcdHJldHVybiB3YWtlO1xuK31cbitcbiBpbnQgdmhvc3RfaW5pdF9kZXZpY2VfaW90bGIoc3RydWN0IHZob3N0X2RldiAqZClcbiB7XG4gXHRzdHJ1Y3Qgdmhvc3RfaW90bGIgKm5pb3RsYiwgKm9pb3RsYjtcbitcdGJvb2wgd2FrZTtcbiBcdGludCBpO1xuIFxuIFx0bmlvdGxiID0gaW90bGJfYWxsb2MoKTtcbiBcdGlmICghbmlvdGxiKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbitcdHZob3N0X2Rldl9sb2NrX3ZxcyhkKTtcbiBcdG9pb3RsYiA9IGQtXHUwMDNlaW90bGI7XG4gXHRkLVx1MDAzZWlvdGxiID0gbmlvdGxiO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZC1cdTAwM2VudnFzOyArK2kpIHtcbiBcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBkLVx1MDAzZXZxc1tpXTtcbiBcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gXHRcdHZxLVx1MDAzZWlvdGxiID0gbmlvdGxiO1xuIFx0XHRfX3Zob3N0X3ZxX21ldGFfcmVzZXQodnEpO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuIFx0fVxuIFxuK1x0c3Bpbl9sb2NrKFx1MDAyNmQtXHUwMDNlaW90bGJfbG9jayk7XG4rXHR3YWtlID0gdmhvc3RfcmV0cnlfaW90bGJfbWlzc2VzKGQpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2ZC1cdTAwM2Vpb3RsYl9sb2NrKTtcbitcdHZob3N0X2Rldl91bmxvY2tfdnFzKGQpO1xuK1xuK1x0aWYgKHdha2UpXG4rXHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKFx1MDAyNmQtXHUwMDNld2FpdCxcbitcdFx0XHRcdFx0ICAgRVBPTExJTiB8IEVQT0xMUkROT1JNKTtcbiBcdHZob3N0X2lvdGxiX2ZyZWUob2lvdGxiKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTMzMDAsNyArMzUxNiw4IEBAIHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqdmhvc3RfZGVxdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LFxuIFx0aWYgKCFsaXN0X2VtcHR5KGhlYWQpKSB7XG4gXHRcdG5vZGUgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCB2aG9zdF9tc2dfbm9kZSxcbiBcdFx0XHRcdFx0bm9kZSk7XG4tXHRcdGxpc3RfZGVsKFx1MDAyNm5vZGUtXHUwMDNlbm9kZSk7XG4rXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2bm9kZS1cdTAwM2Vub2RlKTtcbitcdFx0dmhvc3RfdW50cmFja19pb3RsYl9taXNzKG5vZGUpO1xuIFx0fVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaCBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaFxuaW5kZXggMDE5MmFkZTZlNzQ5MS4uNTBmY2NjODVkNTk0MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaFxuKysrIGIvZHJpdmVycy92aG9zdC92aG9zdC5oXG5AQCAtMjksNiArMjksNyBAQCBzdHJ1Y3Qgdmhvc3Rfd29yayB7XG4gXG4gc3RydWN0IHZob3N0X3dvcmtlcjtcbiBzdHJ1Y3Qgdmhvc3RfZGV2O1xuK3N0cnVjdCB2aG9zdF9tc2dfbm9kZTtcbiBcbiBzdHJ1Y3Qgdmhvc3Rfd29ya2VyX29wcyB7XG4gXHRpbnQgKCpjcmVhdGUpKHN0cnVjdCB2aG9zdF93b3JrZXIgKndvcmtlciwgc3RydWN0IHZob3N0X2RldiAqZGV2LFxuQEAgLTE2Myw3ICsxNjQsMTIgQEAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSB7XG4gXHQvKiBSaW5nIGVuZGlhbm5lc3MgcmVxdWVzdGVkIGJ5IHVzZXJzcGFjZSBmb3IgY3Jvc3MtZW5kaWFuIHN1cHBvcnQuICovXG4gXHRib29sIHVzZXJfYmU7XG4gI2VuZGlmXG4rXHQvKiBQcm90ZWN0ZWQgYnkgZGV2LVx1MDAzZWlvdGxiX2xvY2suICovXG4rXHR1OCBpb3RsYl9taXNzX3N0YXRlO1xuIFx0dTMyIGJ1c3lsb29wX3RpbWVvdXQ7XG4rXHQvKiBQcm90ZWN0ZWQgYnkgZGV2LVx1MDAzZWlvdGxiX2xvY2suICovXG4rXHR1NjQgaW90bGJfbWlzc19zZXE7XG4rXHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKmlvdGxiX21pc3Nfbm9kZTtcbiB9O1xuIFxuIHN0cnVjdCB2aG9zdF9tc2dfbm9kZSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNToxMDoxOS45MjUxNzM5MzRaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEyODQxOTM5NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIElPVExCIE1pc3MgVHJhY2tpbmcgaW4gdmhvc3QqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBJT1RMQiBtaXNzIGhhbmRsaW5nIHdpdGhpbiB0aGUgdmhvc3QgaW5mcmFzdHJ1Y3R1cmUuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIGlzIGluIGBkcml2ZXJzL3Zob3N0L3Zob3N0LmNgIGFuZCBgZHJpdmVycy92aG9zdC92aG9zdC5oYCwgYW5kIHRoZSBnb2FsIGlzIHRvIHRyYWNrIElPVExCIG1pc3NlcyBhdCB0aGUgdmlydHF1ZXVlIGxldmVsLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhleSd2ZSBhZGRlZCBgaW90bGJfbWlzc19zdGF0ZWAsIGBpb3RsYl9taXNzX3NlcWAsIGFuZCBgaW90bGJfbWlzc19ub2RlYCB0byB0aGUgYHN0cnVjdCB2aG9zdF92aXJ0cXVldWVgLiBUaGF0IGdpdmVzIHVzIHBlci12aXJ0cXVldWUgc3RhdGUgZm9yIElPVExCIG1pc3MgbWFuYWdlbWVudCwgYW5kIHRoZSBzZXF1ZW5jZSBudW1iZXIgc3VnZ2VzdHMgc29tZSBzb3J0IG9mIG9yZGVyaW5nIG9yIHRyYWNraW5nLlxuXG5Ob3csIGxldCdzIHplcm8gaW4gb24gYHZob3N0X2Nocl9yZWFkX2l0ZXJgLiBUaGlzIGlzIHdoZXJlIHRoZSBkYXRhIGZyb20gdGhlIHZob3N0IGRldmljZSBpcyByZWFkIGludG8gdXNlciBzcGFjZS4gVGhlIGltcG9ydGFudCBzZWN0aW9uIHNlZW1zIHRvIGJlIHRoZSBhZGRlZCBjb2RlIHRoYXQgZGVhbHMgd2l0aCByZWFkaW5nIElPVExCIG1pc3MgbWVzc2FnZXMuIEl0IGxvb2tzIGxpa2UgaXQgdHJpZXMgdG8gYXRvbWljYWxseSBhY3F1aXJlIGEgbWVzc2FnZSAodXNpbmcgYHNwaW5fbG9ja2AgYW5kIHRoZSBgcmVhZF9saXN0YCkuXG5cblRoZSBsb2dpYyBsb29rcyBsaWtlIGl0IGNoZWNrcyBpZiB0aGUgZmlyc3QgbWVzc2FnZSBpbiBgZGV2LVx1MDAzZXJlYWRfbGlzdGAgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIElPVExCIG1pc3MgKGBmaXJzdC1cdTAwM2V2cS1cdTAwM2Vpb3RsYl9taXNzX25vZGUgPT0gZmlyc3RgKS4gSWYgc28sIGFuZCBpZiB0aGVyZSdzIGVub3VnaCBzcGFjZSBpbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLCBpdCBtb3ZlcyB0aGUgbWVzc2FnZSBmcm9tIGBkZXYtXHUwMDNlcmVhZF9saXN0YCB0byBgZGV2LVx1MDAzZXBlbmRpbmdfbGlzdGAsIHNldHMgdGhlIGBpb3RsYl9taXNzX3N0YXRlYCB0byBgVkhPU1RfSU9UTEJfTUlTU19SRUFESU5HYCBvbiB0aGUgdmlydHF1ZXVlLCBhbmQgc3RvcmVzIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1pc3MgKGxpa2UgdGhlIHZpcnRxdWV1ZSBwb2ludGVyLCB0aGUgbWVzc2FnZSB0b2tlbiwgYW5kIHRoZSBzZXF1ZW5jZSBudW1iZXIpLiBUaGVuLCBpdCBjb3BpZXMgdGhlIG1lc3NhZ2UgdG8gYSBsb2NhbCBgc25hcHNob3RgIHVuaW9uIGFuZCBleGl0cy4gSWYgdGhlcmUncyBub3QgZW5vdWdoIHNwYWNlIGluIHRoZSBidWZmZXIsIGl0IGp1c3QgcmV0dXJucy5cblxuVGhlIGtleSBvYnNlcnZhdGlvbiBpcyBob3cgdGhlIGRhdGEgaXMgaGFuZGxlZC4gYGZpcnN0LVx1MDAzZW1zZ192MmAgaXMgY29waWVkIHRvIGBzbmFwc2hvdC5tc2dfdjJgLCBhbmQgdGhlIGBzbmFwc2hvdGAgaXMgYSB1bmlvbiB0aGF0IGNvbnRhaW5zIGJvdGggYHZob3N0X21zZ2AgYW5kIGB2aG9zdF9tc2dfdjJgLiBUaGUgY29kZSBzdWJzZXF1ZW50bHkgdXNlcyBgY29weV90b19pdGVyX2Z1bGxgIHRvIGdldCB0aGUgZGF0YSB0byB1c2VyIHNwYWNlLlxuXG5Ob3csIEknbSBhIGJpdCBjb25jZXJuZWQuIFRoZSBwYXRjaCBjb3BpZXMgYGZpcnN0LVx1MDAzZW1zZ192MmAgd2l0aG91dCBhbnkgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGVudGlyZSBgZmlyc3QtXHUwMDNlbXNnX3YyYCBzdHJ1Y3QgYXQgdGhhdCBwb2ludCwgb3RoZXIgdGhhbiBjaGVja2luZyBmb3IgdGhlIHJlcXVpcmVkIGJ1ZmZlciBzaXplLiBMZXQncyBzZWUgaG93IGB2aG9zdF9zZXRfaW90bGJfbWlzc2AgaW5pdGlhbGl6ZXMgdGhpcyBtZXNzYWdlLiBPa2F5LCBpZiBgbm9kZS1cdTAwM2Vtc2cudHlwZSAhPSB0eXBlYCB0aGVuIGl0IHplcm9zIHRoZSBgbm9kZS1cdTAwM2Vtc2dfdjJgLiBCdXQgZG9lcyB0aGF0IGFsd2F5cyBoYXBwZW4/IGB2aG9zdF9zZXRfaW90bGJfbWlzc2AgZ2V0cyBjYWxsZWQgd2l0aGluIGB2aG9zdF9pb3RsYl9taXNzYCwgYnV0IHRoZSBjcnVjaWFsIGNoZWNrIGlzIGluIGB2aG9zdF9uZXdfbXNnYC4gSSBoYXZlIHRvIGNoZWNrIGB2aG9zdF9uZXdfbXNnYCB0byBzZWUgaWYgdGhlIGFsbG9jYXRlZCBgbm9kZWAgaXMgaW5pdGlhbGl6ZWQgdG8gemVybywgYmVmb3JlIGB2aG9zdF9zZXRfaW90bGJfbWlzc2AgZ2V0cyBjYWxsZWQgYW5kIHBvdGVudGlhbGx5IHplcm8ncyBvdXQgdGhlIGBtc2dfdjJgIHVuaW9uLiBJZiBgdmhvc3RfbmV3X21zZ2AgaXNuJ3QgemVyb2luZyB0aGUgbWVtb3J5LCB0aGVuIHRoaXMgaXMgYSBwb3RlbnRpYWwgcmVhZC11bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXR5ISBUaGlzIGlzIHRoZSBtb3N0IGNydWNpYWwgcGFydCB0byBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc5NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNToxMDozMS4yMDkzNzA5OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE3MzMxNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfbmV3X21zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92aG9zdC5jPTE5OTc9c3RhdGljIGludCB2aG9zdF9pb3RsYl9taXNzKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCB1NjQgaW92YSwgaW50IGFjY2VzcylcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yMDE1LVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoyMDE2OlxcdG5vZGUgPSB2aG9zdF9uZXdfbXNnKHZxLCB2MiA/IFZIT1NUX0lPVExCX01TR19WMiA6IFZIT1NUX0lPVExCX01TRyk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTIwMTctXFx0aWYgKCFub2RlKVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jPTM0ODM9RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGlzYWJsZV9ub3RpZnkpO1xcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM0ODUtLyogQ3JlYXRlIGEgbmV3IG1lc3NhZ2UuICovXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjM0ODY6c3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9uZXdfbXNnKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBpbnQgdHlwZSlcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzQ4Ny17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzQ5Ni19XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjM0OTc6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfbmV3X21zZyk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM0OTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjEwOjMxLjI2MTEwNjk5NloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzg5MjE0NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyB0aGUgYHZob3N0X25ld19tc2dgIGltcGxlbWVudGF0aW9uLCBmcm9tIGEgc2Vhc29uZWQgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdmhvc3RfbmV3X21zZyoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYHZob3N0X25ld19tc2dgLiBJJ3ZlIHNlZW4gdGhpcyBmdW5jdGlvbiBiZWZvcmUsIGFuZCBpdCdzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSBpbiBob3cgdmlydHVhbCBob3N0cyBhcmUgZXN0YWJsaXNoZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29yZSBhc3BlY3RzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBjcmVhdGluZyBvciBpbml0aWFsaXppbmcgYSBuZXcgdmlydHVhbCBob3N0IGNvbm5lY3Rpb24sIGxpa2VseSBzaWduYWxpbmcgc29tZSBuZXcgY29ubmVjdGlvbiBpbmZvcm1hdGlvbiBmcm9tIGEgZ3Vlc3QgdG8gdGhlIGhvc3QuXG5cbkknbGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGhhbmRsZXMgcmVzb3VyY2UgYWxsb2NhdGlvbiwgbWVzc2FnZSBwYXJzaW5nLCBhbmQgYW55IGluaXRpYWwgY2hlY2tzIGl0IHBlcmZvcm1zLiBJJ2xsIG5lZWQgdG8gc2VlIGlmIGl0IGludGVyZmFjZXMgZGlyZWN0bHkgd2l0aCB0aGUgdmlydGlvIGRyaXZlciBvciB3aGV0aGVyIGl0IGRlbGVnYXRlcyB0aGVzZSB0YXNrcy5cblxuSSBleHBlY3QgdG8gc2VlIHNvbWUga2luZCBvZiBoYW5kc2hha2UgbG9naWMsIGVuc3VyaW5nIHByb3BlciBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgZ3Vlc3QgYW5kIGhvc3QuIFRoZSBtZXNzYWdlIGxpa2VseSBpbmNsdWRlcyBkZXRhaWxzIGxpa2UgdGhlIGZlYXR1cmVzIG5lZ290aWF0ZWQsIG1lbW9yeSByZWdpb25zIGV4cG9zZWQsIGFuZCBwb3RlbnRpYWxseSBldmVuIGluaXRpYWxpemF0aW9uIGNvbW1hbmRzLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIOKAkyB0aGUgc2V0LXVwIG9mIHRoZSBzaGFyZWQgbWVtb3J5IHJlZ2lvbnMsIHdoaWNoIGFyZSBzbyB2aXRhbCB0byB2aG9zdOKAmXMgZWZmaWNpZW5jeS5cblxuSeKAmW0gYWxzbyBpbnRlcmVzdGVkIGluIGl0cyBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nIGR1cmluZyB0aGUgaW5pdGlhbCBjb25uZWN0aW9uIHNldHVwPyBEb2VzIGl0IHNpbXBseSByZXR1cm4gYW4gZXJyb3IsIG9yIGFyZSB0aGVyZSBtb3JlIGVsYWJvcmF0ZSBtZWNoYW5pc21zIGxpa2UgcmV0cmllcyBvciBmYWxsYmFjayByb3V0aW5lcz8gSXQgc2hvdWxkIGFsc28gY2hlY2sgZm9yIGEgbGFjayBvZiByZXNvdXJjZXMuXG5cblVsdGltYXRlbHksIEnigJltIGFudGljaXBhdGluZyB0aGF0IGB2aG9zdF9uZXdfbXNnYCBpcyB0aGUgZ2F0ZXdheSB0aGF0IHNldHMgdGhlIHN0YWdlIGZvciBhIGhpZ2hseSBvcHRpbWl6ZWQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEl0IGlzIHdoZXJlIGV2ZXJ5dGhpbmcgYmVnaW5zLiBJJ20gZXhjaXRlZCB0byBzZWUgdGhlIGludHJpY2FjaWVzIG9mIGl0cyBleGVjdXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NDksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNToxMDozNS42NTAzMjQ3NjFaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmhvc3Qvdmhvc3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDg1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNDg1OlxcdC8qIENyZWF0ZSBhIG5ldyBtZXNzYWdlLiAqL1xcbjM0ODY6XFx0c3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9uZXdfbXNnKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBpbnQgdHlwZSlcXG4zNDg3OlxcdHtcXG4zNDg4OlxcdFxcdC8qIE1ha2Ugc3VyZSBhbGwgcGFkZGluZyB3aXRoaW4gdGhlIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZC4gKi9cXG4zNDg5OlxcdFxcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSA9IGt6YWxsb2Nfb2JqKCpub2RlKTtcXG4zNDkwOlxcdFxcdGlmICghbm9kZSlcXG4zNDkxOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjM0OTI6XFx0XFxuMzQ5MzpcXHRcXHRub2RlLVxcdTAwM2V2cSA9IHZxO1xcbjM0OTQ6XFx0XFx0bm9kZS1cXHUwMDNlbXNnLnR5cGUgPSB0eXBlO1xcbjM0OTU6XFx0XFx0cmV0dXJuIG5vZGU7XFxuMzQ5NjpcXHR9XFxuMzQ5NzpcXHRFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9uZXdfbXNnKTtcXG4zNDk4OlxcdFxcbjM0OTk6XFx0dm9pZCB2aG9zdF9lbnF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuMzUwMDpcXHRcXHRcXHQgICAgICAgc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlKVxcbjM1MDE6XFx0e1xcbjM1MDI6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWlvdGxiX2xvY2spO1xcbjM1MDM6XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2bm9kZS1cXHUwMDNlbm9kZSwgaGVhZCk7XFxuMzUwNDpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2ZGV2LVxcdTAwM2Vpb3RsYl9sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MTA6MzUuNjUwNTI0MzQxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MzIzNTI4MDM4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjk2NzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2Mjk4MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjE2OjM4Ljg4NTgwNzk1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQ4MDpcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnZxLVxcdTAwM2V1c2VkLVxcdTAwM2VmbGFncywgcik7XFxuMzQ4MTpcXHRcXHR9XFxuMzQ4MjpcXHR9XFxuMzQ4MzpcXHRFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kaXNhYmxlX25vdGlmeSk7XFxuMzQ4NDpcXHRcXG4zNDg1OlxcdC8qIENyZWF0ZSBhIG5ldyBtZXNzYWdlLiAqL1xcbjM0ODY6XFx0c3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9uZXdfbXNnKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBpbnQgdHlwZSlcXG4zNDg3OlxcdHtcXG4zNDg4OlxcdFxcdC8qIE1ha2Ugc3VyZSBhbGwgcGFkZGluZyB3aXRoaW4gdGhlIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZC4gKi9cXG4zNDg5OlxcdFxcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSA9IGt6YWxsb2Nfb2JqKCpub2RlKTtcXG4zNDkwOlxcdFxcdGlmICghbm9kZSlcXG4zNDkxOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjM0OTI6XFx0XFxuMzQ5MzpcXHRcXHRub2RlLVxcdTAwM2V2cSA9IHZxO1xcbjM0OTQ6XFx0XFx0bm9kZS1cXHUwMDNlbXNnLnR5cGUgPSB0eXBlO1xcbjM0OTU6XFx0XFx0cmV0dXJuIG5vZGU7XFxuMzQ5NjpcXHR9XFxuMzQ5NzpcXHRFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9uZXdfbXNnKTtcXG4zNDk4OlxcdFxcbjM0OTk6XFx0dm9pZCB2aG9zdF9lbnF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjE2OjM4Ljg4NjAwODYyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2MjgxNzE2MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBaZXJvLUluaXRpYWxpemF0aW9uIElzc3VlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSA9IGt6YWxsb2Nfb2JqKCpub2RlKTtgIGxpbmUuIGBremFsbG9jX29iamAuLi4gYWhhLCBpdCdzIHZlcnkgbGlrZWx5IGEgbWFjcm8gZm9yIGFsbG9jYXRpbmcgYW5kIHplcm8taW5pdGlhbGl6aW5nIHRoZSBtZW1vcnkgZm9yIHRoZSBub2RlLiAgVGhhdCBtZWFucyB0aGUgZW50aXJlIGBub2RlYCBvYmplY3QgaXMgemVyb2VkIG91dCBhdCB0aGUgc3RhcnQuICBUaGF0J3MgaW1wb3J0YW50LlxuXG5UaGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLCBpZiBpdCdzIHplcm9lZCwgdGhlbiBhbGwgZmllbGRzIGluIHRoZSBgbm9kZWAgc3RydWN0LCBpbmNsdWRpbmcgYG5vZGUtXHUwMDNlbXNnX3YyYCwgd2lsbCBiZSBpbml0aWFsaXplZCB0byB6ZXJvLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGNvZGUgdGhhdCB1c2VzIHRoaXMgbm9kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgdmhvc3Rfc2V0X2lvdGxiX21pc3NgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgd2l0aCBwYXJ0aWFsbHkgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmVzLlxuXG5SaWdodCwgc28gaGVyZSdzIHdoYXQgYHZob3N0X3NldF9pb3RsYl9taXNzYCBkb2VzOlxuYGBgY1xuc3RhdGljIHZvaWQgdmhvc3Rfc2V0X2lvdGxiX21pc3Moc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlLCBib29sIHYyLFxuXHRcdFx0XHQgdTY0IGlvdmEsIGludCBhY2Nlc3MpXG57XG5cdHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1zZztcblx0dTMyIHR5cGUgPSB2MiA/IFZIT1NUX0lPVExCX01TR19WMiA6IFZIT1NUX0lPVExCX01TRztcblxuXHRpZiAobm9kZS1cdTAwM2Vtc2cudHlwZSAhPSB0eXBlKVxuXHRcdG1lbXNldChcdTAwMjZub2RlLVx1MDAzZW1zZ192MiwgMCwgc2l6ZW9mKG5vZGUtXHUwMDNlbXNnX3YyKSk7XG5cdG5vZGUtXHUwMDNlbXNnLnR5cGUgPSB0eXBlO1xuXHRtc2cgPSB2aG9zdF9nZXRfaW90bGJfbXNnKG5vZGUpO1xuXG5cdG1zZy1cdTAwM2V0eXBlID0gVkhPU1RfSU9UTEJfTUlTUztcblx0bXNnLVx1MDAzZWlvdmEgPSBpb3ZhO1xuXHRtc2ctXHUwMDNlcGVybSA9IGFjY2Vzcztcbn1cbmBgYFxuXG5Pa2F5LCBzbyBpZiB0aGUgYG5vZGUtXHUwMDNlbXNnLnR5cGVgIGlzbid0IHRoZSBleHBlY3RlZCB0eXBlLCB0aGVuIGl0IHplcm8taW5pdGlhbGl6ZXMgYG5vZGUtXHUwMDNlbXNnX3YyYCBiZWZvcmUgcHJvY2VlZGluZy4gIEl0IHRoZW4gc2V0cyBgbXNnLVx1MDAzZXR5cGVgLCBgbXNnLVx1MDAzZWlvdmFgLCBhbmQgYG1zZy1cdTAwM2VwZXJtYC4gTXkgY29uY2VybiBpcyB3aGV0aGVyIGFueSBvdGhlciBmaWVsZHMgd2l0aGluIGBtc2dgIG1pZ2h0IHJlcXVpcmUgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24uIEl0J3MgYSBxdWljayBmb2xsb3cgdXAsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgbWVtc2V0IGhhbmRsZXMgYWxsIHRoZSByZWxldmFudCBzY2VuYXJpb3MuIEknbGwgdGFrZSBhIHF1aWNrIGdsYW5jZSBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHZob3N0X2lvdGxiX21zZ2AgYW5kIHZlcmlmeSB0aGF0IHRoZSBvdGhlciBmaWVsZHMgYXJlIGVpdGhlciB6ZXJvLWluaXRpYWxpemVkIGJ5IGRlZmF1bHQgb3IgcHJvcGVybHkgaGFuZGxlZCBlbHNld2hlcmUgaW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyOTk2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MTY6NDcuNTE0MTg1MDYxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODc0NTk3NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHZob3N0X2lvdGxiX21zZyBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvdmhvc3QuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MTY6NDcuNTgyOTQyNTY2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODkxNDI4NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSB2aG9zdF9pb3RsYl9tc2cgU3RydWN0dXJlKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBteSBiZWFyaW5ncyBvbiB0aGUgYHZob3N0X2lvdGxiX21zZ2Agc3RydWN0dXJlLiBJJ20gdGhpbmtpbmcgdGhlIGZpcnN0IHBsYWNlIHRvIGxvb2sgaXMgdGhlIHN0YW5kYXJkIGxvY2F0aW9uOiBgaW5jbHVkZS91YXBpL2xpbnV4L3Zob3N0X3R5cGVzLmhgLCBvciBzb21ldGhpbmcgYW5hbG9nb3VzIGluIHRoZSBrZXJuZWwgaGVhZGVycy4gSXQncyBhbG1vc3QgY2VydGFpbiBpdCdsbCBiZSBkZWZpbmVkIHRoZXJlLCBnaXZlbiBpdCdzIGEgbWVzc2FnZSB0eXBlIHJlbGF0ZWQgdG8gdmhvc3QsIGFuZCB0aGUgYHVhcGlgIGRpcmVjdG9yeSBpcyB3aGVyZSB0aGUga2VybmVsIGV4cG9ydHMgc3RydWN0dXJlcyBmb3IgdXNlcnNwYWNlIGludGVyYWN0aW9uLiBJdCdzIHByZXR0eSBmdW5kYW1lbnRhbCwgc28gSSBleHBlY3QgaXQnbGwgYmUgaW4gb25lIG9mIHRoZSBjb3JlIHZob3N0IGhlYWRlciBmaWxlcy4gTGV0IG1lIGdvIHRha2UgYSBsb29rIHRoZXJlLCBhbmQgc2VlIHdoYXQgdGhlIGZpZWxkcyBhcmUgYW5kIGhvdyBpdCdzIGRlZmluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczOTAzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MTY6NTEuMDcyMDg3NTk0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQ4NDUxMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHZob3N0X2lvdGxiX21zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvdmhvc3RfdHlwZXMuaD01OT1zdHJ1Y3Qgdmhvc3RfdnJpbmdfd29ya2VyIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92aG9zdF90eXBlcy5oLTY2LS8qIG5vIGFsaWdubWVudCByZXF1aXJlbWVudCAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC92aG9zdF90eXBlcy5oOjY3OnN0cnVjdCB2aG9zdF9pb3RsYl9tc2cge1xcbmluY2x1ZGUvdWFwaS9saW51eC92aG9zdF90eXBlcy5oLTY4LVxcdF9fdTY0IGlvdmE7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmhvc3RfdHlwZXMuaD05Nj1zdHJ1Y3Qgdmhvc3RfbXNnIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92aG9zdF90eXBlcy5oLTk4LVxcdHVuaW9uIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvdmhvc3RfdHlwZXMuaDo5OTpcXHRcXHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnIGlvdGxiO1xcbmluY2x1ZGUvdWFwaS9saW51eC92aG9zdF90eXBlcy5oLTEwMC1cXHRcXHRfX3U4IHBhZGRpbmdbNjRdO1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3Zob3N0X3R5cGVzLmg9MTA0PXN0cnVjdCB2aG9zdF9tc2dfdjIge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3Zob3N0X3R5cGVzLmgtMTA3LVxcdHVuaW9uIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvdmhvc3RfdHlwZXMuaDoxMDg6XFx0XFx0c3RydWN0IHZob3N0X2lvdGxiX21zZyBpb3RsYjtcXG5pbmNsdWRlL3VhcGkvbGludXgvdmhvc3RfdHlwZXMuaC0xMDktXFx0XFx0X191OCBwYWRkaW5nWzY0XTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MTY6NTEuMjc2OTM4OTFaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY5MTU0MjcxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgc3RydWN0IHZob3N0X2lvdGxiX21zZ2AqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgYHN0cnVjdCB2aG9zdF9pb3RsYl9tc2dgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBJL08gdHJhbnNsYXRpb24gbG9va2FzaWRlIGJ1ZmZlciBtZXNzYWdlIHN0cnVjdHVyZSB3aXRoaW4gdGhlIHZob3N0IGNvbnRleHQuIFRoaXMgbGlrZWx5IGRlYWxzIHdpdGggYWNjZWxlcmF0ZWQgZ3Vlc3QgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBJIG5lZWQgdG8gcGFyc2UgaXRzIGNvbnRlbnRzIHRvIHVuZGVyc3RhbmQgaG93IEkvTyB2aXJ0dWFsIGFkZHJlc3NlcyBhcmUgbWFwcGVkIHRvIHBoeXNpY2FsIGFkZHJlc3NlcywgYW5kIGhvdyB0aGUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSB2aG9zdCBrZXJuZWwgbW9kdWxlIGFuZCB0aGUgdmhvc3QgdXNlcnNwYWNlIGltcGxlbWVudGF0aW9uIGlzIHN0cnVjdHVyZWQgaW4gdGhpcyBjYXNlLiBJIGV4cGVjdCBpdCB0byBoYXZlIGZpZWxkcyByZWxhdGVkIHRvIHRoZSB2aXJ0dWFsIGFkZHJlc3MsIHRoZSBwaHlzaWNhbCBhZGRyZXNzLCB0aGUgc2l6ZSBvZiB0aGUgdHJhbnNsYXRpb24sIGZsYWdzIGluZGljYXRpbmcgbWVtb3J5IGF0dHJpYnV0ZXMgb3IgYWNjZXNzIHBlcm1pc3Npb25zLCBhbmQgcG90ZW50aWFsbHkgYSBzZXF1ZW5jZSBudW1iZXIgZm9yIHRyYWNraW5nIGFuZCBlbnN1cmluZyBvcmRlcmluZy4gSSdtIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgdHlwZXMgdXNlZCBmb3IgdGhlIGFkZHJlc3NlcywgYXMgdGhhdCB3aWxsIHJldmVhbCB0aGUgYWRkcmVzcyBzcGFjZSBhbmQgbWVtb3J5IG1vZGVsIGF0IHBsYXkuIEFyZSB0aGV5IDMyLWJpdCwgNjQtYml0LCBvciBwZXJoYXBzIGV2ZW4gbGFyZ2VyPyBBbnkgaGludHMgYWJvdXQgY2FjaGluZyBiZWhhdmlvciB3b3VsZCBiZSBpbnRlcmVzdGluZy4gSSdtIGVzcGVjaWFsbHkga2VlbiB0byBzZWUgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIGB2aG9zdF9tZW1vcnlgIHN0cnVjdHVyZXMsIGFzIHRoZXkncmUgdGhlIGJyZWFkIGFuZCBidXR0ZXIgb2YgbWVtb3J5IG1hbmFnZW1lbnQgaW4gdGhpcyBhcmNoaXRlY3R1cmUuIExldCdzIHNlZSBpZiB0aGVyZSdzIGFueSBjbGV2ZXIgdHJpY2tlcnkgb3Igb3B0aW1pemF0aW9ucyBiYWtlZCBpbiBoZXJlLCBzdWNoIGFzIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmZWF0dXJlcy4gUmlnaHQsIHRpbWUgdG8gZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDQ4MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjE2OjU1Ljk2ODQ4NTQ5NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvdmhvc3RfdHlwZXMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2NyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2NzpcXHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnIHtcXG4gIDY4OlxcdFxcdF9fdTY0IGlvdmE7XFxuICA2OTpcXHRcXHRfX3U2NCBzaXplO1xcbiAgNzA6XFx0XFx0X191NjQgdWFkZHI7XFxuICA3MTpcXHQjZGVmaW5lIFZIT1NUX0FDQ0VTU19STyAgICAgIDB4MVxcbiAgNzI6XFx0I2RlZmluZSBWSE9TVF9BQ0NFU1NfV08gICAgICAweDJcXG4gIDczOlxcdCNkZWZpbmUgVkhPU1RfQUNDRVNTX1JXICAgICAgMHgzXFxuICA3NDpcXHRcXHRfX3U4IHBlcm07XFxuICA3NTpcXHQjZGVmaW5lIFZIT1NUX0lPVExCX01JU1MgICAgICAgICAgIDFcXG4gIDc2OlxcdCNkZWZpbmUgVkhPU1RfSU9UTEJfVVBEQVRFICAgICAgICAgMlxcbiAgNzc6XFx0I2RlZmluZSBWSE9TVF9JT1RMQl9JTlZBTElEQVRFICAgICAzXFxuICA3ODpcXHQjZGVmaW5lIFZIT1NUX0lPVExCX0FDQ0VTU19GQUlMICAgIDRcXG4gIDc5OlxcdC8qXFxuICA4MDpcXHQgKiBWSE9TVF9JT1RMQl9CQVRDSF9CRUdJTiBhbmQgVkhPU1RfSU9UTEJfQkFUQ0hfRU5EIGFsbG93IG1vZGlmeWluZ1xcbiAgODE6XFx0ICogbXVsdGlwbGUgbWFwcGluZ3MgaW4gb25lIGdvOiBiZWdpbm5pbmcgd2l0aFxcbiAgODI6XFx0ICogVkhPU1RfSU9UTEJfQkFUQ0hfQkVHSU4sIGZvbGxvd2VkIGJ5IGFueSBudW1iZXIgb2ZcXG4gIDgzOlxcdCAqIFZIT1NUX0lPVExCX1VQREFURSBtZXNzYWdlcywgYW5kIGVuZGluZyB3aXRoIFZIT1NUX0lPVExCX0JBVENIX0VORC5cXG4gIDg0OlxcdCAqIFdoZW4gb25lIG9mIHRoZXNlIHR3byB2YWx1ZXMgaXMgdXNlZCBhcyB0aGUgbWVzc2FnZSB0eXBlLCB0aGUgcmVzdFxcbiAgODU6XFx0ICogb2YgdGhlIGZpZWxkcyBpbiB0aGUgbWVzc2FnZSBhcmUgaWdub3JlZC4gVGhlcmUncyBubyBndWFyYW50ZWUgdGhhdFxcbiAgODY6XFx0ICogdGhlc2UgY2hhbmdlcyB0YWtlIHBsYWNlIGF1dG9tYXRpY2FsbHkgaW4gdGhlIGRldmljZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MTY6NTUuOTY4NTc2NTI0WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTg1MzczMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgdmhvc3RfaW90bGJfbXNnIFN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgc3RydWN0IHZob3N0X2lvdGxiX21zZ2AgZGVmaW5pdGlvbi4gSSBzZWUgaXQncyBnb3QgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBJL08gdHJhbnNsYXRpb24gZW50cmllczogYGlvdmFgLCB3aGljaCBpcyB0aGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzczsgYHNpemVgLCB0aGUgZXh0ZW50IG9mIHRoZSBtYXBwaW5nOyBgdWFkZHJgLCB3aGljaCBpcyB0aGUgdXNlci1zcGFjZSB2aXJ0dWFsIGFkZHJlc3M7IGBwZXJtYCwgZGVzY3JpYmluZyB0aGUgYWNjZXNzIHBlcm1pc3Npb25zOyBhbmQgZmluYWxseSwgYHR5cGVgLCB3aGljaCBJJ20gZ3Vlc3Npbmcgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIG1hcHBpbmcuIE5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBvdGhlciBmaWVsZHMgYW5kIHJlbGF0ZWQgc3RydWN0dXJlcyB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgbWVzc2FnZSBvcmNoZXN0cmF0ZXMgdGhlIEkvTyB0cmFuc2xhdGlvbiBwcm9jZXNzLiBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3AgaG93IHRoaXMgaXMgZGVzaWduZWQgc28gdGhhdCBJIGNhbiBvcHRpbWl6ZSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUxOTUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjE2OjU5Ljg2NzExNjkxM1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvdmhvc3RfdHlwZXMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA4NyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4NzpcXHQgKi9cXG4gIDg4OlxcdCNkZWZpbmUgVkhPU1RfSU9UTEJfQkFUQ0hfQkVHSU4gICAgNVxcbiAgODk6XFx0I2RlZmluZSBWSE9TVF9JT1RMQl9CQVRDSF9FTkQgICAgICA2XFxuICA5MDpcXHRcXHRfX3U4IHR5cGU7XFxuICA5MTpcXHR9O1xcbiAgOTI6XFx0XFxuICA5MzpcXHQjZGVmaW5lIFZIT1NUX0lPVExCX01TRyAweDFcXG4gIDk0OlxcdCNkZWZpbmUgVkhPU1RfSU9UTEJfTVNHX1YyIDB4MlxcbiAgOTU6XFx0XFxuICA5NjpcXHRzdHJ1Y3Qgdmhvc3RfbXNnIHtcXG4gIDk3OlxcdFxcdGludCB0eXBlO1xcbiAgOTg6XFx0XFx0dW5pb24ge1xcbiAgOTk6XFx0XFx0XFx0c3RydWN0IHZob3N0X2lvdGxiX21zZyBpb3RsYjtcXG4gMTAwOlxcdFxcdFxcdF9fdTggcGFkZGluZ1s2NF07XFxuIDEwMTpcXHRcXHR9O1xcbiAxMDI6XFx0fTtcXG4gMTAzOlxcdFxcbiAxMDQ6XFx0c3RydWN0IHZob3N0X21zZ192MiB7XFxuIDEwNTpcXHRcXHRfX3UzMiB0eXBlO1xcbiAxMDY6XFx0XFx0X191MzIgYXNpZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MTY6NTkuODY3MjA3OTMzWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0Mjc2OTcyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgdmhvc3QgU3RydWN0dXJlKipcblxuT2theSwgaG9sZCBvbiBhIG1pbnV0ZS4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IHRoZSBgc3RydWN0IHZob3N0X21zZ19ub2RlYCBpcyBkZWZpbmVkIGluIGBkcml2ZXJzL3Zob3N0L3Zob3N0LmhgLiBUaW1lIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkndmUgZ290IHRoZSBjb3JyZWN0IGRlZmluaXRpb24gZm9yIG15IGN1cnJlbnQgYW5hbHlzaXMuIExldCdzIGhlYWQgb3ZlciB0aGVyZSBhbmQgZ2V0IGEgcHJlY2lzZSBsb29rIGF0IGl0cyBtZW1iZXJzIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkLiBHb3R0YSBlbnN1cmUgSSdtIG9wZXJhdGluZyBvbiBzb2xpZCBncm91bmQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdmhvc3QncyBjb21wbGV4aXRpZXMuIFRoaXMgc3RydWN0IGlzIHByb2JhYmx5IGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG1lc3NhZ2UgcGFzc2luZyBvciBkYXRhIHN0cnVjdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NzAzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNToxNzowMy4yOTQ5MDgyODVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MDgyMDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCB2aG9zdF9tc2dfbm9kZSBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92aG9zdC5oPTk1PXN0cnVjdCB2aG9zdF92aXJ0cXVldWUge1xcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5oLTE3NC1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg6MTc1OnN0cnVjdCB2aG9zdF9tc2dfbm9kZSB7XFxuZHJpdmVycy92aG9zdC92aG9zdC5oLTE3Ni0gIHVuaW9uIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MTc6MDMuMzcxOTk1MzU5WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTA2MjY4NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHN0cnVjdCB2aG9zdF9tc2dfbm9kZWAqKlxuXG5Pa2F5LCBsZXQncyBnZXQgaW50byB0aGUgZGV0YWlscyBvZiBgc3RydWN0IHZob3N0X21zZ19ub2RlYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGVzZSBtZXNzYWdlIG5vZGVzIGFyZSBzdHJ1Y3R1cmVkIHdpdGhpbiB0aGUgdmhvc3Qgc3Vic3lzdGVtLiBJJ20gYXNzdW1pbmcgdGhpcyBpcyBhIGNvcmUgYnVpbGRpbmcgYmxvY2sgZm9yIG1hbmFnaW5nIHRoZSBjb21tdW5pY2F0aW9uIGZsb3cgYmV0d2VlbiB0aGUgaG9zdCBhbmQgdGhlIGd1ZXN0LCBsaWtlbHkgdGllZCB0byBzaGFyZWQgbWVtb3J5IGFuZCBldmVudCBjaGFubmVscy4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IGhvdyB0aGlzIHJlbGF0ZXMgdG8gb3RoZXIgZGF0YSBzdHJ1Y3R1cmVzIGluIHRoZSB2aG9zdCBzcGFjZSAtIGlzIHRoaXMgcGFydCBvZiB0aGUgcmluZyBidWZmZXIgbWFuYWdlbWVudCwgb3Igc29tZXRoaW5nIG1vcmUgZnVuZGFtZW50YWwgZm9yIGludGVyLVZNIG1lc3NhZ2luZz8gSSdsbCBiZSBsb29raW5nIGZvciBmaWVsZHMgdGhhdCBwb2ludCB0byBidWZmZXJzLCBkZXNjcmliZSBtZXNzYWdlIHR5cGVzLCBhbmQgaGFuZGxlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLiBNeSBwcmltYXJ5IHF1ZXN0aW9ucyByaWdodCBub3cgcmV2b2x2ZSBhcm91bmQgdGhlIGZpZWxkcyB0aGVtc2VsdmVzIGFuZCBob3cgdGhleSBhcmUgdXNlZCwgbG9va2luZyBmb3IgaW5zaWdodHMgaW50byB0aGUgbG9ja2luZyBzdHJhdGVneSB1c2VkIGZvciBjb25jdXJyZW5jeSBhbmQgaG93IGRhdGEgY29uc2lzdGVuY3kgaXMgYWNoaWV2ZWQuIExldCdzIHNlZSBpZiB0aGlzIHJldmVhbHMgYW55dGhpbmcgYWJvdXQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIGluIHRoZSBtZXNzYWdlIGhhbmRsaW5nIHByb2Nlc3MuIEknbSBhbHNvIGludGVyZXN0ZWQgaW4gaG93IHRoaXMgbm9kZSBpbnRlZ3JhdGVzIHdpdGggdGhlIGxhcmdlciBmcmFtZXdvcmsgLSBpcyBpdCBwYXJ0IG9mIGEgbGlua2VkIGxpc3QsIGEgdHJlZSwgb3Igc29tZSBvdGhlciBvcmdhbml6YXRpb25hbCBzdHJ1Y3R1cmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhpcyBzdHJ1Y3R1cmUg4oCTIGNyZWF0aW9uLCB1c2FnZSwgYW5kIGRlc3RydWN0aW9uIOKAkyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYwMDAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNToxNzowNy40MjI2MjY2MzhaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmhvc3Qvdmhvc3QuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNzU6XFx0c3RydWN0IHZob3N0X21zZ19ub2RlIHtcXG4gMTc2OlxcdCAgdW5pb24ge1xcbiAxNzc6XFx0XFx0ICBzdHJ1Y3Qgdmhvc3RfbXNnIG1zZztcXG4gMTc4OlxcdFxcdCAgc3RydWN0IHZob3N0X21zZ192MiBtc2dfdjI7XFxuIDE3OTpcXHQgIH07XFxuIDE4MDpcXHQgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxO1xcbiAxODE6XFx0ICBzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7XFxuIDE4MjpcXHR9O1xcbiAxODM6XFx0XFxuIDE4NDpcXHRzdHJ1Y3Qgdmhvc3RfZGV2IHtcXG4gMTg1OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbiAxODY6XFx0XFx0c3RydWN0IG11dGV4IG11dGV4O1xcbiAxODc6XFx0XFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqKnZxcztcXG4gMTg4OlxcdFxcdGludCBudnFzO1xcbiAxODk6XFx0XFx0c3RydWN0IGV2ZW50ZmRfY3R4ICpsb2dfY3R4O1xcbiAxOTA6XFx0XFx0c3RydWN0IHZob3N0X2lvdGxiICp1bWVtO1xcbiAxOTE6XFx0XFx0c3RydWN0IHZob3N0X2lvdGxiICppb3RsYjtcXG4gMTkyOlxcdFxcdHNwaW5sb2NrX3QgaW90bGJfbG9jaztcXG4gMTkzOlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgcmVhZF9saXN0O1xcbiAxOTQ6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX2xpc3Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjE3OjA3LjQyMjc0ODc5OFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDU5MDM2NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgdmhvc3RfbmV3X21zZ2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB2aG9zdF9uZXdfbXNnYCBmdW5jdGlvbiBpbiB0aGUgdmhvc3QgY29kZS4gSXQgbG9va3Mgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSBoYXZlIGEgbmFnZ2luZyBmZWVsaW5nIEkgbWlnaHQgaGF2ZSBtaXNzZWQgc29tZXRoaW5nIHN1YnRsZSBpbiBhbiBlYXJsaWVyIHNjYW4uIExldCBtZSBtYWtlIHN1cmUgSSdtIGZvbGxvd2luZy4gVGhlIGdvYWwgaXMgdG8gYWxsb2NhdGUgYSBuZXcgbWVzc2FnZSBub2RlLCBhbmQgdGhlIGNvZGUgYXBwZWFycyB0byBiZSB1c2luZyBga3phbGxvY2AgdG8gZG8gdGhhdC4gSSdtIHNlZWluZyBgc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlID0ga3phbGxvYyhzaXplb2YgKm5vZGUsIEdGUF9LRVJORUwpO2AgLSBzbyBpdCdzIGEga2VybmVsIHplcm8gYWxsb2NhdGlvbiB3aXRoIG1lbW9yeSByZXNlcnZlZCBmcm9tIGBHRlBfS0VSTkVMYC4gVGhpcyBsb29rcyByaWdodCwgYWxsb2NhdGluZyB0aGUgY29ycmVjdCBzaXplLCBlbnN1cmluZyBpbml0aWFsaXphdGlvbiB0byB6ZXJvLiBJIHRob3VnaHQgSSBoYWQgc2VlbiBga3phbGxvY19vYmooKm5vZGUpYCBpbiBhIHByZXZpb3VzIGdsYW5jZSB0aHJvdWdoLCBidXQgSSdtIG1pc3Rha2VuIC0gaXQncyB0aGUgc3RhbmRhcmQgY2FsbCB0byBga3phbGxvY2AsIGFsbG9jYXRpbmcgbWVtb3J5IGZvciB0aGUgYHZob3N0X21zZ19ub2RlYCBzdHJ1Y3R1cmUgYW5kIGluaXRpYWxpemluZyBpdCB0byB6ZXJvLCB3aGljaCBpcyBnb29kIHByYWN0aWNlLiBUaGUgc3Vic2VxdWVudCBhc3NpZ25tZW50cyBvZiBgbm9kZS1cdTAwM2V2cWAgYW5kIGBub2RlLVx1MDAzZW1zZy50eXBlYCBzZWVtIGZpbmUuIEl0J3MgcHJvcGVybHkgaW5pdGlhbGl6aW5nIHRoZSBub2RlJ3MgZmllbGRzLiBUaGUgY3J1Y2lhbCBwYXJ0IGhlcmUgaXMgdGhlIGNvcnJlY3QgYWxsb2NhdGlvbiBvZiBtZW1vcnkuIFRoaXMgYWxsIG1ha2VzIHNlbnNlLCBhbmQgSSB0aGluayBpdCdzIGFzIGl0IHNob3VsZCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY2MTEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNToxNzoxMi40ODE3ODc4NDZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgxMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmhvc3Qvdmhvc3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDg1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNDg1OlxcdC8qIENyZWF0ZSBhIG5ldyBtZXNzYWdlLiAqL1xcbjM0ODY6XFx0c3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9uZXdfbXNnKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBpbnQgdHlwZSlcXG4zNDg3OlxcdHtcXG4zNDg4OlxcdFxcdC8qIE1ha2Ugc3VyZSBhbGwgcGFkZGluZyB3aXRoaW4gdGhlIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZC4gKi9cXG4zNDg5OlxcdFxcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSA9IGt6YWxsb2Nfb2JqKCpub2RlKTtcXG4zNDkwOlxcdFxcdGlmICghbm9kZSlcXG4zNDkxOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjM0OTI6XFx0XFxuMzQ5MzpcXHRcXHRub2RlLVxcdTAwM2V2cSA9IHZxO1xcbjM0OTQ6XFx0XFx0bm9kZS1cXHUwMDNlbXNnLnR5cGUgPSB0eXBlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNToxNzoxMi40ODIwNzA0MzZaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4MzkwODgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVW5yYXZlbGluZyB0aGUgYGt6YWxsb2Nfb2JqYCBFbmlnbWEqKlxuXG5SaWdodCwgc28gSSdtIHNlZWluZyBga3phbGxvY19vYmooKm5vZGUpYC4gTXkgaW5pdGlhbCBodW5jaCBpcyBzcG90LW9uIOKAkyB0aGF0J3MgZGVmaW5pdGVseSB0aGUgY2FsbCwgYnV0IGEgbWFjcm8/IExldCdzIHF1aWNrbHkgdmVyaWZ5IHRoYXQsIGJlY2F1c2UgdGhhdCdzIHdoYXQncyBnb2luZyB0byBiZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBga3phbGxvY19vYmpgIG1hY3JvIGV4cGFuZHMgdG8uIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIHdoYXQgaXQncyB0cnlpbmcgdG8gZG8gaW4gdGhlIGdyZWF0ZXIgY29udGV4dCBvZiB0aGUgY29kZS4gVGhpcyB3aWxsIGJlIHRoZSBwaXZvdGFsIHBvaW50IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzI1MywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MTc6MTUuODY1OTg0NjMyWiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTQ2OTgxNjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUga3phbGxvY19vYmpcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2xhYi5oPTEwNzA9dm9pZCAqa21hbGxvY19ub2xvY2soc2l6ZV90IHNpemUsIGdmcF90IGdmcF9mbGFncywgaW50IG5vZGUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTE1MS0vKiBBbGwga3phbGxvYyBhbGlhc2VzIGZvciBrbWFsbG9jXyhvYmp8b2Jqc3xmbGV4KS4gKi9cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTUyOiNkZWZpbmUga3phbGxvY19vYmooUCwgLi4uKSBcXFxcXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTE1My1cXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIDEpXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6MTE1NDojZGVmaW5lIGt6YWxsb2Nfb2JqcyhQLCBDT1VOVCwgLi4uKSBcXFxcXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTE1NS1cXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIENPVU5UKVxcbi0tXFxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmg9MjAwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGttZW1fY2FjaGVfc2hlYWZfc2l6ZShzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpXFxuLS1cXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTAtXFxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmg6MjExOiNkZWZpbmUga3phbGxvY19vYmooUCwgLi4uKSBcXFxcXFxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmgtMjEyLVxcdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgMSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MTc6MTguODEyOTc0OTM3WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMzY2NTc4MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBJc3N1ZXMgaW4gdmhvc3QgSU9UTEIgTWlzcyBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEkndmUgbWV0aWN1bG91c2x5IGV4YW1pbmVkIHRoaXMgdmhvc3QgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gSU9UTEIgbWlzcyBoYW5kbGluZy4gTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgYW55IG5ldyBvcHBvcnR1bml0aWVzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSBsZWFrZWQgdG8gdXNlciBzcGFjZSwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuICBMZXQncyBicmVhayBkb3duIG15IHRob3VnaHQgcHJvY2VzczpcblxuKiAgICoqSW5pdGlhbGl6YXRpb24gaXMgS2V5OioqICBUaGUgYGt6YWxsb2Nfb2JqYCBmdW5jdGlvbiwgd2hpY2ggaXMgdXRpbGl6ZWQgZXh0ZW5zaXZlbHkgd2hlbiBjcmVhdGluZyBgdmhvc3RfbXNnX25vZGVgIHN0cnVjdHVyZXMgKGUuZy4sIHdpdGhpbiBgdmhvc3RfbmV3X21zZ2ApLCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQsIHNpbmNlIGl0IGVuc3VyZXMgdGhlIGVudGlyZSBhbGxvY2F0ZWQgbWVtb3J5IGlzIHplcm9lZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBgc3RydWN0IHZob3N0X21zZ19ub2RlYCBhbmQgaXRzIGludGVybmFsIHVuaW9ucyBpcyBhbHdheXMgZGVmaW5lZC4gIEV2ZXJ5IGJpdCBpcyBzZXQgdG8gemVybyBpbml0aWFsbHkuXG5cbiogICAqKmB2aG9zdF9zZXRfaW90bGJfbWlzc2AgXHUwMDI2IFplcm9pbmc6KiogVGhlIGB2aG9zdF9zZXRfaW90bGJfbWlzc2AgZnVuY3Rpb24gaXMgY3J1Y2lhbC4gSWYgdGhlIGBtc2cudHlwZWAgY2hhbmdlcywgaXQgbm93IHVzZXMgYG1lbXNldGAgdG8gemVybyBvdXQgdGhlIGNvbnRlbnRzIG9mIGBtc2dfdjJgIGJlZm9yZSB1cGRhdGluZyBgbXNnLnR5cGVgLiBUaGlzIHByb3RlY3RzIGFnYWluc3QgYW55IHBvdGVudGlhbCBnYXJiYWdlIGxlZnQgaW4gdGhlIGBtc2dfdjJgIHVuaW9uIHdoZW4gYSBWMSBtaXNzIGlzIHJlcGxhY2VkIGJ5IGEgVjIgbWlzcyAob3IgdmljZSB2ZXJzYSkuICBJZiB0aGUgdHlwZXMgYXJlIGlkZW50aWNhbCwgYG1lbXNldGAgaXMgc2tpcHBlZC4gSG93ZXZlciwgdGhlcmUncyBubyBoYXJtIGluIHNraXBwaW5nIHRoZSBgbWVtc2V0YCBiZWNhdXNlIHRoZSBtZW1vcnkgaXMgYWxyZWFkeSB6ZXJvZWQgKGZyb20gdGhlIHByZXZpb3VzIGBremFsbG9jYCBvciBgbWVtc2V0YCkuXG5cbiogICAqKkNvYWxlc2NpbmcgYW5kIFJldXNlOioqIGB2aG9zdF9pb3RsYl9taXNzX2NvYWxlc2NlYCByZXVzZXMgZXhpc3RpbmcgYHZob3N0X21zZ19ub2RlYCBpbnN0YW5jZXMuICBJZiB0aGUgbWlzcyBkYXRhICpkb2Vzbid0KiBjaGFuZ2UsIHRoZSBub2RlIGlzIHJldXNlZC4gIGB2aG9zdF9zZXRfaW90bGJfbWlzc2Agd2lsbCBnZXQgY2FsbGVkLCBpZiBhbnl0aGluZyBjaGFuZ2VkLCB3aGljaCBoYW5kbGVzIHRoZSB6ZXJvaW5nIGFuZCB1cGRhdGVzIGFzIGRlc2NyaWJlZC4gVGhlIGNvZGUgYXZvaWRzIHVubmVjZXNzYXJ5IGBtZW1jcHlgIG9wZXJhdGlvbnMuXG5cbiogICAqKlRoZSBgc25hcHNob3RgIFVuaW9uIGFuZCBDb3B5aW5nIHRvIFVzZXIgU3BhY2U6KiogVGhlIG1haW4gYXJlYSBvZiBjb25jZXJuLCBhbmQgbXkgbWFpbiBmb2N1cywgaXMgdGhlIGludHJvZHVjdGlvbiBvZiB0aGUgbG9jYWwgYHNuYXBzaG90YCB1bmlvbiB3aXRoaW4gYHZob3N0X2Nocl9yZWFkX2l0ZXJgLiAgVGhpcyBpcyB1c2VkIHRvIGhhbmRsZSBjb3B5aW5nIGluZm9ybWF0aW9uIHRvIHVzZXIgc3BhY2Ugd2hpbGUgaG9sZGluZyBsb2Nrcy4gIEkgdGhvcm91Z2hseSBhc3Nlc3NlZCB0aGUgYG1lbWNweWAgb3BlcmF0aW9ucyBmcm9tIHRoZSBgZmlyc3QtXHUwMDNlbXNnX3YyYCBpbnRvIHRoZSBgc25hcHNob3RgIHVuaW9uIGFuZCBzdWJzZXF1ZW50IGBjb3B5X3RvX2l0ZXJfZnVsbGAgdG8gdXNlciBzcGFjZSwgYXMgdGhhdOKAmXMgdGhlIHBhdGggaW50byB1c2VyIHNwYWNlLiBTaW5jZSB0aGUgc291cmNlIGRhdGEgaXMgemVyb2VkIGluaXRpYWxseSwgYW5kIHRoZXJlIGlzIG5vIGNvcHlpbmcgYW55IG90aGVyIGRhdGEgaW50byB0aGUgYHNuYXBzaG90YCB1bmlvbiwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuKiAgICoqQWxpZ25tZW50IGFuZCBQYWRkaW5nOioqICBJIGNhcmVmdWxseSBleGFtaW5lZCB0aGUgcGFkZGluZyB3aXRoaW4gYHN0cnVjdCB2aG9zdF9tc2dgICh3aGljaCBoYXMgNCBieXRlcyBvZiBwYWRkaW5nKSBhbmQgYHN0cnVjdCB2aG9zdF9tc2dfdjJgLCBhcyB0aGlzIGlzIGEgZnJlcXVlbnQgc291cmNlIG9mIGNvbmNlcm4uIEhvd2V2ZXIsIHRoZSBwYWRkaW5nIGluIGBzdHJ1Y3Qgdmhvc3RfbXNnYCBpcyBhbHdheXMgemVyb2VkIGJ5IHRoZSBpbml0aWFsaXphdGlvbi4gVGhpcyB6ZXJvZWQgcGFkZGluZyBnZXRzIGNvcGllZCB0byB0aGUgYHNuYXBzaG90YCB1bmlvbiBhbmQgc3Vic2VxdWVudGx5IGdldHMgY29waWVkIHRvIHVzZXIgc3BhY2UuICBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBieXRlcyBjb3BpZWQuIEFsc28sIHRoZXJlIGlzIG5vIHBhZGRpbmcgYmV0d2VlbiB0aGUgZmllbGRzIG9mIGBzdHJ1Y3Qgdmhvc3RfbXNnX3YyYCwgc28gdGhlcmUncyBubyByaXNrIG9mIGFjY2lkZW50YWxseSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIHRoZXJlLlxuXG4qICAgKipDb250cm9sIEZsb3cgYW5kIFN0YXRlOioqIEkgYW5hbHl6ZWQgYWxsIHJlbGV2YW50IGNvbnRyb2wgZmxvd3MsIGluY2x1ZGluZyBjYXNlcyB3aGVyZSB0aGUgbm9kZSBpcyBjb2FsZXNjZWQgKHJldXNlZCkgb3IgcmV0cmllZCwgYW5kIGFsc28gY2hlY2tlZCBmb3IgYW55IGluZm9ybWF0aW9uIGxlYWtzIG9yIGlzc3VlcyB3aXRoIG1lc3NhZ2UgdHlwZXMgKFYxIHZzLiBWMikuIEl04oCZcyBhbGwgY29uc2lzdGVudCBhbmQgc2FmZS4gVGhlIHVzZSBvZiBgdmhvc3RfaW90bGJfbWlzc19zdGF0ZWAgZW5zdXJlcyBwcm9wZXIgaGFuZGxpbmcgb2YgdGhlIG1lc3NhZ2Ugc3RhdGVzIGFuZCBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMuXG5cbiogICAqKkRhdGEgU3RydWN0dXJlcyBhbmQgSW5pdGlhbGl6YXRpb246KiogSSByZXZpZXdlZCB3aGVyZSBhbmQgaG93IHN0cnVjdHVyZXMgbGlrZSBgdmhvc3RfaW90bGJfbXNnYCBhbmQgYHZob3N0X21zZ19ub2RlYCBhcmUgaW5pdGlhbGl6ZWQsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGltcGFjdCBvZiB0aGUgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggZ3VhcmFudGVlcyB6ZXJvLWluaXRpYWxpemF0aW9uLlxuXG4qICAgKipLTVNBTiBDb25zaWRlcmF0aW9uOioqICBUaGUgY2hhbmdlcyBkbyAqbm90KiBpbnRyb2R1Y2UgS01TQU4gdmlvbGF0aW9ucy4gVGhlIGBtZW1jcHlgIG9wZXJhdGlvbiBpcyBzYWZlIGJlY2F1c2UgdGhlIHNvdXJjZSBgZmlyc3QtXHUwMDNlbXNnX3YyYCBpcyBhbHdheXMgemVyb2VkIChmdWxseSBpbml0aWFsaXplZCkuIFRoZSBsb2dpYyBpcyBzdHJ1Y3R1cmVkIHNvIHRoZXJlIGFyZSBubyBzaXR1YXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtYmVycyB3b3VsZCBnZXQgcmVhZC5cblxuKiAgICoqVW51c2VkIFBhdGggKGZvciB2MSkqKiBUaGUgb2xkZXIgY29kZSBwYXRoIHRvIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlIG5vIGxvbmdlciB1c2VzIHRoZSBgbWVtY3B5YCBhbmQgZG9lcyBub3QgdXNlIGBzbmFwc2hvdGAuIFRoaXMgYXZvaWRzIHVubmVjZXNzYXJ5IGNvcGllcy5cblxuKiAgICoqYHZob3N0X3VudHJhY2tfaW90bGJfbWlzc2AgVXNhZ2U6KiogIFRoZSBmdW5jdGlvbiBgdmhvc3RfdW50cmFja19pb3RsYl9taXNzYCBpcyB1c2VkIHByb3Blcmx5IHRvIHRyYWNrIHRoZSBwb2ludGVycywgYW5kIGlzIGhhbmRsZWQgaW4gYSB3YXkgdGhhdCBhdm9pZHMgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgbGlrZSB1c2UtYWZ0ZXItZnJlZSBidWdzIHdoZW4gdGhlIHZob3N0IG1lc3NhZ2Ugbm9kZXMgYXJlIGZyZWVkIG9yIHVudHJhY2tlZC5cblxuSW4gc2hvcnRcblxuIiwiSW5wdXRUb2tlbnMiOjc3Nzg1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTg1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNToxODozMC4xNzk1NTU0OTlaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNDgyNzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X2RlcXVldWVfbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3Qvdmhvc3QuYz0zNTA4PUVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2VucXVldWVfbXNnKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUwOS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzUxMDpzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKnZob3N0X2RlcXVldWVfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUxMS1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTI1LX1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzUyNjpFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kZXF1ZXVlX21zZyk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MjctXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg9MjczPXZvaWQgdmhvc3RfZW5xdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LFxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5oLTI3NS1cXHRcXHQgICAgICAgc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg6Mjc2OnN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqdmhvc3RfZGVxdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC0yNzctXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNToxODozMC4yNzAwNDQ3NDNaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2NzQ0MjAzOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIENyb3NzLURyaXZlciBEZXBlbmRlbmN5KipcblxuQWxyaWdodCwgdGhpcyBmdW5jdGlvbiBoYXMgYmVlbiBgRVhQT1JUX1NZTUJPTGAnZCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gSXQncyBkZXNpZ25lZCB0byBiZSBleHRlcm5hbGx5IGFjY2Vzc2libGUsIG1lYW5pbmcgb3RoZXIgdmhvc3QgZHJpdmVycyBjb3VsZCBwb3RlbnRpYWxseSBiZSBsZXZlcmFnaW5nIGl0LiBUaGlzIG5lY2Vzc2l0YXRlcyBhIGNhcmVmdWwgbG9vayBhdCB1cHN0cmVhbSB1c2FnZS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiBgdmhvc3RfbmV0YCwgYHZob3N0X3Njc2lgLCBvciBgdmhvc3RfdnNvY2tgIOKAkyBvciBwZXJoYXBzIGV2ZW4gc29tZSBvdGhlciBsZXNzIGNvbW1vbiB2aG9zdCBpbXBsZW1lbnRhdGlvbnMg4oCTIGFyZSBkZXBlbmRpbmcgb24gdGhpcyBmdW5jdGlvbidzIGJlaGF2aW9yLiBJIG5lZWQgdG8gdHJhY2UgdGhlIHJlZmVyZW5jZXMgdG8gZW5zdXJlIHRoYXQgYW55IG1vZGlmaWNhdGlvbiBoZXJlIHdvbid0IGNyZWF0ZSBhbiB1bmV4cGVjdGVkIHJlZ3Jlc3Npb24gaW4gYSBzZWVtaW5nbHkgdW5yZWxhdGVkIGFyZWEgb2YgdGhlIHZob3N0IHN1YnN5c3RlbS4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hvJ3MgY2FsbGluZyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkwMDcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNToyNDozNy4wMTQyNTM2OVoiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNzA3ODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X2RlcXVldWVfbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3Qvdmhvc3QuYz0zNTA4PUVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2VucXVldWVfbXNnKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUwOS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzUxMDpzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKnZob3N0X2RlcXVldWVfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUxMS1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTI1LX1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzUyNjpFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kZXF1ZXVlX21zZyk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MjctXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg9MjczPXZvaWQgdmhvc3RfZW5xdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LFxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5oLTI3NS1cXHRcXHQgICAgICAgc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg6Mjc2OnN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqdmhvc3RfZGVxdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC0yNzctXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNToyNDozNy4xMTc5NjYzNDJaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY3MzMxOTY5MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gSnVzdGlmaWNhdGlvbiBmb3IgVmhvc3QgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYHZob3N0X2RlcXVldWVfbXNnYCBpc24ndCB1c2VkICphbnl3aGVyZSogaW4gdGhlIGBkcml2ZXJzL3Zob3N0L2AgZGlyZWN0b3J5LCB3aGljaCBpcyBpbnRlcmVzdGluZy4gIGB2aG9zdF9jaHJfcmVhZF9pdGVyYCB1c2VkIHRvIGNhbGwgaXQsIGJ1dCBub3QgYW55bW9yZSBmb3IgdGhlIGByZWFkX2xpc3RgLiAgSXMgaXQgYmVpbmcgdXNlZCB3aXRoIGBwZW5kaW5nX2xpc3RgPyBOb3BlLCBgdmhvc3RfY2hyX3JlYWRfaXRlcmAgaXNuJ3QgdG91Y2hpbmcgdGhhdCBxdWV1ZSB3aXRoIHRoaXMgZnVuY3Rpb24uIEFoYSEgSSByZW1lbWJlciBub3cgLSBgcGVuZGluZ19saXN0YCBpcyBjbGVhcmVkIGluIGB2aG9zdF9jbGVhcl9tc2dgIGFuZCBgdmhvc3RfaW90bGJfbm90aWZ5X3ZxYC5cblxuU28sIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBJT1RMQiBtaXNzIGZsb29kIHZ1bG5lcmFiaWxpdHksIG9yIHJldHJ5IHByb2JsZW1zLlxuXG5Dcml0aWNhbGx5LCB0aGUgcGF0Y2ggKmRvZXNuJ3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MsIGFuZCBJIG5lZWQgdG8gZG9jdW1lbnQgdGhlIHJlYXNvbmluZy4gVGhlIGBzbmFwc2hvdGAgdW5pb24gaXMgY29tcGxldGVseSBwb3B1bGF0ZWQgdGhyb3VnaCBhIGBtZW1jcHlgIGZyb20gYSBmdWxseSB6ZXJvZWQgYHN0cnVjdCB2aG9zdF9tc2dfbm9kZWAgdGhhdCB3YXMgYGt6YWxsb2Nfb2JqYCBhbGxvY2F0ZWQgYW5kIHplcm9lZC4gIFdlIGFyZSBub3QgcHVsbGluZyBhbnkgc3RhbGUgZGF0YSwgbm9yIGFyZSB3ZSBsZWFraW5nIGFueSB1bmluaXRpYWxpemVkIHBhZGRpbmcuICBUaGUgYHN0cnVjdCB2aG9zdF9tc2dgIHBhZGRpbmcsIGFuZCBhbnkgcGFkZGluZyBpbiB0aGUgYHN0cnVjdCB2aG9zdF9tc2dfdjJgLCBpcyBhbHNvIHplcm9lZC4gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIHVzZWQgaW4gYW55IGNvbmRpdGlvbmFsIGxvZ2ljLCBhbmQgdGhlcmUgYXJlIG5vIGNvbXBsZXggc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGVyZSBhcmUgbm8gYm91bmRzIGNoZWNrIGlzc3VlcyBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG1lbW9yeSBsZWFrcyBmcm9tIHVuaW5pdGlhbGl6ZWQgYnVmZmVycy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gc2l6ZXMgdGhvdWdoLiBMZXQgbWUgY2hlY2sgdGhlIGBzbmFwc2hvdGAgdW5pb24gc2l6ZSBhbmQgdGhlIGBjb3B5X3RvX2l0ZXJfZnVsbGAgY2FsbC5cblxuYGBgY1xuXHR1bmlvbiB7XG5cdFx0c3RydWN0IHZob3N0X21zZyBtc2c7XG5cdFx0c3RydWN0IHZob3N0X21zZ192MiBtc2dfdjI7XG5cdH0gc25hcHNob3Q7XG5gYGBcblxuYHNpemVvZihzbmFwc2hvdClgIGlzIHRoZSBtYXhpbXVtIG9mIHRoZSBzaXplcyBvZiB0aGUgdHdvIHN0cnVjdHVyZXMgd2l0aGluIHRoZSB1bmlvbi4gYHNpemVvZihzdHJ1Y3Qgdmhvc3RfbXNnKWAgaXMgNCAodHlwZSkgKyA0IChwYWRkaW5nKSArIDY0ICh1bmlvbikgPSA3MiBieXRlcy4gYHNpemVvZihzdHJ1Y3Qgdmhvc3RfbXNnX3YyKWAgaXMgNCAodHlwZSkgKyA0IChhc2lkKSArIDY0ICh1bmlvbikgPSA3MiBieXRlcy4gIFNvLCBib3RoIGFyZSA3MiBieXRlcy4gIFRoZSBgc2l6ZWAgYXJndW1lbnQgaW4gdGhlIGBtZW1jcHlgIGlzIGVpdGhlciBgc2l6ZW9mKGZpcnN0LVx1MDAzZW1zZ192MilgICg3Mikgb3IgYHNpemVvZihmaXJzdC1cdTAwM2Vtc2cpYCAoNzIpLCBzbyBhbHdheXMgNzIgYnl0ZXMuICBUaGUgYG1lbWNweShcdTAwMjZzbmFwc2hvdC5tc2dfdjIsIFx1MDAyNmZpcnN0LVx1MDAzZW1zZ192Miwgc2l6ZSk7YCBjb3BpZXMgNzIgYnl0ZXMsIGFuZCB0aGUgYGNvcHlfdG9faXRlcl9mdWxsYCBhbHNvIGNvcGllcyA3MiBieXRlcy4gIEV2ZXJ5dGhpbmcgaXMgcGVyZmVjdGx5IHNpemVkIGFuZCBpbml0aWFsaXplZC4gTm8gaXNzdWVzLlxuXG5UaGVyZWZvcmUsIHRoZSByZWFzb25pbmcgaXMgYXMgZm9sbG93czpcblxuMS4gIEEgbG9jYWwgYHNuYXBzaG90YCB1bmlvbiBpcyBpbnRyb2R1Y2VkIGFuZCBjb3BpZWQgdG8gdXNlciBzcGFjZSBpbiBgdmhvc3RfY2hyX3JlYWRfaXRlcmAuXG4yLiAgYHNuYXBzaG90YCBpcyBwb3B1bGF0ZWQgdXNpbmcgYG1lbWNweWAgZnJvbSBgZmlyc3QtXHUwMDNlbXNnX3YyYCBvciBgZmlyc3QtXHUwMDNlbXNnYC5cbjMuICBgZmlyc3RgIGlzIGEgYHN0cnVjdCB2aG9zdF9tc2dfbm9kZWAgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCBpbiBgdmhvc3RfbmV3X21zZ2AsIHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIGVudGlyZSBzdHJ1Y3R1cmUuXG40LiAgSWYgYHZob3N0X3NldF9pb3RsYl9taXNzYCBjaGFuZ2VzIHRoZSBtZXNzYWdlIHR5cGUsIGl0IGV4cGxpY2l0bHkgemVybydzIHRoZSBlbnRpcmUgbWVzc2FnZS5cbjUuIFRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIHRvIHVzZXIgc3BhY2UgKGBzaXplYCkgbWF0Y2hlcyB0aGUgaW5pdGlhbGl6ZWQgbWVzc2FnZSBzdHJ1Y3R1cmUuXG42LiBUaHVzLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBjYW4gbGVhayB0byB1c2VyIHNwYWNlLlxuNy4gIFRoZSByZXN0IGZvY3VzZXMgb24gbGlzdCBtYW5pcHVsYXRpb25zLCBgaW90bGJfbWlzc19zdGF0ZWAgdHJhY2tpbmcsIGFuZCBjb2FsZXNjaW5nIGxvZ2ljLCBmb3IgZmxvb2QgY29udHJvbC4gQW55IGJ1Z3MgaGVyZSB3b3VsZCBtYW5pZmVzdCBhcyBsb2dpY2FsIGVycm9ycywgZGVhZGxvY2tzLCBvciBVQUYvT09CIGFjY2Vzc2VzLCBhbmQgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAgYW5kIEtDU0FOLlxuOC4gIFRoZXJlIGlzIG5vIG5lZWQgZm9yIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uXG5cbkknbSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LiBJJ2xsIGludm9rZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTU2MCwiT3V0cHV0VG9rZW5zIjozMTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MjQ6NTMuODUxMTY3Mzk1WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9jYWwgYHNuYXBzaG90YCB1bmlvbiBpbiBgdmhvc3RfY2hyX3JlYWRfaXRlcmAgd2hpY2ggaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgdmlhIGBjb3B5X3RvX2l0ZXJfZnVsbGAuIEhvd2V2ZXIsIHRoaXMgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyBiZWNhdXNlOlxcbjEuIFRoZSBgc25hcHNob3RgIGlzIHBvcHVsYXRlZCB1c2luZyBgbWVtY3B5YCBmcm9tIGFuIGV4aXN0aW5nIG1lc3NhZ2Ugbm9kZSAoYGZpcnN0LVxcdTAwM2Vtc2dfdjJgIG9yIGBmaXJzdC1cXHUwMDNlbXNnYCkuXFxuMi4gVGhlIHNvdXJjZSBtZXNzYWdlIG5vZGUgaXMgYWxsb2NhdGVkIGluIGB2aG9zdF9uZXdfbXNnYCB1c2luZyBga3phbGxvY2AgKHZpYSBga3phbGxvY19vYmpgKSwgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBlbnRpcmUgc3RydWN0dXJlLCBpbmNsdWRpbmcgYW55IGNvbXBpbGVyLWluc2VydGVkIHBhZGRpbmcsIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuXFxuMy4gV2hlbiBhIG1lc3NhZ2UgaXMgcmV1c2VkIGFuZCBpdHMgdHlwZSBjaGFuZ2VzLCBgdmhvc3Rfc2V0X2lvdGxiX21pc3NgIGV4cGxpY2l0bHkgY2FsbHMgYG1lbXNldGAgdG8gemVybyBvdXQgdGhlIG1lc3NhZ2UgZmllbGRzLCBlbnN1cmluZyBubyBzdGFsZSBkYXRhIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyByZW1haW5zLlxcbjQuIFRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIHRvIHVzZXIgc3BhY2UgZXhhY3RseSBtYXRjaGVzIHRoZSBzaXplIG9mIHRoZSBmdWxseSBpbml0aWFsaXplZCBtZXNzYWdlIHN0cnVjdHVyZS5cXG5cXG5UaGUgcmVtYWluZGVyIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBsaXN0IG1hbmlwdWxhdGlvbnMsIHN0YXRlIHRyYWNraW5nIChgaW90bGJfbWlzc19zdGF0ZWApLCBhbmQgY29hbGVzY2luZyBsb2dpYyB0byBwcmV2ZW50IElPVExCIG1pc3MgZmxvb2RzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGxpc3QgY29ycnVwdGlvbiwgb3IgZGVhZGxvY2tzKSBhcmUgcGVyZmVjdGx5IHN1aXRlZCBmb3Igc3RhbmRhcmQgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NhbCBgc25hcHNob3RgIHVuaW9uIGluIGB2aG9zdF9jaHJfcmVhZF9pdGVyYCB3aGljaCBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSB2aWEgYGNvcHlfdG9faXRlcl9mdWxsYC4gSG93ZXZlciwgdGhpcyBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIGJlY2F1c2U6XFxuMS4gVGhlIGBzbmFwc2hvdGAgaXMgcG9wdWxhdGVkIHVzaW5nIGBtZW1jcHlgIGZyb20gYW4gZXhpc3RpbmcgbWVzc2FnZSBub2RlIChgZmlyc3QtXFx1MDAzZW1zZ192MmAgb3IgYGZpcnN0LVxcdTAwM2Vtc2dgKS5cXG4yLiBUaGUgc291cmNlIG1lc3NhZ2Ugbm9kZSBpcyBhbGxvY2F0ZWQgaW4gYHZob3N0X25ld19tc2dgIHVzaW5nIGBremFsbG9jYCAodmlhIGBremFsbG9jX29iamApLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIGVudGlyZSBzdHJ1Y3R1cmUsIGluY2x1ZGluZyBhbnkgY29tcGlsZXItaW5zZXJ0ZWQgcGFkZGluZywgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC5cXG4zLiBXaGVuIGEgbWVzc2FnZSBpcyByZXVzZWQgYW5kIGl0cyB0eXBlIGNoYW5nZXMsIGB2aG9zdF9zZXRfaW90bGJfbWlzc2AgZXhwbGljaXRseSBjYWxscyBgbWVtc2V0YCB0byB6ZXJvIG91dCB0aGUgbWVzc2FnZSBmaWVsZHMsIGVuc3VyaW5nIG5vIHN0YWxlIGRhdGEgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nIHJlbWFpbnMuXFxuNC4gVGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBleGFjdGx5IG1hdGNoZXMgdGhlIHNpemUgb2YgdGhlIGZ1bGx5IGluaXRpYWxpemVkIG1lc3NhZ2Ugc3RydWN0dXJlLlxcblxcblRoZSByZW1haW5kZXIgb2YgdGhlIHBhdGNoIGludm9sdmVzIGxpc3QgbWFuaXB1bGF0aW9ucywgc3RhdGUgdHJhY2tpbmcgKGBpb3RsYl9taXNzX3N0YXRlYCksIGFuZCBjb2FsZXNjaW5nIGxvZ2ljIHRvIHByZXZlbnQgSU9UTEIgbWlzcyBmbG9vZHMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgbGlzdCBjb3JydXB0aW9uLCBvciBkZWFkbG9ja3MpIGFyZSBwZXJmZWN0bHkgc3VpdGVkIGZvciBzdGFuZGFyZCBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow25n6q[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 14:18:44 +0000 UTC FinishedAt: 2026-08-10 15:24:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_NET", "VHOST_VSOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_NET", "VHOST_VSOCK" ], "series_id": "7e5d7f22-3161-4b3f-a71a-6e26ca96ac05" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "vhost_chr_read_iter", "vhost_init_device_iotlb", "vhost_clear_msg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9ORVQmIzM0OywKICAgICYjMzQ7VkhPU1RfVlNPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF9jaHJfcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O3Zob3N0X2luaXRfZGV2aWNlX2lvdGxiJiMzNDssCiAgICAmIzM0O3Zob3N0X2NsZWFyX21zZyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NhbCBgc25hcHNob3RgIHVuaW9uIGluIGB2aG9zdF9jaHJfcmVhZF9pdGVyYCB3aGljaCBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSB2aWEgYGNvcHlfdG9faXRlcl9mdWxsYC4gSG93ZXZlciwgdGhpcyBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIGJlY2F1c2U6XG4xLiBUaGUgYHNuYXBzaG90YCBpcyBwb3B1bGF0ZWQgdXNpbmcgYG1lbWNweWAgZnJvbSBhbiBleGlzdGluZyBtZXNzYWdlIG5vZGUgKGBmaXJzdC1cdTAwM2Vtc2dfdjJgIG9yIGBmaXJzdC1cdTAwM2Vtc2dgKS5cbjIuIFRoZSBzb3VyY2UgbWVzc2FnZSBub2RlIGlzIGFsbG9jYXRlZCBpbiBgdmhvc3RfbmV3X21zZ2AgdXNpbmcgYGt6YWxsb2NgICh2aWEgYGt6YWxsb2Nfb2JqYCksIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB0aGUgZW50aXJlIHN0cnVjdHVyZSwgaW5jbHVkaW5nIGFueSBjb21waWxlci1pbnNlcnRlZCBwYWRkaW5nLCBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkLlxuMy4gV2hlbiBhIG1lc3NhZ2UgaXMgcmV1c2VkIGFuZCBpdHMgdHlwZSBjaGFuZ2VzLCBgdmhvc3Rfc2V0X2lvdGxiX21pc3NgIGV4cGxpY2l0bHkgY2FsbHMgYG1lbXNldGAgdG8gemVybyBvdXQgdGhlIG1lc3NhZ2UgZmllbGRzLCBlbnN1cmluZyBubyBzdGFsZSBkYXRhIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyByZW1haW5zLlxuNC4gVGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBleGFjdGx5IG1hdGNoZXMgdGhlIHNpemUgb2YgdGhlIGZ1bGx5IGluaXRpYWxpemVkIG1lc3NhZ2Ugc3RydWN0dXJlLlxuXG5UaGUgcmVtYWluZGVyIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBsaXN0IG1hbmlwdWxhdGlvbnMsIHN0YXRlIHRyYWNraW5nIChgaW90bGJfbWlzc19zdGF0ZWApLCBhbmQgY29hbGVzY2luZyBsb2dpYyB0byBwcmV2ZW50IElPVExCIG1pc3MgZmxvb2RzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGxpc3QgY29ycnVwdGlvbiwgb3IgZGVhZGxvY2tzKSBhcmUgcGVyZmVjdGx5IHN1aXRlZCBmb3Igc3RhbmRhcmQgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN0YXRlIG1hY2hpbmUgZm9yIGhhbmRsaW5nIHZob3N0IElPVExCIG1pc3NlcywgY29hbGVzY2luZyBkdXBsaWNhdGUgbWlzcyBtZXNzYWdlcyB0byB1c2Vyc3BhY2UuIFRoaXMgaW52b2x2ZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgdmhvc3QgY29kZSwgc3BlY2lmaWNhbGx5IGluIHRoZSBjaGFyYWN0ZXIgZGV2aWNlIHJlYWQgaGFuZGxlciAodmhvc3RfY2hyX3JlYWRfaXRlciksIGRldmljZSBpbml0aWFsaXphdGlvbiAodmhvc3RfaW5pdF9kZXZpY2VfaW90bGIpLCBhbmQgbWVzc2FnZSBjbGVhcmluZyAodmhvc3RfY2xlYXJfbXNnKS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdmhvc3QgZGV2aWNlIG5vZGVzIChlLmcuLCAvZGV2L3Zob3N0LW5ldCwgL2Rldi92aG9zdC12c29jaykgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgc3RhdGUgbWFjaGluZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgZGVhZGxvY2tzLCBtZW1vcnkgbGVha3MsIG9yIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRhYmI3MTk5ZDU0OTEwYTY4MTk1MmVmOGZkODU4ZGNkZDc3N2Y1OTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxNTowODo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmMgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcbmluZGV4IDRjNTI1YjNlMTZlYWQuLmVhYjkwNGI0YjQ4NGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuY1xuQEAgLTM0LDYgJiM0MzszNCwxMyBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3Zob3N0LmhcJiMzNDtcbiBcbiYjNDM7ZW51bSB2aG9zdF9pb3RsYl9taXNzX3N0YXRlIHtcbiYjNDM7XHRWSE9TVF9JT1RMQl9NSVNTX05PTkUsXG4mIzQzO1x0VkhPU1RfSU9UTEJfTUlTU19SRUFELFxuJiM0MztcdFZIT1NUX0lPVExCX01JU1NfUkVBRElORyxcbiYjNDM7XHRWSE9TVF9JT1RMQl9NSVNTX1BFTkRJTkcsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyB1c2hvcnQgbWF4X21lbV9yZWdpb25zID0gNjQ7XG4gbW9kdWxlX3BhcmFtKG1heF9tZW1fcmVnaW9ucywgdXNob3J0LCAwNDQ0KTtcbiBNT0RVTEVfUEFSTV9ERVNDKG1heF9tZW1fcmVnaW9ucyxcbkBAIC02MTMsNiAmIzQzOzYyMCw5IEBAIHZvaWQgdmhvc3RfZGV2X2luaXQoc3RydWN0IHZob3N0X2RldiAqZGV2LFxuIFx0XHR2cS1cdTAwM2VoZWFkcyA9IE5VTEw7XG4gXHRcdHZxLVx1MDAzZW5oZWFkcyA9IE5VTEw7XG4gXHRcdHZxLVx1MDAzZWRldiA9IGRldjtcbiYjNDM7XHRcdHZxLVx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgPSBWSE9TVF9JT1RMQl9NSVNTX05PTkU7XG4mIzQzO1x0XHR2cS1cdTAwM2Vpb3RsYl9taXNzX3NlcSA9IDA7XG4mIzQzO1x0XHR2cS1cdTAwM2Vpb3RsYl9taXNzX25vZGUgPSBOVUxMO1xuIFx0XHRtdXRleF9pbml0KFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiBcdFx0dmhvc3RfdnFfcmVzZXQoZGV2LCB2cSk7XG4gXHRcdGlmICh2cS1cdTAwM2VoYW5kbGVfa2ljaylcbkBAIC0xMTc3LDYgJiM0MzsxMTg3LDIwIEBAIHZvaWQgdmhvc3RfZGV2X3N0b3Aoc3RydWN0IHZob3N0X2RldiAqZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kZXZfc3RvcCk7XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHZob3N0X3VudHJhY2tfaW90bGJfbWlzcyhzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IG5vZGUtXHUwMDNldnE7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2dnEtXHUwMDNlZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAodnEtXHUwMDNlaW90bGJfbWlzc19ub2RlICE9IG5vZGUpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHZxLVx1MDAzZWlvdGxiX21pc3Nfbm9kZSA9IE5VTEw7XG4mIzQzO1x0dnEtXHUwMDNlaW90bGJfbWlzc19zdGF0ZSA9IFZIT1NUX0lPVExCX01JU1NfTk9ORTtcbiYjNDM7XHR2cS1cdTAwM2Vpb3RsYl9taXNzX3NlcSYjNDM7JiM0Mzs7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCB2aG9zdF9jbGVhcl9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2KVxuIHtcbiBcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSwgKm47XG5AQCAtMTE4NCwxMiAmIzQzOzEyMDgsMTQgQEAgdm9pZCB2aG9zdF9jbGVhcl9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2KVxuIFx0c3Bpbl9sb2NrKFx1MDAyNmRldi1cdTAwM2Vpb3RsYl9sb2NrKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShub2RlLCBuLCBcdTAwMjZkZXYtXHUwMDNlcmVhZF9saXN0LCBub2RlKSB7XG4tXHRcdGxpc3RfZGVsKFx1MDAyNm5vZGUtXHUwMDNlbm9kZSk7XG4mIzQzO1x0XHRsaXN0X2RlbF9pbml0KFx1MDAyNm5vZGUtXHUwMDNlbm9kZSk7XG4mIzQzO1x0XHR2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Mobm9kZSk7XG4gXHRcdGtmcmVlKG5vZGUpO1xuIFx0fVxuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG4sIFx1MDAyNmRldi1cdTAwM2VwZW5kaW5nX2xpc3QsIG5vZGUpIHtcbi1cdFx0bGlzdF9kZWwoXHUwMDI2bm9kZS1cdTAwM2Vub2RlKTtcbiYjNDM7XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2bm9kZS1cdTAwM2Vub2RlKTtcbiYjNDM7XHRcdHZob3N0X3VudHJhY2tfaW90bGJfbWlzcyhub2RlKTtcbiBcdFx0a2ZyZWUobm9kZSk7XG4gXHR9XG4gXG5AQCAtMTU4NSwyMCAmIzQzOzE2MTEsNzMgQEAgc3RhdGljIGlubGluZSBpbnQgdmhvc3RfZ2V0X2Rlc2Moc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4gXHRyZXR1cm4gdmhvc3RfY29weV9mcm9tX3VzZXIodnEsIGRlc2MsIHZxLVx1MDAzZWRlc2MgJiM0MzsgaWR4LCBzaXplb2YoKmRlc2MpKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICpcbiYjNDM7dmhvc3RfZ2V0X2lvdGxiX21zZyhzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAobm9kZS1cdTAwM2Vtc2cudHlwZSA9PSBWSE9TVF9JT1RMQl9NU0dfVjIpXG4mIzQzO1x0XHRyZXR1cm4gXHUwMDI2bm9kZS1cdTAwM2Vtc2dfdjIuaW90bGI7XG4mIzQzO1xuJiM0MztcdHJldHVybiBcdTAwMjZub2RlLVx1MDAzZW1zZy5pb3RsYjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdmhvc3Rfc2V0X2lvdGxiX21pc3Moc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlLCBib29sIHYyLFxuJiM0MztcdFx0XHRcdCB1NjQgaW92YSwgaW50IGFjY2VzcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1zZztcbiYjNDM7XHR1MzIgdHlwZSA9IHYyID8gVkhPU1RfSU9UTEJfTVNHX1YyIDogVkhPU1RfSU9UTEJfTVNHO1xuJiM0MztcbiYjNDM7XHRpZiAobm9kZS1cdTAwM2Vtc2cudHlwZSAhPSB0eXBlKVxuJiM0MztcdFx0bWVtc2V0KFx1MDAyNm5vZGUtXHUwMDNlbXNnX3YyLCAwLCBzaXplb2Yobm9kZS1cdTAwM2Vtc2dfdjIpKTtcbiYjNDM7XHRub2RlLVx1MDAzZW1zZy50eXBlID0gdHlwZTtcbiYjNDM7XHRtc2cgPSB2aG9zdF9nZXRfaW90bGJfbXNnKG5vZGUpO1xuJiM0MztcbiYjNDM7XHRtc2ctXHUwMDNldHlwZSA9IFZIT1NUX0lPVExCX01JU1M7XG4mIzQzO1x0bXNnLVx1MDAzZWlvdmEgPSBpb3ZhO1xuJiM0MztcdG1zZy1cdTAwM2VwZXJtID0gYWNjZXNzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB2aG9zdF9pb3RsYl91cGRhdGVfY292ZXJzKHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKnVwZGF0ZSxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptaXNzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG1pc3MtXHUwMDNldHlwZSA9PSBWSE9TVF9JT1RMQl9NSVNTIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICB1cGRhdGUtXHUwMDNlaW92YSBcdTAwM2M9IG1pc3MtXHUwMDNlaW92YSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgbWlzcy1cdTAwM2Vpb3ZhIC0gdXBkYXRlLVx1MDAzZWlvdmEgXHUwMDNjIHVwZGF0ZS1cdTAwM2VzaXplIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICAodXBkYXRlLVx1MDAzZXBlcm0gXHUwMDI2IG1pc3MtXHUwMDNlcGVybSkgPT0gbWlzcy1cdTAwM2VwZXJtO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHZob3N0X2lvdGxiX25vdGlmeV92cShzdHJ1Y3Qgdmhvc3RfZGV2ICpkLFxuIFx0XHRcdFx0ICBzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2cpXG4ge1xuIFx0c3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlLCAqbjtcbiYjNDM7XHRpbnQgaTtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZkLVx1MDAzZWlvdGxiX2xvY2spO1xuIFxuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGQtXHUwMDNlbnZxczsgJiM0MzsmIzQzO2kpIHtcbiYjNDM7XHRcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gZC1cdTAwM2V2cXNbaV07XG4mIzQzO1xuJiM0MztcdFx0bm9kZSA9IHZxLVx1MDAzZWlvdGxiX21pc3Nfbm9kZTtcbiYjNDM7XHRcdGlmICghbm9kZSB8fFxuJiM0MztcdFx0ICAgICF2aG9zdF9pb3RsYl91cGRhdGVfY292ZXJzKG1zZyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICB2aG9zdF9nZXRfaW90bGJfbXNnKG5vZGUpKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZub2RlLVx1MDAzZW5vZGUpO1xuJiM0MztcdFx0dmhvc3RfdW50cmFja19pb3RsYl9taXNzKG5vZGUpO1xuJiM0MztcdFx0dmhvc3RfcG9sbF9xdWV1ZShcdTAwMjZ2cS1cdTAwM2Vwb2xsKTtcbiYjNDM7XHRcdGtmcmVlKG5vZGUpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobm9kZSwgbiwgXHUwMDI2ZC1cdTAwM2VwZW5kaW5nX2xpc3QsIG5vZGUpIHtcbiBcdFx0c3RydWN0IHZob3N0X2lvdGxiX21zZyAqdnFfbXNnID0gXHUwMDI2bm9kZS1cdTAwM2Vtc2cuaW90bGI7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5vZGUtXHUwMDNldnEtXHUwMDNlaW90bGJfbWlzc19ub2RlID09IG5vZGUpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAobXNnLVx1MDAzZWlvdmEgXHUwMDNjPSB2cV9tc2ctXHUwMDNlaW92YSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIG1zZy1cdTAwM2Vpb3ZhICYjNDM7IG1zZy1cdTAwM2VzaXplIC0gMSBcdTAwM2U9IHZxX21zZy1cdTAwM2Vpb3ZhIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgdnFfbXNnLVx1MDAzZXR5cGUgPT0gVkhPU1RfSU9UTEJfTUlTUykge1xuIFx0XHRcdHZob3N0X3BvbGxfcXVldWUoXHUwMDI2bm9kZS1cdTAwM2V2cS1cdTAwM2Vwb2xsKTtcbi1cdFx0XHRsaXN0X2RlbChcdTAwMjZub2RlLVx1MDAzZW5vZGUpO1xuJiM0MztcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNm5vZGUtXHUwMDNlbm9kZSk7XG4gXHRcdFx0a2ZyZWUobm9kZSk7XG4gXHRcdH1cbiBcdH1cbkBAIC0xNzU1LDkgJiM0MzsxODM0LDE4IEBAIHNzaXplX3Qgdmhvc3RfY2hyX3JlYWRfaXRlcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCBpb3ZfaXRlciAqdG8sXG4gXHRcdFx0ICAgIGludCBub2Jsb2NrKVxuIHtcbiBcdERFRklORV9XQUlUKHdhaXQpO1xuLVx0c3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlO1xuJiM0MztcdHVuaW9uIHtcbiYjNDM7XHRcdHN0cnVjdCB2aG9zdF9tc2cgbXNnO1xuJiM0MztcdFx0c3RydWN0IHZob3N0X21zZ192MiBtc2dfdjI7XG4mIzQzO1x0fSBzbmFwc2hvdDtcbiYjNDM7XHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm1pc3NfdG9rZW4gPSBOVUxMO1xuJiM0MztcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKm1pc3NfdnEgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSA9IE5VTEw7XG4mIzQzO1x0dTY0IG1pc3Nfc2VxID0gMDtcbiBcdHNzaXplX3QgcmV0ID0gMDtcbiBcdHVuc2lnbmVkIHNpemUgPSBzaXplb2Yoc3RydWN0IHZob3N0X21zZyk7XG4mIzQzO1x0Ym9vbCBzaG9ydF9idWZmZXIgPSBmYWxzZTtcbiYjNDM7XHRib29sIHdha2UgPSBmYWxzZTtcbiBcbiBcdGlmIChpb3ZfaXRlcl9jb3VudCh0bykgXHUwMDNjIHNpemUpXG4gXHRcdHJldHVybiAwO1xuQEAgLTE3NjcsOCAmIzQzOzE4NTUsMzYgQEAgc3NpemVfdCB2aG9zdF9jaHJfcmVhZF9pdGVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IGlvdl9pdGVyICp0byxcbiBcdFx0XHRwcmVwYXJlX3RvX3dhaXQoXHUwMDI2ZGV2LVx1MDAzZXdhaXQsIFx1MDAyNndhaXQsXG4gXHRcdFx0XHRcdFRBU0tfSU5URVJSVVBUSUJMRSk7XG4gXG4tXHRcdG5vZGUgPSB2aG9zdF9kZXF1ZXVlX21zZyhkZXYsIFx1MDAyNmRldi1cdTAwM2VyZWFkX2xpc3QpO1xuLVx0XHRpZiAobm9kZSlcbiYjNDM7XHRcdHNwaW5fbG9jayhcdTAwMjZkZXYtXHUwMDNlaW90bGJfbG9jayk7XG4mIzQzO1x0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXJlYWRfbGlzdCkpIHtcbiYjNDM7XHRcdFx0c3RydWN0IHZob3N0X21zZ19ub2RlICpmaXJzdDtcbiYjNDM7XG4mIzQzO1x0XHRcdGZpcnN0ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZkZXYtXHUwMDNlcmVhZF9saXN0LFxuJiM0MztcdFx0XHRcdFx0XHQgc3RydWN0IHZob3N0X21zZ19ub2RlLCBub2RlKTtcbiYjNDM7XHRcdFx0aWYgKGZpcnN0LVx1MDAzZXZxLVx1MDAzZWlvdGxiX21pc3Nfbm9kZSA9PSBmaXJzdCkge1xuJiM0MztcdFx0XHRcdHNpemUgPSBmaXJzdC1cdTAwM2Vtc2cudHlwZSA9PSBWSE9TVF9JT1RMQl9NU0dfVjIgP1xuJiM0MztcdFx0XHRcdCAgICAgICBzaXplb2YoZmlyc3QtXHUwMDNlbXNnX3YyKSA6IHNpemVvZihmaXJzdC1cdTAwM2Vtc2cpO1xuJiM0MztcdFx0XHRcdGlmIChpb3ZfaXRlcl9jb3VudCh0bykgXHUwMDNjIHNpemUpIHtcbiYjNDM7XHRcdFx0XHRcdHNob3J0X2J1ZmZlciA9IHRydWU7XG4mIzQzO1x0XHRcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0XHRcdG1lbWNweShcdTAwMjZzbmFwc2hvdC5tc2dfdjIsIFx1MDAyNmZpcnN0LVx1MDAzZW1zZ192MixcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzaXplKTtcbiYjNDM7XHRcdFx0XHRcdGxpc3RfbW92ZV90YWlsKFx1MDAyNmZpcnN0LVx1MDAzZW5vZGUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZkZXYtXHUwMDNlcGVuZGluZ19saXN0KTtcbiYjNDM7XHRcdFx0XHRcdGZpcnN0LVx1MDAzZXZxLVx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgPVxuJiM0MztcdFx0XHRcdFx0XHRWSE9TVF9JT1RMQl9NSVNTX1JFQURJTkc7XG4mIzQzO1x0XHRcdFx0XHRtaXNzX3ZxID0gZmlyc3QtXHUwMDNldnE7XG4mIzQzO1x0XHRcdFx0XHRtaXNzX3Rva2VuID0gZmlyc3Q7XG4mIzQzO1x0XHRcdFx0XHRtaXNzX3NlcSA9IGZpcnN0LVx1MDAzZXZxLVx1MDAzZWlvdGxiX21pc3Nfc2VxO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmZpcnN0LVx1MDAzZW5vZGUpO1xuJiM0MztcdFx0XHRcdG5vZGUgPSBmaXJzdDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuJiM0MztcbiYjNDM7XHRcdGlmIChub2RlIHx8IG1pc3NfdnEgfHwgc2hvcnRfYnVmZmVyKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRpZiAobm9ibG9jaykge1xuIFx0XHRcdHJldCA9IC1FQUdBSU47XG5AQCAtMTc4OSw2ICYjNDM7MTkwNSwzNCBAQCBzc2l6ZV90IHZob3N0X2Nocl9yZWFkX2l0ZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3QgaW92X2l0ZXIgKnRvLFxuIFx0aWYgKCFub2Jsb2NrKVxuIFx0XHRmaW5pc2hfd2FpdChcdTAwMjZkZXYtXHUwMDNld2FpdCwgXHUwMDI2d2FpdCk7XG4gXG4mIzQzO1x0aWYgKHNob3J0X2J1ZmZlcilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAobWlzc192cSkge1xuJiM0MztcdFx0Ym9vbCBjb3BpZWQgPSBjb3B5X3RvX2l0ZXJfZnVsbChcdTAwMjZzbmFwc2hvdC5tc2dfdjIsIHNpemUsIHRvKTtcbiYjNDM7XG4mIzQzO1x0XHRzcGluX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuJiM0MztcdFx0bm9kZSA9IG1pc3NfdnEtXHUwMDNlaW90bGJfbWlzc19ub2RlO1xuJiM0MztcdFx0aWYgKG5vZGUgPT0gbWlzc190b2tlbiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBtaXNzX3ZxLVx1MDAzZWlvdGxiX21pc3Nfc2VxID09IG1pc3Nfc2VxIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIG1pc3NfdnEtXHUwMDNlaW90bGJfbWlzc19zdGF0ZSA9PSBWSE9TVF9JT1RMQl9NSVNTX1JFQURJTkcpIHtcbiYjNDM7XHRcdFx0aWYgKGNvcGllZCkge1xuJiM0MztcdFx0XHRcdG1pc3NfdnEtXHUwMDNlaW90bGJfbWlzc19zdGF0ZSA9XG4mIzQzO1x0XHRcdFx0XHRWSE9TVF9JT1RMQl9NSVNTX1BFTkRJTkc7XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2bm9kZS1cdTAwM2Vub2RlLCBcdTAwMjZkZXYtXHUwMDNlcmVhZF9saXN0KTtcbiYjNDM7XHRcdFx0XHRtaXNzX3ZxLVx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgPSBWSE9TVF9JT1RMQl9NSVNTX1JFQUQ7XG4mIzQzO1x0XHRcdFx0d2FrZSA9IHRydWU7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmRldi1cdTAwM2Vpb3RsYl9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAod2FrZSlcbiYjNDM7XHRcdFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGwoXHUwMDI2ZGV2LVx1MDAzZXdhaXQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIEVQT0xMSU4gfCBFUE9MTFJETk9STSk7XG4mIzQzO1x0XHRyZXR1cm4gY29waWVkID8gc2l6ZSA6IC1FRkFVTFQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChub2RlKSB7XG4gXHRcdHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1zZztcbiBcdFx0dm9pZCAqc3RhcnQgPSBcdTAwMjZub2RlLVx1MDAzZW1zZztcbkBAIC0xODE5LDI5ICYjNDM7MTk2Myw2OSBAQCBzc2l6ZV90IHZob3N0X2Nocl9yZWFkX2l0ZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3QgaW92X2l0ZXIgKnRvLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9jaHJfcmVhZF9pdGVyKTtcbiBcbiYjNDM7c3RhdGljIGJvb2wgdmhvc3RfaW90bGJfbWlzc19jb2FsZXNjZShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgYm9vbCB2MixcbiYjNDM7XHRcdFx0XHQgICAgICB1NjQgaW92YSwgaW50IGFjY2VzcywgYm9vbCAqd2FrZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSA9IHZxLVx1MDAzZWlvdGxiX21pc3Nfbm9kZTtcbiYjNDM7XHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2c7XG4mIzQzO1x0dTMyIHR5cGUgPSB2MiA/IFZIT1NUX0lPVExCX01TR19WMiA6IFZIT1NUX0lPVExCX01TRztcbiYjNDM7XHRib29sIHNhbWU7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2dnEtXHUwMDNlZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5vZGUpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG1zZyA9IHZob3N0X2dldF9pb3RsYl9tc2cobm9kZSk7XG4mIzQzO1x0c2FtZSA9IG5vZGUtXHUwMDNlbXNnLnR5cGUgPT0gdHlwZSBcdTAwMjZcdTAwMjYgbXNnLVx1MDAzZXR5cGUgPT0gVkhPU1RfSU9UTEJfTUlTUyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgbXNnLVx1MDAzZWlvdmEgPT0gaW92YSBcdTAwMjZcdTAwMjYgbXNnLVx1MDAzZXBlcm0gPT0gYWNjZXNzO1xuJiM0MztcdGlmIChzYW1lIFx1MDAyNlx1MDAyNiB2cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlICE9IFZIT1NUX0lPVExCX01JU1NfUkVBRElORylcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAoIXNhbWUpXG4mIzQzO1x0XHR2aG9zdF9zZXRfaW90bGJfbWlzcyhub2RlLCB2MiwgaW92YSwgYWNjZXNzKTtcbiYjNDM7XHR2cS1cdTAwM2Vpb3RsYl9taXNzX3NlcSYjNDM7JiM0Mzs7XG4mIzQzO1x0aWYgKHZxLVx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgIT0gVkhPU1RfSU9UTEJfTUlTU19SRUFEKSB7XG4mIzQzO1x0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZub2RlLVx1MDAzZW5vZGUsIFx1MDAyNnZxLVx1MDAzZWRldi1cdTAwM2VyZWFkX2xpc3QpO1xuJiM0MztcdFx0dnEtXHUwMDNlaW90bGJfbWlzc19zdGF0ZSA9IFZIT1NUX0lPVExCX01JU1NfUkVBRDtcbiYjNDM7XHRcdCp3YWtlID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgdmhvc3RfaW90bGJfbWlzcyhzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgdTY0IGlvdmEsIGludCBhY2Nlc3MpXG4ge1xuIFx0c3RydWN0IHZob3N0X2RldiAqZGV2ID0gdnEtXHUwMDNlZGV2O1xuIFx0c3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlO1xuLVx0c3RydWN0IHZob3N0X2lvdGxiX21zZyAqbXNnO1xuIFx0Ym9vbCB2MiA9IHZob3N0X2JhY2tlbmRfaGFzX2ZlYXR1cmUodnEsIFZIT1NUX0JBQ0tFTkRfRl9JT1RMQl9NU0dfVjIpO1xuJiM0MztcdGJvb2wgd2FrZSA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNmRldi1cdTAwM2Vpb3RsYl9sb2NrKTtcbiYjNDM7XHRpZiAodmhvc3RfaW90bGJfbWlzc19jb2FsZXNjZSh2cSwgdjIsIGlvdmEsIGFjY2VzcywgXHUwMDI2d2FrZSkpIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmRldi1cdTAwM2Vpb3RsYl9sb2NrKTtcbiYjNDM7XHRcdGlmICh3YWtlKVxuJiM0MztcdFx0XHR3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbChcdTAwMjZkZXYtXHUwMDNld2FpdCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgRVBPTExJTiB8IEVQT0xMUkROT1JNKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZkZXYtXHUwMDNlaW90bGJfbG9jayk7XG4gXG4gXHRub2RlID0gdmhvc3RfbmV3X21zZyh2cSwgdjIgPyBWSE9TVF9JT1RMQl9NU0dfVjIgOiBWSE9TVF9JT1RMQl9NU0cpO1xuIFx0aWYgKCFub2RlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR2aG9zdF9zZXRfaW90bGJfbWlzcyhub2RlLCB2MiwgaW92YSwgYWNjZXNzKTtcbiBcbi1cdGlmICh2Mikge1xuLVx0XHRub2RlLVx1MDAzZW1zZ192Mi50eXBlID0gVkhPU1RfSU9UTEJfTVNHX1YyO1xuLVx0XHRtc2cgPSBcdTAwMjZub2RlLVx1MDAzZW1zZ192Mi5pb3RsYjtcbi1cdH0gZWxzZSB7XG4tXHRcdG1zZyA9IFx1MDAyNm5vZGUtXHUwMDNlbXNnLmlvdGxiO1xuLVx0fVxuLVxuLVx0bXNnLVx1MDAzZXR5cGUgPSBWSE9TVF9JT1RMQl9NSVNTO1xuLVx0bXNnLVx1MDAzZWlvdmEgPSBpb3ZhO1xuLVx0bXNnLVx1MDAzZXBlcm0gPSBhY2Nlc3M7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNmRldi1cdTAwM2Vpb3RsYl9sb2NrKTtcbiYjNDM7XHR2cS1cdTAwM2Vpb3RsYl9taXNzX25vZGUgPSBub2RlO1xuJiM0MztcdHZxLVx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgPSBWSE9TVF9JT1RMQl9NSVNTX1JFQUQ7XG4mIzQzO1x0dnEtXHUwMDNlaW90bGJfbWlzc19zZXEmIzQzOyYjNDM7O1xuJiM0MztcdGxpc3RfYWRkX3RhaWwoXHUwMDI2bm9kZS1cdTAwM2Vub2RlLCBcdTAwMjZkZXYtXHUwMDNlcmVhZF9saXN0KTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZkZXYtXHUwMDNlaW90bGJfbG9jayk7XG4gXG4tXHR2aG9zdF9lbnF1ZXVlX21zZyhkZXYsIFx1MDAyNmRldi1cdTAwM2VyZWFkX2xpc3QsIG5vZGUpO1xuJiM0MztcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKFx1MDAyNmRldi1cdTAwM2V3YWl0LCBFUE9MTElOIHwgRVBPTExSRE5PUk0pO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTIyNzAsMjcgJiM0MzsyNDU0LDU5IEBAIGxvbmcgdmhvc3RfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X2RldiAqZCwgdW5zaWduZWQgaW50IGlvY3RsLCB2b2lkIF9fdXNlciAqYXJnXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X3ZyaW5nX2lvY3RsKTtcbiBcbiYjNDM7c3RhdGljIGJvb2wgdmhvc3RfcmV0cnlfaW90bGJfbWlzc2VzKHN0cnVjdCB2aG9zdF9kZXYgKmQpXG4mIzQzO3tcbiYjNDM7XHRib29sIHdha2UgPSBmYWxzZTtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZkLVx1MDAzZWlvdGxiX2xvY2spO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkLVx1MDAzZW52cXM7ICYjNDM7JiM0MztpKSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGQtXHUwMDNldnFzW2ldO1xuJiM0MztcdFx0c3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlID0gdnEtXHUwMDNlaW90bGJfbWlzc19ub2RlO1xuJiM0MztcbiYjNDM7XHRcdGlmICghbm9kZSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0dnEtXHUwMDNlaW90bGJfbWlzc19zZXEmIzQzOyYjNDM7O1xuJiM0MztcdFx0aWYgKHZxLVx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgIT0gVkhPU1RfSU9UTEJfTUlTU19SRUFEKVxuJiM0MztcdFx0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZub2RlLVx1MDAzZW5vZGUsIFx1MDAyNmQtXHUwMDNlcmVhZF9saXN0KTtcbiYjNDM7XHRcdHZxLVx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgPSBWSE9TVF9JT1RMQl9NSVNTX1JFQUQ7XG4mIzQzO1x0XHR3YWtlID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB3YWtlO1xuJiM0Mzt9XG4mIzQzO1xuIGludCB2aG9zdF9pbml0X2RldmljZV9pb3RsYihzdHJ1Y3Qgdmhvc3RfZGV2ICpkKVxuIHtcbiBcdHN0cnVjdCB2aG9zdF9pb3RsYiAqbmlvdGxiLCAqb2lvdGxiO1xuJiM0MztcdGJvb2wgd2FrZTtcbiBcdGludCBpO1xuIFxuIFx0bmlvdGxiID0gaW90bGJfYWxsb2MoKTtcbiBcdGlmICghbmlvdGxiKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiYjNDM7XHR2aG9zdF9kZXZfbG9ja192cXMoZCk7XG4gXHRvaW90bGIgPSBkLVx1MDAzZWlvdGxiO1xuIFx0ZC1cdTAwM2Vpb3RsYiA9IG5pb3RsYjtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGQtXHUwMDNlbnZxczsgJiM0MzsmIzQzO2kpIHtcbiBcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBkLVx1MDAzZXZxc1tpXTtcbiBcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gXHRcdHZxLVx1MDAzZWlvdGxiID0gbmlvdGxiO1xuIFx0XHRfX3Zob3N0X3ZxX21ldGFfcmVzZXQodnEpO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuIFx0fVxuIFxuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZkLVx1MDAzZWlvdGxiX2xvY2spO1xuJiM0MztcdHdha2UgPSB2aG9zdF9yZXRyeV9pb3RsYl9taXNzZXMoZCk7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2ZC1cdTAwM2Vpb3RsYl9sb2NrKTtcbiYjNDM7XHR2aG9zdF9kZXZfdW5sb2NrX3ZxcyhkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHdha2UpXG4mIzQzO1x0XHR3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbChcdTAwMjZkLVx1MDAzZXdhaXQsXG4mIzQzO1x0XHRcdFx0XHQgICBFUE9MTElOIHwgRVBPTExSRE5PUk0pO1xuIFx0dmhvc3RfaW90bGJfZnJlZShvaW90bGIpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMzMwMCw3ICYjNDM7MzUxNiw4IEBAIHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqdmhvc3RfZGVxdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LFxuIFx0aWYgKCFsaXN0X2VtcHR5KGhlYWQpKSB7XG4gXHRcdG5vZGUgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCB2aG9zdF9tc2dfbm9kZSxcbiBcdFx0XHRcdFx0bm9kZSk7XG4tXHRcdGxpc3RfZGVsKFx1MDAyNm5vZGUtXHUwMDNlbm9kZSk7XG4mIzQzO1x0XHRsaXN0X2RlbF9pbml0KFx1MDAyNm5vZGUtXHUwMDNlbm9kZSk7XG4mIzQzO1x0XHR2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Mobm9kZSk7XG4gXHR9XG4gXHRzcGluX3VubG9jayhcdTAwMjZkZXYtXHUwMDNlaW90bGJfbG9jayk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5oIGIvZHJpdmVycy92aG9zdC92aG9zdC5oXG5pbmRleCAwMTkyYWRlNmU3NDkxLi41MGZjY2M4NWQ1OTQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmhcbkBAIC0yOSw2ICYjNDM7MjksNyBAQCBzdHJ1Y3Qgdmhvc3Rfd29yayB7XG4gXG4gc3RydWN0IHZob3N0X3dvcmtlcjtcbiBzdHJ1Y3Qgdmhvc3RfZGV2O1xuJiM0MztzdHJ1Y3Qgdmhvc3RfbXNnX25vZGU7XG4gXG4gc3RydWN0IHZob3N0X3dvcmtlcl9vcHMge1xuIFx0aW50ICgqY3JlYXRlKShzdHJ1Y3Qgdmhvc3Rfd29ya2VyICp3b3JrZXIsIHN0cnVjdCB2aG9zdF9kZXYgKmRldixcbkBAIC0xNjMsNyAmIzQzOzE2NCwxMiBAQCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlIHtcbiBcdC8qIFJpbmcgZW5kaWFubmVzcyByZXF1ZXN0ZWQgYnkgdXNlcnNwYWNlIGZvciBjcm9zcy1lbmRpYW4gc3VwcG9ydC4gKi9cbiBcdGJvb2wgdXNlcl9iZTtcbiAjZW5kaWZcbiYjNDM7XHQvKiBQcm90ZWN0ZWQgYnkgZGV2LVx1MDAzZWlvdGxiX2xvY2suICovXG4mIzQzO1x0dTggaW90bGJfbWlzc19zdGF0ZTtcbiBcdHUzMiBidXN5bG9vcF90aW1lb3V0O1xuJiM0MztcdC8qIFByb3RlY3RlZCBieSBkZXYtXHUwMDNlaW90bGJfbG9jay4gKi9cbiYjNDM7XHR1NjQgaW90bGJfbWlzc19zZXE7XG4mIzQzO1x0c3RydWN0IHZob3N0X21zZ19ub2RlICppb3RsYl9taXNzX25vZGU7XG4gfTtcbiBcbiBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9ORVQmIzM0OywKICAgICYjMzQ7VkhPU1RfVlNPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF9jaHJfcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O3Zob3N0X2luaXRfZGV2aWNlX2lvdGxiJiMzNDssCiAgICAmIzM0O3Zob3N0X2NsZWFyX21zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN0YXRlIG1hY2hpbmUgZm9yIGhhbmRsaW5nIHZob3N0IElPVExCIG1pc3NlcywgY29hbGVzY2luZyBkdXBsaWNhdGUgbWlzcyBtZXNzYWdlcyB0byB1c2Vyc3BhY2UuIFRoaXMgaW52b2x2ZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgdmhvc3QgY29kZSwgc3BlY2lmaWNhbGx5IGluIHRoZSBjaGFyYWN0ZXIgZGV2aWNlIHJlYWQgaGFuZGxlciAodmhvc3RfY2hyX3JlYWRfaXRlciksIGRldmljZSBpbml0aWFsaXphdGlvbiAodmhvc3RfaW5pdF9kZXZpY2VfaW90bGIpLCBhbmQgbWVzc2FnZSBjbGVhcmluZyAodmhvc3RfY2xlYXJfbXNnKS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdmhvc3QgZGV2aWNlIG5vZGVzIChlLmcuLCAvZGV2L3Zob3N0LW5ldCwgL2Rldi92aG9zdC12c29jaykgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgc3RhdGUgbWFjaGluZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgZGVhZGxvY2tzLCBtZW1vcnkgbGVha3MsIG9yIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRhYmI3MTk5ZDU0OTEwYTY4MTk1MmVmOGZkODU4ZGNkZDc3N2Y1OTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAxNTowODo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYwppbmRleCA0YzUyNWIzZTE2ZWFkLi5lYWI5MDRiNGI0ODRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC92aG9zdC5jCkBAIC0zNCw2ICYjNDM7MzQsMTMgQEAKIAogI2luY2x1ZGUgJiMzNDt2aG9zdC5oJiMzNDsKIAomIzQzO2VudW0gdmhvc3RfaW90bGJfbWlzc19zdGF0ZSB7CiYjNDM7CVZIT1NUX0lPVExCX01JU1NfTk9ORSwKJiM0MzsJVkhPU1RfSU9UTEJfTUlTU19SRUFELAomIzQzOwlWSE9TVF9JT1RMQl9NSVNTX1JFQURJTkcsCiYjNDM7CVZIT1NUX0lPVExCX01JU1NfUEVORElORywKJiM0Mzt9OwomIzQzOwogc3RhdGljIHVzaG9ydCBtYXhfbWVtX3JlZ2lvbnMgPSA2NDsKIG1vZHVsZV9wYXJhbShtYXhfbWVtX3JlZ2lvbnMsIHVzaG9ydCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1heF9tZW1fcmVnaW9ucywKQEAgLTYxMyw2ICYjNDM7NjIwLDkgQEAgdm9pZCB2aG9zdF9kZXZfaW5pdChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsCiAJCXZxLSZndDtoZWFkcyA9IE5VTEw7CiAJCXZxLSZndDtuaGVhZHMgPSBOVUxMOwogCQl2cS0mZ3Q7ZGV2ID0gZGV2OwomIzQzOwkJdnEtJmd0O2lvdGxiX21pc3Nfc3RhdGUgPSBWSE9TVF9JT1RMQl9NSVNTX05PTkU7CiYjNDM7CQl2cS0mZ3Q7aW90bGJfbWlzc19zZXEgPSAwOwomIzQzOwkJdnEtJmd0O2lvdGxiX21pc3Nfbm9kZSA9IE5VTEw7CiAJCW11dGV4X2luaXQoJmFtcDt2cS0mZ3Q7bXV0ZXgpOwogCQl2aG9zdF92cV9yZXNldChkZXYsIHZxKTsKIAkJaWYgKHZxLSZndDtoYW5kbGVfa2ljaykKQEAgLTExNzcsNiAmIzQzOzExODcsMjAgQEAgdm9pZCB2aG9zdF9kZXZfc3RvcChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpCiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kZXZfc3RvcCk7CiAKJiM0MztzdGF0aWMgdm9pZCB2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Moc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlKQomIzQzO3sKJiM0MzsJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBub2RlLSZndDt2cTsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3ZxLSZndDtkZXYtJmd0O2lvdGxiX2xvY2spOwomIzQzOwomIzQzOwlpZiAodnEtJmd0O2lvdGxiX21pc3Nfbm9kZSAhPSBub2RlKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl2cS0mZ3Q7aW90bGJfbWlzc19ub2RlID0gTlVMTDsKJiM0MzsJdnEtJmd0O2lvdGxiX21pc3Nfc3RhdGUgPSBWSE9TVF9JT1RMQl9NSVNTX05PTkU7CiYjNDM7CXZxLSZndDtpb3RsYl9taXNzX3NlcSYjNDM7JiM0Mzs7CiYjNDM7fQomIzQzOwogdm9pZCB2aG9zdF9jbGVhcl9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2KQogewogCXN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSwgKm47CkBAIC0xMTg0LDEyICYjNDM7MTIwOCwxNCBAQCB2b2lkIHZob3N0X2NsZWFyX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpCiAJc3Bpbl9sb2NrKCZhbXA7ZGV2LSZndDtpb3RsYl9sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShub2RlLCBuLCAmYW1wO2Rldi0mZ3Q7cmVhZF9saXN0LCBub2RlKSB7Ci0JCWxpc3RfZGVsKCZhbXA7bm9kZS0mZ3Q7bm9kZSk7CiYjNDM7CQlsaXN0X2RlbF9pbml0KCZhbXA7bm9kZS0mZ3Q7bm9kZSk7CiYjNDM7CQl2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Mobm9kZSk7CiAJCWtmcmVlKG5vZGUpOwogCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShub2RlLCBuLCAmYW1wO2Rldi0mZ3Q7cGVuZGluZ19saXN0LCBub2RlKSB7Ci0JCWxpc3RfZGVsKCZhbXA7bm9kZS0mZ3Q7bm9kZSk7CiYjNDM7CQlsaXN0X2RlbF9pbml0KCZhbXA7bm9kZS0mZ3Q7bm9kZSk7CiYjNDM7CQl2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Mobm9kZSk7CiAJCWtmcmVlKG5vZGUpOwogCX0KIApAQCAtMTU4NSwyMCAmIzQzOzE2MTEsNzMgQEAgc3RhdGljIGlubGluZSBpbnQgdmhvc3RfZ2V0X2Rlc2Moc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsCiAJcmV0dXJuIHZob3N0X2NvcHlfZnJvbV91c2VyKHZxLCBkZXNjLCB2cS0mZ3Q7ZGVzYyAmIzQzOyBpZHgsIHNpemVvZigqZGVzYykpOwogfQogCiYjNDM7c3RhdGljIHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKgomIzQzO3Zob3N0X2dldF9pb3RsYl9tc2coc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlKQomIzQzO3sKJiM0MzsJaWYgKG5vZGUtJmd0O21zZy50eXBlID09IFZIT1NUX0lPVExCX01TR19WMikKJiM0MzsJCXJldHVybiAmYW1wO25vZGUtJmd0O21zZ192Mi5pb3RsYjsKJiM0MzsKJiM0MzsJcmV0dXJuICZhbXA7bm9kZS0mZ3Q7bXNnLmlvdGxiOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB2aG9zdF9zZXRfaW90bGJfbWlzcyhzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUsIGJvb2wgdjIsCiYjNDM7CQkJCSB1NjQgaW92YSwgaW50IGFjY2VzcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1zZzsKJiM0MzsJdTMyIHR5cGUgPSB2MiA/IFZIT1NUX0lPVExCX01TR19WMiA6IFZIT1NUX0lPVExCX01TRzsKJiM0MzsKJiM0MzsJaWYgKG5vZGUtJmd0O21zZy50eXBlICE9IHR5cGUpCiYjNDM7CQltZW1zZXQoJmFtcDtub2RlLSZndDttc2dfdjIsIDAsIHNpemVvZihub2RlLSZndDttc2dfdjIpKTsKJiM0MzsJbm9kZS0mZ3Q7bXNnLnR5cGUgPSB0eXBlOwomIzQzOwltc2cgPSB2aG9zdF9nZXRfaW90bGJfbXNnKG5vZGUpOwomIzQzOwomIzQzOwltc2ctJmd0O3R5cGUgPSBWSE9TVF9JT1RMQl9NSVNTOwomIzQzOwltc2ctJmd0O2lvdmEgPSBpb3ZhOwomIzQzOwltc2ctJmd0O3Blcm0gPSBhY2Nlc3M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHZob3N0X2lvdGxiX3VwZGF0ZV9jb3ZlcnMoc3RydWN0IHZob3N0X2lvdGxiX21zZyAqdXBkYXRlLAomIzQzOwkJCQkgICAgICBzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptaXNzKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1pc3MtJmd0O3R5cGUgPT0gVkhPU1RfSU9UTEJfTUlTUyAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICB1cGRhdGUtJmd0O2lvdmEgJmx0Oz0gbWlzcy0mZ3Q7aW92YSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBtaXNzLSZndDtpb3ZhIC0gdXBkYXRlLSZndDtpb3ZhICZsdDsgdXBkYXRlLSZndDtzaXplICZhbXA7JmFtcDsKJiM0MzsJICAgICAgICh1cGRhdGUtJmd0O3Blcm0gJmFtcDsgbWlzcy0mZ3Q7cGVybSkgPT0gbWlzcy0mZ3Q7cGVybTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB2aG9zdF9pb3RsYl9ub3RpZnlfdnEoc3RydWN0IHZob3N0X2RldiAqZCwKIAkJCQkgIHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1zZykKIHsKIAlzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUsICpuOwomIzQzOwlpbnQgaTsKIAogCXNwaW5fbG9jaygmYW1wO2QtJmd0O2lvdGxiX2xvY2spOwogCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBkLSZndDtudnFzOyAmIzQzOyYjNDM7aSkgewomIzQzOwkJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBkLSZndDt2cXNbaV07CiYjNDM7CiYjNDM7CQlub2RlID0gdnEtJmd0O2lvdGxiX21pc3Nfbm9kZTsKJiM0MzsJCWlmICghbm9kZSB8fAomIzQzOwkJICAgICF2aG9zdF9pb3RsYl91cGRhdGVfY292ZXJzKG1zZywKJiM0MzsJCQkJCSAgICAgICB2aG9zdF9nZXRfaW90bGJfbXNnKG5vZGUpKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWxpc3RfZGVsX2luaXQoJmFtcDtub2RlLSZndDtub2RlKTsKJiM0MzsJCXZob3N0X3VudHJhY2tfaW90bGJfbWlzcyhub2RlKTsKJiM0MzsJCXZob3N0X3BvbGxfcXVldWUoJmFtcDt2cS0mZ3Q7cG9sbCk7CiYjNDM7CQlrZnJlZShub2RlKTsKJiM0MzsJfQomIzQzOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShub2RlLCBuLCAmYW1wO2QtJmd0O3BlbmRpbmdfbGlzdCwgbm9kZSkgewogCQlzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICp2cV9tc2cgPSAmYW1wO25vZGUtJmd0O21zZy5pb3RsYjsKJiM0MzsKJiM0MzsJCWlmIChub2RlLSZndDt2cS0mZ3Q7aW90bGJfbWlzc19ub2RlID09IG5vZGUpCiYjNDM7CQkJY29udGludWU7CiAJCWlmIChtc2ctJmd0O2lvdmEgJmx0Oz0gdnFfbXNnLSZndDtpb3ZhICZhbXA7JmFtcDsKIAkJICAgIG1zZy0mZ3Q7aW92YSAmIzQzOyBtc2ctJmd0O3NpemUgLSAxICZndDs9IHZxX21zZy0mZ3Q7aW92YSAmYW1wOyZhbXA7CiAJCSAgICB2cV9tc2ctJmd0O3R5cGUgPT0gVkhPU1RfSU9UTEJfTUlTUykgewogCQkJdmhvc3RfcG9sbF9xdWV1ZSgmYW1wO25vZGUtJmd0O3ZxLSZndDtwb2xsKTsKLQkJCWxpc3RfZGVsKCZhbXA7bm9kZS0mZ3Q7bm9kZSk7CiYjNDM7CQkJbGlzdF9kZWxfaW5pdCgmYW1wO25vZGUtJmd0O25vZGUpOwogCQkJa2ZyZWUobm9kZSk7CiAJCX0KIAl9CkBAIC0xNzU1LDkgJiM0MzsxODM0LDE4IEBAIHNzaXplX3Qgdmhvc3RfY2hyX3JlYWRfaXRlcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCBpb3ZfaXRlciAqdG8sCiAJCQkgICAgaW50IG5vYmxvY2spCiB7CiAJREVGSU5FX1dBSVQod2FpdCk7Ci0Jc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlOwomIzQzOwl1bmlvbiB7CiYjNDM7CQlzdHJ1Y3Qgdmhvc3RfbXNnIG1zZzsKJiM0MzsJCXN0cnVjdCB2aG9zdF9tc2dfdjIgbXNnX3YyOwomIzQzOwl9IHNuYXBzaG90OwomIzQzOwlzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm1pc3NfdG9rZW4gPSBOVUxMOwomIzQzOwlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICptaXNzX3ZxID0gTlVMTDsKJiM0MzsJc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlID0gTlVMTDsKJiM0MzsJdTY0IG1pc3Nfc2VxID0gMDsKIAlzc2l6ZV90IHJldCA9IDA7CiAJdW5zaWduZWQgc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgdmhvc3RfbXNnKTsKJiM0MzsJYm9vbCBzaG9ydF9idWZmZXIgPSBmYWxzZTsKJiM0MzsJYm9vbCB3YWtlID0gZmFsc2U7CiAKIAlpZiAoaW92X2l0ZXJfY291bnQodG8pICZsdDsgc2l6ZSkKIAkJcmV0dXJuIDA7CkBAIC0xNzY3LDggJiM0MzsxODU1LDM2IEBAIHNzaXplX3Qgdmhvc3RfY2hyX3JlYWRfaXRlcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCBpb3ZfaXRlciAqdG8sCiAJCQlwcmVwYXJlX3RvX3dhaXQoJmFtcDtkZXYtJmd0O3dhaXQsICZhbXA7d2FpdCwKIAkJCQkJVEFTS19JTlRFUlJVUFRJQkxFKTsKIAotCQlub2RlID0gdmhvc3RfZGVxdWV1ZV9tc2coZGV2LCAmYW1wO2Rldi0mZ3Q7cmVhZF9saXN0KTsKLQkJaWYgKG5vZGUpCiYjNDM7CQlzcGluX2xvY2soJmFtcDtkZXYtJmd0O2lvdGxiX2xvY2spOwomIzQzOwkJaWYgKCFsaXN0X2VtcHR5KCZhbXA7ZGV2LSZndDtyZWFkX2xpc3QpKSB7CiYjNDM7CQkJc3RydWN0IHZob3N0X21zZ19ub2RlICpmaXJzdDsKJiM0MzsKJiM0MzsJCQlmaXJzdCA9IGxpc3RfZmlyc3RfZW50cnkoJmFtcDtkZXYtJmd0O3JlYWRfbGlzdCwKJiM0MzsJCQkJCQkgc3RydWN0IHZob3N0X21zZ19ub2RlLCBub2RlKTsKJiM0MzsJCQlpZiAoZmlyc3QtJmd0O3ZxLSZndDtpb3RsYl9taXNzX25vZGUgPT0gZmlyc3QpIHsKJiM0MzsJCQkJc2l6ZSA9IGZpcnN0LSZndDttc2cudHlwZSA9PSBWSE9TVF9JT1RMQl9NU0dfVjIgPwomIzQzOwkJCQkgICAgICAgc2l6ZW9mKGZpcnN0LSZndDttc2dfdjIpIDogc2l6ZW9mKGZpcnN0LSZndDttc2cpOwomIzQzOwkJCQlpZiAoaW92X2l0ZXJfY291bnQodG8pICZsdDsgc2l6ZSkgewomIzQzOwkJCQkJc2hvcnRfYnVmZmVyID0gdHJ1ZTsKJiM0MzsJCQkJfSBlbHNlIHsKJiM0MzsJCQkJCW1lbWNweSgmYW1wO3NuYXBzaG90Lm1zZ192MiwgJmFtcDtmaXJzdC0mZ3Q7bXNnX3YyLAomIzQzOwkJCQkJICAgICAgIHNpemUpOwomIzQzOwkJCQkJbGlzdF9tb3ZlX3RhaWwoJmFtcDtmaXJzdC0mZ3Q7bm9kZSwKJiM0MzsJCQkJCQkgICAgICAgJmFtcDtkZXYtJmd0O3BlbmRpbmdfbGlzdCk7CiYjNDM7CQkJCQlmaXJzdC0mZ3Q7dnEtJmd0O2lvdGxiX21pc3Nfc3RhdGUgPQomIzQzOwkJCQkJCVZIT1NUX0lPVExCX01JU1NfUkVBRElORzsKJiM0MzsJCQkJCW1pc3NfdnEgPSBmaXJzdC0mZ3Q7dnE7CiYjNDM7CQkJCQltaXNzX3Rva2VuID0gZmlyc3Q7CiYjNDM7CQkJCQltaXNzX3NlcSA9IGZpcnN0LSZndDt2cS0mZ3Q7aW90bGJfbWlzc19zZXE7CiYjNDM7CQkJCX0KJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQlsaXN0X2RlbF9pbml0KCZhbXA7Zmlyc3QtJmd0O25vZGUpOwomIzQzOwkJCQlub2RlID0gZmlyc3Q7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwkJc3Bpbl91bmxvY2soJmFtcDtkZXYtJmd0O2lvdGxiX2xvY2spOwomIzQzOwomIzQzOwkJaWYgKG5vZGUgfHwgbWlzc192cSB8fCBzaG9ydF9idWZmZXIpCiAJCQlicmVhazsKIAkJaWYgKG5vYmxvY2spIHsKIAkJCXJldCA9IC1FQUdBSU47CkBAIC0xNzg5LDYgJiM0MzsxOTA1LDM0IEBAIHNzaXplX3Qgdmhvc3RfY2hyX3JlYWRfaXRlcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCBpb3ZfaXRlciAqdG8sCiAJaWYgKCFub2Jsb2NrKQogCQlmaW5pc2hfd2FpdCgmYW1wO2Rldi0mZ3Q7d2FpdCwgJmFtcDt3YWl0KTsKIAomIzQzOwlpZiAoc2hvcnRfYnVmZmVyKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChtaXNzX3ZxKSB7CiYjNDM7CQlib29sIGNvcGllZCA9IGNvcHlfdG9faXRlcl9mdWxsKCZhbXA7c25hcHNob3QubXNnX3YyLCBzaXplLCB0byk7CiYjNDM7CiYjNDM7CQlzcGluX2xvY2soJmFtcDtkZXYtJmd0O2lvdGxiX2xvY2spOwomIzQzOwkJbm9kZSA9IG1pc3NfdnEtJmd0O2lvdGxiX21pc3Nfbm9kZTsKJiM0MzsJCWlmIChub2RlID09IG1pc3NfdG9rZW4gJmFtcDsmYW1wOwomIzQzOwkJICAgIG1pc3NfdnEtJmd0O2lvdGxiX21pc3Nfc2VxID09IG1pc3Nfc2VxICZhbXA7JmFtcDsKJiM0MzsJCSAgICBtaXNzX3ZxLSZndDtpb3RsYl9taXNzX3N0YXRlID09IFZIT1NUX0lPVExCX01JU1NfUkVBRElORykgewomIzQzOwkJCWlmIChjb3BpZWQpIHsKJiM0MzsJCQkJbWlzc192cS0mZ3Q7aW90bGJfbWlzc19zdGF0ZSA9CiYjNDM7CQkJCQlWSE9TVF9JT1RMQl9NSVNTX1BFTkRJTkc7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJbGlzdF9tb3ZlX3RhaWwoJmFtcDtub2RlLSZndDtub2RlLCAmYW1wO2Rldi0mZ3Q7cmVhZF9saXN0KTsKJiM0MzsJCQkJbWlzc192cS0mZ3Q7aW90bGJfbWlzc19zdGF0ZSA9IFZIT1NUX0lPVExCX01JU1NfUkVBRDsKJiM0MzsJCQkJd2FrZSA9IHRydWU7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwkJc3Bpbl91bmxvY2soJmFtcDtkZXYtJmd0O2lvdGxiX2xvY2spOwomIzQzOwomIzQzOwkJaWYgKHdha2UpCiYjNDM7CQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGwoJmFtcDtkZXYtJmd0O3dhaXQsCiYjNDM7CQkJCQkJICAgRVBPTExJTiB8IEVQT0xMUkROT1JNKTsKJiM0MzsJCXJldHVybiBjb3BpZWQgPyBzaXplIDogLUVGQVVMVDsKJiM0MzsJfQomIzQzOwogCWlmIChub2RlKSB7CiAJCXN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1zZzsKIAkJdm9pZCAqc3RhcnQgPSAmYW1wO25vZGUtJmd0O21zZzsKQEAgLTE4MTksMjkgJiM0MzsxOTYzLDY5IEBAIHNzaXplX3Qgdmhvc3RfY2hyX3JlYWRfaXRlcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCBpb3ZfaXRlciAqdG8sCiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9jaHJfcmVhZF9pdGVyKTsKIAomIzQzO3N0YXRpYyBib29sIHZob3N0X2lvdGxiX21pc3NfY29hbGVzY2Uoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIGJvb2wgdjIsCiYjNDM7CQkJCSAgICAgIHU2NCBpb3ZhLCBpbnQgYWNjZXNzLCBib29sICp3YWtlKQomIzQzO3sKJiM0MzsJc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlID0gdnEtJmd0O2lvdGxiX21pc3Nfbm9kZTsKJiM0MzsJc3RydWN0IHZob3N0X2lvdGxiX21zZyAqbXNnOwomIzQzOwl1MzIgdHlwZSA9IHYyID8gVkhPU1RfSU9UTEJfTVNHX1YyIDogVkhPU1RfSU9UTEJfTVNHOwomIzQzOwlib29sIHNhbWU7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt2cS0mZ3Q7ZGV2LSZndDtpb3RsYl9sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKCFub2RlKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwltc2cgPSB2aG9zdF9nZXRfaW90bGJfbXNnKG5vZGUpOwomIzQzOwlzYW1lID0gbm9kZS0mZ3Q7bXNnLnR5cGUgPT0gdHlwZSAmYW1wOyZhbXA7IG1zZy0mZ3Q7dHlwZSA9PSBWSE9TVF9JT1RMQl9NSVNTICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIG1zZy0mZ3Q7aW92YSA9PSBpb3ZhICZhbXA7JmFtcDsgbXNnLSZndDtwZXJtID09IGFjY2VzczsKJiM0MzsJaWYgKHNhbWUgJmFtcDsmYW1wOyB2cS0mZ3Q7aW90bGJfbWlzc19zdGF0ZSAhPSBWSE9TVF9JT1RMQl9NSVNTX1JFQURJTkcpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKCFzYW1lKQomIzQzOwkJdmhvc3Rfc2V0X2lvdGxiX21pc3Mobm9kZSwgdjIsIGlvdmEsIGFjY2Vzcyk7CiYjNDM7CXZxLSZndDtpb3RsYl9taXNzX3NlcSYjNDM7JiM0Mzs7CiYjNDM7CWlmICh2cS0mZ3Q7aW90bGJfbWlzc19zdGF0ZSAhPSBWSE9TVF9JT1RMQl9NSVNTX1JFQUQpIHsKJiM0MzsJCWxpc3RfbW92ZV90YWlsKCZhbXA7bm9kZS0mZ3Q7bm9kZSwgJmFtcDt2cS0mZ3Q7ZGV2LSZndDtyZWFkX2xpc3QpOwomIzQzOwkJdnEtJmd0O2lvdGxiX21pc3Nfc3RhdGUgPSBWSE9TVF9JT1RMQl9NSVNTX1JFQUQ7CiYjNDM7CQkqd2FrZSA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCB2aG9zdF9pb3RsYl9taXNzKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCB1NjQgaW92YSwgaW50IGFjY2VzcykKIHsKIAlzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYgPSB2cS0mZ3Q7ZGV2OwogCXN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZTsKLQlzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2c7CiAJYm9vbCB2MiA9IHZob3N0X2JhY2tlbmRfaGFzX2ZlYXR1cmUodnEsIFZIT1NUX0JBQ0tFTkRfRl9JT1RMQl9NU0dfVjIpOwomIzQzOwlib29sIHdha2UgPSBmYWxzZTsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3ZxLSZndDttdXRleCk7CiYjNDM7CiYjNDM7CXNwaW5fbG9jaygmYW1wO2Rldi0mZ3Q7aW90bGJfbG9jayk7CiYjNDM7CWlmICh2aG9zdF9pb3RsYl9taXNzX2NvYWxlc2NlKHZxLCB2MiwgaW92YSwgYWNjZXNzLCAmYW1wO3dha2UpKSB7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO2Rldi0mZ3Q7aW90bGJfbG9jayk7CiYjNDM7CQlpZiAod2FrZSkKJiM0MzsJCQl3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbCgmYW1wO2Rldi0mZ3Q7d2FpdCwKJiM0MzsJCQkJCQkgICBFUE9MTElOIHwgRVBPTExSRE5PUk0pOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtkZXYtJmd0O2lvdGxiX2xvY2spOwogCiAJbm9kZSA9IHZob3N0X25ld19tc2codnEsIHYyID8gVkhPU1RfSU9UTEJfTVNHX1YyIDogVkhPU1RfSU9UTEJfTVNHKTsKIAlpZiAoIW5vZGUpCiAJCXJldHVybiAtRU5PTUVNOwomIzQzOwl2aG9zdF9zZXRfaW90bGJfbWlzcyhub2RlLCB2MiwgaW92YSwgYWNjZXNzKTsKIAotCWlmICh2MikgewotCQlub2RlLSZndDttc2dfdjIudHlwZSA9IFZIT1NUX0lPVExCX01TR19WMjsKLQkJbXNnID0gJmFtcDtub2RlLSZndDttc2dfdjIuaW90bGI7Ci0JfSBlbHNlIHsKLQkJbXNnID0gJmFtcDtub2RlLSZndDttc2cuaW90bGI7Ci0JfQotCi0JbXNnLSZndDt0eXBlID0gVkhPU1RfSU9UTEJfTUlTUzsKLQltc2ctJmd0O2lvdmEgPSBpb3ZhOwotCW1zZy0mZ3Q7cGVybSA9IGFjY2VzczsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7ZGV2LSZndDtpb3RsYl9sb2NrKTsKJiM0MzsJdnEtJmd0O2lvdGxiX21pc3Nfbm9kZSA9IG5vZGU7CiYjNDM7CXZxLSZndDtpb3RsYl9taXNzX3N0YXRlID0gVkhPU1RfSU9UTEJfTUlTU19SRUFEOwomIzQzOwl2cS0mZ3Q7aW90bGJfbWlzc19zZXEmIzQzOyYjNDM7OwomIzQzOwlsaXN0X2FkZF90YWlsKCZhbXA7bm9kZS0mZ3Q7bm9kZSwgJmFtcDtkZXYtJmd0O3JlYWRfbGlzdCk7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7ZGV2LSZndDtpb3RsYl9sb2NrKTsKIAotCXZob3N0X2VucXVldWVfbXNnKGRldiwgJmFtcDtkZXYtJmd0O3JlYWRfbGlzdCwgbm9kZSk7CiYjNDM7CXdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKCZhbXA7ZGV2LSZndDt3YWl0LCBFUE9MTElOIHwgRVBPTExSRE5PUk0pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMjcwLDI3ICYjNDM7MjQ1NCw1OSBAQCBsb25nIHZob3N0X3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF9kZXYgKmQsIHVuc2lnbmVkIGludCBpb2N0bCwgdm9pZCBfX3VzZXIgKmFyZwogfQogRVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfdnJpbmdfaW9jdGwpOwogCiYjNDM7c3RhdGljIGJvb2wgdmhvc3RfcmV0cnlfaW90bGJfbWlzc2VzKHN0cnVjdCB2aG9zdF9kZXYgKmQpCiYjNDM7ewomIzQzOwlib29sIHdha2UgPSBmYWxzZTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtkLSZndDtpb3RsYl9sb2NrKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGQtJmd0O252cXM7ICYjNDM7JiM0MztpKSB7CiYjNDM7CQlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGQtJmd0O3Zxc1tpXTsKJiM0MzsJCXN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSA9IHZxLSZndDtpb3RsYl9taXNzX25vZGU7CiYjNDM7CiYjNDM7CQlpZiAoIW5vZGUpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQl2cS0mZ3Q7aW90bGJfbWlzc19zZXEmIzQzOyYjNDM7OwomIzQzOwkJaWYgKHZxLSZndDtpb3RsYl9taXNzX3N0YXRlICE9IFZIT1NUX0lPVExCX01JU1NfUkVBRCkKJiM0MzsJCQlsaXN0X21vdmVfdGFpbCgmYW1wO25vZGUtJmd0O25vZGUsICZhbXA7ZC0mZ3Q7cmVhZF9saXN0KTsKJiM0MzsJCXZxLSZndDtpb3RsYl9taXNzX3N0YXRlID0gVkhPU1RfSU9UTEJfTUlTU19SRUFEOwomIzQzOwkJd2FrZSA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHdha2U7CiYjNDM7fQomIzQzOwogaW50IHZob3N0X2luaXRfZGV2aWNlX2lvdGxiKHN0cnVjdCB2aG9zdF9kZXYgKmQpCiB7CiAJc3RydWN0IHZob3N0X2lvdGxiICpuaW90bGIsICpvaW90bGI7CiYjNDM7CWJvb2wgd2FrZTsKIAlpbnQgaTsKIAogCW5pb3RsYiA9IGlvdGxiX2FsbG9jKCk7CiAJaWYgKCFuaW90bGIpCiAJCXJldHVybiAtRU5PTUVNOwogCiYjNDM7CXZob3N0X2Rldl9sb2NrX3ZxcyhkKTsKIAlvaW90bGIgPSBkLSZndDtpb3RsYjsKIAlkLSZndDtpb3RsYiA9IG5pb3RsYjsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBkLSZndDtudnFzOyAmIzQzOyYjNDM7aSkgewogCQlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGQtJmd0O3Zxc1tpXTsKIAotCQltdXRleF9sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKIAkJdnEtJmd0O2lvdGxiID0gbmlvdGxiOwogCQlfX3Zob3N0X3ZxX21ldGFfcmVzZXQodnEpOwotCQltdXRleF91bmxvY2soJmFtcDt2cS0mZ3Q7bXV0ZXgpOwogCX0KIAomIzQzOwlzcGluX2xvY2soJmFtcDtkLSZndDtpb3RsYl9sb2NrKTsKJiM0MzsJd2FrZSA9IHZob3N0X3JldHJ5X2lvdGxiX21pc3NlcyhkKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtkLSZndDtpb3RsYl9sb2NrKTsKJiM0MzsJdmhvc3RfZGV2X3VubG9ja192cXMoZCk7CiYjNDM7CiYjNDM7CWlmICh3YWtlKQomIzQzOwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGwoJmFtcDtkLSZndDt3YWl0LAomIzQzOwkJCQkJICAgRVBPTExJTiB8IEVQT0xMUkROT1JNKTsKIAl2aG9zdF9pb3RsYl9mcmVlKG9pb3RsYik7CiAKIAlyZXR1cm4gMDsKQEAgLTMzMDAsNyAmIzQzOzM1MTYsOCBAQCBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKnZob3N0X2RlcXVldWVfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwKIAlpZiAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKIAkJbm9kZSA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IHZob3N0X21zZ19ub2RlLAogCQkJCQlub2RlKTsKLQkJbGlzdF9kZWwoJmFtcDtub2RlLSZndDtub2RlKTsKJiM0MzsJCWxpc3RfZGVsX2luaXQoJmFtcDtub2RlLSZndDtub2RlKTsKJiM0MzsJCXZob3N0X3VudHJhY2tfaW90bGJfbWlzcyhub2RlKTsKIAl9CiAJc3Bpbl91bmxvY2soJmFtcDtkZXYtJmd0O2lvdGxiX2xvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmggYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmgKaW5kZXggMDE5MmFkZTZlNzQ5MS4uNTBmY2NjODVkNTk0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaApAQCAtMjksNiAmIzQzOzI5LDcgQEAgc3RydWN0IHZob3N0X3dvcmsgewogCiBzdHJ1Y3Qgdmhvc3Rfd29ya2VyOwogc3RydWN0IHZob3N0X2RldjsKJiM0MztzdHJ1Y3Qgdmhvc3RfbXNnX25vZGU7CiAKIHN0cnVjdCB2aG9zdF93b3JrZXJfb3BzIHsKIAlpbnQgKCpjcmVhdGUpKHN0cnVjdCB2aG9zdF93b3JrZXIgKndvcmtlciwgc3RydWN0IHZob3N0X2RldiAqZGV2LApAQCAtMTYzLDcgJiM0MzsxNjQsMTIgQEAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSB7CiAJLyogUmluZyBlbmRpYW5uZXNzIHJlcXVlc3RlZCBieSB1c2Vyc3BhY2UgZm9yIGNyb3NzLWVuZGlhbiBzdXBwb3J0LiAqLwogCWJvb2wgdXNlcl9iZTsKICNlbmRpZgomIzQzOwkvKiBQcm90ZWN0ZWQgYnkgZGV2LSZndDtpb3RsYl9sb2NrLiAqLwomIzQzOwl1OCBpb3RsYl9taXNzX3N0YXRlOwogCXUzMiBidXN5bG9vcF90aW1lb3V0OwomIzQzOwkvKiBQcm90ZWN0ZWQgYnkgZGV2LSZndDtpb3RsYl9sb2NrLiAqLwomIzQzOwl1NjQgaW90bGJfbWlzc19zZXE7CiYjNDM7CXN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqaW90bGJfbWlzc19ub2RlOwogfTsKIAogc3RydWN0IHZob3N0X21zZ19ub2RlIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc5OAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDM0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZob3N0IElPVExCIE1pc3MgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgaG93IElPVExCIG1pc3NlcyBhcmUgaGFuZGxlZCB3aXRoaW4gdmhvc3QsIHNwZWNpZmljYWxseSBpbiBgZHJpdmVycy92aG9zdC92aG9zdC5jYCBhbmQgYGRyaXZlcnMvdmhvc3Qvdmhvc3QuaGAuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgdGhlIGludHJvZHVjdGlvbiBvZiBgdmhvc3RfaW90bGJfbWlzc19zdGF0ZWAsIHdoaWNoIGlzIGRlc2lnbmVkIHRvIHRyYWNrIHRoZXNlIG1pc3NlcyBvbiBhIHBlci12aXJ0cXVldWUgYmFzaXMuIFRoZSBnb2FsLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRvIGNvYWxlc2NlIHRoZSBtaXNzIG1lc3NhZ2VzIGFuZCBwcmV2ZW50IHRoZSB1c2Vyc3BhY2UgZnJvbSBnZXR0aW5nIGludW5kYXRlZCB3aXRoIHJlZHVuZGFudCBub3RpZmljYXRpb25zLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgZnV6emFiaWxpdHkuIEdpdmVuIHRoYXQgdmhvc3QgaXMgYSBmdW5kYW1lbnRhbCBzdWJzeXN0ZW0gdW5kZXJwaW5uaW5nIEtWTSwgUUVNVSwgYW5kIG90aGVyIHZpcnR1YWxpemF0aW9uIHRvb2xzLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGEgd29ydGh3aGlsZSB0YXJnZXQuIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgY3JpdGljYWwgZnVuY3Rpb25zOiBgdmhvc3RfY2hyX3JlYWRfaXRlcmAsIGB2aG9zdF9pb3RsYl9taXNzYCwgYHZob3N0X2luaXRfZGV2aWNlX2lvdGxiYCwgYW5kIGB2aG9zdF9jbGVhcl9tc2dgLCBhbW9uZyBvdGhlcnMuIEkga25vdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCB0aGUgYC9kZXYvdmhvc3QtbmV0YCwgYC9kZXYvdmhvc3QtdnNvY2tgIGFuZCBzaW1pbGFyIGNoYXJhY3RlciBkZXZpY2VzLCB3aGljaCBtYWtlcyB0aGVtIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIFRoYW5rZnVsbHksIFN5emthbGxlciBhbHJlYWR5IGhhcyB2aG9zdCBkZXNjcmlwdGlvbnMsIHNpbXBsaWZ5aW5nIHRoZSBmdXp6aW5nIHNldHVwLiBUaGUgY2hhbmdlcyBoZXJlIGFsc28gc2VlbSBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQgYW5kIG5vdCB0cml2aWFsLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIGB2aG9zdF9jaHJfcmVhZF9pdGVyYCBpcyB0aGUgdmhvc3QgY2hhcmFjdGVyIGRldmljZSByZWFkIGhhbmRsZXIuIGB2aG9zdF9pb3RsYl9taXNzYCBpcyBjbGVhcmx5IHRyaWdnZXJlZCB3aGVuIGFuIElPVExCIG1pc3Mgb2NjdXJzLiBgdmhvc3RfaW5pdF9kZXZpY2VfaW90bGJgIHNlZW1zIHRvIGJlIGNhbGxlZCBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLCBwb3NzaWJseSB2aWEgYFZIT1NUX1NFVF9CQUNLRU5EX0ZFQVRVUkVTYCBvciBhIHJlbGF0ZWQgaW9jdGwuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgY2FsbCBmbG93IHRvIGNvbmZpcm0gaXQmIzM5O3MgcmVhY2hlZCBpbiB0aGUgcmlnaHQgcGxhY2VzLiBBbmQsIGZpbmFsbHksIGB2aG9zdF9jbGVhcl9tc2dgIGFwcGVhcnMgdG8gYmUgcmVsYXRlZCB0byBkZXZpY2Ugc2h1dGRvd24gb3IgcmVzZXQuCgpJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgY29kZSBmb3IgY2FsbHMgdG8gYHZob3N0X2luaXRfZGV2aWNlX2lvdGxiYCB0byB2ZXJpZnkgd2hlcmUgaXQmIzM5O3MgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9pbml0X2RldmljZV9pb3RsYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L25ldC5jPTE2NjY9c3RhdGljIGludCB2aG9zdF9uZXRfc2V0X2ZlYXR1cmVzKHN0cnVjdCB2aG9zdF9uZXQgKm4sIGNvbnN0IHU2NCAqZmVhdHVyZXMpXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xNjk2LVx0aWYgKHZpcnRpb19mZWF0dXJlc190ZXN0X2JpdChmZWF0dXJlcywgVklSVElPX0ZfQUNDRVNTX1BMQVRGT1JNKSkge1xuZHJpdmVycy92aG9zdC9uZXQuYzoxNjk3Olx0XHRpZiAodmhvc3RfaW5pdF9kZXZpY2VfaW90bGIoXHUwMDI2bi1cdTAwM2VkZXYpKVxuZHJpdmVycy92aG9zdC9uZXQuYy0xNjk4LVx0XHRcdGdvdG8gb3V0X3VubG9jaztcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9MjQ1Nz1zdGF0aWMgYm9vbCB2aG9zdF9yZXRyeV9pb3RsYl9taXNzZXMoc3RydWN0IHZob3N0X2RldiAqZClcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjQ4MC1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoyNDgxOmludCB2aG9zdF9pbml0X2RldmljZV9pb3RsYihzdHJ1Y3Qgdmhvc3RfZGV2ICpkKVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTI0ODIte1xuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yNTEzLX1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoyNTE0OkVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2luaXRfZGV2aWNlX2lvdGxiKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yNTE1LVxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaD0yODQ9c3NpemVfdCB2aG9zdF9jaHJfd3JpdGVfaXRlcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjg1LVx0XHRcdCAgICAgc3RydWN0IGlvdl9pdGVyICpmcm9tKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaDoyODY6aW50IHZob3N0X2luaXRfZGV2aWNlX2lvdGxiKHN0cnVjdCB2aG9zdF9kZXYgKmQpO1xuZHJpdmVycy92aG9zdC92aG9zdC5oLTI4Ny1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9ODU0PXN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc2V0X2ZlYXR1cmVzKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssIHU2NCBmZWF0dXJlcylcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODY4LVx0aWYgKChmZWF0dXJlcyBcdTAwMjYgKDFVTEwgXHUwMDNjXHUwMDNjIFZJUlRJT19GX0FDQ0VTU19QTEFURk9STSkpKSB7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6ODY5Olx0XHRpZiAodmhvc3RfaW5pdF9kZXZpY2VfaW90bGIoXHUwMDI2dnNvY2stXHUwMDNlZGV2KSlcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04NzAtXHRcdFx0Z290byBlcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE5MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFZob3N0IElPVExCIE1pc3NlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBob3cgdGhlIHZob3N0IGluZnJhc3RydWN0dXJlIGhhbmRsZXMgbWVtb3J5IGFjY2Vzc2VzLCBzcGVjaWZpY2FsbHkgd2hlcmUgdGhpbmdzIG1pZ2h0IGJlIGdvaW5nIHdyb25nLiBJdCBzZWVtcyBsaWtlIGB2aG9zdF9pbml0X2RldmljZV9pb3RsYmAgaXMgYSBrZXkgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uIEkgc2VlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGB2aG9zdF9uZXRfc2V0X2ZlYXR1cmVzYCBhbmQgYHZob3N0X3Zzb2NrX3NldF9mZWF0dXJlc2AsIGluZGljYXRpbmcgaXQmIzM5O3MgaW52b2x2ZWQgaW4gc2V0dGluZyB1cCB0aGUgSU9UTEIgKElucHV0L091dHB1dCBUcmFuc2xhdGlvbiBMb29rYXNpZGUgQnVmZmVyKSBmb3IgbmV0d29yayBhbmQgdnNvY2sgdmhvc3QgZGV2aWNlcy4gVGhhdCBtYWtlcyBzZW5zZSwgdGhvc2UgYXJlIGNvbW1vbiBlbnRyeSBwb2ludHMuCgpOb3csIGB2aG9zdF9jaHJfcmVhZF9pdGVyYCBpcyB0aGUgcmVhZCBoYW5kbGVyIGZvciB2aG9zdCBkZXZpY2VzLiBUaGF0JiMzOTtzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLCBhcyBhbnkgcmVhZHMgd2lsbCBsaWtlbHkgZnVubmVsIHRocm91Z2ggdGhlcmUuCgpUaGUgcmVhbCBwb2ludCBvZiBpbnRlcmVzdCwgdGhvdWdoLCBpcyBgdmhvc3RfaW90bGJfbWlzc2AuIFRoaXMgYXBwZWFycyB0byBiZSBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgcHJvYmFibHkgbm90IGludGVuZGVkIGZvciBkaXJlY3QgdXNlIGVsc2V3aGVyZS4gTXkgc3VzcGljaW9uIGlzLCBpdCYjMzk7cyB0cmlnZ2VyZWQgd2hlbiB2aG9zdCBhdHRlbXB0cyB0byBhY2Nlc3MgbWVtb3J5IGFuZCB0aGUgbG9va3VwIGluIHRoZSBJT1RMQiBmYWlscy4gVGhpcyBtZWFucyBhIHRyYW5zbGF0aW9uIGlzIG5lZWRlZC4gR2l2ZW4gdGhhdCwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBlZmZvcnRzIG9uIHVuZGVyc3RhbmRpbmcgd2hhdCBsZWFkcyB0byB0aGUgZXhlY3V0aW9uIG9mIGB2aG9zdF9pb3RsYl9taXNzYC4gSXQgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgaW50ZXJlc3RpbmcgYW5kIHdpbGwgYmUgdGhlIHRhcmdldCBvZiBteSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X2lvdGxiX21pc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5jLTM2LVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjM3OmVudW0gdmhvc3RfaW90bGJfbWlzc19zdGF0ZSB7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzgtXHRWSE9TVF9JT1RMQl9NSVNTX05PTkUsXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTE5NjQ9RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfY2hyX3JlYWRfaXRlcik7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTk2NS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoxOTY2OnN0YXRpYyBib29sIHZob3N0X2lvdGxiX21pc3NfY29hbGVzY2Uoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIGJvb2wgdjIsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTk2Ny1cdFx0XHRcdCAgICAgIHU2NCBpb3ZhLCBpbnQgYWNjZXNzLCBib29sICp3YWtlKVxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0xOTk2LVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjE5OTc6c3RhdGljIGludCB2aG9zdF9pb3RsYl9taXNzKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCB1NjQgaW92YSwgaW50IGFjY2VzcylcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0xOTk4LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjAwNi1cdHNwaW5fbG9jayhcdTAwMjZkZXYtXHUwMDNlaW90bGJfbG9jayk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MjAwNzpcdGlmICh2aG9zdF9pb3RsYl9taXNzX2NvYWxlc2NlKHZxLCB2MiwgaW92YSwgYWNjZXNzLCBcdTAwMjZ3YWtlKSkge1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTIwMDgtXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmRldi1cdTAwM2Vpb3RsYl9sb2NrKTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9MjA2MD1zdGF0aWMgYm9vbCBpb3RsYl9hY2Nlc3Nfb2soc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTIwNzItXHRcdGlmIChtYXAgPT0gTlVMTCB8fCBtYXAtXHUwMDNlc3RhcnQgXHUwMDNlIGFkZHIpIHtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoyMDczOlx0XHRcdHZob3N0X2lvdGxiX21pc3ModnEsIGFkZHIsIGFjY2Vzcyk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjA3NC1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTI4NTc9c3RhdGljIGludCB0cmFuc2xhdGVfZGVzYyhzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgdTY0IGFkZHIsIHUzMiBsZW4sXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTI4OTctXHRpZiAocmV0ID09IC1FQUdBSU4pXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6Mjg5ODpcdFx0dmhvc3RfaW90bGJfbWlzcyh2cSwgYWRkciwgYWNjZXNzKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yODk5LVx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjE3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFZob3N0IElPVExCIGFuZCBSZWFkIEhhbmRsZXJzKioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGlzIHZob3N0IGNvZGUuIEl0IHNlZW1zIGxpa2UgYHZob3N0X2lvdGxiX21pc3NgIGlzIGEgc3RhdGljIHZhcmlhYmxlLCB3aGljaCBtZWFucyBpdCYjMzk7cyBub3QgZ29pbmcgdG8gYmUgaGVscGZ1bCBhcyBhIHN5bWJvbCB0byBmb2N1cyBvbi4gVGhhdCYjMzk7cyBhIGRlYWQgZW5kLCBhdCBsZWFzdCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGFwcHJvYWNoLgoKSG93ZXZlciwgYHZob3N0X2Nocl9yZWFkX2l0ZXJgIGlzIGV4cG9ydGVkLCBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyB0aGUgcmVhZCBoYW5kbGVyLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nOyBpdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIHdhbnQgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gaW4gdGhpcyBwYXJ0IG9mIHRoZSBhcmNoaXRlY3R1cmUuIEFuZCBoZXksIGB2aG9zdF9pbml0X2RldmljZV9pb3RsYmAgaXMgYWxzbyBleHBvcnRlZCwgd2hpY2ggc2VlbXMgcmVsYXRlZC4KCkxldCYjMzk7cyBkcmlsbCBkb3duIGFuZCB0cmFjayBkb3duIHdoZXJlIGB2aG9zdF9jaHJfcmVhZF9pdGVyYCBpcyBiZWluZyB1c2VkLiBUaGF0JiMzOTtsbCBiZSB0aGUgYmVzdCB3YXkgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBwcm9jZXNzLiBUaW1lIHRvIHN0YXJ0IHRoZSBodW50IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X2Nocl9yZWFkX2l0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9uZXQuYz0xODM4PXN0YXRpYyBzc2l6ZV90IHZob3N0X25ldF9jaHJfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4NDQtXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE4NDU6XHRyZXR1cm4gdmhvc3RfY2hyX3JlYWRfaXRlcihkZXYsIHRvLCBub2Jsb2NrKTtcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg0Ni19XG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTE4MzE9RVhQT1JUX1NZTUJPTCh2aG9zdF9jaHJfcG9sbCk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTgzMi1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoxODMzOnNzaXplX3Qgdmhvc3RfY2hyX3JlYWRfaXRlcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCBpb3ZfaXRlciAqdG8sXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTgzNC1cdFx0XHQgICAgaW50IG5vYmxvY2spXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTE5NjMtfVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjE5NjQ6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfY2hyX3JlYWRfaXRlcik7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTk2NS1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg9MjgwPV9fcG9sbF90IHZob3N0X2Nocl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjgxLVx0XHRcdCAgICBwb2xsX3RhYmxlICp3YWl0KTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaDoyODI6c3NpemVfdCB2aG9zdF9jaHJfcmVhZF9pdGVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IGlvdl9pdGVyICp0byxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC0yODMtXHRcdFx0ICAgIGludCBub2Jsb2NrKTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9OTQ0PXN0YXRpYyBzc2l6ZV90IHZob3N0X3Zzb2NrX2Nocl9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05NTAtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTUxOlx0cmV0dXJuIHZob3N0X2Nocl9yZWFkX2l0ZXIoZGV2LCB0bywgbm9ibG9jayk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTUyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA1OQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBteSB0aGlua2luZyByaWdodCBub3cgaXMgY2VudGVyZWQgb24gYSBzcGVjaWZpYyBhcmVhIHdpdGhpbiB0aGUgY29kZS4KCioqRGl2aW5nIGludG8gdGhlIFZob3N0IENvZGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIHRoZSBgdmhvc3RfY2hyX3JlYWRfaXRlcmAgc3ltYm9sOyBpdCBzZWVtcyBsaWtlIGEgdXNlZnVsIGVudHJ5IHBvaW50IGZvciB0aGlzIGludmVzdGlnYXRpb24uIEJ1dCBJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCBhbm90aGVyIGZ1bmN0aW9uIHRoYXQmIzM5O3MgcG90ZW50aWFsbHkgcmVsYXRlZCwgYHZob3N0X2luaXRfZGV2aWNlX2lvdGxiYC4gQWgsIEkgc2VlLCBpdCBnZXRzIGludm9rZWQgd2hlbiBgVklSVElPX0ZfQUNDRVNTX1BMQVRGT1JNYCBpcyBlbmFibGVkLiBUaGF0IGNvdWxkIGJlIGEgY2x1ZSB3b3J0aCBmb2xsb3dpbmcsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC4gT2theSwgbmV4dCBzdGVwLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYHZob3N0X2NsZWFyX21zZ2AgdG8gc2VlIGhvdyB0aGF0IGludGVyYWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfY2xlYXJfbXNnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmM9MTUzNT1zdGF0aWMgbG9uZyB2aG9zdF9uZXRfc2V0X2JhY2tlbmQoc3RydWN0IHZob3N0X25ldCAqbiwgdW5zaWduZWQgaW5kZXgsIGludCBmZClcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE1NTYtXHRpZiAoZmQgPT0gLTEpXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE1NTc6XHRcdHZob3N0X2NsZWFyX21zZyhcdTAwMjZuLVx1MDAzZWRldik7XG5kcml2ZXJzL3Zob3N0L25ldC5jLTE1NTgtXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTExOTA9c3RhdGljIHZvaWQgdmhvc3RfdW50cmFja19pb3RsYl9taXNzKHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSlcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTIwMy1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoxMjA0OnZvaWQgdmhvc3RfY2xlYXJfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0xMjA1LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTIyMy19XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MTIyNDpFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9jbGVhcl9tc2cpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTEyMjUtXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9MTIyNj12b2lkIHZob3N0X2Rldl9jbGVhbnVwKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTI0Ny1cdGRldi1cdTAwM2Vpb3RsYiA9IE5VTEw7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MTI0ODpcdHZob3N0X2NsZWFyX21zZyhkZXYpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTEyNDktXHR3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbChcdTAwMjZkZXYtXHUwMDNld2FpdCwgRVBPTExJTiB8IEVQT0xMUkROT1JNKTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg9MjMzPWJvb2wgdmhvc3RfbG9nX2FjY2Vzc19vayhzdHJ1Y3Qgdmhvc3RfZGV2ICopO1xuZHJpdmVycy92aG9zdC92aG9zdC5oOjIzNDp2b2lkIHZob3N0X2NsZWFyX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpO1xuZHJpdmVycy92aG9zdC92aG9zdC5oLTIzNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3OTEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IG1pbmQgaXMganVtcGluZyBhcm91bmQgYSBiaXQgaGVyZSwgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLgoKKipGb2N1c2luZyBvbiBQb3RlbnRpYWwgSG90c3BvdHMgaW4gdGhlIHZob3N0IENvZGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgZ29vZCBwbGFjZXMgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGFyZWFzIHRoYXQgYXJlIGxpa2VseSB0byBiZSBzZWVpbmcgYSBsb3Qgb2YgYWN0aXZpdHkuIGB2aG9zdF9jbGVhcl9tc2dgLi4uIHRoYXQmIzM5O3MgYSBkZWNlbnQgY2FuZGlkYXRlLCBzZWVtcyBsaWtlIGl0IGNvdWxkIGJlIGEgZm9jdXMgc3ltYm9sLiBCdXQgaG9sZCBvbiwgd2hhdCBhYm91dCBgdmhvc3RfaW90bGJfbm90aWZ5X3ZxYD8gSG1tLCBpdCYjMzk7cyBzdGF0aWMsIHNvIHRoYXQgbWlnaHQgbGltaXQgaXRzIHNjb3BlLCBidXQgSSBzaG91bGQgc3RpbGwga2VlcCBpdCBpbiBtaW5kIGFzIGEgcG90ZW50aWFsIGFyZWEgdG8gaW52ZXN0aWdhdGUuIE9rYXksIG5leHQgdXAsIGhvdyBhYm91dCBgdmhvc3RfdnJpbmdfaW9jdGxgPyBJdCYjMzk7cyBleHBvcnRlZCwgYW5kIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBpb2N0bHMsIHdoaWNoIG9mdGVuIGltcGxpZXMgc29tZSBhbW91bnQgb2YgSS9PIGludGVyYWN0aW9uLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldC4gVGhvdWdoLCBvbiBzZWNvbmQgdGhvdWdodCwgaXQgc2VlbXMgcHJldHR5IGdlbmVyaWMuLi4gaXTigJlzIGEgaG90LXBhdGggZnVuY3Rpb24gZm9yIGlvY3RscyBpbiBnZW5lcmFsLCBub3QgbmVjZXNzYXJpbHkgdGllZCB0byBhbnkgc3BlY2lmaWMgZGV2aWNlIG9yIHByb2Nlc3MuIE9rYXksIHRoYXQmIzM5O3Mgbm90IHF1aXRlIGFzIGludGVyZXN0aW5nLgoKV2FpdCBhIHNlY29uZC4uLiBhaCwgdGhlcmUmIzM5O3MgYW5vdGhlciB0aG91Z2h0ISBJIHNlZSBgdmhvc3RfY2hyX3JlYWRfaXRlcmAgY2FsbGVkIGZyb20gYHZob3N0X25ldF9jaHJfcmVhZF9pdGVyYCBhbmQgYHZob3N0X3Zzb2NrX2Nocl9yZWFkX2l0ZXJgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIGl04oCZcyB0aGUgYmFzZSBmb3IgY29tbW9uIHJlYWQgaXRlcmF0aW9ucy4gTGV0IG1lIGp1c3QgY29uZmlybSBpZiBgVkhPU1RfTkVUYCBhbmQgYFZIT1NUX1ZTT0NLYCBhcmUsIGluIGZhY3QsIHRoZSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBUaGF0IHdvdWxkIGhlbHAgdG8gc2VlIGlmIGB2aG9zdF9jaHJfcmVhZF9pdGVyYCBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZIT1NUX05FVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWc9MzI9aWYgVkhPU1RfTUVOVVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTMzLVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjM0OmNvbmZpZyBWSE9TVF9ORVRcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zNS1cdHRyaXN0YXRlIFwmIzM0O0hvc3Qga2VybmVsIGFjY2VsZXJhdG9yIGZvciB2aXJ0aW8gbmV0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzkyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQXNzZXNzaW5nIFZpcnR1YWxpemVkIFNvY2tldCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7VGltZSB0byBkaXZlIGludG8gdGhlIHZpcnR1YWxpemVkIHNvY2tldCBzaXR1YXRpb24uJiMzNDsgTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgY29uZmlnIFZIT1NUX1ZTT0NLYCBzZXR0aW5nLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIHN0YXRlIG9mIHRoZSB2aG9zdC12c29jayBjb25maWd1cmF0aW9uLiBJcyBpdCBlbmFibGVkLCBkaXNhYmxlZCwgb3IgYnVpbHQgYXMgYSBtb2R1bGU/IFVuZGVyc3RhbmRpbmcgdGhpcyBpcyB0aGUgZm91bmRhdGlvbmFsIGZpcnN0IHN0ZXAuIERlcGVuZGluZyBvbiB0aGUgYW5zd2VyLCBpdCBnaXZlcyB0aGUgZGlyZWN0aW9uIG9mIGZ1cnRoZXIgdHJvdWJsZXNob290aW5nLCBvciBhdCBsZWFzdCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjdXJyZW50IHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkhPU1RfVlNPQ0smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnPTQ2PWNvbmZpZyBWSE9TVF9TQ1NJXG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTU1LVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjU2OmNvbmZpZyBWSE9TVF9WU09DS1xuZHJpdmVycy92aG9zdC9LY29uZmlnLTU3LVx0dHJpc3RhdGUgXCYjMzQ7dmhvc3QgdmlydGlvLXZzb2NrIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYzMQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQ29uZmlndXJhdGlvbiBDaGVjayoqCgpBbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBJIG5lZWQgdG8gZ2V0IGEgYmFzZWxpbmUgdW5kZXJzdGFuZGluZyBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB0byBjaGVjayB0aGUgYGNvbmZpZyBWSE9TVGAgc2V0dGluZ3MuIFRoaXMgaXMgdXN1YWxseSB0aGUgcXVpY2tlc3Qgd2F5IHRvIGlkZW50aWZ5IHRoZSBiYXNpYyB2aXJ0dWFsIGhvc3Qgc2V0dXAuIEkgd2FudCB0byBzZWUgd2hhdCYjMzk7cyBkZWZpbmVkIGF0IHRoZSB0b3AgbGV2ZWwgYW5kIGVuc3VyZSBldmVyeXRoaW5nIGlzIGJlaGF2aW5nIGFzIEkgZXhwZWN0LiBJdCYjMzk7bGwgZ2l2ZSBtZSBhIGZhc3Qgb3ZlcnZpZXcgb2YgaG93IHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIGlzIGRlc2lnbmVkLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hldGhlciB0aGUgdmhvc3QgaXMgbWlzY29uZmlndXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZIT1NUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjI6Y29uZmlnIFZIT1NUX0lPVExCXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMy1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTgtXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6OTpjb25maWcgVkhPU1RfUklOR1xuZHJpdmVycy92aG9zdC9LY29uZmlnLTEwLVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMTUtXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MTY6Y29uZmlnIFZIT1NUX1RBU0tcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0xNy1cdGJvb2xcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMTktXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MjA6Y29uZmlnIFZIT1NUXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMjEtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0yNy1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzoyODptZW51Y29uZmlnIFZIT1NUX01FTlVcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0yOS1cdGJvb2wgXCYjMzQ7VkhPU1QgZHJpdmVyc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZz0zMj1pZiBWSE9TVF9NRU5VXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzMtXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MzQ6Y29uZmlnIFZIT1NUX05FVFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTM1LVx0dHJpc3RhdGUgXCYjMzQ7SG9zdCBrZXJuZWwgYWNjZWxlcmF0b3IgZm9yIHZpcnRpbyBuZXRcJiMzNDtcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDUtXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NDY6Y29uZmlnIFZIT1NUX1NDU0lcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy00Ny1cdHRyaXN0YXRlIFwmIzM0O1ZIT1NUX1NDU0kgVENNIGZhYnJpYyBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTUtXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NTY6Y29uZmlnIFZIT1NUX1ZTT0NLXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTctXHR0cmlzdGF0ZSBcJiMzNDt2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTY5LVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjcwOmNvbmZpZyBWSE9TVF9WRFBBXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzEtXHR0cmlzdGF0ZSBcJiMzNDtWaG9zdCBkcml2ZXIgZm9yIHZEUEEtYmFzZWQgYmFja2VuZFwmIzM0O1xuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy04Mi1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo4Mzpjb25maWcgVkhPU1RfQ1JPU1NfRU5ESUFOX0xFR0FDWVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtDcm9zcy1lbmRpYW4gc3VwcG9ydCBmb3Igdmhvc3RcJiMzNDtcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctOTctXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6OTg6Y29uZmlnIFZIT1NUX0VOQUJMRV9GT1JLX09XTkVSX0NPTlRST0xcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy05OS1cdGJvb2wgXCYjMzQ7RW5hYmxlIFZIT1NUX0VOQUJMRV9GT1JLX09XTkVSX0NPTlRST0xcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MjUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA3NTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVmhvc3QgQ29kZSBDaGFuZ2VzOiBBIFF1aWNrIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIG92ZXIgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQgcHJpbWFyaWx5IGltcGFjdHMgYGRyaXZlcnMvdmhvc3Qvdmhvc3QuY2AuIEkgY2FuIHNlZSB0aGF0IGBDT05GSUdfVkhPU1RgIGlzIHRoZSBrZXkgY29uZmlnIGhlcmUsIGFuZCB0aGF0IGl0JiMzOTtzIHB1bGxlZCBpbiBieSB0aGUgbGlrZXMgb2YgYFZIT1NUX05FVGAgYW5kIGBWSE9TVF9WU09DS2AsIHNvIGVuYWJsaW5nIHRob3NlIHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LgoKSSYjMzk7dmUgemVyb2VkIGluIG9uIHRoZSBtb2RpZmllZCBleHBvcnRlZCBmdW5jdGlvbnMuIGB2aG9zdF9pbml0X2RldmljZV9pb3RsYmAsIGB2aG9zdF9jaHJfcmVhZF9pdGVyYCwgYW5kIGB2aG9zdF9jbGVhcl9tc2dgIGFyZSBkZWZpbml0ZWx5IG9mIGludGVyZXN0LiBJIGNvbmZpcm1lZCB0aGF0IGB2aG9zdF9pbml0X2RldmljZV9pb3RsYmAgaXMgYW4gKmV4aXN0aW5nKiBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQsIGFuZCB0aGUgZGlmZiBzaG93cyB0aGUgYWRkaXRpb24gb2YgYSBuZXcgc3RhdGUgbWFjaGluZSByZWxhdGVkIHRvIElPVExCIG1pc3Nlcy4gTG9va3MgbGlrZSBhIHNvbGlkIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIHZob3N0IGNvZGUuIEkgYWxzbyB2ZXJpZmllZCB0aGF0IGB2aG9zdF9jaHJfcmVhZF9pdGVyYCBhbmQgYHZob3N0X2NsZWFyX21zZ2AgaGF2ZSBiZWVuIG1vZGlmaWVkIGFzIHdlbGwuCgpUaGUgY2hhbmdlcyBhcHBlYXIgdG8gaW1wbGVtZW50IGEgbWVjaGFuaXNtIHRvIGF2b2lkIHNlbmRpbmcgZHVwbGljYXRlIG1pc3MgbWVzc2FnZXMgd2hpY2ggaW5kaWNhdGVzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvZGUuCgpGb3IgZnV6emluZywgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiB0aG9zZSB0aHJlZSBrZXkgc3ltYm9sczogYHZob3N0X2Nocl9yZWFkX2l0ZXJgLCBgdmhvc3RfaW5pdF9kZXZpY2VfaW90bGJgLCBhbmQgYHZob3N0X2NsZWFyX21zZ2AuIEFuZCBvZiBjb3Vyc2UsIEkmIzM5O2xsIGJlIHVzaW5nIGBWSE9TVF9ORVRgLCBgVkhPU1RfVlNPQ0tgLCBhbmQgYFZIT1NUYCBhcyBteSBwcmltYXJ5IGNvbmZpZyBvcHRpb25zLgoKSnVzdCB0byBiZSB0aG9yb3VnaCwgSSBxdWlja2x5IGNoZWNrZWQgZm9yIG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBtb2RpZmllZC4gSSBmb3VuZCB0aGF0IGB2aG9zdF9kZXZfaW5pdGAgaGFzIGJlZW4gbW9kaWZpZWQsIGFuZCBgdmhvc3RfZGVxdWV1ZV9tc2dgIGhhcyBiZWVuIGNoYW5nZWQgYXMgd2VsbC4gU28gSSYjMzk7bGwga2VlcCBhbiBleWUgb24gdGhvc2UgYXMgSSBkaWcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9kZXF1ZXVlX21zZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zob3N0LmM9MzUwOD1FWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9lbnF1ZXVlX21zZyk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUwOS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozNTEwOnN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqdmhvc3RfZGVxdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MTEtXHRcdFx0XHRcdCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTI1LX1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozNTI2OkVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2RlcXVldWVfbXNnKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTI3LVxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaD0yNzM9dm9pZCB2aG9zdF9lbnF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5oLTI3NS1cdFx0ICAgICAgIHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg6Mjc2OnN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqdmhvc3RfZGVxdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LFxuZHJpdmVycy92aG9zdC92aG9zdC5oLTI3Ny1cdFx0XHRcdFx0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkwNQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGB2aG9zdF9kZXF1ZXVlX21zZ2AmIzM5O3MgVXNhZ2UqKgoKUmlnaHQsIGB2aG9zdF9kZXF1ZXVlX21zZ2AgaXMgZXhwb3NlZC4gT2theSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBjaGVjayB0aGUgY3Jvc3MtcmVmZXJlbmNlcy4gSSYjMzk7bGwgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGNhbGwgc2l0ZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gZmluZCB0aGUgbW9kdWxlcyAqY2FsbGluZyogdGhpcyBmdW5jdGlvbi4gS25vd2luZyB0aGF0IHdpbGwgZ2l2ZSBtZSBhIHZlcnkgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSBhbmQgZGVwZW5kZW5jaWVzLiBJcyBpdCBvbmx5IHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gdGhlIHZob3N0IHN1YnN5c3RlbSwgb3IgZG9lcyBpdCBoYXZlIHdpZGVyIGltcGxpY2F0aW9ucz8gQSBxdWljayBzZWFyY2ggb2YgdGhlIGNvZGViYXNlIHNob3VsZCByZXZlYWwgdGhlIGltbWVkaWF0ZSBjYWxsZXJzLiBUaGF0JiMzOTtsbCBwcm92aWRlIHRoZSBncm91bmR3b3JrIGZvciBkZXRlcm1pbmluZyB0aGUgYXJjaGl0ZWN0dXJlJiMzOTtzIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfZGVxdWV1ZV9tc2cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5jPTM1MDg9RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZW5xdWV1ZV9tc2cpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MDktXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzUxMDpzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKnZob3N0X2RlcXVldWVfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTExLVx0XHRcdFx0XHQgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUyNS19XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzUyNjpFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kZXF1ZXVlX21zZyk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUyNy1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg9MjczPXZvaWQgdmhvc3RfZW5xdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LFxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC0yNzUtXHRcdCAgICAgICBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUpO1xuZHJpdmVycy92aG9zdC92aG9zdC5oOjI3NjpzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKnZob3N0X2RlcXVldWVfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC0yNzctXHRcdFx0XHRcdCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0MjIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgRGlzYXBwZWFyYW5jZSBvZiBgdmhvc3RfZGVxdWV1ZV9tc2dgKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGB2aG9zdF9kZXF1ZXVlX21zZ2Agc2VlbXMgdG8gYmUgY2FsbGVkICpvbmx5KiB3aXRoaW4gYHZob3N0LmNgLiBJIGRpZCBhIHF1aWNrIGBncmVwYCwgYW5kIGl0IGRpZG4mIzM5O3QgdHVybiB1cCBhbnkgb3RoZXIgb2NjdXJyZW5jZXMgaW4gdGhlIGNvZGViYXNlIGJlc2lkZXMgYHZob3N0LmNgLCB3aGljaCBpcyBvZGQuCgpIb2xkIG9uLi4uIEkgcmVtZW1iZXIgc2VlaW5nIHNvbWV0aGluZyBhYm91dCB0aGlzIGluIHRoZSBwYXRjaCBub3Rlcy4gQWgsIGhlcmUgaXQgaXM6IHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBgdmhvc3RfZGVxdWV1ZV9tc2dgIGJlaW5nIGNhbGxlZCBpbiBgdmhvc3RfY2hyX3JlYWRfaXRlcmAuIEJ1dCwgdGhhdCBjYWxsIGhhcyBiZWVuICpyZW1vdmVkKiBpbiB0aGUgcGF0Y2ggYW5kIHJlcGxhY2VkIHdpdGggc29tZSBjb2RlIHVzaW5nIGBzcGluX2xvY2tgIGFuZCBjaGVja2luZyB0aGUgYHJlYWRfbGlzdGAuCgpTbywgaXQmIzM5O3MgcHJldHR5IGNsZWFyOiBgdmhvc3RfZGVxdWV1ZV9tc2dgICppc24mIzM5O3QqIHVzZWQgaW4gYHZob3N0X2Nocl9yZWFkX2l0ZXJgIGFueW1vcmUuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIG5vdyBpcy4uLiBpcyBpdCB1c2VkICphbnl3aGVyZSBlbHNlKj8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgbm90IGJlaW5nIGNhbGxlZCBieSBhbnl0aGluZyBlbHNlLiBUaW1lIHRvIGRvIGFub3RoZXIgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X2RlcXVldWVfbXNnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvdmhvc3QuYz0zNTA4PUVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2VucXVldWVfbXNnKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTA5LVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjM1MTA6c3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9kZXF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUxMS1cdFx0XHRcdFx0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MjUtfVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjM1MjY6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGVxdWV1ZV9tc2cpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MjctXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5oPTI3Mz12b2lkIHZob3N0X2VucXVldWVfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjc1LVx0XHQgICAgICAgc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaDoyNzY6c3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9kZXF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjc3LVx0XHRcdFx0XHQgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTY1CgkJCQkJCQlvdXRwdXQ6IDIxNQoJCQkJCQkJdGhvdWdodHM6IDMwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBWaG9zdCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgdGhyb3VnaCB0aGlzIHBhdGNoIGFuZCBoZXJlJiMzOTtzIG15IHRha2U6IHRoZSBmdW5jdGlvbiBgdmhvc3RfZGVxdWV1ZV9tc2dgIGFwcGVhcnMgdG8gYmUgdW51c2VkLCB3aGljaCBpcyBvZGQuIEkgZGlkIGEgZ2xvYmFsIGdyZXAsIHNvIEkmIzM5O20gcHJldHR5IGNvbmZpZGVudCBpdCYjMzk7cyBub3QgYmVpbmcgY2FsbGVkIGFueXdoZXJlIGluIHRoZSBrZXJuZWwgdHJlZSwgdW5sZXNzIGl0JiMzOTtzIGluIHNvbWUgZXh0cmVtZWx5IG9ic2N1cmUsIG5vbi1zdGFuZGFyZCB2aG9zdCBkcml2ZXIuIEJ1dCBmcm9tIHdoYXQgSSBjYW4gc2VlLCBpdCYjMzk7cyBqdXN0IGFuIGV4cG9ydGVkIGZ1bmN0aW9uIHNpdHRpbmcgdGhlcmUsIGRvaW5nIG5vdGhpbmcuCgpOb3csIGxldCYjMzk7cyBnZXQgdG8gdGhlIG1lYXQgb2YgdGhpcyBwYXRjaC4gSSBzZWUgY2hhbmdlcyBmb2N1c2VkIG9uIGB2aG9zdF9jaHJfcmVhZF9pdGVyYCwgYHZob3N0X2luaXRfZGV2aWNlX2lvdGxiYCwgYW5kIGB2aG9zdF9jbGVhcl9tc2dgLiBUaGVzZSBhcmUgY3JpdGljYWwsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGNvbnRleHQuIFRoZSBwYXRjaCAqaW50cm9kdWNlcyBhIG5ldyBzdGF0ZSBtYWNoaW5lKiBkZXNpZ25lZCB0byBoYW5kbGUgdmhvc3QgSU9UTEIgbWlzc2VzIGFuZCwgaW1wb3J0YW50bHksIGNvYWxlc2NlcyB0aG9zZSBtZXNzYWdlcyB0aGF0IGdldCBwYXNzZWQgdXAgdG8gdXNlcnNwYWNlLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgYWJvdXQgb3B0aW1pemluZyBob3cgdGhlIGtlcm5lbCBkZWFscyB3aXRoIG1lbW9yeSBhZGRyZXNzIHRyYW5zbGF0aW9uIGFuZCByZWR1Y2luZyB0aGUgbnVtYmVyIG9mIG5vdGlmaWNhdGlvbnMgc2VudCB0byB0aGUgdXNlcnNwYWNlIHByb2Nlc3MsIHJpZ2h0PwoKU28sIGJlY2F1c2UgdGhpcyB0b3VjaGVzIGNvcmUgdmhvc3QgY29kZSwgYW5kIHRoYXQgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBgL2Rldi92aG9zdC1uZXRgIGFuZCBgL2Rldi92aG9zdC12c29ja2AgZGV2aWNlcywgdGhpcyBpcyBnb2luZyB0byBuZWVkIHNvbWUgc2VyaW91cyBmdXp6aW5nLiBUaGUgZ29hbCBvZiB0aGF0IGZ1enppbmcgaXMgdG8gcm9vdCBvdXQgYW55IHBvdGVudGlhbCBuYXN0aWVzIHRoZSBuZXcgc3RhdGUgbWFjaGluZSBtaWdodCBpbnRyb2R1Y2UuIEkmIzM5O20gdGhpbmtpbmcgZGVhZGxvY2tzIGFyZSBhIHBvc3NpYmlsaXR5LCBhcyB3aXRoIGFueSBzdGF0ZSBtYWNoaW5lIGNoYW5nZSwgYW5kIG9mIGNvdXJzZSwgbWVtb3J5IGxlYWtzIGFuZCB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXRpZXMgYXJlIGFsd2F5cyBvbiB0aGUgdGFibGUgd2hlbiB5b3XigJlyZSBkZWFsaW5nIHdpdGggYXN5bmNocm9ub3VzIGNvbW11bmljYXRpb24gYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXJzcGFjZS4KCkFscmlnaHQsIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgZ29vZCBoYW5kbGUgb24gdGhpcyBhbmQgYW0gcmVhZHkgdG8gZGl2ZSBpbnRvIHRoZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9ORVQmIzM0OywKICAgICYjMzQ7VkhPU1RfVlNPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF9jaHJfcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O3Zob3N0X2luaXRfZGV2aWNlX2lvdGxiJiMzNDssCiAgICAmIzM0O3Zob3N0X2NsZWFyX21zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN0YXRlIG1hY2hpbmUgZm9yIGhhbmRsaW5nIHZob3N0IElPVExCIG1pc3NlcywgY29hbGVzY2luZyBkdXBsaWNhdGUgbWlzcyBtZXNzYWdlcyB0byB1c2Vyc3BhY2UuIFRoaXMgaW52b2x2ZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgdmhvc3QgY29kZSwgc3BlY2lmaWNhbGx5IGluIHRoZSBjaGFyYWN0ZXIgZGV2aWNlIHJlYWQgaGFuZGxlciAodmhvc3RfY2hyX3JlYWRfaXRlciksIGRldmljZSBpbml0aWFsaXphdGlvbiAodmhvc3RfaW5pdF9kZXZpY2VfaW90bGIpLCBhbmQgbWVzc2FnZSBjbGVhcmluZyAodmhvc3RfY2xlYXJfbXNnKS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdmhvc3QgZGV2aWNlIG5vZGVzIChlLmcuLCAvZGV2L3Zob3N0LW5ldCwgL2Rldi92aG9zdC12c29jaykgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgc3RhdGUgbWFjaGluZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgZGVhZGxvY2tzLCBtZW1vcnkgbGVha3MsIG9yIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1RfTkVUJiMzNDssCiAgICAmIzM0O1ZIT1NUX1ZTT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3RfY2hyX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDt2aG9zdF9pbml0X2RldmljZV9pb3RsYiYjMzQ7LAogICAgJiMzNDt2aG9zdF9jbGVhcl9tc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzdGF0ZSBtYWNoaW5lIGZvciBoYW5kbGluZyB2aG9zdCBJT1RMQiBtaXNzZXMsIGNvYWxlc2NpbmcgZHVwbGljYXRlIG1pc3MgbWVzc2FnZXMgdG8gdXNlcnNwYWNlLiBUaGlzIGludm9sdmVzIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIHZob3N0IGNvZGUsIHNwZWNpZmljYWxseSBpbiB0aGUgY2hhcmFjdGVyIGRldmljZSByZWFkIGhhbmRsZXIgKHZob3N0X2Nocl9yZWFkX2l0ZXIpLCBkZXZpY2UgaW5pdGlhbGl6YXRpb24gKHZob3N0X2luaXRfZGV2aWNlX2lvdGxiKSwgYW5kIG1lc3NhZ2UgY2xlYXJpbmcgKHZob3N0X2NsZWFyX21zZykuIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHZob3N0IGRldmljZSBub2RlcyAoZS5nLiwgL2Rldi92aG9zdC1uZXQsIC9kZXYvdmhvc3QtdnNvY2spIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IHN0YXRlIG1hY2hpbmUgZG9lc24mIzM5O3QgaW50cm9kdWNlIGRlYWRsb2NrcywgbWVtb3J5IGxlYWtzLCBvciB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXRpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjE0bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjE0bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9jYWwgYHNuYXBzaG90YCB1bmlvbiBpbiBgdmhvc3RfY2hyX3JlYWRfaXRlcmAgd2hpY2ggaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgdmlhIGBjb3B5X3RvX2l0ZXJfZnVsbGAuIEhvd2V2ZXIsIHRoaXMgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyBiZWNhdXNlOlxuMS4gVGhlIGBzbmFwc2hvdGAgaXMgcG9wdWxhdGVkIHVzaW5nIGBtZW1jcHlgIGZyb20gYW4gZXhpc3RpbmcgbWVzc2FnZSBub2RlIChgZmlyc3QtXHUwMDNlbXNnX3YyYCBvciBgZmlyc3QtXHUwMDNlbXNnYCkuXG4yLiBUaGUgc291cmNlIG1lc3NhZ2Ugbm9kZSBpcyBhbGxvY2F0ZWQgaW4gYHZob3N0X25ld19tc2dgIHVzaW5nIGBremFsbG9jYCAodmlhIGBremFsbG9jX29iamApLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIGVudGlyZSBzdHJ1Y3R1cmUsIGluY2x1ZGluZyBhbnkgY29tcGlsZXItaW5zZXJ0ZWQgcGFkZGluZywgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC5cbjMuIFdoZW4gYSBtZXNzYWdlIGlzIHJldXNlZCBhbmQgaXRzIHR5cGUgY2hhbmdlcywgYHZob3N0X3NldF9pb3RsYl9taXNzYCBleHBsaWNpdGx5IGNhbGxzIGBtZW1zZXRgIHRvIHplcm8gb3V0IHRoZSBtZXNzYWdlIGZpZWxkcywgZW5zdXJpbmcgbm8gc3RhbGUgZGF0YSBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcgcmVtYWlucy5cbjQuIFRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIHRvIHVzZXIgc3BhY2UgZXhhY3RseSBtYXRjaGVzIHRoZSBzaXplIG9mIHRoZSBmdWxseSBpbml0aWFsaXplZCBtZXNzYWdlIHN0cnVjdHVyZS5cblxuVGhlIHJlbWFpbmRlciBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgbGlzdCBtYW5pcHVsYXRpb25zLCBzdGF0ZSB0cmFja2luZyAoYGlvdGxiX21pc3Nfc3RhdGVgKSwgYW5kIGNvYWxlc2NpbmcgbG9naWMgdG8gcHJldmVudCBJT1RMQiBtaXNzIGZsb29kcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBsaXN0IGNvcnJ1cHRpb24sIG9yIGRlYWRsb2NrcykgYXJlIHBlcmZlY3RseSBzdWl0ZWQgZm9yIHN0YW5kYXJkIEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGFiYjcxOTlkNTQ5MTBhNjgxOTUyZWY4ZmQ4NThkY2RkNzc3ZjU5MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDE1OjA4OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5jIGIvZHJpdmVycy92aG9zdC92aG9zdC5jCmluZGV4IDRjNTI1YjNlMTZlYWQuLmVhYjkwNGI0YjQ4NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmMKQEAgLTM0LDYgJiM0MzszNCwxMyBAQAogCiAjaW5jbHVkZSAmIzM0O3Zob3N0LmgmIzM0OwogCiYjNDM7ZW51bSB2aG9zdF9pb3RsYl9taXNzX3N0YXRlIHsKJiM0MzsJVkhPU1RfSU9UTEJfTUlTU19OT05FLAomIzQzOwlWSE9TVF9JT1RMQl9NSVNTX1JFQUQsCiYjNDM7CVZIT1NUX0lPVExCX01JU1NfUkVBRElORywKJiM0MzsJVkhPU1RfSU9UTEJfTUlTU19QRU5ESU5HLAomIzQzO307CiYjNDM7CiBzdGF0aWMgdXNob3J0IG1heF9tZW1fcmVnaW9ucyA9IDY0OwogbW9kdWxlX3BhcmFtKG1heF9tZW1fcmVnaW9ucywgdXNob3J0LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobWF4X21lbV9yZWdpb25zLApAQCAtNjEzLDYgJiM0Mzs2MjAsOSBAQCB2b2lkIHZob3N0X2Rldl9pbml0KHN0cnVjdCB2aG9zdF9kZXYgKmRldiwKIAkJdnEtJmd0O2hlYWRzID0gTlVMTDsKIAkJdnEtJmd0O25oZWFkcyA9IE5VTEw7CiAJCXZxLSZndDtkZXYgPSBkZXY7CiYjNDM7CQl2cS0mZ3Q7aW90bGJfbWlzc19zdGF0ZSA9IFZIT1NUX0lPVExCX01JU1NfTk9ORTsKJiM0MzsJCXZxLSZndDtpb3RsYl9taXNzX3NlcSA9IDA7CiYjNDM7CQl2cS0mZ3Q7aW90bGJfbWlzc19ub2RlID0gTlVMTDsKIAkJbXV0ZXhfaW5pdCgmYW1wO3ZxLSZndDttdXRleCk7CiAJCXZob3N0X3ZxX3Jlc2V0KGRldiwgdnEpOwogCQlpZiAodnEtJmd0O2hhbmRsZV9raWNrKQpAQCAtMTE3Nyw2ICYjNDM7MTE4NywyMCBAQCB2b2lkIHZob3N0X2Rldl9zdG9wKHN0cnVjdCB2aG9zdF9kZXYgKmRldikKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2Rldl9zdG9wKTsKIAomIzQzO3N0YXRpYyB2b2lkIHZob3N0X3VudHJhY2tfaW90bGJfbWlzcyhzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IG5vZGUtJmd0O3ZxOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7dnEtJmd0O2Rldi0mZ3Q7aW90bGJfbG9jayk7CiYjNDM7CiYjNDM7CWlmICh2cS0mZ3Q7aW90bGJfbWlzc19ub2RlICE9IG5vZGUpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXZxLSZndDtpb3RsYl9taXNzX25vZGUgPSBOVUxMOwomIzQzOwl2cS0mZ3Q7aW90bGJfbWlzc19zdGF0ZSA9IFZIT1NUX0lPVExCX01JU1NfTk9ORTsKJiM0MzsJdnEtJmd0O2lvdGxiX21pc3Nfc2VxJiM0MzsmIzQzOzsKJiM0Mzt9CiYjNDM7CiB2b2lkIHZob3N0X2NsZWFyX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlLCAqbjsKQEAgLTExODQsMTIgJiM0MzsxMjA4LDE0IEBAIHZvaWQgdmhvc3RfY2xlYXJfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldikKIAlzcGluX2xvY2soJmFtcDtkZXYtJmd0O2lvdGxiX2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG4sICZhbXA7ZGV2LSZndDtyZWFkX2xpc3QsIG5vZGUpIHsKLQkJbGlzdF9kZWwoJmFtcDtub2RlLSZndDtub2RlKTsKJiM0MzsJCWxpc3RfZGVsX2luaXQoJmFtcDtub2RlLSZndDtub2RlKTsKJiM0MzsJCXZob3N0X3VudHJhY2tfaW90bGJfbWlzcyhub2RlKTsKIAkJa2ZyZWUobm9kZSk7CiAJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG4sICZhbXA7ZGV2LSZndDtwZW5kaW5nX2xpc3QsIG5vZGUpIHsKLQkJbGlzdF9kZWwoJmFtcDtub2RlLSZndDtub2RlKTsKJiM0MzsJCWxpc3RfZGVsX2luaXQoJmFtcDtub2RlLSZndDtub2RlKTsKJiM0MzsJCXZob3N0X3VudHJhY2tfaW90bGJfbWlzcyhub2RlKTsKIAkJa2ZyZWUobm9kZSk7CiAJfQogCkBAIC0xNTg1LDIwICYjNDM7MTYxMSw3MyBAQCBzdGF0aWMgaW5saW5lIGludCB2aG9zdF9nZXRfZGVzYyhzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwKIAlyZXR1cm4gdmhvc3RfY29weV9mcm9tX3VzZXIodnEsIGRlc2MsIHZxLSZndDtkZXNjICYjNDM7IGlkeCwgc2l6ZW9mKCpkZXNjKSk7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IHZob3N0X2lvdGxiX21zZyAqCiYjNDM7dmhvc3RfZ2V0X2lvdGxiX21zZyhzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUpCiYjNDM7ewomIzQzOwlpZiAobm9kZS0mZ3Q7bXNnLnR5cGUgPT0gVkhPU1RfSU9UTEJfTVNHX1YyKQomIzQzOwkJcmV0dXJuICZhbXA7bm9kZS0mZ3Q7bXNnX3YyLmlvdGxiOwomIzQzOwomIzQzOwlyZXR1cm4gJmFtcDtub2RlLSZndDttc2cuaW90bGI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZob3N0X3NldF9pb3RsYl9taXNzKHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSwgYm9vbCB2MiwKJiM0MzsJCQkJIHU2NCBpb3ZhLCBpbnQgYWNjZXNzKQomIzQzO3sKJiM0MzsJc3RydWN0IHZob3N0X2lvdGxiX21zZyAqbXNnOwomIzQzOwl1MzIgdHlwZSA9IHYyID8gVkhPU1RfSU9UTEJfTVNHX1YyIDogVkhPU1RfSU9UTEJfTVNHOwomIzQzOwomIzQzOwlpZiAobm9kZS0mZ3Q7bXNnLnR5cGUgIT0gdHlwZSkKJiM0MzsJCW1lbXNldCgmYW1wO25vZGUtJmd0O21zZ192MiwgMCwgc2l6ZW9mKG5vZGUtJmd0O21zZ192MikpOwomIzQzOwlub2RlLSZndDttc2cudHlwZSA9IHR5cGU7CiYjNDM7CW1zZyA9IHZob3N0X2dldF9pb3RsYl9tc2cobm9kZSk7CiYjNDM7CiYjNDM7CW1zZy0mZ3Q7dHlwZSA9IFZIT1NUX0lPVExCX01JU1M7CiYjNDM7CW1zZy0mZ3Q7aW92YSA9IGlvdmE7CiYjNDM7CW1zZy0mZ3Q7cGVybSA9IGFjY2VzczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgdmhvc3RfaW90bGJfdXBkYXRlX2NvdmVycyhzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICp1cGRhdGUsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1pc3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gbWlzcy0mZ3Q7dHlwZSA9PSBWSE9TVF9JT1RMQl9NSVNTICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHVwZGF0ZS0mZ3Q7aW92YSAmbHQ7PSBtaXNzLSZndDtpb3ZhICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIG1pc3MtJmd0O2lvdmEgLSB1cGRhdGUtJmd0O2lvdmEgJmx0OyB1cGRhdGUtJmd0O3NpemUgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgKHVwZGF0ZS0mZ3Q7cGVybSAmYW1wOyBtaXNzLSZndDtwZXJtKSA9PSBtaXNzLSZndDtwZXJtOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHZob3N0X2lvdGxiX25vdGlmeV92cShzdHJ1Y3Qgdmhvc3RfZGV2ICpkLAogCQkJCSAgc3RydWN0IHZob3N0X2lvdGxiX21zZyAqbXNnKQogewogCXN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSwgKm47CiYjNDM7CWludCBpOwogCiAJc3Bpbl9sb2NrKCZhbXA7ZC0mZ3Q7aW90bGJfbG9jayk7CiAKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGQtJmd0O252cXM7ICYjNDM7JiM0MztpKSB7CiYjNDM7CQlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGQtJmd0O3Zxc1tpXTsKJiM0MzsKJiM0MzsJCW5vZGUgPSB2cS0mZ3Q7aW90bGJfbWlzc19ub2RlOwomIzQzOwkJaWYgKCFub2RlIHx8CiYjNDM7CQkgICAgIXZob3N0X2lvdGxiX3VwZGF0ZV9jb3ZlcnMobXNnLAomIzQzOwkJCQkJICAgICAgIHZob3N0X2dldF9pb3RsYl9tc2cobm9kZSkpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJbGlzdF9kZWxfaW5pdCgmYW1wO25vZGUtJmd0O25vZGUpOwomIzQzOwkJdmhvc3RfdW50cmFja19pb3RsYl9taXNzKG5vZGUpOwomIzQzOwkJdmhvc3RfcG9sbF9xdWV1ZSgmYW1wO3ZxLSZndDtwb2xsKTsKJiM0MzsJCWtmcmVlKG5vZGUpOwomIzQzOwl9CiYjNDM7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG4sICZhbXA7ZC0mZ3Q7cGVuZGluZ19saXN0LCBub2RlKSB7CiAJCXN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKnZxX21zZyA9ICZhbXA7bm9kZS0mZ3Q7bXNnLmlvdGxiOwomIzQzOwomIzQzOwkJaWYgKG5vZGUtJmd0O3ZxLSZndDtpb3RsYl9taXNzX25vZGUgPT0gbm9kZSkKJiM0MzsJCQljb250aW51ZTsKIAkJaWYgKG1zZy0mZ3Q7aW92YSAmbHQ7PSB2cV9tc2ctJmd0O2lvdmEgJmFtcDsmYW1wOwogCQkgICAgbXNnLSZndDtpb3ZhICYjNDM7IG1zZy0mZ3Q7c2l6ZSAtIDEgJmd0Oz0gdnFfbXNnLSZndDtpb3ZhICZhbXA7JmFtcDsKIAkJICAgIHZxX21zZy0mZ3Q7dHlwZSA9PSBWSE9TVF9JT1RMQl9NSVNTKSB7CiAJCQl2aG9zdF9wb2xsX3F1ZXVlKCZhbXA7bm9kZS0mZ3Q7dnEtJmd0O3BvbGwpOwotCQkJbGlzdF9kZWwoJmFtcDtub2RlLSZndDtub2RlKTsKJiM0MzsJCQlsaXN0X2RlbF9pbml0KCZhbXA7bm9kZS0mZ3Q7bm9kZSk7CiAJCQlrZnJlZShub2RlKTsKIAkJfQogCX0KQEAgLTE3NTUsOSAmIzQzOzE4MzQsMTggQEAgc3NpemVfdCB2aG9zdF9jaHJfcmVhZF9pdGVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IGlvdl9pdGVyICp0bywKIAkJCSAgICBpbnQgbm9ibG9jaykKIHsKIAlERUZJTkVfV0FJVCh3YWl0KTsKLQlzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGU7CiYjNDM7CXVuaW9uIHsKJiM0MzsJCXN0cnVjdCB2aG9zdF9tc2cgbXNnOwomIzQzOwkJc3RydWN0IHZob3N0X21zZ192MiBtc2dfdjI7CiYjNDM7CX0gc25hcHNob3Q7CiYjNDM7CXN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbWlzc190b2tlbiA9IE5VTEw7CiYjNDM7CXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKm1pc3NfdnEgPSBOVUxMOwomIzQzOwlzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUgPSBOVUxMOwomIzQzOwl1NjQgbWlzc19zZXEgPSAwOwogCXNzaXplX3QgcmV0ID0gMDsKIAl1bnNpZ25lZCBzaXplID0gc2l6ZW9mKHN0cnVjdCB2aG9zdF9tc2cpOwomIzQzOwlib29sIHNob3J0X2J1ZmZlciA9IGZhbHNlOwomIzQzOwlib29sIHdha2UgPSBmYWxzZTsKIAogCWlmIChpb3ZfaXRlcl9jb3VudCh0bykgJmx0OyBzaXplKQogCQlyZXR1cm4gMDsKQEAgLTE3NjcsOCAmIzQzOzE4NTUsMzYgQEAgc3NpemVfdCB2aG9zdF9jaHJfcmVhZF9pdGVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IGlvdl9pdGVyICp0bywKIAkJCXByZXBhcmVfdG9fd2FpdCgmYW1wO2Rldi0mZ3Q7d2FpdCwgJmFtcDt3YWl0LAogCQkJCQlUQVNLX0lOVEVSUlVQVElCTEUpOwogCi0JCW5vZGUgPSB2aG9zdF9kZXF1ZXVlX21zZyhkZXYsICZhbXA7ZGV2LSZndDtyZWFkX2xpc3QpOwotCQlpZiAobm9kZSkKJiM0MzsJCXNwaW5fbG9jaygmYW1wO2Rldi0mZ3Q7aW90bGJfbG9jayk7CiYjNDM7CQlpZiAoIWxpc3RfZW1wdHkoJmFtcDtkZXYtJmd0O3JlYWRfbGlzdCkpIHsKJiM0MzsJCQlzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKmZpcnN0OwomIzQzOwomIzQzOwkJCWZpcnN0ID0gbGlzdF9maXJzdF9lbnRyeSgmYW1wO2Rldi0mZ3Q7cmVhZF9saXN0LAomIzQzOwkJCQkJCSBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUsIG5vZGUpOwomIzQzOwkJCWlmIChmaXJzdC0mZ3Q7dnEtJmd0O2lvdGxiX21pc3Nfbm9kZSA9PSBmaXJzdCkgewomIzQzOwkJCQlzaXplID0gZmlyc3QtJmd0O21zZy50eXBlID09IFZIT1NUX0lPVExCX01TR19WMiA/CiYjNDM7CQkJCSAgICAgICBzaXplb2YoZmlyc3QtJmd0O21zZ192MikgOiBzaXplb2YoZmlyc3QtJmd0O21zZyk7CiYjNDM7CQkJCWlmIChpb3ZfaXRlcl9jb3VudCh0bykgJmx0OyBzaXplKSB7CiYjNDM7CQkJCQlzaG9ydF9idWZmZXIgPSB0cnVlOwomIzQzOwkJCQl9IGVsc2UgewomIzQzOwkJCQkJbWVtY3B5KCZhbXA7c25hcHNob3QubXNnX3YyLCAmYW1wO2ZpcnN0LSZndDttc2dfdjIsCiYjNDM7CQkJCQkgICAgICAgc2l6ZSk7CiYjNDM7CQkJCQlsaXN0X21vdmVfdGFpbCgmYW1wO2ZpcnN0LSZndDtub2RlLAomIzQzOwkJCQkJCSAgICAgICAmYW1wO2Rldi0mZ3Q7cGVuZGluZ19saXN0KTsKJiM0MzsJCQkJCWZpcnN0LSZndDt2cS0mZ3Q7aW90bGJfbWlzc19zdGF0ZSA9CiYjNDM7CQkJCQkJVkhPU1RfSU9UTEJfTUlTU19SRUFESU5HOwomIzQzOwkJCQkJbWlzc192cSA9IGZpcnN0LSZndDt2cTsKJiM0MzsJCQkJCW1pc3NfdG9rZW4gPSBmaXJzdDsKJiM0MzsJCQkJCW1pc3Nfc2VxID0gZmlyc3QtJmd0O3ZxLSZndDtpb3RsYl9taXNzX3NlcTsKJiM0MzsJCQkJfQomIzQzOwkJCX0gZWxzZSB7CiYjNDM7CQkJCWxpc3RfZGVsX2luaXQoJmFtcDtmaXJzdC0mZ3Q7bm9kZSk7CiYjNDM7CQkJCW5vZGUgPSBmaXJzdDsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO2Rldi0mZ3Q7aW90bGJfbG9jayk7CiYjNDM7CiYjNDM7CQlpZiAobm9kZSB8fCBtaXNzX3ZxIHx8IHNob3J0X2J1ZmZlcikKIAkJCWJyZWFrOwogCQlpZiAobm9ibG9jaykgewogCQkJcmV0ID0gLUVBR0FJTjsKQEAgLTE3ODksNiAmIzQzOzE5MDUsMzQgQEAgc3NpemVfdCB2aG9zdF9jaHJfcmVhZF9pdGVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IGlvdl9pdGVyICp0bywKIAlpZiAoIW5vYmxvY2spCiAJCWZpbmlzaF93YWl0KCZhbXA7ZGV2LSZndDt3YWl0LCAmYW1wO3dhaXQpOwogCiYjNDM7CWlmIChzaG9ydF9idWZmZXIpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKG1pc3NfdnEpIHsKJiM0MzsJCWJvb2wgY29waWVkID0gY29weV90b19pdGVyX2Z1bGwoJmFtcDtzbmFwc2hvdC5tc2dfdjIsIHNpemUsIHRvKTsKJiM0MzsKJiM0MzsJCXNwaW5fbG9jaygmYW1wO2Rldi0mZ3Q7aW90bGJfbG9jayk7CiYjNDM7CQlub2RlID0gbWlzc192cS0mZ3Q7aW90bGJfbWlzc19ub2RlOwomIzQzOwkJaWYgKG5vZGUgPT0gbWlzc190b2tlbiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbWlzc192cS0mZ3Q7aW90bGJfbWlzc19zZXEgPT0gbWlzc19zZXEgJmFtcDsmYW1wOwomIzQzOwkJICAgIG1pc3NfdnEtJmd0O2lvdGxiX21pc3Nfc3RhdGUgPT0gVkhPU1RfSU9UTEJfTUlTU19SRUFESU5HKSB7CiYjNDM7CQkJaWYgKGNvcGllZCkgewomIzQzOwkJCQltaXNzX3ZxLSZndDtpb3RsYl9taXNzX3N0YXRlID0KJiM0MzsJCQkJCVZIT1NUX0lPVExCX01JU1NfUEVORElORzsKJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQlsaXN0X21vdmVfdGFpbCgmYW1wO25vZGUtJmd0O25vZGUsICZhbXA7ZGV2LSZndDtyZWFkX2xpc3QpOwomIzQzOwkJCQltaXNzX3ZxLSZndDtpb3RsYl9taXNzX3N0YXRlID0gVkhPU1RfSU9UTEJfTUlTU19SRUFEOwomIzQzOwkJCQl3YWtlID0gdHJ1ZTsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO2Rldi0mZ3Q7aW90bGJfbG9jayk7CiYjNDM7CiYjNDM7CQlpZiAod2FrZSkKJiM0MzsJCQl3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbCgmYW1wO2Rldi0mZ3Q7d2FpdCwKJiM0MzsJCQkJCQkgICBFUE9MTElOIHwgRVBPTExSRE5PUk0pOwomIzQzOwkJcmV0dXJuIGNvcGllZCA/IHNpemUgOiAtRUZBVUxUOwomIzQzOwl9CiYjNDM7CiAJaWYgKG5vZGUpIHsKIAkJc3RydWN0IHZob3N0X2lvdGxiX21zZyAqbXNnOwogCQl2b2lkICpzdGFydCA9ICZhbXA7bm9kZS0mZ3Q7bXNnOwpAQCAtMTgxOSwyOSAmIzQzOzE5NjMsNjkgQEAgc3NpemVfdCB2aG9zdF9jaHJfcmVhZF9pdGVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IGlvdl9pdGVyICp0bywKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2Nocl9yZWFkX2l0ZXIpOwogCiYjNDM7c3RhdGljIGJvb2wgdmhvc3RfaW90bGJfbWlzc19jb2FsZXNjZShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgYm9vbCB2MiwKJiM0MzsJCQkJICAgICAgdTY0IGlvdmEsIGludCBhY2Nlc3MsIGJvb2wgKndha2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUgPSB2cS0mZ3Q7aW90bGJfbWlzc19ub2RlOwomIzQzOwlzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2c7CiYjNDM7CXUzMiB0eXBlID0gdjIgPyBWSE9TVF9JT1RMQl9NU0dfVjIgOiBWSE9TVF9JT1RMQl9NU0c7CiYjNDM7CWJvb2wgc2FtZTsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3ZxLSZndDtkZXYtJmd0O2lvdGxiX2xvY2spOwomIzQzOwomIzQzOwlpZiAoIW5vZGUpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW1zZyA9IHZob3N0X2dldF9pb3RsYl9tc2cobm9kZSk7CiYjNDM7CXNhbWUgPSBub2RlLSZndDttc2cudHlwZSA9PSB0eXBlICZhbXA7JmFtcDsgbXNnLSZndDt0eXBlID09IFZIT1NUX0lPVExCX01JU1MgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgbXNnLSZndDtpb3ZhID09IGlvdmEgJmFtcDsmYW1wOyBtc2ctJmd0O3Blcm0gPT0gYWNjZXNzOwomIzQzOwlpZiAoc2FtZSAmYW1wOyZhbXA7IHZxLSZndDtpb3RsYl9taXNzX3N0YXRlICE9IFZIT1NUX0lPVExCX01JU1NfUkVBRElORykKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlpZiAoIXNhbWUpCiYjNDM7CQl2aG9zdF9zZXRfaW90bGJfbWlzcyhub2RlLCB2MiwgaW92YSwgYWNjZXNzKTsKJiM0MzsJdnEtJmd0O2lvdGxiX21pc3Nfc2VxJiM0MzsmIzQzOzsKJiM0MzsJaWYgKHZxLSZndDtpb3RsYl9taXNzX3N0YXRlICE9IFZIT1NUX0lPVExCX01JU1NfUkVBRCkgewomIzQzOwkJbGlzdF9tb3ZlX3RhaWwoJmFtcDtub2RlLSZndDtub2RlLCAmYW1wO3ZxLSZndDtkZXYtJmd0O3JlYWRfbGlzdCk7CiYjNDM7CQl2cS0mZ3Q7aW90bGJfbWlzc19zdGF0ZSA9IFZIT1NUX0lPVExCX01JU1NfUkVBRDsKJiM0MzsJCSp3YWtlID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHZob3N0X2lvdGxiX21pc3Moc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHU2NCBpb3ZhLCBpbnQgYWNjZXNzKQogewogCXN0cnVjdCB2aG9zdF9kZXYgKmRldiA9IHZxLSZndDtkZXY7CiAJc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlOwotCXN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1zZzsKIAlib29sIHYyID0gdmhvc3RfYmFja2VuZF9oYXNfZmVhdHVyZSh2cSwgVkhPU1RfQkFDS0VORF9GX0lPVExCX01TR19WMik7CiYjNDM7CWJvb2wgd2FrZSA9IGZhbHNlOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7dnEtJmd0O211dGV4KTsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7ZGV2LSZndDtpb3RsYl9sb2NrKTsKJiM0MzsJaWYgKHZob3N0X2lvdGxiX21pc3NfY29hbGVzY2UodnEsIHYyLCBpb3ZhLCBhY2Nlc3MsICZhbXA7d2FrZSkpIHsKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7ZGV2LSZndDtpb3RsYl9sb2NrKTsKJiM0MzsJCWlmICh3YWtlKQomIzQzOwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKCZhbXA7ZGV2LSZndDt3YWl0LAomIzQzOwkJCQkJCSAgIEVQT0xMSU4gfCBFUE9MTFJETk9STSk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9jaygmYW1wO2Rldi0mZ3Q7aW90bGJfbG9jayk7CiAKIAlub2RlID0gdmhvc3RfbmV3X21zZyh2cSwgdjIgPyBWSE9TVF9JT1RMQl9NU0dfVjIgOiBWSE9TVF9JT1RMQl9NU0cpOwogCWlmICghbm9kZSkKIAkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CXZob3N0X3NldF9pb3RsYl9taXNzKG5vZGUsIHYyLCBpb3ZhLCBhY2Nlc3MpOwogCi0JaWYgKHYyKSB7Ci0JCW5vZGUtJmd0O21zZ192Mi50eXBlID0gVkhPU1RfSU9UTEJfTVNHX1YyOwotCQltc2cgPSAmYW1wO25vZGUtJmd0O21zZ192Mi5pb3RsYjsKLQl9IGVsc2UgewotCQltc2cgPSAmYW1wO25vZGUtJmd0O21zZy5pb3RsYjsKLQl9Ci0KLQltc2ctJmd0O3R5cGUgPSBWSE9TVF9JT1RMQl9NSVNTOwotCW1zZy0mZ3Q7aW92YSA9IGlvdmE7Ci0JbXNnLSZndDtwZXJtID0gYWNjZXNzOwomIzQzOwlzcGluX2xvY2soJmFtcDtkZXYtJmd0O2lvdGxiX2xvY2spOwomIzQzOwl2cS0mZ3Q7aW90bGJfbWlzc19ub2RlID0gbm9kZTsKJiM0MzsJdnEtJmd0O2lvdGxiX21pc3Nfc3RhdGUgPSBWSE9TVF9JT1RMQl9NSVNTX1JFQUQ7CiYjNDM7CXZxLSZndDtpb3RsYl9taXNzX3NlcSYjNDM7JiM0Mzs7CiYjNDM7CWxpc3RfYWRkX3RhaWwoJmFtcDtub2RlLSZndDtub2RlLCAmYW1wO2Rldi0mZ3Q7cmVhZF9saXN0KTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtkZXYtJmd0O2lvdGxiX2xvY2spOwogCi0Jdmhvc3RfZW5xdWV1ZV9tc2coZGV2LCAmYW1wO2Rldi0mZ3Q7cmVhZF9saXN0LCBub2RlKTsKJiM0MzsJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGwoJmFtcDtkZXYtJmd0O3dhaXQsIEVQT0xMSU4gfCBFUE9MTFJETk9STSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIyNzAsMjcgJiM0MzsyNDU0LDU5IEBAIGxvbmcgdmhvc3RfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X2RldiAqZCwgdW5zaWduZWQgaW50IGlvY3RsLCB2b2lkIF9fdXNlciAqYXJnCiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF92cmluZ19pb2N0bCk7CiAKJiM0MztzdGF0aWMgYm9vbCB2aG9zdF9yZXRyeV9pb3RsYl9taXNzZXMoc3RydWN0IHZob3N0X2RldiAqZCkKJiM0Mzt7CiYjNDM7CWJvb2wgd2FrZSA9IGZhbHNlOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2QtJmd0O2lvdGxiX2xvY2spOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZC0mZ3Q7bnZxczsgJiM0MzsmIzQzO2kpIHsKJiM0MzsJCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gZC0mZ3Q7dnFzW2ldOwomIzQzOwkJc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlID0gdnEtJmd0O2lvdGxiX21pc3Nfbm9kZTsKJiM0MzsKJiM0MzsJCWlmICghbm9kZSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXZxLSZndDtpb3RsYl9taXNzX3NlcSYjNDM7JiM0Mzs7CiYjNDM7CQlpZiAodnEtJmd0O2lvdGxiX21pc3Nfc3RhdGUgIT0gVkhPU1RfSU9UTEJfTUlTU19SRUFEKQomIzQzOwkJCWxpc3RfbW92ZV90YWlsKCZhbXA7bm9kZS0mZ3Q7bm9kZSwgJmFtcDtkLSZndDtyZWFkX2xpc3QpOwomIzQzOwkJdnEtJmd0O2lvdGxiX21pc3Nfc3RhdGUgPSBWSE9TVF9JT1RMQl9NSVNTX1JFQUQ7CiYjNDM7CQl3YWtlID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gd2FrZTsKJiM0Mzt9CiYjNDM7CiBpbnQgdmhvc3RfaW5pdF9kZXZpY2VfaW90bGIoc3RydWN0IHZob3N0X2RldiAqZCkKIHsKIAlzdHJ1Y3Qgdmhvc3RfaW90bGIgKm5pb3RsYiwgKm9pb3RsYjsKJiM0MzsJYm9vbCB3YWtlOwogCWludCBpOwogCiAJbmlvdGxiID0gaW90bGJfYWxsb2MoKTsKIAlpZiAoIW5pb3RsYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKJiM0MzsJdmhvc3RfZGV2X2xvY2tfdnFzKGQpOwogCW9pb3RsYiA9IGQtJmd0O2lvdGxiOwogCWQtJmd0O2lvdGxiID0gbmlvdGxiOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IGQtJmd0O252cXM7ICYjNDM7JiM0MztpKSB7CiAJCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gZC0mZ3Q7dnFzW2ldOwogCi0JCW11dGV4X2xvY2soJmFtcDt2cS0mZ3Q7bXV0ZXgpOwogCQl2cS0mZ3Q7aW90bGIgPSBuaW90bGI7CiAJCV9fdmhvc3RfdnFfbWV0YV9yZXNldCh2cSk7Ci0JCW11dGV4X3VubG9jaygmYW1wO3ZxLSZndDttdXRleCk7CiAJfQogCiYjNDM7CXNwaW5fbG9jaygmYW1wO2QtJmd0O2lvdGxiX2xvY2spOwomIzQzOwl3YWtlID0gdmhvc3RfcmV0cnlfaW90bGJfbWlzc2VzKGQpOwomIzQzOwlzcGluX3VubG9jaygmYW1wO2QtJmd0O2lvdGxiX2xvY2spOwomIzQzOwl2aG9zdF9kZXZfdW5sb2NrX3ZxcyhkKTsKJiM0MzsKJiM0MzsJaWYgKHdha2UpCiYjNDM7CQl3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbCgmYW1wO2QtJmd0O3dhaXQsCiYjNDM7CQkJCQkgICBFUE9MTElOIHwgRVBPTExSRE5PUk0pOwogCXZob3N0X2lvdGxiX2ZyZWUob2lvdGxiKTsKIAogCXJldHVybiAwOwpAQCAtMzMwMCw3ICYjNDM7MzUxNiw4IEBAIHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqdmhvc3RfZGVxdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LAogCWlmICghbGlzdF9lbXB0eShoZWFkKSkgewogCQlub2RlID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUsCiAJCQkJCW5vZGUpOwotCQlsaXN0X2RlbCgmYW1wO25vZGUtJmd0O25vZGUpOwomIzQzOwkJbGlzdF9kZWxfaW5pdCgmYW1wO25vZGUtJmd0O25vZGUpOwomIzQzOwkJdmhvc3RfdW50cmFja19pb3RsYl9taXNzKG5vZGUpOwogCX0KIAlzcGluX3VubG9jaygmYW1wO2Rldi0mZ3Q7aW90bGJfbG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaCBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaAppbmRleCAwMTkyYWRlNmU3NDkxLi41MGZjY2M4NWQ1OTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC92aG9zdC5oCkBAIC0yOSw2ICYjNDM7MjksNyBAQCBzdHJ1Y3Qgdmhvc3Rfd29yayB7CiAKIHN0cnVjdCB2aG9zdF93b3JrZXI7CiBzdHJ1Y3Qgdmhvc3RfZGV2OwomIzQzO3N0cnVjdCB2aG9zdF9tc2dfbm9kZTsKIAogc3RydWN0IHZob3N0X3dvcmtlcl9vcHMgewogCWludCAoKmNyZWF0ZSkoc3RydWN0IHZob3N0X3dvcmtlciAqd29ya2VyLCBzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsCkBAIC0xNjMsNyAmIzQzOzE2NCwxMiBAQCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlIHsKIAkvKiBSaW5nIGVuZGlhbm5lc3MgcmVxdWVzdGVkIGJ5IHVzZXJzcGFjZSBmb3IgY3Jvc3MtZW5kaWFuIHN1cHBvcnQuICovCiAJYm9vbCB1c2VyX2JlOwogI2VuZGlmCiYjNDM7CS8qIFByb3RlY3RlZCBieSBkZXYtJmd0O2lvdGxiX2xvY2suICovCiYjNDM7CXU4IGlvdGxiX21pc3Nfc3RhdGU7CiAJdTMyIGJ1c3lsb29wX3RpbWVvdXQ7CiYjNDM7CS8qIFByb3RlY3RlZCBieSBkZXYtJmd0O2lvdGxiX2xvY2suICovCiYjNDM7CXU2NCBpb3RsYl9taXNzX3NlcTsKJiM0MzsJc3RydWN0IHZob3N0X21zZ19ub2RlICppb3RsYl9taXNzX25vZGU7CiB9OwogCiBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDExMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElPVExCIE1pc3MgVHJhY2tpbmcgaW4gdmhvc3QqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gSU9UTEIgbWlzcyBoYW5kbGluZyB3aXRoaW4gdGhlIHZob3N0IGluZnJhc3RydWN0dXJlLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG1vZGlmaWNhdGlvbiBpcyBpbiBgZHJpdmVycy92aG9zdC92aG9zdC5jYCBhbmQgYGRyaXZlcnMvdmhvc3Qvdmhvc3QuaGAsIGFuZCB0aGUgZ29hbCBpcyB0byB0cmFjayBJT1RMQiBtaXNzZXMgYXQgdGhlIHZpcnRxdWV1ZSBsZXZlbCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZXkmIzM5O3ZlIGFkZGVkIGBpb3RsYl9taXNzX3N0YXRlYCwgYGlvdGxiX21pc3Nfc2VxYCwgYW5kIGBpb3RsYl9taXNzX25vZGVgIHRvIHRoZSBgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZWAuIFRoYXQgZ2l2ZXMgdXMgcGVyLXZpcnRxdWV1ZSBzdGF0ZSBmb3IgSU9UTEIgbWlzcyBtYW5hZ2VtZW50LCBhbmQgdGhlIHNlcXVlbmNlIG51bWJlciBzdWdnZXN0cyBzb21lIHNvcnQgb2Ygb3JkZXJpbmcgb3IgdHJhY2tpbmcuCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIGB2aG9zdF9jaHJfcmVhZF9pdGVyYC4gVGhpcyBpcyB3aGVyZSB0aGUgZGF0YSBmcm9tIHRoZSB2aG9zdCBkZXZpY2UgaXMgcmVhZCBpbnRvIHVzZXIgc3BhY2UuIFRoZSBpbXBvcnRhbnQgc2VjdGlvbiBzZWVtcyB0byBiZSB0aGUgYWRkZWQgY29kZSB0aGF0IGRlYWxzIHdpdGggcmVhZGluZyBJT1RMQiBtaXNzIG1lc3NhZ2VzLiBJdCBsb29rcyBsaWtlIGl0IHRyaWVzIHRvIGF0b21pY2FsbHkgYWNxdWlyZSBhIG1lc3NhZ2UgKHVzaW5nIGBzcGluX2xvY2tgIGFuZCB0aGUgYHJlYWRfbGlzdGApLgoKVGhlIGxvZ2ljIGxvb2tzIGxpa2UgaXQgY2hlY2tzIGlmIHRoZSBmaXJzdCBtZXNzYWdlIGluIGBkZXYtJmd0O3JlYWRfbGlzdGAgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIElPVExCIG1pc3MgKGBmaXJzdC0mZ3Q7dnEtJmd0O2lvdGxiX21pc3Nfbm9kZSA9PSBmaXJzdGApLiBJZiBzbywgYW5kIGlmIHRoZXJlJiMzOTtzIGVub3VnaCBzcGFjZSBpbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLCBpdCBtb3ZlcyB0aGUgbWVzc2FnZSBmcm9tIGBkZXYtJmd0O3JlYWRfbGlzdGAgdG8gYGRldi0mZ3Q7cGVuZGluZ19saXN0YCwgc2V0cyB0aGUgYGlvdGxiX21pc3Nfc3RhdGVgIHRvIGBWSE9TVF9JT1RMQl9NSVNTX1JFQURJTkdgIG9uIHRoZSB2aXJ0cXVldWUsIGFuZCBzdG9yZXMgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWlzcyAobGlrZSB0aGUgdmlydHF1ZXVlIHBvaW50ZXIsIHRoZSBtZXNzYWdlIHRva2VuLCBhbmQgdGhlIHNlcXVlbmNlIG51bWJlcikuIFRoZW4sIGl0IGNvcGllcyB0aGUgbWVzc2FnZSB0byBhIGxvY2FsIGBzbmFwc2hvdGAgdW5pb24gYW5kIGV4aXRzLiBJZiB0aGVyZSYjMzk7cyBub3QgZW5vdWdoIHNwYWNlIGluIHRoZSBidWZmZXIsIGl0IGp1c3QgcmV0dXJucy4KClRoZSBrZXkgb2JzZXJ2YXRpb24gaXMgaG93IHRoZSBkYXRhIGlzIGhhbmRsZWQuIGBmaXJzdC0mZ3Q7bXNnX3YyYCBpcyBjb3BpZWQgdG8gYHNuYXBzaG90Lm1zZ192MmAsIGFuZCB0aGUgYHNuYXBzaG90YCBpcyBhIHVuaW9uIHRoYXQgY29udGFpbnMgYm90aCBgdmhvc3RfbXNnYCBhbmQgYHZob3N0X21zZ192MmAuIFRoZSBjb2RlIHN1YnNlcXVlbnRseSB1c2VzIGBjb3B5X3RvX2l0ZXJfZnVsbGAgdG8gZ2V0IHRoZSBkYXRhIHRvIHVzZXIgc3BhY2UuCgpOb3csIEkmIzM5O20gYSBiaXQgY29uY2VybmVkLiBUaGUgcGF0Y2ggY29waWVzIGBmaXJzdC0mZ3Q7bXNnX3YyYCB3aXRob3V0IGFueSBleHBsaWNpdCBpbml0aWFsaXphdGlvbiBvZiB0aGUgZW50aXJlIGBmaXJzdC0mZ3Q7bXNnX3YyYCBzdHJ1Y3QgYXQgdGhhdCBwb2ludCwgb3RoZXIgdGhhbiBjaGVja2luZyBmb3IgdGhlIHJlcXVpcmVkIGJ1ZmZlciBzaXplLiBMZXQmIzM5O3Mgc2VlIGhvdyBgdmhvc3Rfc2V0X2lvdGxiX21pc3NgIGluaXRpYWxpemVzIHRoaXMgbWVzc2FnZS4gT2theSwgaWYgYG5vZGUtJmd0O21zZy50eXBlICE9IHR5cGVgIHRoZW4gaXQgemVyb3MgdGhlIGBub2RlLSZndDttc2dfdjJgLiBCdXQgZG9lcyB0aGF0IGFsd2F5cyBoYXBwZW4/IGB2aG9zdF9zZXRfaW90bGJfbWlzc2AgZ2V0cyBjYWxsZWQgd2l0aGluIGB2aG9zdF9pb3RsYl9taXNzYCwgYnV0IHRoZSBjcnVjaWFsIGNoZWNrIGlzIGluIGB2aG9zdF9uZXdfbXNnYC4gSSBoYXZlIHRvIGNoZWNrIGB2aG9zdF9uZXdfbXNnYCB0byBzZWUgaWYgdGhlIGFsbG9jYXRlZCBgbm9kZWAgaXMgaW5pdGlhbGl6ZWQgdG8gemVybywgYmVmb3JlIGB2aG9zdF9zZXRfaW90bGJfbWlzc2AgZ2V0cyBjYWxsZWQgYW5kIHBvdGVudGlhbGx5IHplcm8mIzM5O3Mgb3V0IHRoZSBgbXNnX3YyYCB1bmlvbi4gSWYgYHZob3N0X25ld19tc2dgIGlzbiYjMzk7dCB6ZXJvaW5nIHRoZSBtZW1vcnksIHRoZW4gdGhpcyBpcyBhIHBvdGVudGlhbCByZWFkLXVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdHkhIFRoaXMgaXMgdGhlIG1vc3QgY3J1Y2lhbCBwYXJ0IHRvIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9uZXdfbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvdmhvc3QuYz0xOTk3PXN0YXRpYyBpbnQgdmhvc3RfaW90bGJfbWlzcyhzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgdTY0IGlvdmEsIGludCBhY2Nlc3MpXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTIwMTUtXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MjAxNjpcdG5vZGUgPSB2aG9zdF9uZXdfbXNnKHZxLCB2MiA/IFZIT1NUX0lPVExCX01TR19WMiA6IFZIT1NUX0lPVExCX01TRyk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjAxNy1cdGlmICghbm9kZSlcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9MzQ4Mz1FWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kaXNhYmxlX25vdGlmeSk7XG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM0ODUtLyogQ3JlYXRlIGEgbmV3IG1lc3NhZ2UuICovXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzQ4NjpzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKnZob3N0X25ld19tc2coc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIGludCB0eXBlKVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM0ODcte1xuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNDk2LX1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozNDk3OkVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X25ld19tc2cpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTM0OTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5NDkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyB0aGUgYHZob3N0X25ld19tc2dgIGltcGxlbWVudGF0aW9uLCBmcm9tIGEgc2Vhc29uZWQgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHZob3N0X25ld19tc2cqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYHZob3N0X25ld19tc2dgLiBJJiMzOTt2ZSBzZWVuIHRoaXMgZnVuY3Rpb24gYmVmb3JlLCBhbmQgaXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlIGluIGhvdyB2aXJ0dWFsIGhvc3RzIGFyZSBlc3RhYmxpc2hlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb3JlIGFzcGVjdHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIGNyZWF0aW5nIG9yIGluaXRpYWxpemluZyBhIG5ldyB2aXJ0dWFsIGhvc3QgY29ubmVjdGlvbiwgbGlrZWx5IHNpZ25hbGluZyBzb21lIG5ldyBjb25uZWN0aW9uIGluZm9ybWF0aW9uIGZyb20gYSBndWVzdCB0byB0aGUgaG9zdC4KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIHJlc291cmNlIGFsbG9jYXRpb24sIG1lc3NhZ2UgcGFyc2luZywgYW5kIGFueSBpbml0aWFsIGNoZWNrcyBpdCBwZXJmb3Jtcy4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaWYgaXQgaW50ZXJmYWNlcyBkaXJlY3RseSB3aXRoIHRoZSB2aXJ0aW8gZHJpdmVyIG9yIHdoZXRoZXIgaXQgZGVsZWdhdGVzIHRoZXNlIHRhc2tzLgoKSSBleHBlY3QgdG8gc2VlIHNvbWUga2luZCBvZiBoYW5kc2hha2UgbG9naWMsIGVuc3VyaW5nIHByb3BlciBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgZ3Vlc3QgYW5kIGhvc3QuIFRoZSBtZXNzYWdlIGxpa2VseSBpbmNsdWRlcyBkZXRhaWxzIGxpa2UgdGhlIGZlYXR1cmVzIG5lZ290aWF0ZWQsIG1lbW9yeSByZWdpb25zIGV4cG9zZWQsIGFuZCBwb3RlbnRpYWxseSBldmVuIGluaXRpYWxpemF0aW9uIGNvbW1hbmRzLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIOKAkyB0aGUgc2V0LXVwIG9mIHRoZSBzaGFyZWQgbWVtb3J5IHJlZ2lvbnMsIHdoaWNoIGFyZSBzbyB2aXRhbCB0byB2aG9zdOKAmXMgZWZmaWNpZW5jeS4KCknigJltIGFsc28gaW50ZXJlc3RlZCBpbiBpdHMgZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgdGhlIGluaXRpYWwgY29ubmVjdGlvbiBzZXR1cD8gRG9lcyBpdCBzaW1wbHkgcmV0dXJuIGFuIGVycm9yLCBvciBhcmUgdGhlcmUgbW9yZSBlbGFib3JhdGUgbWVjaGFuaXNtcyBsaWtlIHJldHJpZXMgb3IgZmFsbGJhY2sgcm91dGluZXM/IEl0IHNob3VsZCBhbHNvIGNoZWNrIGZvciBhIGxhY2sgb2YgcmVzb3VyY2VzLgoKVWx0aW1hdGVseSwgSeKAmW0gYW50aWNpcGF0aW5nIHRoYXQgYHZob3N0X25ld19tc2dgIGlzIHRoZSBnYXRld2F5IHRoYXQgc2V0cyB0aGUgc3RhZ2UgZm9yIGEgaGlnaGx5IG9wdGltaXplZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gSXQgaXMgd2hlcmUgZXZlcnl0aGluZyBiZWdpbnMuIEkmIzM5O20gZXhjaXRlZCB0byBzZWUgdGhlIGludHJpY2FjaWVzIG9mIGl0cyBleGVjdXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQ4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNDg1Olx0LyogQ3JlYXRlIGEgbmV3IG1lc3NhZ2UuICovXG4zNDg2Olx0c3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9uZXdfbXNnKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBpbnQgdHlwZSlcbjM0ODc6XHR7XG4zNDg4Olx0XHQvKiBNYWtlIHN1cmUgYWxsIHBhZGRpbmcgd2l0aGluIHRoZSBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQuICovXG4zNDg5Olx0XHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUgPSBremFsbG9jX29iaigqbm9kZSk7XG4zNDkwOlx0XHRpZiAoIW5vZGUpXG4zNDkxOlx0XHRcdHJldHVybiBOVUxMO1xuMzQ5MjpcdFxuMzQ5MzpcdFx0bm9kZS1cdTAwM2V2cSA9IHZxO1xuMzQ5NDpcdFx0bm9kZS1cdTAwM2Vtc2cudHlwZSA9IHR5cGU7XG4zNDk1Olx0XHRyZXR1cm4gbm9kZTtcbjM0OTY6XHR9XG4zNDk3Olx0RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfbmV3X21zZyk7XG4zNDk4Olx0XG4zNDk5Olx0dm9pZCB2aG9zdF9lbnF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXG4zNTAwOlx0XHRcdCAgICAgICBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUpXG4zNTAxOlx0e1xuMzUwMjpcdFx0c3Bpbl9sb2NrKFx1MDAyNmRldi1cdTAwM2Vpb3RsYl9sb2NrKTtcbjM1MDM6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2bm9kZS1cdTAwM2Vub2RlLCBoZWFkKTtcbjM1MDQ6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmRldi1cdTAwM2Vpb3RsYl9sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY3MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDYyOTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvdmhvc3QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzQ4MDpcdFx0XHRcdCAgICAgICBcdTAwMjZ2cS1cdTAwM2V1c2VkLVx1MDAzZWZsYWdzLCByKTtcbjM0ODE6XHRcdH1cbjM0ODI6XHR9XG4zNDgzOlx0RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGlzYWJsZV9ub3RpZnkpO1xuMzQ4NDpcdFxuMzQ4NTpcdC8qIENyZWF0ZSBhIG5ldyBtZXNzYWdlLiAqL1xuMzQ4NjpcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqdmhvc3RfbmV3X21zZyhzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgaW50IHR5cGUpXG4zNDg3Olx0e1xuMzQ4ODpcdFx0LyogTWFrZSBzdXJlIGFsbCBwYWRkaW5nIHdpdGhpbiB0aGUgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLiAqL1xuMzQ4OTpcdFx0c3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlID0ga3phbGxvY19vYmooKm5vZGUpO1xuMzQ5MDpcdFx0aWYgKCFub2RlKVxuMzQ5MTpcdFx0XHRyZXR1cm4gTlVMTDtcbjM0OTI6XHRcbjM0OTM6XHRcdG5vZGUtXHUwMDNldnEgPSB2cTtcbjM0OTQ6XHRcdG5vZGUtXHUwMDNlbXNnLnR5cGUgPSB0eXBlO1xuMzQ5NTpcdFx0cmV0dXJuIG5vZGU7XG4zNDk2Olx0fVxuMzQ5NzpcdEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X25ld19tc2cpO1xuMzQ5ODpcdFxuMzQ5OTpcdHZvaWQgdmhvc3RfZW5xdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Mjk5NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFplcm8tSW5pdGlhbGl6YXRpb24gSXNzdWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUgPSBremFsbG9jX29iaigqbm9kZSk7YCBsaW5lLiBga3phbGxvY19vYmpgLi4uIGFoYSwgaXQmIzM5O3MgdmVyeSBsaWtlbHkgYSBtYWNybyBmb3IgYWxsb2NhdGluZyBhbmQgemVyby1pbml0aWFsaXppbmcgdGhlIG1lbW9yeSBmb3IgdGhlIG5vZGUuICBUaGF0IG1lYW5zIHRoZSBlbnRpcmUgYG5vZGVgIG9iamVjdCBpcyB6ZXJvZWQgb3V0IGF0IHRoZSBzdGFydC4gIFRoYXQmIzM5O3MgaW1wb3J0YW50LgoKVGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucywgaWYgaXQmIzM5O3MgemVyb2VkLCB0aGVuIGFsbCBmaWVsZHMgaW4gdGhlIGBub2RlYCBzdHJ1Y3QsIGluY2x1ZGluZyBgbm9kZS0mZ3Q7bXNnX3YyYCwgd2lsbCBiZSBpbml0aWFsaXplZCB0byB6ZXJvLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGNvZGUgdGhhdCB1c2VzIHRoaXMgbm9kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgdmhvc3Rfc2V0X2lvdGxiX21pc3NgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgd2l0aCBwYXJ0aWFsbHkgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmVzLgoKUmlnaHQsIHNvIGhlcmUmIzM5O3Mgd2hhdCBgdmhvc3Rfc2V0X2lvdGxiX21pc3NgIGRvZXM6CmBgYGMKc3RhdGljIHZvaWQgdmhvc3Rfc2V0X2lvdGxiX21pc3Moc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlLCBib29sIHYyLAoJCQkJIHU2NCBpb3ZhLCBpbnQgYWNjZXNzKQp7CglzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2c7Cgl1MzIgdHlwZSA9IHYyID8gVkhPU1RfSU9UTEJfTVNHX1YyIDogVkhPU1RfSU9UTEJfTVNHOwoKCWlmIChub2RlLSZndDttc2cudHlwZSAhPSB0eXBlKQoJCW1lbXNldCgmYW1wO25vZGUtJmd0O21zZ192MiwgMCwgc2l6ZW9mKG5vZGUtJmd0O21zZ192MikpOwoJbm9kZS0mZ3Q7bXNnLnR5cGUgPSB0eXBlOwoJbXNnID0gdmhvc3RfZ2V0X2lvdGxiX21zZyhub2RlKTsKCgltc2ctJmd0O3R5cGUgPSBWSE9TVF9JT1RMQl9NSVNTOwoJbXNnLSZndDtpb3ZhID0gaW92YTsKCW1zZy0mZ3Q7cGVybSA9IGFjY2VzczsKfQpgYGAKCk9rYXksIHNvIGlmIHRoZSBgbm9kZS0mZ3Q7bXNnLnR5cGVgIGlzbiYjMzk7dCB0aGUgZXhwZWN0ZWQgdHlwZSwgdGhlbiBpdCB6ZXJvLWluaXRpYWxpemVzIGBub2RlLSZndDttc2dfdjJgIGJlZm9yZSBwcm9jZWVkaW5nLiAgSXQgdGhlbiBzZXRzIGBtc2ctJmd0O3R5cGVgLCBgbXNnLSZndDtpb3ZhYCwgYW5kIGBtc2ctJmd0O3Blcm1gLiBNeSBjb25jZXJuIGlzIHdoZXRoZXIgYW55IG90aGVyIGZpZWxkcyB3aXRoaW4gYG1zZ2AgbWlnaHQgcmVxdWlyZSBleHBsaWNpdCBpbml0aWFsaXphdGlvbi4gSXQmIzM5O3MgYSBxdWljayBmb2xsb3cgdXAsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgbWVtc2V0IGhhbmRsZXMgYWxsIHRoZSByZWxldmFudCBzY2VuYXJpb3MuIEkmIzM5O2xsIHRha2UgYSBxdWljayBnbGFuY2UgYXQgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCB2aG9zdF9pb3RsYl9tc2dgIGFuZCB2ZXJpZnkgdGhhdCB0aGUgb3RoZXIgZmllbGRzIGFyZSBlaXRoZXIgemVyby1pbml0aWFsaXplZCBieSBkZWZhdWx0IG9yIHByb3Blcmx5IGhhbmRsZWQgZWxzZXdoZXJlIGluIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCB2aG9zdF9pb3RsYl9tc2cgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L3Zob3N0LmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzkwMwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSB2aG9zdF9pb3RsYl9tc2cgU3RydWN0dXJlKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgbXkgYmVhcmluZ3Mgb24gdGhlIGB2aG9zdF9pb3RsYl9tc2dgIHN0cnVjdHVyZS4gSSYjMzk7bSB0aGlua2luZyB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vayBpcyB0aGUgc3RhbmRhcmQgbG9jYXRpb246IGBpbmNsdWRlL3VhcGkvbGludXgvdmhvc3RfdHlwZXMuaGAsIG9yIHNvbWV0aGluZyBhbmFsb2dvdXMgaW4gdGhlIGtlcm5lbCBoZWFkZXJzLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbiBpdCYjMzk7bGwgYmUgZGVmaW5lZCB0aGVyZSwgZ2l2ZW4gaXQmIzM5O3MgYSBtZXNzYWdlIHR5cGUgcmVsYXRlZCB0byB2aG9zdCwgYW5kIHRoZSBgdWFwaWAgZGlyZWN0b3J5IGlzIHdoZXJlIHRoZSBrZXJuZWwgZXhwb3J0cyBzdHJ1Y3R1cmVzIGZvciB1c2Vyc3BhY2UgaW50ZXJhY3Rpb24uIEl0JiMzOTtzIHByZXR0eSBmdW5kYW1lbnRhbCwgc28gSSBleHBlY3QgaXQmIzM5O2xsIGJlIGluIG9uZSBvZiB0aGUgY29yZSB2aG9zdCBoZWFkZXIgZmlsZXMuIExldCBtZSBnbyB0YWtlIGEgbG9vayB0aGVyZSwgYW5kIHNlZSB3aGF0IHRoZSBmaWVsZHMgYXJlIGFuZCBob3cgaXQmIzM5O3MgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHZob3N0X2lvdGxiX21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC92aG9zdF90eXBlcy5oPTU5PXN0cnVjdCB2aG9zdF92cmluZ193b3JrZXIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92aG9zdF90eXBlcy5oLTY2LS8qIG5vIGFsaWdubWVudCByZXF1aXJlbWVudCAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3Zob3N0X3R5cGVzLmg6Njc6c3RydWN0IHZob3N0X2lvdGxiX21zZyB7XG5pbmNsdWRlL3VhcGkvbGludXgvdmhvc3RfdHlwZXMuaC02OC1cdF9fdTY0IGlvdmE7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3Zob3N0X3R5cGVzLmg9OTY9c3RydWN0IHZob3N0X21zZyB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3Zob3N0X3R5cGVzLmgtOTgtXHR1bmlvbiB7XG5pbmNsdWRlL3VhcGkvbGludXgvdmhvc3RfdHlwZXMuaDo5OTpcdFx0c3RydWN0IHZob3N0X2lvdGxiX21zZyBpb3RsYjtcbmluY2x1ZGUvdWFwaS9saW51eC92aG9zdF90eXBlcy5oLTEwMC1cdFx0X191OCBwYWRkaW5nWzY0XTtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmhvc3RfdHlwZXMuaD0xMDQ9c3RydWN0IHZob3N0X21zZ192MiB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3Zob3N0X3R5cGVzLmgtMTA3LVx0dW5pb24ge1xuaW5jbHVkZS91YXBpL2xpbnV4L3Zob3N0X3R5cGVzLmg6MTA4Olx0XHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnIGlvdGxiO1xuaW5jbHVkZS91YXBpL2xpbnV4L3Zob3N0X3R5cGVzLmgtMTA5LVx0XHRfX3U4IHBhZGRpbmdbNjRdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDQ4MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHN0cnVjdCB2aG9zdF9pb3RsYl9tc2dgKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgYHN0cnVjdCB2aG9zdF9pb3RsYl9tc2dgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBJL08gdHJhbnNsYXRpb24gbG9va2FzaWRlIGJ1ZmZlciBtZXNzYWdlIHN0cnVjdHVyZSB3aXRoaW4gdGhlIHZob3N0IGNvbnRleHQuIFRoaXMgbGlrZWx5IGRlYWxzIHdpdGggYWNjZWxlcmF0ZWQgZ3Vlc3QgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBJIG5lZWQgdG8gcGFyc2UgaXRzIGNvbnRlbnRzIHRvIHVuZGVyc3RhbmQgaG93IEkvTyB2aXJ0dWFsIGFkZHJlc3NlcyBhcmUgbWFwcGVkIHRvIHBoeXNpY2FsIGFkZHJlc3NlcywgYW5kIGhvdyB0aGUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSB2aG9zdCBrZXJuZWwgbW9kdWxlIGFuZCB0aGUgdmhvc3QgdXNlcnNwYWNlIGltcGxlbWVudGF0aW9uIGlzIHN0cnVjdHVyZWQgaW4gdGhpcyBjYXNlLiBJIGV4cGVjdCBpdCB0byBoYXZlIGZpZWxkcyByZWxhdGVkIHRvIHRoZSB2aXJ0dWFsIGFkZHJlc3MsIHRoZSBwaHlzaWNhbCBhZGRyZXNzLCB0aGUgc2l6ZSBvZiB0aGUgdHJhbnNsYXRpb24sIGZsYWdzIGluZGljYXRpbmcgbWVtb3J5IGF0dHJpYnV0ZXMgb3IgYWNjZXNzIHBlcm1pc3Npb25zLCBhbmQgcG90ZW50aWFsbHkgYSBzZXF1ZW5jZSBudW1iZXIgZm9yIHRyYWNraW5nIGFuZCBlbnN1cmluZyBvcmRlcmluZy4gSSYjMzk7bSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHR5cGVzIHVzZWQgZm9yIHRoZSBhZGRyZXNzZXMsIGFzIHRoYXQgd2lsbCByZXZlYWwgdGhlIGFkZHJlc3Mgc3BhY2UgYW5kIG1lbW9yeSBtb2RlbCBhdCBwbGF5LiBBcmUgdGhleSAzMi1iaXQsIDY0LWJpdCwgb3IgcGVyaGFwcyBldmVuIGxhcmdlcj8gQW55IGhpbnRzIGFib3V0IGNhY2hpbmcgYmVoYXZpb3Igd291bGQgYmUgaW50ZXJlc3RpbmcuIEkmIzM5O20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgYHZob3N0X21lbW9yeWAgc3RydWN0dXJlcywgYXMgdGhleSYjMzk7cmUgdGhlIGJyZWFkIGFuZCBidXR0ZXIgb2YgbWVtb3J5IG1hbmFnZW1lbnQgaW4gdGhpcyBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGNsZXZlciB0cmlja2VyeSBvciBvcHRpbWl6YXRpb25zIGJha2VkIGluIGhlcmUsIHN1Y2ggYXMgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGZlYXR1cmVzLiBSaWdodCwgdGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L3Zob3N0X3R5cGVzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDY3Olx0c3RydWN0IHZob3N0X2lvdGxiX21zZyB7XG4gIDY4Olx0XHRfX3U2NCBpb3ZhO1xuICA2OTpcdFx0X191NjQgc2l6ZTtcbiAgNzA6XHRcdF9fdTY0IHVhZGRyO1xuICA3MTpcdCNkZWZpbmUgVkhPU1RfQUNDRVNTX1JPICAgICAgMHgxXG4gIDcyOlx0I2RlZmluZSBWSE9TVF9BQ0NFU1NfV08gICAgICAweDJcbiAgNzM6XHQjZGVmaW5lIFZIT1NUX0FDQ0VTU19SVyAgICAgIDB4M1xuICA3NDpcdFx0X191OCBwZXJtO1xuICA3NTpcdCNkZWZpbmUgVkhPU1RfSU9UTEJfTUlTUyAgICAgICAgICAgMVxuICA3NjpcdCNkZWZpbmUgVkhPU1RfSU9UTEJfVVBEQVRFICAgICAgICAgMlxuICA3NzpcdCNkZWZpbmUgVkhPU1RfSU9UTEJfSU5WQUxJREFURSAgICAgM1xuICA3ODpcdCNkZWZpbmUgVkhPU1RfSU9UTEJfQUNDRVNTX0ZBSUwgICAgNFxuICA3OTpcdC8qXG4gIDgwOlx0ICogVkhPU1RfSU9UTEJfQkFUQ0hfQkVHSU4gYW5kIFZIT1NUX0lPVExCX0JBVENIX0VORCBhbGxvdyBtb2RpZnlpbmdcbiAgODE6XHQgKiBtdWx0aXBsZSBtYXBwaW5ncyBpbiBvbmUgZ286IGJlZ2lubmluZyB3aXRoXG4gIDgyOlx0ICogVkhPU1RfSU9UTEJfQkFUQ0hfQkVHSU4sIGZvbGxvd2VkIGJ5IGFueSBudW1iZXIgb2ZcbiAgODM6XHQgKiBWSE9TVF9JT1RMQl9VUERBVEUgbWVzc2FnZXMsIGFuZCBlbmRpbmcgd2l0aCBWSE9TVF9JT1RMQl9CQVRDSF9FTkQuXG4gIDg0Olx0ICogV2hlbiBvbmUgb2YgdGhlc2UgdHdvIHZhbHVlcyBpcyB1c2VkIGFzIHRoZSBtZXNzYWdlIHR5cGUsIHRoZSByZXN0XG4gIDg1Olx0ICogb2YgdGhlIGZpZWxkcyBpbiB0aGUgbWVzc2FnZSBhcmUgaWdub3JlZC4gVGhlcmUmIzM5O3Mgbm8gZ3VhcmFudGVlIHRoYXRcbiAgODY6XHQgKiB0aGVzZSBjaGFuZ2VzIHRha2UgcGxhY2UgYXV0b21hdGljYWxseSBpbiB0aGUgZGV2aWNlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTE5NQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgdmhvc3RfaW90bGJfbXNnIFN0cnVjdHVyZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnYCBkZWZpbml0aW9uLiBJIHNlZSBpdCYjMzk7cyBnb3QgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBJL08gdHJhbnNsYXRpb24gZW50cmllczogYGlvdmFgLCB3aGljaCBpcyB0aGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzczsgYHNpemVgLCB0aGUgZXh0ZW50IG9mIHRoZSBtYXBwaW5nOyBgdWFkZHJgLCB3aGljaCBpcyB0aGUgdXNlci1zcGFjZSB2aXJ0dWFsIGFkZHJlc3M7IGBwZXJtYCwgZGVzY3JpYmluZyB0aGUgYWNjZXNzIHBlcm1pc3Npb25zOyBhbmQgZmluYWxseSwgYHR5cGVgLCB3aGljaCBJJiMzOTttIGd1ZXNzaW5nIHNwZWNpZmllcyB0aGUgdHlwZSBvZiBtYXBwaW5nLiBOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIG90aGVyIGZpZWxkcyBhbmQgcmVsYXRlZCBzdHJ1Y3R1cmVzIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBtZXNzYWdlIG9yY2hlc3RyYXRlcyB0aGUgSS9PIHRyYW5zbGF0aW9uIHByb2Nlc3MuIEkgbmVlZCB0byBmdWxseSBncmFzcCBob3cgdGhpcyBpcyBkZXNpZ25lZCBzbyB0aGF0IEkgY2FuIG9wdGltaXplIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC92aG9zdF90eXBlcy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4NzpcdCAqL1xuICA4ODpcdCNkZWZpbmUgVkhPU1RfSU9UTEJfQkFUQ0hfQkVHSU4gICAgNVxuICA4OTpcdCNkZWZpbmUgVkhPU1RfSU9UTEJfQkFUQ0hfRU5EICAgICAgNlxuICA5MDpcdFx0X191OCB0eXBlO1xuICA5MTpcdH07XG4gIDkyOlx0XG4gIDkzOlx0I2RlZmluZSBWSE9TVF9JT1RMQl9NU0cgMHgxXG4gIDk0Olx0I2RlZmluZSBWSE9TVF9JT1RMQl9NU0dfVjIgMHgyXG4gIDk1Olx0XG4gIDk2Olx0c3RydWN0IHZob3N0X21zZyB7XG4gIDk3Olx0XHRpbnQgdHlwZTtcbiAgOTg6XHRcdHVuaW9uIHtcbiAgOTk6XHRcdFx0c3RydWN0IHZob3N0X2lvdGxiX21zZyBpb3RsYjtcbiAxMDA6XHRcdFx0X191OCBwYWRkaW5nWzY0XTtcbiAxMDE6XHRcdH07XG4gMTAyOlx0fTtcbiAxMDM6XHRcbiAxMDQ6XHRzdHJ1Y3Qgdmhvc3RfbXNnX3YyIHtcbiAxMDU6XHRcdF9fdTMyIHR5cGU7XG4gMTA2Olx0XHRfX3UzMiBhc2lkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTcwMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgdmhvc3QgU3RydWN0dXJlKioKCk9rYXksIGhvbGQgb24gYSBtaW51dGUuIEkgc2VlbSB0byByZWNhbGwgdGhhdCB0aGUgYHN0cnVjdCB2aG9zdF9tc2dfbm9kZWAgaXMgZGVmaW5lZCBpbiBgZHJpdmVycy92aG9zdC92aG9zdC5oYC4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhhdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIGNvcnJlY3QgZGVmaW5pdGlvbiBmb3IgbXkgY3VycmVudCBhbmFseXNpcy4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0aGVyZSBhbmQgZ2V0IGEgcHJlY2lzZSBsb29rIGF0IGl0cyBtZW1iZXJzIGFuZCBob3cgaXQmIzM5O3Mgc3RydWN0dXJlZC4gR290dGEgZW5zdXJlIEkmIzM5O20gb3BlcmF0aW5nIG9uIHNvbGlkIGdyb3VuZCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB2aG9zdCYjMzk7cyBjb21wbGV4aXRpZXMuIFRoaXMgc3RydWN0IGlzIHByb2JhYmx5IGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG1lc3NhZ2UgcGFzc2luZyBvciBkYXRhIHN0cnVjdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCB2aG9zdF9tc2dfbm9kZSBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zob3N0LmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5oPTk1PXN0cnVjdCB2aG9zdF92aXJ0cXVldWUge1xuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC0xNzQtXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg6MTc1OnN0cnVjdCB2aG9zdF9tc2dfbm9kZSB7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMTc2LSAgdW5pb24ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjAwMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHN0cnVjdCB2aG9zdF9tc2dfbm9kZWAqKgoKT2theSwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGVgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZXNlIG1lc3NhZ2Ugbm9kZXMgYXJlIHN0cnVjdHVyZWQgd2l0aGluIHRoZSB2aG9zdCBzdWJzeXN0ZW0uIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBpcyBhIGNvcmUgYnVpbGRpbmcgYmxvY2sgZm9yIG1hbmFnaW5nIHRoZSBjb21tdW5pY2F0aW9uIGZsb3cgYmV0d2VlbiB0aGUgaG9zdCBhbmQgdGhlIGd1ZXN0LCBsaWtlbHkgdGllZCB0byBzaGFyZWQgbWVtb3J5IGFuZCBldmVudCBjaGFubmVscy4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBob3cgdGhpcyByZWxhdGVzIHRvIG90aGVyIGRhdGEgc3RydWN0dXJlcyBpbiB0aGUgdmhvc3Qgc3BhY2UgLSBpcyB0aGlzIHBhcnQgb2YgdGhlIHJpbmcgYnVmZmVyIG1hbmFnZW1lbnQsIG9yIHNvbWV0aGluZyBtb3JlIGZ1bmRhbWVudGFsIGZvciBpbnRlci1WTSBtZXNzYWdpbmc/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGZpZWxkcyB0aGF0IHBvaW50IHRvIGJ1ZmZlcnMsIGRlc2NyaWJlIG1lc3NhZ2UgdHlwZXMsIGFuZCBoYW5kbGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIE15IHByaW1hcnkgcXVlc3Rpb25zIHJpZ2h0IG5vdyByZXZvbHZlIGFyb3VuZCB0aGUgZmllbGRzIHRoZW1zZWx2ZXMgYW5kIGhvdyB0aGV5IGFyZSB1c2VkLCBsb29raW5nIGZvciBpbnNpZ2h0cyBpbnRvIHRoZSBsb2NraW5nIHN0cmF0ZWd5IHVzZWQgZm9yIGNvbmN1cnJlbmN5IGFuZCBob3cgZGF0YSBjb25zaXN0ZW5jeSBpcyBhY2hpZXZlZC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIHJldmVhbHMgYW55dGhpbmcgYWJvdXQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIGluIHRoZSBtZXNzYWdlIGhhbmRsaW5nIHByb2Nlc3MuIEkmIzM5O20gYWxzbyBpbnRlcmVzdGVkIGluIGhvdyB0aGlzIG5vZGUgaW50ZWdyYXRlcyB3aXRoIHRoZSBsYXJnZXIgZnJhbWV3b3JrIC0gaXMgaXQgcGFydCBvZiBhIGxpbmtlZCBsaXN0LCBhIHRyZWUsIG9yIHNvbWUgb3RoZXIgb3JnYW5pemF0aW9uYWwgc3RydWN0dXJlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIHRoaXMgc3RydWN0dXJlIOKAkyBjcmVhdGlvbiwgdXNhZ2UsIGFuZCBkZXN0cnVjdGlvbiDigJMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzU6XHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUge1xuIDE3NjpcdCAgdW5pb24ge1xuIDE3NzpcdFx0ICBzdHJ1Y3Qgdmhvc3RfbXNnIG1zZztcbiAxNzg6XHRcdCAgc3RydWN0IHZob3N0X21zZ192MiBtc2dfdjI7XG4gMTc5Olx0ICB9O1xuIDE4MDpcdCAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7XG4gMTgxOlx0ICBzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7XG4gMTgyOlx0fTtcbiAxODM6XHRcbiAxODQ6XHRzdHJ1Y3Qgdmhvc3RfZGV2IHtcbiAxODU6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuIDE4NjpcdFx0c3RydWN0IG11dGV4IG11dGV4O1xuIDE4NzpcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqKnZxcztcbiAxODg6XHRcdGludCBudnFzO1xuIDE4OTpcdFx0c3RydWN0IGV2ZW50ZmRfY3R4ICpsb2dfY3R4O1xuIDE5MDpcdFx0c3RydWN0IHZob3N0X2lvdGxiICp1bWVtO1xuIDE5MTpcdFx0c3RydWN0IHZob3N0X2lvdGxiICppb3RsYjtcbiAxOTI6XHRcdHNwaW5sb2NrX3QgaW90bGJfbG9jaztcbiAxOTM6XHRcdHN0cnVjdCBsaXN0X2hlYWQgcmVhZF9saXN0O1xuIDE5NDpcdFx0c3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX2xpc3Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NjExCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgdmhvc3RfbmV3X21zZ2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHZob3N0X25ld19tc2dgIGZ1bmN0aW9uIGluIHRoZSB2aG9zdCBjb2RlLiBJdCBsb29rcyBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIGhhdmUgYSBuYWdnaW5nIGZlZWxpbmcgSSBtaWdodCBoYXZlIG1pc3NlZCBzb21ldGhpbmcgc3VidGxlIGluIGFuIGVhcmxpZXIgc2Nhbi4gTGV0IG1lIG1ha2Ugc3VyZSBJJiMzOTttIGZvbGxvd2luZy4gVGhlIGdvYWwgaXMgdG8gYWxsb2NhdGUgYSBuZXcgbWVzc2FnZSBub2RlLCBhbmQgdGhlIGNvZGUgYXBwZWFycyB0byBiZSB1c2luZyBga3phbGxvY2AgdG8gZG8gdGhhdC4gSSYjMzk7bSBzZWVpbmcgYHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSA9IGt6YWxsb2Moc2l6ZW9mICpub2RlLCBHRlBfS0VSTkVMKTtgIC0gc28gaXQmIzM5O3MgYSBrZXJuZWwgemVybyBhbGxvY2F0aW9uIHdpdGggbWVtb3J5IHJlc2VydmVkIGZyb20gYEdGUF9LRVJORUxgLiBUaGlzIGxvb2tzIHJpZ2h0LCBhbGxvY2F0aW5nIHRoZSBjb3JyZWN0IHNpemUsIGVuc3VyaW5nIGluaXRpYWxpemF0aW9uIHRvIHplcm8uIEkgdGhvdWdodCBJIGhhZCBzZWVuIGBremFsbG9jX29iaigqbm9kZSlgIGluIGEgcHJldmlvdXMgZ2xhbmNlIHRocm91Z2gsIGJ1dCBJJiMzOTttIG1pc3Rha2VuIC0gaXQmIzM5O3MgdGhlIHN0YW5kYXJkIGNhbGwgdG8gYGt6YWxsb2NgLCBhbGxvY2F0aW5nIG1lbW9yeSBmb3IgdGhlIGB2aG9zdF9tc2dfbm9kZWAgc3RydWN0dXJlIGFuZCBpbml0aWFsaXppbmcgaXQgdG8gemVybywgd2hpY2ggaXMgZ29vZCBwcmFjdGljZS4gVGhlIHN1YnNlcXVlbnQgYXNzaWdubWVudHMgb2YgYG5vZGUtJmd0O3ZxYCBhbmQgYG5vZGUtJmd0O21zZy50eXBlYCBzZWVtIGZpbmUuIEl0JiMzOTtzIHByb3Blcmx5IGluaXRpYWxpemluZyB0aGUgbm9kZSYjMzk7cyBmaWVsZHMuIFRoZSBjcnVjaWFsIHBhcnQgaGVyZSBpcyB0aGUgY29ycmVjdCBhbGxvY2F0aW9uIG9mIG1lbW9yeS4gVGhpcyBhbGwgbWFrZXMgc2Vuc2UsIGFuZCBJIHRoaW5rIGl0JiMzOTtzIGFzIGl0IHNob3VsZCBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zob3N0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM0ODU6XHQvKiBDcmVhdGUgYSBuZXcgbWVzc2FnZS4gKi9cbjM0ODY6XHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKnZob3N0X25ld19tc2coc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIGludCB0eXBlKVxuMzQ4NzpcdHtcbjM0ODg6XHRcdC8qIE1ha2Ugc3VyZSBhbGwgcGFkZGluZyB3aXRoaW4gdGhlIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZC4gKi9cbjM0ODk6XHRcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSA9IGt6YWxsb2Nfb2JqKCpub2RlKTtcbjM0OTA6XHRcdGlmICghbm9kZSlcbjM0OTE6XHRcdFx0cmV0dXJuIE5VTEw7XG4zNDkyOlx0XG4zNDkzOlx0XHRub2RlLVx1MDAzZXZxID0gdnE7XG4zNDk0Olx0XHRub2RlLVx1MDAzZW1zZy50eXBlID0gdHlwZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcyNTMKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipVbnJhdmVsaW5nIHRoZSBga3phbGxvY19vYmpgIEVuaWdtYSoqCgpSaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgYGt6YWxsb2Nfb2JqKCpub2RlKWAuIE15IGluaXRpYWwgaHVuY2ggaXMgc3BvdC1vbiDigJMgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHRoZSBjYWxsLCBidXQgYSBtYWNybz8gTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IHRoYXQsIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGF0JiMzOTtzIGdvaW5nIHRvIGJlIGtleS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBremFsbG9jX29iamAgbWFjcm8gZXhwYW5kcyB0by4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgd2hhdCBpdCYjMzk7cyB0cnlpbmcgdG8gZG8gaW4gdGhlIGdyZWF0ZXIgY29udGV4dCBvZiB0aGUgY29kZS4gVGhpcyB3aWxsIGJlIHRoZSBwaXZvdGFsIHBvaW50IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIGt6YWxsb2Nfb2JqJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2xhYi5oPTEwNzA9dm9pZCAqa21hbGxvY19ub2xvY2soc2l6ZV90IHNpemUsIGdmcF90IGdmcF9mbGFncywgaW50IG5vZGUpO1xuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNTEtLyogQWxsIGt6YWxsb2MgYWxpYXNlcyBmb3Iga21hbGxvY18ob2JqfG9ianN8ZmxleCkuICovXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTUyOiNkZWZpbmUga3phbGxvY19vYmooUCwgLi4uKSBcXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTE1My1cdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgMSlcbmluY2x1ZGUvbGludXgvc2xhYi5oOjExNTQ6I2RlZmluZSBremFsbG9jX29ianMoUCwgQ09VTlQsIC4uLikgXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNTUtXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIENPVU5UKVxuLS1cbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oPTIwMD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBrbWVtX2NhY2hlX3NoZWFmX3NpemUoc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxuLS1cbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTIxMC1cbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oOjIxMTojZGVmaW5lIGt6YWxsb2Nfb2JqKFAsIC4uLikgXFxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTIxMi1cdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgMSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc3ODUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA5ODU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBJc3N1ZXMgaW4gdmhvc3QgSU9UTEIgTWlzcyBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBtZXRpY3Vsb3VzbHkgZXhhbWluZWQgdGhpcyB2aG9zdCBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgcmVsYXRlZCB0byBJT1RMQiBtaXNzIGhhbmRsaW5nLiBNeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBhbnkgbmV3IG9wcG9ydHVuaXRpZXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGJlIGxlYWtlZCB0byB1c2VyIHNwYWNlLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gIExldCYjMzk7cyBicmVhayBkb3duIG15IHRob3VnaHQgcHJvY2VzczoKCiogICAqKkluaXRpYWxpemF0aW9uIGlzIEtleToqKiAgVGhlIGBremFsbG9jX29iamAgZnVuY3Rpb24sIHdoaWNoIGlzIHV0aWxpemVkIGV4dGVuc2l2ZWx5IHdoZW4gY3JlYXRpbmcgYHZob3N0X21zZ19ub2RlYCBzdHJ1Y3R1cmVzIChlLmcuLCB3aXRoaW4gYHZob3N0X25ld19tc2dgKSwgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LCBzaW5jZSBpdCBlbnN1cmVzIHRoZSBlbnRpcmUgYWxsb2NhdGVkIG1lbW9yeSBpcyB6ZXJvZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgYHN0cnVjdCB2aG9zdF9tc2dfbm9kZWAgYW5kIGl0cyBpbnRlcm5hbCB1bmlvbnMgaXMgYWx3YXlzIGRlZmluZWQuICBFdmVyeSBiaXQgaXMgc2V0IHRvIHplcm8gaW5pdGlhbGx5LgoKKiAgICoqYHZob3N0X3NldF9pb3RsYl9taXNzYCAmYW1wOyBaZXJvaW5nOioqIFRoZSBgdmhvc3Rfc2V0X2lvdGxiX21pc3NgIGZ1bmN0aW9uIGlzIGNydWNpYWwuIElmIHRoZSBgbXNnLnR5cGVgIGNoYW5nZXMsIGl0IG5vdyB1c2VzIGBtZW1zZXRgIHRvIHplcm8gb3V0IHRoZSBjb250ZW50cyBvZiBgbXNnX3YyYCBiZWZvcmUgdXBkYXRpbmcgYG1zZy50eXBlYC4gVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IGFueSBwb3RlbnRpYWwgZ2FyYmFnZSBsZWZ0IGluIHRoZSBgbXNnX3YyYCB1bmlvbiB3aGVuIGEgVjEgbWlzcyBpcyByZXBsYWNlZCBieSBhIFYyIG1pc3MgKG9yIHZpY2UgdmVyc2EpLiAgSWYgdGhlIHR5cGVzIGFyZSBpZGVudGljYWwsIGBtZW1zZXRgIGlzIHNraXBwZWQuIEhvd2V2ZXIsIHRoZXJlJiMzOTtzIG5vIGhhcm0gaW4gc2tpcHBpbmcgdGhlIGBtZW1zZXRgIGJlY2F1c2UgdGhlIG1lbW9yeSBpcyBhbHJlYWR5IHplcm9lZCAoZnJvbSB0aGUgcHJldmlvdXMgYGt6YWxsb2NgIG9yIGBtZW1zZXRgKS4KCiogICAqKkNvYWxlc2NpbmcgYW5kIFJldXNlOioqIGB2aG9zdF9pb3RsYl9taXNzX2NvYWxlc2NlYCByZXVzZXMgZXhpc3RpbmcgYHZob3N0X21zZ19ub2RlYCBpbnN0YW5jZXMuICBJZiB0aGUgbWlzcyBkYXRhICpkb2VzbiYjMzk7dCogY2hhbmdlLCB0aGUgbm9kZSBpcyByZXVzZWQuICBgdmhvc3Rfc2V0X2lvdGxiX21pc3NgIHdpbGwgZ2V0IGNhbGxlZCwgaWYgYW55dGhpbmcgY2hhbmdlZCwgd2hpY2ggaGFuZGxlcyB0aGUgemVyb2luZyBhbmQgdXBkYXRlcyBhcyBkZXNjcmliZWQuIFRoZSBjb2RlIGF2b2lkcyB1bm5lY2Vzc2FyeSBgbWVtY3B5YCBvcGVyYXRpb25zLgoKKiAgICoqVGhlIGBzbmFwc2hvdGAgVW5pb24gYW5kIENvcHlpbmcgdG8gVXNlciBTcGFjZToqKiBUaGUgbWFpbiBhcmVhIG9mIGNvbmNlcm4sIGFuZCBteSBtYWluIGZvY3VzLCBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIHRoZSBsb2NhbCBgc25hcHNob3RgIHVuaW9uIHdpdGhpbiBgdmhvc3RfY2hyX3JlYWRfaXRlcmAuICBUaGlzIGlzIHVzZWQgdG8gaGFuZGxlIGNvcHlpbmcgaW5mb3JtYXRpb24gdG8gdXNlciBzcGFjZSB3aGlsZSBob2xkaW5nIGxvY2tzLiAgSSB0aG9yb3VnaGx5IGFzc2Vzc2VkIHRoZSBgbWVtY3B5YCBvcGVyYXRpb25zIGZyb20gdGhlIGBmaXJzdC0mZ3Q7bXNnX3YyYCBpbnRvIHRoZSBgc25hcHNob3RgIHVuaW9uIGFuZCBzdWJzZXF1ZW50IGBjb3B5X3RvX2l0ZXJfZnVsbGAgdG8gdXNlciBzcGFjZSwgYXMgdGhhdOKAmXMgdGhlIHBhdGggaW50byB1c2VyIHNwYWNlLiBTaW5jZSB0aGUgc291cmNlIGRhdGEgaXMgemVyb2VkIGluaXRpYWxseSwgYW5kIHRoZXJlIGlzIG5vIGNvcHlpbmcgYW55IG90aGVyIGRhdGEgaW50byB0aGUgYHNuYXBzaG90YCB1bmlvbiwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4KCiogICAqKkFsaWdubWVudCBhbmQgUGFkZGluZzoqKiAgSSBjYXJlZnVsbHkgZXhhbWluZWQgdGhlIHBhZGRpbmcgd2l0aGluIGBzdHJ1Y3Qgdmhvc3RfbXNnYCAod2hpY2ggaGFzIDQgYnl0ZXMgb2YgcGFkZGluZykgYW5kIGBzdHJ1Y3Qgdmhvc3RfbXNnX3YyYCwgYXMgdGhpcyBpcyBhIGZyZXF1ZW50IHNvdXJjZSBvZiBjb25jZXJuLiBIb3dldmVyLCB0aGUgcGFkZGluZyBpbiBgc3RydWN0IHZob3N0X21zZ2AgaXMgYWx3YXlzIHplcm9lZCBieSB0aGUgaW5pdGlhbGl6YXRpb24uIFRoaXMgemVyb2VkIHBhZGRpbmcgZ2V0cyBjb3BpZWQgdG8gdGhlIGBzbmFwc2hvdGAgdW5pb24gYW5kIHN1YnNlcXVlbnRseSBnZXRzIGNvcGllZCB0byB1c2VyIHNwYWNlLiAgVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgY29waWVkLiBBbHNvLCB0aGVyZSBpcyBubyBwYWRkaW5nIGJldHdlZW4gdGhlIGZpZWxkcyBvZiBgc3RydWN0IHZob3N0X21zZ192MmAsIHNvIHRoZXJlJiMzOTtzIG5vIHJpc2sgb2YgYWNjaWRlbnRhbGx5IHJlYWRpbmcgdW5pbml0aWFsaXplZCB2YWx1ZXMgdGhlcmUuCgoqICAgKipDb250cm9sIEZsb3cgYW5kIFN0YXRlOioqIEkgYW5hbHl6ZWQgYWxsIHJlbGV2YW50IGNvbnRyb2wgZmxvd3MsIGluY2x1ZGluZyBjYXNlcyB3aGVyZSB0aGUgbm9kZSBpcyBjb2FsZXNjZWQgKHJldXNlZCkgb3IgcmV0cmllZCwgYW5kIGFsc28gY2hlY2tlZCBmb3IgYW55IGluZm9ybWF0aW9uIGxlYWtzIG9yIGlzc3VlcyB3aXRoIG1lc3NhZ2UgdHlwZXMgKFYxIHZzLiBWMikuIEl04oCZcyBhbGwgY29uc2lzdGVudCBhbmQgc2FmZS4gVGhlIHVzZSBvZiBgdmhvc3RfaW90bGJfbWlzc19zdGF0ZWAgZW5zdXJlcyBwcm9wZXIgaGFuZGxpbmcgb2YgdGhlIG1lc3NhZ2Ugc3RhdGVzIGFuZCBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMuCgoqICAgKipEYXRhIFN0cnVjdHVyZXMgYW5kIEluaXRpYWxpemF0aW9uOioqIEkgcmV2aWV3ZWQgd2hlcmUgYW5kIGhvdyBzdHJ1Y3R1cmVzIGxpa2UgYHZob3N0X2lvdGxiX21zZ2AgYW5kIGB2aG9zdF9tc2dfbm9kZWAgYXJlIGluaXRpYWxpemVkLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbXBhY3Qgb2YgdGhlIGBremFsbG9jX29iamAsIHdoaWNoIGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbi4KCiogICAqKktNU0FOIENvbnNpZGVyYXRpb246KiogIFRoZSBjaGFuZ2VzIGRvICpub3QqIGludHJvZHVjZSBLTVNBTiB2aW9sYXRpb25zLiBUaGUgYG1lbWNweWAgb3BlcmF0aW9uIGlzIHNhZmUgYmVjYXVzZSB0aGUgc291cmNlIGBmaXJzdC0mZ3Q7bXNnX3YyYCBpcyBhbHdheXMgemVyb2VkIChmdWxseSBpbml0aWFsaXplZCkuIFRoZSBsb2dpYyBpcyBzdHJ1Y3R1cmVkIHNvIHRoZXJlIGFyZSBubyBzaXR1YXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtYmVycyB3b3VsZCBnZXQgcmVhZC4KCiogICAqKlVudXNlZCBQYXRoIChmb3IgdjEpKiogVGhlIG9sZGVyIGNvZGUgcGF0aCB0byBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSBubyBsb25nZXIgdXNlcyB0aGUgYG1lbWNweWAgYW5kIGRvZXMgbm90IHVzZSBgc25hcHNob3RgLiBUaGlzIGF2b2lkcyB1bm5lY2Vzc2FyeSBjb3BpZXMuCgoqICAgKipgdmhvc3RfdW50cmFja19pb3RsYl9taXNzYCBVc2FnZToqKiAgVGhlIGZ1bmN0aW9uIGB2aG9zdF91bnRyYWNrX2lvdGxiX21pc3NgIGlzIHVzZWQgcHJvcGVybHkgdG8gdHJhY2sgdGhlIHBvaW50ZXJzLCBhbmQgaXMgaGFuZGxlZCBpbiBhIHdheSB0aGF0IGF2b2lkcyBtZW1vcnkgc2FmZXR5IGlzc3VlcyBsaWtlIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2hlbiB0aGUgdmhvc3QgbWVzc2FnZSBub2RlcyBhcmUgZnJlZWQgb3IgdW50cmFja2VkLgoKSW4gc2hvcnQKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9kZXF1ZXVlX21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvdmhvc3QuYz0zNTA4PUVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2VucXVldWVfbXNnKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTA5LVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjM1MTA6c3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9kZXF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUxMS1cdFx0XHRcdFx0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MjUtfVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjM1MjY6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGVxdWV1ZV9tc2cpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MjctXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5oPTI3Mz12b2lkIHZob3N0X2VucXVldWVfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjc1LVx0XHQgICAgICAgc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaDoyNzY6c3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9kZXF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjc3LVx0XHRcdFx0XHQgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT42bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5MDA3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBDcm9zcy1Ecml2ZXIgRGVwZW5kZW5jeSoqCgpBbHJpZ2h0LCB0aGlzIGZ1bmN0aW9uIGhhcyBiZWVuIGBFWFBPUlRfU1lNQk9MYCYjMzk7ZCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gSXQmIzM5O3MgZGVzaWduZWQgdG8gYmUgZXh0ZXJuYWxseSBhY2Nlc3NpYmxlLCBtZWFuaW5nIG90aGVyIHZob3N0IGRyaXZlcnMgY291bGQgcG90ZW50aWFsbHkgYmUgbGV2ZXJhZ2luZyBpdC4gVGhpcyBuZWNlc3NpdGF0ZXMgYSBjYXJlZnVsIGxvb2sgYXQgdXBzdHJlYW0gdXNhZ2UuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgYHZob3N0X25ldGAsIGB2aG9zdF9zY3NpYCwgb3IgYHZob3N0X3Zzb2NrYCDigJMgb3IgcGVyaGFwcyBldmVuIHNvbWUgb3RoZXIgbGVzcyBjb21tb24gdmhvc3QgaW1wbGVtZW50YXRpb25zIOKAkyBhcmUgZGVwZW5kaW5nIG9uIHRoaXMgZnVuY3Rpb24mIzM5O3MgYmVoYXZpb3IuIEkgbmVlZCB0byB0cmFjZSB0aGUgcmVmZXJlbmNlcyB0byBlbnN1cmUgdGhhdCBhbnkgbW9kaWZpY2F0aW9uIGhlcmUgd29uJiMzOTt0IGNyZWF0ZSBhbiB1bmV4cGVjdGVkIHJlZ3Jlc3Npb24gaW4gYSBzZWVtaW5nbHkgdW5yZWxhdGVkIGFyZWEgb2YgdGhlIHZob3N0IHN1YnN5c3RlbS4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdobyYjMzk7cyBjYWxsaW5nIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9kZXF1ZXVlX21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvdmhvc3QuYz0zNTA4PUVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2VucXVldWVfbXNnKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTA5LVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjM1MTA6c3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9kZXF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUxMS1cdFx0XHRcdFx0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MjUtfVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjM1MjY6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGVxdWV1ZV9tc2cpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MjctXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5oPTI3Mz12b2lkIHZob3N0X2VucXVldWVfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjc1LVx0XHQgICAgICAgc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaDoyNzY6c3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9kZXF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjc3LVx0XHRcdFx0XHQgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5NTYwCgkJCQkJCQlvdXRwdXQ6IDMxOQoJCQkJCQkJdGhvdWdodHM6IDk4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBKdXN0aWZpY2F0aW9uIGZvciBWaG9zdCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGB2aG9zdF9kZXF1ZXVlX21zZ2AgaXNuJiMzOTt0IHVzZWQgKmFueXdoZXJlKiBpbiB0aGUgYGRyaXZlcnMvdmhvc3QvYCBkaXJlY3RvcnksIHdoaWNoIGlzIGludGVyZXN0aW5nLiAgYHZob3N0X2Nocl9yZWFkX2l0ZXJgIHVzZWQgdG8gY2FsbCBpdCwgYnV0IG5vdCBhbnltb3JlIGZvciB0aGUgYHJlYWRfbGlzdGAuICBJcyBpdCBiZWluZyB1c2VkIHdpdGggYHBlbmRpbmdfbGlzdGA/IE5vcGUsIGB2aG9zdF9jaHJfcmVhZF9pdGVyYCBpc24mIzM5O3QgdG91Y2hpbmcgdGhhdCBxdWV1ZSB3aXRoIHRoaXMgZnVuY3Rpb24uIEFoYSEgSSByZW1lbWJlciBub3cgLSBgcGVuZGluZ19saXN0YCBpcyBjbGVhcmVkIGluIGB2aG9zdF9jbGVhcl9tc2dgIGFuZCBgdmhvc3RfaW90bGJfbm90aWZ5X3ZxYC4KClNvLCB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgSU9UTEIgbWlzcyBmbG9vZCB2dWxuZXJhYmlsaXR5LCBvciByZXRyeSBwcm9ibGVtcy4KCkNyaXRpY2FsbHksIHRoZSBwYXRjaCAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MsIGFuZCBJIG5lZWQgdG8gZG9jdW1lbnQgdGhlIHJlYXNvbmluZy4gVGhlIGBzbmFwc2hvdGAgdW5pb24gaXMgY29tcGxldGVseSBwb3B1bGF0ZWQgdGhyb3VnaCBhIGBtZW1jcHlgIGZyb20gYSBmdWxseSB6ZXJvZWQgYHN0cnVjdCB2aG9zdF9tc2dfbm9kZWAgdGhhdCB3YXMgYGt6YWxsb2Nfb2JqYCBhbGxvY2F0ZWQgYW5kIHplcm9lZC4gIFdlIGFyZSBub3QgcHVsbGluZyBhbnkgc3RhbGUgZGF0YSwgbm9yIGFyZSB3ZSBsZWFraW5nIGFueSB1bmluaXRpYWxpemVkIHBhZGRpbmcuICBUaGUgYHN0cnVjdCB2aG9zdF9tc2dgIHBhZGRpbmcsIGFuZCBhbnkgcGFkZGluZyBpbiB0aGUgYHN0cnVjdCB2aG9zdF9tc2dfdjJgLCBpcyBhbHNvIHplcm9lZC4gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIHVzZWQgaW4gYW55IGNvbmRpdGlvbmFsIGxvZ2ljLCBhbmQgdGhlcmUgYXJlIG5vIGNvbXBsZXggc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGVyZSBhcmUgbm8gYm91bmRzIGNoZWNrIGlzc3VlcyBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG1lbW9yeSBsZWFrcyBmcm9tIHVuaW5pdGlhbGl6ZWQgYnVmZmVycy4KCkkgbmVlZCB0byBjb25maXJtIHNpemVzIHRob3VnaC4gTGV0IG1lIGNoZWNrIHRoZSBgc25hcHNob3RgIHVuaW9uIHNpemUgYW5kIHRoZSBgY29weV90b19pdGVyX2Z1bGxgIGNhbGwuCgpgYGBjCgl1bmlvbiB7CgkJc3RydWN0IHZob3N0X21zZyBtc2c7CgkJc3RydWN0IHZob3N0X21zZ192MiBtc2dfdjI7Cgl9IHNuYXBzaG90OwpgYGAKCmBzaXplb2Yoc25hcHNob3QpYCBpcyB0aGUgbWF4aW11bSBvZiB0aGUgc2l6ZXMgb2YgdGhlIHR3byBzdHJ1Y3R1cmVzIHdpdGhpbiB0aGUgdW5pb24uIGBzaXplb2Yoc3RydWN0IHZob3N0X21zZylgIGlzIDQgKHR5cGUpICYjNDM7IDQgKHBhZGRpbmcpICYjNDM7IDY0ICh1bmlvbikgPSA3MiBieXRlcy4gYHNpemVvZihzdHJ1Y3Qgdmhvc3RfbXNnX3YyKWAgaXMgNCAodHlwZSkgJiM0MzsgNCAoYXNpZCkgJiM0MzsgNjQgKHVuaW9uKSA9IDcyIGJ5dGVzLiAgU28sIGJvdGggYXJlIDcyIGJ5dGVzLiAgVGhlIGBzaXplYCBhcmd1bWVudCBpbiB0aGUgYG1lbWNweWAgaXMgZWl0aGVyIGBzaXplb2YoZmlyc3QtJmd0O21zZ192MilgICg3Mikgb3IgYHNpemVvZihmaXJzdC0mZ3Q7bXNnKWAgKDcyKSwgc28gYWx3YXlzIDcyIGJ5dGVzLiAgVGhlIGBtZW1jcHkoJmFtcDtzbmFwc2hvdC5tc2dfdjIsICZhbXA7Zmlyc3QtJmd0O21zZ192Miwgc2l6ZSk7YCBjb3BpZXMgNzIgYnl0ZXMsIGFuZCB0aGUgYGNvcHlfdG9faXRlcl9mdWxsYCBhbHNvIGNvcGllcyA3MiBieXRlcy4gIEV2ZXJ5dGhpbmcgaXMgcGVyZmVjdGx5IHNpemVkIGFuZCBpbml0aWFsaXplZC4gTm8gaXNzdWVzLgoKVGhlcmVmb3JlLCB0aGUgcmVhc29uaW5nIGlzIGFzIGZvbGxvd3M6CgoxLiAgQSBsb2NhbCBgc25hcHNob3RgIHVuaW9uIGlzIGludHJvZHVjZWQgYW5kIGNvcGllZCB0byB1c2VyIHNwYWNlIGluIGB2aG9zdF9jaHJfcmVhZF9pdGVyYC4KMi4gIGBzbmFwc2hvdGAgaXMgcG9wdWxhdGVkIHVzaW5nIGBtZW1jcHlgIGZyb20gYGZpcnN0LSZndDttc2dfdjJgIG9yIGBmaXJzdC0mZ3Q7bXNnYC4KMy4gIGBmaXJzdGAgaXMgYSBgc3RydWN0IHZob3N0X21zZ19ub2RlYCBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgIGluIGB2aG9zdF9uZXdfbXNnYCwgd2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgZW50aXJlIHN0cnVjdHVyZS4KNC4gIElmIGB2aG9zdF9zZXRfaW90bGJfbWlzc2AgY2hhbmdlcyB0aGUgbWVzc2FnZSB0eXBlLCBpdCBleHBsaWNpdGx5IHplcm8mIzM5O3MgdGhlIGVudGlyZSBtZXNzYWdlLgo1LiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCB0byB1c2VyIHNwYWNlIChgc2l6ZWApIG1hdGNoZXMgdGhlIGluaXRpYWxpemVkIG1lc3NhZ2Ugc3RydWN0dXJlLgo2LiBUaHVzLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBjYW4gbGVhayB0byB1c2VyIHNwYWNlLgo3LiAgVGhlIHJlc3QgZm9jdXNlcyBvbiBsaXN0IG1hbmlwdWxhdGlvbnMsIGBpb3RsYl9taXNzX3N0YXRlYCB0cmFja2luZywgYW5kIGNvYWxlc2NpbmcgbG9naWMsIGZvciBmbG9vZCBjb250cm9sLiBBbnkgYnVncyBoZXJlIHdvdWxkIG1hbmlmZXN0IGFzIGxvZ2ljYWwgZXJyb3JzLCBkZWFkbG9ja3MsIG9yIFVBRi9PT0IgYWNjZXNzZXMsIGFuZCBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCBhbmQgS0NTQU4uCjguICBUaGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLgoKSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LiBJJiMzOTtsbCBpbnZva2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2FsIGBzbmFwc2hvdGAgdW5pb24gaW4gYHZob3N0X2Nocl9yZWFkX2l0ZXJgIHdoaWNoIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIHZpYSBgY29weV90b19pdGVyX2Z1bGxgLiBIb3dldmVyLCB0aGlzIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgYmVjYXVzZTpcbjEuIFRoZSBgc25hcHNob3RgIGlzIHBvcHVsYXRlZCB1c2luZyBgbWVtY3B5YCBmcm9tIGFuIGV4aXN0aW5nIG1lc3NhZ2Ugbm9kZSAoYGZpcnN0LVx1MDAzZW1zZ192MmAgb3IgYGZpcnN0LVx1MDAzZW1zZ2ApLlxuMi4gVGhlIHNvdXJjZSBtZXNzYWdlIG5vZGUgaXMgYWxsb2NhdGVkIGluIGB2aG9zdF9uZXdfbXNnYCB1c2luZyBga3phbGxvY2AgKHZpYSBga3phbGxvY19vYmpgKSwgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBlbnRpcmUgc3RydWN0dXJlLCBpbmNsdWRpbmcgYW55IGNvbXBpbGVyLWluc2VydGVkIHBhZGRpbmcsIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuXG4zLiBXaGVuIGEgbWVzc2FnZSBpcyByZXVzZWQgYW5kIGl0cyB0eXBlIGNoYW5nZXMsIGB2aG9zdF9zZXRfaW90bGJfbWlzc2AgZXhwbGljaXRseSBjYWxscyBgbWVtc2V0YCB0byB6ZXJvIG91dCB0aGUgbWVzc2FnZSBmaWVsZHMsIGVuc3VyaW5nIG5vIHN0YWxlIGRhdGEgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nIHJlbWFpbnMuXG40LiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCB0byB1c2VyIHNwYWNlIGV4YWN0bHkgbWF0Y2hlcyB0aGUgc2l6ZSBvZiB0aGUgZnVsbHkgaW5pdGlhbGl6ZWQgbWVzc2FnZSBzdHJ1Y3R1cmUuXG5cblRoZSByZW1haW5kZXIgb2YgdGhlIHBhdGNoIGludm9sdmVzIGxpc3QgbWFuaXB1bGF0aW9ucywgc3RhdGUgdHJhY2tpbmcgKGBpb3RsYl9taXNzX3N0YXRlYCksIGFuZCBjb2FsZXNjaW5nIGxvZ2ljIHRvIHByZXZlbnQgSU9UTEIgbWlzcyBmbG9vZHMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgbGlzdCBjb3JydXB0aW9uLCBvciBkZWFkbG9ja3MpIGFyZSBwZXJmZWN0bHkgc3VpdGVkIGZvciBzdGFuZGFyZCBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9jYWwgYHNuYXBzaG90YCB1bmlvbiBpbiBgdmhvc3RfY2hyX3JlYWRfaXRlcmAgd2hpY2ggaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgdmlhIGBjb3B5X3RvX2l0ZXJfZnVsbGAuIEhvd2V2ZXIsIHRoaXMgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyBiZWNhdXNlOlxuMS4gVGhlIGBzbmFwc2hvdGAgaXMgcG9wdWxhdGVkIHVzaW5nIGBtZW1jcHlgIGZyb20gYW4gZXhpc3RpbmcgbWVzc2FnZSBub2RlIChgZmlyc3QtXHUwMDNlbXNnX3YyYCBvciBgZmlyc3QtXHUwMDNlbXNnYCkuXG4yLiBUaGUgc291cmNlIG1lc3NhZ2Ugbm9kZSBpcyBhbGxvY2F0ZWQgaW4gYHZob3N0X25ld19tc2dgIHVzaW5nIGBremFsbG9jYCAodmlhIGBremFsbG9jX29iamApLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIGVudGlyZSBzdHJ1Y3R1cmUsIGluY2x1ZGluZyBhbnkgY29tcGlsZXItaW5zZXJ0ZWQgcGFkZGluZywgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC5cbjMuIFdoZW4gYSBtZXNzYWdlIGlzIHJldXNlZCBhbmQgaXRzIHR5cGUgY2hhbmdlcywgYHZob3N0X3NldF9pb3RsYl9taXNzYCBleHBsaWNpdGx5IGNhbGxzIGBtZW1zZXRgIHRvIHplcm8gb3V0IHRoZSBtZXNzYWdlIGZpZWxkcywgZW5zdXJpbmcgbm8gc3RhbGUgZGF0YSBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcgcmVtYWlucy5cbjQuIFRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIHRvIHVzZXIgc3BhY2UgZXhhY3RseSBtYXRjaGVzIHRoZSBzaXplIG9mIHRoZSBmdWxseSBpbml0aWFsaXplZCBtZXNzYWdlIHN0cnVjdHVyZS5cblxuVGhlIHJlbWFpbmRlciBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgbGlzdCBtYW5pcHVsYXRpb25zLCBzdGF0ZSB0cmFja2luZyAoYGlvdGxiX21pc3Nfc3RhdGVgKSwgYW5kIGNvYWxlc2NpbmcgbG9naWMgdG8gcHJldmVudCBJT1RMQiBtaXNzIGZsb29kcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBsaXN0IGNvcnJ1cHRpb24sIG9yIGRlYWRsb2NrcykgYXJlIHBlcmZlY3RseSBzdWl0ZWQgZm9yIHN0YW5kYXJkIEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDg6NTguNTI2MjcxODA4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU1MzI0OTQyNjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX05FVFwiLFxuICAgIFwiVkhPU1RfVlNPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF9jaHJfcmVhZF9pdGVyXCIsXG4gICAgXCJ2aG9zdF9pbml0X2RldmljZV9pb3RsYlwiLFxuICAgIFwidmhvc3RfY2xlYXJfbXNnXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9jYWwgYHNuYXBzaG90YCB1bmlvbiBpbiBgdmhvc3RfY2hyX3JlYWRfaXRlcmAgd2hpY2ggaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgdmlhIGBjb3B5X3RvX2l0ZXJfZnVsbGAuIEhvd2V2ZXIsIHRoaXMgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyBiZWNhdXNlOlxcbjEuIFRoZSBgc25hcHNob3RgIGlzIHBvcHVsYXRlZCB1c2luZyBgbWVtY3B5YCBmcm9tIGFuIGV4aXN0aW5nIG1lc3NhZ2Ugbm9kZSAoYGZpcnN0LVxcdTAwM2Vtc2dfdjJgIG9yIGBmaXJzdC1cXHUwMDNlbXNnYCkuXFxuMi4gVGhlIHNvdXJjZSBtZXNzYWdlIG5vZGUgaXMgYWxsb2NhdGVkIGluIGB2aG9zdF9uZXdfbXNnYCB1c2luZyBga3phbGxvY2AgKHZpYSBga3phbGxvY19vYmpgKSwgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBlbnRpcmUgc3RydWN0dXJlLCBpbmNsdWRpbmcgYW55IGNvbXBpbGVyLWluc2VydGVkIHBhZGRpbmcsIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuXFxuMy4gV2hlbiBhIG1lc3NhZ2UgaXMgcmV1c2VkIGFuZCBpdHMgdHlwZSBjaGFuZ2VzLCBgdmhvc3Rfc2V0X2lvdGxiX21pc3NgIGV4cGxpY2l0bHkgY2FsbHMgYG1lbXNldGAgdG8gemVybyBvdXQgdGhlIG1lc3NhZ2UgZmllbGRzLCBlbnN1cmluZyBubyBzdGFsZSBkYXRhIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyByZW1haW5zLlxcbjQuIFRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIHRvIHVzZXIgc3BhY2UgZXhhY3RseSBtYXRjaGVzIHRoZSBzaXplIG9mIHRoZSBmdWxseSBpbml0aWFsaXplZCBtZXNzYWdlIHN0cnVjdHVyZS5cXG5cXG5UaGUgcmVtYWluZGVyIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBsaXN0IG1hbmlwdWxhdGlvbnMsIHN0YXRlIHRyYWNraW5nIChgaW90bGJfbWlzc19zdGF0ZWApLCBhbmQgY29hbGVzY2luZyBsb2dpYyB0byBwcmV2ZW50IElPVExCIG1pc3MgZmxvb2RzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGxpc3QgY29ycnVwdGlvbiwgb3IgZGVhZGxvY2tzKSBhcmUgcGVyZmVjdGx5IHN1aXRlZCBmb3Igc3RhbmRhcmQgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3RhdGUgbWFjaGluZSBmb3IgaGFuZGxpbmcgdmhvc3QgSU9UTEIgbWlzc2VzLCBjb2FsZXNjaW5nIGR1cGxpY2F0ZSBtaXNzIG1lc3NhZ2VzIHRvIHVzZXJzcGFjZS4gVGhpcyBpbnZvbHZlcyBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSB2aG9zdCBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNoYXJhY3RlciBkZXZpY2UgcmVhZCBoYW5kbGVyICh2aG9zdF9jaHJfcmVhZF9pdGVyKSwgZGV2aWNlIGluaXRpYWxpemF0aW9uICh2aG9zdF9pbml0X2RldmljZV9pb3RsYiksIGFuZCBtZXNzYWdlIGNsZWFyaW5nICh2aG9zdF9jbGVhcl9tc2cpLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB2aG9zdCBkZXZpY2Ugbm9kZXMgKGUuZy4sIC9kZXYvdmhvc3QtbmV0LCAvZGV2L3Zob3N0LXZzb2NrKSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBzdGF0ZSBtYWNoaW5lIGRvZXNuJ3QgaW50cm9kdWNlIGRlYWRsb2NrcywgbWVtb3J5IGxlYWtzLCBvciB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXRpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA4OjU4LjUyNjI3NjYyOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MjE4NjE1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRhYmI3MTk5ZDU0OTEwYTY4MTk1MmVmOGZkODU4ZGNkZDc3N2Y1OTNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTU6MDg6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5jIGIvZHJpdmVycy92aG9zdC92aG9zdC5jXFxuaW5kZXggNGM1MjViM2UxNmVhZC4uZWFiOTA0YjRiNDg0YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcXG4rKysgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcXG5AQCAtMzQsNiArMzQsMTMgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJ2aG9zdC5oXFxcIlxcbiBcXG4rZW51bSB2aG9zdF9pb3RsYl9taXNzX3N0YXRlIHtcXG4rXFx0VkhPU1RfSU9UTEJfTUlTU19OT05FLFxcbitcXHRWSE9TVF9JT1RMQl9NSVNTX1JFQUQsXFxuK1xcdFZIT1NUX0lPVExCX01JU1NfUkVBRElORyxcXG4rXFx0VkhPU1RfSU9UTEJfTUlTU19QRU5ESU5HLFxcbit9O1xcbitcXG4gc3RhdGljIHVzaG9ydCBtYXhfbWVtX3JlZ2lvbnMgPSA2NDtcXG4gbW9kdWxlX3BhcmFtKG1heF9tZW1fcmVnaW9ucywgdXNob3J0LCAwNDQ0KTtcXG4gTU9EVUxFX1BBUk1fREVTQyhtYXhfbWVtX3JlZ2lvbnMsXFxuQEAgLTYxMyw2ICs2MjAsOSBAQCB2b2lkIHZob3N0X2Rldl9pbml0KHN0cnVjdCB2aG9zdF9kZXYgKmRldixcXG4gXFx0XFx0dnEtXFx1MDAzZWhlYWRzID0gTlVMTDtcXG4gXFx0XFx0dnEtXFx1MDAzZW5oZWFkcyA9IE5VTEw7XFxuIFxcdFxcdHZxLVxcdTAwM2VkZXYgPSBkZXY7XFxuK1xcdFxcdHZxLVxcdTAwM2Vpb3RsYl9taXNzX3N0YXRlID0gVkhPU1RfSU9UTEJfTUlTU19OT05FO1xcbitcXHRcXHR2cS1cXHUwMDNlaW90bGJfbWlzc19zZXEgPSAwO1xcbitcXHRcXHR2cS1cXHUwMDNlaW90bGJfbWlzc19ub2RlID0gTlVMTDtcXG4gXFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4gXFx0XFx0dmhvc3RfdnFfcmVzZXQoZGV2LCB2cSk7XFxuIFxcdFxcdGlmICh2cS1cXHUwMDNlaGFuZGxlX2tpY2spXFxuQEAgLTExNzcsNiArMTE4NywyMCBAQCB2b2lkIHZob3N0X2Rldl9zdG9wKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kZXZfc3RvcCk7XFxuIFxcbitzdGF0aWMgdm9pZCB2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Moc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlKVxcbit7XFxuK1xcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gbm9kZS1cXHUwMDNldnE7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZ2cS1cXHUwMDNlZGV2LVxcdTAwM2Vpb3RsYl9sb2NrKTtcXG4rXFxuK1xcdGlmICh2cS1cXHUwMDNlaW90bGJfbWlzc19ub2RlICE9IG5vZGUpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHZxLVxcdTAwM2Vpb3RsYl9taXNzX25vZGUgPSBOVUxMO1xcbitcXHR2cS1cXHUwMDNlaW90bGJfbWlzc19zdGF0ZSA9IFZIT1NUX0lPVExCX01JU1NfTk9ORTtcXG4rXFx0dnEtXFx1MDAzZWlvdGxiX21pc3Nfc2VxKys7XFxuK31cXG4rXFxuIHZvaWQgdmhvc3RfY2xlYXJfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcXG4ge1xcbiBcXHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUsICpuO1xcbkBAIC0xMTg0LDEyICsxMjA4LDE0IEBAIHZvaWQgdmhvc3RfY2xlYXJfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWlvdGxiX2xvY2spO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG4sIFxcdTAwMjZkZXYtXFx1MDAzZXJlYWRfbGlzdCwgbm9kZSkge1xcbi1cXHRcXHRsaXN0X2RlbChcXHUwMDI2bm9kZS1cXHUwMDNlbm9kZSk7XFxuK1xcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNm5vZGUtXFx1MDAzZW5vZGUpO1xcbitcXHRcXHR2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Mobm9kZSk7XFxuIFxcdFxcdGtmcmVlKG5vZGUpO1xcbiBcXHR9XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobm9kZSwgbiwgXFx1MDAyNmRldi1cXHUwMDNlcGVuZGluZ19saXN0LCBub2RlKSB7XFxuLVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZub2RlLVxcdTAwM2Vub2RlKTtcXG4rXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2bm9kZS1cXHUwMDNlbm9kZSk7XFxuK1xcdFxcdHZob3N0X3VudHJhY2tfaW90bGJfbWlzcyhub2RlKTtcXG4gXFx0XFx0a2ZyZWUobm9kZSk7XFxuIFxcdH1cXG4gXFxuQEAgLTE1ODUsMjAgKzE2MTEsNzMgQEAgc3RhdGljIGlubGluZSBpbnQgdmhvc3RfZ2V0X2Rlc2Moc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuIFxcdHJldHVybiB2aG9zdF9jb3B5X2Zyb21fdXNlcih2cSwgZGVzYywgdnEtXFx1MDAzZWRlc2MgKyBpZHgsIHNpemVvZigqZGVzYykpO1xcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IHZob3N0X2lvdGxiX21zZyAqXFxuK3Zob3N0X2dldF9pb3RsYl9tc2coc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlKVxcbit7XFxuK1xcdGlmIChub2RlLVxcdTAwM2Vtc2cudHlwZSA9PSBWSE9TVF9JT1RMQl9NU0dfVjIpXFxuK1xcdFxcdHJldHVybiBcXHUwMDI2bm9kZS1cXHUwMDNlbXNnX3YyLmlvdGxiO1xcbitcXG4rXFx0cmV0dXJuIFxcdTAwMjZub2RlLVxcdTAwM2Vtc2cuaW90bGI7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHZob3N0X3NldF9pb3RsYl9taXNzKHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSwgYm9vbCB2MixcXG4rXFx0XFx0XFx0XFx0IHU2NCBpb3ZhLCBpbnQgYWNjZXNzKVxcbit7XFxuK1xcdHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1zZztcXG4rXFx0dTMyIHR5cGUgPSB2MiA/IFZIT1NUX0lPVExCX01TR19WMiA6IFZIT1NUX0lPVExCX01TRztcXG4rXFxuK1xcdGlmIChub2RlLVxcdTAwM2Vtc2cudHlwZSAhPSB0eXBlKVxcbitcXHRcXHRtZW1zZXQoXFx1MDAyNm5vZGUtXFx1MDAzZW1zZ192MiwgMCwgc2l6ZW9mKG5vZGUtXFx1MDAzZW1zZ192MikpO1xcbitcXHRub2RlLVxcdTAwM2Vtc2cudHlwZSA9IHR5cGU7XFxuK1xcdG1zZyA9IHZob3N0X2dldF9pb3RsYl9tc2cobm9kZSk7XFxuK1xcbitcXHRtc2ctXFx1MDAzZXR5cGUgPSBWSE9TVF9JT1RMQl9NSVNTO1xcbitcXHRtc2ctXFx1MDAzZWlvdmEgPSBpb3ZhO1xcbitcXHRtc2ctXFx1MDAzZXBlcm0gPSBhY2Nlc3M7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHZob3N0X2lvdGxiX3VwZGF0ZV9jb3ZlcnMoc3RydWN0IHZob3N0X2lvdGxiX21zZyAqdXBkYXRlLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptaXNzKVxcbit7XFxuK1xcdHJldHVybiBtaXNzLVxcdTAwM2V0eXBlID09IFZIT1NUX0lPVExCX01JU1MgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIHVwZGF0ZS1cXHUwMDNlaW92YSBcXHUwMDNjPSBtaXNzLVxcdTAwM2Vpb3ZhIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICBtaXNzLVxcdTAwM2Vpb3ZhIC0gdXBkYXRlLVxcdTAwM2Vpb3ZhIFxcdTAwM2MgdXBkYXRlLVxcdTAwM2VzaXplIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICAodXBkYXRlLVxcdTAwM2VwZXJtIFxcdTAwMjYgbWlzcy1cXHUwMDNlcGVybSkgPT0gbWlzcy1cXHUwMDNlcGVybTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdmhvc3RfaW90bGJfbm90aWZ5X3ZxKHN0cnVjdCB2aG9zdF9kZXYgKmQsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IHZob3N0X2lvdGxiX21zZyAqbXNnKVxcbiB7XFxuIFxcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSwgKm47XFxuK1xcdGludCBpO1xcbiBcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZkLVxcdTAwM2Vpb3RsYl9sb2NrKTtcXG4gXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkLVxcdTAwM2VudnFzOyArK2kpIHtcXG4rXFx0XFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBkLVxcdTAwM2V2cXNbaV07XFxuK1xcbitcXHRcXHRub2RlID0gdnEtXFx1MDAzZWlvdGxiX21pc3Nfbm9kZTtcXG4rXFx0XFx0aWYgKCFub2RlIHx8XFxuK1xcdFxcdCAgICAhdmhvc3RfaW90bGJfdXBkYXRlX2NvdmVycyhtc2csXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICB2aG9zdF9nZXRfaW90bGJfbXNnKG5vZGUpKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZub2RlLVxcdTAwM2Vub2RlKTtcXG4rXFx0XFx0dmhvc3RfdW50cmFja19pb3RsYl9taXNzKG5vZGUpO1xcbitcXHRcXHR2aG9zdF9wb2xsX3F1ZXVlKFxcdTAwMjZ2cS1cXHUwMDNlcG9sbCk7XFxuK1xcdFxcdGtmcmVlKG5vZGUpO1xcbitcXHR9XFxuK1xcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobm9kZSwgbiwgXFx1MDAyNmQtXFx1MDAzZXBlbmRpbmdfbGlzdCwgbm9kZSkge1xcbiBcXHRcXHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICp2cV9tc2cgPSBcXHUwMDI2bm9kZS1cXHUwMDNlbXNnLmlvdGxiO1xcbitcXG4rXFx0XFx0aWYgKG5vZGUtXFx1MDAzZXZxLVxcdTAwM2Vpb3RsYl9taXNzX25vZGUgPT0gbm9kZSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGlmIChtc2ctXFx1MDAzZWlvdmEgXFx1MDAzYz0gdnFfbXNnLVxcdTAwM2Vpb3ZhIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBtc2ctXFx1MDAzZWlvdmEgKyBtc2ctXFx1MDAzZXNpemUgLSAxIFxcdTAwM2U9IHZxX21zZy1cXHUwMDNlaW92YSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgdnFfbXNnLVxcdTAwM2V0eXBlID09IFZIT1NUX0lPVExCX01JU1MpIHtcXG4gXFx0XFx0XFx0dmhvc3RfcG9sbF9xdWV1ZShcXHUwMDI2bm9kZS1cXHUwMDNldnEtXFx1MDAzZXBvbGwpO1xcbi1cXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2bm9kZS1cXHUwMDNlbm9kZSk7XFxuK1xcdFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNm5vZGUtXFx1MDAzZW5vZGUpO1xcbiBcXHRcXHRcXHRrZnJlZShub2RlKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuQEAgLTE3NTUsOSArMTgzNCwxOCBAQCBzc2l6ZV90IHZob3N0X2Nocl9yZWFkX2l0ZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3QgaW92X2l0ZXIgKnRvLFxcbiBcXHRcXHRcXHQgICAgaW50IG5vYmxvY2spXFxuIHtcXG4gXFx0REVGSU5FX1dBSVQod2FpdCk7XFxuLVxcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZTtcXG4rXFx0dW5pb24ge1xcbitcXHRcXHRzdHJ1Y3Qgdmhvc3RfbXNnIG1zZztcXG4rXFx0XFx0c3RydWN0IHZob3N0X21zZ192MiBtc2dfdjI7XFxuK1xcdH0gc25hcHNob3Q7XFxuK1xcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbWlzc190b2tlbiA9IE5VTEw7XFxuK1xcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKm1pc3NfdnEgPSBOVUxMO1xcbitcXHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUgPSBOVUxMO1xcbitcXHR1NjQgbWlzc19zZXEgPSAwO1xcbiBcXHRzc2l6ZV90IHJldCA9IDA7XFxuIFxcdHVuc2lnbmVkIHNpemUgPSBzaXplb2Yoc3RydWN0IHZob3N0X21zZyk7XFxuK1xcdGJvb2wgc2hvcnRfYnVmZmVyID0gZmFsc2U7XFxuK1xcdGJvb2wgd2FrZSA9IGZhbHNlO1xcbiBcXG4gXFx0aWYgKGlvdl9pdGVyX2NvdW50KHRvKSBcXHUwMDNjIHNpemUpXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xNzY3LDggKzE4NTUsMzYgQEAgc3NpemVfdCB2aG9zdF9jaHJfcmVhZF9pdGVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IGlvdl9pdGVyICp0byxcXG4gXFx0XFx0XFx0cHJlcGFyZV90b193YWl0KFxcdTAwMjZkZXYtXFx1MDAzZXdhaXQsIFxcdTAwMjZ3YWl0LFxcbiBcXHRcXHRcXHRcXHRcXHRUQVNLX0lOVEVSUlVQVElCTEUpO1xcbiBcXG4tXFx0XFx0bm9kZSA9IHZob3N0X2RlcXVldWVfbXNnKGRldiwgXFx1MDAyNmRldi1cXHUwMDNlcmVhZF9saXN0KTtcXG4tXFx0XFx0aWYgKG5vZGUpXFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2ZGV2LVxcdTAwM2Vpb3RsYl9sb2NrKTtcXG4rXFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZkZXYtXFx1MDAzZXJlYWRfbGlzdCkpIHtcXG4rXFx0XFx0XFx0c3RydWN0IHZob3N0X21zZ19ub2RlICpmaXJzdDtcXG4rXFxuK1xcdFxcdFxcdGZpcnN0ID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2ZGV2LVxcdTAwM2VyZWFkX2xpc3QsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUsIG5vZGUpO1xcbitcXHRcXHRcXHRpZiAoZmlyc3QtXFx1MDAzZXZxLVxcdTAwM2Vpb3RsYl9taXNzX25vZGUgPT0gZmlyc3QpIHtcXG4rXFx0XFx0XFx0XFx0c2l6ZSA9IGZpcnN0LVxcdTAwM2Vtc2cudHlwZSA9PSBWSE9TVF9JT1RMQl9NU0dfVjIgP1xcbitcXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKGZpcnN0LVxcdTAwM2Vtc2dfdjIpIDogc2l6ZW9mKGZpcnN0LVxcdTAwM2Vtc2cpO1xcbitcXHRcXHRcXHRcXHRpZiAoaW92X2l0ZXJfY291bnQodG8pIFxcdTAwM2Mgc2l6ZSkge1xcbitcXHRcXHRcXHRcXHRcXHRzaG9ydF9idWZmZXIgPSB0cnVlO1xcbitcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnNuYXBzaG90Lm1zZ192MiwgXFx1MDAyNmZpcnN0LVxcdTAwM2Vtc2dfdjIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBzaXplKTtcXG4rXFx0XFx0XFx0XFx0XFx0bGlzdF9tb3ZlX3RhaWwoXFx1MDAyNmZpcnN0LVxcdTAwM2Vub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmRldi1cXHUwMDNlcGVuZGluZ19saXN0KTtcXG4rXFx0XFx0XFx0XFx0XFx0Zmlyc3QtXFx1MDAzZXZxLVxcdTAwM2Vpb3RsYl9taXNzX3N0YXRlID1cXG4rXFx0XFx0XFx0XFx0XFx0XFx0VkhPU1RfSU9UTEJfTUlTU19SRUFESU5HO1xcbitcXHRcXHRcXHRcXHRcXHRtaXNzX3ZxID0gZmlyc3QtXFx1MDAzZXZxO1xcbitcXHRcXHRcXHRcXHRcXHRtaXNzX3Rva2VuID0gZmlyc3Q7XFxuK1xcdFxcdFxcdFxcdFxcdG1pc3Nfc2VxID0gZmlyc3QtXFx1MDAzZXZxLVxcdTAwM2Vpb3RsYl9taXNzX3NlcTtcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZmaXJzdC1cXHUwMDNlbm9kZSk7XFxuK1xcdFxcdFxcdFxcdG5vZGUgPSBmaXJzdDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWlvdGxiX2xvY2spO1xcbitcXG4rXFx0XFx0aWYgKG5vZGUgfHwgbWlzc192cSB8fCBzaG9ydF9idWZmZXIpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRpZiAobm9ibG9jaykge1xcbiBcXHRcXHRcXHRyZXQgPSAtRUFHQUlOO1xcbkBAIC0xNzg5LDYgKzE5MDUsMzQgQEAgc3NpemVfdCB2aG9zdF9jaHJfcmVhZF9pdGVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IGlvdl9pdGVyICp0byxcXG4gXFx0aWYgKCFub2Jsb2NrKVxcbiBcXHRcXHRmaW5pc2hfd2FpdChcXHUwMDI2ZGV2LVxcdTAwM2V3YWl0LCBcXHUwMDI2d2FpdCk7XFxuIFxcbitcXHRpZiAoc2hvcnRfYnVmZmVyKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChtaXNzX3ZxKSB7XFxuK1xcdFxcdGJvb2wgY29waWVkID0gY29weV90b19pdGVyX2Z1bGwoXFx1MDAyNnNuYXBzaG90Lm1zZ192Miwgc2l6ZSwgdG8pO1xcbitcXG4rXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWlvdGxiX2xvY2spO1xcbitcXHRcXHRub2RlID0gbWlzc192cS1cXHUwMDNlaW90bGJfbWlzc19ub2RlO1xcbitcXHRcXHRpZiAobm9kZSA9PSBtaXNzX3Rva2VuIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBtaXNzX3ZxLVxcdTAwM2Vpb3RsYl9taXNzX3NlcSA9PSBtaXNzX3NlcSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgbWlzc192cS1cXHUwMDNlaW90bGJfbWlzc19zdGF0ZSA9PSBWSE9TVF9JT1RMQl9NSVNTX1JFQURJTkcpIHtcXG4rXFx0XFx0XFx0aWYgKGNvcGllZCkge1xcbitcXHRcXHRcXHRcXHRtaXNzX3ZxLVxcdTAwM2Vpb3RsYl9taXNzX3N0YXRlID1cXG4rXFx0XFx0XFx0XFx0XFx0VkhPU1RfSU9UTEJfTUlTU19QRU5ESU5HO1xcbitcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHRsaXN0X21vdmVfdGFpbChcXHUwMDI2bm9kZS1cXHUwMDNlbm9kZSwgXFx1MDAyNmRldi1cXHUwMDNlcmVhZF9saXN0KTtcXG4rXFx0XFx0XFx0XFx0bWlzc192cS1cXHUwMDNlaW90bGJfbWlzc19zdGF0ZSA9IFZIT1NUX0lPVExCX01JU1NfUkVBRDtcXG4rXFx0XFx0XFx0XFx0d2FrZSA9IHRydWU7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2ZGV2LVxcdTAwM2Vpb3RsYl9sb2NrKTtcXG4rXFxuK1xcdFxcdGlmICh3YWtlKVxcbitcXHRcXHRcXHR3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbChcXHUwMDI2ZGV2LVxcdTAwM2V3YWl0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBFUE9MTElOIHwgRVBPTExSRE5PUk0pO1xcbitcXHRcXHRyZXR1cm4gY29waWVkID8gc2l6ZSA6IC1FRkFVTFQ7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChub2RlKSB7XFxuIFxcdFxcdHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1zZztcXG4gXFx0XFx0dm9pZCAqc3RhcnQgPSBcXHUwMDI2bm9kZS1cXHUwMDNlbXNnO1xcbkBAIC0xODE5LDI5ICsxOTYzLDY5IEBAIHNzaXplX3Qgdmhvc3RfY2hyX3JlYWRfaXRlcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCBpb3ZfaXRlciAqdG8sXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfY2hyX3JlYWRfaXRlcik7XFxuIFxcbitzdGF0aWMgYm9vbCB2aG9zdF9pb3RsYl9taXNzX2NvYWxlc2NlKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBib29sIHYyLFxcbitcXHRcXHRcXHRcXHQgICAgICB1NjQgaW92YSwgaW50IGFjY2VzcywgYm9vbCAqd2FrZSlcXG4re1xcbitcXHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUgPSB2cS1cXHUwMDNlaW90bGJfbWlzc19ub2RlO1xcbitcXHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2c7XFxuK1xcdHUzMiB0eXBlID0gdjIgPyBWSE9TVF9JT1RMQl9NU0dfVjIgOiBWSE9TVF9JT1RMQl9NU0c7XFxuK1xcdGJvb2wgc2FtZTtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnZxLVxcdTAwM2VkZXYtXFx1MDAzZWlvdGxiX2xvY2spO1xcbitcXG4rXFx0aWYgKCFub2RlKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRtc2cgPSB2aG9zdF9nZXRfaW90bGJfbXNnKG5vZGUpO1xcbitcXHRzYW1lID0gbm9kZS1cXHUwMDNlbXNnLnR5cGUgPT0gdHlwZSBcXHUwMDI2XFx1MDAyNiBtc2ctXFx1MDAzZXR5cGUgPT0gVkhPU1RfSU9UTEJfTUlTUyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgbXNnLVxcdTAwM2Vpb3ZhID09IGlvdmEgXFx1MDAyNlxcdTAwMjYgbXNnLVxcdTAwM2VwZXJtID09IGFjY2VzcztcXG4rXFx0aWYgKHNhbWUgXFx1MDAyNlxcdTAwMjYgdnEtXFx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgIT0gVkhPU1RfSU9UTEJfTUlTU19SRUFESU5HKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdGlmICghc2FtZSlcXG4rXFx0XFx0dmhvc3Rfc2V0X2lvdGxiX21pc3Mobm9kZSwgdjIsIGlvdmEsIGFjY2Vzcyk7XFxuK1xcdHZxLVxcdTAwM2Vpb3RsYl9taXNzX3NlcSsrO1xcbitcXHRpZiAodnEtXFx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgIT0gVkhPU1RfSU9UTEJfTUlTU19SRUFEKSB7XFxuK1xcdFxcdGxpc3RfbW92ZV90YWlsKFxcdTAwMjZub2RlLVxcdTAwM2Vub2RlLCBcXHUwMDI2dnEtXFx1MDAzZWRldi1cXHUwMDNlcmVhZF9saXN0KTtcXG4rXFx0XFx0dnEtXFx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgPSBWSE9TVF9JT1RMQl9NSVNTX1JFQUQ7XFxuK1xcdFxcdCp3YWtlID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgdmhvc3RfaW90bGJfbWlzcyhzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgdTY0IGlvdmEsIGludCBhY2Nlc3MpXFxuIHtcXG4gXFx0c3RydWN0IHZob3N0X2RldiAqZGV2ID0gdnEtXFx1MDAzZWRldjtcXG4gXFx0c3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlO1xcbi1cXHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2c7XFxuIFxcdGJvb2wgdjIgPSB2aG9zdF9iYWNrZW5kX2hhc19mZWF0dXJlKHZxLCBWSE9TVF9CQUNLRU5EX0ZfSU9UTEJfTVNHX1YyKTtcXG4rXFx0Ym9vbCB3YWtlID0gZmFsc2U7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWlvdGxiX2xvY2spO1xcbitcXHRpZiAodmhvc3RfaW90bGJfbWlzc19jb2FsZXNjZSh2cSwgdjIsIGlvdmEsIGFjY2VzcywgXFx1MDAyNndha2UpKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWlvdGxiX2xvY2spO1xcbitcXHRcXHRpZiAod2FrZSlcXG4rXFx0XFx0XFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGwoXFx1MDAyNmRldi1cXHUwMDNld2FpdCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgRVBPTExJTiB8IEVQT0xMUkROT1JNKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNmRldi1cXHUwMDNlaW90bGJfbG9jayk7XFxuIFxcbiBcXHRub2RlID0gdmhvc3RfbmV3X21zZyh2cSwgdjIgPyBWSE9TVF9JT1RMQl9NU0dfVjIgOiBWSE9TVF9JT1RMQl9NU0cpO1xcbiBcXHRpZiAoIW5vZGUpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR2aG9zdF9zZXRfaW90bGJfbWlzcyhub2RlLCB2MiwgaW92YSwgYWNjZXNzKTtcXG4gXFxuLVxcdGlmICh2Mikge1xcbi1cXHRcXHRub2RlLVxcdTAwM2Vtc2dfdjIudHlwZSA9IFZIT1NUX0lPVExCX01TR19WMjtcXG4tXFx0XFx0bXNnID0gXFx1MDAyNm5vZGUtXFx1MDAzZW1zZ192Mi5pb3RsYjtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0bXNnID0gXFx1MDAyNm5vZGUtXFx1MDAzZW1zZy5pb3RsYjtcXG4tXFx0fVxcbi1cXG4tXFx0bXNnLVxcdTAwM2V0eXBlID0gVkhPU1RfSU9UTEJfTUlTUztcXG4tXFx0bXNnLVxcdTAwM2Vpb3ZhID0gaW92YTtcXG4tXFx0bXNnLVxcdTAwM2VwZXJtID0gYWNjZXNzO1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmRldi1cXHUwMDNlaW90bGJfbG9jayk7XFxuK1xcdHZxLVxcdTAwM2Vpb3RsYl9taXNzX25vZGUgPSBub2RlO1xcbitcXHR2cS1cXHUwMDNlaW90bGJfbWlzc19zdGF0ZSA9IFZIT1NUX0lPVExCX01JU1NfUkVBRDtcXG4rXFx0dnEtXFx1MDAzZWlvdGxiX21pc3Nfc2VxKys7XFxuK1xcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNm5vZGUtXFx1MDAzZW5vZGUsIFxcdTAwMjZkZXYtXFx1MDAzZXJlYWRfbGlzdCk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWlvdGxiX2xvY2spO1xcbiBcXG4tXFx0dmhvc3RfZW5xdWV1ZV9tc2coZGV2LCBcXHUwMDI2ZGV2LVxcdTAwM2VyZWFkX2xpc3QsIG5vZGUpO1xcbitcXHR3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbChcXHUwMDI2ZGV2LVxcdTAwM2V3YWl0LCBFUE9MTElOIHwgRVBPTExSRE5PUk0pO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMjI3MCwyNyArMjQ1NCw1OSBAQCBsb25nIHZob3N0X3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF9kZXYgKmQsIHVuc2lnbmVkIGludCBpb2N0bCwgdm9pZCBfX3VzZXIgKmFyZ1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X3ZyaW5nX2lvY3RsKTtcXG4gXFxuK3N0YXRpYyBib29sIHZob3N0X3JldHJ5X2lvdGxiX21pc3NlcyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkKVxcbit7XFxuK1xcdGJvb2wgd2FrZSA9IGZhbHNlO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmQtXFx1MDAzZWlvdGxiX2xvY2spO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGQtXFx1MDAzZW52cXM7ICsraSkge1xcbitcXHRcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGQtXFx1MDAzZXZxc1tpXTtcXG4rXFx0XFx0c3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlID0gdnEtXFx1MDAzZWlvdGxiX21pc3Nfbm9kZTtcXG4rXFxuK1xcdFxcdGlmICghbm9kZSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHR2cS1cXHUwMDNlaW90bGJfbWlzc19zZXErKztcXG4rXFx0XFx0aWYgKHZxLVxcdTAwM2Vpb3RsYl9taXNzX3N0YXRlICE9IFZIT1NUX0lPVExCX01JU1NfUkVBRClcXG4rXFx0XFx0XFx0bGlzdF9tb3ZlX3RhaWwoXFx1MDAyNm5vZGUtXFx1MDAzZW5vZGUsIFxcdTAwMjZkLVxcdTAwM2VyZWFkX2xpc3QpO1xcbitcXHRcXHR2cS1cXHUwMDNlaW90bGJfbWlzc19zdGF0ZSA9IFZIT1NUX0lPVExCX01JU1NfUkVBRDtcXG4rXFx0XFx0d2FrZSA9IHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB3YWtlO1xcbit9XFxuK1xcbiBpbnQgdmhvc3RfaW5pdF9kZXZpY2VfaW90bGIoc3RydWN0IHZob3N0X2RldiAqZClcXG4ge1xcbiBcXHRzdHJ1Y3Qgdmhvc3RfaW90bGIgKm5pb3RsYiwgKm9pb3RsYjtcXG4rXFx0Ym9vbCB3YWtlO1xcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdG5pb3RsYiA9IGlvdGxiX2FsbG9jKCk7XFxuIFxcdGlmICghbmlvdGxiKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuK1xcdHZob3N0X2Rldl9sb2NrX3ZxcyhkKTtcXG4gXFx0b2lvdGxiID0gZC1cXHUwMDNlaW90bGI7XFxuIFxcdGQtXFx1MDAzZWlvdGxiID0gbmlvdGxiO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGQtXFx1MDAzZW52cXM7ICsraSkge1xcbiBcXHRcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGQtXFx1MDAzZXZxc1tpXTtcXG4gXFxuLVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuIFxcdFxcdHZxLVxcdTAwM2Vpb3RsYiA9IG5pb3RsYjtcXG4gXFx0XFx0X192aG9zdF92cV9tZXRhX3Jlc2V0KHZxKTtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbiBcXHR9XFxuIFxcbitcXHRzcGluX2xvY2soXFx1MDAyNmQtXFx1MDAzZWlvdGxiX2xvY2spO1xcbitcXHR3YWtlID0gdmhvc3RfcmV0cnlfaW90bGJfbWlzc2VzKGQpO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2ZC1cXHUwMDNlaW90bGJfbG9jayk7XFxuK1xcdHZob3N0X2Rldl91bmxvY2tfdnFzKGQpO1xcbitcXG4rXFx0aWYgKHdha2UpXFxuK1xcdFxcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKFxcdTAwMjZkLVxcdTAwM2V3YWl0LFxcbitcXHRcXHRcXHRcXHRcXHQgICBFUE9MTElOIHwgRVBPTExSRE5PUk0pO1xcbiBcXHR2aG9zdF9pb3RsYl9mcmVlKG9pb3RsYik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMzMwMCw3ICszNTE2LDggQEAgc3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9kZXF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXFxuIFxcdGlmICghbGlzdF9lbXB0eShoZWFkKSkge1xcbiBcXHRcXHRub2RlID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdG5vZGUpO1xcbi1cXHRcXHRsaXN0X2RlbChcXHUwMDI2bm9kZS1cXHUwMDNlbm9kZSk7XFxuK1xcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNm5vZGUtXFx1MDAzZW5vZGUpO1xcbitcXHRcXHR2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Mobm9kZSk7XFxuIFxcdH1cXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNmRldi1cXHUwMDNlaW90bGJfbG9jayk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmggYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmhcXG5pbmRleCAwMTkyYWRlNmU3NDkxLi41MGZjY2M4NWQ1OTQwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaFxcbisrKyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaFxcbkBAIC0yOSw2ICsyOSw3IEBAIHN0cnVjdCB2aG9zdF93b3JrIHtcXG4gXFxuIHN0cnVjdCB2aG9zdF93b3JrZXI7XFxuIHN0cnVjdCB2aG9zdF9kZXY7XFxuK3N0cnVjdCB2aG9zdF9tc2dfbm9kZTtcXG4gXFxuIHN0cnVjdCB2aG9zdF93b3JrZXJfb3BzIHtcXG4gXFx0aW50ICgqY3JlYXRlKShzdHJ1Y3Qgdmhvc3Rfd29ya2VyICp3b3JrZXIsIHN0cnVjdCB2aG9zdF9kZXYgKmRldixcXG5AQCAtMTYzLDcgKzE2NCwxMiBAQCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlIHtcXG4gXFx0LyogUmluZyBlbmRpYW5uZXNzIHJlcXVlc3RlZCBieSB1c2Vyc3BhY2UgZm9yIGNyb3NzLWVuZGlhbiBzdXBwb3J0LiAqL1xcbiBcXHRib29sIHVzZXJfYmU7XFxuICNlbmRpZlxcbitcXHQvKiBQcm90ZWN0ZWQgYnkgZGV2LVxcdTAwM2Vpb3RsYl9sb2NrLiAqL1xcbitcXHR1OCBpb3RsYl9taXNzX3N0YXRlO1xcbiBcXHR1MzIgYnVzeWxvb3BfdGltZW91dDtcXG4rXFx0LyogUHJvdGVjdGVkIGJ5IGRldi1cXHUwMDNlaW90bGJfbG9jay4gKi9cXG4rXFx0dTY0IGlvdGxiX21pc3Nfc2VxO1xcbitcXHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKmlvdGxiX21pc3Nfbm9kZTtcXG4gfTtcXG4gXFxuIHN0cnVjdCB2aG9zdF9tc2dfbm9kZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA4OjU5LjkwOTA5MzE2MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjgwMDE1NjQ2ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX05FVFwiLFxuICAgIFwiVkhPU1RfVlNPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF9jaHJfcmVhZF9pdGVyXCIsXG4gICAgXCJ2aG9zdF9pbml0X2RldmljZV9pb3RsYlwiLFxuICAgIFwidmhvc3RfY2xlYXJfbXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzdGF0ZSBtYWNoaW5lIGZvciBoYW5kbGluZyB2aG9zdCBJT1RMQiBtaXNzZXMsIGNvYWxlc2NpbmcgZHVwbGljYXRlIG1pc3MgbWVzc2FnZXMgdG8gdXNlcnNwYWNlLiBUaGlzIGludm9sdmVzIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIHZob3N0IGNvZGUsIHNwZWNpZmljYWxseSBpbiB0aGUgY2hhcmFjdGVyIGRldmljZSByZWFkIGhhbmRsZXIgKHZob3N0X2Nocl9yZWFkX2l0ZXIpLCBkZXZpY2UgaW5pdGlhbGl6YXRpb24gKHZob3N0X2luaXRfZGV2aWNlX2lvdGxiKSwgYW5kIG1lc3NhZ2UgY2xlYXJpbmcgKHZob3N0X2NsZWFyX21zZykuIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHZob3N0IGRldmljZSBub2RlcyAoZS5nLiwgL2Rldi92aG9zdC1uZXQsIC9kZXYvdmhvc3QtdnNvY2spIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IHN0YXRlIG1hY2hpbmUgZG9lc24ndCBpbnRyb2R1Y2UgZGVhZGxvY2tzLCBtZW1vcnkgbGVha3MsIG9yIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGFiYjcxOTlkNTQ5MTBhNjgxOTUyZWY4ZmQ4NThkY2RkNzc3ZjU5M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE1OjA4OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5jIGIvZHJpdmVycy92aG9zdC92aG9zdC5jXG5pbmRleCA0YzUyNWIzZTE2ZWFkLi5lYWI5MDRiNGI0ODRjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcbkBAIC0zNCw2ICszNCwxMyBAQFxuIFxuICNpbmNsdWRlIFwidmhvc3QuaFwiXG4gXG4rZW51bSB2aG9zdF9pb3RsYl9taXNzX3N0YXRlIHtcbitcdFZIT1NUX0lPVExCX01JU1NfTk9ORSxcbitcdFZIT1NUX0lPVExCX01JU1NfUkVBRCxcbitcdFZIT1NUX0lPVExCX01JU1NfUkVBRElORyxcbitcdFZIT1NUX0lPVExCX01JU1NfUEVORElORyxcbit9O1xuK1xuIHN0YXRpYyB1c2hvcnQgbWF4X21lbV9yZWdpb25zID0gNjQ7XG4gbW9kdWxlX3BhcmFtKG1heF9tZW1fcmVnaW9ucywgdXNob3J0LCAwNDQ0KTtcbiBNT0RVTEVfUEFSTV9ERVNDKG1heF9tZW1fcmVnaW9ucyxcbkBAIC02MTMsNiArNjIwLDkgQEAgdm9pZCB2aG9zdF9kZXZfaW5pdChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG4gXHRcdHZxLVx1MDAzZWhlYWRzID0gTlVMTDtcbiBcdFx0dnEtXHUwMDNlbmhlYWRzID0gTlVMTDtcbiBcdFx0dnEtXHUwMDNlZGV2ID0gZGV2O1xuK1x0XHR2cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlID0gVkhPU1RfSU9UTEJfTUlTU19OT05FO1xuK1x0XHR2cS1cdTAwM2Vpb3RsYl9taXNzX3NlcSA9IDA7XG4rXHRcdHZxLVx1MDAzZWlvdGxiX21pc3Nfbm9kZSA9IE5VTEw7XG4gXHRcdG11dGV4X2luaXQoXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuIFx0XHR2aG9zdF92cV9yZXNldChkZXYsIHZxKTtcbiBcdFx0aWYgKHZxLVx1MDAzZWhhbmRsZV9raWNrKVxuQEAgLTExNzcsNiArMTE4NywyMCBAQCB2b2lkIHZob3N0X2Rldl9zdG9wKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGV2X3N0b3ApO1xuIFxuK3N0YXRpYyB2b2lkIHZob3N0X3VudHJhY2tfaW90bGJfbWlzcyhzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUpXG4re1xuK1x0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBub2RlLVx1MDAzZXZxO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2cS1cdTAwM2VkZXYtXHUwMDNlaW90bGJfbG9jayk7XG4rXG4rXHRpZiAodnEtXHUwMDNlaW90bGJfbWlzc19ub2RlICE9IG5vZGUpXG4rXHRcdHJldHVybjtcbitcbitcdHZxLVx1MDAzZWlvdGxiX21pc3Nfbm9kZSA9IE5VTEw7XG4rXHR2cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlID0gVkhPU1RfSU9UTEJfTUlTU19OT05FO1xuK1x0dnEtXHUwMDNlaW90bGJfbWlzc19zZXErKztcbit9XG4rXG4gdm9pZCB2aG9zdF9jbGVhcl9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2KVxuIHtcbiBcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSwgKm47XG5AQCAtMTE4NCwxMiArMTIwOCwxNCBAQCB2b2lkIHZob3N0X2NsZWFyX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpXG4gXHRzcGluX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG4sIFx1MDAyNmRldi1cdTAwM2VyZWFkX2xpc3QsIG5vZGUpIHtcbi1cdFx0bGlzdF9kZWwoXHUwMDI2bm9kZS1cdTAwM2Vub2RlKTtcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZub2RlLVx1MDAzZW5vZGUpO1xuK1x0XHR2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Mobm9kZSk7XG4gXHRcdGtmcmVlKG5vZGUpO1xuIFx0fVxuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG4sIFx1MDAyNmRldi1cdTAwM2VwZW5kaW5nX2xpc3QsIG5vZGUpIHtcbi1cdFx0bGlzdF9kZWwoXHUwMDI2bm9kZS1cdTAwM2Vub2RlKTtcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZub2RlLVx1MDAzZW5vZGUpO1xuK1x0XHR2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Mobm9kZSk7XG4gXHRcdGtmcmVlKG5vZGUpO1xuIFx0fVxuIFxuQEAgLTE1ODUsMjAgKzE2MTEsNzMgQEAgc3RhdGljIGlubGluZSBpbnQgdmhvc3RfZ2V0X2Rlc2Moc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4gXHRyZXR1cm4gdmhvc3RfY29weV9mcm9tX3VzZXIodnEsIGRlc2MsIHZxLVx1MDAzZWRlc2MgKyBpZHgsIHNpemVvZigqZGVzYykpO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IHZob3N0X2lvdGxiX21zZyAqXG4rdmhvc3RfZ2V0X2lvdGxiX21zZyhzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUpXG4re1xuK1x0aWYgKG5vZGUtXHUwMDNlbXNnLnR5cGUgPT0gVkhPU1RfSU9UTEJfTVNHX1YyKVxuK1x0XHRyZXR1cm4gXHUwMDI2bm9kZS1cdTAwM2Vtc2dfdjIuaW90bGI7XG4rXG4rXHRyZXR1cm4gXHUwMDI2bm9kZS1cdTAwM2Vtc2cuaW90bGI7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHZob3N0X3NldF9pb3RsYl9taXNzKHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSwgYm9vbCB2MixcbitcdFx0XHRcdCB1NjQgaW92YSwgaW50IGFjY2Vzcylcbit7XG4rXHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2c7XG4rXHR1MzIgdHlwZSA9IHYyID8gVkhPU1RfSU9UTEJfTVNHX1YyIDogVkhPU1RfSU9UTEJfTVNHO1xuK1xuK1x0aWYgKG5vZGUtXHUwMDNlbXNnLnR5cGUgIT0gdHlwZSlcbitcdFx0bWVtc2V0KFx1MDAyNm5vZGUtXHUwMDNlbXNnX3YyLCAwLCBzaXplb2Yobm9kZS1cdTAwM2Vtc2dfdjIpKTtcbitcdG5vZGUtXHUwMDNlbXNnLnR5cGUgPSB0eXBlO1xuK1x0bXNnID0gdmhvc3RfZ2V0X2lvdGxiX21zZyhub2RlKTtcbitcbitcdG1zZy1cdTAwM2V0eXBlID0gVkhPU1RfSU9UTEJfTUlTUztcbitcdG1zZy1cdTAwM2Vpb3ZhID0gaW92YTtcbitcdG1zZy1cdTAwM2VwZXJtID0gYWNjZXNzO1xuK31cbitcbitzdGF0aWMgYm9vbCB2aG9zdF9pb3RsYl91cGRhdGVfY292ZXJzKHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKnVwZGF0ZSxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1pc3MpXG4re1xuK1x0cmV0dXJuIG1pc3MtXHUwMDNldHlwZSA9PSBWSE9TVF9JT1RMQl9NSVNTIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHVwZGF0ZS1cdTAwM2Vpb3ZhIFx1MDAzYz0gbWlzcy1cdTAwM2Vpb3ZhIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIG1pc3MtXHUwMDNlaW92YSAtIHVwZGF0ZS1cdTAwM2Vpb3ZhIFx1MDAzYyB1cGRhdGUtXHUwMDNlc2l6ZSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICAodXBkYXRlLVx1MDAzZXBlcm0gXHUwMDI2IG1pc3MtXHUwMDNlcGVybSkgPT0gbWlzcy1cdTAwM2VwZXJtO1xuK31cbitcbiBzdGF0aWMgdm9pZCB2aG9zdF9pb3RsYl9ub3RpZnlfdnEoc3RydWN0IHZob3N0X2RldiAqZCxcbiBcdFx0XHRcdCAgc3RydWN0IHZob3N0X2lvdGxiX21zZyAqbXNnKVxuIHtcbiBcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSwgKm47XG4rXHRpbnQgaTtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZkLVx1MDAzZWlvdGxiX2xvY2spO1xuIFxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZC1cdTAwM2VudnFzOyArK2kpIHtcbitcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBkLVx1MDAzZXZxc1tpXTtcbitcbitcdFx0bm9kZSA9IHZxLVx1MDAzZWlvdGxiX21pc3Nfbm9kZTtcbitcdFx0aWYgKCFub2RlIHx8XG4rXHRcdCAgICAhdmhvc3RfaW90bGJfdXBkYXRlX2NvdmVycyhtc2csXG4rXHRcdFx0XHRcdCAgICAgICB2aG9zdF9nZXRfaW90bGJfbXNnKG5vZGUpKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZub2RlLVx1MDAzZW5vZGUpO1xuK1x0XHR2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Mobm9kZSk7XG4rXHRcdHZob3N0X3BvbGxfcXVldWUoXHUwMDI2dnEtXHUwMDNlcG9sbCk7XG4rXHRcdGtmcmVlKG5vZGUpO1xuK1x0fVxuK1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG4sIFx1MDAyNmQtXHUwMDNlcGVuZGluZ19saXN0LCBub2RlKSB7XG4gXHRcdHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKnZxX21zZyA9IFx1MDAyNm5vZGUtXHUwMDNlbXNnLmlvdGxiO1xuK1xuK1x0XHRpZiAobm9kZS1cdTAwM2V2cS1cdTAwM2Vpb3RsYl9taXNzX25vZGUgPT0gbm9kZSlcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKG1zZy1cdTAwM2Vpb3ZhIFx1MDAzYz0gdnFfbXNnLVx1MDAzZWlvdmEgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBtc2ctXHUwMDNlaW92YSArIG1zZy1cdTAwM2VzaXplIC0gMSBcdTAwM2U9IHZxX21zZy1cdTAwM2Vpb3ZhIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgdnFfbXNnLVx1MDAzZXR5cGUgPT0gVkhPU1RfSU9UTEJfTUlTUykge1xuIFx0XHRcdHZob3N0X3BvbGxfcXVldWUoXHUwMDI2bm9kZS1cdTAwM2V2cS1cdTAwM2Vwb2xsKTtcbi1cdFx0XHRsaXN0X2RlbChcdTAwMjZub2RlLVx1MDAzZW5vZGUpO1xuK1x0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2bm9kZS1cdTAwM2Vub2RlKTtcbiBcdFx0XHRrZnJlZShub2RlKTtcbiBcdFx0fVxuIFx0fVxuQEAgLTE3NTUsOSArMTgzNCwxOCBAQCBzc2l6ZV90IHZob3N0X2Nocl9yZWFkX2l0ZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3QgaW92X2l0ZXIgKnRvLFxuIFx0XHRcdCAgICBpbnQgbm9ibG9jaylcbiB7XG4gXHRERUZJTkVfV0FJVCh3YWl0KTtcbi1cdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZTtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHZob3N0X21zZyBtc2c7XG4rXHRcdHN0cnVjdCB2aG9zdF9tc2dfdjIgbXNnX3YyO1xuK1x0fSBzbmFwc2hvdDtcbitcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbWlzc190b2tlbiA9IE5VTEw7XG4rXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICptaXNzX3ZxID0gTlVMTDtcbitcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSA9IE5VTEw7XG4rXHR1NjQgbWlzc19zZXEgPSAwO1xuIFx0c3NpemVfdCByZXQgPSAwO1xuIFx0dW5zaWduZWQgc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgdmhvc3RfbXNnKTtcbitcdGJvb2wgc2hvcnRfYnVmZmVyID0gZmFsc2U7XG4rXHRib29sIHdha2UgPSBmYWxzZTtcbiBcbiBcdGlmIChpb3ZfaXRlcl9jb3VudCh0bykgXHUwMDNjIHNpemUpXG4gXHRcdHJldHVybiAwO1xuQEAgLTE3NjcsOCArMTg1NSwzNiBAQCBzc2l6ZV90IHZob3N0X2Nocl9yZWFkX2l0ZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3QgaW92X2l0ZXIgKnRvLFxuIFx0XHRcdHByZXBhcmVfdG9fd2FpdChcdTAwMjZkZXYtXHUwMDNld2FpdCwgXHUwMDI2d2FpdCxcbiBcdFx0XHRcdFx0VEFTS19JTlRFUlJVUFRJQkxFKTtcbiBcbi1cdFx0bm9kZSA9IHZob3N0X2RlcXVldWVfbXNnKGRldiwgXHUwMDI2ZGV2LVx1MDAzZXJlYWRfbGlzdCk7XG4tXHRcdGlmIChub2RlKVxuK1x0XHRzcGluX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuK1x0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXJlYWRfbGlzdCkpIHtcbitcdFx0XHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKmZpcnN0O1xuK1xuK1x0XHRcdGZpcnN0ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZkZXYtXHUwMDNlcmVhZF9saXN0LFxuK1x0XHRcdFx0XHRcdCBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUsIG5vZGUpO1xuK1x0XHRcdGlmIChmaXJzdC1cdTAwM2V2cS1cdTAwM2Vpb3RsYl9taXNzX25vZGUgPT0gZmlyc3QpIHtcbitcdFx0XHRcdHNpemUgPSBmaXJzdC1cdTAwM2Vtc2cudHlwZSA9PSBWSE9TVF9JT1RMQl9NU0dfVjIgP1xuK1x0XHRcdFx0ICAgICAgIHNpemVvZihmaXJzdC1cdTAwM2Vtc2dfdjIpIDogc2l6ZW9mKGZpcnN0LVx1MDAzZW1zZyk7XG4rXHRcdFx0XHRpZiAoaW92X2l0ZXJfY291bnQodG8pIFx1MDAzYyBzaXplKSB7XG4rXHRcdFx0XHRcdHNob3J0X2J1ZmZlciA9IHRydWU7XG4rXHRcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0XHRtZW1jcHkoXHUwMDI2c25hcHNob3QubXNnX3YyLCBcdTAwMjZmaXJzdC1cdTAwM2Vtc2dfdjIsXG4rXHRcdFx0XHRcdCAgICAgICBzaXplKTtcbitcdFx0XHRcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2Zmlyc3QtXHUwMDNlbm9kZSxcbitcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2ZGV2LVx1MDAzZXBlbmRpbmdfbGlzdCk7XG4rXHRcdFx0XHRcdGZpcnN0LVx1MDAzZXZxLVx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgPVxuK1x0XHRcdFx0XHRcdFZIT1NUX0lPVExCX01JU1NfUkVBRElORztcbitcdFx0XHRcdFx0bWlzc192cSA9IGZpcnN0LVx1MDAzZXZxO1xuK1x0XHRcdFx0XHRtaXNzX3Rva2VuID0gZmlyc3Q7XG4rXHRcdFx0XHRcdG1pc3Nfc2VxID0gZmlyc3QtXHUwMDNldnEtXHUwMDNlaW90bGJfbWlzc19zZXE7XG4rXHRcdFx0XHR9XG4rXHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2Zmlyc3QtXHUwMDNlbm9kZSk7XG4rXHRcdFx0XHRub2RlID0gZmlyc3Q7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmRldi1cdTAwM2Vpb3RsYl9sb2NrKTtcbitcbitcdFx0aWYgKG5vZGUgfHwgbWlzc192cSB8fCBzaG9ydF9idWZmZXIpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGlmIChub2Jsb2NrKSB7XG4gXHRcdFx0cmV0ID0gLUVBR0FJTjtcbkBAIC0xNzg5LDYgKzE5MDUsMzQgQEAgc3NpemVfdCB2aG9zdF9jaHJfcmVhZF9pdGVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IGlvdl9pdGVyICp0byxcbiBcdGlmICghbm9ibG9jaylcbiBcdFx0ZmluaXNoX3dhaXQoXHUwMDI2ZGV2LVx1MDAzZXdhaXQsIFx1MDAyNndhaXQpO1xuIFxuK1x0aWYgKHNob3J0X2J1ZmZlcilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAobWlzc192cSkge1xuK1x0XHRib29sIGNvcGllZCA9IGNvcHlfdG9faXRlcl9mdWxsKFx1MDAyNnNuYXBzaG90Lm1zZ192Miwgc2l6ZSwgdG8pO1xuK1xuK1x0XHRzcGluX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuK1x0XHRub2RlID0gbWlzc192cS1cdTAwM2Vpb3RsYl9taXNzX25vZGU7XG4rXHRcdGlmIChub2RlID09IG1pc3NfdG9rZW4gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBtaXNzX3ZxLVx1MDAzZWlvdGxiX21pc3Nfc2VxID09IG1pc3Nfc2VxIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgbWlzc192cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlID09IFZIT1NUX0lPVExCX01JU1NfUkVBRElORykge1xuK1x0XHRcdGlmIChjb3BpZWQpIHtcbitcdFx0XHRcdG1pc3NfdnEtXHUwMDNlaW90bGJfbWlzc19zdGF0ZSA9XG4rXHRcdFx0XHRcdFZIT1NUX0lPVExCX01JU1NfUEVORElORztcbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2bm9kZS1cdTAwM2Vub2RlLCBcdTAwMjZkZXYtXHUwMDNlcmVhZF9saXN0KTtcbitcdFx0XHRcdG1pc3NfdnEtXHUwMDNlaW90bGJfbWlzc19zdGF0ZSA9IFZIT1NUX0lPVExCX01JU1NfUkVBRDtcbitcdFx0XHRcdHdha2UgPSB0cnVlO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0XHRzcGluX3VubG9jayhcdTAwMjZkZXYtXHUwMDNlaW90bGJfbG9jayk7XG4rXG4rXHRcdGlmICh3YWtlKVxuK1x0XHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKFx1MDAyNmRldi1cdTAwM2V3YWl0LFxuK1x0XHRcdFx0XHRcdCAgIEVQT0xMSU4gfCBFUE9MTFJETk9STSk7XG4rXHRcdHJldHVybiBjb3BpZWQgPyBzaXplIDogLUVGQVVMVDtcbitcdH1cbitcbiBcdGlmIChub2RlKSB7XG4gXHRcdHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1zZztcbiBcdFx0dm9pZCAqc3RhcnQgPSBcdTAwMjZub2RlLVx1MDAzZW1zZztcbkBAIC0xODE5LDI5ICsxOTYzLDY5IEBAIHNzaXplX3Qgdmhvc3RfY2hyX3JlYWRfaXRlcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCBpb3ZfaXRlciAqdG8sXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2Nocl9yZWFkX2l0ZXIpO1xuIFxuK3N0YXRpYyBib29sIHZob3N0X2lvdGxiX21pc3NfY29hbGVzY2Uoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIGJvb2wgdjIsXG4rXHRcdFx0XHQgICAgICB1NjQgaW92YSwgaW50IGFjY2VzcywgYm9vbCAqd2FrZSlcbit7XG4rXHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUgPSB2cS1cdTAwM2Vpb3RsYl9taXNzX25vZGU7XG4rXHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2c7XG4rXHR1MzIgdHlwZSA9IHYyID8gVkhPU1RfSU9UTEJfTVNHX1YyIDogVkhPU1RfSU9UTEJfTVNHO1xuK1x0Ym9vbCBzYW1lO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2cS1cdTAwM2VkZXYtXHUwMDNlaW90bGJfbG9jayk7XG4rXG4rXHRpZiAoIW5vZGUpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG1zZyA9IHZob3N0X2dldF9pb3RsYl9tc2cobm9kZSk7XG4rXHRzYW1lID0gbm9kZS1cdTAwM2Vtc2cudHlwZSA9PSB0eXBlIFx1MDAyNlx1MDAyNiBtc2ctXHUwMDNldHlwZSA9PSBWSE9TVF9JT1RMQl9NSVNTIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIG1zZy1cdTAwM2Vpb3ZhID09IGlvdmEgXHUwMDI2XHUwMDI2IG1zZy1cdTAwM2VwZXJtID09IGFjY2VzcztcbitcdGlmIChzYW1lIFx1MDAyNlx1MDAyNiB2cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlICE9IFZIT1NUX0lPVExCX01JU1NfUkVBRElORylcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRpZiAoIXNhbWUpXG4rXHRcdHZob3N0X3NldF9pb3RsYl9taXNzKG5vZGUsIHYyLCBpb3ZhLCBhY2Nlc3MpO1xuK1x0dnEtXHUwMDNlaW90bGJfbWlzc19zZXErKztcbitcdGlmICh2cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlICE9IFZIT1NUX0lPVExCX01JU1NfUkVBRCkge1xuK1x0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZub2RlLVx1MDAzZW5vZGUsIFx1MDAyNnZxLVx1MDAzZWRldi1cdTAwM2VyZWFkX2xpc3QpO1xuK1x0XHR2cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlID0gVkhPU1RfSU9UTEJfTUlTU19SRUFEO1xuK1x0XHQqd2FrZSA9IHRydWU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gc3RhdGljIGludCB2aG9zdF9pb3RsYl9taXNzKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCB1NjQgaW92YSwgaW50IGFjY2VzcylcbiB7XG4gXHRzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYgPSB2cS1cdTAwM2VkZXY7XG4gXHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGU7XG4tXHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2c7XG4gXHRib29sIHYyID0gdmhvc3RfYmFja2VuZF9oYXNfZmVhdHVyZSh2cSwgVkhPU1RfQkFDS0VORF9GX0lPVExCX01TR19WMik7XG4rXHRib29sIHdha2UgPSBmYWxzZTtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuK1xuK1x0c3Bpbl9sb2NrKFx1MDAyNmRldi1cdTAwM2Vpb3RsYl9sb2NrKTtcbitcdGlmICh2aG9zdF9pb3RsYl9taXNzX2NvYWxlc2NlKHZxLCB2MiwgaW92YSwgYWNjZXNzLCBcdTAwMjZ3YWtlKSkge1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZkZXYtXHUwMDNlaW90bGJfbG9jayk7XG4rXHRcdGlmICh3YWtlKVxuK1x0XHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKFx1MDAyNmRldi1cdTAwM2V3YWl0LFxuK1x0XHRcdFx0XHRcdCAgIEVQT0xMSU4gfCBFUE9MTFJETk9STSk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1x0c3Bpbl91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuIFxuIFx0bm9kZSA9IHZob3N0X25ld19tc2codnEsIHYyID8gVkhPU1RfSU9UTEJfTVNHX1YyIDogVkhPU1RfSU9UTEJfTVNHKTtcbiBcdGlmICghbm9kZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR2aG9zdF9zZXRfaW90bGJfbWlzcyhub2RlLCB2MiwgaW92YSwgYWNjZXNzKTtcbiBcbi1cdGlmICh2Mikge1xuLVx0XHRub2RlLVx1MDAzZW1zZ192Mi50eXBlID0gVkhPU1RfSU9UTEJfTVNHX1YyO1xuLVx0XHRtc2cgPSBcdTAwMjZub2RlLVx1MDAzZW1zZ192Mi5pb3RsYjtcbi1cdH0gZWxzZSB7XG4tXHRcdG1zZyA9IFx1MDAyNm5vZGUtXHUwMDNlbXNnLmlvdGxiO1xuLVx0fVxuLVxuLVx0bXNnLVx1MDAzZXR5cGUgPSBWSE9TVF9JT1RMQl9NSVNTO1xuLVx0bXNnLVx1MDAzZWlvdmEgPSBpb3ZhO1xuLVx0bXNnLVx1MDAzZXBlcm0gPSBhY2Nlc3M7XG4rXHRzcGluX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuK1x0dnEtXHUwMDNlaW90bGJfbWlzc19ub2RlID0gbm9kZTtcbitcdHZxLVx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgPSBWSE9TVF9JT1RMQl9NSVNTX1JFQUQ7XG4rXHR2cS1cdTAwM2Vpb3RsYl9taXNzX3NlcSsrO1xuK1x0bGlzdF9hZGRfdGFpbChcdTAwMjZub2RlLVx1MDAzZW5vZGUsIFx1MDAyNmRldi1cdTAwM2VyZWFkX2xpc3QpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuIFxuLVx0dmhvc3RfZW5xdWV1ZV9tc2coZGV2LCBcdTAwMjZkZXYtXHUwMDNlcmVhZF9saXN0LCBub2RlKTtcbitcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKFx1MDAyNmRldi1cdTAwM2V3YWl0LCBFUE9MTElOIHwgRVBPTExSRE5PUk0pO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTIyNzAsMjcgKzI0NTQsNTkgQEAgbG9uZyB2aG9zdF92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfZGV2ICpkLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHZvaWQgX191c2VyICphcmdcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfdnJpbmdfaW9jdGwpO1xuIFxuK3N0YXRpYyBib29sIHZob3N0X3JldHJ5X2lvdGxiX21pc3NlcyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkKVxuK3tcbitcdGJvb2wgd2FrZSA9IGZhbHNlO1xuK1x0aW50IGk7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmQtXHUwMDNlaW90bGJfbG9jayk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkLVx1MDAzZW52cXM7ICsraSkge1xuK1x0XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGQtXHUwMDNldnFzW2ldO1xuK1x0XHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUgPSB2cS1cdTAwM2Vpb3RsYl9taXNzX25vZGU7XG4rXG4rXHRcdGlmICghbm9kZSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0dnEtXHUwMDNlaW90bGJfbWlzc19zZXErKztcbitcdFx0aWYgKHZxLVx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgIT0gVkhPU1RfSU9UTEJfTUlTU19SRUFEKVxuK1x0XHRcdGxpc3RfbW92ZV90YWlsKFx1MDAyNm5vZGUtXHUwMDNlbm9kZSwgXHUwMDI2ZC1cdTAwM2VyZWFkX2xpc3QpO1xuK1x0XHR2cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlID0gVkhPU1RfSU9UTEJfTUlTU19SRUFEO1xuK1x0XHR3YWtlID0gdHJ1ZTtcbitcdH1cbitcbitcdHJldHVybiB3YWtlO1xuK31cbitcbiBpbnQgdmhvc3RfaW5pdF9kZXZpY2VfaW90bGIoc3RydWN0IHZob3N0X2RldiAqZClcbiB7XG4gXHRzdHJ1Y3Qgdmhvc3RfaW90bGIgKm5pb3RsYiwgKm9pb3RsYjtcbitcdGJvb2wgd2FrZTtcbiBcdGludCBpO1xuIFxuIFx0bmlvdGxiID0gaW90bGJfYWxsb2MoKTtcbiBcdGlmICghbmlvdGxiKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbitcdHZob3N0X2Rldl9sb2NrX3ZxcyhkKTtcbiBcdG9pb3RsYiA9IGQtXHUwMDNlaW90bGI7XG4gXHRkLVx1MDAzZWlvdGxiID0gbmlvdGxiO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZC1cdTAwM2VudnFzOyArK2kpIHtcbiBcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBkLVx1MDAzZXZxc1tpXTtcbiBcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gXHRcdHZxLVx1MDAzZWlvdGxiID0gbmlvdGxiO1xuIFx0XHRfX3Zob3N0X3ZxX21ldGFfcmVzZXQodnEpO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuIFx0fVxuIFxuK1x0c3Bpbl9sb2NrKFx1MDAyNmQtXHUwMDNlaW90bGJfbG9jayk7XG4rXHR3YWtlID0gdmhvc3RfcmV0cnlfaW90bGJfbWlzc2VzKGQpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2ZC1cdTAwM2Vpb3RsYl9sb2NrKTtcbitcdHZob3N0X2Rldl91bmxvY2tfdnFzKGQpO1xuK1xuK1x0aWYgKHdha2UpXG4rXHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKFx1MDAyNmQtXHUwMDNld2FpdCxcbitcdFx0XHRcdFx0ICAgRVBPTExJTiB8IEVQT0xMUkROT1JNKTtcbiBcdHZob3N0X2lvdGxiX2ZyZWUob2lvdGxiKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTMzMDAsNyArMzUxNiw4IEBAIHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqdmhvc3RfZGVxdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LFxuIFx0aWYgKCFsaXN0X2VtcHR5KGhlYWQpKSB7XG4gXHRcdG5vZGUgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCB2aG9zdF9tc2dfbm9kZSxcbiBcdFx0XHRcdFx0bm9kZSk7XG4tXHRcdGxpc3RfZGVsKFx1MDAyNm5vZGUtXHUwMDNlbm9kZSk7XG4rXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2bm9kZS1cdTAwM2Vub2RlKTtcbitcdFx0dmhvc3RfdW50cmFja19pb3RsYl9taXNzKG5vZGUpO1xuIFx0fVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaCBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaFxuaW5kZXggMDE5MmFkZTZlNzQ5MS4uNTBmY2NjODVkNTk0MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaFxuKysrIGIvZHJpdmVycy92aG9zdC92aG9zdC5oXG5AQCAtMjksNiArMjksNyBAQCBzdHJ1Y3Qgdmhvc3Rfd29yayB7XG4gXG4gc3RydWN0IHZob3N0X3dvcmtlcjtcbiBzdHJ1Y3Qgdmhvc3RfZGV2O1xuK3N0cnVjdCB2aG9zdF9tc2dfbm9kZTtcbiBcbiBzdHJ1Y3Qgdmhvc3Rfd29ya2VyX29wcyB7XG4gXHRpbnQgKCpjcmVhdGUpKHN0cnVjdCB2aG9zdF93b3JrZXIgKndvcmtlciwgc3RydWN0IHZob3N0X2RldiAqZGV2LFxuQEAgLTE2Myw3ICsxNjQsMTIgQEAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSB7XG4gXHQvKiBSaW5nIGVuZGlhbm5lc3MgcmVxdWVzdGVkIGJ5IHVzZXJzcGFjZSBmb3IgY3Jvc3MtZW5kaWFuIHN1cHBvcnQuICovXG4gXHRib29sIHVzZXJfYmU7XG4gI2VuZGlmXG4rXHQvKiBQcm90ZWN0ZWQgYnkgZGV2LVx1MDAzZWlvdGxiX2xvY2suICovXG4rXHR1OCBpb3RsYl9taXNzX3N0YXRlO1xuIFx0dTMyIGJ1c3lsb29wX3RpbWVvdXQ7XG4rXHQvKiBQcm90ZWN0ZWQgYnkgZGV2LVx1MDAzZWlvdGxiX2xvY2suICovXG4rXHR1NjQgaW90bGJfbWlzc19zZXE7XG4rXHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKmlvdGxiX21pc3Nfbm9kZTtcbiB9O1xuIFxuIHN0cnVjdCB2aG9zdF9tc2dfbm9kZSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowODo1OS45MDkwOTQ0MjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjI5NjA3OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVmhvc3QgSU9UTEIgTWlzcyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgaG93IElPVExCIG1pc3NlcyBhcmUgaGFuZGxlZCB3aXRoaW4gdmhvc3QsIHNwZWNpZmljYWxseSBpbiBgZHJpdmVycy92aG9zdC92aG9zdC5jYCBhbmQgYGRyaXZlcnMvdmhvc3Qvdmhvc3QuaGAuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgdGhlIGludHJvZHVjdGlvbiBvZiBgdmhvc3RfaW90bGJfbWlzc19zdGF0ZWAsIHdoaWNoIGlzIGRlc2lnbmVkIHRvIHRyYWNrIHRoZXNlIG1pc3NlcyBvbiBhIHBlci12aXJ0cXVldWUgYmFzaXMuIFRoZSBnb2FsLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRvIGNvYWxlc2NlIHRoZSBtaXNzIG1lc3NhZ2VzIGFuZCBwcmV2ZW50IHRoZSB1c2Vyc3BhY2UgZnJvbSBnZXR0aW5nIGludW5kYXRlZCB3aXRoIHJlZHVuZGFudCBub3RpZmljYXRpb25zLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBmdXp6YWJpbGl0eS4gR2l2ZW4gdGhhdCB2aG9zdCBpcyBhIGZ1bmRhbWVudGFsIHN1YnN5c3RlbSB1bmRlcnBpbm5pbmcgS1ZNLCBRRU1VLCBhbmQgb3RoZXIgdmlydHVhbGl6YXRpb24gdG9vbHMsIGl0J3MgZGVmaW5pdGVseSBhIHdvcnRod2hpbGUgdGFyZ2V0LiBUaGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGNyaXRpY2FsIGZ1bmN0aW9uczogYHZob3N0X2Nocl9yZWFkX2l0ZXJgLCBgdmhvc3RfaW90bGJfbWlzc2AsIGB2aG9zdF9pbml0X2RldmljZV9pb3RsYmAsIGFuZCBgdmhvc3RfY2xlYXJfbXNnYCwgYW1vbmcgb3RoZXJzLiBJIGtub3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhlIGAvZGV2L3Zob3N0LW5ldGAsIGAvZGV2L3Zob3N0LXZzb2NrYCBhbmQgc2ltaWxhciBjaGFyYWN0ZXIgZGV2aWNlcywgd2hpY2ggbWFrZXMgdGhlbSBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBUaGFua2Z1bGx5LCBTeXprYWxsZXIgYWxyZWFkeSBoYXMgdmhvc3QgZGVzY3JpcHRpb25zLCBzaW1wbGlmeWluZyB0aGUgZnV6emluZyBzZXR1cC4gVGhlIGNoYW5nZXMgaGVyZSBhbHNvIHNlZW0gZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50IGFuZCBub3QgdHJpdmlhbC5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBmb3IgZnV6emluZy4gYHZob3N0X2Nocl9yZWFkX2l0ZXJgIGlzIHRoZSB2aG9zdCBjaGFyYWN0ZXIgZGV2aWNlIHJlYWQgaGFuZGxlci4gYHZob3N0X2lvdGxiX21pc3NgIGlzIGNsZWFybHkgdHJpZ2dlcmVkIHdoZW4gYW4gSU9UTEIgbWlzcyBvY2N1cnMuIGB2aG9zdF9pbml0X2RldmljZV9pb3RsYmAgc2VlbXMgdG8gYmUgY2FsbGVkIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24sIHBvc3NpYmx5IHZpYSBgVkhPU1RfU0VUX0JBQ0tFTkRfRkVBVFVSRVNgIG9yIGEgcmVsYXRlZCBpb2N0bC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGNhbGwgZmxvdyB0byBjb25maXJtIGl0J3MgcmVhY2hlZCBpbiB0aGUgcmlnaHQgcGxhY2VzLiBBbmQsIGZpbmFsbHksIGB2aG9zdF9jbGVhcl9tc2dgIGFwcGVhcnMgdG8gYmUgcmVsYXRlZCB0byBkZXZpY2Ugc2h1dGRvd24gb3IgcmVzZXQuXG5cbkknbSBnb2luZyB0byBzdGFydCBieSBzZWFyY2hpbmcgdGhlIGNvZGUgZm9yIGNhbGxzIHRvIGB2aG9zdF9pbml0X2RldmljZV9pb3RsYmAgdG8gdmVyaWZ5IHdoZXJlIGl0J3MgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc5OCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA5OjA2LjUzODcwNDQyMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU3MTYxMzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X2luaXRfZGV2aWNlX2lvdGxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmM9MTY2Nj1zdGF0aWMgaW50IHZob3N0X25ldF9zZXRfZmVhdHVyZXMoc3RydWN0IHZob3N0X25ldCAqbiwgY29uc3QgdTY0ICpmZWF0dXJlcylcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTY5Ni1cXHRpZiAodmlydGlvX2ZlYXR1cmVzX3Rlc3RfYml0KGZlYXR1cmVzLCBWSVJUSU9fRl9BQ0NFU1NfUExBVEZPUk0pKSB7XFxuZHJpdmVycy92aG9zdC9uZXQuYzoxNjk3OlxcdFxcdGlmICh2aG9zdF9pbml0X2RldmljZV9pb3RsYihcXHUwMDI2bi1cXHUwMDNlZGV2KSlcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE2OTgtXFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jPTI0NTc9c3RhdGljIGJvb2wgdmhvc3RfcmV0cnlfaW90bGJfbWlzc2VzKHN0cnVjdCB2aG9zdF9kZXYgKmQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjQ4MC1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MjQ4MTppbnQgdmhvc3RfaW5pdF9kZXZpY2VfaW90bGIoc3RydWN0IHZob3N0X2RldiAqZClcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjQ4Mi17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjUxMy19XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjI1MTQ6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfaW5pdF9kZXZpY2VfaW90bGIpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yNTE1LVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5oPTI4ND1zc2l6ZV90IHZob3N0X2Nocl93cml0ZV9pdGVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjg1LVxcdFxcdFxcdCAgICAgc3RydWN0IGlvdl9pdGVyICpmcm9tKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg6Mjg2OmludCB2aG9zdF9pbml0X2RldmljZV9pb3RsYihzdHJ1Y3Qgdmhvc3RfZGV2ICpkKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjg3LVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTg1ND1zdGF0aWMgaW50IHZob3N0X3Zzb2NrX3NldF9mZWF0dXJlcyhzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLCB1NjQgZmVhdHVyZXMpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODY4LVxcdGlmICgoZmVhdHVyZXMgXFx1MDAyNiAoMVVMTCBcXHUwMDNjXFx1MDAzYyBWSVJUSU9fRl9BQ0NFU1NfUExBVEZPUk0pKSkge1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4Njk6XFx0XFx0aWYgKHZob3N0X2luaXRfZGV2aWNlX2lvdGxiKFxcdTAwMjZ2c29jay1cXHUwMDNlZGV2KSlcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODcwLVxcdFxcdFxcdGdvdG8gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowOTowNy45OTU4Njk4NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NjU0MjQ3NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBWaG9zdCBJT1RMQiBNaXNzZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyB0aGUgdmhvc3QgaW5mcmFzdHJ1Y3R1cmUgaGFuZGxlcyBtZW1vcnkgYWNjZXNzZXMsIHNwZWNpZmljYWxseSB3aGVyZSB0aGluZ3MgbWlnaHQgYmUgZ29pbmcgd3JvbmcuIEl0IHNlZW1zIGxpa2UgYHZob3N0X2luaXRfZGV2aWNlX2lvdGxiYCBpcyBhIGtleSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gSSBzZWUgaXQncyBjYWxsZWQgZnJvbSBgdmhvc3RfbmV0X3NldF9mZWF0dXJlc2AgYW5kIGB2aG9zdF92c29ja19zZXRfZmVhdHVyZXNgLCBpbmRpY2F0aW5nIGl0J3MgaW52b2x2ZWQgaW4gc2V0dGluZyB1cCB0aGUgSU9UTEIgKElucHV0L091dHB1dCBUcmFuc2xhdGlvbiBMb29rYXNpZGUgQnVmZmVyKSBmb3IgbmV0d29yayBhbmQgdnNvY2sgdmhvc3QgZGV2aWNlcy4gVGhhdCBtYWtlcyBzZW5zZSwgdGhvc2UgYXJlIGNvbW1vbiBlbnRyeSBwb2ludHMuXG5cbk5vdywgYHZob3N0X2Nocl9yZWFkX2l0ZXJgIGlzIHRoZSByZWFkIGhhbmRsZXIgZm9yIHZob3N0IGRldmljZXMuIFRoYXQncyBnb29kIHRvIGtlZXAgaW4gbWluZCwgYXMgYW55IHJlYWRzIHdpbGwgbGlrZWx5IGZ1bm5lbCB0aHJvdWdoIHRoZXJlLlxuXG5UaGUgcmVhbCBwb2ludCBvZiBpbnRlcmVzdCwgdGhvdWdoLCBpcyBgdmhvc3RfaW90bGJfbWlzc2AuIFRoaXMgYXBwZWFycyB0byBiZSBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQncyBwcm9iYWJseSBub3QgaW50ZW5kZWQgZm9yIGRpcmVjdCB1c2UgZWxzZXdoZXJlLiBNeSBzdXNwaWNpb24gaXMsIGl0J3MgdHJpZ2dlcmVkIHdoZW4gdmhvc3QgYXR0ZW1wdHMgdG8gYWNjZXNzIG1lbW9yeSBhbmQgdGhlIGxvb2t1cCBpbiB0aGUgSU9UTEIgZmFpbHMuIFRoaXMgbWVhbnMgYSB0cmFuc2xhdGlvbiBpcyBuZWVkZWQuIEdpdmVuIHRoYXQsIEknbSBnb2luZyB0byBmb2N1cyBteSBlZmZvcnRzIG9uIHVuZGVyc3RhbmRpbmcgd2hhdCBsZWFkcyB0byB0aGUgZXhlY3V0aW9uIG9mIGB2aG9zdF9pb3RsYl9taXNzYC4gSXQgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgaW50ZXJlc3RpbmcgYW5kIHdpbGwgYmUgdGhlIHRhcmdldCBvZiBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTkwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA5OjExLjk2MTI5NzAwNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg3NzQ3MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X2lvdGxiX21pc3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92aG9zdC5jLTM2LVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozNzplbnVtIHZob3N0X2lvdGxiX21pc3Nfc3RhdGUge1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zOC1cXHRWSE9TVF9JT1RMQl9NSVNTX05PTkUsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9MTk2ND1FWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9jaHJfcmVhZF9pdGVyKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTk2NS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MTk2NjpzdGF0aWMgYm9vbCB2aG9zdF9pb3RsYl9taXNzX2NvYWxlc2NlKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBib29sIHYyLFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0xOTY3LVxcdFxcdFxcdFxcdCAgICAgIHU2NCBpb3ZhLCBpbnQgYWNjZXNzLCBib29sICp3YWtlKVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTE5OTYtXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjE5OTc6c3RhdGljIGludCB2aG9zdF9pb3RsYl9taXNzKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCB1NjQgaW92YSwgaW50IGFjY2VzcylcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTk5OC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjAwNi1cXHRzcGluX2xvY2soXFx1MDAyNmRldi1cXHUwMDNlaW90bGJfbG9jayk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjIwMDc6XFx0aWYgKHZob3N0X2lvdGxiX21pc3NfY29hbGVzY2UodnEsIHYyLCBpb3ZhLCBhY2Nlc3MsIFxcdTAwMjZ3YWtlKSkge1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yMDA4LVxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWlvdGxiX2xvY2spO1xcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jPTIwNjA9c3RhdGljIGJvb2wgaW90bGJfYWNjZXNzX29rKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTIwNzItXFx0XFx0aWYgKG1hcCA9PSBOVUxMIHx8IG1hcC1cXHUwMDNlc3RhcnQgXFx1MDAzZSBhZGRyKSB7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjIwNzM6XFx0XFx0XFx0dmhvc3RfaW90bGJfbWlzcyh2cSwgYWRkciwgYWNjZXNzKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjA3NC1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9Mjg1Nz1zdGF0aWMgaW50IHRyYW5zbGF0ZV9kZXNjKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCB1NjQgYWRkciwgdTMyIGxlbixcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yODk3LVxcdGlmIChyZXQgPT0gLUVBR0FJTilcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6Mjg5ODpcXHRcXHR2aG9zdF9pb3RsYl9taXNzKHZxLCBhZGRyLCBhY2Nlc3MpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yODk5LVxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA5OjEzLjU0OTA1MDMzNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMTA5MzgxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFZob3N0IElPVExCIGFuZCBSZWFkIEhhbmRsZXJzKipcblxuT2theSwgc28gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhpcyB2aG9zdCBjb2RlLiBJdCBzZWVtcyBsaWtlIGB2aG9zdF9pb3RsYl9taXNzYCBpcyBhIHN0YXRpYyB2YXJpYWJsZSwgd2hpY2ggbWVhbnMgaXQncyBub3QgZ29pbmcgdG8gYmUgaGVscGZ1bCBhcyBhIHN5bWJvbCB0byBmb2N1cyBvbi4gVGhhdCdzIGEgZGVhZCBlbmQsIGF0IGxlYXN0IGZvciB0aGlzIHBhcnRpY3VsYXIgYXBwcm9hY2guXG5cbkhvd2V2ZXIsIGB2aG9zdF9jaHJfcmVhZF9pdGVyYCBpcyBleHBvcnRlZCwgYW5kIGl0J3MgZmxhZ2dlZCBhcyB0aGUgcmVhZCBoYW5kbGVyLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IGl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgSSB3YW50IHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuIEl0J3MgYSBrZXkgZnVuY3Rpb24gaW4gdGhpcyBwYXJ0IG9mIHRoZSBhcmNoaXRlY3R1cmUuIEFuZCBoZXksIGB2aG9zdF9pbml0X2RldmljZV9pb3RsYmAgaXMgYWxzbyBleHBvcnRlZCwgd2hpY2ggc2VlbXMgcmVsYXRlZC5cblxuTGV0J3MgZHJpbGwgZG93biBhbmQgdHJhY2sgZG93biB3aGVyZSBgdmhvc3RfY2hyX3JlYWRfaXRlcmAgaXMgYmVpbmcgdXNlZC4gVGhhdCdsbCBiZSB0aGUgYmVzdCB3YXkgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBwcm9jZXNzLiBUaW1lIHRvIHN0YXJ0IHRoZSBodW50IVxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjE3LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDk6MTcuNTU5OTkwNDk2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTExMTk2NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfY2hyX3JlYWRfaXRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jPTE4Mzg9c3RhdGljIHNzaXplX3Qgdmhvc3RfbmV0X2Nocl9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODQ0LVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTg0NTpcXHRyZXR1cm4gdmhvc3RfY2hyX3JlYWRfaXRlcihkZXYsIHRvLCBub2Jsb2NrKTtcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4NDYtfVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jPTE4MzE9RVhQT1JUX1NZTUJPTCh2aG9zdF9jaHJfcG9sbCk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTE4MzItXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjE4MzM6c3NpemVfdCB2aG9zdF9jaHJfcmVhZF9pdGVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IGlvdl9pdGVyICp0byxcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTgzNC1cXHRcXHRcXHQgICAgaW50IG5vYmxvY2spXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTk2My19XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjE5NjQ6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfY2hyX3JlYWRfaXRlcik7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTE5NjUtXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg9MjgwPV9fcG9sbF90IHZob3N0X2Nocl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXFxuZHJpdmVycy92aG9zdC92aG9zdC5oLTI4MS1cXHRcXHRcXHQgICAgcG9sbF90YWJsZSAqd2FpdCk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5oOjI4Mjpzc2l6ZV90IHZob3N0X2Nocl9yZWFkX2l0ZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3QgaW92X2l0ZXIgKnRvLFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC0yODMtXFx0XFx0XFx0ICAgIGludCBub2Jsb2NrKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz05NDQ9c3RhdGljIHNzaXplX3Qgdmhvc3RfdnNvY2tfY2hyX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTUwLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5NTE6XFx0cmV0dXJuIHZob3N0X2Nocl9yZWFkX2l0ZXIoZGV2LCB0bywgbm9ibG9jayk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTk1Mi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA5OjE4Ljk1MTExNTcwOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTU0NzYyMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgdGhpbmtpbmcgcmlnaHQgbm93IGlzIGNlbnRlcmVkIG9uIGEgc3BlY2lmaWMgYXJlYSB3aXRoaW4gdGhlIGNvZGUuXG5cbioqRGl2aW5nIGludG8gdGhlIFZob3N0IENvZGUqKlxuXG5SaWdodCwgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUgYHZob3N0X2Nocl9yZWFkX2l0ZXJgIHN5bWJvbDsgaXQgc2VlbXMgbGlrZSBhIHVzZWZ1bCBlbnRyeSBwb2ludCBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uLiBCdXQgSSdtIGFsc28gY3VyaW91cyBhYm91dCBhbm90aGVyIGZ1bmN0aW9uIHRoYXQncyBwb3RlbnRpYWxseSByZWxhdGVkLCBgdmhvc3RfaW5pdF9kZXZpY2VfaW90bGJgLiBBaCwgSSBzZWUsIGl0IGdldHMgaW52b2tlZCB3aGVuIGBWSVJUSU9fRl9BQ0NFU1NfUExBVEZPUk1gIGlzIGVuYWJsZWQuIFRoYXQgY291bGQgYmUgYSBjbHVlIHdvcnRoIGZvbGxvd2luZywgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LiBPa2F5LCBuZXh0IHN0ZXAsIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGB2aG9zdF9jbGVhcl9tc2dgIHRvIHNlZSBob3cgdGhhdCBpbnRlcmFjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDU5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDk6MjIuNTY2NTk0Mjc4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQzMjk4MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X2NsZWFyX21zZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jPTE1MzU9c3RhdGljIGxvbmcgdmhvc3RfbmV0X3NldF9iYWNrZW5kKHN0cnVjdCB2aG9zdF9uZXQgKm4sIHVuc2lnbmVkIGluZGV4LCBpbnQgZmQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE1NTYtXFx0aWYgKGZkID09IC0xKVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTU1NzpcXHRcXHR2aG9zdF9jbGVhcl9tc2coXFx1MDAyNm4tXFx1MDAzZWRldik7XFxuZHJpdmVycy92aG9zdC9uZXQuYy0xNTU4LVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jPTExOTA9c3RhdGljIHZvaWQgdmhvc3RfdW50cmFja19pb3RsYl9taXNzKHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSlcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0xMjAzLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoxMjA0OnZvaWQgdmhvc3RfY2xlYXJfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTIwNS17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTIyMy19XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjEyMjQ6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfY2xlYXJfbXNnKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTIyNS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9MTIyNj12b2lkIHZob3N0X2Rldl9jbGVhbnVwKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0xMjQ3LVxcdGRldi1cXHUwMDNlaW90bGIgPSBOVUxMO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoxMjQ4OlxcdHZob3N0X2NsZWFyX21zZyhkZXYpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0xMjQ5LVxcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKFxcdTAwMjZkZXYtXFx1MDAzZXdhaXQsIEVQT0xMSU4gfCBFUE9MTFJETk9STSk7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg9MjMzPWJvb2wgdmhvc3RfbG9nX2FjY2Vzc19vayhzdHJ1Y3Qgdmhvc3RfZGV2ICopO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaDoyMzQ6dm9pZCB2aG9zdF9jbGVhcl9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2KTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjM1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowOToyMy45MDk5MDI1MzVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM5MjQ0MjA1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBtaW5kIGlzIGp1bXBpbmcgYXJvdW5kIGEgYml0IGhlcmUsIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhpcy5cblxuKipGb2N1c2luZyBvbiBQb3RlbnRpYWwgSG90c3BvdHMgaW4gdGhlIHZob3N0IENvZGUqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGdvb2QgcGxhY2VzIHRvIGZvY3VzIG15IGF0dGVudGlvbiwgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBhcmVhcyB0aGF0IGFyZSBsaWtlbHkgdG8gYmUgc2VlaW5nIGEgbG90IG9mIGFjdGl2aXR5LiBgdmhvc3RfY2xlYXJfbXNnYC4uLiB0aGF0J3MgYSBkZWNlbnQgY2FuZGlkYXRlLCBzZWVtcyBsaWtlIGl0IGNvdWxkIGJlIGEgZm9jdXMgc3ltYm9sLiBCdXQgaG9sZCBvbiwgd2hhdCBhYm91dCBgdmhvc3RfaW90bGJfbm90aWZ5X3ZxYD8gSG1tLCBpdCdzIHN0YXRpYywgc28gdGhhdCBtaWdodCBsaW1pdCBpdHMgc2NvcGUsIGJ1dCBJIHNob3VsZCBzdGlsbCBrZWVwIGl0IGluIG1pbmQgYXMgYSBwb3RlbnRpYWwgYXJlYSB0byBpbnZlc3RpZ2F0ZS4gT2theSwgbmV4dCB1cCwgaG93IGFib3V0IGB2aG9zdF92cmluZ19pb2N0bGA/IEl0J3MgZXhwb3J0ZWQsIGFuZCBpdCdzIGRlYWxpbmcgd2l0aCBpb2N0bHMsIHdoaWNoIG9mdGVuIGltcGxpZXMgc29tZSBhbW91bnQgb2YgSS9PIGludGVyYWN0aW9uLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldC4gVGhvdWdoLCBvbiBzZWNvbmQgdGhvdWdodCwgaXQgc2VlbXMgcHJldHR5IGdlbmVyaWMuLi4gaXTigJlzIGEgaG90LXBhdGggZnVuY3Rpb24gZm9yIGlvY3RscyBpbiBnZW5lcmFsLCBub3QgbmVjZXNzYXJpbHkgdGllZCB0byBhbnkgc3BlY2lmaWMgZGV2aWNlIG9yIHByb2Nlc3MuIE9rYXksIHRoYXQncyBub3QgcXVpdGUgYXMgaW50ZXJlc3RpbmcuXG5cbldhaXQgYSBzZWNvbmQuLi4gYWgsIHRoZXJlJ3MgYW5vdGhlciB0aG91Z2h0ISBJIHNlZSBgdmhvc3RfY2hyX3JlYWRfaXRlcmAgY2FsbGVkIGZyb20gYHZob3N0X25ldF9jaHJfcmVhZF9pdGVyYCBhbmQgYHZob3N0X3Zzb2NrX2Nocl9yZWFkX2l0ZXJgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgaXTigJlzIHRoZSBiYXNlIGZvciBjb21tb24gcmVhZCBpdGVyYXRpb25zLiBMZXQgbWUganVzdCBjb25maXJtIGlmIGBWSE9TVF9ORVRgIGFuZCBgVkhPU1RfVlNPQ0tgIGFyZSwgaW4gZmFjdCwgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIFRoYXQgd291bGQgaGVscCB0byBzZWUgaWYgYHZob3N0X2Nocl9yZWFkX2l0ZXJgIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc5MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowOToyOS4zMDIzNDcwOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0ODA5MzU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkhPU1RfTkVUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZz0zMj1pZiBWSE9TVF9NRU5VXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTMzLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzozNDpjb25maWcgVkhPU1RfTkVUXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTM1LVxcdHRyaXN0YXRlIFxcXCJIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDk6MzAuNzUwNDQ1NTI5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDIyMDgxNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFzc2Vzc2luZyBWaXJ0dWFsaXplZCBTb2NrZXQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgXCJUaW1lIHRvIGRpdmUgaW50byB0aGUgdmlydHVhbGl6ZWQgc29ja2V0IHNpdHVhdGlvbi5cIiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBjb25maWcgVkhPU1RfVlNPQ0tgIHNldHRpbmcuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgc3RhdGUgb2YgdGhlIHZob3N0LXZzb2NrIGNvbmZpZ3VyYXRpb24uIElzIGl0IGVuYWJsZWQsIGRpc2FibGVkLCBvciBidWlsdCBhcyBhIG1vZHVsZT8gVW5kZXJzdGFuZGluZyB0aGlzIGlzIHRoZSBmb3VuZGF0aW9uYWwgZmlyc3Qgc3RlcC4gRGVwZW5kaW5nIG9uIHRoZSBhbnN3ZXIsIGl0IGdpdmVzIHRoZSBkaXJlY3Rpb24gb2YgZnVydGhlciB0cm91Ymxlc2hvb3RpbmcsIG9yIGF0IGxlYXN0IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGN1cnJlbnQgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzkyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDk6MzQuNDkyNjU1NzA5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU2Njk4MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSE9TVF9WU09DS1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWc9NDY9Y29uZmlnIFZIT1NUX1NDU0lcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01NS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NTY6Y29uZmlnIFZIT1NUX1ZTT0NLXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTU3LVxcdHRyaXN0YXRlIFxcXCJ2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowOTozNS45NDkzNTg4MzhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ3NDM1MjY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQ29uZmlndXJhdGlvbiBDaGVjayoqXG5cbkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAsIEkgbmVlZCB0byBnZXQgYSBiYXNlbGluZSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQncyBnb2luZyBvbi4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgdG8gY2hlY2sgdGhlIGBjb25maWcgVkhPU1RgIHNldHRpbmdzLiBUaGlzIGlzIHVzdWFsbHkgdGhlIHF1aWNrZXN0IHdheSB0byBpZGVudGlmeSB0aGUgYmFzaWMgdmlydHVhbCBob3N0IHNldHVwLiBJIHdhbnQgdG8gc2VlIHdoYXQncyBkZWZpbmVkIGF0IHRoZSB0b3AgbGV2ZWwgYW5kIGVuc3VyZSBldmVyeXRoaW5nIGlzIGJlaGF2aW5nIGFzIEkgZXhwZWN0LiBJdCdsbCBnaXZlIG1lIGEgZmFzdCBvdmVydmlldyBvZiBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gaXMgZGVzaWduZWQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIHRoZSB2aG9zdCBpcyBtaXNjb25maWd1cmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYzMSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDk6NDAuNDIzNzEzNTA4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU1ODI3NzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSE9TVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6Mjpjb25maWcgVkhPU1RfSU9UTEJcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMy1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTgtXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjk6Y29uZmlnIFZIT1NUX1JJTkdcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMTAtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0xNS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MTY6Y29uZmlnIFZIT1NUX1RBU0tcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMTctXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTE5LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzoyMDpjb25maWcgVkhPU1RcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMjEtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0yNy1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6Mjg6bWVudWNvbmZpZyBWSE9TVF9NRU5VXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTI5LVxcdGJvb2wgXFxcIlZIT1NUIGRyaXZlcnNcXFwiXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9MzI9aWYgVkhPU1RfTUVOVVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zMy1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MzQ6Y29uZmlnIFZIT1NUX05FVFxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zNS1cXHR0cmlzdGF0ZSBcXFwiSG9zdCBrZXJuZWwgYWNjZWxlcmF0b3IgZm9yIHZpcnRpbyBuZXRcXFwiXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDUtXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjQ2OmNvbmZpZyBWSE9TVF9TQ1NJXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTQ3LVxcdHRyaXN0YXRlIFxcXCJWSE9TVF9TQ1NJIFRDTSBmYWJyaWMgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTU1LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo1Njpjb25maWcgVkhPU1RfVlNPQ0tcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTctXFx0dHJpc3RhdGUgXFxcInZob3N0IHZpcnRpby12c29jayBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNjktXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjcwOmNvbmZpZyBWSE9TVF9WRFBBXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTcxLVxcdHRyaXN0YXRlIFxcXCJWaG9zdCBkcml2ZXIgZm9yIHZEUEEtYmFzZWQgYmFja2VuZFxcXCJcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy04Mi1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6ODM6Y29uZmlnIFZIT1NUX0NST1NTX0VORElBTl9MRUdBQ1lcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctODQtXFx0Ym9vbCBcXFwiQ3Jvc3MtZW5kaWFuIHN1cHBvcnQgZm9yIHZob3N0XFxcIlxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTk3LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo5ODpjb25maWcgVkhPU1RfRU5BQkxFX0ZPUktfT1dORVJfQ09OVFJPTFxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy05OS1cXHRib29sIFxcXCJFbmFibGUgVkhPU1RfRU5BQkxFX0ZPUktfT1dORVJfQ09OVFJPTFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDk6NDEuODc5NTg2OTI3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMjgzNzI2MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlZob3N0IENvZGUgQ2hhbmdlczogQSBRdWljayBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgb3ZlciB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCBwcmltYXJpbHkgaW1wYWN0cyBgZHJpdmVycy92aG9zdC92aG9zdC5jYC4gSSBjYW4gc2VlIHRoYXQgYENPTkZJR19WSE9TVGAgaXMgdGhlIGtleSBjb25maWcgaGVyZSwgYW5kIHRoYXQgaXQncyBwdWxsZWQgaW4gYnkgdGhlIGxpa2VzIG9mIGBWSE9TVF9ORVRgIGFuZCBgVkhPU1RfVlNPQ0tgLCBzbyBlbmFibGluZyB0aG9zZSBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydC5cblxuSSd2ZSB6ZXJvZWQgaW4gb24gdGhlIG1vZGlmaWVkIGV4cG9ydGVkIGZ1bmN0aW9ucy4gYHZob3N0X2luaXRfZGV2aWNlX2lvdGxiYCwgYHZob3N0X2Nocl9yZWFkX2l0ZXJgLCBhbmQgYHZob3N0X2NsZWFyX21zZ2AgYXJlIGRlZmluaXRlbHkgb2YgaW50ZXJlc3QuIEkgY29uZmlybWVkIHRoYXQgYHZob3N0X2luaXRfZGV2aWNlX2lvdGxiYCBpcyBhbiAqZXhpc3RpbmcqIGZ1bmN0aW9uIHRoYXQncyBiZWVuIG1vZGlmaWVkLCBhbmQgdGhlIGRpZmYgc2hvd3MgdGhlIGFkZGl0aW9uIG9mIGEgbmV3IHN0YXRlIG1hY2hpbmUgcmVsYXRlZCB0byBJT1RMQiBtaXNzZXMuIExvb2tzIGxpa2UgYSBzb2xpZCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSB2aG9zdCBjb2RlLiBJIGFsc28gdmVyaWZpZWQgdGhhdCBgdmhvc3RfY2hyX3JlYWRfaXRlcmAgYW5kIGB2aG9zdF9jbGVhcl9tc2dgIGhhdmUgYmVlbiBtb2RpZmllZCBhcyB3ZWxsLlxuXG5UaGUgY2hhbmdlcyBhcHBlYXIgdG8gaW1wbGVtZW50IGEgbWVjaGFuaXNtIHRvIGF2b2lkIHNlbmRpbmcgZHVwbGljYXRlIG1pc3MgbWVzc2FnZXMgd2hpY2ggaW5kaWNhdGVzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvZGUuXG5cbkZvciBmdXp6aW5nLCBJJ20gZ29pbmcgdG8gZm9jdXMgb24gdGhvc2UgdGhyZWUga2V5IHN5bWJvbHM6IGB2aG9zdF9jaHJfcmVhZF9pdGVyYCwgYHZob3N0X2luaXRfZGV2aWNlX2lvdGxiYCwgYW5kIGB2aG9zdF9jbGVhcl9tc2dgLiBBbmQgb2YgY291cnNlLCBJJ2xsIGJlIHVzaW5nIGBWSE9TVF9ORVRgLCBgVkhPU1RfVlNPQ0tgLCBhbmQgYFZIT1NUYCBhcyBteSBwcmltYXJ5IGNvbmZpZyBvcHRpb25zLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHF1aWNrbHkgY2hlY2tlZCBmb3Igb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkLiBJIGZvdW5kIHRoYXQgYHZob3N0X2Rldl9pbml0YCBoYXMgYmVlbiBtb2RpZmllZCwgYW5kIGB2aG9zdF9kZXF1ZXVlX21zZ2AgaGFzIGJlZW4gY2hhbmdlZCBhcyB3ZWxsLiBTbyBJJ2xsIGtlZXAgYW4gZXllIG9uIHRob3NlIGFzIEkgZGlnIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MjUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDk6NTMuMTYzMzE1MTMzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg0MzQ0ODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X2RlcXVldWVfbXNnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3Qvdmhvc3QuYz0zNTA4PUVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2VucXVldWVfbXNnKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUwOS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzUxMDpzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKnZob3N0X2RlcXVldWVfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUxMS1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTI1LX1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzUyNjpFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kZXF1ZXVlX21zZyk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MjctXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg9MjczPXZvaWQgdmhvc3RfZW5xdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LFxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5oLTI3NS1cXHRcXHQgICAgICAgc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg6Mjc2OnN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqdmhvc3RfZGVxdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC0yNzctXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowOTo1NC41NDc2NjU0MjdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4ODYyOTQ3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYHZob3N0X2RlcXVldWVfbXNnYCdzIFVzYWdlKipcblxuUmlnaHQsIGB2aG9zdF9kZXF1ZXVlX21zZ2AgaXMgZXhwb3NlZC4gT2theSwgdGhhdCdzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGNoZWNrIHRoZSBjcm9zcy1yZWZlcmVuY2VzLiBJJ2xsIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBjYWxsIHNpdGVzLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBJIG5lZWQgdG8gZmluZCB0aGUgbW9kdWxlcyAqY2FsbGluZyogdGhpcyBmdW5jdGlvbi4gS25vd2luZyB0aGF0IHdpbGwgZ2l2ZSBtZSBhIHZlcnkgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSBhbmQgZGVwZW5kZW5jaWVzLiBJcyBpdCBvbmx5IHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gdGhlIHZob3N0IHN1YnN5c3RlbSwgb3IgZG9lcyBpdCBoYXZlIHdpZGVyIGltcGxpY2F0aW9ucz8gQSBxdWljayBzZWFyY2ggb2YgdGhlIGNvZGViYXNlIHNob3VsZCByZXZlYWwgdGhlIGltbWVkaWF0ZSBjYWxsZXJzLiBUaGF0J2xsIHByb3ZpZGUgdGhlIGdyb3VuZHdvcmsgZm9yIGRldGVybWluaW5nIHRoZSBhcmNoaXRlY3R1cmUncyBkZXNpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTA1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDk6NTguMjM2Mjk2OTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzQzNDg5MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfZGVxdWV1ZV9tc2dcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92aG9zdC5jPTM1MDg9RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZW5xdWV1ZV9tc2cpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTA5LVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozNTEwOnN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqdmhvc3RfZGVxdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTExLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MjUtfVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozNTI2OkVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2RlcXVldWVfbXNnKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUyNy1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaD0yNzM9dm9pZCB2aG9zdF9lbnF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjc1LVxcdFxcdCAgICAgICBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaDoyNzY6c3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9kZXF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXFxuZHJpdmVycy92aG9zdC92aG9zdC5oLTI3Ny1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA5OjU5LjY3MDY1MDU4MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjQ1Nzk2NzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIERpc2FwcGVhcmFuY2Ugb2YgYHZob3N0X2RlcXVldWVfbXNnYCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYHZob3N0X2RlcXVldWVfbXNnYCBzZWVtcyB0byBiZSBjYWxsZWQgKm9ubHkqIHdpdGhpbiBgdmhvc3QuY2AuIEkgZGlkIGEgcXVpY2sgYGdyZXBgLCBhbmQgaXQgZGlkbid0IHR1cm4gdXAgYW55IG90aGVyIG9jY3VycmVuY2VzIGluIHRoZSBjb2RlYmFzZSBiZXNpZGVzIGB2aG9zdC5jYCwgd2hpY2ggaXMgb2RkLlxuXG5Ib2xkIG9uLi4uIEkgcmVtZW1iZXIgc2VlaW5nIHNvbWV0aGluZyBhYm91dCB0aGlzIGluIHRoZSBwYXRjaCBub3Rlcy4gQWgsIGhlcmUgaXQgaXM6IHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBgdmhvc3RfZGVxdWV1ZV9tc2dgIGJlaW5nIGNhbGxlZCBpbiBgdmhvc3RfY2hyX3JlYWRfaXRlcmAuIEJ1dCwgdGhhdCBjYWxsIGhhcyBiZWVuICpyZW1vdmVkKiBpbiB0aGUgcGF0Y2ggYW5kIHJlcGxhY2VkIHdpdGggc29tZSBjb2RlIHVzaW5nIGBzcGluX2xvY2tgIGFuZCBjaGVja2luZyB0aGUgYHJlYWRfbGlzdGAuXG5cblNvLCBpdCdzIHByZXR0eSBjbGVhcjogYHZob3N0X2RlcXVldWVfbXNnYCAqaXNuJ3QqIHVzZWQgaW4gYHZob3N0X2Nocl9yZWFkX2l0ZXJgIGFueW1vcmUuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIG5vdyBpcy4uLiBpcyBpdCB1c2VkICphbnl3aGVyZSBlbHNlKj8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgbm90IGJlaW5nIGNhbGxlZCBieSBhbnl0aGluZyBlbHNlLiBUaW1lIHRvIGRvIGFub3RoZXIgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDIyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjEwOjA1LjMxNjQ0OTg5OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyOTE3MjIyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF9kZXF1ZXVlX21zZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmM9MzUwOD1FWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9lbnF1ZXVlX21zZyk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MDktXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjM1MTA6c3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9kZXF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MTEtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUyNS19XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjM1MjY6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGVxdWV1ZV9tc2cpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTI3LVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5oPTI3Mz12b2lkIHZob3N0X2VucXVldWVfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC0yNzUtXFx0XFx0ICAgICAgIHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5oOjI3NjpzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKnZob3N0X2RlcXVldWVfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjc3LVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MTA6MDYuNzQ1NjI2NDQ5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMTEwNTA1NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFZob3N0IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgdGhyb3VnaCB0aGlzIHBhdGNoIGFuZCBoZXJlJ3MgbXkgdGFrZTogdGhlIGZ1bmN0aW9uIGB2aG9zdF9kZXF1ZXVlX21zZ2AgYXBwZWFycyB0byBiZSB1bnVzZWQsIHdoaWNoIGlzIG9kZC4gSSBkaWQgYSBnbG9iYWwgZ3JlcCwgc28gSSdtIHByZXR0eSBjb25maWRlbnQgaXQncyBub3QgYmVpbmcgY2FsbGVkIGFueXdoZXJlIGluIHRoZSBrZXJuZWwgdHJlZSwgdW5sZXNzIGl0J3MgaW4gc29tZSBleHRyZW1lbHkgb2JzY3VyZSwgbm9uLXN0YW5kYXJkIHZob3N0IGRyaXZlci4gQnV0IGZyb20gd2hhdCBJIGNhbiBzZWUsIGl0J3MganVzdCBhbiBleHBvcnRlZCBmdW5jdGlvbiBzaXR0aW5nIHRoZXJlLCBkb2luZyBub3RoaW5nLlxuXG5Ob3csIGxldCdzIGdldCB0byB0aGUgbWVhdCBvZiB0aGlzIHBhdGNoLiBJIHNlZSBjaGFuZ2VzIGZvY3VzZWQgb24gYHZob3N0X2Nocl9yZWFkX2l0ZXJgLCBgdmhvc3RfaW5pdF9kZXZpY2VfaW90bGJgLCBhbmQgYHZob3N0X2NsZWFyX21zZ2AuIFRoZXNlIGFyZSBjcml0aWNhbCwgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29udGV4dC4gVGhlIHBhdGNoICppbnRyb2R1Y2VzIGEgbmV3IHN0YXRlIG1hY2hpbmUqIGRlc2lnbmVkIHRvIGhhbmRsZSB2aG9zdCBJT1RMQiBtaXNzZXMgYW5kLCBpbXBvcnRhbnRseSwgY29hbGVzY2VzIHRob3NlIG1lc3NhZ2VzIHRoYXQgZ2V0IHBhc3NlZCB1cCB0byB1c2Vyc3BhY2UuIEVzc2VudGlhbGx5LCBpdCdzIGFib3V0IG9wdGltaXppbmcgaG93IHRoZSBrZXJuZWwgZGVhbHMgd2l0aCBtZW1vcnkgYWRkcmVzcyB0cmFuc2xhdGlvbiBhbmQgcmVkdWNpbmcgdGhlIG51bWJlciBvZiBub3RpZmljYXRpb25zIHNlbnQgdG8gdGhlIHVzZXJzcGFjZSBwcm9jZXNzLCByaWdodD9cblxuU28sIGJlY2F1c2UgdGhpcyB0b3VjaGVzIGNvcmUgdmhvc3QgY29kZSwgYW5kIHRoYXQgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBgL2Rldi92aG9zdC1uZXRgIGFuZCBgL2Rldi92aG9zdC12c29ja2AgZGV2aWNlcywgdGhpcyBpcyBnb2luZyB0byBuZWVkIHNvbWUgc2VyaW91cyBmdXp6aW5nLiBUaGUgZ29hbCBvZiB0aGF0IGZ1enppbmcgaXMgdG8gcm9vdCBvdXQgYW55IHBvdGVudGlhbCBuYXN0aWVzIHRoZSBuZXcgc3RhdGUgbWFjaGluZSBtaWdodCBpbnRyb2R1Y2UuIEknbSB0aGlua2luZyBkZWFkbG9ja3MgYXJlIGEgcG9zc2liaWxpdHksIGFzIHdpdGggYW55IHN0YXRlIG1hY2hpbmUgY2hhbmdlLCBhbmQgb2YgY291cnNlLCBtZW1vcnkgbGVha3MgYW5kIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcyBhcmUgYWx3YXlzIG9uIHRoZSB0YWJsZSB3aGVuIHlvdeKAmXJlIGRlYWxpbmcgd2l0aCBhc3luY2hyb25vdXMgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlcnNwYWNlLlxuXG5BbHJpZ2h0LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuIEkgdGhpbmsgSSd2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB0aGlzIGFuZCBhbSByZWFkeSB0byBkaXZlIGludG8gdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNjUsIk91dHB1dFRva2VucyI6MjE1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjEwOjE5Ljg1NjEzNDExOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NjAzMjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9ORVRcIixcbiAgICBcIlZIT1NUX1ZTT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfY2hyX3JlYWRfaXRlclwiLFxuICAgIFwidmhvc3RfaW5pdF9kZXZpY2VfaW90bGJcIixcbiAgICBcInZob3N0X2NsZWFyX21zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3RhdGUgbWFjaGluZSBmb3IgaGFuZGxpbmcgdmhvc3QgSU9UTEIgbWlzc2VzLCBjb2FsZXNjaW5nIGR1cGxpY2F0ZSBtaXNzIG1lc3NhZ2VzIHRvIHVzZXJzcGFjZS4gVGhpcyBpbnZvbHZlcyBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSB2aG9zdCBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNoYXJhY3RlciBkZXZpY2UgcmVhZCBoYW5kbGVyICh2aG9zdF9jaHJfcmVhZF9pdGVyKSwgZGV2aWNlIGluaXRpYWxpemF0aW9uICh2aG9zdF9pbml0X2RldmljZV9pb3RsYiksIGFuZCBtZXNzYWdlIGNsZWFyaW5nICh2aG9zdF9jbGVhcl9tc2cpLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB2aG9zdCBkZXZpY2Ugbm9kZXMgKGUuZy4sIC9kZXYvdmhvc3QtbmV0LCAvZGV2L3Zob3N0LXZzb2NrKSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBzdGF0ZSBtYWNoaW5lIGRvZXNuJ3QgaW50cm9kdWNlIGRlYWRsb2NrcywgbWVtb3J5IGxlYWtzLCBvciB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXRpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfTkVUXCIsXG4gICAgXCJWSE9TVF9WU09DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X2Nocl9yZWFkX2l0ZXJcIixcbiAgICBcInZob3N0X2luaXRfZGV2aWNlX2lvdGxiXCIsXG4gICAgXCJ2aG9zdF9jbGVhcl9tc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN0YXRlIG1hY2hpbmUgZm9yIGhhbmRsaW5nIHZob3N0IElPVExCIG1pc3NlcywgY29hbGVzY2luZyBkdXBsaWNhdGUgbWlzcyBtZXNzYWdlcyB0byB1c2Vyc3BhY2UuIFRoaXMgaW52b2x2ZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgdmhvc3QgY29kZSwgc3BlY2lmaWNhbGx5IGluIHRoZSBjaGFyYWN0ZXIgZGV2aWNlIHJlYWQgaGFuZGxlciAodmhvc3RfY2hyX3JlYWRfaXRlciksIGRldmljZSBpbml0aWFsaXphdGlvbiAodmhvc3RfaW5pdF9kZXZpY2VfaW90bGIpLCBhbmQgbWVzc2FnZSBjbGVhcmluZyAodmhvc3RfY2xlYXJfbXNnKS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdmhvc3QgZGV2aWNlIG5vZGVzIChlLmcuLCAvZGV2L3Zob3N0LW5ldCwgL2Rldi92aG9zdC12c29jaykgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgc3RhdGUgbWFjaGluZSBkb2Vzbid0IGludHJvZHVjZSBkZWFkbG9ja3MsIG1lbW9yeSBsZWFrcywgb3IgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNToxMDoxOS45MjQ3NDM0MjRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MzkyNjQ1ODAwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjEwOjE5LjkyNTE3MzAzNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NzM5MjYwMjIwODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NhbCBgc25hcHNob3RgIHVuaW9uIGluIGB2aG9zdF9jaHJfcmVhZF9pdGVyYCB3aGljaCBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSB2aWEgYGNvcHlfdG9faXRlcl9mdWxsYC4gSG93ZXZlciwgdGhpcyBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIGJlY2F1c2U6XFxuMS4gVGhlIGBzbmFwc2hvdGAgaXMgcG9wdWxhdGVkIHVzaW5nIGBtZW1jcHlgIGZyb20gYW4gZXhpc3RpbmcgbWVzc2FnZSBub2RlIChgZmlyc3QtXFx1MDAzZW1zZ192MmAgb3IgYGZpcnN0LVxcdTAwM2Vtc2dgKS5cXG4yLiBUaGUgc291cmNlIG1lc3NhZ2Ugbm9kZSBpcyBhbGxvY2F0ZWQgaW4gYHZob3N0X25ld19tc2dgIHVzaW5nIGBremFsbG9jYCAodmlhIGBremFsbG9jX29iamApLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIGVudGlyZSBzdHJ1Y3R1cmUsIGluY2x1ZGluZyBhbnkgY29tcGlsZXItaW5zZXJ0ZWQgcGFkZGluZywgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC5cXG4zLiBXaGVuIGEgbWVzc2FnZSBpcyByZXVzZWQgYW5kIGl0cyB0eXBlIGNoYW5nZXMsIGB2aG9zdF9zZXRfaW90bGJfbWlzc2AgZXhwbGljaXRseSBjYWxscyBgbWVtc2V0YCB0byB6ZXJvIG91dCB0aGUgbWVzc2FnZSBmaWVsZHMsIGVuc3VyaW5nIG5vIHN0YWxlIGRhdGEgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nIHJlbWFpbnMuXFxuNC4gVGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBleGFjdGx5IG1hdGNoZXMgdGhlIHNpemUgb2YgdGhlIGZ1bGx5IGluaXRpYWxpemVkIG1lc3NhZ2Ugc3RydWN0dXJlLlxcblxcblRoZSByZW1haW5kZXIgb2YgdGhlIHBhdGNoIGludm9sdmVzIGxpc3QgbWFuaXB1bGF0aW9ucywgc3RhdGUgdHJhY2tpbmcgKGBpb3RsYl9taXNzX3N0YXRlYCksIGFuZCBjb2FsZXNjaW5nIGxvZ2ljIHRvIHByZXZlbnQgSU9UTEIgbWlzcyBmbG9vZHMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgbGlzdCBjb3JydXB0aW9uLCBvciBkZWFkbG9ja3MpIGFyZSBwZXJmZWN0bHkgc3VpdGVkIGZvciBzdGFuZGFyZCBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGFiYjcxOTlkNTQ5MTBhNjgxOTUyZWY4ZmQ4NThkY2RkNzc3ZjU5M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE1OjA4OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5jIGIvZHJpdmVycy92aG9zdC92aG9zdC5jXG5pbmRleCA0YzUyNWIzZTE2ZWFkLi5lYWI5MDRiNGI0ODRjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcbkBAIC0zNCw2ICszNCwxMyBAQFxuIFxuICNpbmNsdWRlIFwidmhvc3QuaFwiXG4gXG4rZW51bSB2aG9zdF9pb3RsYl9taXNzX3N0YXRlIHtcbitcdFZIT1NUX0lPVExCX01JU1NfTk9ORSxcbitcdFZIT1NUX0lPVExCX01JU1NfUkVBRCxcbitcdFZIT1NUX0lPVExCX01JU1NfUkVBRElORyxcbitcdFZIT1NUX0lPVExCX01JU1NfUEVORElORyxcbit9O1xuK1xuIHN0YXRpYyB1c2hvcnQgbWF4X21lbV9yZWdpb25zID0gNjQ7XG4gbW9kdWxlX3BhcmFtKG1heF9tZW1fcmVnaW9ucywgdXNob3J0LCAwNDQ0KTtcbiBNT0RVTEVfUEFSTV9ERVNDKG1heF9tZW1fcmVnaW9ucyxcbkBAIC02MTMsNiArNjIwLDkgQEAgdm9pZCB2aG9zdF9kZXZfaW5pdChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG4gXHRcdHZxLVx1MDAzZWhlYWRzID0gTlVMTDtcbiBcdFx0dnEtXHUwMDNlbmhlYWRzID0gTlVMTDtcbiBcdFx0dnEtXHUwMDNlZGV2ID0gZGV2O1xuK1x0XHR2cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlID0gVkhPU1RfSU9UTEJfTUlTU19OT05FO1xuK1x0XHR2cS1cdTAwM2Vpb3RsYl9taXNzX3NlcSA9IDA7XG4rXHRcdHZxLVx1MDAzZWlvdGxiX21pc3Nfbm9kZSA9IE5VTEw7XG4gXHRcdG11dGV4X2luaXQoXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuIFx0XHR2aG9zdF92cV9yZXNldChkZXYsIHZxKTtcbiBcdFx0aWYgKHZxLVx1MDAzZWhhbmRsZV9raWNrKVxuQEAgLTExNzcsNiArMTE4NywyMCBAQCB2b2lkIHZob3N0X2Rldl9zdG9wKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGV2X3N0b3ApO1xuIFxuK3N0YXRpYyB2b2lkIHZob3N0X3VudHJhY2tfaW90bGJfbWlzcyhzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUpXG4re1xuK1x0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBub2RlLVx1MDAzZXZxO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2cS1cdTAwM2VkZXYtXHUwMDNlaW90bGJfbG9jayk7XG4rXG4rXHRpZiAodnEtXHUwMDNlaW90bGJfbWlzc19ub2RlICE9IG5vZGUpXG4rXHRcdHJldHVybjtcbitcbitcdHZxLVx1MDAzZWlvdGxiX21pc3Nfbm9kZSA9IE5VTEw7XG4rXHR2cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlID0gVkhPU1RfSU9UTEJfTUlTU19OT05FO1xuK1x0dnEtXHUwMDNlaW90bGJfbWlzc19zZXErKztcbit9XG4rXG4gdm9pZCB2aG9zdF9jbGVhcl9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2KVxuIHtcbiBcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSwgKm47XG5AQCAtMTE4NCwxMiArMTIwOCwxNCBAQCB2b2lkIHZob3N0X2NsZWFyX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpXG4gXHRzcGluX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG4sIFx1MDAyNmRldi1cdTAwM2VyZWFkX2xpc3QsIG5vZGUpIHtcbi1cdFx0bGlzdF9kZWwoXHUwMDI2bm9kZS1cdTAwM2Vub2RlKTtcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZub2RlLVx1MDAzZW5vZGUpO1xuK1x0XHR2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Mobm9kZSk7XG4gXHRcdGtmcmVlKG5vZGUpO1xuIFx0fVxuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG4sIFx1MDAyNmRldi1cdTAwM2VwZW5kaW5nX2xpc3QsIG5vZGUpIHtcbi1cdFx0bGlzdF9kZWwoXHUwMDI2bm9kZS1cdTAwM2Vub2RlKTtcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZub2RlLVx1MDAzZW5vZGUpO1xuK1x0XHR2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Mobm9kZSk7XG4gXHRcdGtmcmVlKG5vZGUpO1xuIFx0fVxuIFxuQEAgLTE1ODUsMjAgKzE2MTEsNzMgQEAgc3RhdGljIGlubGluZSBpbnQgdmhvc3RfZ2V0X2Rlc2Moc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4gXHRyZXR1cm4gdmhvc3RfY29weV9mcm9tX3VzZXIodnEsIGRlc2MsIHZxLVx1MDAzZWRlc2MgKyBpZHgsIHNpemVvZigqZGVzYykpO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IHZob3N0X2lvdGxiX21zZyAqXG4rdmhvc3RfZ2V0X2lvdGxiX21zZyhzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUpXG4re1xuK1x0aWYgKG5vZGUtXHUwMDNlbXNnLnR5cGUgPT0gVkhPU1RfSU9UTEJfTVNHX1YyKVxuK1x0XHRyZXR1cm4gXHUwMDI2bm9kZS1cdTAwM2Vtc2dfdjIuaW90bGI7XG4rXG4rXHRyZXR1cm4gXHUwMDI2bm9kZS1cdTAwM2Vtc2cuaW90bGI7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHZob3N0X3NldF9pb3RsYl9taXNzKHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSwgYm9vbCB2MixcbitcdFx0XHRcdCB1NjQgaW92YSwgaW50IGFjY2Vzcylcbit7XG4rXHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2c7XG4rXHR1MzIgdHlwZSA9IHYyID8gVkhPU1RfSU9UTEJfTVNHX1YyIDogVkhPU1RfSU9UTEJfTVNHO1xuK1xuK1x0aWYgKG5vZGUtXHUwMDNlbXNnLnR5cGUgIT0gdHlwZSlcbitcdFx0bWVtc2V0KFx1MDAyNm5vZGUtXHUwMDNlbXNnX3YyLCAwLCBzaXplb2Yobm9kZS1cdTAwM2Vtc2dfdjIpKTtcbitcdG5vZGUtXHUwMDNlbXNnLnR5cGUgPSB0eXBlO1xuK1x0bXNnID0gdmhvc3RfZ2V0X2lvdGxiX21zZyhub2RlKTtcbitcbitcdG1zZy1cdTAwM2V0eXBlID0gVkhPU1RfSU9UTEJfTUlTUztcbitcdG1zZy1cdTAwM2Vpb3ZhID0gaW92YTtcbitcdG1zZy1cdTAwM2VwZXJtID0gYWNjZXNzO1xuK31cbitcbitzdGF0aWMgYm9vbCB2aG9zdF9pb3RsYl91cGRhdGVfY292ZXJzKHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKnVwZGF0ZSxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1pc3MpXG4re1xuK1x0cmV0dXJuIG1pc3MtXHUwMDNldHlwZSA9PSBWSE9TVF9JT1RMQl9NSVNTIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHVwZGF0ZS1cdTAwM2Vpb3ZhIFx1MDAzYz0gbWlzcy1cdTAwM2Vpb3ZhIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIG1pc3MtXHUwMDNlaW92YSAtIHVwZGF0ZS1cdTAwM2Vpb3ZhIFx1MDAzYyB1cGRhdGUtXHUwMDNlc2l6ZSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICAodXBkYXRlLVx1MDAzZXBlcm0gXHUwMDI2IG1pc3MtXHUwMDNlcGVybSkgPT0gbWlzcy1cdTAwM2VwZXJtO1xuK31cbitcbiBzdGF0aWMgdm9pZCB2aG9zdF9pb3RsYl9ub3RpZnlfdnEoc3RydWN0IHZob3N0X2RldiAqZCxcbiBcdFx0XHRcdCAgc3RydWN0IHZob3N0X2lvdGxiX21zZyAqbXNnKVxuIHtcbiBcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSwgKm47XG4rXHRpbnQgaTtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZkLVx1MDAzZWlvdGxiX2xvY2spO1xuIFxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZC1cdTAwM2VudnFzOyArK2kpIHtcbitcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBkLVx1MDAzZXZxc1tpXTtcbitcbitcdFx0bm9kZSA9IHZxLVx1MDAzZWlvdGxiX21pc3Nfbm9kZTtcbitcdFx0aWYgKCFub2RlIHx8XG4rXHRcdCAgICAhdmhvc3RfaW90bGJfdXBkYXRlX2NvdmVycyhtc2csXG4rXHRcdFx0XHRcdCAgICAgICB2aG9zdF9nZXRfaW90bGJfbXNnKG5vZGUpKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZub2RlLVx1MDAzZW5vZGUpO1xuK1x0XHR2aG9zdF91bnRyYWNrX2lvdGxiX21pc3Mobm9kZSk7XG4rXHRcdHZob3N0X3BvbGxfcXVldWUoXHUwMDI2dnEtXHUwMDNlcG9sbCk7XG4rXHRcdGtmcmVlKG5vZGUpO1xuK1x0fVxuK1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG4sIFx1MDAyNmQtXHUwMDNlcGVuZGluZ19saXN0LCBub2RlKSB7XG4gXHRcdHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKnZxX21zZyA9IFx1MDAyNm5vZGUtXHUwMDNlbXNnLmlvdGxiO1xuK1xuK1x0XHRpZiAobm9kZS1cdTAwM2V2cS1cdTAwM2Vpb3RsYl9taXNzX25vZGUgPT0gbm9kZSlcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKG1zZy1cdTAwM2Vpb3ZhIFx1MDAzYz0gdnFfbXNnLVx1MDAzZWlvdmEgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBtc2ctXHUwMDNlaW92YSArIG1zZy1cdTAwM2VzaXplIC0gMSBcdTAwM2U9IHZxX21zZy1cdTAwM2Vpb3ZhIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgdnFfbXNnLVx1MDAzZXR5cGUgPT0gVkhPU1RfSU9UTEJfTUlTUykge1xuIFx0XHRcdHZob3N0X3BvbGxfcXVldWUoXHUwMDI2bm9kZS1cdTAwM2V2cS1cdTAwM2Vwb2xsKTtcbi1cdFx0XHRsaXN0X2RlbChcdTAwMjZub2RlLVx1MDAzZW5vZGUpO1xuK1x0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2bm9kZS1cdTAwM2Vub2RlKTtcbiBcdFx0XHRrZnJlZShub2RlKTtcbiBcdFx0fVxuIFx0fVxuQEAgLTE3NTUsOSArMTgzNCwxOCBAQCBzc2l6ZV90IHZob3N0X2Nocl9yZWFkX2l0ZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3QgaW92X2l0ZXIgKnRvLFxuIFx0XHRcdCAgICBpbnQgbm9ibG9jaylcbiB7XG4gXHRERUZJTkVfV0FJVCh3YWl0KTtcbi1cdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZTtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHZob3N0X21zZyBtc2c7XG4rXHRcdHN0cnVjdCB2aG9zdF9tc2dfdjIgbXNnX3YyO1xuK1x0fSBzbmFwc2hvdDtcbitcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbWlzc190b2tlbiA9IE5VTEw7XG4rXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICptaXNzX3ZxID0gTlVMTDtcbitcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSA9IE5VTEw7XG4rXHR1NjQgbWlzc19zZXEgPSAwO1xuIFx0c3NpemVfdCByZXQgPSAwO1xuIFx0dW5zaWduZWQgc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgdmhvc3RfbXNnKTtcbitcdGJvb2wgc2hvcnRfYnVmZmVyID0gZmFsc2U7XG4rXHRib29sIHdha2UgPSBmYWxzZTtcbiBcbiBcdGlmIChpb3ZfaXRlcl9jb3VudCh0bykgXHUwMDNjIHNpemUpXG4gXHRcdHJldHVybiAwO1xuQEAgLTE3NjcsOCArMTg1NSwzNiBAQCBzc2l6ZV90IHZob3N0X2Nocl9yZWFkX2l0ZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3QgaW92X2l0ZXIgKnRvLFxuIFx0XHRcdHByZXBhcmVfdG9fd2FpdChcdTAwMjZkZXYtXHUwMDNld2FpdCwgXHUwMDI2d2FpdCxcbiBcdFx0XHRcdFx0VEFTS19JTlRFUlJVUFRJQkxFKTtcbiBcbi1cdFx0bm9kZSA9IHZob3N0X2RlcXVldWVfbXNnKGRldiwgXHUwMDI2ZGV2LVx1MDAzZXJlYWRfbGlzdCk7XG4tXHRcdGlmIChub2RlKVxuK1x0XHRzcGluX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuK1x0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXJlYWRfbGlzdCkpIHtcbitcdFx0XHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKmZpcnN0O1xuK1xuK1x0XHRcdGZpcnN0ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZkZXYtXHUwMDNlcmVhZF9saXN0LFxuK1x0XHRcdFx0XHRcdCBzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUsIG5vZGUpO1xuK1x0XHRcdGlmIChmaXJzdC1cdTAwM2V2cS1cdTAwM2Vpb3RsYl9taXNzX25vZGUgPT0gZmlyc3QpIHtcbitcdFx0XHRcdHNpemUgPSBmaXJzdC1cdTAwM2Vtc2cudHlwZSA9PSBWSE9TVF9JT1RMQl9NU0dfVjIgP1xuK1x0XHRcdFx0ICAgICAgIHNpemVvZihmaXJzdC1cdTAwM2Vtc2dfdjIpIDogc2l6ZW9mKGZpcnN0LVx1MDAzZW1zZyk7XG4rXHRcdFx0XHRpZiAoaW92X2l0ZXJfY291bnQodG8pIFx1MDAzYyBzaXplKSB7XG4rXHRcdFx0XHRcdHNob3J0X2J1ZmZlciA9IHRydWU7XG4rXHRcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0XHRtZW1jcHkoXHUwMDI2c25hcHNob3QubXNnX3YyLCBcdTAwMjZmaXJzdC1cdTAwM2Vtc2dfdjIsXG4rXHRcdFx0XHRcdCAgICAgICBzaXplKTtcbitcdFx0XHRcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2Zmlyc3QtXHUwMDNlbm9kZSxcbitcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2ZGV2LVx1MDAzZXBlbmRpbmdfbGlzdCk7XG4rXHRcdFx0XHRcdGZpcnN0LVx1MDAzZXZxLVx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgPVxuK1x0XHRcdFx0XHRcdFZIT1NUX0lPVExCX01JU1NfUkVBRElORztcbitcdFx0XHRcdFx0bWlzc192cSA9IGZpcnN0LVx1MDAzZXZxO1xuK1x0XHRcdFx0XHRtaXNzX3Rva2VuID0gZmlyc3Q7XG4rXHRcdFx0XHRcdG1pc3Nfc2VxID0gZmlyc3QtXHUwMDNldnEtXHUwMDNlaW90bGJfbWlzc19zZXE7XG4rXHRcdFx0XHR9XG4rXHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2Zmlyc3QtXHUwMDNlbm9kZSk7XG4rXHRcdFx0XHRub2RlID0gZmlyc3Q7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmRldi1cdTAwM2Vpb3RsYl9sb2NrKTtcbitcbitcdFx0aWYgKG5vZGUgfHwgbWlzc192cSB8fCBzaG9ydF9idWZmZXIpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGlmIChub2Jsb2NrKSB7XG4gXHRcdFx0cmV0ID0gLUVBR0FJTjtcbkBAIC0xNzg5LDYgKzE5MDUsMzQgQEAgc3NpemVfdCB2aG9zdF9jaHJfcmVhZF9pdGVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IGlvdl9pdGVyICp0byxcbiBcdGlmICghbm9ibG9jaylcbiBcdFx0ZmluaXNoX3dhaXQoXHUwMDI2ZGV2LVx1MDAzZXdhaXQsIFx1MDAyNndhaXQpO1xuIFxuK1x0aWYgKHNob3J0X2J1ZmZlcilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAobWlzc192cSkge1xuK1x0XHRib29sIGNvcGllZCA9IGNvcHlfdG9faXRlcl9mdWxsKFx1MDAyNnNuYXBzaG90Lm1zZ192Miwgc2l6ZSwgdG8pO1xuK1xuK1x0XHRzcGluX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuK1x0XHRub2RlID0gbWlzc192cS1cdTAwM2Vpb3RsYl9taXNzX25vZGU7XG4rXHRcdGlmIChub2RlID09IG1pc3NfdG9rZW4gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBtaXNzX3ZxLVx1MDAzZWlvdGxiX21pc3Nfc2VxID09IG1pc3Nfc2VxIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgbWlzc192cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlID09IFZIT1NUX0lPVExCX01JU1NfUkVBRElORykge1xuK1x0XHRcdGlmIChjb3BpZWQpIHtcbitcdFx0XHRcdG1pc3NfdnEtXHUwMDNlaW90bGJfbWlzc19zdGF0ZSA9XG4rXHRcdFx0XHRcdFZIT1NUX0lPVExCX01JU1NfUEVORElORztcbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2bm9kZS1cdTAwM2Vub2RlLCBcdTAwMjZkZXYtXHUwMDNlcmVhZF9saXN0KTtcbitcdFx0XHRcdG1pc3NfdnEtXHUwMDNlaW90bGJfbWlzc19zdGF0ZSA9IFZIT1NUX0lPVExCX01JU1NfUkVBRDtcbitcdFx0XHRcdHdha2UgPSB0cnVlO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0XHRzcGluX3VubG9jayhcdTAwMjZkZXYtXHUwMDNlaW90bGJfbG9jayk7XG4rXG4rXHRcdGlmICh3YWtlKVxuK1x0XHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKFx1MDAyNmRldi1cdTAwM2V3YWl0LFxuK1x0XHRcdFx0XHRcdCAgIEVQT0xMSU4gfCBFUE9MTFJETk9STSk7XG4rXHRcdHJldHVybiBjb3BpZWQgPyBzaXplIDogLUVGQVVMVDtcbitcdH1cbitcbiBcdGlmIChub2RlKSB7XG4gXHRcdHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1zZztcbiBcdFx0dm9pZCAqc3RhcnQgPSBcdTAwMjZub2RlLVx1MDAzZW1zZztcbkBAIC0xODE5LDI5ICsxOTYzLDY5IEBAIHNzaXplX3Qgdmhvc3RfY2hyX3JlYWRfaXRlcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCBpb3ZfaXRlciAqdG8sXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2Nocl9yZWFkX2l0ZXIpO1xuIFxuK3N0YXRpYyBib29sIHZob3N0X2lvdGxiX21pc3NfY29hbGVzY2Uoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIGJvb2wgdjIsXG4rXHRcdFx0XHQgICAgICB1NjQgaW92YSwgaW50IGFjY2VzcywgYm9vbCAqd2FrZSlcbit7XG4rXHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUgPSB2cS1cdTAwM2Vpb3RsYl9taXNzX25vZGU7XG4rXHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2c7XG4rXHR1MzIgdHlwZSA9IHYyID8gVkhPU1RfSU9UTEJfTVNHX1YyIDogVkhPU1RfSU9UTEJfTVNHO1xuK1x0Ym9vbCBzYW1lO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2cS1cdTAwM2VkZXYtXHUwMDNlaW90bGJfbG9jayk7XG4rXG4rXHRpZiAoIW5vZGUpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG1zZyA9IHZob3N0X2dldF9pb3RsYl9tc2cobm9kZSk7XG4rXHRzYW1lID0gbm9kZS1cdTAwM2Vtc2cudHlwZSA9PSB0eXBlIFx1MDAyNlx1MDAyNiBtc2ctXHUwMDNldHlwZSA9PSBWSE9TVF9JT1RMQl9NSVNTIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIG1zZy1cdTAwM2Vpb3ZhID09IGlvdmEgXHUwMDI2XHUwMDI2IG1zZy1cdTAwM2VwZXJtID09IGFjY2VzcztcbitcdGlmIChzYW1lIFx1MDAyNlx1MDAyNiB2cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlICE9IFZIT1NUX0lPVExCX01JU1NfUkVBRElORylcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRpZiAoIXNhbWUpXG4rXHRcdHZob3N0X3NldF9pb3RsYl9taXNzKG5vZGUsIHYyLCBpb3ZhLCBhY2Nlc3MpO1xuK1x0dnEtXHUwMDNlaW90bGJfbWlzc19zZXErKztcbitcdGlmICh2cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlICE9IFZIT1NUX0lPVExCX01JU1NfUkVBRCkge1xuK1x0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZub2RlLVx1MDAzZW5vZGUsIFx1MDAyNnZxLVx1MDAzZWRldi1cdTAwM2VyZWFkX2xpc3QpO1xuK1x0XHR2cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlID0gVkhPU1RfSU9UTEJfTUlTU19SRUFEO1xuK1x0XHQqd2FrZSA9IHRydWU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gc3RhdGljIGludCB2aG9zdF9pb3RsYl9taXNzKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCB1NjQgaW92YSwgaW50IGFjY2VzcylcbiB7XG4gXHRzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYgPSB2cS1cdTAwM2VkZXY7XG4gXHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGU7XG4tXHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2c7XG4gXHRib29sIHYyID0gdmhvc3RfYmFja2VuZF9oYXNfZmVhdHVyZSh2cSwgVkhPU1RfQkFDS0VORF9GX0lPVExCX01TR19WMik7XG4rXHRib29sIHdha2UgPSBmYWxzZTtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuK1xuK1x0c3Bpbl9sb2NrKFx1MDAyNmRldi1cdTAwM2Vpb3RsYl9sb2NrKTtcbitcdGlmICh2aG9zdF9pb3RsYl9taXNzX2NvYWxlc2NlKHZxLCB2MiwgaW92YSwgYWNjZXNzLCBcdTAwMjZ3YWtlKSkge1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZkZXYtXHUwMDNlaW90bGJfbG9jayk7XG4rXHRcdGlmICh3YWtlKVxuK1x0XHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKFx1MDAyNmRldi1cdTAwM2V3YWl0LFxuK1x0XHRcdFx0XHRcdCAgIEVQT0xMSU4gfCBFUE9MTFJETk9STSk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1x0c3Bpbl91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuIFxuIFx0bm9kZSA9IHZob3N0X25ld19tc2codnEsIHYyID8gVkhPU1RfSU9UTEJfTVNHX1YyIDogVkhPU1RfSU9UTEJfTVNHKTtcbiBcdGlmICghbm9kZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR2aG9zdF9zZXRfaW90bGJfbWlzcyhub2RlLCB2MiwgaW92YSwgYWNjZXNzKTtcbiBcbi1cdGlmICh2Mikge1xuLVx0XHRub2RlLVx1MDAzZW1zZ192Mi50eXBlID0gVkhPU1RfSU9UTEJfTVNHX1YyO1xuLVx0XHRtc2cgPSBcdTAwMjZub2RlLVx1MDAzZW1zZ192Mi5pb3RsYjtcbi1cdH0gZWxzZSB7XG4tXHRcdG1zZyA9IFx1MDAyNm5vZGUtXHUwMDNlbXNnLmlvdGxiO1xuLVx0fVxuLVxuLVx0bXNnLVx1MDAzZXR5cGUgPSBWSE9TVF9JT1RMQl9NSVNTO1xuLVx0bXNnLVx1MDAzZWlvdmEgPSBpb3ZhO1xuLVx0bXNnLVx1MDAzZXBlcm0gPSBhY2Nlc3M7XG4rXHRzcGluX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuK1x0dnEtXHUwMDNlaW90bGJfbWlzc19ub2RlID0gbm9kZTtcbitcdHZxLVx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgPSBWSE9TVF9JT1RMQl9NSVNTX1JFQUQ7XG4rXHR2cS1cdTAwM2Vpb3RsYl9taXNzX3NlcSsrO1xuK1x0bGlzdF9hZGRfdGFpbChcdTAwMjZub2RlLVx1MDAzZW5vZGUsIFx1MDAyNmRldi1cdTAwM2VyZWFkX2xpc3QpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuIFxuLVx0dmhvc3RfZW5xdWV1ZV9tc2coZGV2LCBcdTAwMjZkZXYtXHUwMDNlcmVhZF9saXN0LCBub2RlKTtcbitcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKFx1MDAyNmRldi1cdTAwM2V3YWl0LCBFUE9MTElOIHwgRVBPTExSRE5PUk0pO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTIyNzAsMjcgKzI0NTQsNTkgQEAgbG9uZyB2aG9zdF92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfZGV2ICpkLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHZvaWQgX191c2VyICphcmdcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfdnJpbmdfaW9jdGwpO1xuIFxuK3N0YXRpYyBib29sIHZob3N0X3JldHJ5X2lvdGxiX21pc3NlcyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkKVxuK3tcbitcdGJvb2wgd2FrZSA9IGZhbHNlO1xuK1x0aW50IGk7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmQtXHUwMDNlaW90bGJfbG9jayk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkLVx1MDAzZW52cXM7ICsraSkge1xuK1x0XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGQtXHUwMDNldnFzW2ldO1xuK1x0XHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKm5vZGUgPSB2cS1cdTAwM2Vpb3RsYl9taXNzX25vZGU7XG4rXG4rXHRcdGlmICghbm9kZSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0dnEtXHUwMDNlaW90bGJfbWlzc19zZXErKztcbitcdFx0aWYgKHZxLVx1MDAzZWlvdGxiX21pc3Nfc3RhdGUgIT0gVkhPU1RfSU9UTEJfTUlTU19SRUFEKVxuK1x0XHRcdGxpc3RfbW92ZV90YWlsKFx1MDAyNm5vZGUtXHUwMDNlbm9kZSwgXHUwMDI2ZC1cdTAwM2VyZWFkX2xpc3QpO1xuK1x0XHR2cS1cdTAwM2Vpb3RsYl9taXNzX3N0YXRlID0gVkhPU1RfSU9UTEJfTUlTU19SRUFEO1xuK1x0XHR3YWtlID0gdHJ1ZTtcbitcdH1cbitcbitcdHJldHVybiB3YWtlO1xuK31cbitcbiBpbnQgdmhvc3RfaW5pdF9kZXZpY2VfaW90bGIoc3RydWN0IHZob3N0X2RldiAqZClcbiB7XG4gXHRzdHJ1Y3Qgdmhvc3RfaW90bGIgKm5pb3RsYiwgKm9pb3RsYjtcbitcdGJvb2wgd2FrZTtcbiBcdGludCBpO1xuIFxuIFx0bmlvdGxiID0gaW90bGJfYWxsb2MoKTtcbiBcdGlmICghbmlvdGxiKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbitcdHZob3N0X2Rldl9sb2NrX3ZxcyhkKTtcbiBcdG9pb3RsYiA9IGQtXHUwMDNlaW90bGI7XG4gXHRkLVx1MDAzZWlvdGxiID0gbmlvdGxiO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZC1cdTAwM2VudnFzOyArK2kpIHtcbiBcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBkLVx1MDAzZXZxc1tpXTtcbiBcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gXHRcdHZxLVx1MDAzZWlvdGxiID0gbmlvdGxiO1xuIFx0XHRfX3Zob3N0X3ZxX21ldGFfcmVzZXQodnEpO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuIFx0fVxuIFxuK1x0c3Bpbl9sb2NrKFx1MDAyNmQtXHUwMDNlaW90bGJfbG9jayk7XG4rXHR3YWtlID0gdmhvc3RfcmV0cnlfaW90bGJfbWlzc2VzKGQpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2ZC1cdTAwM2Vpb3RsYl9sb2NrKTtcbitcdHZob3N0X2Rldl91bmxvY2tfdnFzKGQpO1xuK1xuK1x0aWYgKHdha2UpXG4rXHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKFx1MDAyNmQtXHUwMDNld2FpdCxcbitcdFx0XHRcdFx0ICAgRVBPTExJTiB8IEVQT0xMUkROT1JNKTtcbiBcdHZob3N0X2lvdGxiX2ZyZWUob2lvdGxiKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTMzMDAsNyArMzUxNiw4IEBAIHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqdmhvc3RfZGVxdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LFxuIFx0aWYgKCFsaXN0X2VtcHR5KGhlYWQpKSB7XG4gXHRcdG5vZGUgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCB2aG9zdF9tc2dfbm9kZSxcbiBcdFx0XHRcdFx0bm9kZSk7XG4tXHRcdGxpc3RfZGVsKFx1MDAyNm5vZGUtXHUwMDNlbm9kZSk7XG4rXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2bm9kZS1cdTAwM2Vub2RlKTtcbitcdFx0dmhvc3RfdW50cmFja19pb3RsYl9taXNzKG5vZGUpO1xuIFx0fVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZWlvdGxiX2xvY2spO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaCBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaFxuaW5kZXggMDE5MmFkZTZlNzQ5MS4uNTBmY2NjODVkNTk0MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaFxuKysrIGIvZHJpdmVycy92aG9zdC92aG9zdC5oXG5AQCAtMjksNiArMjksNyBAQCBzdHJ1Y3Qgdmhvc3Rfd29yayB7XG4gXG4gc3RydWN0IHZob3N0X3dvcmtlcjtcbiBzdHJ1Y3Qgdmhvc3RfZGV2O1xuK3N0cnVjdCB2aG9zdF9tc2dfbm9kZTtcbiBcbiBzdHJ1Y3Qgdmhvc3Rfd29ya2VyX29wcyB7XG4gXHRpbnQgKCpjcmVhdGUpKHN0cnVjdCB2aG9zdF93b3JrZXIgKndvcmtlciwgc3RydWN0IHZob3N0X2RldiAqZGV2LFxuQEAgLTE2Myw3ICsxNjQsMTIgQEAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSB7XG4gXHQvKiBSaW5nIGVuZGlhbm5lc3MgcmVxdWVzdGVkIGJ5IHVzZXJzcGFjZSBmb3IgY3Jvc3MtZW5kaWFuIHN1cHBvcnQuICovXG4gXHRib29sIHVzZXJfYmU7XG4gI2VuZGlmXG4rXHQvKiBQcm90ZWN0ZWQgYnkgZGV2LVx1MDAzZWlvdGxiX2xvY2suICovXG4rXHR1OCBpb3RsYl9taXNzX3N0YXRlO1xuIFx0dTMyIGJ1c3lsb29wX3RpbWVvdXQ7XG4rXHQvKiBQcm90ZWN0ZWQgYnkgZGV2LVx1MDAzZWlvdGxiX2xvY2suICovXG4rXHR1NjQgaW90bGJfbWlzc19zZXE7XG4rXHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKmlvdGxiX21pc3Nfbm9kZTtcbiB9O1xuIFxuIHN0cnVjdCB2aG9zdF9tc2dfbm9kZSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNToxMDoxOS45MjUxNzM5MzRaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEyODQxOTM5NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIElPVExCIE1pc3MgVHJhY2tpbmcgaW4gdmhvc3QqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBJT1RMQiBtaXNzIGhhbmRsaW5nIHdpdGhpbiB0aGUgdmhvc3QgaW5mcmFzdHJ1Y3R1cmUuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIGlzIGluIGBkcml2ZXJzL3Zob3N0L3Zob3N0LmNgIGFuZCBgZHJpdmVycy92aG9zdC92aG9zdC5oYCwgYW5kIHRoZSBnb2FsIGlzIHRvIHRyYWNrIElPVExCIG1pc3NlcyBhdCB0aGUgdmlydHF1ZXVlIGxldmVsLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhleSd2ZSBhZGRlZCBgaW90bGJfbWlzc19zdGF0ZWAsIGBpb3RsYl9taXNzX3NlcWAsIGFuZCBgaW90bGJfbWlzc19ub2RlYCB0byB0aGUgYHN0cnVjdCB2aG9zdF92aXJ0cXVldWVgLiBUaGF0IGdpdmVzIHVzIHBlci12aXJ0cXVldWUgc3RhdGUgZm9yIElPVExCIG1pc3MgbWFuYWdlbWVudCwgYW5kIHRoZSBzZXF1ZW5jZSBudW1iZXIgc3VnZ2VzdHMgc29tZSBzb3J0IG9mIG9yZGVyaW5nIG9yIHRyYWNraW5nLlxuXG5Ob3csIGxldCdzIHplcm8gaW4gb24gYHZob3N0X2Nocl9yZWFkX2l0ZXJgLiBUaGlzIGlzIHdoZXJlIHRoZSBkYXRhIGZyb20gdGhlIHZob3N0IGRldmljZSBpcyByZWFkIGludG8gdXNlciBzcGFjZS4gVGhlIGltcG9ydGFudCBzZWN0aW9uIHNlZW1zIHRvIGJlIHRoZSBhZGRlZCBjb2RlIHRoYXQgZGVhbHMgd2l0aCByZWFkaW5nIElPVExCIG1pc3MgbWVzc2FnZXMuIEl0IGxvb2tzIGxpa2UgaXQgdHJpZXMgdG8gYXRvbWljYWxseSBhY3F1aXJlIGEgbWVzc2FnZSAodXNpbmcgYHNwaW5fbG9ja2AgYW5kIHRoZSBgcmVhZF9saXN0YCkuXG5cblRoZSBsb2dpYyBsb29rcyBsaWtlIGl0IGNoZWNrcyBpZiB0aGUgZmlyc3QgbWVzc2FnZSBpbiBgZGV2LVx1MDAzZXJlYWRfbGlzdGAgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIElPVExCIG1pc3MgKGBmaXJzdC1cdTAwM2V2cS1cdTAwM2Vpb3RsYl9taXNzX25vZGUgPT0gZmlyc3RgKS4gSWYgc28sIGFuZCBpZiB0aGVyZSdzIGVub3VnaCBzcGFjZSBpbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLCBpdCBtb3ZlcyB0aGUgbWVzc2FnZSBmcm9tIGBkZXYtXHUwMDNlcmVhZF9saXN0YCB0byBgZGV2LVx1MDAzZXBlbmRpbmdfbGlzdGAsIHNldHMgdGhlIGBpb3RsYl9taXNzX3N0YXRlYCB0byBgVkhPU1RfSU9UTEJfTUlTU19SRUFESU5HYCBvbiB0aGUgdmlydHF1ZXVlLCBhbmQgc3RvcmVzIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1pc3MgKGxpa2UgdGhlIHZpcnRxdWV1ZSBwb2ludGVyLCB0aGUgbWVzc2FnZSB0b2tlbiwgYW5kIHRoZSBzZXF1ZW5jZSBudW1iZXIpLiBUaGVuLCBpdCBjb3BpZXMgdGhlIG1lc3NhZ2UgdG8gYSBsb2NhbCBgc25hcHNob3RgIHVuaW9uIGFuZCBleGl0cy4gSWYgdGhlcmUncyBub3QgZW5vdWdoIHNwYWNlIGluIHRoZSBidWZmZXIsIGl0IGp1c3QgcmV0dXJucy5cblxuVGhlIGtleSBvYnNlcnZhdGlvbiBpcyBob3cgdGhlIGRhdGEgaXMgaGFuZGxlZC4gYGZpcnN0LVx1MDAzZW1zZ192MmAgaXMgY29waWVkIHRvIGBzbmFwc2hvdC5tc2dfdjJgLCBhbmQgdGhlIGBzbmFwc2hvdGAgaXMgYSB1bmlvbiB0aGF0IGNvbnRhaW5zIGJvdGggYHZob3N0X21zZ2AgYW5kIGB2aG9zdF9tc2dfdjJgLiBUaGUgY29kZSBzdWJzZXF1ZW50bHkgdXNlcyBgY29weV90b19pdGVyX2Z1bGxgIHRvIGdldCB0aGUgZGF0YSB0byB1c2VyIHNwYWNlLlxuXG5Ob3csIEknbSBhIGJpdCBjb25jZXJuZWQuIFRoZSBwYXRjaCBjb3BpZXMgYGZpcnN0LVx1MDAzZW1zZ192MmAgd2l0aG91dCBhbnkgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGVudGlyZSBgZmlyc3QtXHUwMDNlbXNnX3YyYCBzdHJ1Y3QgYXQgdGhhdCBwb2ludCwgb3RoZXIgdGhhbiBjaGVja2luZyBmb3IgdGhlIHJlcXVpcmVkIGJ1ZmZlciBzaXplLiBMZXQncyBzZWUgaG93IGB2aG9zdF9zZXRfaW90bGJfbWlzc2AgaW5pdGlhbGl6ZXMgdGhpcyBtZXNzYWdlLiBPa2F5LCBpZiBgbm9kZS1cdTAwM2Vtc2cudHlwZSAhPSB0eXBlYCB0aGVuIGl0IHplcm9zIHRoZSBgbm9kZS1cdTAwM2Vtc2dfdjJgLiBCdXQgZG9lcyB0aGF0IGFsd2F5cyBoYXBwZW4/IGB2aG9zdF9zZXRfaW90bGJfbWlzc2AgZ2V0cyBjYWxsZWQgd2l0aGluIGB2aG9zdF9pb3RsYl9taXNzYCwgYnV0IHRoZSBjcnVjaWFsIGNoZWNrIGlzIGluIGB2aG9zdF9uZXdfbXNnYC4gSSBoYXZlIHRvIGNoZWNrIGB2aG9zdF9uZXdfbXNnYCB0byBzZWUgaWYgdGhlIGFsbG9jYXRlZCBgbm9kZWAgaXMgaW5pdGlhbGl6ZWQgdG8gemVybywgYmVmb3JlIGB2aG9zdF9zZXRfaW90bGJfbWlzc2AgZ2V0cyBjYWxsZWQgYW5kIHBvdGVudGlhbGx5IHplcm8ncyBvdXQgdGhlIGBtc2dfdjJgIHVuaW9uLiBJZiBgdmhvc3RfbmV3X21zZ2AgaXNuJ3QgemVyb2luZyB0aGUgbWVtb3J5LCB0aGVuIHRoaXMgaXMgYSBwb3RlbnRpYWwgcmVhZC11bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXR5ISBUaGlzIGlzIHRoZSBtb3N0IGNydWNpYWwgcGFydCB0byBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc5NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNToxMDozMS4yMDkzNzA5OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE3MzMxNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfbmV3X21zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92aG9zdC5jPTE5OTc9c3RhdGljIGludCB2aG9zdF9pb3RsYl9taXNzKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCB1NjQgaW92YSwgaW50IGFjY2VzcylcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yMDE1LVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoyMDE2OlxcdG5vZGUgPSB2aG9zdF9uZXdfbXNnKHZxLCB2MiA/IFZIT1NUX0lPVExCX01TR19WMiA6IFZIT1NUX0lPVExCX01TRyk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTIwMTctXFx0aWYgKCFub2RlKVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jPTM0ODM9RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGlzYWJsZV9ub3RpZnkpO1xcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM0ODUtLyogQ3JlYXRlIGEgbmV3IG1lc3NhZ2UuICovXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjM0ODY6c3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9uZXdfbXNnKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBpbnQgdHlwZSlcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzQ4Ny17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzQ5Ni19XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjM0OTc6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfbmV3X21zZyk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM0OTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjEwOjMxLjI2MTEwNjk5NloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzg5MjE0NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyB0aGUgYHZob3N0X25ld19tc2dgIGltcGxlbWVudGF0aW9uLCBmcm9tIGEgc2Vhc29uZWQgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdmhvc3RfbmV3X21zZyoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYHZob3N0X25ld19tc2dgLiBJJ3ZlIHNlZW4gdGhpcyBmdW5jdGlvbiBiZWZvcmUsIGFuZCBpdCdzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSBpbiBob3cgdmlydHVhbCBob3N0cyBhcmUgZXN0YWJsaXNoZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29yZSBhc3BlY3RzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBjcmVhdGluZyBvciBpbml0aWFsaXppbmcgYSBuZXcgdmlydHVhbCBob3N0IGNvbm5lY3Rpb24sIGxpa2VseSBzaWduYWxpbmcgc29tZSBuZXcgY29ubmVjdGlvbiBpbmZvcm1hdGlvbiBmcm9tIGEgZ3Vlc3QgdG8gdGhlIGhvc3QuXG5cbkknbGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGhhbmRsZXMgcmVzb3VyY2UgYWxsb2NhdGlvbiwgbWVzc2FnZSBwYXJzaW5nLCBhbmQgYW55IGluaXRpYWwgY2hlY2tzIGl0IHBlcmZvcm1zLiBJJ2xsIG5lZWQgdG8gc2VlIGlmIGl0IGludGVyZmFjZXMgZGlyZWN0bHkgd2l0aCB0aGUgdmlydGlvIGRyaXZlciBvciB3aGV0aGVyIGl0IGRlbGVnYXRlcyB0aGVzZSB0YXNrcy5cblxuSSBleHBlY3QgdG8gc2VlIHNvbWUga2luZCBvZiBoYW5kc2hha2UgbG9naWMsIGVuc3VyaW5nIHByb3BlciBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgZ3Vlc3QgYW5kIGhvc3QuIFRoZSBtZXNzYWdlIGxpa2VseSBpbmNsdWRlcyBkZXRhaWxzIGxpa2UgdGhlIGZlYXR1cmVzIG5lZ290aWF0ZWQsIG1lbW9yeSByZWdpb25zIGV4cG9zZWQsIGFuZCBwb3RlbnRpYWxseSBldmVuIGluaXRpYWxpemF0aW9uIGNvbW1hbmRzLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIOKAkyB0aGUgc2V0LXVwIG9mIHRoZSBzaGFyZWQgbWVtb3J5IHJlZ2lvbnMsIHdoaWNoIGFyZSBzbyB2aXRhbCB0byB2aG9zdOKAmXMgZWZmaWNpZW5jeS5cblxuSeKAmW0gYWxzbyBpbnRlcmVzdGVkIGluIGl0cyBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nIGR1cmluZyB0aGUgaW5pdGlhbCBjb25uZWN0aW9uIHNldHVwPyBEb2VzIGl0IHNpbXBseSByZXR1cm4gYW4gZXJyb3IsIG9yIGFyZSB0aGVyZSBtb3JlIGVsYWJvcmF0ZSBtZWNoYW5pc21zIGxpa2UgcmV0cmllcyBvciBmYWxsYmFjayByb3V0aW5lcz8gSXQgc2hvdWxkIGFsc28gY2hlY2sgZm9yIGEgbGFjayBvZiByZXNvdXJjZXMuXG5cblVsdGltYXRlbHksIEnigJltIGFudGljaXBhdGluZyB0aGF0IGB2aG9zdF9uZXdfbXNnYCBpcyB0aGUgZ2F0ZXdheSB0aGF0IHNldHMgdGhlIHN0YWdlIGZvciBhIGhpZ2hseSBvcHRpbWl6ZWQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEl0IGlzIHdoZXJlIGV2ZXJ5dGhpbmcgYmVnaW5zLiBJJ20gZXhjaXRlZCB0byBzZWUgdGhlIGludHJpY2FjaWVzIG9mIGl0cyBleGVjdXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NDksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNToxMDozNS42NTAzMjQ3NjFaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmhvc3Qvdmhvc3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDg1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNDg1OlxcdC8qIENyZWF0ZSBhIG5ldyBtZXNzYWdlLiAqL1xcbjM0ODY6XFx0c3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9uZXdfbXNnKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBpbnQgdHlwZSlcXG4zNDg3OlxcdHtcXG4zNDg4OlxcdFxcdC8qIE1ha2Ugc3VyZSBhbGwgcGFkZGluZyB3aXRoaW4gdGhlIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZC4gKi9cXG4zNDg5OlxcdFxcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSA9IGt6YWxsb2Nfb2JqKCpub2RlKTtcXG4zNDkwOlxcdFxcdGlmICghbm9kZSlcXG4zNDkxOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjM0OTI6XFx0XFxuMzQ5MzpcXHRcXHRub2RlLVxcdTAwM2V2cSA9IHZxO1xcbjM0OTQ6XFx0XFx0bm9kZS1cXHUwMDNlbXNnLnR5cGUgPSB0eXBlO1xcbjM0OTU6XFx0XFx0cmV0dXJuIG5vZGU7XFxuMzQ5NjpcXHR9XFxuMzQ5NzpcXHRFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9uZXdfbXNnKTtcXG4zNDk4OlxcdFxcbjM0OTk6XFx0dm9pZCB2aG9zdF9lbnF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuMzUwMDpcXHRcXHRcXHQgICAgICAgc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlKVxcbjM1MDE6XFx0e1xcbjM1MDI6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWlvdGxiX2xvY2spO1xcbjM1MDM6XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2bm9kZS1cXHUwMDNlbm9kZSwgaGVhZCk7XFxuMzUwNDpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2ZGV2LVxcdTAwM2Vpb3RsYl9sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MTA6MzUuNjUwNTI0MzQxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MzIzNTI4MDM4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjk2NzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2Mjk4MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjE2OjM4Ljg4NTgwNzk1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQ4MDpcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnZxLVxcdTAwM2V1c2VkLVxcdTAwM2VmbGFncywgcik7XFxuMzQ4MTpcXHRcXHR9XFxuMzQ4MjpcXHR9XFxuMzQ4MzpcXHRFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kaXNhYmxlX25vdGlmeSk7XFxuMzQ4NDpcXHRcXG4zNDg1OlxcdC8qIENyZWF0ZSBhIG5ldyBtZXNzYWdlLiAqL1xcbjM0ODY6XFx0c3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9uZXdfbXNnKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBpbnQgdHlwZSlcXG4zNDg3OlxcdHtcXG4zNDg4OlxcdFxcdC8qIE1ha2Ugc3VyZSBhbGwgcGFkZGluZyB3aXRoaW4gdGhlIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZC4gKi9cXG4zNDg5OlxcdFxcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSA9IGt6YWxsb2Nfb2JqKCpub2RlKTtcXG4zNDkwOlxcdFxcdGlmICghbm9kZSlcXG4zNDkxOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjM0OTI6XFx0XFxuMzQ5MzpcXHRcXHRub2RlLVxcdTAwM2V2cSA9IHZxO1xcbjM0OTQ6XFx0XFx0bm9kZS1cXHUwMDNlbXNnLnR5cGUgPSB0eXBlO1xcbjM0OTU6XFx0XFx0cmV0dXJuIG5vZGU7XFxuMzQ5NjpcXHR9XFxuMzQ5NzpcXHRFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9uZXdfbXNnKTtcXG4zNDk4OlxcdFxcbjM0OTk6XFx0dm9pZCB2aG9zdF9lbnF1ZXVlX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjE2OjM4Ljg4NjAwODYyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2MjgxNzE2MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBaZXJvLUluaXRpYWxpemF0aW9uIElzc3VlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSA9IGt6YWxsb2Nfb2JqKCpub2RlKTtgIGxpbmUuIGBremFsbG9jX29iamAuLi4gYWhhLCBpdCdzIHZlcnkgbGlrZWx5IGEgbWFjcm8gZm9yIGFsbG9jYXRpbmcgYW5kIHplcm8taW5pdGlhbGl6aW5nIHRoZSBtZW1vcnkgZm9yIHRoZSBub2RlLiAgVGhhdCBtZWFucyB0aGUgZW50aXJlIGBub2RlYCBvYmplY3QgaXMgemVyb2VkIG91dCBhdCB0aGUgc3RhcnQuICBUaGF0J3MgaW1wb3J0YW50LlxuXG5UaGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLCBpZiBpdCdzIHplcm9lZCwgdGhlbiBhbGwgZmllbGRzIGluIHRoZSBgbm9kZWAgc3RydWN0LCBpbmNsdWRpbmcgYG5vZGUtXHUwMDNlbXNnX3YyYCwgd2lsbCBiZSBpbml0aWFsaXplZCB0byB6ZXJvLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGNvZGUgdGhhdCB1c2VzIHRoaXMgbm9kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgdmhvc3Rfc2V0X2lvdGxiX21pc3NgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgd2l0aCBwYXJ0aWFsbHkgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmVzLlxuXG5SaWdodCwgc28gaGVyZSdzIHdoYXQgYHZob3N0X3NldF9pb3RsYl9taXNzYCBkb2VzOlxuYGBgY1xuc3RhdGljIHZvaWQgdmhvc3Rfc2V0X2lvdGxiX21pc3Moc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlLCBib29sIHYyLFxuXHRcdFx0XHQgdTY0IGlvdmEsIGludCBhY2Nlc3MpXG57XG5cdHN0cnVjdCB2aG9zdF9pb3RsYl9tc2cgKm1zZztcblx0dTMyIHR5cGUgPSB2MiA/IFZIT1NUX0lPVExCX01TR19WMiA6IFZIT1NUX0lPVExCX01TRztcblxuXHRpZiAobm9kZS1cdTAwM2Vtc2cudHlwZSAhPSB0eXBlKVxuXHRcdG1lbXNldChcdTAwMjZub2RlLVx1MDAzZW1zZ192MiwgMCwgc2l6ZW9mKG5vZGUtXHUwMDNlbXNnX3YyKSk7XG5cdG5vZGUtXHUwMDNlbXNnLnR5cGUgPSB0eXBlO1xuXHRtc2cgPSB2aG9zdF9nZXRfaW90bGJfbXNnKG5vZGUpO1xuXG5cdG1zZy1cdTAwM2V0eXBlID0gVkhPU1RfSU9UTEJfTUlTUztcblx0bXNnLVx1MDAzZWlvdmEgPSBpb3ZhO1xuXHRtc2ctXHUwMDNlcGVybSA9IGFjY2Vzcztcbn1cbmBgYFxuXG5Pa2F5LCBzbyBpZiB0aGUgYG5vZGUtXHUwMDNlbXNnLnR5cGVgIGlzbid0IHRoZSBleHBlY3RlZCB0eXBlLCB0aGVuIGl0IHplcm8taW5pdGlhbGl6ZXMgYG5vZGUtXHUwMDNlbXNnX3YyYCBiZWZvcmUgcHJvY2VlZGluZy4gIEl0IHRoZW4gc2V0cyBgbXNnLVx1MDAzZXR5cGVgLCBgbXNnLVx1MDAzZWlvdmFgLCBhbmQgYG1zZy1cdTAwM2VwZXJtYC4gTXkgY29uY2VybiBpcyB3aGV0aGVyIGFueSBvdGhlciBmaWVsZHMgd2l0aGluIGBtc2dgIG1pZ2h0IHJlcXVpcmUgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24uIEl0J3MgYSBxdWljayBmb2xsb3cgdXAsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgbWVtc2V0IGhhbmRsZXMgYWxsIHRoZSByZWxldmFudCBzY2VuYXJpb3MuIEknbGwgdGFrZSBhIHF1aWNrIGdsYW5jZSBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHZob3N0X2lvdGxiX21zZ2AgYW5kIHZlcmlmeSB0aGF0IHRoZSBvdGhlciBmaWVsZHMgYXJlIGVpdGhlciB6ZXJvLWluaXRpYWxpemVkIGJ5IGRlZmF1bHQgb3IgcHJvcGVybHkgaGFuZGxlZCBlbHNld2hlcmUgaW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyOTk2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MTY6NDcuNTE0MTg1MDYxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODc0NTk3NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHZob3N0X2lvdGxiX21zZyBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvdmhvc3QuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MTY6NDcuNTgyOTQyNTY2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODkxNDI4NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSB2aG9zdF9pb3RsYl9tc2cgU3RydWN0dXJlKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBteSBiZWFyaW5ncyBvbiB0aGUgYHZob3N0X2lvdGxiX21zZ2Agc3RydWN0dXJlLiBJJ20gdGhpbmtpbmcgdGhlIGZpcnN0IHBsYWNlIHRvIGxvb2sgaXMgdGhlIHN0YW5kYXJkIGxvY2F0aW9uOiBgaW5jbHVkZS91YXBpL2xpbnV4L3Zob3N0X3R5cGVzLmhgLCBvciBzb21ldGhpbmcgYW5hbG9nb3VzIGluIHRoZSBrZXJuZWwgaGVhZGVycy4gSXQncyBhbG1vc3QgY2VydGFpbiBpdCdsbCBiZSBkZWZpbmVkIHRoZXJlLCBnaXZlbiBpdCdzIGEgbWVzc2FnZSB0eXBlIHJlbGF0ZWQgdG8gdmhvc3QsIGFuZCB0aGUgYHVhcGlgIGRpcmVjdG9yeSBpcyB3aGVyZSB0aGUga2VybmVsIGV4cG9ydHMgc3RydWN0dXJlcyBmb3IgdXNlcnNwYWNlIGludGVyYWN0aW9uLiBJdCdzIHByZXR0eSBmdW5kYW1lbnRhbCwgc28gSSBleHBlY3QgaXQnbGwgYmUgaW4gb25lIG9mIHRoZSBjb3JlIHZob3N0IGhlYWRlciBmaWxlcy4gTGV0IG1lIGdvIHRha2UgYSBsb29rIHRoZXJlLCBhbmQgc2VlIHdoYXQgdGhlIGZpZWxkcyBhcmUgYW5kIGhvdyBpdCdzIGRlZmluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczOTAzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MTY6NTEuMDcyMDg3NTk0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQ4NDUxMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHZob3N0X2lvdGxiX21zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvdmhvc3RfdHlwZXMuaD01OT1zdHJ1Y3Qgdmhvc3RfdnJpbmdfd29ya2VyIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92aG9zdF90eXBlcy5oLTY2LS8qIG5vIGFsaWdubWVudCByZXF1aXJlbWVudCAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC92aG9zdF90eXBlcy5oOjY3OnN0cnVjdCB2aG9zdF9pb3RsYl9tc2cge1xcbmluY2x1ZGUvdWFwaS9saW51eC92aG9zdF90eXBlcy5oLTY4LVxcdF9fdTY0IGlvdmE7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmhvc3RfdHlwZXMuaD05Nj1zdHJ1Y3Qgdmhvc3RfbXNnIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92aG9zdF90eXBlcy5oLTk4LVxcdHVuaW9uIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvdmhvc3RfdHlwZXMuaDo5OTpcXHRcXHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnIGlvdGxiO1xcbmluY2x1ZGUvdWFwaS9saW51eC92aG9zdF90eXBlcy5oLTEwMC1cXHRcXHRfX3U4IHBhZGRpbmdbNjRdO1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3Zob3N0X3R5cGVzLmg9MTA0PXN0cnVjdCB2aG9zdF9tc2dfdjIge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3Zob3N0X3R5cGVzLmgtMTA3LVxcdHVuaW9uIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvdmhvc3RfdHlwZXMuaDoxMDg6XFx0XFx0c3RydWN0IHZob3N0X2lvdGxiX21zZyBpb3RsYjtcXG5pbmNsdWRlL3VhcGkvbGludXgvdmhvc3RfdHlwZXMuaC0xMDktXFx0XFx0X191OCBwYWRkaW5nWzY0XTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MTY6NTEuMjc2OTM4OTFaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY5MTU0MjcxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgc3RydWN0IHZob3N0X2lvdGxiX21zZ2AqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgYHN0cnVjdCB2aG9zdF9pb3RsYl9tc2dgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBJL08gdHJhbnNsYXRpb24gbG9va2FzaWRlIGJ1ZmZlciBtZXNzYWdlIHN0cnVjdHVyZSB3aXRoaW4gdGhlIHZob3N0IGNvbnRleHQuIFRoaXMgbGlrZWx5IGRlYWxzIHdpdGggYWNjZWxlcmF0ZWQgZ3Vlc3QgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBJIG5lZWQgdG8gcGFyc2UgaXRzIGNvbnRlbnRzIHRvIHVuZGVyc3RhbmQgaG93IEkvTyB2aXJ0dWFsIGFkZHJlc3NlcyBhcmUgbWFwcGVkIHRvIHBoeXNpY2FsIGFkZHJlc3NlcywgYW5kIGhvdyB0aGUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSB2aG9zdCBrZXJuZWwgbW9kdWxlIGFuZCB0aGUgdmhvc3QgdXNlcnNwYWNlIGltcGxlbWVudGF0aW9uIGlzIHN0cnVjdHVyZWQgaW4gdGhpcyBjYXNlLiBJIGV4cGVjdCBpdCB0byBoYXZlIGZpZWxkcyByZWxhdGVkIHRvIHRoZSB2aXJ0dWFsIGFkZHJlc3MsIHRoZSBwaHlzaWNhbCBhZGRyZXNzLCB0aGUgc2l6ZSBvZiB0aGUgdHJhbnNsYXRpb24sIGZsYWdzIGluZGljYXRpbmcgbWVtb3J5IGF0dHJpYnV0ZXMgb3IgYWNjZXNzIHBlcm1pc3Npb25zLCBhbmQgcG90ZW50aWFsbHkgYSBzZXF1ZW5jZSBudW1iZXIgZm9yIHRyYWNraW5nIGFuZCBlbnN1cmluZyBvcmRlcmluZy4gSSdtIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgdHlwZXMgdXNlZCBmb3IgdGhlIGFkZHJlc3NlcywgYXMgdGhhdCB3aWxsIHJldmVhbCB0aGUgYWRkcmVzcyBzcGFjZSBhbmQgbWVtb3J5IG1vZGVsIGF0IHBsYXkuIEFyZSB0aGV5IDMyLWJpdCwgNjQtYml0LCBvciBwZXJoYXBzIGV2ZW4gbGFyZ2VyPyBBbnkgaGludHMgYWJvdXQgY2FjaGluZyBiZWhhdmlvciB3b3VsZCBiZSBpbnRlcmVzdGluZy4gSSdtIGVzcGVjaWFsbHkga2VlbiB0byBzZWUgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIGB2aG9zdF9tZW1vcnlgIHN0cnVjdHVyZXMsIGFzIHRoZXkncmUgdGhlIGJyZWFkIGFuZCBidXR0ZXIgb2YgbWVtb3J5IG1hbmFnZW1lbnQgaW4gdGhpcyBhcmNoaXRlY3R1cmUuIExldCdzIHNlZSBpZiB0aGVyZSdzIGFueSBjbGV2ZXIgdHJpY2tlcnkgb3Igb3B0aW1pemF0aW9ucyBiYWtlZCBpbiBoZXJlLCBzdWNoIGFzIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmZWF0dXJlcy4gUmlnaHQsIHRpbWUgdG8gZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDQ4MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjE2OjU1Ljk2ODQ4NTQ5NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvdmhvc3RfdHlwZXMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2NyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2NzpcXHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnIHtcXG4gIDY4OlxcdFxcdF9fdTY0IGlvdmE7XFxuICA2OTpcXHRcXHRfX3U2NCBzaXplO1xcbiAgNzA6XFx0XFx0X191NjQgdWFkZHI7XFxuICA3MTpcXHQjZGVmaW5lIFZIT1NUX0FDQ0VTU19STyAgICAgIDB4MVxcbiAgNzI6XFx0I2RlZmluZSBWSE9TVF9BQ0NFU1NfV08gICAgICAweDJcXG4gIDczOlxcdCNkZWZpbmUgVkhPU1RfQUNDRVNTX1JXICAgICAgMHgzXFxuICA3NDpcXHRcXHRfX3U4IHBlcm07XFxuICA3NTpcXHQjZGVmaW5lIFZIT1NUX0lPVExCX01JU1MgICAgICAgICAgIDFcXG4gIDc2OlxcdCNkZWZpbmUgVkhPU1RfSU9UTEJfVVBEQVRFICAgICAgICAgMlxcbiAgNzc6XFx0I2RlZmluZSBWSE9TVF9JT1RMQl9JTlZBTElEQVRFICAgICAzXFxuICA3ODpcXHQjZGVmaW5lIFZIT1NUX0lPVExCX0FDQ0VTU19GQUlMICAgIDRcXG4gIDc5OlxcdC8qXFxuICA4MDpcXHQgKiBWSE9TVF9JT1RMQl9CQVRDSF9CRUdJTiBhbmQgVkhPU1RfSU9UTEJfQkFUQ0hfRU5EIGFsbG93IG1vZGlmeWluZ1xcbiAgODE6XFx0ICogbXVsdGlwbGUgbWFwcGluZ3MgaW4gb25lIGdvOiBiZWdpbm5pbmcgd2l0aFxcbiAgODI6XFx0ICogVkhPU1RfSU9UTEJfQkFUQ0hfQkVHSU4sIGZvbGxvd2VkIGJ5IGFueSBudW1iZXIgb2ZcXG4gIDgzOlxcdCAqIFZIT1NUX0lPVExCX1VQREFURSBtZXNzYWdlcywgYW5kIGVuZGluZyB3aXRoIFZIT1NUX0lPVExCX0JBVENIX0VORC5cXG4gIDg0OlxcdCAqIFdoZW4gb25lIG9mIHRoZXNlIHR3byB2YWx1ZXMgaXMgdXNlZCBhcyB0aGUgbWVzc2FnZSB0eXBlLCB0aGUgcmVzdFxcbiAgODU6XFx0ICogb2YgdGhlIGZpZWxkcyBpbiB0aGUgbWVzc2FnZSBhcmUgaWdub3JlZC4gVGhlcmUncyBubyBndWFyYW50ZWUgdGhhdFxcbiAgODY6XFx0ICogdGhlc2UgY2hhbmdlcyB0YWtlIHBsYWNlIGF1dG9tYXRpY2FsbHkgaW4gdGhlIGRldmljZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MTY6NTUuOTY4NTc2NTI0WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTg1MzczMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgdmhvc3RfaW90bGJfbXNnIFN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgc3RydWN0IHZob3N0X2lvdGxiX21zZ2AgZGVmaW5pdGlvbi4gSSBzZWUgaXQncyBnb3QgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBJL08gdHJhbnNsYXRpb24gZW50cmllczogYGlvdmFgLCB3aGljaCBpcyB0aGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzczsgYHNpemVgLCB0aGUgZXh0ZW50IG9mIHRoZSBtYXBwaW5nOyBgdWFkZHJgLCB3aGljaCBpcyB0aGUgdXNlci1zcGFjZSB2aXJ0dWFsIGFkZHJlc3M7IGBwZXJtYCwgZGVzY3JpYmluZyB0aGUgYWNjZXNzIHBlcm1pc3Npb25zOyBhbmQgZmluYWxseSwgYHR5cGVgLCB3aGljaCBJJ20gZ3Vlc3Npbmcgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIG1hcHBpbmcuIE5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBvdGhlciBmaWVsZHMgYW5kIHJlbGF0ZWQgc3RydWN0dXJlcyB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgbWVzc2FnZSBvcmNoZXN0cmF0ZXMgdGhlIEkvTyB0cmFuc2xhdGlvbiBwcm9jZXNzLiBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3AgaG93IHRoaXMgaXMgZGVzaWduZWQgc28gdGhhdCBJIGNhbiBvcHRpbWl6ZSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUxOTUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjE2OjU5Ljg2NzExNjkxM1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvdmhvc3RfdHlwZXMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA4NyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4NzpcXHQgKi9cXG4gIDg4OlxcdCNkZWZpbmUgVkhPU1RfSU9UTEJfQkFUQ0hfQkVHSU4gICAgNVxcbiAgODk6XFx0I2RlZmluZSBWSE9TVF9JT1RMQl9CQVRDSF9FTkQgICAgICA2XFxuICA5MDpcXHRcXHRfX3U4IHR5cGU7XFxuICA5MTpcXHR9O1xcbiAgOTI6XFx0XFxuICA5MzpcXHQjZGVmaW5lIFZIT1NUX0lPVExCX01TRyAweDFcXG4gIDk0OlxcdCNkZWZpbmUgVkhPU1RfSU9UTEJfTVNHX1YyIDB4MlxcbiAgOTU6XFx0XFxuICA5NjpcXHRzdHJ1Y3Qgdmhvc3RfbXNnIHtcXG4gIDk3OlxcdFxcdGludCB0eXBlO1xcbiAgOTg6XFx0XFx0dW5pb24ge1xcbiAgOTk6XFx0XFx0XFx0c3RydWN0IHZob3N0X2lvdGxiX21zZyBpb3RsYjtcXG4gMTAwOlxcdFxcdFxcdF9fdTggcGFkZGluZ1s2NF07XFxuIDEwMTpcXHRcXHR9O1xcbiAxMDI6XFx0fTtcXG4gMTAzOlxcdFxcbiAxMDQ6XFx0c3RydWN0IHZob3N0X21zZ192MiB7XFxuIDEwNTpcXHRcXHRfX3UzMiB0eXBlO1xcbiAxMDY6XFx0XFx0X191MzIgYXNpZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MTY6NTkuODY3MjA3OTMzWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0Mjc2OTcyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgdmhvc3QgU3RydWN0dXJlKipcblxuT2theSwgaG9sZCBvbiBhIG1pbnV0ZS4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IHRoZSBgc3RydWN0IHZob3N0X21zZ19ub2RlYCBpcyBkZWZpbmVkIGluIGBkcml2ZXJzL3Zob3N0L3Zob3N0LmhgLiBUaW1lIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkndmUgZ290IHRoZSBjb3JyZWN0IGRlZmluaXRpb24gZm9yIG15IGN1cnJlbnQgYW5hbHlzaXMuIExldCdzIGhlYWQgb3ZlciB0aGVyZSBhbmQgZ2V0IGEgcHJlY2lzZSBsb29rIGF0IGl0cyBtZW1iZXJzIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkLiBHb3R0YSBlbnN1cmUgSSdtIG9wZXJhdGluZyBvbiBzb2xpZCBncm91bmQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdmhvc3QncyBjb21wbGV4aXRpZXMuIFRoaXMgc3RydWN0IGlzIHByb2JhYmx5IGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG1lc3NhZ2UgcGFzc2luZyBvciBkYXRhIHN0cnVjdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NzAzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNToxNzowMy4yOTQ5MDgyODVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MDgyMDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCB2aG9zdF9tc2dfbm9kZSBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92aG9zdC5oPTk1PXN0cnVjdCB2aG9zdF92aXJ0cXVldWUge1xcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5oLTE3NC1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg6MTc1OnN0cnVjdCB2aG9zdF9tc2dfbm9kZSB7XFxuZHJpdmVycy92aG9zdC92aG9zdC5oLTE3Ni0gIHVuaW9uIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MTc6MDMuMzcxOTk1MzU5WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTA2MjY4NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHN0cnVjdCB2aG9zdF9tc2dfbm9kZWAqKlxuXG5Pa2F5LCBsZXQncyBnZXQgaW50byB0aGUgZGV0YWlscyBvZiBgc3RydWN0IHZob3N0X21zZ19ub2RlYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGVzZSBtZXNzYWdlIG5vZGVzIGFyZSBzdHJ1Y3R1cmVkIHdpdGhpbiB0aGUgdmhvc3Qgc3Vic3lzdGVtLiBJJ20gYXNzdW1pbmcgdGhpcyBpcyBhIGNvcmUgYnVpbGRpbmcgYmxvY2sgZm9yIG1hbmFnaW5nIHRoZSBjb21tdW5pY2F0aW9uIGZsb3cgYmV0d2VlbiB0aGUgaG9zdCBhbmQgdGhlIGd1ZXN0LCBsaWtlbHkgdGllZCB0byBzaGFyZWQgbWVtb3J5IGFuZCBldmVudCBjaGFubmVscy4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IGhvdyB0aGlzIHJlbGF0ZXMgdG8gb3RoZXIgZGF0YSBzdHJ1Y3R1cmVzIGluIHRoZSB2aG9zdCBzcGFjZSAtIGlzIHRoaXMgcGFydCBvZiB0aGUgcmluZyBidWZmZXIgbWFuYWdlbWVudCwgb3Igc29tZXRoaW5nIG1vcmUgZnVuZGFtZW50YWwgZm9yIGludGVyLVZNIG1lc3NhZ2luZz8gSSdsbCBiZSBsb29raW5nIGZvciBmaWVsZHMgdGhhdCBwb2ludCB0byBidWZmZXJzLCBkZXNjcmliZSBtZXNzYWdlIHR5cGVzLCBhbmQgaGFuZGxlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLiBNeSBwcmltYXJ5IHF1ZXN0aW9ucyByaWdodCBub3cgcmV2b2x2ZSBhcm91bmQgdGhlIGZpZWxkcyB0aGVtc2VsdmVzIGFuZCBob3cgdGhleSBhcmUgdXNlZCwgbG9va2luZyBmb3IgaW5zaWdodHMgaW50byB0aGUgbG9ja2luZyBzdHJhdGVneSB1c2VkIGZvciBjb25jdXJyZW5jeSBhbmQgaG93IGRhdGEgY29uc2lzdGVuY3kgaXMgYWNoaWV2ZWQuIExldCdzIHNlZSBpZiB0aGlzIHJldmVhbHMgYW55dGhpbmcgYWJvdXQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIGluIHRoZSBtZXNzYWdlIGhhbmRsaW5nIHByb2Nlc3MuIEknbSBhbHNvIGludGVyZXN0ZWQgaW4gaG93IHRoaXMgbm9kZSBpbnRlZ3JhdGVzIHdpdGggdGhlIGxhcmdlciBmcmFtZXdvcmsgLSBpcyBpdCBwYXJ0IG9mIGEgbGlua2VkIGxpc3QsIGEgdHJlZSwgb3Igc29tZSBvdGhlciBvcmdhbml6YXRpb25hbCBzdHJ1Y3R1cmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhpcyBzdHJ1Y3R1cmUg4oCTIGNyZWF0aW9uLCB1c2FnZSwgYW5kIGRlc3RydWN0aW9uIOKAkyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYwMDAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNToxNzowNy40MjI2MjY2MzhaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmhvc3Qvdmhvc3QuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNzU6XFx0c3RydWN0IHZob3N0X21zZ19ub2RlIHtcXG4gMTc2OlxcdCAgdW5pb24ge1xcbiAxNzc6XFx0XFx0ICBzdHJ1Y3Qgdmhvc3RfbXNnIG1zZztcXG4gMTc4OlxcdFxcdCAgc3RydWN0IHZob3N0X21zZ192MiBtc2dfdjI7XFxuIDE3OTpcXHQgIH07XFxuIDE4MDpcXHQgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxO1xcbiAxODE6XFx0ICBzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7XFxuIDE4MjpcXHR9O1xcbiAxODM6XFx0XFxuIDE4NDpcXHRzdHJ1Y3Qgdmhvc3RfZGV2IHtcXG4gMTg1OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbiAxODY6XFx0XFx0c3RydWN0IG11dGV4IG11dGV4O1xcbiAxODc6XFx0XFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqKnZxcztcXG4gMTg4OlxcdFxcdGludCBudnFzO1xcbiAxODk6XFx0XFx0c3RydWN0IGV2ZW50ZmRfY3R4ICpsb2dfY3R4O1xcbiAxOTA6XFx0XFx0c3RydWN0IHZob3N0X2lvdGxiICp1bWVtO1xcbiAxOTE6XFx0XFx0c3RydWN0IHZob3N0X2lvdGxiICppb3RsYjtcXG4gMTkyOlxcdFxcdHNwaW5sb2NrX3QgaW90bGJfbG9jaztcXG4gMTkzOlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgcmVhZF9saXN0O1xcbiAxOTQ6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX2xpc3Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjE3OjA3LjQyMjc0ODc5OFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDU5MDM2NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgdmhvc3RfbmV3X21zZ2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB2aG9zdF9uZXdfbXNnYCBmdW5jdGlvbiBpbiB0aGUgdmhvc3QgY29kZS4gSXQgbG9va3Mgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSBoYXZlIGEgbmFnZ2luZyBmZWVsaW5nIEkgbWlnaHQgaGF2ZSBtaXNzZWQgc29tZXRoaW5nIHN1YnRsZSBpbiBhbiBlYXJsaWVyIHNjYW4uIExldCBtZSBtYWtlIHN1cmUgSSdtIGZvbGxvd2luZy4gVGhlIGdvYWwgaXMgdG8gYWxsb2NhdGUgYSBuZXcgbWVzc2FnZSBub2RlLCBhbmQgdGhlIGNvZGUgYXBwZWFycyB0byBiZSB1c2luZyBga3phbGxvY2AgdG8gZG8gdGhhdC4gSSdtIHNlZWluZyBgc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlID0ga3phbGxvYyhzaXplb2YgKm5vZGUsIEdGUF9LRVJORUwpO2AgLSBzbyBpdCdzIGEga2VybmVsIHplcm8gYWxsb2NhdGlvbiB3aXRoIG1lbW9yeSByZXNlcnZlZCBmcm9tIGBHRlBfS0VSTkVMYC4gVGhpcyBsb29rcyByaWdodCwgYWxsb2NhdGluZyB0aGUgY29ycmVjdCBzaXplLCBlbnN1cmluZyBpbml0aWFsaXphdGlvbiB0byB6ZXJvLiBJIHRob3VnaHQgSSBoYWQgc2VlbiBga3phbGxvY19vYmooKm5vZGUpYCBpbiBhIHByZXZpb3VzIGdsYW5jZSB0aHJvdWdoLCBidXQgSSdtIG1pc3Rha2VuIC0gaXQncyB0aGUgc3RhbmRhcmQgY2FsbCB0byBga3phbGxvY2AsIGFsbG9jYXRpbmcgbWVtb3J5IGZvciB0aGUgYHZob3N0X21zZ19ub2RlYCBzdHJ1Y3R1cmUgYW5kIGluaXRpYWxpemluZyBpdCB0byB6ZXJvLCB3aGljaCBpcyBnb29kIHByYWN0aWNlLiBUaGUgc3Vic2VxdWVudCBhc3NpZ25tZW50cyBvZiBgbm9kZS1cdTAwM2V2cWAgYW5kIGBub2RlLVx1MDAzZW1zZy50eXBlYCBzZWVtIGZpbmUuIEl0J3MgcHJvcGVybHkgaW5pdGlhbGl6aW5nIHRoZSBub2RlJ3MgZmllbGRzLiBUaGUgY3J1Y2lhbCBwYXJ0IGhlcmUgaXMgdGhlIGNvcnJlY3QgYWxsb2NhdGlvbiBvZiBtZW1vcnkuIFRoaXMgYWxsIG1ha2VzIHNlbnNlLCBhbmQgSSB0aGluayBpdCdzIGFzIGl0IHNob3VsZCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY2MTEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNToxNzoxMi40ODE3ODc4NDZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgxMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmhvc3Qvdmhvc3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDg1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNDg1OlxcdC8qIENyZWF0ZSBhIG5ldyBtZXNzYWdlLiAqL1xcbjM0ODY6XFx0c3RydWN0IHZob3N0X21zZ19ub2RlICp2aG9zdF9uZXdfbXNnKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBpbnQgdHlwZSlcXG4zNDg3OlxcdHtcXG4zNDg4OlxcdFxcdC8qIE1ha2Ugc3VyZSBhbGwgcGFkZGluZyB3aXRoaW4gdGhlIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZC4gKi9cXG4zNDg5OlxcdFxcdHN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqbm9kZSA9IGt6YWxsb2Nfb2JqKCpub2RlKTtcXG4zNDkwOlxcdFxcdGlmICghbm9kZSlcXG4zNDkxOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjM0OTI6XFx0XFxuMzQ5MzpcXHRcXHRub2RlLVxcdTAwM2V2cSA9IHZxO1xcbjM0OTQ6XFx0XFx0bm9kZS1cXHUwMDNlbXNnLnR5cGUgPSB0eXBlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNToxNzoxMi40ODIwNzA0MzZaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4MzkwODgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVW5yYXZlbGluZyB0aGUgYGt6YWxsb2Nfb2JqYCBFbmlnbWEqKlxuXG5SaWdodCwgc28gSSdtIHNlZWluZyBga3phbGxvY19vYmooKm5vZGUpYC4gTXkgaW5pdGlhbCBodW5jaCBpcyBzcG90LW9uIOKAkyB0aGF0J3MgZGVmaW5pdGVseSB0aGUgY2FsbCwgYnV0IGEgbWFjcm8/IExldCdzIHF1aWNrbHkgdmVyaWZ5IHRoYXQsIGJlY2F1c2UgdGhhdCdzIHdoYXQncyBnb2luZyB0byBiZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBga3phbGxvY19vYmpgIG1hY3JvIGV4cGFuZHMgdG8uIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIHdoYXQgaXQncyB0cnlpbmcgdG8gZG8gaW4gdGhlIGdyZWF0ZXIgY29udGV4dCBvZiB0aGUgY29kZS4gVGhpcyB3aWxsIGJlIHRoZSBwaXZvdGFsIHBvaW50IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzI1MywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MTc6MTUuODY1OTg0NjMyWiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTQ2OTgxNjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUga3phbGxvY19vYmpcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2xhYi5oPTEwNzA9dm9pZCAqa21hbGxvY19ub2xvY2soc2l6ZV90IHNpemUsIGdmcF90IGdmcF9mbGFncywgaW50IG5vZGUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTE1MS0vKiBBbGwga3phbGxvYyBhbGlhc2VzIGZvciBrbWFsbG9jXyhvYmp8b2Jqc3xmbGV4KS4gKi9cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTUyOiNkZWZpbmUga3phbGxvY19vYmooUCwgLi4uKSBcXFxcXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTE1My1cXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIDEpXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6MTE1NDojZGVmaW5lIGt6YWxsb2Nfb2JqcyhQLCBDT1VOVCwgLi4uKSBcXFxcXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTE1NS1cXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIENPVU5UKVxcbi0tXFxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmg9MjAwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGttZW1fY2FjaGVfc2hlYWZfc2l6ZShzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpXFxuLS1cXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTAtXFxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmg6MjExOiNkZWZpbmUga3phbGxvY19vYmooUCwgLi4uKSBcXFxcXFxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmgtMjEyLVxcdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgMSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MTc6MTguODEyOTc0OTM3WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMzY2NTc4MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBJc3N1ZXMgaW4gdmhvc3QgSU9UTEIgTWlzcyBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEkndmUgbWV0aWN1bG91c2x5IGV4YW1pbmVkIHRoaXMgdmhvc3QgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gSU9UTEIgbWlzcyBoYW5kbGluZy4gTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgYW55IG5ldyBvcHBvcnR1bml0aWVzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSBsZWFrZWQgdG8gdXNlciBzcGFjZSwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuICBMZXQncyBicmVhayBkb3duIG15IHRob3VnaHQgcHJvY2VzczpcblxuKiAgICoqSW5pdGlhbGl6YXRpb24gaXMgS2V5OioqICBUaGUgYGt6YWxsb2Nfb2JqYCBmdW5jdGlvbiwgd2hpY2ggaXMgdXRpbGl6ZWQgZXh0ZW5zaXZlbHkgd2hlbiBjcmVhdGluZyBgdmhvc3RfbXNnX25vZGVgIHN0cnVjdHVyZXMgKGUuZy4sIHdpdGhpbiBgdmhvc3RfbmV3X21zZ2ApLCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQsIHNpbmNlIGl0IGVuc3VyZXMgdGhlIGVudGlyZSBhbGxvY2F0ZWQgbWVtb3J5IGlzIHplcm9lZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBgc3RydWN0IHZob3N0X21zZ19ub2RlYCBhbmQgaXRzIGludGVybmFsIHVuaW9ucyBpcyBhbHdheXMgZGVmaW5lZC4gIEV2ZXJ5IGJpdCBpcyBzZXQgdG8gemVybyBpbml0aWFsbHkuXG5cbiogICAqKmB2aG9zdF9zZXRfaW90bGJfbWlzc2AgXHUwMDI2IFplcm9pbmc6KiogVGhlIGB2aG9zdF9zZXRfaW90bGJfbWlzc2AgZnVuY3Rpb24gaXMgY3J1Y2lhbC4gSWYgdGhlIGBtc2cudHlwZWAgY2hhbmdlcywgaXQgbm93IHVzZXMgYG1lbXNldGAgdG8gemVybyBvdXQgdGhlIGNvbnRlbnRzIG9mIGBtc2dfdjJgIGJlZm9yZSB1cGRhdGluZyBgbXNnLnR5cGVgLiBUaGlzIHByb3RlY3RzIGFnYWluc3QgYW55IHBvdGVudGlhbCBnYXJiYWdlIGxlZnQgaW4gdGhlIGBtc2dfdjJgIHVuaW9uIHdoZW4gYSBWMSBtaXNzIGlzIHJlcGxhY2VkIGJ5IGEgVjIgbWlzcyAob3IgdmljZSB2ZXJzYSkuICBJZiB0aGUgdHlwZXMgYXJlIGlkZW50aWNhbCwgYG1lbXNldGAgaXMgc2tpcHBlZC4gSG93ZXZlciwgdGhlcmUncyBubyBoYXJtIGluIHNraXBwaW5nIHRoZSBgbWVtc2V0YCBiZWNhdXNlIHRoZSBtZW1vcnkgaXMgYWxyZWFkeSB6ZXJvZWQgKGZyb20gdGhlIHByZXZpb3VzIGBremFsbG9jYCBvciBgbWVtc2V0YCkuXG5cbiogICAqKkNvYWxlc2NpbmcgYW5kIFJldXNlOioqIGB2aG9zdF9pb3RsYl9taXNzX2NvYWxlc2NlYCByZXVzZXMgZXhpc3RpbmcgYHZob3N0X21zZ19ub2RlYCBpbnN0YW5jZXMuICBJZiB0aGUgbWlzcyBkYXRhICpkb2Vzbid0KiBjaGFuZ2UsIHRoZSBub2RlIGlzIHJldXNlZC4gIGB2aG9zdF9zZXRfaW90bGJfbWlzc2Agd2lsbCBnZXQgY2FsbGVkLCBpZiBhbnl0aGluZyBjaGFuZ2VkLCB3aGljaCBoYW5kbGVzIHRoZSB6ZXJvaW5nIGFuZCB1cGRhdGVzIGFzIGRlc2NyaWJlZC4gVGhlIGNvZGUgYXZvaWRzIHVubmVjZXNzYXJ5IGBtZW1jcHlgIG9wZXJhdGlvbnMuXG5cbiogICAqKlRoZSBgc25hcHNob3RgIFVuaW9uIGFuZCBDb3B5aW5nIHRvIFVzZXIgU3BhY2U6KiogVGhlIG1haW4gYXJlYSBvZiBjb25jZXJuLCBhbmQgbXkgbWFpbiBmb2N1cywgaXMgdGhlIGludHJvZHVjdGlvbiBvZiB0aGUgbG9jYWwgYHNuYXBzaG90YCB1bmlvbiB3aXRoaW4gYHZob3N0X2Nocl9yZWFkX2l0ZXJgLiAgVGhpcyBpcyB1c2VkIHRvIGhhbmRsZSBjb3B5aW5nIGluZm9ybWF0aW9uIHRvIHVzZXIgc3BhY2Ugd2hpbGUgaG9sZGluZyBsb2Nrcy4gIEkgdGhvcm91Z2hseSBhc3Nlc3NlZCB0aGUgYG1lbWNweWAgb3BlcmF0aW9ucyBmcm9tIHRoZSBgZmlyc3QtXHUwMDNlbXNnX3YyYCBpbnRvIHRoZSBgc25hcHNob3RgIHVuaW9uIGFuZCBzdWJzZXF1ZW50IGBjb3B5X3RvX2l0ZXJfZnVsbGAgdG8gdXNlciBzcGFjZSwgYXMgdGhhdOKAmXMgdGhlIHBhdGggaW50byB1c2VyIHNwYWNlLiBTaW5jZSB0aGUgc291cmNlIGRhdGEgaXMgemVyb2VkIGluaXRpYWxseSwgYW5kIHRoZXJlIGlzIG5vIGNvcHlpbmcgYW55IG90aGVyIGRhdGEgaW50byB0aGUgYHNuYXBzaG90YCB1bmlvbiwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuKiAgICoqQWxpZ25tZW50IGFuZCBQYWRkaW5nOioqICBJIGNhcmVmdWxseSBleGFtaW5lZCB0aGUgcGFkZGluZyB3aXRoaW4gYHN0cnVjdCB2aG9zdF9tc2dgICh3aGljaCBoYXMgNCBieXRlcyBvZiBwYWRkaW5nKSBhbmQgYHN0cnVjdCB2aG9zdF9tc2dfdjJgLCBhcyB0aGlzIGlzIGEgZnJlcXVlbnQgc291cmNlIG9mIGNvbmNlcm4uIEhvd2V2ZXIsIHRoZSBwYWRkaW5nIGluIGBzdHJ1Y3Qgdmhvc3RfbXNnYCBpcyBhbHdheXMgemVyb2VkIGJ5IHRoZSBpbml0aWFsaXphdGlvbi4gVGhpcyB6ZXJvZWQgcGFkZGluZyBnZXRzIGNvcGllZCB0byB0aGUgYHNuYXBzaG90YCB1bmlvbiBhbmQgc3Vic2VxdWVudGx5IGdldHMgY29waWVkIHRvIHVzZXIgc3BhY2UuICBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBieXRlcyBjb3BpZWQuIEFsc28sIHRoZXJlIGlzIG5vIHBhZGRpbmcgYmV0d2VlbiB0aGUgZmllbGRzIG9mIGBzdHJ1Y3Qgdmhvc3RfbXNnX3YyYCwgc28gdGhlcmUncyBubyByaXNrIG9mIGFjY2lkZW50YWxseSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIHRoZXJlLlxuXG4qICAgKipDb250cm9sIEZsb3cgYW5kIFN0YXRlOioqIEkgYW5hbHl6ZWQgYWxsIHJlbGV2YW50IGNvbnRyb2wgZmxvd3MsIGluY2x1ZGluZyBjYXNlcyB3aGVyZSB0aGUgbm9kZSBpcyBjb2FsZXNjZWQgKHJldXNlZCkgb3IgcmV0cmllZCwgYW5kIGFsc28gY2hlY2tlZCBmb3IgYW55IGluZm9ybWF0aW9uIGxlYWtzIG9yIGlzc3VlcyB3aXRoIG1lc3NhZ2UgdHlwZXMgKFYxIHZzLiBWMikuIEl04oCZcyBhbGwgY29uc2lzdGVudCBhbmQgc2FmZS4gVGhlIHVzZSBvZiBgdmhvc3RfaW90bGJfbWlzc19zdGF0ZWAgZW5zdXJlcyBwcm9wZXIgaGFuZGxpbmcgb2YgdGhlIG1lc3NhZ2Ugc3RhdGVzIGFuZCBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMuXG5cbiogICAqKkRhdGEgU3RydWN0dXJlcyBhbmQgSW5pdGlhbGl6YXRpb246KiogSSByZXZpZXdlZCB3aGVyZSBhbmQgaG93IHN0cnVjdHVyZXMgbGlrZSBgdmhvc3RfaW90bGJfbXNnYCBhbmQgYHZob3N0X21zZ19ub2RlYCBhcmUgaW5pdGlhbGl6ZWQsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGltcGFjdCBvZiB0aGUgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggZ3VhcmFudGVlcyB6ZXJvLWluaXRpYWxpemF0aW9uLlxuXG4qICAgKipLTVNBTiBDb25zaWRlcmF0aW9uOioqICBUaGUgY2hhbmdlcyBkbyAqbm90KiBpbnRyb2R1Y2UgS01TQU4gdmlvbGF0aW9ucy4gVGhlIGBtZW1jcHlgIG9wZXJhdGlvbiBpcyBzYWZlIGJlY2F1c2UgdGhlIHNvdXJjZSBgZmlyc3QtXHUwMDNlbXNnX3YyYCBpcyBhbHdheXMgemVyb2VkIChmdWxseSBpbml0aWFsaXplZCkuIFRoZSBsb2dpYyBpcyBzdHJ1Y3R1cmVkIHNvIHRoZXJlIGFyZSBubyBzaXR1YXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtYmVycyB3b3VsZCBnZXQgcmVhZC5cblxuKiAgICoqVW51c2VkIFBhdGggKGZvciB2MSkqKiBUaGUgb2xkZXIgY29kZSBwYXRoIHRvIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlIG5vIGxvbmdlciB1c2VzIHRoZSBgbWVtY3B5YCBhbmQgZG9lcyBub3QgdXNlIGBzbmFwc2hvdGAuIFRoaXMgYXZvaWRzIHVubmVjZXNzYXJ5IGNvcGllcy5cblxuKiAgICoqYHZob3N0X3VudHJhY2tfaW90bGJfbWlzc2AgVXNhZ2U6KiogIFRoZSBmdW5jdGlvbiBgdmhvc3RfdW50cmFja19pb3RsYl9taXNzYCBpcyB1c2VkIHByb3Blcmx5IHRvIHRyYWNrIHRoZSBwb2ludGVycywgYW5kIGlzIGhhbmRsZWQgaW4gYSB3YXkgdGhhdCBhdm9pZHMgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgbGlrZSB1c2UtYWZ0ZXItZnJlZSBidWdzIHdoZW4gdGhlIHZob3N0IG1lc3NhZ2Ugbm9kZXMgYXJlIGZyZWVkIG9yIHVudHJhY2tlZC5cblxuSW4gc2hvcnRcblxuIiwiSW5wdXRUb2tlbnMiOjc3Nzg1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTg1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNToxODozMC4xNzk1NTU0OTlaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNDgyNzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X2RlcXVldWVfbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3Qvdmhvc3QuYz0zNTA4PUVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2VucXVldWVfbXNnKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUwOS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzUxMDpzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKnZob3N0X2RlcXVldWVfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUxMS1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTI1LX1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzUyNjpFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kZXF1ZXVlX21zZyk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MjctXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg9MjczPXZvaWQgdmhvc3RfZW5xdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LFxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5oLTI3NS1cXHRcXHQgICAgICAgc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg6Mjc2OnN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqdmhvc3RfZGVxdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC0yNzctXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNToxODozMC4yNzAwNDQ3NDNaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2NzQ0MjAzOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIENyb3NzLURyaXZlciBEZXBlbmRlbmN5KipcblxuQWxyaWdodCwgdGhpcyBmdW5jdGlvbiBoYXMgYmVlbiBgRVhQT1JUX1NZTUJPTGAnZCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gSXQncyBkZXNpZ25lZCB0byBiZSBleHRlcm5hbGx5IGFjY2Vzc2libGUsIG1lYW5pbmcgb3RoZXIgdmhvc3QgZHJpdmVycyBjb3VsZCBwb3RlbnRpYWxseSBiZSBsZXZlcmFnaW5nIGl0LiBUaGlzIG5lY2Vzc2l0YXRlcyBhIGNhcmVmdWwgbG9vayBhdCB1cHN0cmVhbSB1c2FnZS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiBgdmhvc3RfbmV0YCwgYHZob3N0X3Njc2lgLCBvciBgdmhvc3RfdnNvY2tgIOKAkyBvciBwZXJoYXBzIGV2ZW4gc29tZSBvdGhlciBsZXNzIGNvbW1vbiB2aG9zdCBpbXBsZW1lbnRhdGlvbnMg4oCTIGFyZSBkZXBlbmRpbmcgb24gdGhpcyBmdW5jdGlvbidzIGJlaGF2aW9yLiBJIG5lZWQgdG8gdHJhY2UgdGhlIHJlZmVyZW5jZXMgdG8gZW5zdXJlIHRoYXQgYW55IG1vZGlmaWNhdGlvbiBoZXJlIHdvbid0IGNyZWF0ZSBhbiB1bmV4cGVjdGVkIHJlZ3Jlc3Npb24gaW4gYSBzZWVtaW5nbHkgdW5yZWxhdGVkIGFyZWEgb2YgdGhlIHZob3N0IHN1YnN5c3RlbS4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hvJ3MgY2FsbGluZyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkwMDcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNToyNDozNy4wMTQyNTM2OVoiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNzA3ODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X2RlcXVldWVfbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3Qvdmhvc3QuYz0zNTA4PUVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2VucXVldWVfbXNnKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUwOS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzUxMDpzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUgKnZob3N0X2RlcXVldWVfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzUxMS1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTI1LX1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzUyNjpFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kZXF1ZXVlX21zZyk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MjctXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg9MjczPXZvaWQgdmhvc3RfZW5xdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LFxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5oLTI3NS1cXHRcXHQgICAgICAgc3RydWN0IHZob3N0X21zZ19ub2RlICpub2RlKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg6Mjc2OnN0cnVjdCB2aG9zdF9tc2dfbm9kZSAqdmhvc3RfZGVxdWV1ZV9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC0yNzctXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNToyNDozNy4xMTc5NjYzNDJaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY3MzMxOTY5MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gSnVzdGlmaWNhdGlvbiBmb3IgVmhvc3QgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYHZob3N0X2RlcXVldWVfbXNnYCBpc24ndCB1c2VkICphbnl3aGVyZSogaW4gdGhlIGBkcml2ZXJzL3Zob3N0L2AgZGlyZWN0b3J5LCB3aGljaCBpcyBpbnRlcmVzdGluZy4gIGB2aG9zdF9jaHJfcmVhZF9pdGVyYCB1c2VkIHRvIGNhbGwgaXQsIGJ1dCBub3QgYW55bW9yZSBmb3IgdGhlIGByZWFkX2xpc3RgLiAgSXMgaXQgYmVpbmcgdXNlZCB3aXRoIGBwZW5kaW5nX2xpc3RgPyBOb3BlLCBgdmhvc3RfY2hyX3JlYWRfaXRlcmAgaXNuJ3QgdG91Y2hpbmcgdGhhdCBxdWV1ZSB3aXRoIHRoaXMgZnVuY3Rpb24uIEFoYSEgSSByZW1lbWJlciBub3cgLSBgcGVuZGluZ19saXN0YCBpcyBjbGVhcmVkIGluIGB2aG9zdF9jbGVhcl9tc2dgIGFuZCBgdmhvc3RfaW90bGJfbm90aWZ5X3ZxYC5cblxuU28sIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBJT1RMQiBtaXNzIGZsb29kIHZ1bG5lcmFiaWxpdHksIG9yIHJldHJ5IHByb2JsZW1zLlxuXG5Dcml0aWNhbGx5LCB0aGUgcGF0Y2ggKmRvZXNuJ3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MsIGFuZCBJIG5lZWQgdG8gZG9jdW1lbnQgdGhlIHJlYXNvbmluZy4gVGhlIGBzbmFwc2hvdGAgdW5pb24gaXMgY29tcGxldGVseSBwb3B1bGF0ZWQgdGhyb3VnaCBhIGBtZW1jcHlgIGZyb20gYSBmdWxseSB6ZXJvZWQgYHN0cnVjdCB2aG9zdF9tc2dfbm9kZWAgdGhhdCB3YXMgYGt6YWxsb2Nfb2JqYCBhbGxvY2F0ZWQgYW5kIHplcm9lZC4gIFdlIGFyZSBub3QgcHVsbGluZyBhbnkgc3RhbGUgZGF0YSwgbm9yIGFyZSB3ZSBsZWFraW5nIGFueSB1bmluaXRpYWxpemVkIHBhZGRpbmcuICBUaGUgYHN0cnVjdCB2aG9zdF9tc2dgIHBhZGRpbmcsIGFuZCBhbnkgcGFkZGluZyBpbiB0aGUgYHN0cnVjdCB2aG9zdF9tc2dfdjJgLCBpcyBhbHNvIHplcm9lZC4gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIHVzZWQgaW4gYW55IGNvbmRpdGlvbmFsIGxvZ2ljLCBhbmQgdGhlcmUgYXJlIG5vIGNvbXBsZXggc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGVyZSBhcmUgbm8gYm91bmRzIGNoZWNrIGlzc3VlcyBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG1lbW9yeSBsZWFrcyBmcm9tIHVuaW5pdGlhbGl6ZWQgYnVmZmVycy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gc2l6ZXMgdGhvdWdoLiBMZXQgbWUgY2hlY2sgdGhlIGBzbmFwc2hvdGAgdW5pb24gc2l6ZSBhbmQgdGhlIGBjb3B5X3RvX2l0ZXJfZnVsbGAgY2FsbC5cblxuYGBgY1xuXHR1bmlvbiB7XG5cdFx0c3RydWN0IHZob3N0X21zZyBtc2c7XG5cdFx0c3RydWN0IHZob3N0X21zZ192MiBtc2dfdjI7XG5cdH0gc25hcHNob3Q7XG5gYGBcblxuYHNpemVvZihzbmFwc2hvdClgIGlzIHRoZSBtYXhpbXVtIG9mIHRoZSBzaXplcyBvZiB0aGUgdHdvIHN0cnVjdHVyZXMgd2l0aGluIHRoZSB1bmlvbi4gYHNpemVvZihzdHJ1Y3Qgdmhvc3RfbXNnKWAgaXMgNCAodHlwZSkgKyA0IChwYWRkaW5nKSArIDY0ICh1bmlvbikgPSA3MiBieXRlcy4gYHNpemVvZihzdHJ1Y3Qgdmhvc3RfbXNnX3YyKWAgaXMgNCAodHlwZSkgKyA0IChhc2lkKSArIDY0ICh1bmlvbikgPSA3MiBieXRlcy4gIFNvLCBib3RoIGFyZSA3MiBieXRlcy4gIFRoZSBgc2l6ZWAgYXJndW1lbnQgaW4gdGhlIGBtZW1jcHlgIGlzIGVpdGhlciBgc2l6ZW9mKGZpcnN0LVx1MDAzZW1zZ192MilgICg3Mikgb3IgYHNpemVvZihmaXJzdC1cdTAwM2Vtc2cpYCAoNzIpLCBzbyBhbHdheXMgNzIgYnl0ZXMuICBUaGUgYG1lbWNweShcdTAwMjZzbmFwc2hvdC5tc2dfdjIsIFx1MDAyNmZpcnN0LVx1MDAzZW1zZ192Miwgc2l6ZSk7YCBjb3BpZXMgNzIgYnl0ZXMsIGFuZCB0aGUgYGNvcHlfdG9faXRlcl9mdWxsYCBhbHNvIGNvcGllcyA3MiBieXRlcy4gIEV2ZXJ5dGhpbmcgaXMgcGVyZmVjdGx5IHNpemVkIGFuZCBpbml0aWFsaXplZC4gTm8gaXNzdWVzLlxuXG5UaGVyZWZvcmUsIHRoZSByZWFzb25pbmcgaXMgYXMgZm9sbG93czpcblxuMS4gIEEgbG9jYWwgYHNuYXBzaG90YCB1bmlvbiBpcyBpbnRyb2R1Y2VkIGFuZCBjb3BpZWQgdG8gdXNlciBzcGFjZSBpbiBgdmhvc3RfY2hyX3JlYWRfaXRlcmAuXG4yLiAgYHNuYXBzaG90YCBpcyBwb3B1bGF0ZWQgdXNpbmcgYG1lbWNweWAgZnJvbSBgZmlyc3QtXHUwMDNlbXNnX3YyYCBvciBgZmlyc3QtXHUwMDNlbXNnYC5cbjMuICBgZmlyc3RgIGlzIGEgYHN0cnVjdCB2aG9zdF9tc2dfbm9kZWAgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCBpbiBgdmhvc3RfbmV3X21zZ2AsIHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIGVudGlyZSBzdHJ1Y3R1cmUuXG40LiAgSWYgYHZob3N0X3NldF9pb3RsYl9taXNzYCBjaGFuZ2VzIHRoZSBtZXNzYWdlIHR5cGUsIGl0IGV4cGxpY2l0bHkgemVybydzIHRoZSBlbnRpcmUgbWVzc2FnZS5cbjUuIFRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIHRvIHVzZXIgc3BhY2UgKGBzaXplYCkgbWF0Y2hlcyB0aGUgaW5pdGlhbGl6ZWQgbWVzc2FnZSBzdHJ1Y3R1cmUuXG42LiBUaHVzLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBjYW4gbGVhayB0byB1c2VyIHNwYWNlLlxuNy4gIFRoZSByZXN0IGZvY3VzZXMgb24gbGlzdCBtYW5pcHVsYXRpb25zLCBgaW90bGJfbWlzc19zdGF0ZWAgdHJhY2tpbmcsIGFuZCBjb2FsZXNjaW5nIGxvZ2ljLCBmb3IgZmxvb2QgY29udHJvbC4gQW55IGJ1Z3MgaGVyZSB3b3VsZCBtYW5pZmVzdCBhcyBsb2dpY2FsIGVycm9ycywgZGVhZGxvY2tzLCBvciBVQUYvT09CIGFjY2Vzc2VzLCBhbmQgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAgYW5kIEtDU0FOLlxuOC4gIFRoZXJlIGlzIG5vIG5lZWQgZm9yIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uXG5cbkknbSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LiBJJ2xsIGludm9rZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTU2MCwiT3V0cHV0VG9rZW5zIjozMTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MjQ6NTMuODUxMTY3Mzk1WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9jYWwgYHNuYXBzaG90YCB1bmlvbiBpbiBgdmhvc3RfY2hyX3JlYWRfaXRlcmAgd2hpY2ggaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgdmlhIGBjb3B5X3RvX2l0ZXJfZnVsbGAuIEhvd2V2ZXIsIHRoaXMgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyBiZWNhdXNlOlxcbjEuIFRoZSBgc25hcHNob3RgIGlzIHBvcHVsYXRlZCB1c2luZyBgbWVtY3B5YCBmcm9tIGFuIGV4aXN0aW5nIG1lc3NhZ2Ugbm9kZSAoYGZpcnN0LVxcdTAwM2Vtc2dfdjJgIG9yIGBmaXJzdC1cXHUwMDNlbXNnYCkuXFxuMi4gVGhlIHNvdXJjZSBtZXNzYWdlIG5vZGUgaXMgYWxsb2NhdGVkIGluIGB2aG9zdF9uZXdfbXNnYCB1c2luZyBga3phbGxvY2AgKHZpYSBga3phbGxvY19vYmpgKSwgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBlbnRpcmUgc3RydWN0dXJlLCBpbmNsdWRpbmcgYW55IGNvbXBpbGVyLWluc2VydGVkIHBhZGRpbmcsIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuXFxuMy4gV2hlbiBhIG1lc3NhZ2UgaXMgcmV1c2VkIGFuZCBpdHMgdHlwZSBjaGFuZ2VzLCBgdmhvc3Rfc2V0X2lvdGxiX21pc3NgIGV4cGxpY2l0bHkgY2FsbHMgYG1lbXNldGAgdG8gemVybyBvdXQgdGhlIG1lc3NhZ2UgZmllbGRzLCBlbnN1cmluZyBubyBzdGFsZSBkYXRhIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyByZW1haW5zLlxcbjQuIFRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIHRvIHVzZXIgc3BhY2UgZXhhY3RseSBtYXRjaGVzIHRoZSBzaXplIG9mIHRoZSBmdWxseSBpbml0aWFsaXplZCBtZXNzYWdlIHN0cnVjdHVyZS5cXG5cXG5UaGUgcmVtYWluZGVyIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBsaXN0IG1hbmlwdWxhdGlvbnMsIHN0YXRlIHRyYWNraW5nIChgaW90bGJfbWlzc19zdGF0ZWApLCBhbmQgY29hbGVzY2luZyBsb2dpYyB0byBwcmV2ZW50IElPVExCIG1pc3MgZmxvb2RzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGxpc3QgY29ycnVwdGlvbiwgb3IgZGVhZGxvY2tzKSBhcmUgcGVyZmVjdGx5IHN1aXRlZCBmb3Igc3RhbmRhcmQgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NhbCBgc25hcHNob3RgIHVuaW9uIGluIGB2aG9zdF9jaHJfcmVhZF9pdGVyYCB3aGljaCBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSB2aWEgYGNvcHlfdG9faXRlcl9mdWxsYC4gSG93ZXZlciwgdGhpcyBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIGJlY2F1c2U6XFxuMS4gVGhlIGBzbmFwc2hvdGAgaXMgcG9wdWxhdGVkIHVzaW5nIGBtZW1jcHlgIGZyb20gYW4gZXhpc3RpbmcgbWVzc2FnZSBub2RlIChgZmlyc3QtXFx1MDAzZW1zZ192MmAgb3IgYGZpcnN0LVxcdTAwM2Vtc2dgKS5cXG4yLiBUaGUgc291cmNlIG1lc3NhZ2Ugbm9kZSBpcyBhbGxvY2F0ZWQgaW4gYHZob3N0X25ld19tc2dgIHVzaW5nIGBremFsbG9jYCAodmlhIGBremFsbG9jX29iamApLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIGVudGlyZSBzdHJ1Y3R1cmUsIGluY2x1ZGluZyBhbnkgY29tcGlsZXItaW5zZXJ0ZWQgcGFkZGluZywgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC5cXG4zLiBXaGVuIGEgbWVzc2FnZSBpcyByZXVzZWQgYW5kIGl0cyB0eXBlIGNoYW5nZXMsIGB2aG9zdF9zZXRfaW90bGJfbWlzc2AgZXhwbGljaXRseSBjYWxscyBgbWVtc2V0YCB0byB6ZXJvIG91dCB0aGUgbWVzc2FnZSBmaWVsZHMsIGVuc3VyaW5nIG5vIHN0YWxlIGRhdGEgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nIHJlbWFpbnMuXFxuNC4gVGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBleGFjdGx5IG1hdGNoZXMgdGhlIHNpemUgb2YgdGhlIGZ1bGx5IGluaXRpYWxpemVkIG1lc3NhZ2Ugc3RydWN0dXJlLlxcblxcblRoZSByZW1haW5kZXIgb2YgdGhlIHBhdGNoIGludm9sdmVzIGxpc3QgbWFuaXB1bGF0aW9ucywgc3RhdGUgdHJhY2tpbmcgKGBpb3RsYl9taXNzX3N0YXRlYCksIGFuZCBjb2FsZXNjaW5nIGxvZ2ljIHRvIHByZXZlbnQgSU9UTEIgbWlzcyBmbG9vZHMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgbGlzdCBjb3JydXB0aW9uLCBvciBkZWFkbG9ja3MpIGFyZSBwZXJmZWN0bHkgc3VpdGVkIGZvciBzdGFuZGFyZCBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow25n6q[1] Phase: Succeeded StartedAt: 2026-08-10 15:25:05 +0000 UTC FinishedAt: 2026-08-10 15:25:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow25n6q[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-10 15:25:05 +0000 UTC FinishedAt: 2026-08-10 15:25:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow25n6q[2] Phase: Succeeded StartedAt: 2026-08-10 15:25:05 +0000 UTC FinishedAt: 2026-08-10 19:15:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-10 15:25:05 +0000 UTC FinishedAt: 2026-08-10 19:15:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-10 15:25:05 +0000 UTC FinishedAt: 2026-08-10 15:25:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-10 15:25:05 +0000 UTC FinishedAt: 2026-08-10 15:25:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflow25n6q/series-workflow25n6q-convert-artifact-450759343/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-10 15:25:15 +0000 UTC FinishedAt: 2026-08-10 15:46:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-10 15:25:15 +0000 UTC FinishedAt: 2026-08-10 15:46:53 +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:*cc7e79f9-eda7-4dd3-8c59-952d23d3a6ca,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-workflow25n6q/series-workflow25n6q-convert-artifact-450759343/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": "a8d19d03-9d6e-43c9-bbcc-8c06a7143db8", "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-workflow25n6q/series-workflow25n6q-build-action-3171651701/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-10 15:25:15 +0000 UTC FinishedAt: 2026-08-10 15:46:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*cc7e79f9-eda7-4dd3-8c59-952d23d3a6ca,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-workflow25n6q/series-workflow25n6q-convert-artifact-450759343/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": "a8d19d03-9d6e-43c9-bbcc-8c06a7143db8", "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-workflow25n6q/series-workflow25n6q-build-action-3171651701/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-10 15:46:53 +0000 UTC FinishedAt: 2026-08-10 15:46:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-10 15:46:53 +0000 UTC FinishedAt: 2026-08-10 15:46:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-10 15:46:53 +0000 UTC FinishedAt: 2026-08-10 15:47:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-10 15:46:53 +0000 UTC FinishedAt: 2026-08-10 15:46:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflow25n6q/series-workflow25n6q-convert-artifact-1548414206/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-10 15:47:04 +0000 UTC FinishedAt: 2026-08-10 15:49:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-10 15:47:05 +0000 UTC FinishedAt: 2026-08-10 15:48:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a8d19d03-9d6e-43c9-bbcc-8c06a7143db8,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-workflow25n6q/series-workflow25n6q-build-action-3171651701/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-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-10 15:49:02 +0000 UTC FinishedAt: 2026-08-10 15:49:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-10 15:49:02 +0000 UTC FinishedAt: 2026-08-10 15:49:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-10 15:49:02 +0000 UTC FinishedAt: 2026-08-10 16:10:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-10 15:49:02 +0000 UTC FinishedAt: 2026-08-10 16:10: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:*cc7e79f9-eda7-4dd3-8c59-952d23d3a6ca,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-workflow25n6q/series-workflow25n6q-convert-artifact-1548414206/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": "d10731ab-d9cc-4ce2-b539-2d8ecf956cb2", "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-workflow25n6q/series-workflow25n6q-build-action-348240210/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-10 15:49:02 +0000 UTC FinishedAt: 2026-08-10 16:10:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*cc7e79f9-eda7-4dd3-8c59-952d23d3a6ca,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-workflow25n6q/series-workflow25n6q-convert-artifact-1548414206/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": "d10731ab-d9cc-4ce2-b539-2d8ecf956cb2", "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-workflow25n6q/series-workflow25n6q-build-action-348240210/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-10 16:10:59 +0000 UTC FinishedAt: 2026-08-10 16:10:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-10 16:10:59 +0000 UTC FinishedAt: 2026-08-10 16:10:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-10 16:10:59 +0000 UTC FinishedAt: 2026-08-10 16:13:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-10 16:10:59 +0000 UTC FinishedAt: 2026-08-10 16:12:58 +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:*d10731ab-d9cc-4ce2-b539-2d8ecf956cb2,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-workflow25n6q/series-workflow25n6q-build-action-348240210/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-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-10 16:13:11 +0000 UTC FinishedAt: 2026-08-10 19:15:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-10 16:13:11 +0000 UTC FinishedAt: 2026-08-10 19:15:59 +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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"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:*a8d19d03-9d6e-43c9-bbcc-8c06a7143db8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d10731ab-d9cc-4ce2-b539-2d8ecf956cb2,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-workflow25n6q/series-workflow25n6q-build-action-3171651701/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-workflow25n6q/series-workflow25n6q-build-action-348240210/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-10 16:13:11 +0000 UTC FinishedAt: 2026-08-10 16:13:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-10 16:13:11 +0000 UTC FinishedAt: 2026-08-10 16:13:18 +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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"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-workflow25n6q/series-workflow25n6q-convert-artifact-1465263107/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-10 16:13:11 +0000 UTC FinishedAt: 2026-08-10 16:13:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-10 16:13:11 +0000 UTC FinishedAt: 2026-08-10 16:13:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-10 16:13:11 +0000 UTC FinishedAt: 2026-08-10 16:13:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-10 16:13:26 +0000 UTC FinishedAt: 2026-08-10 19:15:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow25n6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_chr_read_iter","vhost_init_device_iotlb","vhost_clear_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK"],"series_id":"7e5d7f22-3161-4b3f-a71a-6e26ca96ac05","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-10 16:13:26 +0000 UTC FinishedAt: 2026-08-10 19:15:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a8d19d03-9d6e-43c9-bbcc-8c06a7143db8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d10731ab-d9cc-4ce2-b539-2d8ecf956cb2,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-workflow25n6q/series-workflow25n6q-build-action-3171651701/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-workflow25n6q/series-workflow25n6q-build-action-348240210/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-workflow25n6q/series-workflow25n6q-convert-artifact-1465263107/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,}