Name: series-workflowvmsws Phase: Succeeded StartedAt: 2026-08-09 21:35:50 +0000 UTC FinishedAt: 2026-08-09 23:31:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmsws[0] Phase: Succeeded StartedAt: 2026-08-09 21:35:50 +0000 UTC FinishedAt: 2026-08-09 21:54:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmsws[0].run-triage Phase: Succeeded StartedAt: 2026-08-09 21:35:50 +0000 UTC FinishedAt: 2026-08-09 21:54:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dd057113ac7ba5bdd2aed3d9405305911152f911", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OVPN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dd057113ac7ba5bdd2aed3d9405305911152f911", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OVPN" ], "series_id": "a4ced93a-dc5f-4de7-8639-cb332917801d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ovpn_crypto_key_slot_release", "ovpn_crypto_kill_key", "ovpn_aead_crypto_key_slot_new", "ovpn_peer_keepalive_set", "ovpn_peer_keepalive_work" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDIxOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09WUE4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnBuX2NyeXB0b19rZXlfc2xvdF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O292cG5fY3J5cHRvX2tpbGxfa2V5JiMzNDssCiAgICAmIzM0O292cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3JiMzNDssCiAgICAmIzM0O292cG5fcGVlcl9rZWVwYWxpdmVfc2V0JiMzNDssCiAgICAmIzM0O292cG5fcGVlcl9rZWVwYWxpdmVfd29yayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBmb2N1c2VzIG9uIGZpeGluZyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgLCByZW9yZGVyaW5nIGNsZWFudXAgZnVuY3Rpb25zIHRvIHByZXZlbnQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIGFuZCBtaWdyYXRpbmcgd29yayBpdGVtcyBmcm9tIHRoZSBzeXN0ZW0gd29ya3F1ZXVlIHRvIGEgZGVkaWNhdGVkIGBvdnBuX3dxYCB3b3JrcXVldWUuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoTlVMTCBkZXJlZmVyZW5jZXMsIFVBRikgYW5kIGNvbmN1cnJlbmN5IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBubyBjaGFuZ2VzIHRvIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPcGVuVlBOIGRhdGEgY2hhbm5lbCBvZmZsb2FkIGRyaXZlciAoZHJpdmVycy9uZXQvb3ZwbikuIEl0IHJlcGxhY2VzIGNhbGxfcmN1IHdpdGggcXVldWVfcmN1X3dvcmsgZm9yIGZyZWVpbmcgY3J5cHRvIGtleSBzbG90cywgaW50cm9kdWNlcyBhIGRlZGljYXRlZCB3b3JrcXVldWUgKG92cG5fd3EpIGZvciBhbGwgb3Zwbi1zcGVjaWZpYyB3b3JrLCBhbmQgZml4ZXMgYSBsb2dpYyBidWcgaW4gb3Zwbl9jcnlwdG9fa2lsbF9rZXkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gYSByZWFjaGFibGUgbmV0d29yayBkcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMjE6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhOTVmMjZkYjUyMjJkNjJhMWZlMzkyNDBjNDhmOGUwYWViOTE2NjA5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgOSAyMTo1Mjo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jIGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uY1xuaW5kZXggOTA1ODBlMzIwNTJmYi4uN2U1NDU0Mjg5MDBhOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmNcbkBAIC0xOCwyMCAmIzQzOzE4LDEyIEBAXG4gI2luY2x1ZGUgXCYjMzQ7Y3J5cHRvX2FlYWQuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2NyeXB0by5oXCYjMzQ7XG4gXG4tc3RhdGljIHZvaWQgb3Zwbl9rc19kZXN0cm95X3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4te1xuLVx0c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcztcbi1cbi1cdGtzID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCwgcmN1KTtcbi1cdG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZGVzdHJveShrcyk7XG4tfVxuLVxuIHZvaWQgb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiB7XG4gXHRzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzO1xuIFxuIFx0a3MgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90LCByZWZjb3VudCk7XG4tXHRjYWxsX3JjdShcdTAwMjZrcy1cdTAwM2VyY3UsIG92cG5fa3NfZGVzdHJveV9yY3UpO1xuJiM0MztcdHF1ZXVlX3JjdV93b3JrKG92cG5fd3EsIFx1MDAyNmtzLVx1MDAzZWZyZWVfd29yayk7XG4gfVxuIFxuIC8qIGNhbiBvbmx5IGJlIGludm9rZWQgd2hlbiBhbGwgcGVlciByZWZlcmVuY2VzIGhhdmUgYmVlbiBkcm9wcGVkIChpLmUuIFJDVVxuQEAgLTU4LDE1ICYjNDM7NTAsMTkgQEAgdm9pZCBvdnBuX2NyeXB0b19zdGF0ZV9yZWxlYXNlKHN0cnVjdCBvdnBuX2NyeXB0b19zdGF0ZSAqY3MpXG4gYm9vbCBvdnBuX2NyeXB0b19raWxsX2tleShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzLCB1OCBrZXlfaWQpXG4ge1xuIFx0c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcyA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICp0bXA7XG4mIzQzO1x0aW50IHNsb3QgPSAwO1xuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmNzLVx1MDAzZWxvY2spO1xuLVx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihjcy1cdTAwM2VzbG90c1swXSktXHUwMDNla2V5X2lkID09IGtleV9pZCkge1xuLVx0XHRrcyA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoY3MtXHUwMDNlc2xvdHNbMF0sIE5VTEwsXG4tXHRcdFx0XHRcdCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2Y3MtXHUwMDNlbG9jaykpO1xuLVx0fSBlbHNlIGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoY3MtXHUwMDNlc2xvdHNbMV0pLVx1MDAzZWtleV9pZCA9PSBrZXlfaWQpIHtcbi1cdFx0a3MgPSByY3VfcmVwbGFjZV9wb2ludGVyKGNzLVx1MDAzZXNsb3RzWzFdLCBOVUxMLFxuLVx0XHRcdFx0XHQgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmNzLVx1MDAzZWxvY2spKTtcbiYjNDM7XHR0bXAgPSByY3VfYWNjZXNzX3BvaW50ZXIoY3MtXHUwMDNlc2xvdHNbc2xvdF0pO1xuJiM0MztcdGlmICghdG1wIHx8IHRtcC1cdTAwM2VrZXlfaWQgIT0ga2V5X2lkKSB7XG4mIzQzO1x0XHRzbG90ID0gMTtcbiYjNDM7XHRcdHRtcCA9IHJjdV9hY2Nlc3NfcG9pbnRlcihjcy1cdTAwM2VzbG90c1tzbG90XSk7XG4gXHR9XG4mIzQzO1xuJiM0MztcdGlmICh0bXAgXHUwMDI2XHUwMDI2IHRtcC1cdTAwM2VrZXlfaWQgPT0ga2V5X2lkKVxuJiM0MztcdFx0a3MgPSByY3VfcmVwbGFjZV9wb2ludGVyKGNzLVx1MDAzZXNsb3RzW3Nsb3RdLCBOVUxMLFxuJiM0MztcdFx0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZjcy1cdTAwM2Vsb2NrKSk7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZjcy1cdTAwM2Vsb2NrKTtcbiBcbiBcdGlmIChrcylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oIGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaFxuaW5kZXggMGUyODRmZWMzYTc1YS4uZTNmZWIxNmQ1NDk4NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmhcbkBAIC0xMCw2ICYjNDM7MTAsOCBAQFxuICNpZm5kZWYgX05FVF9PVlBOX09WUE5DUllQVE9fSF9cbiAjZGVmaW5lIF9ORVRfT1ZQTl9PVlBOQ1JZUFRPX0hfXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4mIzQzO1xuICNpbmNsdWRlIFwmIzM0O3BrdGlkLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtwcm90by5oXCYjMzQ7XG4gXG5AQCAtNDUsOCAmIzQzOzQ3LDggQEAgc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90IHtcbiBcbiBcdHN0cnVjdCBvdnBuX3BrdGlkX3JlY3YgcGlkX3JlY3YgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcbiBcdHN0cnVjdCBvdnBuX3BrdGlkX3htaXQgcGlkX3htaXQgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcbiYjNDM7XHRzdHJ1Y3QgcmN1X3dvcmsgZnJlZV93b3JrO1xuIFx0c3RydWN0IGtyZWYgcmVmY291bnQ7XG4tXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuIH07XG4gXG4gc3RydWN0IG92cG5fY3J5cHRvX3N0YXRlIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmMgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmNcbmluZGV4IDhmMDdjNDE4NjIyYjIuLjc0ZWFmNmZhYzJmNTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuY1xuQEAgLTksNiAmIzQzOzksNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2NyeXB0by9hZWFkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC91ZHAuaFx1MDAzZVxuQEAgLTM4MCwxMyAmIzQzOzM4MSwxOSBAQCBzdGF0aWMgc3RydWN0IGNyeXB0b19hZWFkICpvdnBuX2FlYWRfaW5pdChjb25zdCBjaGFyICp0aXRsZSxcbiBcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gfVxuIFxuLXZvaWQgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9kZXN0cm95KHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MpXG4mIzQzO3N0YXRpYyB2b2lkIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZnJlZShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzKVxuIHtcbi1cdGlmICgha3MpXG4tXHRcdHJldHVybjtcbi1cbiBcdGNyeXB0b19mcmVlX2FlYWQoa3MtXHUwMDNlZW5jcnlwdCk7XG4gXHRjcnlwdG9fZnJlZV9hZWFkKGtzLVx1MDAzZWRlY3J5cHQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2ZyZWVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzO1xuJiM0MztcbiYjNDM7XHRrcyA9IGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSwgc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90LFxuJiM0MztcdFx0XHQgIGZyZWVfd29yayk7XG4mIzQzO1x0b3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9mcmVlKGtzKTtcbiBcdGtmcmVlKGtzKTtcbiB9XG4gXG5AQCAtNDIwLDYgJiM0Mzs0MjcsNyBAQCBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X25ldyhjb25zdCBzdHJ1Y3Qgb3Zwbl9rZXlfY29uZmlnICprYylcbiBcbiBcdGtzLVx1MDAzZWVuY3J5cHQgPSBOVUxMO1xuIFx0a3MtXHUwMDNlZGVjcnlwdCA9IE5VTEw7XG4mIzQzO1x0SU5JVF9SQ1VfV09SSyhcdTAwMjZrcy1cdTAwM2VmcmVlX3dvcmssIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZnJlZV93b3JrKTtcbiBcdGtyZWZfaW5pdChcdTAwMjZrcy1cdTAwM2VyZWZjb3VudCk7XG4gXHRrcy1cdTAwM2VrZXlfaWQgPSBrYy1cdTAwM2VrZXlfaWQ7XG4gXG5AQCAtNDUzLDcgJiM0Mzs0NjEsOCBAQCBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X25ldyhjb25zdCBzdHJ1Y3Qgb3Zwbl9rZXlfY29uZmlnICprYylcbiBcdHJldHVybiBrcztcbiBcbiBkZXN0cm95X2tzOlxuLVx0b3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9kZXN0cm95KGtzKTtcbiYjNDM7XHRvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2ZyZWUoa3MpO1xuJiM0MztcdGtmcmVlKGtzKTtcbiBcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaCBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaFxuaW5kZXggNjVhMmZmMzA3ODk4Ni4uZmFlM2I1ODVhNDNiMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5oXG5AQCAtMjIsNyAmIzQzOzIyLDYgQEAgaW50IG92cG5fYWVhZF9kZWNyeXB0KHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MsXG4gXG4gc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICpcbiBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X25ldyhjb25zdCBzdHJ1Y3Qgb3Zwbl9rZXlfY29uZmlnICprYyk7XG4tdm9pZCBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2Rlc3Ryb3koc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcyk7XG4gXG4gZW51bSBvdnBuX2NpcGhlcl9hbGcgb3Zwbl9hZWFkX2NyeXB0b19hbGcoc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcyk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9pby5jIGIvZHJpdmVycy9uZXQvb3Zwbi9pby5jXG5pbmRleCA5YTY2ZDY5MzAzOWEzLi45NTI2ZjgwOTZkYTYwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9pby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9vdnBuL2lvLmNcbkBAIC0yMDQsMTAgJiM0MzsyMDQsMTAgQEAgdm9pZCBvdnBuX2RlY3J5cHRfcG9zdCh2b2lkICpkYXRhLCBpbnQgcmV0KVxuIFx0XHRvdnBuX2Rldl9kc3RhdHNfcnhfZHJvcHBlZChwZWVyLVx1MDAzZW92cG4tXHUwMDNlZGV2KTtcbiBcdGtmcmVlX3NrYihza2IpO1xuIGRyb3Bfbm9jb3VudDpcbi1cdGlmIChsaWtlbHkocGVlcikpXG4tXHRcdG92cG5fcGVlcl9wdXQocGVlcik7XG4gXHRpZiAobGlrZWx5KGtzKSlcbiBcdFx0b3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcHV0KGtzKTtcbiYjNDM7XHRpZiAobGlrZWx5KHBlZXIpKVxuJiM0MztcdFx0b3Zwbl9wZWVyX3B1dChwZWVyKTtcbiB9XG4gXG4gLyogUlggcGF0aCBlbnRyeSBwb2ludDogZGVjcnlwdCBwYWNrZXQgYW5kIGZvcndhcmQgaXQgdG8gdGhlIGRldmljZSAqL1xuQEAgLTMwMiwxMSAmIzQzOzMwMiwxMSBAQCB2b2lkIG92cG5fZW5jcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpXG4gZXJyOlxuIFx0aWYgKHVubGlrZWx5KHNrYikpXG4gXHRcdG92cG5fZGV2X2RzdGF0c190eF9kcm9wcGVkKHBlZXItXHUwMDNlb3Zwbi1cdTAwM2VkZXYpO1xuLVx0aWYgKGxpa2VseShwZWVyKSlcbi1cdFx0b3Zwbl9wZWVyX3B1dChwZWVyKTtcbiYjNDM7XHRrZnJlZV9za2Ioc2tiKTtcbiBcdGlmIChsaWtlbHkoa3MpKVxuIFx0XHRvdnBuX2NyeXB0b19rZXlfc2xvdF9wdXQoa3MpO1xuLVx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0aWYgKGxpa2VseShwZWVyKSlcbiYjNDM7XHRcdG92cG5fcGVlcl9wdXQocGVlcik7XG4gfVxuIFxuIHN0YXRpYyBib29sIG92cG5fZW5jcnlwdF9vbmUoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL21haW4uYyBiL2RyaXZlcnMvbmV0L292cG4vbWFpbi5jXG5pbmRleCAxNjhjZmU5YjU5YTk4Li4wNzA4MjQ5ZTk2MDdjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L292cG4vbWFpbi5jXG5AQCAtMTIsNiAmIzQzOzEyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2dyb19jZWxscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcnRuZXRsaW5rLmhcdTAwM2VcbkBAIC0yNiw2ICYjNDM7MjcsOSBAQFxuICNpbmNsdWRlIFwmIzM0O3RjcC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dWRwLmhcJiMzNDtcbiBcbiYjNDM7LyogbW9kdWxlLW93bmVkIHdvcmtxdWV1ZSBvbiB3aGljaCBhbGwgb3Zwbi1zcGVjaWZpYyB3b3JrIGlzIHF1ZXVlZCAqL1xuJiM0MztzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqb3Zwbl93cTtcbiYjNDM7XG4gc3RhdGljIHZvaWQgb3Zwbl9wcml2X2ZyZWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbiB7XG4gXHRzdHJ1Y3Qgb3Zwbl9wcml2ICpvdnBuID0gbmV0ZGV2X3ByaXYobmV0KTtcbkBAIC0yNjQsMTAgJiM0MzsyNjgsMTYgQEAgc3RhdGljIGludCBfX2luaXQgb3Zwbl9pbml0KHZvaWQpXG4gXG4gXHRvdnBuX3RjcF9pbml0KCk7XG4gXG4mIzQzO1x0b3Zwbl93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDtvdnBuXCYjMzQ7LCBXUV9QRVJDUFUsIDApO1xuJiM0MztcdGlmICghb3Zwbl93cSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O292cG46IGNhbm5vdCBhbGxvY2F0ZSB3b3JrcXVldWVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiBcdGVyciA9IHJ0bmxfbGlua19yZWdpc3RlcihcdTAwMjZvdnBuX2xpbmtfb3BzKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0cHJfZXJyKFwmIzM0O292cG46IGNhbiYjMzk7dCByZWdpc3RlciBydG5sIGxpbmsgb3BzOiAlZFxcblwmIzM0OywgZXJyKTtcbi1cdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGdvdG8gZGVzdHJveV93cTtcbiBcdH1cbiBcbiBcdGVyciA9IG92cG5fbmxfcmVnaXN0ZXIoKTtcbkBAIC0yODAsNiAmIzQzOzI5MCw5IEBAIHN0YXRpYyBpbnQgX19pbml0IG92cG5faW5pdCh2b2lkKVxuIFxuIHVucmVnX3J0bmw6XG4gXHRydG5sX2xpbmtfdW5yZWdpc3RlcihcdTAwMjZvdnBuX2xpbmtfb3BzKTtcbiYjNDM7ZGVzdHJveV93cTpcbiYjNDM7XHRkZXN0cm95X3dvcmtxdWV1ZShvdnBuX3dxKTtcbiYjNDM7XHRvdnBuX3dxID0gTlVMTDtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTI4OCw3ICYjNDM7MzAxLDExIEBAIHN0YXRpYyBfX2V4aXQgdm9pZCBvdnBuX2NsZWFudXAodm9pZClcbiBcdG92cG5fbmxfdW5yZWdpc3RlcigpO1xuIFx0cnRubF9saW5rX3VucmVnaXN0ZXIoXHUwMDI2b3Zwbl9saW5rX29wcyk7XG4gXG4mIzQzO1x0Zmx1c2hfd29ya3F1ZXVlKG92cG5fd3EpO1xuIFx0cmN1X2JhcnJpZXIoKTtcbiYjNDM7XG4mIzQzO1x0ZGVzdHJveV93b3JrcXVldWUob3Zwbl93cSk7XG4mIzQzO1x0b3Zwbl93cSA9IE5VTEw7XG4gfVxuIFxuIG1vZHVsZV9pbml0KG92cG5faW5pdCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9vdnBucHJpdi5oIGIvZHJpdmVycy9uZXQvb3Zwbi9vdnBucHJpdi5oXG5pbmRleCA1ODk4ZjZhZGFkYTdmLi44NDQ5OTE0MGU0YmQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9vdnBucHJpdi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9vdnBuL292cG5wcml2LmhcbkBAIC0xNSw2ICYjNDM7MTUsMTAgQEBcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L2lmX2xpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvb3Zwbi5oXHUwMDNlXG4gXG4mIzQzO3N0cnVjdCB3b3JrcXVldWVfc3RydWN0O1xuJiM0MztcbiYjNDM7ZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpvdnBuX3dxO1xuJiM0MztcbiAvKipcbiAgKiBzdHJ1Y3Qgb3Zwbl9wZWVyX2NvbGxlY3Rpb24gLSBjb250YWluZXIgb2YgcGVlcnMgZm9yIE11bHRpUGVlciBtb2RlXG4gICogQGJ5X2lkOiB0YWJsZSBvZiBwZWVycyBpbmRleCBieSBJRFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vcGVlci5jIGIvZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmNcbmluZGV4IGIwNTE5Zjk4NDBkODMuLmM5NTY1NmNhN2MzNTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL3BlZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmNcbkBAIC02Miw3ICYjNDM7NjIsNyBAQCB2b2lkIG92cG5fcGVlcl9rZWVwYWxpdmVfc2V0KHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHUzMiBpbnRlcnZhbCwgdTMyIHRpbWVvdXQpXG4gXHQvKiBub3cgdGhhdCBpbnRlcnZhbCBhbmQgdGltZW91dCBoYXZlIGJlZW4gY2hhbmdlZCwga2lja1xuIFx0ICogb2ZmIHRoZSB3b3JrZXIgc28gdGhhdCB0aGUgbmV4dCBkZWxheSBjYW4gYmUgcmVjb21wdXRlZFxuIFx0ICovXG4tXHRtb2RfZGVsYXllZF93b3JrKHN5c3RlbV9wZXJjcHVfd3EsIFx1MDAyNnBlZXItXHUwMDNlb3Zwbi1cdTAwM2VrZWVwYWxpdmVfd29yaywgMCk7XG4mIzQzO1x0bW9kX2RlbGF5ZWRfd29yayhvdnBuX3dxLCBcdTAwMjZwZWVyLVx1MDAzZW92cG4tXHUwMDNla2VlcGFsaXZlX3dvcmssIDApO1xuIH1cbiBcbiAvKipcbkBAIC0xMzcxLDcgJiM0MzsxMzcxLDcgQEAgc3RhdGljIHRpbWU2NF90IG92cG5fcGVlcl9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IG92cG5fcGVlciAqcGVlcixcbiBcdFx0XHQgICBwZWVyLVx1MDAzZWlkKTtcbiBcdFx0aWYgKFdBUk5fT04oIW92cG5fcGVlcl9ob2xkKHBlZXIpKSlcbiBcdFx0XHRyZXR1cm4gMDtcbi1cdFx0aWYgKCFzY2hlZHVsZV93b3JrKFx1MDAyNnBlZXItXHUwMDNla2VlcGFsaXZlX3dvcmspKVxuJiM0MztcdFx0aWYgKCFxdWV1ZV93b3JrKG92cG5fd3EsIFx1MDAyNnBlZXItXHUwMDNla2VlcGFsaXZlX3dvcmspKVxuIFx0XHRcdG92cG5fcGVlcl9wdXQocGVlcik7XG4gXHR9XG4gXG5AQCAtMTQ2Myw4ICYjNDM7MTQ2Myw4IEBAIHZvaWQgb3Zwbl9wZWVyX2tlZXBhbGl2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0bmV0ZGV2X2RiZyhvdnBuLVx1MDAzZWRldixcbiBcdFx0XHQgICBcJiMzNDtzY2hlZHVsaW5nIGtlZXBhbGl2ZSB3b3JrOiBub3c9JWxsdSBuZXh0X3J1bj0lbGx1IGRlbHRhPSVsbHVcXG5cJiMzNDssXG4gXHRcdFx0ICAgbmV4dF9ydW4sIG5vdywgbmV4dF9ydW4gLSBub3cpO1xuLVx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2b3Zwbi1cdTAwM2VrZWVwYWxpdmVfd29yayxcbi1cdFx0XHRcdCAgICAgIChuZXh0X3J1biAtIG5vdykgKiBIWik7XG4mIzQzO1x0XHRxdWV1ZV9kZWxheWVkX3dvcmsob3Zwbl93cSwgXHUwMDI2b3Zwbi1cdTAwM2VrZWVwYWxpdmVfd29yayxcbiYjNDM7XHRcdFx0XHQgICAobmV4dF9ydW4gLSBub3cpICogSFopO1xuIFx0fVxuIFx0dW5sb2NrX292cG4ob3ZwbiwgXHUwMDI2cmVsZWFzZV9saXN0KTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi90Y3AuYyBiL2RyaXZlcnMvbmV0L292cG4vdGNwLmNcbmluZGV4IDBhZjE0MDU1YzM5YWEuLjhmZThhOGU3NTBhNDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL3RjcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9vdnBuL3RjcC5jXG5AQCAtMTUxLDcgJiM0MzsxNTEsNyBAQCBzdGF0aWMgdm9pZCBvdnBuX3RjcF9yY3Yoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdC8qIHRha2UgcmVmZXJlbmNlIGZvciBkZWZlcnJlZCBwZWVyIGRlbGV0aW9uLiBzaG91bGQgbmV2ZXIgZmFpbCAqL1xuIFx0aWYgKFdBUk5fT04oIW92cG5fcGVlcl9ob2xkKHBlZXIpKSlcbiBcdFx0Z290byBlcnJfbm9wZWVyO1xuLVx0aWYgKCFzY2hlZHVsZV93b3JrKFx1MDAyNnBlZXItXHUwMDNldGNwLmRlZmVyX2RlbF93b3JrKSlcbiYjNDM7XHRpZiAoIXF1ZXVlX3dvcmsob3Zwbl93cSwgXHUwMDI2cGVlci1cdTAwM2V0Y3AuZGVmZXJfZGVsX3dvcmspKVxuIFx0XHRvdnBuX3BlZXJfcHV0KHBlZXIpO1xuIFx0b3Zwbl9kZXZfZHN0YXRzX3J4X2Ryb3BwZWQocGVlci1cdTAwM2VvdnBuLVx1MDAzZWRldik7XG4gZXJyX25vcGVlcjpcbkBAIC0yODQsMTMgJiM0MzsyODQsMTIgQEAgc3RhdGljIHZvaWQgb3Zwbl90Y3Bfc2VuZF9zb2NrKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBzb2NrICpzaylcbiBcdFx0XHQgKiBzdHJlYW0gdGhlcmVmb3JlIHdlIGFib3J0IHRoZSBjb25uZWN0aW9uXG4gXHRcdFx0ICovXG4gXHRcdFx0b3Zwbl9wZWVyX2hvbGQocGVlcik7XG4tXHRcdFx0aWYgKCFzY2hlZHVsZV93b3JrKFx1MDAyNnBlZXItXHUwMDNldGNwLmRlZmVyX2RlbF93b3JrKSlcbiYjNDM7XHRcdFx0aWYgKCFxdWV1ZV93b3JrKG92cG5fd3EsIFx1MDAyNnBlZXItXHUwMDNldGNwLmRlZmVyX2RlbF93b3JrKSlcbiBcdFx0XHRcdG92cG5fcGVlcl9wdXQocGVlcik7XG4gXG4gXHRcdFx0Lyogd2UgYmFpbCBvdXQgaW1tZWRpYXRlbHkgYW5kIGtlZXAgdHhfaW5fcHJvZ3Jlc3Mgc2V0XG4gXHRcdFx0ICogdG8gdHJ1ZS4gVGhpcyB3YXkgd2UgcHJldmVudCBtb3JlIFRYIGF0dGVtcHRzXG4tXHRcdFx0ICogd2hpY2ggd291bGQgbGVhZCB0byBtb3JlIGludm9jYXRpb25zIG9mXG4tXHRcdFx0ICogc2NoZWR1bGVfd29yaygpXG4mIzQzO1x0XHRcdCAqIHdoaWNoIHdvdWxkIGxlYWQgdG8gbW9yZSBpbnZvY2F0aW9ucyBvZiBxdWV1ZV93b3JrKClcbiBcdFx0XHQgKi9cbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbkBAIC00ODcsNyAmIzQzOzQ4Niw3IEBAIHN0YXRpYyB2b2lkIG92cG5fdGNwX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaylcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHNvY2sgPSByY3VfZGVyZWZlcmVuY2Vfc2tfdXNlcl9kYXRhKHNrKTtcbiBcdGlmIChsaWtlbHkoc29jayBcdTAwMjZcdTAwMjYgc29jay1cdTAwM2VwZWVyKSkge1xuLVx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNnNvY2stXHUwMDNldGNwX3R4X3dvcmspO1xuJiM0MztcdFx0cXVldWVfd29yayhvdnBuX3dxLCBcdTAwMjZzb2NrLVx1MDAzZXRjcF90eF93b3JrKTtcbiBcdFx0c29jay1cdTAwM2VwZWVyLVx1MDAzZXRjcC5za19jYi5za193cml0ZV9zcGFjZShzayk7XG4gXHR9XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAyMTo1MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1ZQTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O292cG5fY3J5cHRvX2tleV9zbG90X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7b3Zwbl9jcnlwdG9fa2lsbF9rZXkmIzM0OywKICAgICYjMzQ7b3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXcmIzM0OywKICAgICYjMzQ7b3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXQmIzM0OywKICAgICYjMzQ7b3Zwbl9wZWVyX2tlZXBhbGl2ZV93b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPcGVuVlBOIGRhdGEgY2hhbm5lbCBvZmZsb2FkIGRyaXZlciAoZHJpdmVycy9uZXQvb3ZwbikuIEl0IHJlcGxhY2VzIGNhbGxfcmN1IHdpdGggcXVldWVfcmN1X3dvcmsgZm9yIGZyZWVpbmcgY3J5cHRvIGtleSBzbG90cywgaW50cm9kdWNlcyBhIGRlZGljYXRlZCB3b3JrcXVldWUgKG92cG5fd3EpIGZvciBhbGwgb3Zwbi1zcGVjaWZpYyB3b3JrLCBhbmQgZml4ZXMgYSBsb2dpYyBidWcgaW4gb3Zwbl9jcnlwdG9fa2lsbF9rZXkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gYSByZWFjaGFibGUgbmV0d29yayBkcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhOTVmMjZkYjUyMjJkNjJhMWZlMzkyNDBjNDhmOGUwYWViOTE2NjA5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgOSAyMTo1Mjo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmMgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jCmluZGV4IDkwNTgwZTMyMDUyZmIuLjdlNTQ1NDI4OTAwYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYwpAQCAtMTgsMjAgJiM0MzsxOCwxMiBAQAogI2luY2x1ZGUgJiMzNDtjcnlwdG9fYWVhZC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Y3J5cHRvLmgmIzM0OwogCi1zdGF0aWMgdm9pZCBvdnBuX2tzX2Rlc3Ryb3lfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKLXsKLQlzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzOwotCi0Ja3MgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90LCByY3UpOwotCW92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZGVzdHJveShrcyk7Ci19Ci0KIHZvaWQgb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKIAlzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzOwogCiAJa3MgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90LCByZWZjb3VudCk7Ci0JY2FsbF9yY3UoJmFtcDtrcy0mZ3Q7cmN1LCBvdnBuX2tzX2Rlc3Ryb3lfcmN1KTsKJiM0MzsJcXVldWVfcmN1X3dvcmsob3Zwbl93cSwgJmFtcDtrcy0mZ3Q7ZnJlZV93b3JrKTsKIH0KIAogLyogY2FuIG9ubHkgYmUgaW52b2tlZCB3aGVuIGFsbCBwZWVyIHJlZmVyZW5jZXMgaGF2ZSBiZWVuIGRyb3BwZWQgKGkuZS4gUkNVCkBAIC01OCwxNSAmIzQzOzUwLDE5IEBAIHZvaWQgb3Zwbl9jcnlwdG9fc3RhdGVfcmVsZWFzZShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzKQogYm9vbCBvdnBuX2NyeXB0b19raWxsX2tleShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzLCB1OCBrZXlfaWQpCiB7CiAJc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcyA9IE5VTEw7CiYjNDM7CXN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqdG1wOwomIzQzOwlpbnQgc2xvdCA9IDA7CiAKIAlzcGluX2xvY2tfYmgoJmFtcDtjcy0mZ3Q7bG9jayk7Ci0JaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihjcy0mZ3Q7c2xvdHNbMF0pLSZndDtrZXlfaWQgPT0ga2V5X2lkKSB7Ci0JCWtzID0gcmN1X3JlcGxhY2VfcG9pbnRlcihjcy0mZ3Q7c2xvdHNbMF0sIE5VTEwsCi0JCQkJCSBsb2NrZGVwX2lzX2hlbGQoJmFtcDtjcy0mZ3Q7bG9jaykpOwotCX0gZWxzZSBpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNzLSZndDtzbG90c1sxXSktJmd0O2tleV9pZCA9PSBrZXlfaWQpIHsKLQkJa3MgPSByY3VfcmVwbGFjZV9wb2ludGVyKGNzLSZndDtzbG90c1sxXSwgTlVMTCwKLQkJCQkJIGxvY2tkZXBfaXNfaGVsZCgmYW1wO2NzLSZndDtsb2NrKSk7CiYjNDM7CXRtcCA9IHJjdV9hY2Nlc3NfcG9pbnRlcihjcy0mZ3Q7c2xvdHNbc2xvdF0pOwomIzQzOwlpZiAoIXRtcCB8fCB0bXAtJmd0O2tleV9pZCAhPSBrZXlfaWQpIHsKJiM0MzsJCXNsb3QgPSAxOwomIzQzOwkJdG1wID0gcmN1X2FjY2Vzc19wb2ludGVyKGNzLSZndDtzbG90c1tzbG90XSk7CiAJfQomIzQzOwomIzQzOwlpZiAodG1wICZhbXA7JmFtcDsgdG1wLSZndDtrZXlfaWQgPT0ga2V5X2lkKQomIzQzOwkJa3MgPSByY3VfcmVwbGFjZV9wb2ludGVyKGNzLSZndDtzbG90c1tzbG90XSwgTlVMTCwKJiM0MzsJCQkJCSBsb2NrZGVwX2lzX2hlbGQoJmFtcDtjcy0mZ3Q7bG9jaykpOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7Y3MtJmd0O2xvY2spOwogCiAJaWYgKGtzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaCBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmgKaW5kZXggMGUyODRmZWMzYTc1YS4uZTNmZWIxNmQ1NDk4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oCkBAIC0xMCw2ICYjNDM7MTAsOCBAQAogI2lmbmRlZiBfTkVUX09WUE5fT1ZQTkNSWVBUT19IXwogI2RlZmluZSBfTkVUX09WUE5fT1ZQTkNSWVBUT19IXwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwomIzQzOwogI2luY2x1ZGUgJiMzNDtwa3RpZC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7cHJvdG8uaCYjMzQ7CiAKQEAgLTQ1LDggJiM0Mzs0Nyw4IEBAIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCB7CiAKIAlzdHJ1Y3Qgb3Zwbl9wa3RpZF9yZWN2IHBpZF9yZWN2IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CiAJc3RydWN0IG92cG5fcGt0aWRfeG1pdCBwaWRfeG1pdCBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwomIzQzOwlzdHJ1Y3QgcmN1X3dvcmsgZnJlZV93b3JrOwogCXN0cnVjdCBrcmVmIHJlZmNvdW50OwotCXN0cnVjdCByY3VfaGVhZCByY3U7CiB9OwogCiBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5jIGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5jCmluZGV4IDhmMDdjNDE4NjIyYjIuLjc0ZWFmNmZhYzJmNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmMKQEAgLTksNiAmIzQzOzksNyBAQAogCiAjaW5jbHVkZSAmbHQ7Y3J5cHRvL2FlYWQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lwdjYuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvdWRwLmgmZ3Q7CkBAIC0zODAsMTMgJiM0MzszODEsMTkgQEAgc3RhdGljIHN0cnVjdCBjcnlwdG9fYWVhZCAqb3Zwbl9hZWFkX2luaXQoY29uc3QgY2hhciAqdGl0bGUsCiAJcmV0dXJuIEVSUl9QVFIocmV0KTsKIH0KIAotdm9pZCBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2Rlc3Ryb3koc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcykKJiM0MztzdGF0aWMgdm9pZCBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2ZyZWUoc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcykKIHsKLQlpZiAoIWtzKQotCQlyZXR1cm47Ci0KIAljcnlwdG9fZnJlZV9hZWFkKGtzLSZndDtlbmNyeXB0KTsKIAljcnlwdG9fZnJlZV9hZWFkKGtzLSZndDtkZWNyeXB0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9mcmVlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprczsKJiM0MzsKJiM0MzsJa3MgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCwKJiM0MzsJCQkgIGZyZWVfd29yayk7CiYjNDM7CW92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZnJlZShrcyk7CiAJa2ZyZWUoa3MpOwogfQogCkBAIC00MjAsNiAmIzQzOzQyNyw3IEBAIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3KGNvbnN0IHN0cnVjdCBvdnBuX2tleV9jb25maWcgKmtjKQogCiAJa3MtJmd0O2VuY3J5cHQgPSBOVUxMOwogCWtzLSZndDtkZWNyeXB0ID0gTlVMTDsKJiM0MzsJSU5JVF9SQ1VfV09SSygmYW1wO2tzLSZndDtmcmVlX3dvcmssIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZnJlZV93b3JrKTsKIAlrcmVmX2luaXQoJmFtcDtrcy0mZ3Q7cmVmY291bnQpOwogCWtzLSZndDtrZXlfaWQgPSBrYy0mZ3Q7a2V5X2lkOwogCkBAIC00NTMsNyAmIzQzOzQ2MSw4IEBAIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3KGNvbnN0IHN0cnVjdCBvdnBuX2tleV9jb25maWcgKmtjKQogCXJldHVybiBrczsKIAogZGVzdHJveV9rczoKLQlvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2Rlc3Ryb3koa3MpOwomIzQzOwlvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2ZyZWUoa3MpOwomIzQzOwlrZnJlZShrcyk7CiAJcmV0dXJuIEVSUl9QVFIocmV0KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5oIGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5oCmluZGV4IDY1YTJmZjMwNzg5ODYuLmZhZTNiNTg1YTQzYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmgKQEAgLTIyLDcgJiM0MzsyMiw2IEBAIGludCBvdnBuX2FlYWRfZGVjcnlwdChzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzLAogCiBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKgogb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXcoY29uc3Qgc3RydWN0IG92cG5fa2V5X2NvbmZpZyAqa2MpOwotdm9pZCBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2Rlc3Ryb3koc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcyk7CiAKIGVudW0gb3Zwbl9jaXBoZXJfYWxnIG92cG5fYWVhZF9jcnlwdG9fYWxnKHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2lvLmMgYi9kcml2ZXJzL25ldC9vdnBuL2lvLmMKaW5kZXggOWE2NmQ2OTMwMzlhMy4uOTUyNmY4MDk2ZGE2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9pby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L292cG4vaW8uYwpAQCAtMjA0LDEwICYjNDM7MjA0LDEwIEBAIHZvaWQgb3Zwbl9kZWNyeXB0X3Bvc3Qodm9pZCAqZGF0YSwgaW50IHJldCkKIAkJb3Zwbl9kZXZfZHN0YXRzX3J4X2Ryb3BwZWQocGVlci0mZ3Q7b3Zwbi0mZ3Q7ZGV2KTsKIAlrZnJlZV9za2Ioc2tiKTsKIGRyb3Bfbm9jb3VudDoKLQlpZiAobGlrZWx5KHBlZXIpKQotCQlvdnBuX3BlZXJfcHV0KHBlZXIpOwogCWlmIChsaWtlbHkoa3MpKQogCQlvdnBuX2NyeXB0b19rZXlfc2xvdF9wdXQoa3MpOwomIzQzOwlpZiAobGlrZWx5KHBlZXIpKQomIzQzOwkJb3Zwbl9wZWVyX3B1dChwZWVyKTsKIH0KIAogLyogUlggcGF0aCBlbnRyeSBwb2ludDogZGVjcnlwdCBwYWNrZXQgYW5kIGZvcndhcmQgaXQgdG8gdGhlIGRldmljZSAqLwpAQCAtMzAyLDExICYjNDM7MzAyLDExIEBAIHZvaWQgb3Zwbl9lbmNyeXB0X3Bvc3Qodm9pZCAqZGF0YSwgaW50IHJldCkKIGVycjoKIAlpZiAodW5saWtlbHkoc2tiKSkKIAkJb3Zwbl9kZXZfZHN0YXRzX3R4X2Ryb3BwZWQocGVlci0mZ3Q7b3Zwbi0mZ3Q7ZGV2KTsKLQlpZiAobGlrZWx5KHBlZXIpKQotCQlvdnBuX3BlZXJfcHV0KHBlZXIpOwomIzQzOwlrZnJlZV9za2Ioc2tiKTsKIAlpZiAobGlrZWx5KGtzKSkKIAkJb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcHV0KGtzKTsKLQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJaWYgKGxpa2VseShwZWVyKSkKJiM0MzsJCW92cG5fcGVlcl9wdXQocGVlcik7CiB9CiAKIHN0YXRpYyBib29sIG92cG5fZW5jcnlwdF9vbmUoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vbWFpbi5jIGIvZHJpdmVycy9uZXQvb3Zwbi9tYWluLmMKaW5kZXggMTY4Y2ZlOWI1OWE5OC4uMDcwODI0OWU5NjA3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvb3Zwbi9tYWluLmMKQEAgLTEyLDYgJiM0MzsxMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW5ldGRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZ3JvX2NlbGxzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3J0bmV0bGluay5oJmd0OwpAQCAtMjYsNiAmIzQzOzI3LDkgQEAKICNpbmNsdWRlICYjMzQ7dGNwLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt1ZHAuaCYjMzQ7CiAKJiM0MzsvKiBtb2R1bGUtb3duZWQgd29ya3F1ZXVlIG9uIHdoaWNoIGFsbCBvdnBuLXNwZWNpZmljIHdvcmsgaXMgcXVldWVkICovCiYjNDM7c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm92cG5fd3E7CiYjNDM7CiBzdGF0aWMgdm9pZCBvdnBuX3ByaXZfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewogCXN0cnVjdCBvdnBuX3ByaXYgKm92cG4gPSBuZXRkZXZfcHJpdihuZXQpOwpAQCAtMjY0LDEwICYjNDM7MjY4LDE2IEBAIHN0YXRpYyBpbnQgX19pbml0IG92cG5faW5pdCh2b2lkKQogCiAJb3Zwbl90Y3BfaW5pdCgpOwogCiYjNDM7CW92cG5fd3EgPSBhbGxvY193b3JrcXVldWUoJiMzNDtvdnBuJiMzNDssIFdRX1BFUkNQVSwgMCk7CiYjNDM7CWlmICghb3Zwbl93cSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7b3ZwbjogY2Fubm90IGFsbG9jYXRlIHdvcmtxdWV1ZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKIAllcnIgPSBydG5sX2xpbmtfcmVnaXN0ZXIoJmFtcDtvdnBuX2xpbmtfb3BzKTsKIAlpZiAoZXJyKSB7CiAJCXByX2VycigmIzM0O292cG46IGNhbiYjMzk7dCByZWdpc3RlciBydG5sIGxpbmsgb3BzOiAlZFxuJiMzNDssIGVycik7Ci0JCXJldHVybiBlcnI7CiYjNDM7CQlnb3RvIGRlc3Ryb3lfd3E7CiAJfQogCiAJZXJyID0gb3Zwbl9ubF9yZWdpc3RlcigpOwpAQCAtMjgwLDYgJiM0MzsyOTAsOSBAQCBzdGF0aWMgaW50IF9faW5pdCBvdnBuX2luaXQodm9pZCkKIAogdW5yZWdfcnRubDoKIAlydG5sX2xpbmtfdW5yZWdpc3RlcigmYW1wO292cG5fbGlua19vcHMpOwomIzQzO2Rlc3Ryb3lfd3E6CiYjNDM7CWRlc3Ryb3lfd29ya3F1ZXVlKG92cG5fd3EpOwomIzQzOwlvdnBuX3dxID0gTlVMTDsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yODgsNyAmIzQzOzMwMSwxMSBAQCBzdGF0aWMgX19leGl0IHZvaWQgb3Zwbl9jbGVhbnVwKHZvaWQpCiAJb3Zwbl9ubF91bnJlZ2lzdGVyKCk7CiAJcnRubF9saW5rX3VucmVnaXN0ZXIoJmFtcDtvdnBuX2xpbmtfb3BzKTsKIAomIzQzOwlmbHVzaF93b3JrcXVldWUob3Zwbl93cSk7CiAJcmN1X2JhcnJpZXIoKTsKJiM0MzsKJiM0MzsJZGVzdHJveV93b3JrcXVldWUob3Zwbl93cSk7CiYjNDM7CW92cG5fd3EgPSBOVUxMOwogfQogCiBtb2R1bGVfaW5pdChvdnBuX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9vdnBucHJpdi5oIGIvZHJpdmVycy9uZXQvb3Zwbi9vdnBucHJpdi5oCmluZGV4IDU4OThmNmFkYWRhN2YuLjg0NDk5MTQwZTRiZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L292cG4vb3ZwbnByaXYuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9vdnBuL292cG5wcml2LmgKQEAgLTE1LDYgJiM0MzsxNSwxMCBAQAogI2luY2x1ZGUgJmx0O3VhcGkvbGludXgvaWZfbGluay5oJmd0OwogI2luY2x1ZGUgJmx0O3VhcGkvbGludXgvb3Zwbi5oJmd0OwogCiYjNDM7c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3Q7CiYjNDM7CiYjNDM7ZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpvdnBuX3dxOwomIzQzOwogLyoqCiAgKiBzdHJ1Y3Qgb3Zwbl9wZWVyX2NvbGxlY3Rpb24gLSBjb250YWluZXIgb2YgcGVlcnMgZm9yIE11bHRpUGVlciBtb2RlCiAgKiBAYnlfaWQ6IHRhYmxlIG9mIHBlZXJzIGluZGV4IGJ5IElECmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL3BlZXIuYyBiL2RyaXZlcnMvbmV0L292cG4vcGVlci5jCmluZGV4IGIwNTE5Zjk4NDBkODMuLmM5NTY1NmNhN2MzNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L292cG4vcGVlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L292cG4vcGVlci5jCkBAIC02Miw3ICYjNDM7NjIsNyBAQCB2b2lkIG92cG5fcGVlcl9rZWVwYWxpdmVfc2V0KHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHUzMiBpbnRlcnZhbCwgdTMyIHRpbWVvdXQpCiAJLyogbm93IHRoYXQgaW50ZXJ2YWwgYW5kIHRpbWVvdXQgaGF2ZSBiZWVuIGNoYW5nZWQsIGtpY2sKIAkgKiBvZmYgdGhlIHdvcmtlciBzbyB0aGF0IHRoZSBuZXh0IGRlbGF5IGNhbiBiZSByZWNvbXB1dGVkCiAJICovCi0JbW9kX2RlbGF5ZWRfd29yayhzeXN0ZW1fcGVyY3B1X3dxLCAmYW1wO3BlZXItJmd0O292cG4tJmd0O2tlZXBhbGl2ZV93b3JrLCAwKTsKJiM0MzsJbW9kX2RlbGF5ZWRfd29yayhvdnBuX3dxLCAmYW1wO3BlZXItJmd0O292cG4tJmd0O2tlZXBhbGl2ZV93b3JrLCAwKTsKIH0KIAogLyoqCkBAIC0xMzcxLDcgJiM0MzsxMzcxLDcgQEAgc3RhdGljIHRpbWU2NF90IG92cG5fcGVlcl9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IG92cG5fcGVlciAqcGVlciwKIAkJCSAgIHBlZXItJmd0O2lkKTsKIAkJaWYgKFdBUk5fT04oIW92cG5fcGVlcl9ob2xkKHBlZXIpKSkKIAkJCXJldHVybiAwOwotCQlpZiAoIXNjaGVkdWxlX3dvcmsoJmFtcDtwZWVyLSZndDtrZWVwYWxpdmVfd29yaykpCiYjNDM7CQlpZiAoIXF1ZXVlX3dvcmsob3Zwbl93cSwgJmFtcDtwZWVyLSZndDtrZWVwYWxpdmVfd29yaykpCiAJCQlvdnBuX3BlZXJfcHV0KHBlZXIpOwogCX0KIApAQCAtMTQ2Myw4ICYjNDM7MTQ2Myw4IEBAIHZvaWQgb3Zwbl9wZWVyX2tlZXBhbGl2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJbmV0ZGV2X2RiZyhvdnBuLSZndDtkZXYsCiAJCQkgICAmIzM0O3NjaGVkdWxpbmcga2VlcGFsaXZlIHdvcms6IG5vdz0lbGx1IG5leHRfcnVuPSVsbHUgZGVsdGE9JWxsdVxuJiMzNDssCiAJCQkgICBuZXh0X3J1biwgbm93LCBuZXh0X3J1biAtIG5vdyk7Ci0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO292cG4tJmd0O2tlZXBhbGl2ZV93b3JrLAotCQkJCSAgICAgIChuZXh0X3J1biAtIG5vdykgKiBIWik7CiYjNDM7CQlxdWV1ZV9kZWxheWVkX3dvcmsob3Zwbl93cSwgJmFtcDtvdnBuLSZndDtrZWVwYWxpdmVfd29yaywKJiM0MzsJCQkJICAgKG5leHRfcnVuIC0gbm93KSAqIEhaKTsKIAl9CiAJdW5sb2NrX292cG4ob3ZwbiwgJmFtcDtyZWxlYXNlX2xpc3QpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi90Y3AuYyBiL2RyaXZlcnMvbmV0L292cG4vdGNwLmMKaW5kZXggMGFmMTQwNTVjMzlhYS4uOGZlOGE4ZTc1MGE0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi90Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9vdnBuL3RjcC5jCkBAIC0xNTEsNyAmIzQzOzE1MSw3IEBAIHN0YXRpYyB2b2lkIG92cG5fdGNwX3JjdihzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCS8qIHRha2UgcmVmZXJlbmNlIGZvciBkZWZlcnJlZCBwZWVyIGRlbGV0aW9uLiBzaG91bGQgbmV2ZXIgZmFpbCAqLwogCWlmIChXQVJOX09OKCFvdnBuX3BlZXJfaG9sZChwZWVyKSkpCiAJCWdvdG8gZXJyX25vcGVlcjsKLQlpZiAoIXNjaGVkdWxlX3dvcmsoJmFtcDtwZWVyLSZndDt0Y3AuZGVmZXJfZGVsX3dvcmspKQomIzQzOwlpZiAoIXF1ZXVlX3dvcmsob3Zwbl93cSwgJmFtcDtwZWVyLSZndDt0Y3AuZGVmZXJfZGVsX3dvcmspKQogCQlvdnBuX3BlZXJfcHV0KHBlZXIpOwogCW92cG5fZGV2X2RzdGF0c19yeF9kcm9wcGVkKHBlZXItJmd0O292cG4tJmd0O2Rldik7CiBlcnJfbm9wZWVyOgpAQCAtMjg0LDEzICYjNDM7Mjg0LDEyIEBAIHN0YXRpYyB2b2lkIG92cG5fdGNwX3NlbmRfc29jayhzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc29jayAqc2spCiAJCQkgKiBzdHJlYW0gdGhlcmVmb3JlIHdlIGFib3J0IHRoZSBjb25uZWN0aW9uCiAJCQkgKi8KIAkJCW92cG5fcGVlcl9ob2xkKHBlZXIpOwotCQkJaWYgKCFzY2hlZHVsZV93b3JrKCZhbXA7cGVlci0mZ3Q7dGNwLmRlZmVyX2RlbF93b3JrKSkKJiM0MzsJCQlpZiAoIXF1ZXVlX3dvcmsob3Zwbl93cSwgJmFtcDtwZWVyLSZndDt0Y3AuZGVmZXJfZGVsX3dvcmspKQogCQkJCW92cG5fcGVlcl9wdXQocGVlcik7CiAKIAkJCS8qIHdlIGJhaWwgb3V0IGltbWVkaWF0ZWx5IGFuZCBrZWVwIHR4X2luX3Byb2dyZXNzIHNldAogCQkJICogdG8gdHJ1ZS4gVGhpcyB3YXkgd2UgcHJldmVudCBtb3JlIFRYIGF0dGVtcHRzCi0JCQkgKiB3aGljaCB3b3VsZCBsZWFkIHRvIG1vcmUgaW52b2NhdGlvbnMgb2YKLQkJCSAqIHNjaGVkdWxlX3dvcmsoKQomIzQzOwkJCSAqIHdoaWNoIHdvdWxkIGxlYWQgdG8gbW9yZSBpbnZvY2F0aW9ucyBvZiBxdWV1ZV93b3JrKCkKIAkJCSAqLwogCQkJcmV0dXJuOwogCQl9CkBAIC00ODcsNyAmIzQzOzQ4Niw3IEBAIHN0YXRpYyB2b2lkIG92cG5fdGNwX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaykKIAlyY3VfcmVhZF9sb2NrKCk7CiAJc29jayA9IHJjdV9kZXJlZmVyZW5jZV9za191c2VyX2RhdGEoc2spOwogCWlmIChsaWtlbHkoc29jayAmYW1wOyZhbXA7IHNvY2stJmd0O3BlZXIpKSB7Ci0JCXNjaGVkdWxlX3dvcmsoJmFtcDtzb2NrLSZndDt0Y3BfdHhfd29yayk7CiYjNDM7CQlxdWV1ZV93b3JrKG92cG5fd3EsICZhbXA7c29jay0mZ3Q7dGNwX3R4X3dvcmspOwogCQlzb2NrLSZndDtwZWVyLSZndDt0Y3Auc2tfY2Iuc2tfd3JpdGVfc3BhY2Uoc2spOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMjE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIyMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDU0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEltcGFjdCBvZiB0aGUgT3BlblZQTiBQYXRjaCBTZXJpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgd2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnQgZnV6emluZyBlZmZvcnRzLiBUaGUgcGF0Y2ggdG91Y2hlcyBhIHNpZ25pZmljYW50IG51bWJlciBvZiBmaWxlcyB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9vdnBuYCBkaXJlY3Rvcnk6IGBjcnlwdG8uY2AsIGBjcnlwdG8uaGAsIGBjcnlwdG9fYWVhZC5jYCwgYGNyeXB0b19hZWFkLmhgLCBgaW8uY2AsIGBtYWluLmNgLCBgb3ZwbnByaXYuaGAsIGBwZWVyLmNgLCBhbmQgYHRjcC5jYC4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3Igb2YgcG90ZW50aWFsIGZ1bmN0aW9uYWwgaW1wYWN0LgoKTm93LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGUgY2hhbmdlcy4gRmlyc3QsIGBvdnBuX2NyeXB0b19rZXlfc2xvdF9yZWxlYXNlYCBpcyBzd2l0Y2hpbmcgZnJvbSBgY2FsbF9yY3VgIHRvIGBxdWV1ZV9yY3Vfd29ya2Agd2l0aCBgb3Zwbl93cWAuIFRoaXMgaGludHMgYXQgYSBtb3ZlIHRvd2FyZHMgYSB3b3JrcXVldWUtYmFzZWQgbWVjaGFuaXNtIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50LCB3aGljaCwgaWYgbWlzaGFuZGxlZCwgKmNvdWxkKiBpbnRyb2R1Y2Ugc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgY29ycnVwdGlvbiBzY2VuYXJpb3MuIE5leHQsIGBvdnBuX2NyeXB0b19raWxsX2tleWAgaGFzIGEgbG9naWMgY2hhbmdlIGluIGhvdyBpdCBpdGVyYXRlcyB0aHJvdWdoIGFuZCByZXBsYWNlcyBwb2ludGVycyB3aXRoaW4gdGhlIGBjcy0mZ3Q7c2xvdHNgIHN0cnVjdHVyZS4gVGhpcyBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyBiZWNhdXNlIHBvaW50ZXIgbWFuaXB1bGF0aW9uIGlzIGEga25vd24gdnVsbmVyYWJpbGl0eSBhcmVhLCBhbmQgdGhpcyBjb3VsZCBvcGVuIHVwIGEgdmVjdG9yIGZvciBleHBsb2l0YXRpb24uCgpBIG1vZHVsZS1vd25lZCB3b3JrcXVldWUsIGBvdnBuX3dxYCwgaXMgYmVpbmcgaW50cm9kdWNlZC4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0IGNlbnRyYWxpemVzIHdvcmtxdWV1ZSBvcGVyYXRpb25zIHdpdGhpbiB0aGUgYG92cG5gIG1vZHVsZS4gVGhlIGFkZGl0aW9uIG9mIGBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2ZyZWVfd29ya2AgaXMgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgd29ya3F1ZXVlLWJhc2VkIGZyZWVpbmcuIFRoaXMgbG9va3MgbGlrZSBhIGNoYW5nZSB0byBob3cgcmVzb3VyY2VzIGFyZSBtYW5hZ2VkLCB3aGljaCBpcyBnb29kLiBUaGVyZSBpcyBhbHNvIGEgY2hhbmdlIGluIHRoZSBvcmRlciBvZiBwdXQgY2FsbHMsIHdoaWNoIGhhcyB0aGUgcG90ZW50aWFsIHRvIGludHJvZHVjZSBpc3N1ZXMuCgpGdXJ0aGVybW9yZSwgYG92cG5fd3FgIGlzIGFsbG9jYXRlZCBpbiBgb3Zwbl9pbml0YCBhbmQgZGVzdHJveWVkIGluIGBvdnBuX2NsZWFudXBgLCB3aGljaCBtZWFucyB0aGF0IGl0IGhhcyBhIGxpZmUgY3ljbGUgdGllZCB0byB0aGUgbW9kdWxlIGl0c2VsZi4gVGhlIHJlc3Qgb2YgdGhlIG1lbnRpb25lZCBmdW5jdGlvbnMsIHN1Y2ggYXMgYG92cG5fcGVlcl9rZWVwYWxpdmVfc2V0YCwgYG92cG5fcGVlcl9rZWVwYWxpdmVfd29ya19zaW5nbGVgLCBldGMuLCBub3cgbGV2ZXJhZ2UgYG92cG5fd3FgIGluc3RlYWQgb2YgZ2VuZXJpYyB3b3JrcXVldWVzLgoKR2l2ZW4gdGhlc2UgY2hhbmdlcywgaXQmIzM5O3MgY2xlYXIgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHRvIHRoZSBPcGVuVlBOIChvdnBuKSBkcml2ZXIuIFRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgdGhpcyBkcml2ZXIgKnJlYWNoYWJsZSogYW5kIGFtZW5hYmxlIHRvIGZ1enppbmc/IFdlbGwsIGl0JiMzOTtzIGEgbmV0d29yayBkcml2ZXIsIHdoaWNoIG1lYW5zIGl0IHNob3VsZCBiZSBpbnRlcmFjdGFibGUgdmlhIG5ldGxpbmsgYW5kIHNvY2tldHMuIFRoYXQmIzM5O3MgYSAmIzM0O3llcyYjMzQ7IG9uIHJlYWNoYWJpbGl0eS4gQW5kIGNvbnNpZGVyaW5nIHRoZSBwb2ludGVyIGxvZ2ljIGNoYW5nZSBpbiBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgIGNvbWJpbmVkIHdpdGggdGhlIHdvcmtxdWV1ZSBtb2RpZmljYXRpb25zLCB0aGlzIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZyBlZmZvcnRzLiBJIG5lZWQgdG8gbm93IGNoZWNrIHRoZSBLY29uZmlnIGZvciB0aGUgb3ZwbiBkcml2ZXIgdG8gY29uZmlybSBpdHMgYnVpbGQgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAyMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT1ZQTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTkyPWNvbmZpZyBXSVJFR1VBUkRfREVCVUdcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTEwMi1cbmRyaXZlcnMvbmV0L0tjb25maWc6MTAzOmNvbmZpZyBPVlBOXG5kcml2ZXJzL25ldC9LY29uZmlnLTEwNC1cdHRyaXN0YXRlIFwmIzM0O09wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAyMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDY0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgT1ZQTiBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBjb25maWcgaW4gcGxheSBoZXJlIGlzIGRlZmluaXRlbHkgYE9WUE5gLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBpbW1lZGlhdGVseSBqdW1wIGludG8gYGRyaXZlcnMvbmV0L0tjb25maWdgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhpcyBPcGVuVlBOIGNvbmZpZ3VyYXRpb24uIFdlJiMzOTtyZSBsb29raW5nIHRvIHVuZGVyc3RhbmQgYW55IGJ1aWxkLXRpbWUgcmVsYXRpb25zaGlwcywgcmVxdWlyZWQgZmVhdHVyZXMsIG9yIHBsYXRmb3JtLXNwZWNpZmljIGNvbnNpZGVyYXRpb25zIGZvciBgT1ZQTmAgd2l0aGluIHRoaXMga2VybmVsIGNvbnRleHQuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIGlkZW50aWZ5IGFueSBtaXNzaW5nIHBpZWNlcyBvciBwb3RlbnRpYWwgY29uZmxpY3RzIGJlZm9yZSB3ZSBldmVuIHRoaW5rIGFib3V0IGJ1aWxkaW5nIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzZWUgd2hhdCBgS2NvbmZpZ2AgcmV2ZWFscy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDIxOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0XG4gMTAxOlx0XHQgIFNheSBOIGhlcmUgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91JiMzOTtyZSBkb2luZy5cbiAxMDI6XHRcbiAxMDM6XHRjb25maWcgT1ZQTlxuIDEwNDpcdFx0dHJpc3RhdGUgXCYjMzQ7T3BlblZQTiBkYXRhIGNoYW5uZWwgb2ZmbG9hZFwmIzM0O1xuIDEwNTpcdFx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IElORVRcbiAxMDY6XHRcdHNlbGVjdCBEU1RfQ0FDSEVcbiAxMDc6XHRcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuIDEwODpcdFx0c2VsZWN0IENSWVBUT1xuIDEwOTpcdFx0c2VsZWN0IENSWVBUT19BRVNcbiAxMTA6XHRcdHNlbGVjdCBDUllQVE9fR0NNXG4gMTExOlx0XHRzZWxlY3QgQ1JZUFRPX0NIQUNIQTIwUE9MWTEzMDVcbiAxMTI6XHRcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXG4gMTEzOlx0XHRoZWxwXG4gMTE0Olx0XHQgIFRoaXMgbW9kdWxlIGVuaGFuY2VzIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgT3BlblZQTiB1c2Vyc3BhY2Ugc29mdHdhcmVcbiAxMTU6XHRcdCAgYnkgb2ZmbG9hZGluZyB0aGUgZGF0YSBjaGFubmVsIHByb2Nlc3NpbmcgdG8ga2VybmVsc3BhY2UuXG4gMTE2Olx0XG4gMTE3Olx0Y29uZmlnIEVRVUFMSVpFUlxuIDExODpcdFx0dHJpc3RhdGUgXCYjMzQ7RVFMIChzZXJpYWwgbGluZSBsb2FkIGJhbGFuY2luZykgc3VwcG9ydFwmIzM0O1xuIDExOTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDIxOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0NTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE9wZW5WUE4gQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGUgZGVwZW5kZW5jaWVzOiBgTkVUYCBhbmQgYElORVRgLiBUaGF0JiMzOTtzIHN0YW5kYXJkIHN0dWZmIGZvciBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkuIFRoZSBzZWxlY3RlZCBvcHRpb25zIGFyZSBpbnRlcmVzdGluZzogYERTVF9DQUNIRWAsIHdoaWNoIHByb2JhYmx5IG1lYW5zIHNvbWUga2luZCBvZiBkZXN0aW5hdGlvbiBjYWNoaW5nLCB3aGljaCBpcyBhbiBvcHRpbWl6YXRpb24gc3RyYXRlZ3kgZm9yIHJvdXRpbmcgYW5kIGNvbm5lY3Rpb24gc2V0dXA7IGBORVRfVURQX1RVTk5FTGAsIHN1Z2dlc3RpbmcgVURQIHR1bm5lbGluZywgYXMgZXhwZWN0ZWQgd2l0aCBPcGVuVlBOOyBgQ1JZUFRPYCwgd2hpY2ggaXMgYSBnaXZlbjsgdGhlbiB3ZSBoYXZlIHRoZSBzcGVjaWZpYyBjcnlwdG9ncmFwaGljIGFsZ29yaXRobXMg4oCTIGBDUllQVE9fQUVTYCwgYENSWVBUT19HQ01gLCBgQ1JZUFRPX0NIQUNIQTIwUE9MWTEzMDVgIHdoaWNoIGluZGljYXRlcyBBRVMsIEdhbG9pcy9Db3VudGVyIE1vZGUsIGFuZCBDaGFDaGEyMC1Qb2x5MTMwNSBlbmNyeXB0aW9uIHN1cHBvcnQsIHJlc3BlY3RpdmVseSwgYW5kIGBTVFJFQU1fUEFSU0VSYCwgd2hpY2ggaXMgYWxtb3N0IGNlcnRhaW5seSBhYm91dCBwYXJzaW5nIHRoZSBpbmNvbWluZyBkYXRhIHN0cmVhbS4KClJpZ2h0LCBzbyB0byBlbmFibGUgdGhlIHJlbGV2YW50IE9wZW5WUE4gY29uZmlndXJhdGlvbiwgdGhlIGtleSBoZXJlIGlzIGBPVlBOYC4gVGhhdCYjMzk7cyBvdXIgdGFyZ2V0LgoKTm93LCB3aGVyZSBhcmUgdGhlIGtleSBjaGFuZ2VzPyBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGtleSBhcmVhcy4gSSBzZWUgYSBsaXN0IG9mIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBydW4gdGhyb3VnaCB0aGVzZSBpbiBteSBoZWFkLgoKKiAgIGBvdnBuX2NyeXB0b19rZXlfc2xvdF9yZWxlYXNlYCwgYW5kIGBvdnBuX2NyeXB0b19raWxsX2tleWAgdGhlc2UgZGVhbCB3aXRoIGNyeXB0b2dyYXBoaWMga2V5cywgbGlrZWx5IG1hbmFnaW5nIHRoZWlyIGxpZmVjeWNsZS4gYG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZnJlZV93b3JrYCwgYG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3YCwgdGhpcyBkZWFscyB3aXRoIEFFQUQgY2lwaGVycywgc28gcHJvYmFibHkgcGFydCBvZiB0aGUgaW5pdGlhbCBjcnlwdG9ncmFwaGljIHNldHVwLCBvciBrZXkgbWFuYWdlbWVudC4KKiAgIGBvdnBuX2RlY3J5cHRfcG9zdGAsIGBvdnBuX2VuY3J5cHRfcG9zdGAsIHRoZXNlIGFyZSBwb3N0LXByb2Nlc3Npbmcgc3RlcHMuCiogICBgb3Zwbl9pbml0YCwgYG92cG5fY2xlYW51cGAsIHRoZSBiYXNpYyBsaWZlY3ljbGUuCiogICBgb3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXRgLCBgb3Zwbl9wZWVyX2tlZXBhbGl2ZV93b3JrX3NpbmdsZWAsIGBvdnBuX3BlZXJfa2VlcGFsaXZlX3dvcmtgIHdoaWNoIHNlZW1zIHRvIGJlIGFib3V0IGtlZXBhbGl2ZSBmdW5jdGlvbmFsaXR5LgoqICAgYG92cG5fdGNwX3JjdmAsIGBvdnBuX3RjcF9zZW5kX3NvY2tgLCBgb3Zwbl90Y3Bfd3JpdGVfc3BhY2VgIGlzIHRoZSBUQ1AgZnVuY3Rpb25hbGl0eS4KCk9rYXksIGxldCYjMzk7cyBob25lIGluIG9uIHRoZSBpbXBvcnRhbnQgZnVuY3Rpb25zLCB0aGlzIGlzIHRoZSBjb3JlOiBgb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZWAsIGBvdnBuX2NyeXB0b19raWxsX2tleWAsIGBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X25ld2AsIGBvdnBuX3BlZXJfa2VlcGFsaXZlX3NldGAsIGBvdnBuX3BlZXJfa2VlcGFsaXZlX3dvcmtgLiBOb3csIGFyZSB0aGV5IGV4cG9ydGVkIG9yIHN0YXRpYz8gQWgsIGdvb2QsIHRoZXkmIzM5O3JlIG5vdCBzdGF0aWMsIG1lYW5pbmcgdGhleSYjMzk7cmUgYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgdGhlIGN1cnJlbnQgc2NvcGUuIFRoYXQgaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBlbnRyeSBwb2ludHMgb3IgY29yZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4KSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgSSBuZWVkIHRvIHZlcmlmeSB0aGVzZSBmdW5jdGlvbnMuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY2hhbmdlcyBhcmUgaGFwcGVuaW5nLCB0aGUgY3J5cHRvZ3JhcGhpYyBrZXkgbWFuYWdlbWVudCBhbmQga2VlcGFsaXZlIG1lY2hhbmlzbXMsIHNvIGxldCBtZSB0YWtlIGEgY2xvc2VyIGxvb2sgYW5kIGJlZ2luIGZyb20gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMjE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3Zwbl9jcnlwdG9fa2lsbF9rZXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9vdnBuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jPTMyPXZvaWQgb3Zwbl9jcnlwdG9fc3RhdGVfcmVsZWFzZShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzKVxuLS1cbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmMtNDktLyogcmVtb3ZlcyB0aGUga2V5IG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgaWQgZnJvbSB0aGUgY3J5cHRvIGNvbnRleHQgKi9cbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmM6NTA6Ym9vbCBvdnBuX2NyeXB0b19raWxsX2tleShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzLCB1OCBrZXlfaWQpXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jLTUxLXtcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oPTE0MT1pbnQgb3Zwbl9jcnlwdG9fY29uZmlnX2dldChzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzLFxuLS1cbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmgtMTQ0LVxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaDoxNDU6Ym9vbCBvdnBuX2NyeXB0b19raWxsX2tleShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzLCB1OCBrZXlfaWQpO1xuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaC0xNDYtXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9pby5jPTIzOD12b2lkIG92cG5fZW5jcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTI2NC1cdFx0XHQgICAgcGVlci1cdTAwM2VpZCk7XG5kcml2ZXJzL25ldC9vdnBuL2lvLmM6MjY1Olx0XHRpZiAob3Zwbl9jcnlwdG9fa2lsbF9rZXkoXHUwMDI2cGVlci1cdTAwM2VjcnlwdG8sIGtzLVx1MDAzZWtleV9pZCkpXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtMjY2LVx0XHRcdC8qIGxldCB1c2Vyc3BhY2Uga25vdyBzbyB0aGF0IGEgbmV3IGtleSBtdXN0IGJlIG5lZ290aWF0ZWQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAyMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDMyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRhdGEgUGF0aCBDb25jZXJucyBhbmQgS2VlcGFsaXZlIEludGVncmF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBPcGVuVlBOIGtlcm5lbCBtb2R1bGUgaGVyZS4gVGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGBvdnBuX2NyeXB0b19raWxsX2tleWAg4oCTIHRoYXQmIzM5O3MgYSBrZXkgbWFuYWdlbWVudCBmdW5jdGlvbiwgbGlrZWx5IGRlYWxpbmcgd2l0aCBjcnlwdG8ga2V5IGNsZWFudXAg4oCTIGl0JiMzOTtzIGRpcmVjdGx5IGNhbGxlZCBmcm9tIGBvdnBuX2VuY3J5cHRfcG9zdGAuIEFuZCBgb3Zwbl9lbmNyeXB0X3Bvc3RgLCB0aGF0JiMzOTtzIGZpcm1seSBpbiB0aGUgKmRhdGEgcGF0aCouIE1lYW5pbmcgYW55IGluZWZmaWNpZW5jeSB0aGVyZSBoYXMgYW4gaW1tZWRpYXRlIGltcGFjdCBvbiB0aHJvdWdocHV0IGFuZCBsYXRlbmN5LiBXZSBuZWVkIHRvIGJlICp2ZXJ5KiBtaW5kZnVsIG9mIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhhdCBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgIGNhbGwsIGVzcGVjaWFsbHkgaXRzIHN5bmNocm9uaXphdGlvbiBvciBwb3RlbnRpYWwgbG9ja2luZy4gQW55IGJsb2NraW5nIGluIGtleSBtYW5hZ2VtZW50IHdpbGwgYmxlZWQgZGlyZWN0bHkgaW50byB0aGUgZW5jcnlwdCBhbmQgdHJhbnNtaXQgdGltZS4KCk9uIHRoZSBvdGhlciBoYW5kLCBgb3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXRgIGlzIGJlaW5nIGNhbGxlZCBmcm9tICpuZXRsaW5rKi4gSW50ZXJlc3RpbmcuIFRoYXQgbGlrZWx5IHRpZXMgaW50byB0aGUgY29udHJvbCBwbGFuZSwgc2V0dGluZyBrZWVwYWxpdmUgcGFyYW1ldGVycyBmb3IgYSBwZWVyLCBwcm9iYWJseSBpbiByZXNwb25zZSB0byB1c2VyIGNvbmZpZ3VyYXRpb24gb3IgbmV0d29yayBldmVudHMuIFRoaXMgc3VnZ2VzdHMgYSBjb250cm9sIHBhdGggaW50ZWdyYXRpb24sIHdpdGggcG90ZW50aWFsIHRvIHRyaWdnZXIga2VlcGFsaXZlIGJlaGF2aW91ciBvbiBjZXJ0YWluIGNvbmRpdGlvbnMuIFdlIHNob3VsZCBtYWtlIHN1cmUgd2UmIzM5O3JlIG1hbmFnaW5nIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGVzZSB0d28gcGF0aHMgZWZmaWNpZW50bHkuIEFyZSB0aGVyZSBhbnkgcmFjZSBjb25kaXRpb25zLCBkYXRhIGluY29uc2lzdGVuY2llcywgb3IgY29udGVudGlvbiBwb3NzaWJpbGl0aWVzIHRoYXQgd2UgbmVlZCB0byBzY3J1dGluaXplIGNhcmVmdWxseT8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGVzZSB0d28gaW5kZXBlbmRlbnQgcGllY2VzLCBkYXRhIHBhdGggZW5jcnlwdGlvbi9rZXkgaGFuZGxpbmcgYW5kIGNvbnRyb2wgcGF0aCBrZWVwYWxpdmVzLCBwbGF5IHRvZ2V0aGVyLiBBbnkgdW5leHBlY3RlZCBiZWhhdmlvdXIgb24gb25lIHNpZGUgd2lsbCBpbmZsdWVuY2UgdGhlIG90aGVyLCB0aGlzIGNvdWxkIGltcGFjdCBuZXR3b3JrIHN0YWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMjE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9vdnBuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9vdnBuL25ldGxpbmsuYz0yNzk9c3RhdGljIGludCBvdnBuX25sX3BlZXJfbW9kaWZ5KHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLmMtMzMwLVx0XHR0aW1lb3V0ID0gbmxhX2dldF91MzIoYXR0cnNbT1ZQTl9BX1BFRVJfS0VFUEFMSVZFX1RJTUVPVVRdKTtcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay5jOjMzMTpcdFx0b3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXQocGVlciwgaW50ZXJ2LCB0aW1lb3V0KTtcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay5jLTMzMi1cdH1cbi0tXG5kcml2ZXJzL25ldC9vdnBuL3BlZXIuYz0yNT1zdGF0aWMgdm9pZCB1bmxvY2tfb3ZwbihzdHJ1Y3Qgb3Zwbl9wcml2ICpvdnBuLFxuLS1cbmRyaXZlcnMvbmV0L292cG4vcGVlci5jLTQwLS8qKlxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmM6NDE6ICogb3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXQgLSBjb25maWd1cmUga2VlcGFsaXZlIHZhbHVlcyBmb3IgcGVlclxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmMtNDItICogQHBlZXI6IHRoZSBwZWVyIHRvIGNvbmZpZ3VyZVxuLS1cbmRyaXZlcnMvbmV0L292cG4vcGVlci5jLTQ1LSAqL1xuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmM6NDY6dm9pZCBvdnBuX3BlZXJfa2VlcGFsaXZlX3NldChzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCB1MzIgaW50ZXJ2YWwsIHUzMiB0aW1lb3V0KVxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmMtNDcte1xuLS1cbmRyaXZlcnMvbmV0L292cG4vcGVlci5oPTE1ND1ib29sIG92cG5fcGVlcl9jaGVja19ieV9zcmMoc3RydWN0IG92cG5fcHJpdiAqb3Zwbiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9vdnBuL3BlZXIuaC0xNTYtXG5kcml2ZXJzL25ldC9vdnBuL3BlZXIuaDoxNTc6dm9pZCBvdnBuX3BlZXJfa2VlcGFsaXZlX3NldChzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCB1MzIgaW50ZXJ2YWwsIHUzMiB0aW1lb3V0KTtcbmRyaXZlcnMvbmV0L292cG4vcGVlci5oLTE1OC12b2lkIG92cG5fcGVlcl9rZWVwYWxpdmVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAyMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMxNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKlJlZmxlY3Rpbmcgb24gT3BlblZQTiBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIE9wZW5WUE4tcmVsYXRlZCBiaXRzIGFuZCBwaWVjZXMuICpgb3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXRgKiwgeWVzLCB0aGF0IGxvb2tzIHByb21pc2luZywgZ29vZCB0byBzZWUgdGhhdCBiZWluZyB1c2VkLCBwcm9iYWJseSBmb3Iga2VlcGluZyB0aG9zZSBjb25uZWN0aW9ucyBoZWFsdGh5IGFuZCBhbGl2ZSDigJMgYWx3YXlzIGEga2V5IGNvbmNlcm4gd2l0aCBWUE5zLiBBbmQgdGhlbi4uLiAqYG92cG5fY3J5cHRvX2tleV9zbG90X3JlbGVhc2VgKiDigJMgYWgsIHJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBjbGVhbnVwIG1lY2hhbmlzbSBmb3IgY3J5cHRvZ3JhcGhpYyBrZXlzLCBoYW5kbGluZyB0aGVpciByZWxlYXNlIHdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCBoaXRzIHplcm8uIFRoYXQmIzM5O3MgZXhhY3RseSBob3cgaXQgc2hvdWxkIGJlLiBFbnN1cmVzIHdlJiMzOTtyZSBub3QgbGVha2luZyByZXNvdXJjZXMgYW5kIGtlZXBzIHRoaW5ncyBzZWN1cmUuIEdvb2QsIGVmZmljaWVudCBtZW1vcnkgbWFuYWdlbWVudCBpcyBjcml0aWNhbCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAyMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnBuX2NyeXB0b19rZXlfc2xvdF9yZWxlYXNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvb3Zwbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYy0yMC1cbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmM6MjE6dm9pZCBvdnBuX2NyeXB0b19rZXlfc2xvdF9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKVxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYy0yMi17XG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaD0xMTE9b3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcHJpbWFyeShjb25zdCBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzKVxuLS1cbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmgtMTIzLVxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaDoxMjQ6dm9pZCBvdnBuX2NyeXB0b19rZXlfc2xvdF9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKTtcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmgtMTI1LVxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaD0xMjY9c3RhdGljIGlubGluZSB2b2lkIG92cG5fY3J5cHRvX2tleV9zbG90X3B1dChzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzKVxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaC0xMjcte1xuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaDoxMjg6XHRrcmVmX3B1dChcdTAwMjZrcy1cdTAwM2VyZWZjb3VudCwgb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZSk7XG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oLTEyOS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDIxOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODQ0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIE9wZW5WUE4gQ3J5cHRvIEtleSBNYW5hZ2VtZW50KioKCkFscmlnaHQsICpvdnBuXF9jcnlwdG9cX2tleVxfc2xvdFxfcmVsZWFzZSogaXMgcHJlY2lzZWx5IHdoYXQgSSYjMzk7ZCBleHBlY3QgdG8gc2VlIGluIGEga2V5IG1hbmFnZW1lbnQgc3lzdGVtLCB0aGUgZXhwZWN0ZWQgcmVsZWFzZSBvZiB0aGUga2V5IHNsb3QgaXMgZ29vZCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQuIFRoYXQmIzM5O3MgYSBzb2xpZCBzdGFydC4gTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBhIGJpdCBkZWVwZXIgaW50byB0aGUgbGlmZWN5Y2xlLiBUaGUgbmF0dXJhbCBwbGFjZSB0byBsb29rIG5leHQgaXMgaXRzIGNvdW50ZXJwYXJ0LCB0aGUgYWxsb2NhdGlvbiBmdW5jdGlvbjogKm92cG5cX2FlYWRcX2NyeXB0b1xfa2V5XF9zbG90XF9uZXcqLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgbmV3IHNsb3RzIGFyZSBjcmVhdGVkLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNoZWNrcyBvbiB0aGlzIGZ1bmN0aW9uIHRoYXQgbmVlZCB0byBiZSBtYWRlLiBBcmUgdGhleSBsaW5rZWQsIGluIHRlcm1zIG9mIHJlc291cmNlIG1hbmFnZW1lbnQsIG9yIGFyZSB0aGVyZSBzZXBhcmF0ZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyB0aGF0IG92ZXJsYXA/IFdoYXQgZG9lcyB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzIGFjdHVhbGx5IGVudGFpbCDigJMgbWVtb3J5IGFsbG9jYXRpb24sIGtleSBkZXJpdmF0aW9uL2dlbmVyYXRpb24sIGluaXRpYWxpemF0aW9uIG9mIHRoZSB1bmRlcmx5aW5nIGNyeXB0byBjb250ZXh0PyBJIG5lZWQgdG8gY2hlY2sgdGhlIHBvdGVudGlhbCBmb3IgdnVsbmVyYWJpbGl0aWVzLCBzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQsIGltcHJvcGVyIGtleSBkZXJpdmF0aW9uLCBvciBpbnN1ZmZpY2llbnQgZW50cm9weSBzb3VyY2luZyBkdXJpbmcgdGhlIGtleSBnZW5lcmF0aW9uLiBJIHdhbnQgdG8gbG9vayBmb3IgcG90ZW50aWFsIGxvY2stdXBzIHRvby4gVGhlIG1vcmUgSSBjYW4gdW5kZXJzdGFuZCBhYm91dCB0aGlzIGNyaXRpY2FsIHBhaXJpbmcsIHRoZSBtb3JlIGVmZmVjdGl2ZSBteSBvdmVyYWxsIGFuYWx5c2lzIG9mIE9wZW5WUE4mIzM5O3MgY3J5cHRvIGltcGxlbWVudGF0aW9uIGNhbiBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMjE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9vdnBuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jPTc4PWludCBvdnBuX2NyeXB0b19zdGF0ZV9yZXNldChzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzLFxuLS1cbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmMtODctXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jOjg4Olx0bmV3ID0gb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXcoXHUwMDI2cGtyLVx1MDAzZWtleSk7XG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jLTg5LVx0aWYgKElTX0VSUihuZXcpKVxuLS1cbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYz00MDA9c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICpcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYzo0MDE6b3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXcoY29uc3Qgc3RydWN0IG92cG5fa2V5X2NvbmZpZyAqa2MpXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmMtNDAyLXtcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmg9MjM9c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICpcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaDoyNDpvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X25ldyhjb25zdCBzdHJ1Y3Qgb3Zwbl9rZXlfY29uZmlnICprYyk7XG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmgtMjUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDIxOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDg2CgkJCQkJCQlvdXRwdXQ6IDE4MAoJCQkJCQkJdGhvdWdodHM6IDI4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE9wZW5WUE4gRGF0YSBDaGFubmVsIE9mZmxvYWQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIGBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X25ld2AgbG9va3Mgc29saWQsIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IGZvY3VzLCB0aGVuLCBuZWVkcyB0byBiZSBvbiB0aGVzZSBzeW1ib2xzOiBgb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZWAsIGBvdnBuX2NyeXB0b19raWxsX2tleWAsIGBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X25ld2AsIGBvdnBuX3BlZXJfa2VlcGFsaXZlX3NldGAsIGFuZCBgb3Zwbl9wZWVyX2tlZXBhbGl2ZV93b3JrYC4gVGhpcyBpcyBhYm91dCBob3cgdGhlIGNyeXB0byBrZXlzIGFyZSBoYW5kbGVkIGluIHRoZSBvZmZsb2FkIGRyaXZlci4KClRoZSBwYXRjaCBpcyB0b3VjaGluZyB0aGUgT3BlblZQTiBkYXRhIGNoYW5uZWwgb2ZmbG9hZCBkcml2ZXIgKGBkcml2ZXJzL25ldC9vdnBuYCksIHNvIGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgbmV0d29yayBkcml2ZXIg4oCTIGFsd2F5cyBzb21ldGhpbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0by4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBzd2FwcGluZyBgY2FsbF9yY3VgIGZvciBgcXVldWVfcmN1X3dvcmtgIGZvciBjcnlwdG8ga2V5IHNsb3QgZnJlZWluZywgd2hpY2ggaXMgYSBnb29kIG1vdmUgZm9yIGluY3JlYXNlZCBlZmZpY2llbmN5IGFuZCByZWR1Y2VkIGNvbnRlbnRpb24uIFRoZXkmIzM5O3JlIGludHJvZHVjaW5nIGEgZGVkaWNhdGVkIHdvcmtxdWV1ZSAoYG92cG5fd3FgKSBmb3IgYWxsIG92cG4tc3BlY2lmaWMgd29yaywgYW5kIGZpeGluZyBhIGxvZ2ljIGJ1ZyBpbiBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgLiBUaGVzZSBhcmUgYWxsIGNydWNpYWwgaW1wcm92ZW1lbnRzLCBhbmQgdGhpcyBpcyBnb29kIHRvIHNlZSBhcyBpdCBzdHJlYW1saW5lcyBvcGVyYXRpb25zLgoKTm93LCBsZXQgbWUganVzdCBjb25maXJtIHRoZSBjb25maWd1cmF0aW9ucyBhcmUgYWxsIGluIG9yZGVyLiBUaGV5JiMzOTtyZSByZWZlcmVuY2luZyBgT1ZQTmAsIHdoaWNoIGRlcGVuZHMgb24gYE5FVGAgYW5kIGBJTkVUYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIExvb2tzIGxpa2UgaXQgYWxzbyBzZWxlY3RzIGBEU1RfQ0FDSEVgLCBgTkVUX1VEUF9UVU5ORUxgLCBgQ1JZUFRPYCwgYENSWVBUT19BRVNgLCBgQ1JZUFRPX0dDTWAsIGBDUllQVE9fQ0hBQ0hBMjBQT0xZMTMwNWAsIGFuZCBgU1RSRUFNX1BBUlNFUmAuIEdvb2QsIHRoZSBjb25maWd1cmF0aW9uIGlzIHN1ZmZpY2llbnQuIFNlZW1zIGxpa2UgZXZlcnl0aGluZyBjaGVja3Mgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAyMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1ZQTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O292cG5fY3J5cHRvX2tleV9zbG90X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7b3Zwbl9jcnlwdG9fa2lsbF9rZXkmIzM0OywKICAgICYjMzQ7b3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXcmIzM0OywKICAgICYjMzQ7b3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXQmIzM0OywKICAgICYjMzQ7b3Zwbl9wZWVyX2tlZXBhbGl2ZV93b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPcGVuVlBOIGRhdGEgY2hhbm5lbCBvZmZsb2FkIGRyaXZlciAoZHJpdmVycy9uZXQvb3ZwbikuIEl0IHJlcGxhY2VzIGNhbGxfcmN1IHdpdGggcXVldWVfcmN1X3dvcmsgZm9yIGZyZWVpbmcgY3J5cHRvIGtleSBzbG90cywgaW50cm9kdWNlcyBhIGRlZGljYXRlZCB3b3JrcXVldWUgKG92cG5fd3EpIGZvciBhbGwgb3Zwbi1zcGVjaWZpYyB3b3JrLCBhbmQgZml4ZXMgYSBsb2dpYyBidWcgaW4gb3Zwbl9jcnlwdG9fa2lsbF9rZXkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gYSByZWFjaGFibGUgbmV0d29yayBkcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09WUE4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnBuX2NyeXB0b19rZXlfc2xvdF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O292cG5fY3J5cHRvX2tpbGxfa2V5JiMzNDssCiAgICAmIzM0O292cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3JiMzNDssCiAgICAmIzM0O292cG5fcGVlcl9rZWVwYWxpdmVfc2V0JiMzNDssCiAgICAmIzM0O292cG5fcGVlcl9rZWVwYWxpdmVfd29yayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgT3BlblZQTiBkYXRhIGNoYW5uZWwgb2ZmbG9hZCBkcml2ZXIgKGRyaXZlcnMvbmV0L292cG4pLiBJdCByZXBsYWNlcyBjYWxsX3JjdSB3aXRoIHF1ZXVlX3JjdV93b3JrIGZvciBmcmVlaW5nIGNyeXB0byBrZXkgc2xvdHMsIGludHJvZHVjZXMgYSBkZWRpY2F0ZWQgd29ya3F1ZXVlIChvdnBuX3dxKSBmb3IgYWxsIG92cG4tc3BlY2lmaWMgd29yaywgYW5kIGZpeGVzIGEgbG9naWMgYnVnIGluIG92cG5fY3J5cHRvX2tpbGxfa2V5LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGEgcmVhY2hhYmxlIG5ldHdvcmsgZHJpdmVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAyMTo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDIxOjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBmb2N1c2VzIG9uIGZpeGluZyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgLCByZW9yZGVyaW5nIGNsZWFudXAgZnVuY3Rpb25zIHRvIHByZXZlbnQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIGFuZCBtaWdyYXRpbmcgd29yayBpdGVtcyBmcm9tIHRoZSBzeXN0ZW0gd29ya3F1ZXVlIHRvIGEgZGVkaWNhdGVkIGBvdnBuX3dxYCB3b3JrcXVldWUuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoTlVMTCBkZXJlZmVyZW5jZXMsIFVBRikgYW5kIGNvbmN1cnJlbmN5IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBubyBjaGFuZ2VzIHRvIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE5NWYyNmRiNTIyMmQ2MmExZmUzOTI0MGM0OGY4ZTBhZWI5MTY2MDkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyA5IDIxOjUyOjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmMKaW5kZXggOTA1ODBlMzIwNTJmYi4uN2U1NDU0Mjg5MDBhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jCkBAIC0xOCwyMCAmIzQzOzE4LDEyIEBACiAjaW5jbHVkZSAmIzM0O2NyeXB0b19hZWFkLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtjcnlwdG8uaCYjMzQ7CiAKLXN0YXRpYyB2b2lkIG92cG5fa3NfZGVzdHJveV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQotewotCXN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3M7Ci0KLQlrcyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QsIHJjdSk7Ci0Jb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9kZXN0cm95KGtzKTsKLX0KLQogdm9pZCBvdnBuX2NyeXB0b19rZXlfc2xvdF9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQogewogCXN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3M7CiAKIAlrcyA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QsIHJlZmNvdW50KTsKLQljYWxsX3JjdSgmYW1wO2tzLSZndDtyY3UsIG92cG5fa3NfZGVzdHJveV9yY3UpOwomIzQzOwlxdWV1ZV9yY3Vfd29yayhvdnBuX3dxLCAmYW1wO2tzLSZndDtmcmVlX3dvcmspOwogfQogCiAvKiBjYW4gb25seSBiZSBpbnZva2VkIHdoZW4gYWxsIHBlZXIgcmVmZXJlbmNlcyBoYXZlIGJlZW4gZHJvcHBlZCAoaS5lLiBSQ1UKQEAgLTU4LDE1ICYjNDM7NTAsMTkgQEAgdm9pZCBvdnBuX2NyeXB0b19zdGF0ZV9yZWxlYXNlKHN0cnVjdCBvdnBuX2NyeXB0b19zdGF0ZSAqY3MpCiBib29sIG92cG5fY3J5cHRvX2tpbGxfa2V5KHN0cnVjdCBvdnBuX2NyeXB0b19zdGF0ZSAqY3MsIHU4IGtleV9pZCkKIHsKIAlzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzID0gTlVMTDsKJiM0MzsJc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICp0bXA7CiYjNDM7CWludCBzbG90ID0gMDsKIAogCXNwaW5fbG9ja19iaCgmYW1wO2NzLSZndDtsb2NrKTsKLQlpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNzLSZndDtzbG90c1swXSktJmd0O2tleV9pZCA9PSBrZXlfaWQpIHsKLQkJa3MgPSByY3VfcmVwbGFjZV9wb2ludGVyKGNzLSZndDtzbG90c1swXSwgTlVMTCwKLQkJCQkJIGxvY2tkZXBfaXNfaGVsZCgmYW1wO2NzLSZndDtsb2NrKSk7Ci0JfSBlbHNlIGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoY3MtJmd0O3Nsb3RzWzFdKS0mZ3Q7a2V5X2lkID09IGtleV9pZCkgewotCQlrcyA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoY3MtJmd0O3Nsb3RzWzFdLCBOVUxMLAotCQkJCQkgbG9ja2RlcF9pc19oZWxkKCZhbXA7Y3MtJmd0O2xvY2spKTsKJiM0MzsJdG1wID0gcmN1X2FjY2Vzc19wb2ludGVyKGNzLSZndDtzbG90c1tzbG90XSk7CiYjNDM7CWlmICghdG1wIHx8IHRtcC0mZ3Q7a2V5X2lkICE9IGtleV9pZCkgewomIzQzOwkJc2xvdCA9IDE7CiYjNDM7CQl0bXAgPSByY3VfYWNjZXNzX3BvaW50ZXIoY3MtJmd0O3Nsb3RzW3Nsb3RdKTsKIAl9CiYjNDM7CiYjNDM7CWlmICh0bXAgJmFtcDsmYW1wOyB0bXAtJmd0O2tleV9pZCA9PSBrZXlfaWQpCiYjNDM7CQlrcyA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoY3MtJmd0O3Nsb3RzW3Nsb3RdLCBOVUxMLAomIzQzOwkJCQkJIGxvY2tkZXBfaXNfaGVsZCgmYW1wO2NzLSZndDtsb2NrKSk7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtjcy0mZ3Q7bG9jayk7CiAKIAlpZiAoa3MpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oIGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaAppbmRleCAwZTI4NGZlYzNhNzVhLi5lM2ZlYjE2ZDU0OTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmgKQEAgLTEwLDYgJiM0MzsxMCw4IEBACiAjaWZuZGVmIF9ORVRfT1ZQTl9PVlBOQ1JZUFRPX0hfCiAjZGVmaW5lIF9ORVRfT1ZQTl9PVlBOQ1JZUFRPX0hfCiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiYjNDM7CiAjaW5jbHVkZSAmIzM0O3BrdGlkLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtwcm90by5oJiMzNDsKIApAQCAtNDUsOCAmIzQzOzQ3LDggQEAgc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90IHsKIAogCXN0cnVjdCBvdnBuX3BrdGlkX3JlY3YgcGlkX3JlY3YgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAlzdHJ1Y3Qgb3Zwbl9wa3RpZF94bWl0IHBpZF94bWl0IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CiYjNDM7CXN0cnVjdCByY3Vfd29yayBmcmVlX3dvcms7CiAJc3RydWN0IGtyZWYgcmVmY291bnQ7Ci0Jc3RydWN0IHJjdV9oZWFkIHJjdTsKIH07CiAKIHN0cnVjdCBvdnBuX2NyeXB0b19zdGF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmMgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmMKaW5kZXggOGYwN2M0MTg2MjJiMi4uNzRlYWY2ZmFjMmY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYwpAQCAtOSw2ICYjNDM7OSw3IEBACiAKICNpbmNsdWRlICZsdDtjcnlwdG8vYWVhZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaXAuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaXB2Ni5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC91ZHAuaCZndDsKQEAgLTM4MCwxMyAmIzQzOzM4MSwxOSBAQCBzdGF0aWMgc3RydWN0IGNyeXB0b19hZWFkICpvdnBuX2FlYWRfaW5pdChjb25zdCBjaGFyICp0aXRsZSwKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCi12b2lkIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZGVzdHJveShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzKQomIzQzO3N0YXRpYyB2b2lkIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZnJlZShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzKQogewotCWlmICgha3MpCi0JCXJldHVybjsKLQogCWNyeXB0b19mcmVlX2FlYWQoa3MtJmd0O2VuY3J5cHQpOwogCWNyeXB0b19mcmVlX2FlYWQoa3MtJmd0O2RlY3J5cHQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2ZyZWVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzOwomIzQzOwomIzQzOwlrcyA9IGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSwgc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90LAomIzQzOwkJCSAgZnJlZV93b3JrKTsKJiM0MzsJb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9mcmVlKGtzKTsKIAlrZnJlZShrcyk7CiB9CiAKQEAgLTQyMCw2ICYjNDM7NDI3LDcgQEAgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXcoY29uc3Qgc3RydWN0IG92cG5fa2V5X2NvbmZpZyAqa2MpCiAKIAlrcy0mZ3Q7ZW5jcnlwdCA9IE5VTEw7CiAJa3MtJmd0O2RlY3J5cHQgPSBOVUxMOwomIzQzOwlJTklUX1JDVV9XT1JLKCZhbXA7a3MtJmd0O2ZyZWVfd29yaywgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9mcmVlX3dvcmspOwogCWtyZWZfaW5pdCgmYW1wO2tzLSZndDtyZWZjb3VudCk7CiAJa3MtJmd0O2tleV9pZCA9IGtjLSZndDtrZXlfaWQ7CiAKQEAgLTQ1Myw3ICYjNDM7NDYxLDggQEAgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXcoY29uc3Qgc3RydWN0IG92cG5fa2V5X2NvbmZpZyAqa2MpCiAJcmV0dXJuIGtzOwogCiBkZXN0cm95X2tzOgotCW92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZGVzdHJveShrcyk7CiYjNDM7CW92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZnJlZShrcyk7CiYjNDM7CWtmcmVlKGtzKTsKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmggYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmgKaW5kZXggNjVhMmZmMzA3ODk4Ni4uZmFlM2I1ODVhNDNiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaApAQCAtMjIsNyAmIzQzOzIyLDYgQEAgaW50IG92cG5fYWVhZF9kZWNyeXB0KHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MsCiAKIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqCiBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X25ldyhjb25zdCBzdHJ1Y3Qgb3Zwbl9rZXlfY29uZmlnICprYyk7Ci12b2lkIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZGVzdHJveShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzKTsKIAogZW51bSBvdnBuX2NpcGhlcl9hbGcgb3Zwbl9hZWFkX2NyeXB0b19hbGcoc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vaW8uYyBiL2RyaXZlcnMvbmV0L292cG4vaW8uYwppbmRleCA5YTY2ZDY5MzAzOWEzLi45NTI2ZjgwOTZkYTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9vdnBuL2lvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvb3Zwbi9pby5jCkBAIC0yMDQsMTAgJiM0MzsyMDQsMTAgQEAgdm9pZCBvdnBuX2RlY3J5cHRfcG9zdCh2b2lkICpkYXRhLCBpbnQgcmV0KQogCQlvdnBuX2Rldl9kc3RhdHNfcnhfZHJvcHBlZChwZWVyLSZndDtvdnBuLSZndDtkZXYpOwogCWtmcmVlX3NrYihza2IpOwogZHJvcF9ub2NvdW50OgotCWlmIChsaWtlbHkocGVlcikpCi0JCW92cG5fcGVlcl9wdXQocGVlcik7CiAJaWYgKGxpa2VseShrcykpCiAJCW92cG5fY3J5cHRvX2tleV9zbG90X3B1dChrcyk7CiYjNDM7CWlmIChsaWtlbHkocGVlcikpCiYjNDM7CQlvdnBuX3BlZXJfcHV0KHBlZXIpOwogfQogCiAvKiBSWCBwYXRoIGVudHJ5IHBvaW50OiBkZWNyeXB0IHBhY2tldCBhbmQgZm9yd2FyZCBpdCB0byB0aGUgZGV2aWNlICovCkBAIC0zMDIsMTEgJiM0MzszMDIsMTEgQEAgdm9pZCBvdnBuX2VuY3J5cHRfcG9zdCh2b2lkICpkYXRhLCBpbnQgcmV0KQogZXJyOgogCWlmICh1bmxpa2VseShza2IpKQogCQlvdnBuX2Rldl9kc3RhdHNfdHhfZHJvcHBlZChwZWVyLSZndDtvdnBuLSZndDtkZXYpOwotCWlmIChsaWtlbHkocGVlcikpCi0JCW92cG5fcGVlcl9wdXQocGVlcik7CiYjNDM7CWtmcmVlX3NrYihza2IpOwogCWlmIChsaWtlbHkoa3MpKQogCQlvdnBuX2NyeXB0b19rZXlfc2xvdF9wdXQoa3MpOwotCWtmcmVlX3NrYihza2IpOwomIzQzOwlpZiAobGlrZWx5KHBlZXIpKQomIzQzOwkJb3Zwbl9wZWVyX3B1dChwZWVyKTsKIH0KIAogc3RhdGljIGJvb2wgb3Zwbl9lbmNyeXB0X29uZShzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9tYWluLmMgYi9kcml2ZXJzL25ldC9vdnBuL21haW4uYwppbmRleCAxNjhjZmU5YjU5YTk4Li4wNzA4MjQ5ZTk2MDdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9vdnBuL21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9vdnBuL21haW4uYwpAQCAtMTIsNiAmIzQzOzEyLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pbmV0ZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9ncm9fY2VsbHMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaXAuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvcnRuZXRsaW5rLmgmZ3Q7CkBAIC0yNiw2ICYjNDM7MjcsOSBAQAogI2luY2x1ZGUgJiMzNDt0Y3AuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3VkcC5oJiMzNDsKIAomIzQzOy8qIG1vZHVsZS1vd25lZCB3b3JrcXVldWUgb24gd2hpY2ggYWxsIG92cG4tc3BlY2lmaWMgd29yayBpcyBxdWV1ZWQgKi8KJiM0MztzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqb3Zwbl93cTsKJiM0MzsKIHN0YXRpYyB2b2lkIG92cG5fcHJpdl9mcmVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCiB7CiAJc3RydWN0IG92cG5fcHJpdiAqb3ZwbiA9IG5ldGRldl9wcml2KG5ldCk7CkBAIC0yNjQsMTAgJiM0MzsyNjgsMTYgQEAgc3RhdGljIGludCBfX2luaXQgb3Zwbl9pbml0KHZvaWQpCiAKIAlvdnBuX3RjcF9pbml0KCk7CiAKJiM0MzsJb3Zwbl93cSA9IGFsbG9jX3dvcmtxdWV1ZSgmIzM0O292cG4mIzM0OywgV1FfUEVSQ1BVLCAwKTsKJiM0MzsJaWYgKCFvdnBuX3dxKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDtvdnBuOiBjYW5ub3QgYWxsb2NhdGUgd29ya3F1ZXVlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwogCWVyciA9IHJ0bmxfbGlua19yZWdpc3RlcigmYW1wO292cG5fbGlua19vcHMpOwogCWlmIChlcnIpIHsKIAkJcHJfZXJyKCYjMzQ7b3ZwbjogY2FuJiMzOTt0IHJlZ2lzdGVyIHJ0bmwgbGluayBvcHM6ICVkXG4mIzM0OywgZXJyKTsKLQkJcmV0dXJuIGVycjsKJiM0MzsJCWdvdG8gZGVzdHJveV93cTsKIAl9CiAKIAllcnIgPSBvdnBuX25sX3JlZ2lzdGVyKCk7CkBAIC0yODAsNiAmIzQzOzI5MCw5IEBAIHN0YXRpYyBpbnQgX19pbml0IG92cG5faW5pdCh2b2lkKQogCiB1bnJlZ19ydG5sOgogCXJ0bmxfbGlua191bnJlZ2lzdGVyKCZhbXA7b3Zwbl9saW5rX29wcyk7CiYjNDM7ZGVzdHJveV93cToKJiM0MzsJZGVzdHJveV93b3JrcXVldWUob3Zwbl93cSk7CiYjNDM7CW92cG5fd3EgPSBOVUxMOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTI4OCw3ICYjNDM7MzAxLDExIEBAIHN0YXRpYyBfX2V4aXQgdm9pZCBvdnBuX2NsZWFudXAodm9pZCkKIAlvdnBuX25sX3VucmVnaXN0ZXIoKTsKIAlydG5sX2xpbmtfdW5yZWdpc3RlcigmYW1wO292cG5fbGlua19vcHMpOwogCiYjNDM7CWZsdXNoX3dvcmtxdWV1ZShvdnBuX3dxKTsKIAlyY3VfYmFycmllcigpOwomIzQzOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZShvdnBuX3dxKTsKJiM0MzsJb3Zwbl93cSA9IE5VTEw7CiB9CiAKIG1vZHVsZV9pbml0KG92cG5faW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL292cG5wcml2LmggYi9kcml2ZXJzL25ldC9vdnBuL292cG5wcml2LmgKaW5kZXggNTg5OGY2YWRhZGE3Zi4uODQ0OTkxNDBlNGJkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9vdnBucHJpdi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L292cG4vb3ZwbnByaXYuaApAQCAtMTUsNiAmIzQzOzE1LDEwIEBACiAjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9pZl9saW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9vdnBuLmgmZ3Q7CiAKJiM0MztzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdDsKJiM0MzsKJiM0MztleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm92cG5fd3E7CiYjNDM7CiAvKioKICAqIHN0cnVjdCBvdnBuX3BlZXJfY29sbGVjdGlvbiAtIGNvbnRhaW5lciBvZiBwZWVycyBmb3IgTXVsdGlQZWVyIG1vZGUKICAqIEBieV9pZDogdGFibGUgb2YgcGVlcnMgaW5kZXggYnkgSUQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vcGVlci5jIGIvZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmMKaW5kZXggYjA1MTlmOTg0MGQ4My4uYzk1NjU2Y2E3YzM1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmMKQEAgLTYyLDcgJiM0Mzs2Miw3IEBAIHZvaWQgb3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXQoc3RydWN0IG92cG5fcGVlciAqcGVlciwgdTMyIGludGVydmFsLCB1MzIgdGltZW91dCkKIAkvKiBub3cgdGhhdCBpbnRlcnZhbCBhbmQgdGltZW91dCBoYXZlIGJlZW4gY2hhbmdlZCwga2ljawogCSAqIG9mZiB0aGUgd29ya2VyIHNvIHRoYXQgdGhlIG5leHQgZGVsYXkgY2FuIGJlIHJlY29tcHV0ZWQKIAkgKi8KLQltb2RfZGVsYXllZF93b3JrKHN5c3RlbV9wZXJjcHVfd3EsICZhbXA7cGVlci0mZ3Q7b3Zwbi0mZ3Q7a2VlcGFsaXZlX3dvcmssIDApOwomIzQzOwltb2RfZGVsYXllZF93b3JrKG92cG5fd3EsICZhbXA7cGVlci0mZ3Q7b3Zwbi0mZ3Q7a2VlcGFsaXZlX3dvcmssIDApOwogfQogCiAvKioKQEAgLTEzNzEsNyAmIzQzOzEzNzEsNyBAQCBzdGF0aWMgdGltZTY0X3Qgb3Zwbl9wZWVyX2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLAogCQkJICAgcGVlci0mZ3Q7aWQpOwogCQlpZiAoV0FSTl9PTighb3Zwbl9wZWVyX2hvbGQocGVlcikpKQogCQkJcmV0dXJuIDA7Ci0JCWlmICghc2NoZWR1bGVfd29yaygmYW1wO3BlZXItJmd0O2tlZXBhbGl2ZV93b3JrKSkKJiM0MzsJCWlmICghcXVldWVfd29yayhvdnBuX3dxLCAmYW1wO3BlZXItJmd0O2tlZXBhbGl2ZV93b3JrKSkKIAkJCW92cG5fcGVlcl9wdXQocGVlcik7CiAJfQogCkBAIC0xNDYzLDggJiM0MzsxNDYzLDggQEAgdm9pZCBvdnBuX3BlZXJfa2VlcGFsaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQluZXRkZXZfZGJnKG92cG4tJmd0O2RldiwKIAkJCSAgICYjMzQ7c2NoZWR1bGluZyBrZWVwYWxpdmUgd29yazogbm93PSVsbHUgbmV4dF9ydW49JWxsdSBkZWx0YT0lbGx1XG4mIzM0OywKIAkJCSAgIG5leHRfcnVuLCBub3csIG5leHRfcnVuIC0gbm93KTsKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7b3Zwbi0mZ3Q7a2VlcGFsaXZlX3dvcmssCi0JCQkJICAgICAgKG5leHRfcnVuIC0gbm93KSAqIEhaKTsKJiM0MzsJCXF1ZXVlX2RlbGF5ZWRfd29yayhvdnBuX3dxLCAmYW1wO292cG4tJmd0O2tlZXBhbGl2ZV93b3JrLAomIzQzOwkJCQkgICAobmV4dF9ydW4gLSBub3cpICogSFopOwogCX0KIAl1bmxvY2tfb3ZwbihvdnBuLCAmYW1wO3JlbGVhc2VfbGlzdCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL3RjcC5jIGIvZHJpdmVycy9uZXQvb3Zwbi90Y3AuYwppbmRleCAwYWYxNDA1NWMzOWFhLi44ZmU4YThlNzUwYTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9vdnBuL3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L292cG4vdGNwLmMKQEAgLTE1MSw3ICYjNDM7MTUxLDcgQEAgc3RhdGljIHZvaWQgb3Zwbl90Y3BfcmN2KHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpCiAJLyogdGFrZSByZWZlcmVuY2UgZm9yIGRlZmVycmVkIHBlZXIgZGVsZXRpb24uIHNob3VsZCBuZXZlciBmYWlsICovCiAJaWYgKFdBUk5fT04oIW92cG5fcGVlcl9ob2xkKHBlZXIpKSkKIAkJZ290byBlcnJfbm9wZWVyOwotCWlmICghc2NoZWR1bGVfd29yaygmYW1wO3BlZXItJmd0O3RjcC5kZWZlcl9kZWxfd29yaykpCiYjNDM7CWlmICghcXVldWVfd29yayhvdnBuX3dxLCAmYW1wO3BlZXItJmd0O3RjcC5kZWZlcl9kZWxfd29yaykpCiAJCW92cG5fcGVlcl9wdXQocGVlcik7CiAJb3Zwbl9kZXZfZHN0YXRzX3J4X2Ryb3BwZWQocGVlci0mZ3Q7b3Zwbi0mZ3Q7ZGV2KTsKIGVycl9ub3BlZXI6CkBAIC0yODQsMTMgJiM0MzsyODQsMTIgQEAgc3RhdGljIHZvaWQgb3Zwbl90Y3Bfc2VuZF9zb2NrKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBzb2NrICpzaykKIAkJCSAqIHN0cmVhbSB0aGVyZWZvcmUgd2UgYWJvcnQgdGhlIGNvbm5lY3Rpb24KIAkJCSAqLwogCQkJb3Zwbl9wZWVyX2hvbGQocGVlcik7Ci0JCQlpZiAoIXNjaGVkdWxlX3dvcmsoJmFtcDtwZWVyLSZndDt0Y3AuZGVmZXJfZGVsX3dvcmspKQomIzQzOwkJCWlmICghcXVldWVfd29yayhvdnBuX3dxLCAmYW1wO3BlZXItJmd0O3RjcC5kZWZlcl9kZWxfd29yaykpCiAJCQkJb3Zwbl9wZWVyX3B1dChwZWVyKTsKIAogCQkJLyogd2UgYmFpbCBvdXQgaW1tZWRpYXRlbHkgYW5kIGtlZXAgdHhfaW5fcHJvZ3Jlc3Mgc2V0CiAJCQkgKiB0byB0cnVlLiBUaGlzIHdheSB3ZSBwcmV2ZW50IG1vcmUgVFggYXR0ZW1wdHMKLQkJCSAqIHdoaWNoIHdvdWxkIGxlYWQgdG8gbW9yZSBpbnZvY2F0aW9ucyBvZgotCQkJICogc2NoZWR1bGVfd29yaygpCiYjNDM7CQkJICogd2hpY2ggd291bGQgbGVhZCB0byBtb3JlIGludm9jYXRpb25zIG9mIHF1ZXVlX3dvcmsoKQogCQkJICovCiAJCQlyZXR1cm47CiAJCX0KQEAgLTQ4Nyw3ICYjNDM7NDg2LDcgQEAgc3RhdGljIHZvaWQgb3Zwbl90Y3Bfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKQogCXJjdV9yZWFkX2xvY2soKTsKIAlzb2NrID0gcmN1X2RlcmVmZXJlbmNlX3NrX3VzZXJfZGF0YShzayk7CiAJaWYgKGxpa2VseShzb2NrICZhbXA7JmFtcDsgc29jay0mZ3Q7cGVlcikpIHsKLQkJc2NoZWR1bGVfd29yaygmYW1wO3NvY2stJmd0O3RjcF90eF93b3JrKTsKJiM0MzsJCXF1ZXVlX3dvcmsob3Zwbl93cSwgJmFtcDtzb2NrLSZndDt0Y3BfdHhfd29yayk7CiAJCXNvY2stJmd0O3BlZXItJmd0O3RjcC5za19jYi5za193cml0ZV9zcGFjZShzayk7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMjE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIxOAoJCQkJCQkJb3V0cHV0OiAxNjMKCQkJCQkJCXRob3VnaHRzOiAxMTYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IE9wZW5WUE4gRHJpdmVyIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGBvdnBuYCBkcml2ZXIgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGVzZSBjaGFuZ2VzIGNvdWxkIHBvdGVudGlhbGx5IGludHJvZHVjZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgc3BlY2lmaWNhbGx5IHRob3NlIHRoYXQgS01TQU4gd291bGQgZmxhZy4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyByZWZhY3RvcmluZyB0aGUgZHJpdmVyJiMzOTtzIHdvcmtxdWV1ZSBtYW5hZ2VtZW50LiBXZSYjMzk7cmUgbW92aW5nIGZyb20gdGhlIHN0YW5kYXJkIHN5c3RlbSB3b3JrcXVldWUgdG8gYSBkZWRpY2F0ZWQgYG92cG5fd3FgLiBUaGlzIGludm9sdmVzIHJlcGxhY2luZyBjYWxscyB0byBgc2NoZWR1bGVfd29ya2AsIGBzY2hlZHVsZV9kZWxheWVkX3dvcmtgLCBhbmQgYGNhbGxfcmN1YCB3aXRoIGBxdWV1ZV93b3JrYCwgYHF1ZXVlX2RlbGF5ZWRfd29ya2AsIGFuZCBgcXVldWVfcmN1X3dvcmtgLCByZXNwZWN0aXZlbHksIGFsbCBkaXJlY3RlZCB0byB0aGlzIG5ldyBgb3Zwbl93cWAuIFNlZW1zIGxpa2UgYSBzdGFuZGFyZCBpc29sYXRpb24vcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLgoKQmV5b25kIHRoZSB3b3JrcXVldWUgY2hhbmdlcywgdGhlcmUgYXJlIHNldmVyYWwgb3RoZXIgbm90YWJsZSBtb2RpZmljYXRpb25zLiBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgIGhhcyBiZWVuIHVwZGF0ZWQsIGFuZCBJIG5lZWQgdG8gbG9vayBjbG9zZXIgYXQgdGhhdCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1YnRsZSBpc3N1ZXMuIEFsc28sIHRoZXJlJiMzOTtzIGEgcmVvcmRlcmluZyBvZiBga2ZyZWVfc2tiYCBhbmQgYG92cG5fcGVlcl9wdXRgL2BvdnBuX2NyeXB0b19rZXlfc2xvdF9wdXRgIHdpdGhpbiB0aGUgYG92cG5fZGVjcnlwdF9wb3N0YCBhbmQgYG92cG5fZW5jcnlwdF9wb3N0YCBmdW5jdGlvbnMuIFRoYXQgc2NyZWFtcyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUsIG9yIGEgY2xlYW51cCBvcmRlciB0aGF0IG5lZWRlZCB0byBiZSBtb3JlIGNhcmVmdWwuCgpOb3csIGxldCYjMzk7cyBkaWcgaW50byB0aGUgZGV0YWlsczoKCjEuICBgb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZWAgbm93IHVzZXMgYHF1ZXVlX3JjdV93b3JrYC4gVGhpcyBpcyBmaW5lLCB1c2luZyBSQ1UgY29ycmVjdGx5IGlzIGdvb2QuCjIuICBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgIGhhcyBiZWVuIG1vZGlmaWVkLiBBbHJpZ2h0LCBsZXQmIzM5O3Mgem9vbSBpbiBvbiB0aGF0IGNvZGUgc25pcHBldC4gVGhlICpvbGQqIGNvZGUgaGFkIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSEgSXQgZGlyZWN0bHkgYWNjZXNzZWQgYHRtcC0mZ3Q7a2V5X2lkYCB3aXRob3V0IGNoZWNraW5nIGlmIGBjcy0mZ3Q7c2xvdHNbMF1gIG9yIGBjcy0mZ3Q7c2xvdHNbMV1gIHdhcyBhY3R1YWxseSB2YWxpZC4gVGhpcyBpcyBhIGNsZWFyIGJ1ZyBmaXgsIGVuc3VyaW5nIGB0bXBgIGlzIHZhbGlkIGJlZm9yZSBkZXJlZmVyZW5jaW5nLiBUaGlzIGlzICpnb29kKiwgYSBjbGFzc2ljIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB2dWxuZXJhYmlsaXR5IGZpeC4KMy4gIGBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2ZyZWVfd29ya2AgaGFzIGJlZW4gaW50cm9kdWNlZC4gVGhpcyBpcyBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSB3b3JrcXVldWUgYW5kIFJDVSBjbGVhbnVwLiBBZ2FpbiwgZXhwZWN0ZWQgd2l0aCB0aGUgd29ya3F1ZXVlIGNoYW5nZXMuCjQuICBUaGUgcmVvcmRlcmluZyBvZiBga2ZyZWVfc2tiYCBhbmQgYG92cG5fcGVlcl9wdXRgIGluIGBvdnBuX2RlY3J5cHRfcG9zdGAgYW5kIGBvdnBuX2VuY3J5cHRfcG9zdGAuIFByZXZpb3VzbHksIHRoZSBjb2RlIGZyZWVkIHRoZSBza2IgKmJlZm9yZSogcG9zc2libHkgcmVsZWFzaW5nIHRoZSBwZWVyLiBOb3cgd2UgaGF2ZSBhIHNhZmVyIG9yZGVyLiBUaGlzIGlzIGEgcG90ZW50aWFsIFVBRiBmaXg7IGl0JiMzOTtzIGEgZ29vZCBjaGFuZ2UuCjUuICBUaGUgYG92cG5fd3FgIGlzIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZCBhcHByb3ByaWF0ZWx5LiBTb3VuZHMgY2xlYW4sIG5vIGlzc3VlcyB0aGVyZS4KNi4gIFRoZSB3b3JrcXVldWUgY2FsbHMgYXJlIGJlaW5nIHJlcGxhY2VkIGNvbnNpc3RlbnRseS4gV29ya3F1ZXVlIG1hbmFnZW1lbnQsIG5vdGhpbmcgY3JpdGljYWwgaW4gaXRzZWxmLgoKQW5hbHl6aW5nIHRoZSBjb2RlOiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFkZCBjb21wbGV4IGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGUgY2hhbmdlcyBhcmUgbGFyZ2VseSBmb2N1c2VkIG9uOiB3b3JrcXVldWUgbWFuYWdlbWVudCAod2hpY2ggaXMgYSBzYWZlIHJlZmFjdG9yaW5nKSwgcHJvcGVyIFJDVSBkZXN0cnVjdGlvbiwgYW5kIGZpeGluZyBrbm93biBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gSW4gcGFydGljdWxhciwgdGhlIGNoYW5nZXMgdG8gYG92cG5fY3J5cHRvX2tpbGxfa2V5YCBhbmQgdGhlIHJlb3JkZXJpbmcgb2YgYGtmcmVlX3NrYmAgYXJlIGNyaXRpY2FsLCBjbGFzc2ljIGJ1ZyBmaXhlcy4gVGhlIHJlb3JkZXJpbmcgaXMgYWxtb3N0IGNlcnRhaW5seSB0byBhdm9pZCBVQUYsIHNvIGlzIGEgZ29vZCB0aGluZyB0byBmaW5kLgoKU2luY2UgdGhlc2UgY2hhbmdlcyBhZGRyZXNzIGtub3duIG1lbW9yeSBzYWZldHkgdnVsbmVyYWJpbGl0aWVzIGFuZCBpbXByb3ZlIGdlbmVyYWwgY29kZSBoeWdpZW5lLCAqYW5kKiBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgcmlza3kgYmVoYXZpb3IgaW4gdGVybXMgb2YgZGF0YSBzdHJ1Y3R1cmVzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBJIGNhbiBjb21mb3J0YWJseSBzYXkgdGhhdCBLTVNBTiBpcyB1bmxpa2VseSB0byBmbGFnIGFueXRoaW5nIGhlcmUuIFRoaXMgbG9va3MgbGlrZSBhIHN0YW5kYXJkIHNldCBvZiBidWcgZml4ZXMgYW5kIGltcHJvdmVtZW50cyB0byB3b3JrcXVldWUgbWFuYWdlbWVudC4gTm8gbmVlZCBmb3Igc3BlY2lhbCBLTVNBTiB0ZXN0aW5nLgoqKlRoZXJlZm9yZSwgdGhlIGFuc3dlciBpcyBOZWVkc0tNU0FOID0gZmFsc2UuKioKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMjE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gZml4aW5nIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBvdnBuX2NyeXB0b19raWxsX2tleWAsIHJlb3JkZXJpbmcgY2xlYW51cCBmdW5jdGlvbnMgdG8gcHJldmVudCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYnVncywgYW5kIG1pZ3JhdGluZyB3b3JrIGl0ZW1zIGZyb20gdGhlIHN5c3RlbSB3b3JrcXVldWUgdG8gYSBkZWRpY2F0ZWQgYG92cG5fd3FgIHdvcmtxdWV1ZS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG1lbW9yeSBzYWZldHkgaXNzdWVzIChOVUxMIGRlcmVmZXJlbmNlcywgVUFGKSBhbmQgY29uY3VycmVuY3kgbWFuYWdlbWVudCwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGNoYW5nZXMgdG8gZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBmb2N1c2VzIG9uIGZpeGluZyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgLCByZW9yZGVyaW5nIGNsZWFudXAgZnVuY3Rpb25zIHRvIHByZXZlbnQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIGFuZCBtaWdyYXRpbmcgd29yayBpdGVtcyBmcm9tIHRoZSBzeXN0ZW0gd29ya3F1ZXVlIHRvIGEgZGVkaWNhdGVkIGBvdnBuX3dxYCB3b3JrcXVldWUuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoTlVMTCBkZXJlZmVyZW5jZXMsIFVBRikgYW5kIGNvbmN1cnJlbmN5IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBubyBjaGFuZ2VzIHRvIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUyOjUwLjk2NDYzMDg1N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3ODM4OTMxMjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9WUE5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdnBuX2NyeXB0b19rZXlfc2xvdF9yZWxlYXNlXCIsXG4gICAgXCJvdnBuX2NyeXB0b19raWxsX2tleVwiLFxuICAgIFwib3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXdcIixcbiAgICBcIm92cG5fcGVlcl9rZWVwYWxpdmVfc2V0XCIsXG4gICAgXCJvdnBuX3BlZXJfa2VlcGFsaXZlX3dvcmtcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBmb2N1c2VzIG9uIGZpeGluZyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgLCByZW9yZGVyaW5nIGNsZWFudXAgZnVuY3Rpb25zIHRvIHByZXZlbnQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIGFuZCBtaWdyYXRpbmcgd29yayBpdGVtcyBmcm9tIHRoZSBzeXN0ZW0gd29ya3F1ZXVlIHRvIGEgZGVkaWNhdGVkIGBvdnBuX3dxYCB3b3JrcXVldWUuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoTlVMTCBkZXJlZmVyZW5jZXMsIFVBRikgYW5kIGNvbmN1cnJlbmN5IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBubyBjaGFuZ2VzIHRvIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWQgZHJpdmVyIChkcml2ZXJzL25ldC9vdnBuKS4gSXQgcmVwbGFjZXMgY2FsbF9yY3Ugd2l0aCBxdWV1ZV9yY3Vfd29yayBmb3IgZnJlZWluZyBjcnlwdG8ga2V5IHNsb3RzLCBpbnRyb2R1Y2VzIGEgZGVkaWNhdGVkIHdvcmtxdWV1ZSAob3Zwbl93cSkgZm9yIGFsbCBvdnBuLXNwZWNpZmljIHdvcmssIGFuZCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBvdnBuX2NyeXB0b19raWxsX2tleS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBhIHJlYWNoYWJsZSBuZXR3b3JrIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMjE6NTI6NTAuOTY0NjQwNTU3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTcwNjM1MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhOTVmMjZkYjUyMjJkNjJhMWZlMzkyNDBjNDhmOGUwYWViOTE2NjA5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDkgMjE6NTI6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmNcXG5pbmRleCA5MDU4MGUzMjA1MmZiLi43ZTU0NTQyODkwMGE5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmNcXG4rKysgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jXFxuQEAgLTE4LDIwICsxOCwxMiBAQFxcbiAjaW5jbHVkZSBcXFwiY3J5cHRvX2FlYWQuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImNyeXB0by5oXFxcIlxcbiBcXG4tc3RhdGljIHZvaWQgb3Zwbl9rc19kZXN0cm95X3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuLXtcXG4tXFx0c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcztcXG4tXFxuLVxcdGtzID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCwgcmN1KTtcXG4tXFx0b3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9kZXN0cm95KGtzKTtcXG4tfVxcbi1cXG4gdm9pZCBvdnBuX2NyeXB0b19rZXlfc2xvdF9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKVxcbiB7XFxuIFxcdHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3M7XFxuIFxcbiBcXHRrcyA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QsIHJlZmNvdW50KTtcXG4tXFx0Y2FsbF9yY3UoXFx1MDAyNmtzLVxcdTAwM2VyY3UsIG92cG5fa3NfZGVzdHJveV9yY3UpO1xcbitcXHRxdWV1ZV9yY3Vfd29yayhvdnBuX3dxLCBcXHUwMDI2a3MtXFx1MDAzZWZyZWVfd29yayk7XFxuIH1cXG4gXFxuIC8qIGNhbiBvbmx5IGJlIGludm9rZWQgd2hlbiBhbGwgcGVlciByZWZlcmVuY2VzIGhhdmUgYmVlbiBkcm9wcGVkIChpLmUuIFJDVVxcbkBAIC01OCwxNSArNTAsMTkgQEAgdm9pZCBvdnBuX2NyeXB0b19zdGF0ZV9yZWxlYXNlKHN0cnVjdCBvdnBuX2NyeXB0b19zdGF0ZSAqY3MpXFxuIGJvb2wgb3Zwbl9jcnlwdG9fa2lsbF9rZXkoc3RydWN0IG92cG5fY3J5cHRvX3N0YXRlICpjcywgdTgga2V5X2lkKVxcbiB7XFxuIFxcdHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MgPSBOVUxMO1xcbitcXHRzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKnRtcDtcXG4rXFx0aW50IHNsb3QgPSAwO1xcbiBcXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZjcy1cXHUwMDNlbG9jayk7XFxuLVxcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoY3MtXFx1MDAzZXNsb3RzWzBdKS1cXHUwMDNla2V5X2lkID09IGtleV9pZCkge1xcbi1cXHRcXHRrcyA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoY3MtXFx1MDAzZXNsb3RzWzBdLCBOVUxMLFxcbi1cXHRcXHRcXHRcXHRcXHQgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZjcy1cXHUwMDNlbG9jaykpO1xcbi1cXHR9IGVsc2UgaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihjcy1cXHUwMDNlc2xvdHNbMV0pLVxcdTAwM2VrZXlfaWQgPT0ga2V5X2lkKSB7XFxuLVxcdFxcdGtzID0gcmN1X3JlcGxhY2VfcG9pbnRlcihjcy1cXHUwMDNlc2xvdHNbMV0sIE5VTEwsXFxuLVxcdFxcdFxcdFxcdFxcdCBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNmNzLVxcdTAwM2Vsb2NrKSk7XFxuK1xcdHRtcCA9IHJjdV9hY2Nlc3NfcG9pbnRlcihjcy1cXHUwMDNlc2xvdHNbc2xvdF0pO1xcbitcXHRpZiAoIXRtcCB8fCB0bXAtXFx1MDAzZWtleV9pZCAhPSBrZXlfaWQpIHtcXG4rXFx0XFx0c2xvdCA9IDE7XFxuK1xcdFxcdHRtcCA9IHJjdV9hY2Nlc3NfcG9pbnRlcihjcy1cXHUwMDNlc2xvdHNbc2xvdF0pO1xcbiBcXHR9XFxuK1xcbitcXHRpZiAodG1wIFxcdTAwMjZcXHUwMDI2IHRtcC1cXHUwMDNla2V5X2lkID09IGtleV9pZClcXG4rXFx0XFx0a3MgPSByY3VfcmVwbGFjZV9wb2ludGVyKGNzLVxcdTAwM2VzbG90c1tzbG90XSwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0XFx0IGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2Y3MtXFx1MDAzZWxvY2spKTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmNzLVxcdTAwM2Vsb2NrKTtcXG4gXFxuIFxcdGlmIChrcylcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaCBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmhcXG5pbmRleCAwZTI4NGZlYzNhNzVhLi5lM2ZlYjE2ZDU0OTg1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmhcXG4rKysgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oXFxuQEAgLTEwLDYgKzEwLDggQEBcXG4gI2lmbmRlZiBfTkVUX09WUE5fT1ZQTkNSWVBUT19IX1xcbiAjZGVmaW5lIF9ORVRfT1ZQTl9PVlBOQ1JZUFRPX0hfXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcXHUwMDNlXFxuK1xcbiAjaW5jbHVkZSBcXFwicGt0aWQuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInByb3RvLmhcXFwiXFxuIFxcbkBAIC00NSw4ICs0Nyw4IEBAIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCB7XFxuIFxcbiBcXHRzdHJ1Y3Qgb3Zwbl9wa3RpZF9yZWN2IHBpZF9yZWN2IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XFxuIFxcdHN0cnVjdCBvdnBuX3BrdGlkX3htaXQgcGlkX3htaXQgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcXG4rXFx0c3RydWN0IHJjdV93b3JrIGZyZWVfd29yaztcXG4gXFx0c3RydWN0IGtyZWYgcmVmY291bnQ7XFxuLVxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuIH07XFxuIFxcbiBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmMgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmNcXG5pbmRleCA4ZjA3YzQxODYyMmIyLi43NGVhZjZmYWMyZjUyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuY1xcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuY1xcbkBAIC05LDYgKzksNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2NyeXB0by9hZWFkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2lwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaXB2Ni5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3VkcC5oXFx1MDAzZVxcbkBAIC0zODAsMTMgKzM4MSwxOSBAQCBzdGF0aWMgc3RydWN0IGNyeXB0b19hZWFkICpvdnBuX2FlYWRfaW5pdChjb25zdCBjaGFyICp0aXRsZSxcXG4gXFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4gfVxcbiBcXG4tdm9pZCBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2Rlc3Ryb3koc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcylcXG4rc3RhdGljIHZvaWQgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9mcmVlKHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MpXFxuIHtcXG4tXFx0aWYgKCFrcylcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4gXFx0Y3J5cHRvX2ZyZWVfYWVhZChrcy1cXHUwMDNlZW5jcnlwdCk7XFxuIFxcdGNyeXB0b19mcmVlX2FlYWQoa3MtXFx1MDAzZWRlY3J5cHQpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2ZyZWVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcztcXG4rXFxuK1xcdGtzID0gY29udGFpbmVyX29mKHRvX3JjdV93b3JrKHdvcmspLCBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QsXFxuK1xcdFxcdFxcdCAgZnJlZV93b3JrKTtcXG4rXFx0b3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9mcmVlKGtzKTtcXG4gXFx0a2ZyZWUoa3MpO1xcbiB9XFxuIFxcbkBAIC00MjAsNiArNDI3LDcgQEAgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXcoY29uc3Qgc3RydWN0IG92cG5fa2V5X2NvbmZpZyAqa2MpXFxuIFxcbiBcXHRrcy1cXHUwMDNlZW5jcnlwdCA9IE5VTEw7XFxuIFxcdGtzLVxcdTAwM2VkZWNyeXB0ID0gTlVMTDtcXG4rXFx0SU5JVF9SQ1VfV09SSyhcXHUwMDI2a3MtXFx1MDAzZWZyZWVfd29yaywgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9mcmVlX3dvcmspO1xcbiBcXHRrcmVmX2luaXQoXFx1MDAyNmtzLVxcdTAwM2VyZWZjb3VudCk7XFxuIFxcdGtzLVxcdTAwM2VrZXlfaWQgPSBrYy1cXHUwMDNla2V5X2lkO1xcbiBcXG5AQCAtNDUzLDcgKzQ2MSw4IEBAIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3KGNvbnN0IHN0cnVjdCBvdnBuX2tleV9jb25maWcgKmtjKVxcbiBcXHRyZXR1cm4ga3M7XFxuIFxcbiBkZXN0cm95X2tzOlxcbi1cXHRvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2Rlc3Ryb3koa3MpO1xcbitcXHRvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2ZyZWUoa3MpO1xcbitcXHRrZnJlZShrcyk7XFxuIFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaCBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaFxcbmluZGV4IDY1YTJmZjMwNzg5ODYuLmZhZTNiNTg1YTQzYjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5oXFxuKysrIGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5oXFxuQEAgLTIyLDcgKzIyLDYgQEAgaW50IG92cG5fYWVhZF9kZWNyeXB0KHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MsXFxuIFxcbiBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKlxcbiBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X25ldyhjb25zdCBzdHJ1Y3Qgb3Zwbl9rZXlfY29uZmlnICprYyk7XFxuLXZvaWQgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9kZXN0cm95KHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MpO1xcbiBcXG4gZW51bSBvdnBuX2NpcGhlcl9hbGcgb3Zwbl9hZWFkX2NyeXB0b19hbGcoc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcyk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2lvLmMgYi9kcml2ZXJzL25ldC9vdnBuL2lvLmNcXG5pbmRleCA5YTY2ZDY5MzAzOWEzLi45NTI2ZjgwOTZkYTYwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vaW8uY1xcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vaW8uY1xcbkBAIC0yMDQsMTAgKzIwNCwxMCBAQCB2b2lkIG92cG5fZGVjcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpXFxuIFxcdFxcdG92cG5fZGV2X2RzdGF0c19yeF9kcm9wcGVkKHBlZXItXFx1MDAzZW92cG4tXFx1MDAzZWRldik7XFxuIFxcdGtmcmVlX3NrYihza2IpO1xcbiBkcm9wX25vY291bnQ6XFxuLVxcdGlmIChsaWtlbHkocGVlcikpXFxuLVxcdFxcdG92cG5fcGVlcl9wdXQocGVlcik7XFxuIFxcdGlmIChsaWtlbHkoa3MpKVxcbiBcXHRcXHRvdnBuX2NyeXB0b19rZXlfc2xvdF9wdXQoa3MpO1xcbitcXHRpZiAobGlrZWx5KHBlZXIpKVxcbitcXHRcXHRvdnBuX3BlZXJfcHV0KHBlZXIpO1xcbiB9XFxuIFxcbiAvKiBSWCBwYXRoIGVudHJ5IHBvaW50OiBkZWNyeXB0IHBhY2tldCBhbmQgZm9yd2FyZCBpdCB0byB0aGUgZGV2aWNlICovXFxuQEAgLTMwMiwxMSArMzAyLDExIEBAIHZvaWQgb3Zwbl9lbmNyeXB0X3Bvc3Qodm9pZCAqZGF0YSwgaW50IHJldClcXG4gZXJyOlxcbiBcXHRpZiAodW5saWtlbHkoc2tiKSlcXG4gXFx0XFx0b3Zwbl9kZXZfZHN0YXRzX3R4X2Ryb3BwZWQocGVlci1cXHUwMDNlb3Zwbi1cXHUwMDNlZGV2KTtcXG4tXFx0aWYgKGxpa2VseShwZWVyKSlcXG4tXFx0XFx0b3Zwbl9wZWVyX3B1dChwZWVyKTtcXG4rXFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcdGlmIChsaWtlbHkoa3MpKVxcbiBcXHRcXHRvdnBuX2NyeXB0b19rZXlfc2xvdF9wdXQoa3MpO1xcbi1cXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0aWYgKGxpa2VseShwZWVyKSlcXG4rXFx0XFx0b3Zwbl9wZWVyX3B1dChwZWVyKTtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgb3Zwbl9lbmNyeXB0X29uZShzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL21haW4uYyBiL2RyaXZlcnMvbmV0L292cG4vbWFpbi5jXFxuaW5kZXggMTY4Y2ZlOWI1OWE5OC4uMDcwODI0OWU5NjA3YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vbWFpbi5jXFxuQEAgLTEyLDYgKzEyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbmV0ZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9ncm9fY2VsbHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3J0bmV0bGluay5oXFx1MDAzZVxcbkBAIC0yNiw2ICsyNyw5IEBAXFxuICNpbmNsdWRlIFxcXCJ0Y3AuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInVkcC5oXFxcIlxcbiBcXG4rLyogbW9kdWxlLW93bmVkIHdvcmtxdWV1ZSBvbiB3aGljaCBhbGwgb3Zwbi1zcGVjaWZpYyB3b3JrIGlzIHF1ZXVlZCAqL1xcbitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqb3Zwbl93cTtcXG4rXFxuIHN0YXRpYyB2b2lkIG92cG5fcHJpdl9mcmVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXFxuIHtcXG4gXFx0c3RydWN0IG92cG5fcHJpdiAqb3ZwbiA9IG5ldGRldl9wcml2KG5ldCk7XFxuQEAgLTI2NCwxMCArMjY4LDE2IEBAIHN0YXRpYyBpbnQgX19pbml0IG92cG5faW5pdCh2b2lkKVxcbiBcXG4gXFx0b3Zwbl90Y3BfaW5pdCgpO1xcbiBcXG4rXFx0b3Zwbl93cSA9IGFsbG9jX3dvcmtxdWV1ZShcXFwib3ZwblxcXCIsIFdRX1BFUkNQVSwgMCk7XFxuK1xcdGlmICghb3Zwbl93cSkge1xcbitcXHRcXHRwcl9lcnIoXFxcIm92cG46IGNhbm5vdCBhbGxvY2F0ZSB3b3JrcXVldWVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4gXFx0ZXJyID0gcnRubF9saW5rX3JlZ2lzdGVyKFxcdTAwMjZvdnBuX2xpbmtfb3BzKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRwcl9lcnIoXFxcIm92cG46IGNhbid0IHJlZ2lzdGVyIHJ0bmwgbGluayBvcHM6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRnb3RvIGRlc3Ryb3lfd3E7XFxuIFxcdH1cXG4gXFxuIFxcdGVyciA9IG92cG5fbmxfcmVnaXN0ZXIoKTtcXG5AQCAtMjgwLDYgKzI5MCw5IEBAIHN0YXRpYyBpbnQgX19pbml0IG92cG5faW5pdCh2b2lkKVxcbiBcXG4gdW5yZWdfcnRubDpcXG4gXFx0cnRubF9saW5rX3VucmVnaXN0ZXIoXFx1MDAyNm92cG5fbGlua19vcHMpO1xcbitkZXN0cm95X3dxOlxcbitcXHRkZXN0cm95X3dvcmtxdWV1ZShvdnBuX3dxKTtcXG4rXFx0b3Zwbl93cSA9IE5VTEw7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTI4OCw3ICszMDEsMTEgQEAgc3RhdGljIF9fZXhpdCB2b2lkIG92cG5fY2xlYW51cCh2b2lkKVxcbiBcXHRvdnBuX25sX3VucmVnaXN0ZXIoKTtcXG4gXFx0cnRubF9saW5rX3VucmVnaXN0ZXIoXFx1MDAyNm92cG5fbGlua19vcHMpO1xcbiBcXG4rXFx0Zmx1c2hfd29ya3F1ZXVlKG92cG5fd3EpO1xcbiBcXHRyY3VfYmFycmllcigpO1xcbitcXG4rXFx0ZGVzdHJveV93b3JrcXVldWUob3Zwbl93cSk7XFxuK1xcdG92cG5fd3EgPSBOVUxMO1xcbiB9XFxuIFxcbiBtb2R1bGVfaW5pdChvdnBuX2luaXQpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL292cG5wcml2LmggYi9kcml2ZXJzL25ldC9vdnBuL292cG5wcml2LmhcXG5pbmRleCA1ODk4ZjZhZGFkYTdmLi44NDQ5OTE0MGU0YmQ5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vb3ZwbnByaXYuaFxcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vb3ZwbnByaXYuaFxcbkBAIC0xNSw2ICsxNSwxMCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9pZl9saW5rLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L292cG4uaFxcdTAwM2VcXG4gXFxuK3N0cnVjdCB3b3JrcXVldWVfc3RydWN0O1xcbitcXG4rZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpvdnBuX3dxO1xcbitcXG4gLyoqXFxuICAqIHN0cnVjdCBvdnBuX3BlZXJfY29sbGVjdGlvbiAtIGNvbnRhaW5lciBvZiBwZWVycyBmb3IgTXVsdGlQZWVyIG1vZGVcXG4gICogQGJ5X2lkOiB0YWJsZSBvZiBwZWVycyBpbmRleCBieSBJRFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL3BlZXIuYyBiL2RyaXZlcnMvbmV0L292cG4vcGVlci5jXFxuaW5kZXggYjA1MTlmOTg0MGQ4My4uYzk1NjU2Y2E3YzM1NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL3BlZXIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vcGVlci5jXFxuQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBvdnBuX3BlZXJfa2VlcGFsaXZlX3NldChzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCB1MzIgaW50ZXJ2YWwsIHUzMiB0aW1lb3V0KVxcbiBcXHQvKiBub3cgdGhhdCBpbnRlcnZhbCBhbmQgdGltZW91dCBoYXZlIGJlZW4gY2hhbmdlZCwga2lja1xcbiBcXHQgKiBvZmYgdGhlIHdvcmtlciBzbyB0aGF0IHRoZSBuZXh0IGRlbGF5IGNhbiBiZSByZWNvbXB1dGVkXFxuIFxcdCAqL1xcbi1cXHRtb2RfZGVsYXllZF93b3JrKHN5c3RlbV9wZXJjcHVfd3EsIFxcdTAwMjZwZWVyLVxcdTAwM2VvdnBuLVxcdTAwM2VrZWVwYWxpdmVfd29yaywgMCk7XFxuK1xcdG1vZF9kZWxheWVkX3dvcmsob3Zwbl93cSwgXFx1MDAyNnBlZXItXFx1MDAzZW92cG4tXFx1MDAzZWtlZXBhbGl2ZV93b3JrLCAwKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTEzNzEsNyArMTM3MSw3IEBAIHN0YXRpYyB0aW1lNjRfdCBvdnBuX3BlZXJfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsXFxuIFxcdFxcdFxcdCAgIHBlZXItXFx1MDAzZWlkKTtcXG4gXFx0XFx0aWYgKFdBUk5fT04oIW92cG5fcGVlcl9ob2xkKHBlZXIpKSlcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuLVxcdFxcdGlmICghc2NoZWR1bGVfd29yayhcXHUwMDI2cGVlci1cXHUwMDNla2VlcGFsaXZlX3dvcmspKVxcbitcXHRcXHRpZiAoIXF1ZXVlX3dvcmsob3Zwbl93cSwgXFx1MDAyNnBlZXItXFx1MDAzZWtlZXBhbGl2ZV93b3JrKSlcXG4gXFx0XFx0XFx0b3Zwbl9wZWVyX3B1dChwZWVyKTtcXG4gXFx0fVxcbiBcXG5AQCAtMTQ2Myw4ICsxNDYzLDggQEAgdm9pZCBvdnBuX3BlZXJfa2VlcGFsaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRcXHRuZXRkZXZfZGJnKG92cG4tXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0ICAgXFxcInNjaGVkdWxpbmcga2VlcGFsaXZlIHdvcms6IG5vdz0lbGx1IG5leHRfcnVuPSVsbHUgZGVsdGE9JWxsdVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgbmV4dF9ydW4sIG5vdywgbmV4dF9ydW4gLSBub3cpO1xcbi1cXHRcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNm92cG4tXFx1MDAzZWtlZXBhbGl2ZV93b3JrLFxcbi1cXHRcXHRcXHRcXHQgICAgICAobmV4dF9ydW4gLSBub3cpICogSFopO1xcbitcXHRcXHRxdWV1ZV9kZWxheWVkX3dvcmsob3Zwbl93cSwgXFx1MDAyNm92cG4tXFx1MDAzZWtlZXBhbGl2ZV93b3JrLFxcbitcXHRcXHRcXHRcXHQgICAobmV4dF9ydW4gLSBub3cpICogSFopO1xcbiBcXHR9XFxuIFxcdHVubG9ja19vdnBuKG92cG4sIFxcdTAwMjZyZWxlYXNlX2xpc3QpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vdGNwLmMgYi9kcml2ZXJzL25ldC9vdnBuL3RjcC5jXFxuaW5kZXggMGFmMTQwNTVjMzlhYS4uOGZlOGE4ZTc1MGE0MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL3RjcC5jXFxuKysrIGIvZHJpdmVycy9uZXQvb3Zwbi90Y3AuY1xcbkBAIC0xNTEsNyArMTUxLDcgQEAgc3RhdGljIHZvaWQgb3Zwbl90Y3BfcmN2KHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdC8qIHRha2UgcmVmZXJlbmNlIGZvciBkZWZlcnJlZCBwZWVyIGRlbGV0aW9uLiBzaG91bGQgbmV2ZXIgZmFpbCAqL1xcbiBcXHRpZiAoV0FSTl9PTighb3Zwbl9wZWVyX2hvbGQocGVlcikpKVxcbiBcXHRcXHRnb3RvIGVycl9ub3BlZXI7XFxuLVxcdGlmICghc2NoZWR1bGVfd29yayhcXHUwMDI2cGVlci1cXHUwMDNldGNwLmRlZmVyX2RlbF93b3JrKSlcXG4rXFx0aWYgKCFxdWV1ZV93b3JrKG92cG5fd3EsIFxcdTAwMjZwZWVyLVxcdTAwM2V0Y3AuZGVmZXJfZGVsX3dvcmspKVxcbiBcXHRcXHRvdnBuX3BlZXJfcHV0KHBlZXIpO1xcbiBcXHRvdnBuX2Rldl9kc3RhdHNfcnhfZHJvcHBlZChwZWVyLVxcdTAwM2VvdnBuLVxcdTAwM2VkZXYpO1xcbiBlcnJfbm9wZWVyOlxcbkBAIC0yODQsMTMgKzI4NCwxMiBAQCBzdGF0aWMgdm9pZCBvdnBuX3RjcF9zZW5kX3NvY2soc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNvY2sgKnNrKVxcbiBcXHRcXHRcXHQgKiBzdHJlYW0gdGhlcmVmb3JlIHdlIGFib3J0IHRoZSBjb25uZWN0aW9uXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRvdnBuX3BlZXJfaG9sZChwZWVyKTtcXG4tXFx0XFx0XFx0aWYgKCFzY2hlZHVsZV93b3JrKFxcdTAwMjZwZWVyLVxcdTAwM2V0Y3AuZGVmZXJfZGVsX3dvcmspKVxcbitcXHRcXHRcXHRpZiAoIXF1ZXVlX3dvcmsob3Zwbl93cSwgXFx1MDAyNnBlZXItXFx1MDAzZXRjcC5kZWZlcl9kZWxfd29yaykpXFxuIFxcdFxcdFxcdFxcdG92cG5fcGVlcl9wdXQocGVlcik7XFxuIFxcbiBcXHRcXHRcXHQvKiB3ZSBiYWlsIG91dCBpbW1lZGlhdGVseSBhbmQga2VlcCB0eF9pbl9wcm9ncmVzcyBzZXRcXG4gXFx0XFx0XFx0ICogdG8gdHJ1ZS4gVGhpcyB3YXkgd2UgcHJldmVudCBtb3JlIFRYIGF0dGVtcHRzXFxuLVxcdFxcdFxcdCAqIHdoaWNoIHdvdWxkIGxlYWQgdG8gbW9yZSBpbnZvY2F0aW9ucyBvZlxcbi1cXHRcXHRcXHQgKiBzY2hlZHVsZV93b3JrKClcXG4rXFx0XFx0XFx0ICogd2hpY2ggd291bGQgbGVhZCB0byBtb3JlIGludm9jYXRpb25zIG9mIHF1ZXVlX3dvcmsoKVxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHR9XFxuQEAgLTQ4Nyw3ICs0ODYsNyBAQCBzdGF0aWMgdm9pZCBvdnBuX3RjcF93cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0c29jayA9IHJjdV9kZXJlZmVyZW5jZV9za191c2VyX2RhdGEoc2spO1xcbiBcXHRpZiAobGlrZWx5KHNvY2sgXFx1MDAyNlxcdTAwMjYgc29jay1cXHUwMDNlcGVlcikpIHtcXG4tXFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2c29jay1cXHUwMDNldGNwX3R4X3dvcmspO1xcbitcXHRcXHRxdWV1ZV93b3JrKG92cG5fd3EsIFxcdTAwMjZzb2NrLVxcdTAwM2V0Y3BfdHhfd29yayk7XFxuIFxcdFxcdHNvY2stXFx1MDAzZXBlZXItXFx1MDAzZXRjcC5za19jYi5za193cml0ZV9zcGFjZShzayk7XFxuIFxcdH1cXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUyOjUxLjQ4MjU3MDA0M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQyMjgyOTY5OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9WUE5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdnBuX2NyeXB0b19rZXlfc2xvdF9yZWxlYXNlXCIsXG4gICAgXCJvdnBuX2NyeXB0b19raWxsX2tleVwiLFxuICAgIFwib3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXdcIixcbiAgICBcIm92cG5fcGVlcl9rZWVwYWxpdmVfc2V0XCIsXG4gICAgXCJvdnBuX3BlZXJfa2VlcGFsaXZlX3dvcmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgT3BlblZQTiBkYXRhIGNoYW5uZWwgb2ZmbG9hZCBkcml2ZXIgKGRyaXZlcnMvbmV0L292cG4pLiBJdCByZXBsYWNlcyBjYWxsX3JjdSB3aXRoIHF1ZXVlX3JjdV93b3JrIGZvciBmcmVlaW5nIGNyeXB0byBrZXkgc2xvdHMsIGludHJvZHVjZXMgYSBkZWRpY2F0ZWQgd29ya3F1ZXVlIChvdnBuX3dxKSBmb3IgYWxsIG92cG4tc3BlY2lmaWMgd29yaywgYW5kIGZpeGVzIGEgbG9naWMgYnVnIGluIG92cG5fY3J5cHRvX2tpbGxfa2V5LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGEgcmVhY2hhYmxlIG5ldHdvcmsgZHJpdmVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhOTVmMjZkYjUyMjJkNjJhMWZlMzkyNDBjNDhmOGUwYWViOTE2NjA5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgOSAyMTo1Mjo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmMgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jXG5pbmRleCA5MDU4MGUzMjA1MmZiLi43ZTU0NTQyODkwMGE5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uY1xuKysrIGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uY1xuQEAgLTE4LDIwICsxOCwxMiBAQFxuICNpbmNsdWRlIFwiY3J5cHRvX2FlYWQuaFwiXG4gI2luY2x1ZGUgXCJjcnlwdG8uaFwiXG4gXG4tc3RhdGljIHZvaWQgb3Zwbl9rc19kZXN0cm95X3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4te1xuLVx0c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcztcbi1cbi1cdGtzID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCwgcmN1KTtcbi1cdG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZGVzdHJveShrcyk7XG4tfVxuLVxuIHZvaWQgb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiB7XG4gXHRzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzO1xuIFxuIFx0a3MgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90LCByZWZjb3VudCk7XG4tXHRjYWxsX3JjdShcdTAwMjZrcy1cdTAwM2VyY3UsIG92cG5fa3NfZGVzdHJveV9yY3UpO1xuK1x0cXVldWVfcmN1X3dvcmsob3Zwbl93cSwgXHUwMDI2a3MtXHUwMDNlZnJlZV93b3JrKTtcbiB9XG4gXG4gLyogY2FuIG9ubHkgYmUgaW52b2tlZCB3aGVuIGFsbCBwZWVyIHJlZmVyZW5jZXMgaGF2ZSBiZWVuIGRyb3BwZWQgKGkuZS4gUkNVXG5AQCAtNTgsMTUgKzUwLDE5IEBAIHZvaWQgb3Zwbl9jcnlwdG9fc3RhdGVfcmVsZWFzZShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzKVxuIGJvb2wgb3Zwbl9jcnlwdG9fa2lsbF9rZXkoc3RydWN0IG92cG5fY3J5cHRvX3N0YXRlICpjcywgdTgga2V5X2lkKVxuIHtcbiBcdHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MgPSBOVUxMO1xuK1x0c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICp0bXA7XG4rXHRpbnQgc2xvdCA9IDA7XG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2Y3MtXHUwMDNlbG9jayk7XG4tXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNzLVx1MDAzZXNsb3RzWzBdKS1cdTAwM2VrZXlfaWQgPT0ga2V5X2lkKSB7XG4tXHRcdGtzID0gcmN1X3JlcGxhY2VfcG9pbnRlcihjcy1cdTAwM2VzbG90c1swXSwgTlVMTCxcbi1cdFx0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZjcy1cdTAwM2Vsb2NrKSk7XG4tXHR9IGVsc2UgaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihjcy1cdTAwM2VzbG90c1sxXSktXHUwMDNla2V5X2lkID09IGtleV9pZCkge1xuLVx0XHRrcyA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoY3MtXHUwMDNlc2xvdHNbMV0sIE5VTEwsXG4tXHRcdFx0XHRcdCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2Y3MtXHUwMDNlbG9jaykpO1xuK1x0dG1wID0gcmN1X2FjY2Vzc19wb2ludGVyKGNzLVx1MDAzZXNsb3RzW3Nsb3RdKTtcbitcdGlmICghdG1wIHx8IHRtcC1cdTAwM2VrZXlfaWQgIT0ga2V5X2lkKSB7XG4rXHRcdHNsb3QgPSAxO1xuK1x0XHR0bXAgPSByY3VfYWNjZXNzX3BvaW50ZXIoY3MtXHUwMDNlc2xvdHNbc2xvdF0pO1xuIFx0fVxuK1xuK1x0aWYgKHRtcCBcdTAwMjZcdTAwMjYgdG1wLVx1MDAzZWtleV9pZCA9PSBrZXlfaWQpXG4rXHRcdGtzID0gcmN1X3JlcGxhY2VfcG9pbnRlcihjcy1cdTAwM2VzbG90c1tzbG90XSwgTlVMTCxcbitcdFx0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZjcy1cdTAwM2Vsb2NrKSk7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZjcy1cdTAwM2Vsb2NrKTtcbiBcbiBcdGlmIChrcylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oIGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaFxuaW5kZXggMGUyODRmZWMzYTc1YS4uZTNmZWIxNmQ1NDk4NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmhcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmhcbkBAIC0xMCw2ICsxMCw4IEBAXG4gI2lmbmRlZiBfTkVUX09WUE5fT1ZQTkNSWVBUT19IX1xuICNkZWZpbmUgX05FVF9PVlBOX09WUE5DUllQVE9fSF9cbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuK1xuICNpbmNsdWRlIFwicGt0aWQuaFwiXG4gI2luY2x1ZGUgXCJwcm90by5oXCJcbiBcbkBAIC00NSw4ICs0Nyw4IEBAIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCB7XG4gXG4gXHRzdHJ1Y3Qgb3Zwbl9wa3RpZF9yZWN2IHBpZF9yZWN2IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4gXHRzdHJ1Y3Qgb3Zwbl9wa3RpZF94bWl0IHBpZF94bWl0IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4rXHRzdHJ1Y3QgcmN1X3dvcmsgZnJlZV93b3JrO1xuIFx0c3RydWN0IGtyZWYgcmVmY291bnQ7XG4tXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuIH07XG4gXG4gc3RydWN0IG92cG5fY3J5cHRvX3N0YXRlIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmMgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmNcbmluZGV4IDhmMDdjNDE4NjIyYjIuLjc0ZWFmNmZhYzJmNTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmNcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuY1xuQEAgLTksNiArOSw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjY3J5cHRvL2FlYWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcHY2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdWRwLmhcdTAwM2VcbkBAIC0zODAsMTMgKzM4MSwxOSBAQCBzdGF0aWMgc3RydWN0IGNyeXB0b19hZWFkICpvdnBuX2FlYWRfaW5pdChjb25zdCBjaGFyICp0aXRsZSxcbiBcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gfVxuIFxuLXZvaWQgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9kZXN0cm95KHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MpXG4rc3RhdGljIHZvaWQgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9mcmVlKHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MpXG4ge1xuLVx0aWYgKCFrcylcbi1cdFx0cmV0dXJuO1xuLVxuIFx0Y3J5cHRvX2ZyZWVfYWVhZChrcy1cdTAwM2VlbmNyeXB0KTtcbiBcdGNyeXB0b19mcmVlX2FlYWQoa3MtXHUwMDNlZGVjcnlwdCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZnJlZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzO1xuK1xuK1x0a3MgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCxcbitcdFx0XHQgIGZyZWVfd29yayk7XG4rXHRvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2ZyZWUoa3MpO1xuIFx0a2ZyZWUoa3MpO1xuIH1cbiBcbkBAIC00MjAsNiArNDI3LDcgQEAgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXcoY29uc3Qgc3RydWN0IG92cG5fa2V5X2NvbmZpZyAqa2MpXG4gXG4gXHRrcy1cdTAwM2VlbmNyeXB0ID0gTlVMTDtcbiBcdGtzLVx1MDAzZWRlY3J5cHQgPSBOVUxMO1xuK1x0SU5JVF9SQ1VfV09SSyhcdTAwMjZrcy1cdTAwM2VmcmVlX3dvcmssIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZnJlZV93b3JrKTtcbiBcdGtyZWZfaW5pdChcdTAwMjZrcy1cdTAwM2VyZWZjb3VudCk7XG4gXHRrcy1cdTAwM2VrZXlfaWQgPSBrYy1cdTAwM2VrZXlfaWQ7XG4gXG5AQCAtNDUzLDcgKzQ2MSw4IEBAIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3KGNvbnN0IHN0cnVjdCBvdnBuX2tleV9jb25maWcgKmtjKVxuIFx0cmV0dXJuIGtzO1xuIFxuIGRlc3Ryb3lfa3M6XG4tXHRvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2Rlc3Ryb3koa3MpO1xuK1x0b3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9mcmVlKGtzKTtcbitcdGtmcmVlKGtzKTtcbiBcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaCBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaFxuaW5kZXggNjVhMmZmMzA3ODk4Ni4uZmFlM2I1ODVhNDNiMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaFxuKysrIGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5oXG5AQCAtMjIsNyArMjIsNiBAQCBpbnQgb3Zwbl9hZWFkX2RlY3J5cHQoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcyxcbiBcbiBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKlxuIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3KGNvbnN0IHN0cnVjdCBvdnBuX2tleV9jb25maWcgKmtjKTtcbi12b2lkIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZGVzdHJveShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzKTtcbiBcbiBlbnVtIG92cG5fY2lwaGVyX2FsZyBvdnBuX2FlYWRfY3J5cHRvX2FsZyhzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2lvLmMgYi9kcml2ZXJzL25ldC9vdnBuL2lvLmNcbmluZGV4IDlhNjZkNjkzMDM5YTMuLjk1MjZmODA5NmRhNjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL2lvLmNcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vaW8uY1xuQEAgLTIwNCwxMCArMjA0LDEwIEBAIHZvaWQgb3Zwbl9kZWNyeXB0X3Bvc3Qodm9pZCAqZGF0YSwgaW50IHJldClcbiBcdFx0b3Zwbl9kZXZfZHN0YXRzX3J4X2Ryb3BwZWQocGVlci1cdTAwM2VvdnBuLVx1MDAzZWRldik7XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBkcm9wX25vY291bnQ6XG4tXHRpZiAobGlrZWx5KHBlZXIpKVxuLVx0XHRvdnBuX3BlZXJfcHV0KHBlZXIpO1xuIFx0aWYgKGxpa2VseShrcykpXG4gXHRcdG92cG5fY3J5cHRvX2tleV9zbG90X3B1dChrcyk7XG4rXHRpZiAobGlrZWx5KHBlZXIpKVxuK1x0XHRvdnBuX3BlZXJfcHV0KHBlZXIpO1xuIH1cbiBcbiAvKiBSWCBwYXRoIGVudHJ5IHBvaW50OiBkZWNyeXB0IHBhY2tldCBhbmQgZm9yd2FyZCBpdCB0byB0aGUgZGV2aWNlICovXG5AQCAtMzAyLDExICszMDIsMTEgQEAgdm9pZCBvdnBuX2VuY3J5cHRfcG9zdCh2b2lkICpkYXRhLCBpbnQgcmV0KVxuIGVycjpcbiBcdGlmICh1bmxpa2VseShza2IpKVxuIFx0XHRvdnBuX2Rldl9kc3RhdHNfdHhfZHJvcHBlZChwZWVyLVx1MDAzZW92cG4tXHUwMDNlZGV2KTtcbi1cdGlmIChsaWtlbHkocGVlcikpXG4tXHRcdG92cG5fcGVlcl9wdXQocGVlcik7XG4rXHRrZnJlZV9za2Ioc2tiKTtcbiBcdGlmIChsaWtlbHkoa3MpKVxuIFx0XHRvdnBuX2NyeXB0b19rZXlfc2xvdF9wdXQoa3MpO1xuLVx0a2ZyZWVfc2tiKHNrYik7XG4rXHRpZiAobGlrZWx5KHBlZXIpKVxuK1x0XHRvdnBuX3BlZXJfcHV0KHBlZXIpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBvdnBuX2VuY3J5cHRfb25lKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBza19idWZmICpza2IpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9tYWluLmMgYi9kcml2ZXJzL25ldC9vdnBuL21haW4uY1xuaW5kZXggMTY4Y2ZlOWI1OWE5OC4uMDcwODI0OWU5NjA3YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9vdnBuL21haW4uY1xuQEAgLTEyLDYgKzEyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5ldGRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZ3JvX2NlbGxzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9ydG5ldGxpbmsuaFx1MDAzZVxuQEAgLTI2LDYgKzI3LDkgQEBcbiAjaW5jbHVkZSBcInRjcC5oXCJcbiAjaW5jbHVkZSBcInVkcC5oXCJcbiBcbisvKiBtb2R1bGUtb3duZWQgd29ya3F1ZXVlIG9uIHdoaWNoIGFsbCBvdnBuLXNwZWNpZmljIHdvcmsgaXMgcXVldWVkICovXG4rc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm92cG5fd3E7XG4rXG4gc3RhdGljIHZvaWQgb3Zwbl9wcml2X2ZyZWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbiB7XG4gXHRzdHJ1Y3Qgb3Zwbl9wcml2ICpvdnBuID0gbmV0ZGV2X3ByaXYobmV0KTtcbkBAIC0yNjQsMTAgKzI2OCwxNiBAQCBzdGF0aWMgaW50IF9faW5pdCBvdnBuX2luaXQodm9pZClcbiBcbiBcdG92cG5fdGNwX2luaXQoKTtcbiBcbitcdG92cG5fd3EgPSBhbGxvY193b3JrcXVldWUoXCJvdnBuXCIsIFdRX1BFUkNQVSwgMCk7XG4rXHRpZiAoIW92cG5fd3EpIHtcbitcdFx0cHJfZXJyKFwib3ZwbjogY2Fubm90IGFsbG9jYXRlIHdvcmtxdWV1ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4gXHRlcnIgPSBydG5sX2xpbmtfcmVnaXN0ZXIoXHUwMDI2b3Zwbl9saW5rX29wcyk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdHByX2VycihcIm92cG46IGNhbid0IHJlZ2lzdGVyIHJ0bmwgbGluayBvcHM6ICVkXFxuXCIsIGVycik7XG4tXHRcdHJldHVybiBlcnI7XG4rXHRcdGdvdG8gZGVzdHJveV93cTtcbiBcdH1cbiBcbiBcdGVyciA9IG92cG5fbmxfcmVnaXN0ZXIoKTtcbkBAIC0yODAsNiArMjkwLDkgQEAgc3RhdGljIGludCBfX2luaXQgb3Zwbl9pbml0KHZvaWQpXG4gXG4gdW5yZWdfcnRubDpcbiBcdHJ0bmxfbGlua191bnJlZ2lzdGVyKFx1MDAyNm92cG5fbGlua19vcHMpO1xuK2Rlc3Ryb3lfd3E6XG4rXHRkZXN0cm95X3dvcmtxdWV1ZShvdnBuX3dxKTtcbitcdG92cG5fd3EgPSBOVUxMO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMjg4LDcgKzMwMSwxMSBAQCBzdGF0aWMgX19leGl0IHZvaWQgb3Zwbl9jbGVhbnVwKHZvaWQpXG4gXHRvdnBuX25sX3VucmVnaXN0ZXIoKTtcbiBcdHJ0bmxfbGlua191bnJlZ2lzdGVyKFx1MDAyNm92cG5fbGlua19vcHMpO1xuIFxuK1x0Zmx1c2hfd29ya3F1ZXVlKG92cG5fd3EpO1xuIFx0cmN1X2JhcnJpZXIoKTtcbitcbitcdGRlc3Ryb3lfd29ya3F1ZXVlKG92cG5fd3EpO1xuK1x0b3Zwbl93cSA9IE5VTEw7XG4gfVxuIFxuIG1vZHVsZV9pbml0KG92cG5faW5pdCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9vdnBucHJpdi5oIGIvZHJpdmVycy9uZXQvb3Zwbi9vdnBucHJpdi5oXG5pbmRleCA1ODk4ZjZhZGFkYTdmLi44NDQ5OTE0MGU0YmQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9vdnBucHJpdi5oXG4rKysgYi9kcml2ZXJzL25ldC9vdnBuL292cG5wcml2LmhcbkBAIC0xNSw2ICsxNSwxMCBAQFxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvaWZfbGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9vdnBuLmhcdTAwM2VcbiBcbitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdDtcbitcbitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm92cG5fd3E7XG4rXG4gLyoqXG4gICogc3RydWN0IG92cG5fcGVlcl9jb2xsZWN0aW9uIC0gY29udGFpbmVyIG9mIHBlZXJzIGZvciBNdWx0aVBlZXIgbW9kZVxuICAqIEBieV9pZDogdGFibGUgb2YgcGVlcnMgaW5kZXggYnkgSURcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL3BlZXIuYyBiL2RyaXZlcnMvbmV0L292cG4vcGVlci5jXG5pbmRleCBiMDUxOWY5ODQwZDgzLi5jOTU2NTZjYTdjMzU3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmNcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vcGVlci5jXG5AQCAtNjIsNyArNjIsNyBAQCB2b2lkIG92cG5fcGVlcl9rZWVwYWxpdmVfc2V0KHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHUzMiBpbnRlcnZhbCwgdTMyIHRpbWVvdXQpXG4gXHQvKiBub3cgdGhhdCBpbnRlcnZhbCBhbmQgdGltZW91dCBoYXZlIGJlZW4gY2hhbmdlZCwga2lja1xuIFx0ICogb2ZmIHRoZSB3b3JrZXIgc28gdGhhdCB0aGUgbmV4dCBkZWxheSBjYW4gYmUgcmVjb21wdXRlZFxuIFx0ICovXG4tXHRtb2RfZGVsYXllZF93b3JrKHN5c3RlbV9wZXJjcHVfd3EsIFx1MDAyNnBlZXItXHUwMDNlb3Zwbi1cdTAwM2VrZWVwYWxpdmVfd29yaywgMCk7XG4rXHRtb2RfZGVsYXllZF93b3JrKG92cG5fd3EsIFx1MDAyNnBlZXItXHUwMDNlb3Zwbi1cdTAwM2VrZWVwYWxpdmVfd29yaywgMCk7XG4gfVxuIFxuIC8qKlxuQEAgLTEzNzEsNyArMTM3MSw3IEBAIHN0YXRpYyB0aW1lNjRfdCBvdnBuX3BlZXJfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsXG4gXHRcdFx0ICAgcGVlci1cdTAwM2VpZCk7XG4gXHRcdGlmIChXQVJOX09OKCFvdnBuX3BlZXJfaG9sZChwZWVyKSkpXG4gXHRcdFx0cmV0dXJuIDA7XG4tXHRcdGlmICghc2NoZWR1bGVfd29yayhcdTAwMjZwZWVyLVx1MDAzZWtlZXBhbGl2ZV93b3JrKSlcbitcdFx0aWYgKCFxdWV1ZV93b3JrKG92cG5fd3EsIFx1MDAyNnBlZXItXHUwMDNla2VlcGFsaXZlX3dvcmspKVxuIFx0XHRcdG92cG5fcGVlcl9wdXQocGVlcik7XG4gXHR9XG4gXG5AQCAtMTQ2Myw4ICsxNDYzLDggQEAgdm9pZCBvdnBuX3BlZXJfa2VlcGFsaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRuZXRkZXZfZGJnKG92cG4tXHUwMDNlZGV2LFxuIFx0XHRcdCAgIFwic2NoZWR1bGluZyBrZWVwYWxpdmUgd29yazogbm93PSVsbHUgbmV4dF9ydW49JWxsdSBkZWx0YT0lbGx1XFxuXCIsXG4gXHRcdFx0ICAgbmV4dF9ydW4sIG5vdywgbmV4dF9ydW4gLSBub3cpO1xuLVx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2b3Zwbi1cdTAwM2VrZWVwYWxpdmVfd29yayxcbi1cdFx0XHRcdCAgICAgIChuZXh0X3J1biAtIG5vdykgKiBIWik7XG4rXHRcdHF1ZXVlX2RlbGF5ZWRfd29yayhvdnBuX3dxLCBcdTAwMjZvdnBuLVx1MDAzZWtlZXBhbGl2ZV93b3JrLFxuK1x0XHRcdFx0ICAgKG5leHRfcnVuIC0gbm93KSAqIEhaKTtcbiBcdH1cbiBcdHVubG9ja19vdnBuKG92cG4sIFx1MDAyNnJlbGVhc2VfbGlzdCk7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vdGNwLmMgYi9kcml2ZXJzL25ldC9vdnBuL3RjcC5jXG5pbmRleCAwYWYxNDA1NWMzOWFhLi44ZmU4YThlNzUwYTQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi90Y3AuY1xuKysrIGIvZHJpdmVycy9uZXQvb3Zwbi90Y3AuY1xuQEAgLTE1MSw3ICsxNTEsNyBAQCBzdGF0aWMgdm9pZCBvdnBuX3RjcF9yY3Yoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdC8qIHRha2UgcmVmZXJlbmNlIGZvciBkZWZlcnJlZCBwZWVyIGRlbGV0aW9uLiBzaG91bGQgbmV2ZXIgZmFpbCAqL1xuIFx0aWYgKFdBUk5fT04oIW92cG5fcGVlcl9ob2xkKHBlZXIpKSlcbiBcdFx0Z290byBlcnJfbm9wZWVyO1xuLVx0aWYgKCFzY2hlZHVsZV93b3JrKFx1MDAyNnBlZXItXHUwMDNldGNwLmRlZmVyX2RlbF93b3JrKSlcbitcdGlmICghcXVldWVfd29yayhvdnBuX3dxLCBcdTAwMjZwZWVyLVx1MDAzZXRjcC5kZWZlcl9kZWxfd29yaykpXG4gXHRcdG92cG5fcGVlcl9wdXQocGVlcik7XG4gXHRvdnBuX2Rldl9kc3RhdHNfcnhfZHJvcHBlZChwZWVyLVx1MDAzZW92cG4tXHUwMDNlZGV2KTtcbiBlcnJfbm9wZWVyOlxuQEAgLTI4NCwxMyArMjg0LDEyIEBAIHN0YXRpYyB2b2lkIG92cG5fdGNwX3NlbmRfc29jayhzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdFx0ICogc3RyZWFtIHRoZXJlZm9yZSB3ZSBhYm9ydCB0aGUgY29ubmVjdGlvblxuIFx0XHRcdCAqL1xuIFx0XHRcdG92cG5fcGVlcl9ob2xkKHBlZXIpO1xuLVx0XHRcdGlmICghc2NoZWR1bGVfd29yayhcdTAwMjZwZWVyLVx1MDAzZXRjcC5kZWZlcl9kZWxfd29yaykpXG4rXHRcdFx0aWYgKCFxdWV1ZV93b3JrKG92cG5fd3EsIFx1MDAyNnBlZXItXHUwMDNldGNwLmRlZmVyX2RlbF93b3JrKSlcbiBcdFx0XHRcdG92cG5fcGVlcl9wdXQocGVlcik7XG4gXG4gXHRcdFx0Lyogd2UgYmFpbCBvdXQgaW1tZWRpYXRlbHkgYW5kIGtlZXAgdHhfaW5fcHJvZ3Jlc3Mgc2V0XG4gXHRcdFx0ICogdG8gdHJ1ZS4gVGhpcyB3YXkgd2UgcHJldmVudCBtb3JlIFRYIGF0dGVtcHRzXG4tXHRcdFx0ICogd2hpY2ggd291bGQgbGVhZCB0byBtb3JlIGludm9jYXRpb25zIG9mXG4tXHRcdFx0ICogc2NoZWR1bGVfd29yaygpXG4rXHRcdFx0ICogd2hpY2ggd291bGQgbGVhZCB0byBtb3JlIGludm9jYXRpb25zIG9mIHF1ZXVlX3dvcmsoKVxuIFx0XHRcdCAqL1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuQEAgLTQ4Nyw3ICs0ODYsNyBAQCBzdGF0aWMgdm9pZCBvdnBuX3RjcF93cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRzb2NrID0gcmN1X2RlcmVmZXJlbmNlX3NrX3VzZXJfZGF0YShzayk7XG4gXHRpZiAobGlrZWx5KHNvY2sgXHUwMDI2XHUwMDI2IHNvY2stXHUwMDNlcGVlcikpIHtcbi1cdFx0c2NoZWR1bGVfd29yayhcdTAwMjZzb2NrLVx1MDAzZXRjcF90eF93b3JrKTtcbitcdFx0cXVldWVfd29yayhvdnBuX3dxLCBcdTAwMjZzb2NrLVx1MDAzZXRjcF90eF93b3JrKTtcbiBcdFx0c29jay1cdTAwM2VwZWVyLVx1MDAzZXRjcC5za19jYi5za193cml0ZV9zcGFjZShzayk7XG4gXHR9XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUyOjUxLjQ4MjU3MTUzM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxODEyMzM1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBJbXBhY3Qgb2YgdGhlIE9wZW5WUE4gUGF0Y2ggU2VyaWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgd2FycmFudCBmdXp6aW5nIGVmZm9ydHMuIFRoZSBwYXRjaCB0b3VjaGVzIGEgc2lnbmlmaWNhbnQgbnVtYmVyIG9mIGZpbGVzIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L292cG5gIGRpcmVjdG9yeTogYGNyeXB0by5jYCwgYGNyeXB0by5oYCwgYGNyeXB0b19hZWFkLmNgLCBgY3J5cHRvX2FlYWQuaGAsIGBpby5jYCwgYG1haW4uY2AsIGBvdnBucHJpdi5oYCwgYHBlZXIuY2AsIGFuZCBgdGNwLmNgLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yIG9mIHBvdGVudGlhbCBmdW5jdGlvbmFsIGltcGFjdC5cblxuTm93LCBsZXQncyBkaXNzZWN0IHRoZSBjaGFuZ2VzLiBGaXJzdCwgYG92cG5fY3J5cHRvX2tleV9zbG90X3JlbGVhc2VgIGlzIHN3aXRjaGluZyBmcm9tIGBjYWxsX3JjdWAgdG8gYHF1ZXVlX3JjdV93b3JrYCB3aXRoIGBvdnBuX3dxYC4gVGhpcyBoaW50cyBhdCBhIG1vdmUgdG93YXJkcyBhIHdvcmtxdWV1ZS1iYXNlZCBtZWNoYW5pc20gZm9yIHJlc291cmNlIG1hbmFnZW1lbnQsIHdoaWNoLCBpZiBtaXNoYW5kbGVkLCAqY291bGQqIGludHJvZHVjZSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBjb3JydXB0aW9uIHNjZW5hcmlvcy4gTmV4dCwgYG92cG5fY3J5cHRvX2tpbGxfa2V5YCBoYXMgYSBsb2dpYyBjaGFuZ2UgaW4gaG93IGl0IGl0ZXJhdGVzIHRocm91Z2ggYW5kIHJlcGxhY2VzIHBvaW50ZXJzIHdpdGhpbiB0aGUgYGNzLVx1MDAzZXNsb3RzYCBzdHJ1Y3R1cmUuIFRoaXMgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBwb2ludGVyIG1hbmlwdWxhdGlvbiBpcyBhIGtub3duIHZ1bG5lcmFiaWxpdHkgYXJlYSwgYW5kIHRoaXMgY291bGQgb3BlbiB1cCBhIHZlY3RvciBmb3IgZXhwbG9pdGF0aW9uLlxuXG5BIG1vZHVsZS1vd25lZCB3b3JrcXVldWUsIGBvdnBuX3dxYCwgaXMgYmVpbmcgaW50cm9kdWNlZC4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0IGNlbnRyYWxpemVzIHdvcmtxdWV1ZSBvcGVyYXRpb25zIHdpdGhpbiB0aGUgYG92cG5gIG1vZHVsZS4gVGhlIGFkZGl0aW9uIG9mIGBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2ZyZWVfd29ya2AgaXMgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgd29ya3F1ZXVlLWJhc2VkIGZyZWVpbmcuIFRoaXMgbG9va3MgbGlrZSBhIGNoYW5nZSB0byBob3cgcmVzb3VyY2VzIGFyZSBtYW5hZ2VkLCB3aGljaCBpcyBnb29kLiBUaGVyZSBpcyBhbHNvIGEgY2hhbmdlIGluIHRoZSBvcmRlciBvZiBwdXQgY2FsbHMsIHdoaWNoIGhhcyB0aGUgcG90ZW50aWFsIHRvIGludHJvZHVjZSBpc3N1ZXMuXG5cbkZ1cnRoZXJtb3JlLCBgb3Zwbl93cWAgaXMgYWxsb2NhdGVkIGluIGBvdnBuX2luaXRgIGFuZCBkZXN0cm95ZWQgaW4gYG92cG5fY2xlYW51cGAsIHdoaWNoIG1lYW5zIHRoYXQgaXQgaGFzIGEgbGlmZSBjeWNsZSB0aWVkIHRvIHRoZSBtb2R1bGUgaXRzZWxmLiBUaGUgcmVzdCBvZiB0aGUgbWVudGlvbmVkIGZ1bmN0aW9ucywgc3VjaCBhcyBgb3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXRgLCBgb3Zwbl9wZWVyX2tlZXBhbGl2ZV93b3JrX3NpbmdsZWAsIGV0Yy4sIG5vdyBsZXZlcmFnZSBgb3Zwbl93cWAgaW5zdGVhZCBvZiBnZW5lcmljIHdvcmtxdWV1ZXMuXG5cbkdpdmVuIHRoZXNlIGNoYW5nZXMsIGl0J3MgY2xlYXIgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHRvIHRoZSBPcGVuVlBOIChvdnBuKSBkcml2ZXIuIFRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgdGhpcyBkcml2ZXIgKnJlYWNoYWJsZSogYW5kIGFtZW5hYmxlIHRvIGZ1enppbmc/IFdlbGwsIGl0J3MgYSBuZXR3b3JrIGRyaXZlciwgd2hpY2ggbWVhbnMgaXQgc2hvdWxkIGJlIGludGVyYWN0YWJsZSB2aWEgbmV0bGluayBhbmQgc29ja2V0cy4gVGhhdCdzIGEgXCJ5ZXNcIiBvbiByZWFjaGFiaWxpdHkuIEFuZCBjb25zaWRlcmluZyB0aGUgcG9pbnRlciBsb2dpYyBjaGFuZ2UgaW4gYG92cG5fY3J5cHRvX2tpbGxfa2V5YCBjb21iaW5lZCB3aXRoIHRoZSB3b3JrcXVldWUgbW9kaWZpY2F0aW9ucywgdGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcgZWZmb3J0cy4gSSBuZWVkIHRvIG5vdyBjaGVjayB0aGUgS2NvbmZpZyBmb3IgdGhlIG92cG4gZHJpdmVyIHRvIGNvbmZpcm0gaXRzIGJ1aWxkIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMjEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQyMTo1Mjo1OS42NjM4MDgyODlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxMDQ3Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPVlBOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTkyPWNvbmZpZyBXSVJFR1VBUkRfREVCVUdcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMTAyLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MTAzOmNvbmZpZyBPVlBOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xMDQtXFx0dHJpc3RhdGUgXFxcIk9wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUyOjU5Ljg2NDg2MjQ2OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDg2MzYzMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIE9WUE4gQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBjb25maWcgaW4gcGxheSBoZXJlIGlzIGRlZmluaXRlbHkgYE9WUE5gLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBpbW1lZGlhdGVseSBqdW1wIGludG8gYGRyaXZlcnMvbmV0L0tjb25maWdgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhpcyBPcGVuVlBOIGNvbmZpZ3VyYXRpb24uIFdlJ3JlIGxvb2tpbmcgdG8gdW5kZXJzdGFuZCBhbnkgYnVpbGQtdGltZSByZWxhdGlvbnNoaXBzLCByZXF1aXJlZCBmZWF0dXJlcywgb3IgcGxhdGZvcm0tc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgZm9yIGBPVlBOYCB3aXRoaW4gdGhpcyBrZXJuZWwgY29udGV4dC4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gaWRlbnRpZnkgYW55IG1pc3NpbmcgcGllY2VzIG9yIHBvdGVudGlhbCBjb25mbGljdHMgYmVmb3JlIHdlIGV2ZW4gdGhpbmsgYWJvdXQgYnVpbGRpbmcgdGhlIGtlcm5lbC4gTGV0J3Mgc2VlIHdoYXQgYEtjb25maWdgIHJldmVhbHMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ2NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUzOjAyLjkxMzUwMTc3OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcbiAxMDE6XFx0XFx0ICBTYXkgTiBoZXJlIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZy5cXG4gMTAyOlxcdFxcbiAxMDM6XFx0Y29uZmlnIE9WUE5cXG4gMTA0OlxcdFxcdHRyaXN0YXRlIFxcXCJPcGVuVlBOIGRhdGEgY2hhbm5lbCBvZmZsb2FkXFxcIlxcbiAxMDU6XFx0XFx0ZGVwZW5kcyBvbiBORVQgXFx1MDAyNlxcdTAwMjYgSU5FVFxcbiAxMDY6XFx0XFx0c2VsZWN0IERTVF9DQUNIRVxcbiAxMDc6XFx0XFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuIDEwODpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuIDEwOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0FFU1xcbiAxMTA6XFx0XFx0c2VsZWN0IENSWVBUT19HQ01cXG4gMTExOlxcdFxcdHNlbGVjdCBDUllQVE9fQ0hBQ0hBMjBQT0xZMTMwNVxcbiAxMTI6XFx0XFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG4gMTEzOlxcdFxcdGhlbHBcXG4gMTE0OlxcdFxcdCAgVGhpcyBtb2R1bGUgZW5oYW5jZXMgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBPcGVuVlBOIHVzZXJzcGFjZSBzb2Z0d2FyZVxcbiAxMTU6XFx0XFx0ICBieSBvZmZsb2FkaW5nIHRoZSBkYXRhIGNoYW5uZWwgcHJvY2Vzc2luZyB0byBrZXJuZWxzcGFjZS5cXG4gMTE2OlxcdFxcbiAxMTc6XFx0Y29uZmlnIEVRVUFMSVpFUlxcbiAxMTg6XFx0XFx0dHJpc3RhdGUgXFxcIkVRTCAoc2VyaWFsIGxpbmUgbG9hZCBiYWxhbmNpbmcpIHN1cHBvcnRcXFwiXFxuIDExOTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUzOjAyLjkxMzU5MTA0OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NDU1NzI3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE9wZW5WUE4gQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhlIGRlcGVuZGVuY2llczogYE5FVGAgYW5kIGBJTkVUYC4gVGhhdCdzIHN0YW5kYXJkIHN0dWZmIGZvciBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkuIFRoZSBzZWxlY3RlZCBvcHRpb25zIGFyZSBpbnRlcmVzdGluZzogYERTVF9DQUNIRWAsIHdoaWNoIHByb2JhYmx5IG1lYW5zIHNvbWUga2luZCBvZiBkZXN0aW5hdGlvbiBjYWNoaW5nLCB3aGljaCBpcyBhbiBvcHRpbWl6YXRpb24gc3RyYXRlZ3kgZm9yIHJvdXRpbmcgYW5kIGNvbm5lY3Rpb24gc2V0dXA7IGBORVRfVURQX1RVTk5FTGAsIHN1Z2dlc3RpbmcgVURQIHR1bm5lbGluZywgYXMgZXhwZWN0ZWQgd2l0aCBPcGVuVlBOOyBgQ1JZUFRPYCwgd2hpY2ggaXMgYSBnaXZlbjsgdGhlbiB3ZSBoYXZlIHRoZSBzcGVjaWZpYyBjcnlwdG9ncmFwaGljIGFsZ29yaXRobXMg4oCTIGBDUllQVE9fQUVTYCwgYENSWVBUT19HQ01gLCBgQ1JZUFRPX0NIQUNIQTIwUE9MWTEzMDVgIHdoaWNoIGluZGljYXRlcyBBRVMsIEdhbG9pcy9Db3VudGVyIE1vZGUsIGFuZCBDaGFDaGEyMC1Qb2x5MTMwNSBlbmNyeXB0aW9uIHN1cHBvcnQsIHJlc3BlY3RpdmVseSwgYW5kIGBTVFJFQU1fUEFSU0VSYCwgd2hpY2ggaXMgYWxtb3N0IGNlcnRhaW5seSBhYm91dCBwYXJzaW5nIHRoZSBpbmNvbWluZyBkYXRhIHN0cmVhbS5cblxuUmlnaHQsIHNvIHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgT3BlblZQTiBjb25maWd1cmF0aW9uLCB0aGUga2V5IGhlcmUgaXMgYE9WUE5gLiBUaGF0J3Mgb3VyIHRhcmdldC5cblxuTm93LCB3aGVyZSBhcmUgdGhlIGtleSBjaGFuZ2VzPyBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGtleSBhcmVhcy4gSSBzZWUgYSBsaXN0IG9mIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSSdtIGdvaW5nIHRvIHJ1biB0aHJvdWdoIHRoZXNlIGluIG15IGhlYWQuXG5cbiogICBgb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZWAsIGFuZCBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgIHRoZXNlIGRlYWwgd2l0aCBjcnlwdG9ncmFwaGljIGtleXMsIGxpa2VseSBtYW5hZ2luZyB0aGVpciBsaWZlY3ljbGUuIGBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2ZyZWVfd29ya2AsIGBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X25ld2AsIHRoaXMgZGVhbHMgd2l0aCBBRUFEIGNpcGhlcnMsIHNvIHByb2JhYmx5IHBhcnQgb2YgdGhlIGluaXRpYWwgY3J5cHRvZ3JhcGhpYyBzZXR1cCwgb3Iga2V5IG1hbmFnZW1lbnQuXG4qICAgYG92cG5fZGVjcnlwdF9wb3N0YCwgYG92cG5fZW5jcnlwdF9wb3N0YCwgdGhlc2UgYXJlIHBvc3QtcHJvY2Vzc2luZyBzdGVwcy5cbiogICBgb3Zwbl9pbml0YCwgYG92cG5fY2xlYW51cGAsIHRoZSBiYXNpYyBsaWZlY3ljbGUuXG4qICAgYG92cG5fcGVlcl9rZWVwYWxpdmVfc2V0YCwgYG92cG5fcGVlcl9rZWVwYWxpdmVfd29ya19zaW5nbGVgLCBgb3Zwbl9wZWVyX2tlZXBhbGl2ZV93b3JrYCB3aGljaCBzZWVtcyB0byBiZSBhYm91dCBrZWVwYWxpdmUgZnVuY3Rpb25hbGl0eS5cbiogICBgb3Zwbl90Y3BfcmN2YCwgYG92cG5fdGNwX3NlbmRfc29ja2AsIGBvdnBuX3RjcF93cml0ZV9zcGFjZWAgaXMgdGhlIFRDUCBmdW5jdGlvbmFsaXR5LlxuXG5Pa2F5LCBsZXQncyBob25lIGluIG9uIHRoZSBpbXBvcnRhbnQgZnVuY3Rpb25zLCB0aGlzIGlzIHRoZSBjb3JlOiBgb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZWAsIGBvdnBuX2NyeXB0b19raWxsX2tleWAsIGBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X25ld2AsIGBvdnBuX3BlZXJfa2VlcGFsaXZlX3NldGAsIGBvdnBuX3BlZXJfa2VlcGFsaXZlX3dvcmtgLiBOb3csIGFyZSB0aGV5IGV4cG9ydGVkIG9yIHN0YXRpYz8gQWgsIGdvb2QsIHRoZXkncmUgbm90IHN0YXRpYywgbWVhbmluZyB0aGV5J3JlIGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIHRoZSBjdXJyZW50IHNjb3BlLiBUaGF0IGlzIGltcG9ydGFudCB0byByZW1lbWJlci4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZW50cnkgcG9pbnRzIG9yIGNvcmUgbWFuYWdlbWVudCBmdW5jdGlvbnMuXG5JIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBJIG5lZWQgdG8gdmVyaWZ5IHRoZXNlIGZ1bmN0aW9ucy4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjaGFuZ2VzIGFyZSBoYXBwZW5pbmcsIHRoZSBjcnlwdG9ncmFwaGljIGtleSBtYW5hZ2VtZW50IGFuZCBrZWVwYWxpdmUgbWVjaGFuaXNtcywgc28gbGV0IG1lIHRha2UgYSBjbG9zZXIgbG9vayBhbmQgYmVnaW4gZnJvbSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkzNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUzOjEwLjY1OTE2NzMwOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjExOTQxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnBuX2NyeXB0b19raWxsX2tleVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9vdnBuL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jPTMyPXZvaWQgb3Zwbl9jcnlwdG9fc3RhdGVfcmVsZWFzZShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzKVxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYy00OS0vKiByZW1vdmVzIHRoZSBrZXkgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBpZCBmcm9tIHRoZSBjcnlwdG8gY29udGV4dCAqL1xcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmM6NTA6Ym9vbCBvdnBuX2NyeXB0b19raWxsX2tleShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzLCB1OCBrZXlfaWQpXFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYy01MS17XFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oPTE0MT1pbnQgb3Zwbl9jcnlwdG9fY29uZmlnX2dldChzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzLFxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaC0xNDQtXFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaDoxNDU6Ym9vbCBvdnBuX2NyeXB0b19raWxsX2tleShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzLCB1OCBrZXlfaWQpO1xcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmgtMTQ2LVxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jPTIzOD12b2lkIG92cG5fZW5jcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtMjY0LVxcdFxcdFxcdCAgICBwZWVyLVxcdTAwM2VpZCk7XFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjI2NTpcXHRcXHRpZiAob3Zwbl9jcnlwdG9fa2lsbF9rZXkoXFx1MDAyNnBlZXItXFx1MDAzZWNyeXB0bywga3MtXFx1MDAzZWtleV9pZCkpXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTI2Ni1cXHRcXHRcXHQvKiBsZXQgdXNlcnNwYWNlIGtub3cgc28gdGhhdCBhIG5ldyBrZXkgbXVzdCBiZSBuZWdvdGlhdGVkICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUzOjEwLjcxMTI5NjUzM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MzM5MTA4MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipEYXRhIFBhdGggQ29uY2VybnMgYW5kIEtlZXBhbGl2ZSBJbnRlZ3JhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIE9wZW5WUE4ga2VybmVsIG1vZHVsZSBoZXJlLiBUaGUgY3JpdGljYWwgZnVuY3Rpb24gYG92cG5fY3J5cHRvX2tpbGxfa2V5YCDigJMgdGhhdCdzIGEga2V5IG1hbmFnZW1lbnQgZnVuY3Rpb24sIGxpa2VseSBkZWFsaW5nIHdpdGggY3J5cHRvIGtleSBjbGVhbnVwIOKAkyBpdCdzIGRpcmVjdGx5IGNhbGxlZCBmcm9tIGBvdnBuX2VuY3J5cHRfcG9zdGAuIEFuZCBgb3Zwbl9lbmNyeXB0X3Bvc3RgLCB0aGF0J3MgZmlybWx5IGluIHRoZSAqZGF0YSBwYXRoKi4gTWVhbmluZyBhbnkgaW5lZmZpY2llbmN5IHRoZXJlIGhhcyBhbiBpbW1lZGlhdGUgaW1wYWN0IG9uIHRocm91Z2hwdXQgYW5kIGxhdGVuY3kuIFdlIG5lZWQgdG8gYmUgKnZlcnkqIG1pbmRmdWwgb2YgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGF0IGBvdnBuX2NyeXB0b19raWxsX2tleWAgY2FsbCwgZXNwZWNpYWxseSBpdHMgc3luY2hyb25pemF0aW9uIG9yIHBvdGVudGlhbCBsb2NraW5nLiBBbnkgYmxvY2tpbmcgaW4ga2V5IG1hbmFnZW1lbnQgd2lsbCBibGVlZCBkaXJlY3RseSBpbnRvIHRoZSBlbmNyeXB0IGFuZCB0cmFuc21pdCB0aW1lLlxuXG5PbiB0aGUgb3RoZXIgaGFuZCwgYG92cG5fcGVlcl9rZWVwYWxpdmVfc2V0YCBpcyBiZWluZyBjYWxsZWQgZnJvbSAqbmV0bGluayouIEludGVyZXN0aW5nLiBUaGF0IGxpa2VseSB0aWVzIGludG8gdGhlIGNvbnRyb2wgcGxhbmUsIHNldHRpbmcga2VlcGFsaXZlIHBhcmFtZXRlcnMgZm9yIGEgcGVlciwgcHJvYmFibHkgaW4gcmVzcG9uc2UgdG8gdXNlciBjb25maWd1cmF0aW9uIG9yIG5ldHdvcmsgZXZlbnRzLiBUaGlzIHN1Z2dlc3RzIGEgY29udHJvbCBwYXRoIGludGVncmF0aW9uLCB3aXRoIHBvdGVudGlhbCB0byB0cmlnZ2VyIGtlZXBhbGl2ZSBiZWhhdmlvdXIgb24gY2VydGFpbiBjb25kaXRpb25zLiBXZSBzaG91bGQgbWFrZSBzdXJlIHdlJ3JlIG1hbmFnaW5nIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGVzZSB0d28gcGF0aHMgZWZmaWNpZW50bHkuIEFyZSB0aGVyZSBhbnkgcmFjZSBjb25kaXRpb25zLCBkYXRhIGluY29uc2lzdGVuY2llcywgb3IgY29udGVudGlvbiBwb3NzaWJpbGl0aWVzIHRoYXQgd2UgbmVlZCB0byBzY3J1dGluaXplIGNhcmVmdWxseT8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGVzZSB0d28gaW5kZXBlbmRlbnQgcGllY2VzLCBkYXRhIHBhdGggZW5jcnlwdGlvbi9rZXkgaGFuZGxpbmcgYW5kIGNvbnRyb2wgcGF0aCBrZWVwYWxpdmVzLCBwbGF5IHRvZ2V0aGVyLiBBbnkgdW5leHBlY3RlZCBiZWhhdmlvdXIgb24gb25lIHNpZGUgd2lsbCBpbmZsdWVuY2UgdGhlIG90aGVyLCB0aGlzIGNvdWxkIGltcGFjdCBuZXR3b3JrIHN0YWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQzMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUzOjE2LjQ0NTIxMTQwNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE5NzYyODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvb3Zwbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLmM9Mjc5PXN0YXRpYyBpbnQgb3Zwbl9ubF9wZWVyX21vZGlmeShzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLmMtMzMwLVxcdFxcdHRpbWVvdXQgPSBubGFfZ2V0X3UzMihhdHRyc1tPVlBOX0FfUEVFUl9LRUVQQUxJVkVfVElNRU9VVF0pO1xcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay5jOjMzMTpcXHRcXHRvdnBuX3BlZXJfa2VlcGFsaXZlX3NldChwZWVyLCBpbnRlcnYsIHRpbWVvdXQpO1xcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay5jLTMzMi1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL3BlZXIuYz0yNT1zdGF0aWMgdm9pZCB1bmxvY2tfb3ZwbihzdHJ1Y3Qgb3Zwbl9wcml2ICpvdnBuLFxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmMtNDAtLyoqXFxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmM6NDE6ICogb3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXQgLSBjb25maWd1cmUga2VlcGFsaXZlIHZhbHVlcyBmb3IgcGVlclxcbmRyaXZlcnMvbmV0L292cG4vcGVlci5jLTQyLSAqIEBwZWVyOiB0aGUgcGVlciB0byBjb25maWd1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vcGVlci5jLTQ1LSAqL1xcbmRyaXZlcnMvbmV0L292cG4vcGVlci5jOjQ2OnZvaWQgb3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXQoc3RydWN0IG92cG5fcGVlciAqcGVlciwgdTMyIGludGVydmFsLCB1MzIgdGltZW91dClcXG5kcml2ZXJzL25ldC9vdnBuL3BlZXIuYy00Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL3BlZXIuaD0xNTQ9Ym9vbCBvdnBuX3BlZXJfY2hlY2tfYnlfc3JjKHN0cnVjdCBvdnBuX3ByaXYgKm92cG4sIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL3BlZXIuaC0xNTYtXFxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmg6MTU3OnZvaWQgb3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXQoc3RydWN0IG92cG5fcGVlciAqcGVlciwgdTMyIGludGVydmFsLCB1MzIgdGltZW91dCk7XFxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmgtMTU4LXZvaWQgb3Zwbl9wZWVyX2tlZXBhbGl2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUzOjE2LjQ5NzE5NjYxOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzk3NTA1Nzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipSZWZsZWN0aW5nIG9uIE9wZW5WUE4gT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgT3BlblZQTi1yZWxhdGVkIGJpdHMgYW5kIHBpZWNlcy4gKmBvdnBuX3BlZXJfa2VlcGFsaXZlX3NldGAqLCB5ZXMsIHRoYXQgbG9va3MgcHJvbWlzaW5nLCBnb29kIHRvIHNlZSB0aGF0IGJlaW5nIHVzZWQsIHByb2JhYmx5IGZvciBrZWVwaW5nIHRob3NlIGNvbm5lY3Rpb25zIGhlYWx0aHkgYW5kIGFsaXZlIOKAkyBhbHdheXMgYSBrZXkgY29uY2VybiB3aXRoIFZQTnMuIEFuZCB0aGVuLi4uICpgb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZWAqIOKAkyBhaCwgcmlnaHQsIHRoYXQncyB0aGUgY2xlYW51cCBtZWNoYW5pc20gZm9yIGNyeXB0b2dyYXBoaWMga2V5cywgaGFuZGxpbmcgdGhlaXIgcmVsZWFzZSB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQgaGl0cyB6ZXJvLiBUaGF0J3MgZXhhY3RseSBob3cgaXQgc2hvdWxkIGJlLiBFbnN1cmVzIHdlJ3JlIG5vdCBsZWFraW5nIHJlc291cmNlcyBhbmQga2VlcHMgdGhpbmdzIHNlY3VyZS4gR29vZCwgZWZmaWNpZW50IG1lbW9yeSBtYW5hZ2VtZW50IGlzIGNyaXRpY2FsIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzE2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMjE6NTM6MjAuMjk0NzA1NjIyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTA2MTIxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnBuX2NyeXB0b19rZXlfc2xvdF9yZWxlYXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L292cG4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmMtMjAtXFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYzoyMTp2b2lkIG92cG5fY3J5cHRvX2tleV9zbG90X3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpXFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYy0yMi17XFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oPTExMT1vdnBuX2NyeXB0b19rZXlfc2xvdF9wcmltYXJ5KGNvbnN0IHN0cnVjdCBvdnBuX2NyeXB0b19zdGF0ZSAqY3MpXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oLTEyMy1cXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oOjEyNDp2b2lkIG92cG5fY3J5cHRvX2tleV9zbG90X3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpO1xcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmgtMTI1LVxcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmg9MTI2PXN0YXRpYyBpbmxpbmUgdm9pZCBvdnBuX2NyeXB0b19rZXlfc2xvdF9wdXQoc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcylcXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oLTEyNy17XFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaDoxMjg6XFx0a3JlZl9wdXQoXFx1MDAyNmtzLVxcdTAwM2VyZWZjb3VudCwgb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZSk7XFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaC0xMjktfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQyMTo1MzoyMC4zNDU3NzM0NDZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwOTc3OTg1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIE9wZW5WUE4gQ3J5cHRvIEtleSBNYW5hZ2VtZW50KipcblxuQWxyaWdodCwgKm92cG5cXF9jcnlwdG9cXF9rZXlcXF9zbG90XFxfcmVsZWFzZSogaXMgcHJlY2lzZWx5IHdoYXQgSSdkIGV4cGVjdCB0byBzZWUgaW4gYSBrZXkgbWFuYWdlbWVudCBzeXN0ZW0sIHRoZSBleHBlY3RlZCByZWxlYXNlIG9mIHRoZSBrZXkgc2xvdCBpcyBnb29kIGZvciBtZW1vcnkgbWFuYWdlbWVudC4gVGhhdCdzIGEgc29saWQgc3RhcnQuIE5vdywgbGV0J3MgZHJpbGwgZG93biBhIGJpdCBkZWVwZXIgaW50byB0aGUgbGlmZWN5Y2xlLiBUaGUgbmF0dXJhbCBwbGFjZSB0byBsb29rIG5leHQgaXMgaXRzIGNvdW50ZXJwYXJ0LCB0aGUgYWxsb2NhdGlvbiBmdW5jdGlvbjogKm92cG5cXF9hZWFkXFxfY3J5cHRvXFxfa2V5XFxfc2xvdFxcX25ldyouIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBuZXcgc2xvdHMgYXJlIGNyZWF0ZWQuIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY2hlY2tzIG9uIHRoaXMgZnVuY3Rpb24gdGhhdCBuZWVkIHRvIGJlIG1hZGUuIEFyZSB0aGV5IGxpbmtlZCwgaW4gdGVybXMgb2YgcmVzb3VyY2UgbWFuYWdlbWVudCwgb3IgYXJlIHRoZXJlIHNlcGFyYXRlIG1hbmFnZW1lbnQgZnVuY3Rpb25zIHRoYXQgb3ZlcmxhcD8gV2hhdCBkb2VzIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MgYWN0dWFsbHkgZW50YWlsIOKAkyBtZW1vcnkgYWxsb2NhdGlvbiwga2V5IGRlcml2YXRpb24vZ2VuZXJhdGlvbiwgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHVuZGVybHlpbmcgY3J5cHRvIGNvbnRleHQ/IEkgbmVlZCB0byBjaGVjayB0aGUgcG90ZW50aWFsIGZvciB2dWxuZXJhYmlsaXRpZXMsIHN1Y2ggYXMgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCwgaW1wcm9wZXIga2V5IGRlcml2YXRpb24sIG9yIGluc3VmZmljaWVudCBlbnRyb3B5IHNvdXJjaW5nIGR1cmluZyB0aGUga2V5IGdlbmVyYXRpb24uIEkgd2FudCB0byBsb29rIGZvciBwb3RlbnRpYWwgbG9jay11cHMgdG9vLiBUaGUgbW9yZSBJIGNhbiB1bmRlcnN0YW5kIGFib3V0IHRoaXMgY3JpdGljYWwgcGFpcmluZywgdGhlIG1vcmUgZWZmZWN0aXZlIG15IG92ZXJhbGwgYW5hbHlzaXMgb2YgT3BlblZQTidzIGNyeXB0byBpbXBsZW1lbnRhdGlvbiBjYW4gYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODQ0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMjE6NTM6MjQuMTU1NTU4MDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODI5Mjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L292cG4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmM9Nzg9aW50IG92cG5fY3J5cHRvX3N0YXRlX3Jlc2V0KHN0cnVjdCBvdnBuX2NyeXB0b19zdGF0ZSAqY3MsXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jLTg3LVxcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmM6ODg6XFx0bmV3ID0gb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXcoXFx1MDAyNnBrci1cXHUwMDNla2V5KTtcXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jLTg5LVxcdGlmIChJU19FUlIobmV3KSlcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYz00MDA9c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICpcXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmM6NDAxOm92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3KGNvbnN0IHN0cnVjdCBvdnBuX2tleV9jb25maWcgKmtjKVxcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYy00MDIte1xcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5oPTIzPXN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqXFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5oOjI0Om92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3KGNvbnN0IHN0cnVjdCBvdnBuX2tleV9jb25maWcgKmtjKTtcXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmgtMjUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUzOjI0LjIwODM5NDc5NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDcxMjUxMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgT3BlblZQTiBEYXRhIENoYW5uZWwgT2ZmbG9hZCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXdgIGxvb2tzIHNvbGlkLCBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBmb2N1cywgdGhlbiwgbmVlZHMgdG8gYmUgb24gdGhlc2Ugc3ltYm9sczogYG92cG5fY3J5cHRvX2tleV9zbG90X3JlbGVhc2VgLCBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgLCBgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXdgLCBgb3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXRgLCBhbmQgYG92cG5fcGVlcl9rZWVwYWxpdmVfd29ya2AuIFRoaXMgaXMgYWJvdXQgaG93IHRoZSBjcnlwdG8ga2V5cyBhcmUgaGFuZGxlZCBpbiB0aGUgb2ZmbG9hZCBkcml2ZXIuXG5cblRoZSBwYXRjaCBpcyB0b3VjaGluZyB0aGUgT3BlblZQTiBkYXRhIGNoYW5uZWwgb2ZmbG9hZCBkcml2ZXIgKGBkcml2ZXJzL25ldC9vdnBuYCksIHNvIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBuZXR3b3JrIGRyaXZlciDigJMgYWx3YXlzIHNvbWV0aGluZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvLiBTcGVjaWZpY2FsbHksIGl0J3Mgc3dhcHBpbmcgYGNhbGxfcmN1YCBmb3IgYHF1ZXVlX3JjdV93b3JrYCBmb3IgY3J5cHRvIGtleSBzbG90IGZyZWVpbmcsIHdoaWNoIGlzIGEgZ29vZCBtb3ZlIGZvciBpbmNyZWFzZWQgZWZmaWNpZW5jeSBhbmQgcmVkdWNlZCBjb250ZW50aW9uLiBUaGV5J3JlIGludHJvZHVjaW5nIGEgZGVkaWNhdGVkIHdvcmtxdWV1ZSAoYG92cG5fd3FgKSBmb3IgYWxsIG92cG4tc3BlY2lmaWMgd29yaywgYW5kIGZpeGluZyBhIGxvZ2ljIGJ1ZyBpbiBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgLiBUaGVzZSBhcmUgYWxsIGNydWNpYWwgaW1wcm92ZW1lbnRzLCBhbmQgdGhpcyBpcyBnb29kIHRvIHNlZSBhcyBpdCBzdHJlYW1saW5lcyBvcGVyYXRpb25zLlxuXG5Ob3csIGxldCBtZSBqdXN0IGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb25zIGFyZSBhbGwgaW4gb3JkZXIuIFRoZXkncmUgcmVmZXJlbmNpbmcgYE9WUE5gLCB3aGljaCBkZXBlbmRzIG9uIGBORVRgIGFuZCBgSU5FVGAsIHdoaWNoIGlzIGV4cGVjdGVkLiBMb29rcyBsaWtlIGl0IGFsc28gc2VsZWN0cyBgRFNUX0NBQ0hFYCwgYE5FVF9VRFBfVFVOTkVMYCwgYENSWVBUT2AsIGBDUllQVE9fQUVTYCwgYENSWVBUT19HQ01gLCBgQ1JZUFRPX0NIQUNIQTIwUE9MWTEzMDVgLCBhbmQgYFNUUkVBTV9QQVJTRVJgLiBHb29kLCB0aGUgY29uZmlndXJhdGlvbiBpcyBzdWZmaWNpZW50LiBTZWVtcyBsaWtlIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0ODYsIk91dHB1dFRva2VucyI6MTgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUzOjMzLjY3OTY1MDE3NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1ODg2NzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPVlBOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZVwiLFxuICAgIFwib3Zwbl9jcnlwdG9fa2lsbF9rZXlcIixcbiAgICBcIm92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3XCIsXG4gICAgXCJvdnBuX3BlZXJfa2VlcGFsaXZlX3NldFwiLFxuICAgIFwib3Zwbl9wZWVyX2tlZXBhbGl2ZV93b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWQgZHJpdmVyIChkcml2ZXJzL25ldC9vdnBuKS4gSXQgcmVwbGFjZXMgY2FsbF9yY3Ugd2l0aCBxdWV1ZV9yY3Vfd29yayBmb3IgZnJlZWluZyBjcnlwdG8ga2V5IHNsb3RzLCBpbnRyb2R1Y2VzIGEgZGVkaWNhdGVkIHdvcmtxdWV1ZSAob3Zwbl93cSkgZm9yIGFsbCBvdnBuLXNwZWNpZmljIHdvcmssIGFuZCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBvdnBuX2NyeXB0b19raWxsX2tleS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBhIHJlYWNoYWJsZSBuZXR3b3JrIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPVlBOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZVwiLFxuICAgIFwib3Zwbl9jcnlwdG9fa2lsbF9rZXlcIixcbiAgICBcIm92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3XCIsXG4gICAgXCJvdnBuX3BlZXJfa2VlcGFsaXZlX3NldFwiLFxuICAgIFwib3Zwbl9wZWVyX2tlZXBhbGl2ZV93b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWQgZHJpdmVyIChkcml2ZXJzL25ldC9vdnBuKS4gSXQgcmVwbGFjZXMgY2FsbF9yY3Ugd2l0aCBxdWV1ZV9yY3Vfd29yayBmb3IgZnJlZWluZyBjcnlwdG8ga2V5IHNsb3RzLCBpbnRyb2R1Y2VzIGEgZGVkaWNhdGVkIHdvcmtxdWV1ZSAob3Zwbl93cSkgZm9yIGFsbCBvdnBuLXNwZWNpZmljIHdvcmssIGFuZCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBvdnBuX2NyeXB0b19raWxsX2tleS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBhIHJlYWNoYWJsZSBuZXR3b3JrIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMjE6NTM6MzMuNzY1NTQ0MDA1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAzODAwNTk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUzOjMzLjc2NjE1NzY2NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTAzNzM4ODI4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gZml4aW5nIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBvdnBuX2NyeXB0b19raWxsX2tleWAsIHJlb3JkZXJpbmcgY2xlYW51cCBmdW5jdGlvbnMgdG8gcHJldmVudCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYnVncywgYW5kIG1pZ3JhdGluZyB3b3JrIGl0ZW1zIGZyb20gdGhlIHN5c3RlbSB3b3JrcXVldWUgdG8gYSBkZWRpY2F0ZWQgYG92cG5fd3FgIHdvcmtxdWV1ZS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG1lbW9yeSBzYWZldHkgaXNzdWVzIChOVUxMIGRlcmVmZXJlbmNlcywgVUFGKSBhbmQgY29uY3VycmVuY3kgbWFuYWdlbWVudCwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGNoYW5nZXMgdG8gZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhOTVmMjZkYjUyMjJkNjJhMWZlMzkyNDBjNDhmOGUwYWViOTE2NjA5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgOSAyMTo1Mjo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmMgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jXG5pbmRleCA5MDU4MGUzMjA1MmZiLi43ZTU0NTQyODkwMGE5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uY1xuKysrIGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uY1xuQEAgLTE4LDIwICsxOCwxMiBAQFxuICNpbmNsdWRlIFwiY3J5cHRvX2FlYWQuaFwiXG4gI2luY2x1ZGUgXCJjcnlwdG8uaFwiXG4gXG4tc3RhdGljIHZvaWQgb3Zwbl9rc19kZXN0cm95X3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4te1xuLVx0c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcztcbi1cbi1cdGtzID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCwgcmN1KTtcbi1cdG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZGVzdHJveShrcyk7XG4tfVxuLVxuIHZvaWQgb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiB7XG4gXHRzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzO1xuIFxuIFx0a3MgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90LCByZWZjb3VudCk7XG4tXHRjYWxsX3JjdShcdTAwMjZrcy1cdTAwM2VyY3UsIG92cG5fa3NfZGVzdHJveV9yY3UpO1xuK1x0cXVldWVfcmN1X3dvcmsob3Zwbl93cSwgXHUwMDI2a3MtXHUwMDNlZnJlZV93b3JrKTtcbiB9XG4gXG4gLyogY2FuIG9ubHkgYmUgaW52b2tlZCB3aGVuIGFsbCBwZWVyIHJlZmVyZW5jZXMgaGF2ZSBiZWVuIGRyb3BwZWQgKGkuZS4gUkNVXG5AQCAtNTgsMTUgKzUwLDE5IEBAIHZvaWQgb3Zwbl9jcnlwdG9fc3RhdGVfcmVsZWFzZShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzKVxuIGJvb2wgb3Zwbl9jcnlwdG9fa2lsbF9rZXkoc3RydWN0IG92cG5fY3J5cHRvX3N0YXRlICpjcywgdTgga2V5X2lkKVxuIHtcbiBcdHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MgPSBOVUxMO1xuK1x0c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICp0bXA7XG4rXHRpbnQgc2xvdCA9IDA7XG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2Y3MtXHUwMDNlbG9jayk7XG4tXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNzLVx1MDAzZXNsb3RzWzBdKS1cdTAwM2VrZXlfaWQgPT0ga2V5X2lkKSB7XG4tXHRcdGtzID0gcmN1X3JlcGxhY2VfcG9pbnRlcihjcy1cdTAwM2VzbG90c1swXSwgTlVMTCxcbi1cdFx0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZjcy1cdTAwM2Vsb2NrKSk7XG4tXHR9IGVsc2UgaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihjcy1cdTAwM2VzbG90c1sxXSktXHUwMDNla2V5X2lkID09IGtleV9pZCkge1xuLVx0XHRrcyA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoY3MtXHUwMDNlc2xvdHNbMV0sIE5VTEwsXG4tXHRcdFx0XHRcdCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2Y3MtXHUwMDNlbG9jaykpO1xuK1x0dG1wID0gcmN1X2FjY2Vzc19wb2ludGVyKGNzLVx1MDAzZXNsb3RzW3Nsb3RdKTtcbitcdGlmICghdG1wIHx8IHRtcC1cdTAwM2VrZXlfaWQgIT0ga2V5X2lkKSB7XG4rXHRcdHNsb3QgPSAxO1xuK1x0XHR0bXAgPSByY3VfYWNjZXNzX3BvaW50ZXIoY3MtXHUwMDNlc2xvdHNbc2xvdF0pO1xuIFx0fVxuK1xuK1x0aWYgKHRtcCBcdTAwMjZcdTAwMjYgdG1wLVx1MDAzZWtleV9pZCA9PSBrZXlfaWQpXG4rXHRcdGtzID0gcmN1X3JlcGxhY2VfcG9pbnRlcihjcy1cdTAwM2VzbG90c1tzbG90XSwgTlVMTCxcbitcdFx0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZjcy1cdTAwM2Vsb2NrKSk7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZjcy1cdTAwM2Vsb2NrKTtcbiBcbiBcdGlmIChrcylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oIGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaFxuaW5kZXggMGUyODRmZWMzYTc1YS4uZTNmZWIxNmQ1NDk4NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmhcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmhcbkBAIC0xMCw2ICsxMCw4IEBAXG4gI2lmbmRlZiBfTkVUX09WUE5fT1ZQTkNSWVBUT19IX1xuICNkZWZpbmUgX05FVF9PVlBOX09WUE5DUllQVE9fSF9cbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuK1xuICNpbmNsdWRlIFwicGt0aWQuaFwiXG4gI2luY2x1ZGUgXCJwcm90by5oXCJcbiBcbkBAIC00NSw4ICs0Nyw4IEBAIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCB7XG4gXG4gXHRzdHJ1Y3Qgb3Zwbl9wa3RpZF9yZWN2IHBpZF9yZWN2IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4gXHRzdHJ1Y3Qgb3Zwbl9wa3RpZF94bWl0IHBpZF94bWl0IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4rXHRzdHJ1Y3QgcmN1X3dvcmsgZnJlZV93b3JrO1xuIFx0c3RydWN0IGtyZWYgcmVmY291bnQ7XG4tXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuIH07XG4gXG4gc3RydWN0IG92cG5fY3J5cHRvX3N0YXRlIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmMgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmNcbmluZGV4IDhmMDdjNDE4NjIyYjIuLjc0ZWFmNmZhYzJmNTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmNcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuY1xuQEAgLTksNiArOSw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjY3J5cHRvL2FlYWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcHY2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdWRwLmhcdTAwM2VcbkBAIC0zODAsMTMgKzM4MSwxOSBAQCBzdGF0aWMgc3RydWN0IGNyeXB0b19hZWFkICpvdnBuX2FlYWRfaW5pdChjb25zdCBjaGFyICp0aXRsZSxcbiBcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gfVxuIFxuLXZvaWQgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9kZXN0cm95KHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MpXG4rc3RhdGljIHZvaWQgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9mcmVlKHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MpXG4ge1xuLVx0aWYgKCFrcylcbi1cdFx0cmV0dXJuO1xuLVxuIFx0Y3J5cHRvX2ZyZWVfYWVhZChrcy1cdTAwM2VlbmNyeXB0KTtcbiBcdGNyeXB0b19mcmVlX2FlYWQoa3MtXHUwMDNlZGVjcnlwdCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZnJlZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzO1xuK1xuK1x0a3MgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCxcbitcdFx0XHQgIGZyZWVfd29yayk7XG4rXHRvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2ZyZWUoa3MpO1xuIFx0a2ZyZWUoa3MpO1xuIH1cbiBcbkBAIC00MjAsNiArNDI3LDcgQEAgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXcoY29uc3Qgc3RydWN0IG92cG5fa2V5X2NvbmZpZyAqa2MpXG4gXG4gXHRrcy1cdTAwM2VlbmNyeXB0ID0gTlVMTDtcbiBcdGtzLVx1MDAzZWRlY3J5cHQgPSBOVUxMO1xuK1x0SU5JVF9SQ1VfV09SSyhcdTAwMjZrcy1cdTAwM2VmcmVlX3dvcmssIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZnJlZV93b3JrKTtcbiBcdGtyZWZfaW5pdChcdTAwMjZrcy1cdTAwM2VyZWZjb3VudCk7XG4gXHRrcy1cdTAwM2VrZXlfaWQgPSBrYy1cdTAwM2VrZXlfaWQ7XG4gXG5AQCAtNDUzLDcgKzQ2MSw4IEBAIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3KGNvbnN0IHN0cnVjdCBvdnBuX2tleV9jb25maWcgKmtjKVxuIFx0cmV0dXJuIGtzO1xuIFxuIGRlc3Ryb3lfa3M6XG4tXHRvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2Rlc3Ryb3koa3MpO1xuK1x0b3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9mcmVlKGtzKTtcbitcdGtmcmVlKGtzKTtcbiBcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaCBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaFxuaW5kZXggNjVhMmZmMzA3ODk4Ni4uZmFlM2I1ODVhNDNiMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaFxuKysrIGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5oXG5AQCAtMjIsNyArMjIsNiBAQCBpbnQgb3Zwbl9hZWFkX2RlY3J5cHQoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcyxcbiBcbiBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKlxuIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3KGNvbnN0IHN0cnVjdCBvdnBuX2tleV9jb25maWcgKmtjKTtcbi12b2lkIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZGVzdHJveShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzKTtcbiBcbiBlbnVtIG92cG5fY2lwaGVyX2FsZyBvdnBuX2FlYWRfY3J5cHRvX2FsZyhzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2lvLmMgYi9kcml2ZXJzL25ldC9vdnBuL2lvLmNcbmluZGV4IDlhNjZkNjkzMDM5YTMuLjk1MjZmODA5NmRhNjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL2lvLmNcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vaW8uY1xuQEAgLTIwNCwxMCArMjA0LDEwIEBAIHZvaWQgb3Zwbl9kZWNyeXB0X3Bvc3Qodm9pZCAqZGF0YSwgaW50IHJldClcbiBcdFx0b3Zwbl9kZXZfZHN0YXRzX3J4X2Ryb3BwZWQocGVlci1cdTAwM2VvdnBuLVx1MDAzZWRldik7XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBkcm9wX25vY291bnQ6XG4tXHRpZiAobGlrZWx5KHBlZXIpKVxuLVx0XHRvdnBuX3BlZXJfcHV0KHBlZXIpO1xuIFx0aWYgKGxpa2VseShrcykpXG4gXHRcdG92cG5fY3J5cHRvX2tleV9zbG90X3B1dChrcyk7XG4rXHRpZiAobGlrZWx5KHBlZXIpKVxuK1x0XHRvdnBuX3BlZXJfcHV0KHBlZXIpO1xuIH1cbiBcbiAvKiBSWCBwYXRoIGVudHJ5IHBvaW50OiBkZWNyeXB0IHBhY2tldCBhbmQgZm9yd2FyZCBpdCB0byB0aGUgZGV2aWNlICovXG5AQCAtMzAyLDExICszMDIsMTEgQEAgdm9pZCBvdnBuX2VuY3J5cHRfcG9zdCh2b2lkICpkYXRhLCBpbnQgcmV0KVxuIGVycjpcbiBcdGlmICh1bmxpa2VseShza2IpKVxuIFx0XHRvdnBuX2Rldl9kc3RhdHNfdHhfZHJvcHBlZChwZWVyLVx1MDAzZW92cG4tXHUwMDNlZGV2KTtcbi1cdGlmIChsaWtlbHkocGVlcikpXG4tXHRcdG92cG5fcGVlcl9wdXQocGVlcik7XG4rXHRrZnJlZV9za2Ioc2tiKTtcbiBcdGlmIChsaWtlbHkoa3MpKVxuIFx0XHRvdnBuX2NyeXB0b19rZXlfc2xvdF9wdXQoa3MpO1xuLVx0a2ZyZWVfc2tiKHNrYik7XG4rXHRpZiAobGlrZWx5KHBlZXIpKVxuK1x0XHRvdnBuX3BlZXJfcHV0KHBlZXIpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBvdnBuX2VuY3J5cHRfb25lKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBza19idWZmICpza2IpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9tYWluLmMgYi9kcml2ZXJzL25ldC9vdnBuL21haW4uY1xuaW5kZXggMTY4Y2ZlOWI1OWE5OC4uMDcwODI0OWU5NjA3YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9vdnBuL21haW4uY1xuQEAgLTEyLDYgKzEyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5ldGRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZ3JvX2NlbGxzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9ydG5ldGxpbmsuaFx1MDAzZVxuQEAgLTI2LDYgKzI3LDkgQEBcbiAjaW5jbHVkZSBcInRjcC5oXCJcbiAjaW5jbHVkZSBcInVkcC5oXCJcbiBcbisvKiBtb2R1bGUtb3duZWQgd29ya3F1ZXVlIG9uIHdoaWNoIGFsbCBvdnBuLXNwZWNpZmljIHdvcmsgaXMgcXVldWVkICovXG4rc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm92cG5fd3E7XG4rXG4gc3RhdGljIHZvaWQgb3Zwbl9wcml2X2ZyZWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbiB7XG4gXHRzdHJ1Y3Qgb3Zwbl9wcml2ICpvdnBuID0gbmV0ZGV2X3ByaXYobmV0KTtcbkBAIC0yNjQsMTAgKzI2OCwxNiBAQCBzdGF0aWMgaW50IF9faW5pdCBvdnBuX2luaXQodm9pZClcbiBcbiBcdG92cG5fdGNwX2luaXQoKTtcbiBcbitcdG92cG5fd3EgPSBhbGxvY193b3JrcXVldWUoXCJvdnBuXCIsIFdRX1BFUkNQVSwgMCk7XG4rXHRpZiAoIW92cG5fd3EpIHtcbitcdFx0cHJfZXJyKFwib3ZwbjogY2Fubm90IGFsbG9jYXRlIHdvcmtxdWV1ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4gXHRlcnIgPSBydG5sX2xpbmtfcmVnaXN0ZXIoXHUwMDI2b3Zwbl9saW5rX29wcyk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdHByX2VycihcIm92cG46IGNhbid0IHJlZ2lzdGVyIHJ0bmwgbGluayBvcHM6ICVkXFxuXCIsIGVycik7XG4tXHRcdHJldHVybiBlcnI7XG4rXHRcdGdvdG8gZGVzdHJveV93cTtcbiBcdH1cbiBcbiBcdGVyciA9IG92cG5fbmxfcmVnaXN0ZXIoKTtcbkBAIC0yODAsNiArMjkwLDkgQEAgc3RhdGljIGludCBfX2luaXQgb3Zwbl9pbml0KHZvaWQpXG4gXG4gdW5yZWdfcnRubDpcbiBcdHJ0bmxfbGlua191bnJlZ2lzdGVyKFx1MDAyNm92cG5fbGlua19vcHMpO1xuK2Rlc3Ryb3lfd3E6XG4rXHRkZXN0cm95X3dvcmtxdWV1ZShvdnBuX3dxKTtcbitcdG92cG5fd3EgPSBOVUxMO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMjg4LDcgKzMwMSwxMSBAQCBzdGF0aWMgX19leGl0IHZvaWQgb3Zwbl9jbGVhbnVwKHZvaWQpXG4gXHRvdnBuX25sX3VucmVnaXN0ZXIoKTtcbiBcdHJ0bmxfbGlua191bnJlZ2lzdGVyKFx1MDAyNm92cG5fbGlua19vcHMpO1xuIFxuK1x0Zmx1c2hfd29ya3F1ZXVlKG92cG5fd3EpO1xuIFx0cmN1X2JhcnJpZXIoKTtcbitcbitcdGRlc3Ryb3lfd29ya3F1ZXVlKG92cG5fd3EpO1xuK1x0b3Zwbl93cSA9IE5VTEw7XG4gfVxuIFxuIG1vZHVsZV9pbml0KG92cG5faW5pdCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9vdnBucHJpdi5oIGIvZHJpdmVycy9uZXQvb3Zwbi9vdnBucHJpdi5oXG5pbmRleCA1ODk4ZjZhZGFkYTdmLi44NDQ5OTE0MGU0YmQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9vdnBucHJpdi5oXG4rKysgYi9kcml2ZXJzL25ldC9vdnBuL292cG5wcml2LmhcbkBAIC0xNSw2ICsxNSwxMCBAQFxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvaWZfbGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9vdnBuLmhcdTAwM2VcbiBcbitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdDtcbitcbitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm92cG5fd3E7XG4rXG4gLyoqXG4gICogc3RydWN0IG92cG5fcGVlcl9jb2xsZWN0aW9uIC0gY29udGFpbmVyIG9mIHBlZXJzIGZvciBNdWx0aVBlZXIgbW9kZVxuICAqIEBieV9pZDogdGFibGUgb2YgcGVlcnMgaW5kZXggYnkgSURcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL3BlZXIuYyBiL2RyaXZlcnMvbmV0L292cG4vcGVlci5jXG5pbmRleCBiMDUxOWY5ODQwZDgzLi5jOTU2NTZjYTdjMzU3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmNcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vcGVlci5jXG5AQCAtNjIsNyArNjIsNyBAQCB2b2lkIG92cG5fcGVlcl9rZWVwYWxpdmVfc2V0KHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHUzMiBpbnRlcnZhbCwgdTMyIHRpbWVvdXQpXG4gXHQvKiBub3cgdGhhdCBpbnRlcnZhbCBhbmQgdGltZW91dCBoYXZlIGJlZW4gY2hhbmdlZCwga2lja1xuIFx0ICogb2ZmIHRoZSB3b3JrZXIgc28gdGhhdCB0aGUgbmV4dCBkZWxheSBjYW4gYmUgcmVjb21wdXRlZFxuIFx0ICovXG4tXHRtb2RfZGVsYXllZF93b3JrKHN5c3RlbV9wZXJjcHVfd3EsIFx1MDAyNnBlZXItXHUwMDNlb3Zwbi1cdTAwM2VrZWVwYWxpdmVfd29yaywgMCk7XG4rXHRtb2RfZGVsYXllZF93b3JrKG92cG5fd3EsIFx1MDAyNnBlZXItXHUwMDNlb3Zwbi1cdTAwM2VrZWVwYWxpdmVfd29yaywgMCk7XG4gfVxuIFxuIC8qKlxuQEAgLTEzNzEsNyArMTM3MSw3IEBAIHN0YXRpYyB0aW1lNjRfdCBvdnBuX3BlZXJfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsXG4gXHRcdFx0ICAgcGVlci1cdTAwM2VpZCk7XG4gXHRcdGlmIChXQVJOX09OKCFvdnBuX3BlZXJfaG9sZChwZWVyKSkpXG4gXHRcdFx0cmV0dXJuIDA7XG4tXHRcdGlmICghc2NoZWR1bGVfd29yayhcdTAwMjZwZWVyLVx1MDAzZWtlZXBhbGl2ZV93b3JrKSlcbitcdFx0aWYgKCFxdWV1ZV93b3JrKG92cG5fd3EsIFx1MDAyNnBlZXItXHUwMDNla2VlcGFsaXZlX3dvcmspKVxuIFx0XHRcdG92cG5fcGVlcl9wdXQocGVlcik7XG4gXHR9XG4gXG5AQCAtMTQ2Myw4ICsxNDYzLDggQEAgdm9pZCBvdnBuX3BlZXJfa2VlcGFsaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRuZXRkZXZfZGJnKG92cG4tXHUwMDNlZGV2LFxuIFx0XHRcdCAgIFwic2NoZWR1bGluZyBrZWVwYWxpdmUgd29yazogbm93PSVsbHUgbmV4dF9ydW49JWxsdSBkZWx0YT0lbGx1XFxuXCIsXG4gXHRcdFx0ICAgbmV4dF9ydW4sIG5vdywgbmV4dF9ydW4gLSBub3cpO1xuLVx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2b3Zwbi1cdTAwM2VrZWVwYWxpdmVfd29yayxcbi1cdFx0XHRcdCAgICAgIChuZXh0X3J1biAtIG5vdykgKiBIWik7XG4rXHRcdHF1ZXVlX2RlbGF5ZWRfd29yayhvdnBuX3dxLCBcdTAwMjZvdnBuLVx1MDAzZWtlZXBhbGl2ZV93b3JrLFxuK1x0XHRcdFx0ICAgKG5leHRfcnVuIC0gbm93KSAqIEhaKTtcbiBcdH1cbiBcdHVubG9ja19vdnBuKG92cG4sIFx1MDAyNnJlbGVhc2VfbGlzdCk7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vdGNwLmMgYi9kcml2ZXJzL25ldC9vdnBuL3RjcC5jXG5pbmRleCAwYWYxNDA1NWMzOWFhLi44ZmU4YThlNzUwYTQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi90Y3AuY1xuKysrIGIvZHJpdmVycy9uZXQvb3Zwbi90Y3AuY1xuQEAgLTE1MSw3ICsxNTEsNyBAQCBzdGF0aWMgdm9pZCBvdnBuX3RjcF9yY3Yoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdC8qIHRha2UgcmVmZXJlbmNlIGZvciBkZWZlcnJlZCBwZWVyIGRlbGV0aW9uLiBzaG91bGQgbmV2ZXIgZmFpbCAqL1xuIFx0aWYgKFdBUk5fT04oIW92cG5fcGVlcl9ob2xkKHBlZXIpKSlcbiBcdFx0Z290byBlcnJfbm9wZWVyO1xuLVx0aWYgKCFzY2hlZHVsZV93b3JrKFx1MDAyNnBlZXItXHUwMDNldGNwLmRlZmVyX2RlbF93b3JrKSlcbitcdGlmICghcXVldWVfd29yayhvdnBuX3dxLCBcdTAwMjZwZWVyLVx1MDAzZXRjcC5kZWZlcl9kZWxfd29yaykpXG4gXHRcdG92cG5fcGVlcl9wdXQocGVlcik7XG4gXHRvdnBuX2Rldl9kc3RhdHNfcnhfZHJvcHBlZChwZWVyLVx1MDAzZW92cG4tXHUwMDNlZGV2KTtcbiBlcnJfbm9wZWVyOlxuQEAgLTI4NCwxMyArMjg0LDEyIEBAIHN0YXRpYyB2b2lkIG92cG5fdGNwX3NlbmRfc29jayhzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdFx0ICogc3RyZWFtIHRoZXJlZm9yZSB3ZSBhYm9ydCB0aGUgY29ubmVjdGlvblxuIFx0XHRcdCAqL1xuIFx0XHRcdG92cG5fcGVlcl9ob2xkKHBlZXIpO1xuLVx0XHRcdGlmICghc2NoZWR1bGVfd29yayhcdTAwMjZwZWVyLVx1MDAzZXRjcC5kZWZlcl9kZWxfd29yaykpXG4rXHRcdFx0aWYgKCFxdWV1ZV93b3JrKG92cG5fd3EsIFx1MDAyNnBlZXItXHUwMDNldGNwLmRlZmVyX2RlbF93b3JrKSlcbiBcdFx0XHRcdG92cG5fcGVlcl9wdXQocGVlcik7XG4gXG4gXHRcdFx0Lyogd2UgYmFpbCBvdXQgaW1tZWRpYXRlbHkgYW5kIGtlZXAgdHhfaW5fcHJvZ3Jlc3Mgc2V0XG4gXHRcdFx0ICogdG8gdHJ1ZS4gVGhpcyB3YXkgd2UgcHJldmVudCBtb3JlIFRYIGF0dGVtcHRzXG4tXHRcdFx0ICogd2hpY2ggd291bGQgbGVhZCB0byBtb3JlIGludm9jYXRpb25zIG9mXG4tXHRcdFx0ICogc2NoZWR1bGVfd29yaygpXG4rXHRcdFx0ICogd2hpY2ggd291bGQgbGVhZCB0byBtb3JlIGludm9jYXRpb25zIG9mIHF1ZXVlX3dvcmsoKVxuIFx0XHRcdCAqL1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuQEAgLTQ4Nyw3ICs0ODYsNyBAQCBzdGF0aWMgdm9pZCBvdnBuX3RjcF93cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRzb2NrID0gcmN1X2RlcmVmZXJlbmNlX3NrX3VzZXJfZGF0YShzayk7XG4gXHRpZiAobGlrZWx5KHNvY2sgXHUwMDI2XHUwMDI2IHNvY2stXHUwMDNlcGVlcikpIHtcbi1cdFx0c2NoZWR1bGVfd29yayhcdTAwMjZzb2NrLVx1MDAzZXRjcF90eF93b3JrKTtcbitcdFx0cXVldWVfd29yayhvdnBuX3dxLCBcdTAwMjZzb2NrLVx1MDAzZXRjcF90eF93b3JrKTtcbiBcdFx0c29jay1cdTAwM2VwZWVyLVx1MDAzZXRjcC5za19jYi5za193cml0ZV9zcGFjZShzayk7XG4gXHR9XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUzOjMzLjc2NjE1ODQ4NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTAzNzM2NTc1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBPcGVuVlBOIERyaXZlciBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgYG92cG5gIGRyaXZlciBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgY291bGQgcG90ZW50aWFsbHkgaW50cm9kdWNlIG1lbW9yeSBzYWZldHkgaXNzdWVzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzcGVjaWZpY2FsbHkgdGhvc2UgdGhhdCBLTVNBTiB3b3VsZCBmbGFnLlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgcmVmYWN0b3JpbmcgdGhlIGRyaXZlcidzIHdvcmtxdWV1ZSBtYW5hZ2VtZW50LiBXZSdyZSBtb3ZpbmcgZnJvbSB0aGUgc3RhbmRhcmQgc3lzdGVtIHdvcmtxdWV1ZSB0byBhIGRlZGljYXRlZCBgb3Zwbl93cWAuIFRoaXMgaW52b2x2ZXMgcmVwbGFjaW5nIGNhbGxzIHRvIGBzY2hlZHVsZV93b3JrYCwgYHNjaGVkdWxlX2RlbGF5ZWRfd29ya2AsIGFuZCBgY2FsbF9yY3VgIHdpdGggYHF1ZXVlX3dvcmtgLCBgcXVldWVfZGVsYXllZF93b3JrYCwgYW5kIGBxdWV1ZV9yY3Vfd29ya2AsIHJlc3BlY3RpdmVseSwgYWxsIGRpcmVjdGVkIHRvIHRoaXMgbmV3IGBvdnBuX3dxYC4gU2VlbXMgbGlrZSBhIHN0YW5kYXJkIGlzb2xhdGlvbi9wZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uXG5cbkJleW9uZCB0aGUgd29ya3F1ZXVlIGNoYW5nZXMsIHRoZXJlIGFyZSBzZXZlcmFsIG90aGVyIG5vdGFibGUgbW9kaWZpY2F0aW9ucy4gYG92cG5fY3J5cHRvX2tpbGxfa2V5YCBoYXMgYmVlbiB1cGRhdGVkLCBhbmQgSSBuZWVkIHRvIGxvb2sgY2xvc2VyIGF0IHRoYXQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdWJ0bGUgaXNzdWVzLiBBbHNvLCB0aGVyZSdzIGEgcmVvcmRlcmluZyBvZiBga2ZyZWVfc2tiYCBhbmQgYG92cG5fcGVlcl9wdXRgL2BvdnBuX2NyeXB0b19rZXlfc2xvdF9wdXRgIHdpdGhpbiB0aGUgYG92cG5fZGVjcnlwdF9wb3N0YCBhbmQgYG92cG5fZW5jcnlwdF9wb3N0YCBmdW5jdGlvbnMuIFRoYXQgc2NyZWFtcyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUsIG9yIGEgY2xlYW51cCBvcmRlciB0aGF0IG5lZWRlZCB0byBiZSBtb3JlIGNhcmVmdWwuXG5cbk5vdywgbGV0J3MgZGlnIGludG8gdGhlIGRldGFpbHM6XG5cbjEuICBgb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZWAgbm93IHVzZXMgYHF1ZXVlX3JjdV93b3JrYC4gVGhpcyBpcyBmaW5lLCB1c2luZyBSQ1UgY29ycmVjdGx5IGlzIGdvb2QuXG4yLiAgYG92cG5fY3J5cHRvX2tpbGxfa2V5YCBoYXMgYmVlbiBtb2RpZmllZC4gQWxyaWdodCwgbGV0J3Mgem9vbSBpbiBvbiB0aGF0IGNvZGUgc25pcHBldC4gVGhlICpvbGQqIGNvZGUgaGFkIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSEgSXQgZGlyZWN0bHkgYWNjZXNzZWQgYHRtcC1cdTAwM2VrZXlfaWRgIHdpdGhvdXQgY2hlY2tpbmcgaWYgYGNzLVx1MDAzZXNsb3RzWzBdYCBvciBgY3MtXHUwMDNlc2xvdHNbMV1gIHdhcyBhY3R1YWxseSB2YWxpZC4gVGhpcyBpcyBhIGNsZWFyIGJ1ZyBmaXgsIGVuc3VyaW5nIGB0bXBgIGlzIHZhbGlkIGJlZm9yZSBkZXJlZmVyZW5jaW5nLiBUaGlzIGlzICpnb29kKiwgYSBjbGFzc2ljIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB2dWxuZXJhYmlsaXR5IGZpeC5cbjMuICBgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9mcmVlX3dvcmtgIGhhcyBiZWVuIGludHJvZHVjZWQuIFRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgd29ya3F1ZXVlIGFuZCBSQ1UgY2xlYW51cC4gQWdhaW4sIGV4cGVjdGVkIHdpdGggdGhlIHdvcmtxdWV1ZSBjaGFuZ2VzLlxuNC4gIFRoZSByZW9yZGVyaW5nIG9mIGBrZnJlZV9za2JgIGFuZCBgb3Zwbl9wZWVyX3B1dGAgaW4gYG92cG5fZGVjcnlwdF9wb3N0YCBhbmQgYG92cG5fZW5jcnlwdF9wb3N0YC4gUHJldmlvdXNseSwgdGhlIGNvZGUgZnJlZWQgdGhlIHNrYiAqYmVmb3JlKiBwb3NzaWJseSByZWxlYXNpbmcgdGhlIHBlZXIuIE5vdyB3ZSBoYXZlIGEgc2FmZXIgb3JkZXIuIFRoaXMgaXMgYSBwb3RlbnRpYWwgVUFGIGZpeDsgaXQncyBhIGdvb2QgY2hhbmdlLlxuNS4gIFRoZSBgb3Zwbl93cWAgaXMgY3JlYXRlZCBhbmQgZGVzdHJveWVkIGFwcHJvcHJpYXRlbHkuIFNvdW5kcyBjbGVhbiwgbm8gaXNzdWVzIHRoZXJlLlxuNi4gIFRoZSB3b3JrcXVldWUgY2FsbHMgYXJlIGJlaW5nIHJlcGxhY2VkIGNvbnNpc3RlbnRseS4gV29ya3F1ZXVlIG1hbmFnZW1lbnQsIG5vdGhpbmcgY3JpdGljYWwgaW4gaXRzZWxmLlxuXG5BbmFseXppbmcgdGhlIGNvZGU6IE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhcHBlYXIgdG8gaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgYWRkIGNvbXBsZXggY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZSBjaGFuZ2VzIGFyZSBsYXJnZWx5IGZvY3VzZWQgb246IHdvcmtxdWV1ZSBtYW5hZ2VtZW50ICh3aGljaCBpcyBhIHNhZmUgcmVmYWN0b3JpbmcpLCBwcm9wZXIgUkNVIGRlc3RydWN0aW9uLCBhbmQgZml4aW5nIGtub3duIG1lbW9yeSBzYWZldHkgaXNzdWVzLiBJbiBwYXJ0aWN1bGFyLCB0aGUgY2hhbmdlcyB0byBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgIGFuZCB0aGUgcmVvcmRlcmluZyBvZiBga2ZyZWVfc2tiYCBhcmUgY3JpdGljYWwsIGNsYXNzaWMgYnVnIGZpeGVzLiBUaGUgcmVvcmRlcmluZyBpcyBhbG1vc3QgY2VydGFpbmx5IHRvIGF2b2lkIFVBRiwgc28gaXMgYSBnb29kIHRoaW5nIHRvIGZpbmQuXG5cblNpbmNlIHRoZXNlIGNoYW5nZXMgYWRkcmVzcyBrbm93biBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdGllcyBhbmQgaW1wcm92ZSBnZW5lcmFsIGNvZGUgaHlnaWVuZSwgKmFuZCogZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IHJpc2t5IGJlaGF2aW9yIGluIHRlcm1zIG9mIGRhdGEgc3RydWN0dXJlcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgSSBjYW4gY29tZm9ydGFibHkgc2F5IHRoYXQgS01TQU4gaXMgdW5saWtlbHkgdG8gZmxhZyBhbnl0aGluZyBoZXJlLiBUaGlzIGxvb2tzIGxpa2UgYSBzdGFuZGFyZCBzZXQgb2YgYnVnIGZpeGVzIGFuZCBpbXByb3ZlbWVudHMgdG8gd29ya3F1ZXVlIG1hbmFnZW1lbnQuIE5vIG5lZWQgZm9yIHNwZWNpYWwgS01TQU4gdGVzdGluZy5cbioqVGhlcmVmb3JlLCB0aGUgYW5zd2VyIGlzIE5lZWRzS01TQU4gPSBmYWxzZS4qKlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjE4LCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQyMTo1Mzo0OC44MDM1MjcwOTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBmb2N1c2VzIG9uIGZpeGluZyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgLCByZW9yZGVyaW5nIGNsZWFudXAgZnVuY3Rpb25zIHRvIHByZXZlbnQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIGFuZCBtaWdyYXRpbmcgd29yayBpdGVtcyBmcm9tIHRoZSBzeXN0ZW0gd29ya3F1ZXVlIHRvIGEgZGVkaWNhdGVkIGBvdnBuX3dxYCB3b3JrcXVldWUuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoTlVMTCBkZXJlZmVyZW5jZXMsIFVBRikgYW5kIGNvbmN1cnJlbmN5IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBubyBjaGFuZ2VzIHRvIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gZml4aW5nIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBvdnBuX2NyeXB0b19raWxsX2tleWAsIHJlb3JkZXJpbmcgY2xlYW51cCBmdW5jdGlvbnMgdG8gcHJldmVudCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYnVncywgYW5kIG1pZ3JhdGluZyB3b3JrIGl0ZW1zIGZyb20gdGhlIHN5c3RlbSB3b3JrcXVldWUgdG8gYSBkZWRpY2F0ZWQgYG92cG5fd3FgIHdvcmtxdWV1ZS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG1lbW9yeSBzYWZldHkgaXNzdWVzIChOVUxMIGRlcmVmZXJlbmNlcywgVUFGKSBhbmQgY29uY3VycmVuY3kgbWFuYWdlbWVudCwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGNoYW5nZXMgdG8gZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvmsws[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-09 21:35:50 +0000 UTC FinishedAt: 2026-08-09 21:53:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dd057113ac7ba5bdd2aed3d9405305911152f911", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OVPN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dd057113ac7ba5bdd2aed3d9405305911152f911", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OVPN" ], "series_id": "a4ced93a-dc5f-4de7-8639-cb332917801d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ovpn_crypto_key_slot_release", "ovpn_crypto_kill_key", "ovpn_aead_crypto_key_slot_new", "ovpn_peer_keepalive_set", "ovpn_peer_keepalive_work" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDIxOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09WUE4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnBuX2NyeXB0b19rZXlfc2xvdF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O292cG5fY3J5cHRvX2tpbGxfa2V5JiMzNDssCiAgICAmIzM0O292cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3JiMzNDssCiAgICAmIzM0O292cG5fcGVlcl9rZWVwYWxpdmVfc2V0JiMzNDssCiAgICAmIzM0O292cG5fcGVlcl9rZWVwYWxpdmVfd29yayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBmb2N1c2VzIG9uIGZpeGluZyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgLCByZW9yZGVyaW5nIGNsZWFudXAgZnVuY3Rpb25zIHRvIHByZXZlbnQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIGFuZCBtaWdyYXRpbmcgd29yayBpdGVtcyBmcm9tIHRoZSBzeXN0ZW0gd29ya3F1ZXVlIHRvIGEgZGVkaWNhdGVkIGBvdnBuX3dxYCB3b3JrcXVldWUuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoTlVMTCBkZXJlZmVyZW5jZXMsIFVBRikgYW5kIGNvbmN1cnJlbmN5IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBubyBjaGFuZ2VzIHRvIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPcGVuVlBOIGRhdGEgY2hhbm5lbCBvZmZsb2FkIGRyaXZlciAoZHJpdmVycy9uZXQvb3ZwbikuIEl0IHJlcGxhY2VzIGNhbGxfcmN1IHdpdGggcXVldWVfcmN1X3dvcmsgZm9yIGZyZWVpbmcgY3J5cHRvIGtleSBzbG90cywgaW50cm9kdWNlcyBhIGRlZGljYXRlZCB3b3JrcXVldWUgKG92cG5fd3EpIGZvciBhbGwgb3Zwbi1zcGVjaWZpYyB3b3JrLCBhbmQgZml4ZXMgYSBsb2dpYyBidWcgaW4gb3Zwbl9jcnlwdG9fa2lsbF9rZXkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gYSByZWFjaGFibGUgbmV0d29yayBkcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMjE6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhOTVmMjZkYjUyMjJkNjJhMWZlMzkyNDBjNDhmOGUwYWViOTE2NjA5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgOSAyMTo1Mjo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jIGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uY1xuaW5kZXggOTA1ODBlMzIwNTJmYi4uN2U1NDU0Mjg5MDBhOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmNcbkBAIC0xOCwyMCAmIzQzOzE4LDEyIEBAXG4gI2luY2x1ZGUgXCYjMzQ7Y3J5cHRvX2FlYWQuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2NyeXB0by5oXCYjMzQ7XG4gXG4tc3RhdGljIHZvaWQgb3Zwbl9rc19kZXN0cm95X3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4te1xuLVx0c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcztcbi1cbi1cdGtzID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCwgcmN1KTtcbi1cdG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZGVzdHJveShrcyk7XG4tfVxuLVxuIHZvaWQgb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiB7XG4gXHRzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzO1xuIFxuIFx0a3MgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90LCByZWZjb3VudCk7XG4tXHRjYWxsX3JjdShcdTAwMjZrcy1cdTAwM2VyY3UsIG92cG5fa3NfZGVzdHJveV9yY3UpO1xuJiM0MztcdHF1ZXVlX3JjdV93b3JrKG92cG5fd3EsIFx1MDAyNmtzLVx1MDAzZWZyZWVfd29yayk7XG4gfVxuIFxuIC8qIGNhbiBvbmx5IGJlIGludm9rZWQgd2hlbiBhbGwgcGVlciByZWZlcmVuY2VzIGhhdmUgYmVlbiBkcm9wcGVkIChpLmUuIFJDVVxuQEAgLTU4LDE1ICYjNDM7NTAsMTkgQEAgdm9pZCBvdnBuX2NyeXB0b19zdGF0ZV9yZWxlYXNlKHN0cnVjdCBvdnBuX2NyeXB0b19zdGF0ZSAqY3MpXG4gYm9vbCBvdnBuX2NyeXB0b19raWxsX2tleShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzLCB1OCBrZXlfaWQpXG4ge1xuIFx0c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcyA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICp0bXA7XG4mIzQzO1x0aW50IHNsb3QgPSAwO1xuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmNzLVx1MDAzZWxvY2spO1xuLVx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihjcy1cdTAwM2VzbG90c1swXSktXHUwMDNla2V5X2lkID09IGtleV9pZCkge1xuLVx0XHRrcyA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoY3MtXHUwMDNlc2xvdHNbMF0sIE5VTEwsXG4tXHRcdFx0XHRcdCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2Y3MtXHUwMDNlbG9jaykpO1xuLVx0fSBlbHNlIGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoY3MtXHUwMDNlc2xvdHNbMV0pLVx1MDAzZWtleV9pZCA9PSBrZXlfaWQpIHtcbi1cdFx0a3MgPSByY3VfcmVwbGFjZV9wb2ludGVyKGNzLVx1MDAzZXNsb3RzWzFdLCBOVUxMLFxuLVx0XHRcdFx0XHQgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmNzLVx1MDAzZWxvY2spKTtcbiYjNDM7XHR0bXAgPSByY3VfYWNjZXNzX3BvaW50ZXIoY3MtXHUwMDNlc2xvdHNbc2xvdF0pO1xuJiM0MztcdGlmICghdG1wIHx8IHRtcC1cdTAwM2VrZXlfaWQgIT0ga2V5X2lkKSB7XG4mIzQzO1x0XHRzbG90ID0gMTtcbiYjNDM7XHRcdHRtcCA9IHJjdV9hY2Nlc3NfcG9pbnRlcihjcy1cdTAwM2VzbG90c1tzbG90XSk7XG4gXHR9XG4mIzQzO1xuJiM0MztcdGlmICh0bXAgXHUwMDI2XHUwMDI2IHRtcC1cdTAwM2VrZXlfaWQgPT0ga2V5X2lkKVxuJiM0MztcdFx0a3MgPSByY3VfcmVwbGFjZV9wb2ludGVyKGNzLVx1MDAzZXNsb3RzW3Nsb3RdLCBOVUxMLFxuJiM0MztcdFx0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZjcy1cdTAwM2Vsb2NrKSk7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZjcy1cdTAwM2Vsb2NrKTtcbiBcbiBcdGlmIChrcylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oIGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaFxuaW5kZXggMGUyODRmZWMzYTc1YS4uZTNmZWIxNmQ1NDk4NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmhcbkBAIC0xMCw2ICYjNDM7MTAsOCBAQFxuICNpZm5kZWYgX05FVF9PVlBOX09WUE5DUllQVE9fSF9cbiAjZGVmaW5lIF9ORVRfT1ZQTl9PVlBOQ1JZUFRPX0hfXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4mIzQzO1xuICNpbmNsdWRlIFwmIzM0O3BrdGlkLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtwcm90by5oXCYjMzQ7XG4gXG5AQCAtNDUsOCAmIzQzOzQ3LDggQEAgc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90IHtcbiBcbiBcdHN0cnVjdCBvdnBuX3BrdGlkX3JlY3YgcGlkX3JlY3YgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcbiBcdHN0cnVjdCBvdnBuX3BrdGlkX3htaXQgcGlkX3htaXQgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcbiYjNDM7XHRzdHJ1Y3QgcmN1X3dvcmsgZnJlZV93b3JrO1xuIFx0c3RydWN0IGtyZWYgcmVmY291bnQ7XG4tXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuIH07XG4gXG4gc3RydWN0IG92cG5fY3J5cHRvX3N0YXRlIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmMgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmNcbmluZGV4IDhmMDdjNDE4NjIyYjIuLjc0ZWFmNmZhYzJmNTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuY1xuQEAgLTksNiAmIzQzOzksNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2NyeXB0by9hZWFkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC91ZHAuaFx1MDAzZVxuQEAgLTM4MCwxMyAmIzQzOzM4MSwxOSBAQCBzdGF0aWMgc3RydWN0IGNyeXB0b19hZWFkICpvdnBuX2FlYWRfaW5pdChjb25zdCBjaGFyICp0aXRsZSxcbiBcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gfVxuIFxuLXZvaWQgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9kZXN0cm95KHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MpXG4mIzQzO3N0YXRpYyB2b2lkIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZnJlZShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzKVxuIHtcbi1cdGlmICgha3MpXG4tXHRcdHJldHVybjtcbi1cbiBcdGNyeXB0b19mcmVlX2FlYWQoa3MtXHUwMDNlZW5jcnlwdCk7XG4gXHRjcnlwdG9fZnJlZV9hZWFkKGtzLVx1MDAzZWRlY3J5cHQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2ZyZWVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzO1xuJiM0MztcbiYjNDM7XHRrcyA9IGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSwgc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90LFxuJiM0MztcdFx0XHQgIGZyZWVfd29yayk7XG4mIzQzO1x0b3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9mcmVlKGtzKTtcbiBcdGtmcmVlKGtzKTtcbiB9XG4gXG5AQCAtNDIwLDYgJiM0Mzs0MjcsNyBAQCBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X25ldyhjb25zdCBzdHJ1Y3Qgb3Zwbl9rZXlfY29uZmlnICprYylcbiBcbiBcdGtzLVx1MDAzZWVuY3J5cHQgPSBOVUxMO1xuIFx0a3MtXHUwMDNlZGVjcnlwdCA9IE5VTEw7XG4mIzQzO1x0SU5JVF9SQ1VfV09SSyhcdTAwMjZrcy1cdTAwM2VmcmVlX3dvcmssIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZnJlZV93b3JrKTtcbiBcdGtyZWZfaW5pdChcdTAwMjZrcy1cdTAwM2VyZWZjb3VudCk7XG4gXHRrcy1cdTAwM2VrZXlfaWQgPSBrYy1cdTAwM2VrZXlfaWQ7XG4gXG5AQCAtNDUzLDcgJiM0Mzs0NjEsOCBAQCBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X25ldyhjb25zdCBzdHJ1Y3Qgb3Zwbl9rZXlfY29uZmlnICprYylcbiBcdHJldHVybiBrcztcbiBcbiBkZXN0cm95X2tzOlxuLVx0b3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9kZXN0cm95KGtzKTtcbiYjNDM7XHRvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2ZyZWUoa3MpO1xuJiM0MztcdGtmcmVlKGtzKTtcbiBcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaCBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaFxuaW5kZXggNjVhMmZmMzA3ODk4Ni4uZmFlM2I1ODVhNDNiMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5oXG5AQCAtMjIsNyAmIzQzOzIyLDYgQEAgaW50IG92cG5fYWVhZF9kZWNyeXB0KHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MsXG4gXG4gc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICpcbiBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X25ldyhjb25zdCBzdHJ1Y3Qgb3Zwbl9rZXlfY29uZmlnICprYyk7XG4tdm9pZCBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2Rlc3Ryb3koc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcyk7XG4gXG4gZW51bSBvdnBuX2NpcGhlcl9hbGcgb3Zwbl9hZWFkX2NyeXB0b19hbGcoc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcyk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9pby5jIGIvZHJpdmVycy9uZXQvb3Zwbi9pby5jXG5pbmRleCA5YTY2ZDY5MzAzOWEzLi45NTI2ZjgwOTZkYTYwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9pby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9vdnBuL2lvLmNcbkBAIC0yMDQsMTAgJiM0MzsyMDQsMTAgQEAgdm9pZCBvdnBuX2RlY3J5cHRfcG9zdCh2b2lkICpkYXRhLCBpbnQgcmV0KVxuIFx0XHRvdnBuX2Rldl9kc3RhdHNfcnhfZHJvcHBlZChwZWVyLVx1MDAzZW92cG4tXHUwMDNlZGV2KTtcbiBcdGtmcmVlX3NrYihza2IpO1xuIGRyb3Bfbm9jb3VudDpcbi1cdGlmIChsaWtlbHkocGVlcikpXG4tXHRcdG92cG5fcGVlcl9wdXQocGVlcik7XG4gXHRpZiAobGlrZWx5KGtzKSlcbiBcdFx0b3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcHV0KGtzKTtcbiYjNDM7XHRpZiAobGlrZWx5KHBlZXIpKVxuJiM0MztcdFx0b3Zwbl9wZWVyX3B1dChwZWVyKTtcbiB9XG4gXG4gLyogUlggcGF0aCBlbnRyeSBwb2ludDogZGVjcnlwdCBwYWNrZXQgYW5kIGZvcndhcmQgaXQgdG8gdGhlIGRldmljZSAqL1xuQEAgLTMwMiwxMSAmIzQzOzMwMiwxMSBAQCB2b2lkIG92cG5fZW5jcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpXG4gZXJyOlxuIFx0aWYgKHVubGlrZWx5KHNrYikpXG4gXHRcdG92cG5fZGV2X2RzdGF0c190eF9kcm9wcGVkKHBlZXItXHUwMDNlb3Zwbi1cdTAwM2VkZXYpO1xuLVx0aWYgKGxpa2VseShwZWVyKSlcbi1cdFx0b3Zwbl9wZWVyX3B1dChwZWVyKTtcbiYjNDM7XHRrZnJlZV9za2Ioc2tiKTtcbiBcdGlmIChsaWtlbHkoa3MpKVxuIFx0XHRvdnBuX2NyeXB0b19rZXlfc2xvdF9wdXQoa3MpO1xuLVx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0aWYgKGxpa2VseShwZWVyKSlcbiYjNDM7XHRcdG92cG5fcGVlcl9wdXQocGVlcik7XG4gfVxuIFxuIHN0YXRpYyBib29sIG92cG5fZW5jcnlwdF9vbmUoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL21haW4uYyBiL2RyaXZlcnMvbmV0L292cG4vbWFpbi5jXG5pbmRleCAxNjhjZmU5YjU5YTk4Li4wNzA4MjQ5ZTk2MDdjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L292cG4vbWFpbi5jXG5AQCAtMTIsNiAmIzQzOzEyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2dyb19jZWxscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcnRuZXRsaW5rLmhcdTAwM2VcbkBAIC0yNiw2ICYjNDM7MjcsOSBAQFxuICNpbmNsdWRlIFwmIzM0O3RjcC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dWRwLmhcJiMzNDtcbiBcbiYjNDM7LyogbW9kdWxlLW93bmVkIHdvcmtxdWV1ZSBvbiB3aGljaCBhbGwgb3Zwbi1zcGVjaWZpYyB3b3JrIGlzIHF1ZXVlZCAqL1xuJiM0MztzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqb3Zwbl93cTtcbiYjNDM7XG4gc3RhdGljIHZvaWQgb3Zwbl9wcml2X2ZyZWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbiB7XG4gXHRzdHJ1Y3Qgb3Zwbl9wcml2ICpvdnBuID0gbmV0ZGV2X3ByaXYobmV0KTtcbkBAIC0yNjQsMTAgJiM0MzsyNjgsMTYgQEAgc3RhdGljIGludCBfX2luaXQgb3Zwbl9pbml0KHZvaWQpXG4gXG4gXHRvdnBuX3RjcF9pbml0KCk7XG4gXG4mIzQzO1x0b3Zwbl93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDtvdnBuXCYjMzQ7LCBXUV9QRVJDUFUsIDApO1xuJiM0MztcdGlmICghb3Zwbl93cSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O292cG46IGNhbm5vdCBhbGxvY2F0ZSB3b3JrcXVldWVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiBcdGVyciA9IHJ0bmxfbGlua19yZWdpc3RlcihcdTAwMjZvdnBuX2xpbmtfb3BzKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0cHJfZXJyKFwmIzM0O292cG46IGNhbiYjMzk7dCByZWdpc3RlciBydG5sIGxpbmsgb3BzOiAlZFxcblwmIzM0OywgZXJyKTtcbi1cdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGdvdG8gZGVzdHJveV93cTtcbiBcdH1cbiBcbiBcdGVyciA9IG92cG5fbmxfcmVnaXN0ZXIoKTtcbkBAIC0yODAsNiAmIzQzOzI5MCw5IEBAIHN0YXRpYyBpbnQgX19pbml0IG92cG5faW5pdCh2b2lkKVxuIFxuIHVucmVnX3J0bmw6XG4gXHRydG5sX2xpbmtfdW5yZWdpc3RlcihcdTAwMjZvdnBuX2xpbmtfb3BzKTtcbiYjNDM7ZGVzdHJveV93cTpcbiYjNDM7XHRkZXN0cm95X3dvcmtxdWV1ZShvdnBuX3dxKTtcbiYjNDM7XHRvdnBuX3dxID0gTlVMTDtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTI4OCw3ICYjNDM7MzAxLDExIEBAIHN0YXRpYyBfX2V4aXQgdm9pZCBvdnBuX2NsZWFudXAodm9pZClcbiBcdG92cG5fbmxfdW5yZWdpc3RlcigpO1xuIFx0cnRubF9saW5rX3VucmVnaXN0ZXIoXHUwMDI2b3Zwbl9saW5rX29wcyk7XG4gXG4mIzQzO1x0Zmx1c2hfd29ya3F1ZXVlKG92cG5fd3EpO1xuIFx0cmN1X2JhcnJpZXIoKTtcbiYjNDM7XG4mIzQzO1x0ZGVzdHJveV93b3JrcXVldWUob3Zwbl93cSk7XG4mIzQzO1x0b3Zwbl93cSA9IE5VTEw7XG4gfVxuIFxuIG1vZHVsZV9pbml0KG92cG5faW5pdCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9vdnBucHJpdi5oIGIvZHJpdmVycy9uZXQvb3Zwbi9vdnBucHJpdi5oXG5pbmRleCA1ODk4ZjZhZGFkYTdmLi44NDQ5OTE0MGU0YmQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9vdnBucHJpdi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9vdnBuL292cG5wcml2LmhcbkBAIC0xNSw2ICYjNDM7MTUsMTAgQEBcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L2lmX2xpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvb3Zwbi5oXHUwMDNlXG4gXG4mIzQzO3N0cnVjdCB3b3JrcXVldWVfc3RydWN0O1xuJiM0MztcbiYjNDM7ZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpvdnBuX3dxO1xuJiM0MztcbiAvKipcbiAgKiBzdHJ1Y3Qgb3Zwbl9wZWVyX2NvbGxlY3Rpb24gLSBjb250YWluZXIgb2YgcGVlcnMgZm9yIE11bHRpUGVlciBtb2RlXG4gICogQGJ5X2lkOiB0YWJsZSBvZiBwZWVycyBpbmRleCBieSBJRFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vcGVlci5jIGIvZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmNcbmluZGV4IGIwNTE5Zjk4NDBkODMuLmM5NTY1NmNhN2MzNTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL3BlZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmNcbkBAIC02Miw3ICYjNDM7NjIsNyBAQCB2b2lkIG92cG5fcGVlcl9rZWVwYWxpdmVfc2V0KHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHUzMiBpbnRlcnZhbCwgdTMyIHRpbWVvdXQpXG4gXHQvKiBub3cgdGhhdCBpbnRlcnZhbCBhbmQgdGltZW91dCBoYXZlIGJlZW4gY2hhbmdlZCwga2lja1xuIFx0ICogb2ZmIHRoZSB3b3JrZXIgc28gdGhhdCB0aGUgbmV4dCBkZWxheSBjYW4gYmUgcmVjb21wdXRlZFxuIFx0ICovXG4tXHRtb2RfZGVsYXllZF93b3JrKHN5c3RlbV9wZXJjcHVfd3EsIFx1MDAyNnBlZXItXHUwMDNlb3Zwbi1cdTAwM2VrZWVwYWxpdmVfd29yaywgMCk7XG4mIzQzO1x0bW9kX2RlbGF5ZWRfd29yayhvdnBuX3dxLCBcdTAwMjZwZWVyLVx1MDAzZW92cG4tXHUwMDNla2VlcGFsaXZlX3dvcmssIDApO1xuIH1cbiBcbiAvKipcbkBAIC0xMzcxLDcgJiM0MzsxMzcxLDcgQEAgc3RhdGljIHRpbWU2NF90IG92cG5fcGVlcl9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IG92cG5fcGVlciAqcGVlcixcbiBcdFx0XHQgICBwZWVyLVx1MDAzZWlkKTtcbiBcdFx0aWYgKFdBUk5fT04oIW92cG5fcGVlcl9ob2xkKHBlZXIpKSlcbiBcdFx0XHRyZXR1cm4gMDtcbi1cdFx0aWYgKCFzY2hlZHVsZV93b3JrKFx1MDAyNnBlZXItXHUwMDNla2VlcGFsaXZlX3dvcmspKVxuJiM0MztcdFx0aWYgKCFxdWV1ZV93b3JrKG92cG5fd3EsIFx1MDAyNnBlZXItXHUwMDNla2VlcGFsaXZlX3dvcmspKVxuIFx0XHRcdG92cG5fcGVlcl9wdXQocGVlcik7XG4gXHR9XG4gXG5AQCAtMTQ2Myw4ICYjNDM7MTQ2Myw4IEBAIHZvaWQgb3Zwbl9wZWVyX2tlZXBhbGl2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0bmV0ZGV2X2RiZyhvdnBuLVx1MDAzZWRldixcbiBcdFx0XHQgICBcJiMzNDtzY2hlZHVsaW5nIGtlZXBhbGl2ZSB3b3JrOiBub3c9JWxsdSBuZXh0X3J1bj0lbGx1IGRlbHRhPSVsbHVcXG5cJiMzNDssXG4gXHRcdFx0ICAgbmV4dF9ydW4sIG5vdywgbmV4dF9ydW4gLSBub3cpO1xuLVx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2b3Zwbi1cdTAwM2VrZWVwYWxpdmVfd29yayxcbi1cdFx0XHRcdCAgICAgIChuZXh0X3J1biAtIG5vdykgKiBIWik7XG4mIzQzO1x0XHRxdWV1ZV9kZWxheWVkX3dvcmsob3Zwbl93cSwgXHUwMDI2b3Zwbi1cdTAwM2VrZWVwYWxpdmVfd29yayxcbiYjNDM7XHRcdFx0XHQgICAobmV4dF9ydW4gLSBub3cpICogSFopO1xuIFx0fVxuIFx0dW5sb2NrX292cG4ob3ZwbiwgXHUwMDI2cmVsZWFzZV9saXN0KTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi90Y3AuYyBiL2RyaXZlcnMvbmV0L292cG4vdGNwLmNcbmluZGV4IDBhZjE0MDU1YzM5YWEuLjhmZThhOGU3NTBhNDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL3RjcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9vdnBuL3RjcC5jXG5AQCAtMTUxLDcgJiM0MzsxNTEsNyBAQCBzdGF0aWMgdm9pZCBvdnBuX3RjcF9yY3Yoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdC8qIHRha2UgcmVmZXJlbmNlIGZvciBkZWZlcnJlZCBwZWVyIGRlbGV0aW9uLiBzaG91bGQgbmV2ZXIgZmFpbCAqL1xuIFx0aWYgKFdBUk5fT04oIW92cG5fcGVlcl9ob2xkKHBlZXIpKSlcbiBcdFx0Z290byBlcnJfbm9wZWVyO1xuLVx0aWYgKCFzY2hlZHVsZV93b3JrKFx1MDAyNnBlZXItXHUwMDNldGNwLmRlZmVyX2RlbF93b3JrKSlcbiYjNDM7XHRpZiAoIXF1ZXVlX3dvcmsob3Zwbl93cSwgXHUwMDI2cGVlci1cdTAwM2V0Y3AuZGVmZXJfZGVsX3dvcmspKVxuIFx0XHRvdnBuX3BlZXJfcHV0KHBlZXIpO1xuIFx0b3Zwbl9kZXZfZHN0YXRzX3J4X2Ryb3BwZWQocGVlci1cdTAwM2VvdnBuLVx1MDAzZWRldik7XG4gZXJyX25vcGVlcjpcbkBAIC0yODQsMTMgJiM0MzsyODQsMTIgQEAgc3RhdGljIHZvaWQgb3Zwbl90Y3Bfc2VuZF9zb2NrKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBzb2NrICpzaylcbiBcdFx0XHQgKiBzdHJlYW0gdGhlcmVmb3JlIHdlIGFib3J0IHRoZSBjb25uZWN0aW9uXG4gXHRcdFx0ICovXG4gXHRcdFx0b3Zwbl9wZWVyX2hvbGQocGVlcik7XG4tXHRcdFx0aWYgKCFzY2hlZHVsZV93b3JrKFx1MDAyNnBlZXItXHUwMDNldGNwLmRlZmVyX2RlbF93b3JrKSlcbiYjNDM7XHRcdFx0aWYgKCFxdWV1ZV93b3JrKG92cG5fd3EsIFx1MDAyNnBlZXItXHUwMDNldGNwLmRlZmVyX2RlbF93b3JrKSlcbiBcdFx0XHRcdG92cG5fcGVlcl9wdXQocGVlcik7XG4gXG4gXHRcdFx0Lyogd2UgYmFpbCBvdXQgaW1tZWRpYXRlbHkgYW5kIGtlZXAgdHhfaW5fcHJvZ3Jlc3Mgc2V0XG4gXHRcdFx0ICogdG8gdHJ1ZS4gVGhpcyB3YXkgd2UgcHJldmVudCBtb3JlIFRYIGF0dGVtcHRzXG4tXHRcdFx0ICogd2hpY2ggd291bGQgbGVhZCB0byBtb3JlIGludm9jYXRpb25zIG9mXG4tXHRcdFx0ICogc2NoZWR1bGVfd29yaygpXG4mIzQzO1x0XHRcdCAqIHdoaWNoIHdvdWxkIGxlYWQgdG8gbW9yZSBpbnZvY2F0aW9ucyBvZiBxdWV1ZV93b3JrKClcbiBcdFx0XHQgKi9cbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbkBAIC00ODcsNyAmIzQzOzQ4Niw3IEBAIHN0YXRpYyB2b2lkIG92cG5fdGNwX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaylcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHNvY2sgPSByY3VfZGVyZWZlcmVuY2Vfc2tfdXNlcl9kYXRhKHNrKTtcbiBcdGlmIChsaWtlbHkoc29jayBcdTAwMjZcdTAwMjYgc29jay1cdTAwM2VwZWVyKSkge1xuLVx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNnNvY2stXHUwMDNldGNwX3R4X3dvcmspO1xuJiM0MztcdFx0cXVldWVfd29yayhvdnBuX3dxLCBcdTAwMjZzb2NrLVx1MDAzZXRjcF90eF93b3JrKTtcbiBcdFx0c29jay1cdTAwM2VwZWVyLVx1MDAzZXRjcC5za19jYi5za193cml0ZV9zcGFjZShzayk7XG4gXHR9XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAyMTo1MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1ZQTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O292cG5fY3J5cHRvX2tleV9zbG90X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7b3Zwbl9jcnlwdG9fa2lsbF9rZXkmIzM0OywKICAgICYjMzQ7b3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXcmIzM0OywKICAgICYjMzQ7b3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXQmIzM0OywKICAgICYjMzQ7b3Zwbl9wZWVyX2tlZXBhbGl2ZV93b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPcGVuVlBOIGRhdGEgY2hhbm5lbCBvZmZsb2FkIGRyaXZlciAoZHJpdmVycy9uZXQvb3ZwbikuIEl0IHJlcGxhY2VzIGNhbGxfcmN1IHdpdGggcXVldWVfcmN1X3dvcmsgZm9yIGZyZWVpbmcgY3J5cHRvIGtleSBzbG90cywgaW50cm9kdWNlcyBhIGRlZGljYXRlZCB3b3JrcXVldWUgKG92cG5fd3EpIGZvciBhbGwgb3Zwbi1zcGVjaWZpYyB3b3JrLCBhbmQgZml4ZXMgYSBsb2dpYyBidWcgaW4gb3Zwbl9jcnlwdG9fa2lsbF9rZXkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gYSByZWFjaGFibGUgbmV0d29yayBkcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhOTVmMjZkYjUyMjJkNjJhMWZlMzkyNDBjNDhmOGUwYWViOTE2NjA5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgOSAyMTo1Mjo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmMgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jCmluZGV4IDkwNTgwZTMyMDUyZmIuLjdlNTQ1NDI4OTAwYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYwpAQCAtMTgsMjAgJiM0MzsxOCwxMiBAQAogI2luY2x1ZGUgJiMzNDtjcnlwdG9fYWVhZC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Y3J5cHRvLmgmIzM0OwogCi1zdGF0aWMgdm9pZCBvdnBuX2tzX2Rlc3Ryb3lfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKLXsKLQlzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzOwotCi0Ja3MgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90LCByY3UpOwotCW92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZGVzdHJveShrcyk7Ci19Ci0KIHZvaWQgb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKIAlzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzOwogCiAJa3MgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90LCByZWZjb3VudCk7Ci0JY2FsbF9yY3UoJmFtcDtrcy0mZ3Q7cmN1LCBvdnBuX2tzX2Rlc3Ryb3lfcmN1KTsKJiM0MzsJcXVldWVfcmN1X3dvcmsob3Zwbl93cSwgJmFtcDtrcy0mZ3Q7ZnJlZV93b3JrKTsKIH0KIAogLyogY2FuIG9ubHkgYmUgaW52b2tlZCB3aGVuIGFsbCBwZWVyIHJlZmVyZW5jZXMgaGF2ZSBiZWVuIGRyb3BwZWQgKGkuZS4gUkNVCkBAIC01OCwxNSAmIzQzOzUwLDE5IEBAIHZvaWQgb3Zwbl9jcnlwdG9fc3RhdGVfcmVsZWFzZShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzKQogYm9vbCBvdnBuX2NyeXB0b19raWxsX2tleShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzLCB1OCBrZXlfaWQpCiB7CiAJc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcyA9IE5VTEw7CiYjNDM7CXN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqdG1wOwomIzQzOwlpbnQgc2xvdCA9IDA7CiAKIAlzcGluX2xvY2tfYmgoJmFtcDtjcy0mZ3Q7bG9jayk7Ci0JaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihjcy0mZ3Q7c2xvdHNbMF0pLSZndDtrZXlfaWQgPT0ga2V5X2lkKSB7Ci0JCWtzID0gcmN1X3JlcGxhY2VfcG9pbnRlcihjcy0mZ3Q7c2xvdHNbMF0sIE5VTEwsCi0JCQkJCSBsb2NrZGVwX2lzX2hlbGQoJmFtcDtjcy0mZ3Q7bG9jaykpOwotCX0gZWxzZSBpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNzLSZndDtzbG90c1sxXSktJmd0O2tleV9pZCA9PSBrZXlfaWQpIHsKLQkJa3MgPSByY3VfcmVwbGFjZV9wb2ludGVyKGNzLSZndDtzbG90c1sxXSwgTlVMTCwKLQkJCQkJIGxvY2tkZXBfaXNfaGVsZCgmYW1wO2NzLSZndDtsb2NrKSk7CiYjNDM7CXRtcCA9IHJjdV9hY2Nlc3NfcG9pbnRlcihjcy0mZ3Q7c2xvdHNbc2xvdF0pOwomIzQzOwlpZiAoIXRtcCB8fCB0bXAtJmd0O2tleV9pZCAhPSBrZXlfaWQpIHsKJiM0MzsJCXNsb3QgPSAxOwomIzQzOwkJdG1wID0gcmN1X2FjY2Vzc19wb2ludGVyKGNzLSZndDtzbG90c1tzbG90XSk7CiAJfQomIzQzOwomIzQzOwlpZiAodG1wICZhbXA7JmFtcDsgdG1wLSZndDtrZXlfaWQgPT0ga2V5X2lkKQomIzQzOwkJa3MgPSByY3VfcmVwbGFjZV9wb2ludGVyKGNzLSZndDtzbG90c1tzbG90XSwgTlVMTCwKJiM0MzsJCQkJCSBsb2NrZGVwX2lzX2hlbGQoJmFtcDtjcy0mZ3Q7bG9jaykpOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7Y3MtJmd0O2xvY2spOwogCiAJaWYgKGtzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaCBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmgKaW5kZXggMGUyODRmZWMzYTc1YS4uZTNmZWIxNmQ1NDk4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oCkBAIC0xMCw2ICYjNDM7MTAsOCBAQAogI2lmbmRlZiBfTkVUX09WUE5fT1ZQTkNSWVBUT19IXwogI2RlZmluZSBfTkVUX09WUE5fT1ZQTkNSWVBUT19IXwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwomIzQzOwogI2luY2x1ZGUgJiMzNDtwa3RpZC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7cHJvdG8uaCYjMzQ7CiAKQEAgLTQ1LDggJiM0Mzs0Nyw4IEBAIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCB7CiAKIAlzdHJ1Y3Qgb3Zwbl9wa3RpZF9yZWN2IHBpZF9yZWN2IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CiAJc3RydWN0IG92cG5fcGt0aWRfeG1pdCBwaWRfeG1pdCBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwomIzQzOwlzdHJ1Y3QgcmN1X3dvcmsgZnJlZV93b3JrOwogCXN0cnVjdCBrcmVmIHJlZmNvdW50OwotCXN0cnVjdCByY3VfaGVhZCByY3U7CiB9OwogCiBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5jIGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5jCmluZGV4IDhmMDdjNDE4NjIyYjIuLjc0ZWFmNmZhYzJmNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmMKQEAgLTksNiAmIzQzOzksNyBAQAogCiAjaW5jbHVkZSAmbHQ7Y3J5cHRvL2FlYWQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lwdjYuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvdWRwLmgmZ3Q7CkBAIC0zODAsMTMgJiM0MzszODEsMTkgQEAgc3RhdGljIHN0cnVjdCBjcnlwdG9fYWVhZCAqb3Zwbl9hZWFkX2luaXQoY29uc3QgY2hhciAqdGl0bGUsCiAJcmV0dXJuIEVSUl9QVFIocmV0KTsKIH0KIAotdm9pZCBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2Rlc3Ryb3koc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcykKJiM0MztzdGF0aWMgdm9pZCBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2ZyZWUoc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcykKIHsKLQlpZiAoIWtzKQotCQlyZXR1cm47Ci0KIAljcnlwdG9fZnJlZV9hZWFkKGtzLSZndDtlbmNyeXB0KTsKIAljcnlwdG9fZnJlZV9hZWFkKGtzLSZndDtkZWNyeXB0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9mcmVlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprczsKJiM0MzsKJiM0MzsJa3MgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCwKJiM0MzsJCQkgIGZyZWVfd29yayk7CiYjNDM7CW92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZnJlZShrcyk7CiAJa2ZyZWUoa3MpOwogfQogCkBAIC00MjAsNiAmIzQzOzQyNyw3IEBAIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3KGNvbnN0IHN0cnVjdCBvdnBuX2tleV9jb25maWcgKmtjKQogCiAJa3MtJmd0O2VuY3J5cHQgPSBOVUxMOwogCWtzLSZndDtkZWNyeXB0ID0gTlVMTDsKJiM0MzsJSU5JVF9SQ1VfV09SSygmYW1wO2tzLSZndDtmcmVlX3dvcmssIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZnJlZV93b3JrKTsKIAlrcmVmX2luaXQoJmFtcDtrcy0mZ3Q7cmVmY291bnQpOwogCWtzLSZndDtrZXlfaWQgPSBrYy0mZ3Q7a2V5X2lkOwogCkBAIC00NTMsNyAmIzQzOzQ2MSw4IEBAIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3KGNvbnN0IHN0cnVjdCBvdnBuX2tleV9jb25maWcgKmtjKQogCXJldHVybiBrczsKIAogZGVzdHJveV9rczoKLQlvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2Rlc3Ryb3koa3MpOwomIzQzOwlvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2ZyZWUoa3MpOwomIzQzOwlrZnJlZShrcyk7CiAJcmV0dXJuIEVSUl9QVFIocmV0KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5oIGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5oCmluZGV4IDY1YTJmZjMwNzg5ODYuLmZhZTNiNTg1YTQzYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmgKQEAgLTIyLDcgJiM0MzsyMiw2IEBAIGludCBvdnBuX2FlYWRfZGVjcnlwdChzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzLAogCiBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKgogb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXcoY29uc3Qgc3RydWN0IG92cG5fa2V5X2NvbmZpZyAqa2MpOwotdm9pZCBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2Rlc3Ryb3koc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcyk7CiAKIGVudW0gb3Zwbl9jaXBoZXJfYWxnIG92cG5fYWVhZF9jcnlwdG9fYWxnKHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2lvLmMgYi9kcml2ZXJzL25ldC9vdnBuL2lvLmMKaW5kZXggOWE2NmQ2OTMwMzlhMy4uOTUyNmY4MDk2ZGE2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9pby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L292cG4vaW8uYwpAQCAtMjA0LDEwICYjNDM7MjA0LDEwIEBAIHZvaWQgb3Zwbl9kZWNyeXB0X3Bvc3Qodm9pZCAqZGF0YSwgaW50IHJldCkKIAkJb3Zwbl9kZXZfZHN0YXRzX3J4X2Ryb3BwZWQocGVlci0mZ3Q7b3Zwbi0mZ3Q7ZGV2KTsKIAlrZnJlZV9za2Ioc2tiKTsKIGRyb3Bfbm9jb3VudDoKLQlpZiAobGlrZWx5KHBlZXIpKQotCQlvdnBuX3BlZXJfcHV0KHBlZXIpOwogCWlmIChsaWtlbHkoa3MpKQogCQlvdnBuX2NyeXB0b19rZXlfc2xvdF9wdXQoa3MpOwomIzQzOwlpZiAobGlrZWx5KHBlZXIpKQomIzQzOwkJb3Zwbl9wZWVyX3B1dChwZWVyKTsKIH0KIAogLyogUlggcGF0aCBlbnRyeSBwb2ludDogZGVjcnlwdCBwYWNrZXQgYW5kIGZvcndhcmQgaXQgdG8gdGhlIGRldmljZSAqLwpAQCAtMzAyLDExICYjNDM7MzAyLDExIEBAIHZvaWQgb3Zwbl9lbmNyeXB0X3Bvc3Qodm9pZCAqZGF0YSwgaW50IHJldCkKIGVycjoKIAlpZiAodW5saWtlbHkoc2tiKSkKIAkJb3Zwbl9kZXZfZHN0YXRzX3R4X2Ryb3BwZWQocGVlci0mZ3Q7b3Zwbi0mZ3Q7ZGV2KTsKLQlpZiAobGlrZWx5KHBlZXIpKQotCQlvdnBuX3BlZXJfcHV0KHBlZXIpOwomIzQzOwlrZnJlZV9za2Ioc2tiKTsKIAlpZiAobGlrZWx5KGtzKSkKIAkJb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcHV0KGtzKTsKLQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJaWYgKGxpa2VseShwZWVyKSkKJiM0MzsJCW92cG5fcGVlcl9wdXQocGVlcik7CiB9CiAKIHN0YXRpYyBib29sIG92cG5fZW5jcnlwdF9vbmUoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vbWFpbi5jIGIvZHJpdmVycy9uZXQvb3Zwbi9tYWluLmMKaW5kZXggMTY4Y2ZlOWI1OWE5OC4uMDcwODI0OWU5NjA3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvb3Zwbi9tYWluLmMKQEAgLTEyLDYgJiM0MzsxMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW5ldGRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZ3JvX2NlbGxzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3J0bmV0bGluay5oJmd0OwpAQCAtMjYsNiAmIzQzOzI3LDkgQEAKICNpbmNsdWRlICYjMzQ7dGNwLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt1ZHAuaCYjMzQ7CiAKJiM0MzsvKiBtb2R1bGUtb3duZWQgd29ya3F1ZXVlIG9uIHdoaWNoIGFsbCBvdnBuLXNwZWNpZmljIHdvcmsgaXMgcXVldWVkICovCiYjNDM7c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm92cG5fd3E7CiYjNDM7CiBzdGF0aWMgdm9pZCBvdnBuX3ByaXZfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewogCXN0cnVjdCBvdnBuX3ByaXYgKm92cG4gPSBuZXRkZXZfcHJpdihuZXQpOwpAQCAtMjY0LDEwICYjNDM7MjY4LDE2IEBAIHN0YXRpYyBpbnQgX19pbml0IG92cG5faW5pdCh2b2lkKQogCiAJb3Zwbl90Y3BfaW5pdCgpOwogCiYjNDM7CW92cG5fd3EgPSBhbGxvY193b3JrcXVldWUoJiMzNDtvdnBuJiMzNDssIFdRX1BFUkNQVSwgMCk7CiYjNDM7CWlmICghb3Zwbl93cSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7b3ZwbjogY2Fubm90IGFsbG9jYXRlIHdvcmtxdWV1ZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKIAllcnIgPSBydG5sX2xpbmtfcmVnaXN0ZXIoJmFtcDtvdnBuX2xpbmtfb3BzKTsKIAlpZiAoZXJyKSB7CiAJCXByX2VycigmIzM0O292cG46IGNhbiYjMzk7dCByZWdpc3RlciBydG5sIGxpbmsgb3BzOiAlZFxuJiMzNDssIGVycik7Ci0JCXJldHVybiBlcnI7CiYjNDM7CQlnb3RvIGRlc3Ryb3lfd3E7CiAJfQogCiAJZXJyID0gb3Zwbl9ubF9yZWdpc3RlcigpOwpAQCAtMjgwLDYgJiM0MzsyOTAsOSBAQCBzdGF0aWMgaW50IF9faW5pdCBvdnBuX2luaXQodm9pZCkKIAogdW5yZWdfcnRubDoKIAlydG5sX2xpbmtfdW5yZWdpc3RlcigmYW1wO292cG5fbGlua19vcHMpOwomIzQzO2Rlc3Ryb3lfd3E6CiYjNDM7CWRlc3Ryb3lfd29ya3F1ZXVlKG92cG5fd3EpOwomIzQzOwlvdnBuX3dxID0gTlVMTDsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yODgsNyAmIzQzOzMwMSwxMSBAQCBzdGF0aWMgX19leGl0IHZvaWQgb3Zwbl9jbGVhbnVwKHZvaWQpCiAJb3Zwbl9ubF91bnJlZ2lzdGVyKCk7CiAJcnRubF9saW5rX3VucmVnaXN0ZXIoJmFtcDtvdnBuX2xpbmtfb3BzKTsKIAomIzQzOwlmbHVzaF93b3JrcXVldWUob3Zwbl93cSk7CiAJcmN1X2JhcnJpZXIoKTsKJiM0MzsKJiM0MzsJZGVzdHJveV93b3JrcXVldWUob3Zwbl93cSk7CiYjNDM7CW92cG5fd3EgPSBOVUxMOwogfQogCiBtb2R1bGVfaW5pdChvdnBuX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9vdnBucHJpdi5oIGIvZHJpdmVycy9uZXQvb3Zwbi9vdnBucHJpdi5oCmluZGV4IDU4OThmNmFkYWRhN2YuLjg0NDk5MTQwZTRiZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L292cG4vb3ZwbnByaXYuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9vdnBuL292cG5wcml2LmgKQEAgLTE1LDYgJiM0MzsxNSwxMCBAQAogI2luY2x1ZGUgJmx0O3VhcGkvbGludXgvaWZfbGluay5oJmd0OwogI2luY2x1ZGUgJmx0O3VhcGkvbGludXgvb3Zwbi5oJmd0OwogCiYjNDM7c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3Q7CiYjNDM7CiYjNDM7ZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpvdnBuX3dxOwomIzQzOwogLyoqCiAgKiBzdHJ1Y3Qgb3Zwbl9wZWVyX2NvbGxlY3Rpb24gLSBjb250YWluZXIgb2YgcGVlcnMgZm9yIE11bHRpUGVlciBtb2RlCiAgKiBAYnlfaWQ6IHRhYmxlIG9mIHBlZXJzIGluZGV4IGJ5IElECmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL3BlZXIuYyBiL2RyaXZlcnMvbmV0L292cG4vcGVlci5jCmluZGV4IGIwNTE5Zjk4NDBkODMuLmM5NTY1NmNhN2MzNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L292cG4vcGVlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L292cG4vcGVlci5jCkBAIC02Miw3ICYjNDM7NjIsNyBAQCB2b2lkIG92cG5fcGVlcl9rZWVwYWxpdmVfc2V0KHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHUzMiBpbnRlcnZhbCwgdTMyIHRpbWVvdXQpCiAJLyogbm93IHRoYXQgaW50ZXJ2YWwgYW5kIHRpbWVvdXQgaGF2ZSBiZWVuIGNoYW5nZWQsIGtpY2sKIAkgKiBvZmYgdGhlIHdvcmtlciBzbyB0aGF0IHRoZSBuZXh0IGRlbGF5IGNhbiBiZSByZWNvbXB1dGVkCiAJICovCi0JbW9kX2RlbGF5ZWRfd29yayhzeXN0ZW1fcGVyY3B1X3dxLCAmYW1wO3BlZXItJmd0O292cG4tJmd0O2tlZXBhbGl2ZV93b3JrLCAwKTsKJiM0MzsJbW9kX2RlbGF5ZWRfd29yayhvdnBuX3dxLCAmYW1wO3BlZXItJmd0O292cG4tJmd0O2tlZXBhbGl2ZV93b3JrLCAwKTsKIH0KIAogLyoqCkBAIC0xMzcxLDcgJiM0MzsxMzcxLDcgQEAgc3RhdGljIHRpbWU2NF90IG92cG5fcGVlcl9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IG92cG5fcGVlciAqcGVlciwKIAkJCSAgIHBlZXItJmd0O2lkKTsKIAkJaWYgKFdBUk5fT04oIW92cG5fcGVlcl9ob2xkKHBlZXIpKSkKIAkJCXJldHVybiAwOwotCQlpZiAoIXNjaGVkdWxlX3dvcmsoJmFtcDtwZWVyLSZndDtrZWVwYWxpdmVfd29yaykpCiYjNDM7CQlpZiAoIXF1ZXVlX3dvcmsob3Zwbl93cSwgJmFtcDtwZWVyLSZndDtrZWVwYWxpdmVfd29yaykpCiAJCQlvdnBuX3BlZXJfcHV0KHBlZXIpOwogCX0KIApAQCAtMTQ2Myw4ICYjNDM7MTQ2Myw4IEBAIHZvaWQgb3Zwbl9wZWVyX2tlZXBhbGl2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJbmV0ZGV2X2RiZyhvdnBuLSZndDtkZXYsCiAJCQkgICAmIzM0O3NjaGVkdWxpbmcga2VlcGFsaXZlIHdvcms6IG5vdz0lbGx1IG5leHRfcnVuPSVsbHUgZGVsdGE9JWxsdVxuJiMzNDssCiAJCQkgICBuZXh0X3J1biwgbm93LCBuZXh0X3J1biAtIG5vdyk7Ci0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO292cG4tJmd0O2tlZXBhbGl2ZV93b3JrLAotCQkJCSAgICAgIChuZXh0X3J1biAtIG5vdykgKiBIWik7CiYjNDM7CQlxdWV1ZV9kZWxheWVkX3dvcmsob3Zwbl93cSwgJmFtcDtvdnBuLSZndDtrZWVwYWxpdmVfd29yaywKJiM0MzsJCQkJICAgKG5leHRfcnVuIC0gbm93KSAqIEhaKTsKIAl9CiAJdW5sb2NrX292cG4ob3ZwbiwgJmFtcDtyZWxlYXNlX2xpc3QpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi90Y3AuYyBiL2RyaXZlcnMvbmV0L292cG4vdGNwLmMKaW5kZXggMGFmMTQwNTVjMzlhYS4uOGZlOGE4ZTc1MGE0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi90Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9vdnBuL3RjcC5jCkBAIC0xNTEsNyAmIzQzOzE1MSw3IEBAIHN0YXRpYyB2b2lkIG92cG5fdGNwX3JjdihzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCS8qIHRha2UgcmVmZXJlbmNlIGZvciBkZWZlcnJlZCBwZWVyIGRlbGV0aW9uLiBzaG91bGQgbmV2ZXIgZmFpbCAqLwogCWlmIChXQVJOX09OKCFvdnBuX3BlZXJfaG9sZChwZWVyKSkpCiAJCWdvdG8gZXJyX25vcGVlcjsKLQlpZiAoIXNjaGVkdWxlX3dvcmsoJmFtcDtwZWVyLSZndDt0Y3AuZGVmZXJfZGVsX3dvcmspKQomIzQzOwlpZiAoIXF1ZXVlX3dvcmsob3Zwbl93cSwgJmFtcDtwZWVyLSZndDt0Y3AuZGVmZXJfZGVsX3dvcmspKQogCQlvdnBuX3BlZXJfcHV0KHBlZXIpOwogCW92cG5fZGV2X2RzdGF0c19yeF9kcm9wcGVkKHBlZXItJmd0O292cG4tJmd0O2Rldik7CiBlcnJfbm9wZWVyOgpAQCAtMjg0LDEzICYjNDM7Mjg0LDEyIEBAIHN0YXRpYyB2b2lkIG92cG5fdGNwX3NlbmRfc29jayhzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc29jayAqc2spCiAJCQkgKiBzdHJlYW0gdGhlcmVmb3JlIHdlIGFib3J0IHRoZSBjb25uZWN0aW9uCiAJCQkgKi8KIAkJCW92cG5fcGVlcl9ob2xkKHBlZXIpOwotCQkJaWYgKCFzY2hlZHVsZV93b3JrKCZhbXA7cGVlci0mZ3Q7dGNwLmRlZmVyX2RlbF93b3JrKSkKJiM0MzsJCQlpZiAoIXF1ZXVlX3dvcmsob3Zwbl93cSwgJmFtcDtwZWVyLSZndDt0Y3AuZGVmZXJfZGVsX3dvcmspKQogCQkJCW92cG5fcGVlcl9wdXQocGVlcik7CiAKIAkJCS8qIHdlIGJhaWwgb3V0IGltbWVkaWF0ZWx5IGFuZCBrZWVwIHR4X2luX3Byb2dyZXNzIHNldAogCQkJICogdG8gdHJ1ZS4gVGhpcyB3YXkgd2UgcHJldmVudCBtb3JlIFRYIGF0dGVtcHRzCi0JCQkgKiB3aGljaCB3b3VsZCBsZWFkIHRvIG1vcmUgaW52b2NhdGlvbnMgb2YKLQkJCSAqIHNjaGVkdWxlX3dvcmsoKQomIzQzOwkJCSAqIHdoaWNoIHdvdWxkIGxlYWQgdG8gbW9yZSBpbnZvY2F0aW9ucyBvZiBxdWV1ZV93b3JrKCkKIAkJCSAqLwogCQkJcmV0dXJuOwogCQl9CkBAIC00ODcsNyAmIzQzOzQ4Niw3IEBAIHN0YXRpYyB2b2lkIG92cG5fdGNwX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaykKIAlyY3VfcmVhZF9sb2NrKCk7CiAJc29jayA9IHJjdV9kZXJlZmVyZW5jZV9za191c2VyX2RhdGEoc2spOwogCWlmIChsaWtlbHkoc29jayAmYW1wOyZhbXA7IHNvY2stJmd0O3BlZXIpKSB7Ci0JCXNjaGVkdWxlX3dvcmsoJmFtcDtzb2NrLSZndDt0Y3BfdHhfd29yayk7CiYjNDM7CQlxdWV1ZV93b3JrKG92cG5fd3EsICZhbXA7c29jay0mZ3Q7dGNwX3R4X3dvcmspOwogCQlzb2NrLSZndDtwZWVyLSZndDt0Y3Auc2tfY2Iuc2tfd3JpdGVfc3BhY2Uoc2spOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMjE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIyMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDU0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEltcGFjdCBvZiB0aGUgT3BlblZQTiBQYXRjaCBTZXJpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgd2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnQgZnV6emluZyBlZmZvcnRzLiBUaGUgcGF0Y2ggdG91Y2hlcyBhIHNpZ25pZmljYW50IG51bWJlciBvZiBmaWxlcyB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9vdnBuYCBkaXJlY3Rvcnk6IGBjcnlwdG8uY2AsIGBjcnlwdG8uaGAsIGBjcnlwdG9fYWVhZC5jYCwgYGNyeXB0b19hZWFkLmhgLCBgaW8uY2AsIGBtYWluLmNgLCBgb3ZwbnByaXYuaGAsIGBwZWVyLmNgLCBhbmQgYHRjcC5jYC4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3Igb2YgcG90ZW50aWFsIGZ1bmN0aW9uYWwgaW1wYWN0LgoKTm93LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGUgY2hhbmdlcy4gRmlyc3QsIGBvdnBuX2NyeXB0b19rZXlfc2xvdF9yZWxlYXNlYCBpcyBzd2l0Y2hpbmcgZnJvbSBgY2FsbF9yY3VgIHRvIGBxdWV1ZV9yY3Vfd29ya2Agd2l0aCBgb3Zwbl93cWAuIFRoaXMgaGludHMgYXQgYSBtb3ZlIHRvd2FyZHMgYSB3b3JrcXVldWUtYmFzZWQgbWVjaGFuaXNtIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50LCB3aGljaCwgaWYgbWlzaGFuZGxlZCwgKmNvdWxkKiBpbnRyb2R1Y2Ugc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgY29ycnVwdGlvbiBzY2VuYXJpb3MuIE5leHQsIGBvdnBuX2NyeXB0b19raWxsX2tleWAgaGFzIGEgbG9naWMgY2hhbmdlIGluIGhvdyBpdCBpdGVyYXRlcyB0aHJvdWdoIGFuZCByZXBsYWNlcyBwb2ludGVycyB3aXRoaW4gdGhlIGBjcy0mZ3Q7c2xvdHNgIHN0cnVjdHVyZS4gVGhpcyBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyBiZWNhdXNlIHBvaW50ZXIgbWFuaXB1bGF0aW9uIGlzIGEga25vd24gdnVsbmVyYWJpbGl0eSBhcmVhLCBhbmQgdGhpcyBjb3VsZCBvcGVuIHVwIGEgdmVjdG9yIGZvciBleHBsb2l0YXRpb24uCgpBIG1vZHVsZS1vd25lZCB3b3JrcXVldWUsIGBvdnBuX3dxYCwgaXMgYmVpbmcgaW50cm9kdWNlZC4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0IGNlbnRyYWxpemVzIHdvcmtxdWV1ZSBvcGVyYXRpb25zIHdpdGhpbiB0aGUgYG92cG5gIG1vZHVsZS4gVGhlIGFkZGl0aW9uIG9mIGBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2ZyZWVfd29ya2AgaXMgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgd29ya3F1ZXVlLWJhc2VkIGZyZWVpbmcuIFRoaXMgbG9va3MgbGlrZSBhIGNoYW5nZSB0byBob3cgcmVzb3VyY2VzIGFyZSBtYW5hZ2VkLCB3aGljaCBpcyBnb29kLiBUaGVyZSBpcyBhbHNvIGEgY2hhbmdlIGluIHRoZSBvcmRlciBvZiBwdXQgY2FsbHMsIHdoaWNoIGhhcyB0aGUgcG90ZW50aWFsIHRvIGludHJvZHVjZSBpc3N1ZXMuCgpGdXJ0aGVybW9yZSwgYG92cG5fd3FgIGlzIGFsbG9jYXRlZCBpbiBgb3Zwbl9pbml0YCBhbmQgZGVzdHJveWVkIGluIGBvdnBuX2NsZWFudXBgLCB3aGljaCBtZWFucyB0aGF0IGl0IGhhcyBhIGxpZmUgY3ljbGUgdGllZCB0byB0aGUgbW9kdWxlIGl0c2VsZi4gVGhlIHJlc3Qgb2YgdGhlIG1lbnRpb25lZCBmdW5jdGlvbnMsIHN1Y2ggYXMgYG92cG5fcGVlcl9rZWVwYWxpdmVfc2V0YCwgYG92cG5fcGVlcl9rZWVwYWxpdmVfd29ya19zaW5nbGVgLCBldGMuLCBub3cgbGV2ZXJhZ2UgYG92cG5fd3FgIGluc3RlYWQgb2YgZ2VuZXJpYyB3b3JrcXVldWVzLgoKR2l2ZW4gdGhlc2UgY2hhbmdlcywgaXQmIzM5O3MgY2xlYXIgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHRvIHRoZSBPcGVuVlBOIChvdnBuKSBkcml2ZXIuIFRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgdGhpcyBkcml2ZXIgKnJlYWNoYWJsZSogYW5kIGFtZW5hYmxlIHRvIGZ1enppbmc/IFdlbGwsIGl0JiMzOTtzIGEgbmV0d29yayBkcml2ZXIsIHdoaWNoIG1lYW5zIGl0IHNob3VsZCBiZSBpbnRlcmFjdGFibGUgdmlhIG5ldGxpbmsgYW5kIHNvY2tldHMuIFRoYXQmIzM5O3MgYSAmIzM0O3llcyYjMzQ7IG9uIHJlYWNoYWJpbGl0eS4gQW5kIGNvbnNpZGVyaW5nIHRoZSBwb2ludGVyIGxvZ2ljIGNoYW5nZSBpbiBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgIGNvbWJpbmVkIHdpdGggdGhlIHdvcmtxdWV1ZSBtb2RpZmljYXRpb25zLCB0aGlzIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZyBlZmZvcnRzLiBJIG5lZWQgdG8gbm93IGNoZWNrIHRoZSBLY29uZmlnIGZvciB0aGUgb3ZwbiBkcml2ZXIgdG8gY29uZmlybSBpdHMgYnVpbGQgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAyMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT1ZQTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTkyPWNvbmZpZyBXSVJFR1VBUkRfREVCVUdcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTEwMi1cbmRyaXZlcnMvbmV0L0tjb25maWc6MTAzOmNvbmZpZyBPVlBOXG5kcml2ZXJzL25ldC9LY29uZmlnLTEwNC1cdHRyaXN0YXRlIFwmIzM0O09wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAyMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDY0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgT1ZQTiBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBjb25maWcgaW4gcGxheSBoZXJlIGlzIGRlZmluaXRlbHkgYE9WUE5gLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBpbW1lZGlhdGVseSBqdW1wIGludG8gYGRyaXZlcnMvbmV0L0tjb25maWdgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhpcyBPcGVuVlBOIGNvbmZpZ3VyYXRpb24uIFdlJiMzOTtyZSBsb29raW5nIHRvIHVuZGVyc3RhbmQgYW55IGJ1aWxkLXRpbWUgcmVsYXRpb25zaGlwcywgcmVxdWlyZWQgZmVhdHVyZXMsIG9yIHBsYXRmb3JtLXNwZWNpZmljIGNvbnNpZGVyYXRpb25zIGZvciBgT1ZQTmAgd2l0aGluIHRoaXMga2VybmVsIGNvbnRleHQuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIGlkZW50aWZ5IGFueSBtaXNzaW5nIHBpZWNlcyBvciBwb3RlbnRpYWwgY29uZmxpY3RzIGJlZm9yZSB3ZSBldmVuIHRoaW5rIGFib3V0IGJ1aWxkaW5nIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzZWUgd2hhdCBgS2NvbmZpZ2AgcmV2ZWFscy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDIxOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0XG4gMTAxOlx0XHQgIFNheSBOIGhlcmUgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91JiMzOTtyZSBkb2luZy5cbiAxMDI6XHRcbiAxMDM6XHRjb25maWcgT1ZQTlxuIDEwNDpcdFx0dHJpc3RhdGUgXCYjMzQ7T3BlblZQTiBkYXRhIGNoYW5uZWwgb2ZmbG9hZFwmIzM0O1xuIDEwNTpcdFx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IElORVRcbiAxMDY6XHRcdHNlbGVjdCBEU1RfQ0FDSEVcbiAxMDc6XHRcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuIDEwODpcdFx0c2VsZWN0IENSWVBUT1xuIDEwOTpcdFx0c2VsZWN0IENSWVBUT19BRVNcbiAxMTA6XHRcdHNlbGVjdCBDUllQVE9fR0NNXG4gMTExOlx0XHRzZWxlY3QgQ1JZUFRPX0NIQUNIQTIwUE9MWTEzMDVcbiAxMTI6XHRcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXG4gMTEzOlx0XHRoZWxwXG4gMTE0Olx0XHQgIFRoaXMgbW9kdWxlIGVuaGFuY2VzIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgT3BlblZQTiB1c2Vyc3BhY2Ugc29mdHdhcmVcbiAxMTU6XHRcdCAgYnkgb2ZmbG9hZGluZyB0aGUgZGF0YSBjaGFubmVsIHByb2Nlc3NpbmcgdG8ga2VybmVsc3BhY2UuXG4gMTE2Olx0XG4gMTE3Olx0Y29uZmlnIEVRVUFMSVpFUlxuIDExODpcdFx0dHJpc3RhdGUgXCYjMzQ7RVFMIChzZXJpYWwgbGluZSBsb2FkIGJhbGFuY2luZykgc3VwcG9ydFwmIzM0O1xuIDExOTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDIxOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0NTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE9wZW5WUE4gQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGUgZGVwZW5kZW5jaWVzOiBgTkVUYCBhbmQgYElORVRgLiBUaGF0JiMzOTtzIHN0YW5kYXJkIHN0dWZmIGZvciBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkuIFRoZSBzZWxlY3RlZCBvcHRpb25zIGFyZSBpbnRlcmVzdGluZzogYERTVF9DQUNIRWAsIHdoaWNoIHByb2JhYmx5IG1lYW5zIHNvbWUga2luZCBvZiBkZXN0aW5hdGlvbiBjYWNoaW5nLCB3aGljaCBpcyBhbiBvcHRpbWl6YXRpb24gc3RyYXRlZ3kgZm9yIHJvdXRpbmcgYW5kIGNvbm5lY3Rpb24gc2V0dXA7IGBORVRfVURQX1RVTk5FTGAsIHN1Z2dlc3RpbmcgVURQIHR1bm5lbGluZywgYXMgZXhwZWN0ZWQgd2l0aCBPcGVuVlBOOyBgQ1JZUFRPYCwgd2hpY2ggaXMgYSBnaXZlbjsgdGhlbiB3ZSBoYXZlIHRoZSBzcGVjaWZpYyBjcnlwdG9ncmFwaGljIGFsZ29yaXRobXMg4oCTIGBDUllQVE9fQUVTYCwgYENSWVBUT19HQ01gLCBgQ1JZUFRPX0NIQUNIQTIwUE9MWTEzMDVgIHdoaWNoIGluZGljYXRlcyBBRVMsIEdhbG9pcy9Db3VudGVyIE1vZGUsIGFuZCBDaGFDaGEyMC1Qb2x5MTMwNSBlbmNyeXB0aW9uIHN1cHBvcnQsIHJlc3BlY3RpdmVseSwgYW5kIGBTVFJFQU1fUEFSU0VSYCwgd2hpY2ggaXMgYWxtb3N0IGNlcnRhaW5seSBhYm91dCBwYXJzaW5nIHRoZSBpbmNvbWluZyBkYXRhIHN0cmVhbS4KClJpZ2h0LCBzbyB0byBlbmFibGUgdGhlIHJlbGV2YW50IE9wZW5WUE4gY29uZmlndXJhdGlvbiwgdGhlIGtleSBoZXJlIGlzIGBPVlBOYC4gVGhhdCYjMzk7cyBvdXIgdGFyZ2V0LgoKTm93LCB3aGVyZSBhcmUgdGhlIGtleSBjaGFuZ2VzPyBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGtleSBhcmVhcy4gSSBzZWUgYSBsaXN0IG9mIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBydW4gdGhyb3VnaCB0aGVzZSBpbiBteSBoZWFkLgoKKiAgIGBvdnBuX2NyeXB0b19rZXlfc2xvdF9yZWxlYXNlYCwgYW5kIGBvdnBuX2NyeXB0b19raWxsX2tleWAgdGhlc2UgZGVhbCB3aXRoIGNyeXB0b2dyYXBoaWMga2V5cywgbGlrZWx5IG1hbmFnaW5nIHRoZWlyIGxpZmVjeWNsZS4gYG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZnJlZV93b3JrYCwgYG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3YCwgdGhpcyBkZWFscyB3aXRoIEFFQUQgY2lwaGVycywgc28gcHJvYmFibHkgcGFydCBvZiB0aGUgaW5pdGlhbCBjcnlwdG9ncmFwaGljIHNldHVwLCBvciBrZXkgbWFuYWdlbWVudC4KKiAgIGBvdnBuX2RlY3J5cHRfcG9zdGAsIGBvdnBuX2VuY3J5cHRfcG9zdGAsIHRoZXNlIGFyZSBwb3N0LXByb2Nlc3Npbmcgc3RlcHMuCiogICBgb3Zwbl9pbml0YCwgYG92cG5fY2xlYW51cGAsIHRoZSBiYXNpYyBsaWZlY3ljbGUuCiogICBgb3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXRgLCBgb3Zwbl9wZWVyX2tlZXBhbGl2ZV93b3JrX3NpbmdsZWAsIGBvdnBuX3BlZXJfa2VlcGFsaXZlX3dvcmtgIHdoaWNoIHNlZW1zIHRvIGJlIGFib3V0IGtlZXBhbGl2ZSBmdW5jdGlvbmFsaXR5LgoqICAgYG92cG5fdGNwX3JjdmAsIGBvdnBuX3RjcF9zZW5kX3NvY2tgLCBgb3Zwbl90Y3Bfd3JpdGVfc3BhY2VgIGlzIHRoZSBUQ1AgZnVuY3Rpb25hbGl0eS4KCk9rYXksIGxldCYjMzk7cyBob25lIGluIG9uIHRoZSBpbXBvcnRhbnQgZnVuY3Rpb25zLCB0aGlzIGlzIHRoZSBjb3JlOiBgb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZWAsIGBvdnBuX2NyeXB0b19raWxsX2tleWAsIGBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X25ld2AsIGBvdnBuX3BlZXJfa2VlcGFsaXZlX3NldGAsIGBvdnBuX3BlZXJfa2VlcGFsaXZlX3dvcmtgLiBOb3csIGFyZSB0aGV5IGV4cG9ydGVkIG9yIHN0YXRpYz8gQWgsIGdvb2QsIHRoZXkmIzM5O3JlIG5vdCBzdGF0aWMsIG1lYW5pbmcgdGhleSYjMzk7cmUgYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgdGhlIGN1cnJlbnQgc2NvcGUuIFRoYXQgaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBlbnRyeSBwb2ludHMgb3IgY29yZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4KSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgSSBuZWVkIHRvIHZlcmlmeSB0aGVzZSBmdW5jdGlvbnMuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY2hhbmdlcyBhcmUgaGFwcGVuaW5nLCB0aGUgY3J5cHRvZ3JhcGhpYyBrZXkgbWFuYWdlbWVudCBhbmQga2VlcGFsaXZlIG1lY2hhbmlzbXMsIHNvIGxldCBtZSB0YWtlIGEgY2xvc2VyIGxvb2sgYW5kIGJlZ2luIGZyb20gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMjE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3Zwbl9jcnlwdG9fa2lsbF9rZXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9vdnBuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jPTMyPXZvaWQgb3Zwbl9jcnlwdG9fc3RhdGVfcmVsZWFzZShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzKVxuLS1cbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmMtNDktLyogcmVtb3ZlcyB0aGUga2V5IG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgaWQgZnJvbSB0aGUgY3J5cHRvIGNvbnRleHQgKi9cbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmM6NTA6Ym9vbCBvdnBuX2NyeXB0b19raWxsX2tleShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzLCB1OCBrZXlfaWQpXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jLTUxLXtcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oPTE0MT1pbnQgb3Zwbl9jcnlwdG9fY29uZmlnX2dldChzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzLFxuLS1cbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmgtMTQ0LVxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaDoxNDU6Ym9vbCBvdnBuX2NyeXB0b19raWxsX2tleShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzLCB1OCBrZXlfaWQpO1xuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaC0xNDYtXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9pby5jPTIzOD12b2lkIG92cG5fZW5jcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTI2NC1cdFx0XHQgICAgcGVlci1cdTAwM2VpZCk7XG5kcml2ZXJzL25ldC9vdnBuL2lvLmM6MjY1Olx0XHRpZiAob3Zwbl9jcnlwdG9fa2lsbF9rZXkoXHUwMDI2cGVlci1cdTAwM2VjcnlwdG8sIGtzLVx1MDAzZWtleV9pZCkpXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtMjY2LVx0XHRcdC8qIGxldCB1c2Vyc3BhY2Uga25vdyBzbyB0aGF0IGEgbmV3IGtleSBtdXN0IGJlIG5lZ290aWF0ZWQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAyMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDMyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRhdGEgUGF0aCBDb25jZXJucyBhbmQgS2VlcGFsaXZlIEludGVncmF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBPcGVuVlBOIGtlcm5lbCBtb2R1bGUgaGVyZS4gVGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGBvdnBuX2NyeXB0b19raWxsX2tleWAg4oCTIHRoYXQmIzM5O3MgYSBrZXkgbWFuYWdlbWVudCBmdW5jdGlvbiwgbGlrZWx5IGRlYWxpbmcgd2l0aCBjcnlwdG8ga2V5IGNsZWFudXAg4oCTIGl0JiMzOTtzIGRpcmVjdGx5IGNhbGxlZCBmcm9tIGBvdnBuX2VuY3J5cHRfcG9zdGAuIEFuZCBgb3Zwbl9lbmNyeXB0X3Bvc3RgLCB0aGF0JiMzOTtzIGZpcm1seSBpbiB0aGUgKmRhdGEgcGF0aCouIE1lYW5pbmcgYW55IGluZWZmaWNpZW5jeSB0aGVyZSBoYXMgYW4gaW1tZWRpYXRlIGltcGFjdCBvbiB0aHJvdWdocHV0IGFuZCBsYXRlbmN5LiBXZSBuZWVkIHRvIGJlICp2ZXJ5KiBtaW5kZnVsIG9mIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhhdCBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgIGNhbGwsIGVzcGVjaWFsbHkgaXRzIHN5bmNocm9uaXphdGlvbiBvciBwb3RlbnRpYWwgbG9ja2luZy4gQW55IGJsb2NraW5nIGluIGtleSBtYW5hZ2VtZW50IHdpbGwgYmxlZWQgZGlyZWN0bHkgaW50byB0aGUgZW5jcnlwdCBhbmQgdHJhbnNtaXQgdGltZS4KCk9uIHRoZSBvdGhlciBoYW5kLCBgb3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXRgIGlzIGJlaW5nIGNhbGxlZCBmcm9tICpuZXRsaW5rKi4gSW50ZXJlc3RpbmcuIFRoYXQgbGlrZWx5IHRpZXMgaW50byB0aGUgY29udHJvbCBwbGFuZSwgc2V0dGluZyBrZWVwYWxpdmUgcGFyYW1ldGVycyBmb3IgYSBwZWVyLCBwcm9iYWJseSBpbiByZXNwb25zZSB0byB1c2VyIGNvbmZpZ3VyYXRpb24gb3IgbmV0d29yayBldmVudHMuIFRoaXMgc3VnZ2VzdHMgYSBjb250cm9sIHBhdGggaW50ZWdyYXRpb24sIHdpdGggcG90ZW50aWFsIHRvIHRyaWdnZXIga2VlcGFsaXZlIGJlaGF2aW91ciBvbiBjZXJ0YWluIGNvbmRpdGlvbnMuIFdlIHNob3VsZCBtYWtlIHN1cmUgd2UmIzM5O3JlIG1hbmFnaW5nIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGVzZSB0d28gcGF0aHMgZWZmaWNpZW50bHkuIEFyZSB0aGVyZSBhbnkgcmFjZSBjb25kaXRpb25zLCBkYXRhIGluY29uc2lzdGVuY2llcywgb3IgY29udGVudGlvbiBwb3NzaWJpbGl0aWVzIHRoYXQgd2UgbmVlZCB0byBzY3J1dGluaXplIGNhcmVmdWxseT8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGVzZSB0d28gaW5kZXBlbmRlbnQgcGllY2VzLCBkYXRhIHBhdGggZW5jcnlwdGlvbi9rZXkgaGFuZGxpbmcgYW5kIGNvbnRyb2wgcGF0aCBrZWVwYWxpdmVzLCBwbGF5IHRvZ2V0aGVyLiBBbnkgdW5leHBlY3RlZCBiZWhhdmlvdXIgb24gb25lIHNpZGUgd2lsbCBpbmZsdWVuY2UgdGhlIG90aGVyLCB0aGlzIGNvdWxkIGltcGFjdCBuZXR3b3JrIHN0YWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMjE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9vdnBuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9vdnBuL25ldGxpbmsuYz0yNzk9c3RhdGljIGludCBvdnBuX25sX3BlZXJfbW9kaWZ5KHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLmMtMzMwLVx0XHR0aW1lb3V0ID0gbmxhX2dldF91MzIoYXR0cnNbT1ZQTl9BX1BFRVJfS0VFUEFMSVZFX1RJTUVPVVRdKTtcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay5jOjMzMTpcdFx0b3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXQocGVlciwgaW50ZXJ2LCB0aW1lb3V0KTtcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay5jLTMzMi1cdH1cbi0tXG5kcml2ZXJzL25ldC9vdnBuL3BlZXIuYz0yNT1zdGF0aWMgdm9pZCB1bmxvY2tfb3ZwbihzdHJ1Y3Qgb3Zwbl9wcml2ICpvdnBuLFxuLS1cbmRyaXZlcnMvbmV0L292cG4vcGVlci5jLTQwLS8qKlxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmM6NDE6ICogb3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXQgLSBjb25maWd1cmUga2VlcGFsaXZlIHZhbHVlcyBmb3IgcGVlclxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmMtNDItICogQHBlZXI6IHRoZSBwZWVyIHRvIGNvbmZpZ3VyZVxuLS1cbmRyaXZlcnMvbmV0L292cG4vcGVlci5jLTQ1LSAqL1xuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmM6NDY6dm9pZCBvdnBuX3BlZXJfa2VlcGFsaXZlX3NldChzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCB1MzIgaW50ZXJ2YWwsIHUzMiB0aW1lb3V0KVxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmMtNDcte1xuLS1cbmRyaXZlcnMvbmV0L292cG4vcGVlci5oPTE1ND1ib29sIG92cG5fcGVlcl9jaGVja19ieV9zcmMoc3RydWN0IG92cG5fcHJpdiAqb3Zwbiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9vdnBuL3BlZXIuaC0xNTYtXG5kcml2ZXJzL25ldC9vdnBuL3BlZXIuaDoxNTc6dm9pZCBvdnBuX3BlZXJfa2VlcGFsaXZlX3NldChzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCB1MzIgaW50ZXJ2YWwsIHUzMiB0aW1lb3V0KTtcbmRyaXZlcnMvbmV0L292cG4vcGVlci5oLTE1OC12b2lkIG92cG5fcGVlcl9rZWVwYWxpdmVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAyMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMxNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKlJlZmxlY3Rpbmcgb24gT3BlblZQTiBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIE9wZW5WUE4tcmVsYXRlZCBiaXRzIGFuZCBwaWVjZXMuICpgb3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXRgKiwgeWVzLCB0aGF0IGxvb2tzIHByb21pc2luZywgZ29vZCB0byBzZWUgdGhhdCBiZWluZyB1c2VkLCBwcm9iYWJseSBmb3Iga2VlcGluZyB0aG9zZSBjb25uZWN0aW9ucyBoZWFsdGh5IGFuZCBhbGl2ZSDigJMgYWx3YXlzIGEga2V5IGNvbmNlcm4gd2l0aCBWUE5zLiBBbmQgdGhlbi4uLiAqYG92cG5fY3J5cHRvX2tleV9zbG90X3JlbGVhc2VgKiDigJMgYWgsIHJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBjbGVhbnVwIG1lY2hhbmlzbSBmb3IgY3J5cHRvZ3JhcGhpYyBrZXlzLCBoYW5kbGluZyB0aGVpciByZWxlYXNlIHdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCBoaXRzIHplcm8uIFRoYXQmIzM5O3MgZXhhY3RseSBob3cgaXQgc2hvdWxkIGJlLiBFbnN1cmVzIHdlJiMzOTtyZSBub3QgbGVha2luZyByZXNvdXJjZXMgYW5kIGtlZXBzIHRoaW5ncyBzZWN1cmUuIEdvb2QsIGVmZmljaWVudCBtZW1vcnkgbWFuYWdlbWVudCBpcyBjcml0aWNhbCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAyMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnBuX2NyeXB0b19rZXlfc2xvdF9yZWxlYXNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvb3Zwbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYy0yMC1cbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmM6MjE6dm9pZCBvdnBuX2NyeXB0b19rZXlfc2xvdF9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKVxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYy0yMi17XG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaD0xMTE9b3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcHJpbWFyeShjb25zdCBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzKVxuLS1cbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmgtMTIzLVxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaDoxMjQ6dm9pZCBvdnBuX2NyeXB0b19rZXlfc2xvdF9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKTtcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmgtMTI1LVxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaD0xMjY9c3RhdGljIGlubGluZSB2b2lkIG92cG5fY3J5cHRvX2tleV9zbG90X3B1dChzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzKVxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaC0xMjcte1xuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaDoxMjg6XHRrcmVmX3B1dChcdTAwMjZrcy1cdTAwM2VyZWZjb3VudCwgb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZSk7XG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oLTEyOS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDIxOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODQ0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIE9wZW5WUE4gQ3J5cHRvIEtleSBNYW5hZ2VtZW50KioKCkFscmlnaHQsICpvdnBuXF9jcnlwdG9cX2tleVxfc2xvdFxfcmVsZWFzZSogaXMgcHJlY2lzZWx5IHdoYXQgSSYjMzk7ZCBleHBlY3QgdG8gc2VlIGluIGEga2V5IG1hbmFnZW1lbnQgc3lzdGVtLCB0aGUgZXhwZWN0ZWQgcmVsZWFzZSBvZiB0aGUga2V5IHNsb3QgaXMgZ29vZCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQuIFRoYXQmIzM5O3MgYSBzb2xpZCBzdGFydC4gTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBhIGJpdCBkZWVwZXIgaW50byB0aGUgbGlmZWN5Y2xlLiBUaGUgbmF0dXJhbCBwbGFjZSB0byBsb29rIG5leHQgaXMgaXRzIGNvdW50ZXJwYXJ0LCB0aGUgYWxsb2NhdGlvbiBmdW5jdGlvbjogKm92cG5cX2FlYWRcX2NyeXB0b1xfa2V5XF9zbG90XF9uZXcqLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgbmV3IHNsb3RzIGFyZSBjcmVhdGVkLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNoZWNrcyBvbiB0aGlzIGZ1bmN0aW9uIHRoYXQgbmVlZCB0byBiZSBtYWRlLiBBcmUgdGhleSBsaW5rZWQsIGluIHRlcm1zIG9mIHJlc291cmNlIG1hbmFnZW1lbnQsIG9yIGFyZSB0aGVyZSBzZXBhcmF0ZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyB0aGF0IG92ZXJsYXA/IFdoYXQgZG9lcyB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzIGFjdHVhbGx5IGVudGFpbCDigJMgbWVtb3J5IGFsbG9jYXRpb24sIGtleSBkZXJpdmF0aW9uL2dlbmVyYXRpb24sIGluaXRpYWxpemF0aW9uIG9mIHRoZSB1bmRlcmx5aW5nIGNyeXB0byBjb250ZXh0PyBJIG5lZWQgdG8gY2hlY2sgdGhlIHBvdGVudGlhbCBmb3IgdnVsbmVyYWJpbGl0aWVzLCBzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQsIGltcHJvcGVyIGtleSBkZXJpdmF0aW9uLCBvciBpbnN1ZmZpY2llbnQgZW50cm9weSBzb3VyY2luZyBkdXJpbmcgdGhlIGtleSBnZW5lcmF0aW9uLiBJIHdhbnQgdG8gbG9vayBmb3IgcG90ZW50aWFsIGxvY2stdXBzIHRvby4gVGhlIG1vcmUgSSBjYW4gdW5kZXJzdGFuZCBhYm91dCB0aGlzIGNyaXRpY2FsIHBhaXJpbmcsIHRoZSBtb3JlIGVmZmVjdGl2ZSBteSBvdmVyYWxsIGFuYWx5c2lzIG9mIE9wZW5WUE4mIzM5O3MgY3J5cHRvIGltcGxlbWVudGF0aW9uIGNhbiBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMjE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9vdnBuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jPTc4PWludCBvdnBuX2NyeXB0b19zdGF0ZV9yZXNldChzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzLFxuLS1cbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmMtODctXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jOjg4Olx0bmV3ID0gb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXcoXHUwMDI2cGtyLVx1MDAzZWtleSk7XG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jLTg5LVx0aWYgKElTX0VSUihuZXcpKVxuLS1cbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYz00MDA9c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICpcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYzo0MDE6b3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXcoY29uc3Qgc3RydWN0IG92cG5fa2V5X2NvbmZpZyAqa2MpXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmMtNDAyLXtcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmg9MjM9c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICpcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaDoyNDpvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X25ldyhjb25zdCBzdHJ1Y3Qgb3Zwbl9rZXlfY29uZmlnICprYyk7XG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmgtMjUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDIxOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDg2CgkJCQkJCQlvdXRwdXQ6IDE4MAoJCQkJCQkJdGhvdWdodHM6IDI4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE9wZW5WUE4gRGF0YSBDaGFubmVsIE9mZmxvYWQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIGBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X25ld2AgbG9va3Mgc29saWQsIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IGZvY3VzLCB0aGVuLCBuZWVkcyB0byBiZSBvbiB0aGVzZSBzeW1ib2xzOiBgb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZWAsIGBvdnBuX2NyeXB0b19raWxsX2tleWAsIGBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X25ld2AsIGBvdnBuX3BlZXJfa2VlcGFsaXZlX3NldGAsIGFuZCBgb3Zwbl9wZWVyX2tlZXBhbGl2ZV93b3JrYC4gVGhpcyBpcyBhYm91dCBob3cgdGhlIGNyeXB0byBrZXlzIGFyZSBoYW5kbGVkIGluIHRoZSBvZmZsb2FkIGRyaXZlci4KClRoZSBwYXRjaCBpcyB0b3VjaGluZyB0aGUgT3BlblZQTiBkYXRhIGNoYW5uZWwgb2ZmbG9hZCBkcml2ZXIgKGBkcml2ZXJzL25ldC9vdnBuYCksIHNvIGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgbmV0d29yayBkcml2ZXIg4oCTIGFsd2F5cyBzb21ldGhpbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0by4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBzd2FwcGluZyBgY2FsbF9yY3VgIGZvciBgcXVldWVfcmN1X3dvcmtgIGZvciBjcnlwdG8ga2V5IHNsb3QgZnJlZWluZywgd2hpY2ggaXMgYSBnb29kIG1vdmUgZm9yIGluY3JlYXNlZCBlZmZpY2llbmN5IGFuZCByZWR1Y2VkIGNvbnRlbnRpb24uIFRoZXkmIzM5O3JlIGludHJvZHVjaW5nIGEgZGVkaWNhdGVkIHdvcmtxdWV1ZSAoYG92cG5fd3FgKSBmb3IgYWxsIG92cG4tc3BlY2lmaWMgd29yaywgYW5kIGZpeGluZyBhIGxvZ2ljIGJ1ZyBpbiBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgLiBUaGVzZSBhcmUgYWxsIGNydWNpYWwgaW1wcm92ZW1lbnRzLCBhbmQgdGhpcyBpcyBnb29kIHRvIHNlZSBhcyBpdCBzdHJlYW1saW5lcyBvcGVyYXRpb25zLgoKTm93LCBsZXQgbWUganVzdCBjb25maXJtIHRoZSBjb25maWd1cmF0aW9ucyBhcmUgYWxsIGluIG9yZGVyLiBUaGV5JiMzOTtyZSByZWZlcmVuY2luZyBgT1ZQTmAsIHdoaWNoIGRlcGVuZHMgb24gYE5FVGAgYW5kIGBJTkVUYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIExvb2tzIGxpa2UgaXQgYWxzbyBzZWxlY3RzIGBEU1RfQ0FDSEVgLCBgTkVUX1VEUF9UVU5ORUxgLCBgQ1JZUFRPYCwgYENSWVBUT19BRVNgLCBgQ1JZUFRPX0dDTWAsIGBDUllQVE9fQ0hBQ0hBMjBQT0xZMTMwNWAsIGFuZCBgU1RSRUFNX1BBUlNFUmAuIEdvb2QsIHRoZSBjb25maWd1cmF0aW9uIGlzIHN1ZmZpY2llbnQuIFNlZW1zIGxpa2UgZXZlcnl0aGluZyBjaGVja3Mgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAyMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1ZQTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O292cG5fY3J5cHRvX2tleV9zbG90X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7b3Zwbl9jcnlwdG9fa2lsbF9rZXkmIzM0OywKICAgICYjMzQ7b3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXcmIzM0OywKICAgICYjMzQ7b3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXQmIzM0OywKICAgICYjMzQ7b3Zwbl9wZWVyX2tlZXBhbGl2ZV93b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPcGVuVlBOIGRhdGEgY2hhbm5lbCBvZmZsb2FkIGRyaXZlciAoZHJpdmVycy9uZXQvb3ZwbikuIEl0IHJlcGxhY2VzIGNhbGxfcmN1IHdpdGggcXVldWVfcmN1X3dvcmsgZm9yIGZyZWVpbmcgY3J5cHRvIGtleSBzbG90cywgaW50cm9kdWNlcyBhIGRlZGljYXRlZCB3b3JrcXVldWUgKG92cG5fd3EpIGZvciBhbGwgb3Zwbi1zcGVjaWZpYyB3b3JrLCBhbmQgZml4ZXMgYSBsb2dpYyBidWcgaW4gb3Zwbl9jcnlwdG9fa2lsbF9rZXkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gYSByZWFjaGFibGUgbmV0d29yayBkcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09WUE4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnBuX2NyeXB0b19rZXlfc2xvdF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O292cG5fY3J5cHRvX2tpbGxfa2V5JiMzNDssCiAgICAmIzM0O292cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3JiMzNDssCiAgICAmIzM0O292cG5fcGVlcl9rZWVwYWxpdmVfc2V0JiMzNDssCiAgICAmIzM0O292cG5fcGVlcl9rZWVwYWxpdmVfd29yayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgT3BlblZQTiBkYXRhIGNoYW5uZWwgb2ZmbG9hZCBkcml2ZXIgKGRyaXZlcnMvbmV0L292cG4pLiBJdCByZXBsYWNlcyBjYWxsX3JjdSB3aXRoIHF1ZXVlX3JjdV93b3JrIGZvciBmcmVlaW5nIGNyeXB0byBrZXkgc2xvdHMsIGludHJvZHVjZXMgYSBkZWRpY2F0ZWQgd29ya3F1ZXVlIChvdnBuX3dxKSBmb3IgYWxsIG92cG4tc3BlY2lmaWMgd29yaywgYW5kIGZpeGVzIGEgbG9naWMgYnVnIGluIG92cG5fY3J5cHRvX2tpbGxfa2V5LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGEgcmVhY2hhYmxlIG5ldHdvcmsgZHJpdmVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAyMTo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDIxOjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBmb2N1c2VzIG9uIGZpeGluZyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgLCByZW9yZGVyaW5nIGNsZWFudXAgZnVuY3Rpb25zIHRvIHByZXZlbnQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIGFuZCBtaWdyYXRpbmcgd29yayBpdGVtcyBmcm9tIHRoZSBzeXN0ZW0gd29ya3F1ZXVlIHRvIGEgZGVkaWNhdGVkIGBvdnBuX3dxYCB3b3JrcXVldWUuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoTlVMTCBkZXJlZmVyZW5jZXMsIFVBRikgYW5kIGNvbmN1cnJlbmN5IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBubyBjaGFuZ2VzIHRvIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE5NWYyNmRiNTIyMmQ2MmExZmUzOTI0MGM0OGY4ZTBhZWI5MTY2MDkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyA5IDIxOjUyOjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmMKaW5kZXggOTA1ODBlMzIwNTJmYi4uN2U1NDU0Mjg5MDBhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jCkBAIC0xOCwyMCAmIzQzOzE4LDEyIEBACiAjaW5jbHVkZSAmIzM0O2NyeXB0b19hZWFkLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtjcnlwdG8uaCYjMzQ7CiAKLXN0YXRpYyB2b2lkIG92cG5fa3NfZGVzdHJveV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQotewotCXN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3M7Ci0KLQlrcyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QsIHJjdSk7Ci0Jb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9kZXN0cm95KGtzKTsKLX0KLQogdm9pZCBvdnBuX2NyeXB0b19rZXlfc2xvdF9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQogewogCXN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3M7CiAKIAlrcyA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QsIHJlZmNvdW50KTsKLQljYWxsX3JjdSgmYW1wO2tzLSZndDtyY3UsIG92cG5fa3NfZGVzdHJveV9yY3UpOwomIzQzOwlxdWV1ZV9yY3Vfd29yayhvdnBuX3dxLCAmYW1wO2tzLSZndDtmcmVlX3dvcmspOwogfQogCiAvKiBjYW4gb25seSBiZSBpbnZva2VkIHdoZW4gYWxsIHBlZXIgcmVmZXJlbmNlcyBoYXZlIGJlZW4gZHJvcHBlZCAoaS5lLiBSQ1UKQEAgLTU4LDE1ICYjNDM7NTAsMTkgQEAgdm9pZCBvdnBuX2NyeXB0b19zdGF0ZV9yZWxlYXNlKHN0cnVjdCBvdnBuX2NyeXB0b19zdGF0ZSAqY3MpCiBib29sIG92cG5fY3J5cHRvX2tpbGxfa2V5KHN0cnVjdCBvdnBuX2NyeXB0b19zdGF0ZSAqY3MsIHU4IGtleV9pZCkKIHsKIAlzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzID0gTlVMTDsKJiM0MzsJc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICp0bXA7CiYjNDM7CWludCBzbG90ID0gMDsKIAogCXNwaW5fbG9ja19iaCgmYW1wO2NzLSZndDtsb2NrKTsKLQlpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNzLSZndDtzbG90c1swXSktJmd0O2tleV9pZCA9PSBrZXlfaWQpIHsKLQkJa3MgPSByY3VfcmVwbGFjZV9wb2ludGVyKGNzLSZndDtzbG90c1swXSwgTlVMTCwKLQkJCQkJIGxvY2tkZXBfaXNfaGVsZCgmYW1wO2NzLSZndDtsb2NrKSk7Ci0JfSBlbHNlIGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoY3MtJmd0O3Nsb3RzWzFdKS0mZ3Q7a2V5X2lkID09IGtleV9pZCkgewotCQlrcyA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoY3MtJmd0O3Nsb3RzWzFdLCBOVUxMLAotCQkJCQkgbG9ja2RlcF9pc19oZWxkKCZhbXA7Y3MtJmd0O2xvY2spKTsKJiM0MzsJdG1wID0gcmN1X2FjY2Vzc19wb2ludGVyKGNzLSZndDtzbG90c1tzbG90XSk7CiYjNDM7CWlmICghdG1wIHx8IHRtcC0mZ3Q7a2V5X2lkICE9IGtleV9pZCkgewomIzQzOwkJc2xvdCA9IDE7CiYjNDM7CQl0bXAgPSByY3VfYWNjZXNzX3BvaW50ZXIoY3MtJmd0O3Nsb3RzW3Nsb3RdKTsKIAl9CiYjNDM7CiYjNDM7CWlmICh0bXAgJmFtcDsmYW1wOyB0bXAtJmd0O2tleV9pZCA9PSBrZXlfaWQpCiYjNDM7CQlrcyA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoY3MtJmd0O3Nsb3RzW3Nsb3RdLCBOVUxMLAomIzQzOwkJCQkJIGxvY2tkZXBfaXNfaGVsZCgmYW1wO2NzLSZndDtsb2NrKSk7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtjcy0mZ3Q7bG9jayk7CiAKIAlpZiAoa3MpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oIGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaAppbmRleCAwZTI4NGZlYzNhNzVhLi5lM2ZlYjE2ZDU0OTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmgKQEAgLTEwLDYgJiM0MzsxMCw4IEBACiAjaWZuZGVmIF9ORVRfT1ZQTl9PVlBOQ1JZUFRPX0hfCiAjZGVmaW5lIF9ORVRfT1ZQTl9PVlBOQ1JZUFRPX0hfCiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiYjNDM7CiAjaW5jbHVkZSAmIzM0O3BrdGlkLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtwcm90by5oJiMzNDsKIApAQCAtNDUsOCAmIzQzOzQ3LDggQEAgc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90IHsKIAogCXN0cnVjdCBvdnBuX3BrdGlkX3JlY3YgcGlkX3JlY3YgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAlzdHJ1Y3Qgb3Zwbl9wa3RpZF94bWl0IHBpZF94bWl0IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CiYjNDM7CXN0cnVjdCByY3Vfd29yayBmcmVlX3dvcms7CiAJc3RydWN0IGtyZWYgcmVmY291bnQ7Ci0Jc3RydWN0IHJjdV9oZWFkIHJjdTsKIH07CiAKIHN0cnVjdCBvdnBuX2NyeXB0b19zdGF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmMgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmMKaW5kZXggOGYwN2M0MTg2MjJiMi4uNzRlYWY2ZmFjMmY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYwpAQCAtOSw2ICYjNDM7OSw3IEBACiAKICNpbmNsdWRlICZsdDtjcnlwdG8vYWVhZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaXAuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaXB2Ni5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC91ZHAuaCZndDsKQEAgLTM4MCwxMyAmIzQzOzM4MSwxOSBAQCBzdGF0aWMgc3RydWN0IGNyeXB0b19hZWFkICpvdnBuX2FlYWRfaW5pdChjb25zdCBjaGFyICp0aXRsZSwKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCi12b2lkIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZGVzdHJveShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzKQomIzQzO3N0YXRpYyB2b2lkIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZnJlZShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzKQogewotCWlmICgha3MpCi0JCXJldHVybjsKLQogCWNyeXB0b19mcmVlX2FlYWQoa3MtJmd0O2VuY3J5cHQpOwogCWNyeXB0b19mcmVlX2FlYWQoa3MtJmd0O2RlY3J5cHQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2ZyZWVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzOwomIzQzOwomIzQzOwlrcyA9IGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSwgc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90LAomIzQzOwkJCSAgZnJlZV93b3JrKTsKJiM0MzsJb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9mcmVlKGtzKTsKIAlrZnJlZShrcyk7CiB9CiAKQEAgLTQyMCw2ICYjNDM7NDI3LDcgQEAgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXcoY29uc3Qgc3RydWN0IG92cG5fa2V5X2NvbmZpZyAqa2MpCiAKIAlrcy0mZ3Q7ZW5jcnlwdCA9IE5VTEw7CiAJa3MtJmd0O2RlY3J5cHQgPSBOVUxMOwomIzQzOwlJTklUX1JDVV9XT1JLKCZhbXA7a3MtJmd0O2ZyZWVfd29yaywgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9mcmVlX3dvcmspOwogCWtyZWZfaW5pdCgmYW1wO2tzLSZndDtyZWZjb3VudCk7CiAJa3MtJmd0O2tleV9pZCA9IGtjLSZndDtrZXlfaWQ7CiAKQEAgLTQ1Myw3ICYjNDM7NDYxLDggQEAgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXcoY29uc3Qgc3RydWN0IG92cG5fa2V5X2NvbmZpZyAqa2MpCiAJcmV0dXJuIGtzOwogCiBkZXN0cm95X2tzOgotCW92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZGVzdHJveShrcyk7CiYjNDM7CW92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZnJlZShrcyk7CiYjNDM7CWtmcmVlKGtzKTsKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmggYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmgKaW5kZXggNjVhMmZmMzA3ODk4Ni4uZmFlM2I1ODVhNDNiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaApAQCAtMjIsNyAmIzQzOzIyLDYgQEAgaW50IG92cG5fYWVhZF9kZWNyeXB0KHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MsCiAKIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqCiBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X25ldyhjb25zdCBzdHJ1Y3Qgb3Zwbl9rZXlfY29uZmlnICprYyk7Ci12b2lkIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZGVzdHJveShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzKTsKIAogZW51bSBvdnBuX2NpcGhlcl9hbGcgb3Zwbl9hZWFkX2NyeXB0b19hbGcoc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vaW8uYyBiL2RyaXZlcnMvbmV0L292cG4vaW8uYwppbmRleCA5YTY2ZDY5MzAzOWEzLi45NTI2ZjgwOTZkYTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9vdnBuL2lvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvb3Zwbi9pby5jCkBAIC0yMDQsMTAgJiM0MzsyMDQsMTAgQEAgdm9pZCBvdnBuX2RlY3J5cHRfcG9zdCh2b2lkICpkYXRhLCBpbnQgcmV0KQogCQlvdnBuX2Rldl9kc3RhdHNfcnhfZHJvcHBlZChwZWVyLSZndDtvdnBuLSZndDtkZXYpOwogCWtmcmVlX3NrYihza2IpOwogZHJvcF9ub2NvdW50OgotCWlmIChsaWtlbHkocGVlcikpCi0JCW92cG5fcGVlcl9wdXQocGVlcik7CiAJaWYgKGxpa2VseShrcykpCiAJCW92cG5fY3J5cHRvX2tleV9zbG90X3B1dChrcyk7CiYjNDM7CWlmIChsaWtlbHkocGVlcikpCiYjNDM7CQlvdnBuX3BlZXJfcHV0KHBlZXIpOwogfQogCiAvKiBSWCBwYXRoIGVudHJ5IHBvaW50OiBkZWNyeXB0IHBhY2tldCBhbmQgZm9yd2FyZCBpdCB0byB0aGUgZGV2aWNlICovCkBAIC0zMDIsMTEgJiM0MzszMDIsMTEgQEAgdm9pZCBvdnBuX2VuY3J5cHRfcG9zdCh2b2lkICpkYXRhLCBpbnQgcmV0KQogZXJyOgogCWlmICh1bmxpa2VseShza2IpKQogCQlvdnBuX2Rldl9kc3RhdHNfdHhfZHJvcHBlZChwZWVyLSZndDtvdnBuLSZndDtkZXYpOwotCWlmIChsaWtlbHkocGVlcikpCi0JCW92cG5fcGVlcl9wdXQocGVlcik7CiYjNDM7CWtmcmVlX3NrYihza2IpOwogCWlmIChsaWtlbHkoa3MpKQogCQlvdnBuX2NyeXB0b19rZXlfc2xvdF9wdXQoa3MpOwotCWtmcmVlX3NrYihza2IpOwomIzQzOwlpZiAobGlrZWx5KHBlZXIpKQomIzQzOwkJb3Zwbl9wZWVyX3B1dChwZWVyKTsKIH0KIAogc3RhdGljIGJvb2wgb3Zwbl9lbmNyeXB0X29uZShzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9tYWluLmMgYi9kcml2ZXJzL25ldC9vdnBuL21haW4uYwppbmRleCAxNjhjZmU5YjU5YTk4Li4wNzA4MjQ5ZTk2MDdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9vdnBuL21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9vdnBuL21haW4uYwpAQCAtMTIsNiAmIzQzOzEyLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pbmV0ZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9ncm9fY2VsbHMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaXAuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvcnRuZXRsaW5rLmgmZ3Q7CkBAIC0yNiw2ICYjNDM7MjcsOSBAQAogI2luY2x1ZGUgJiMzNDt0Y3AuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3VkcC5oJiMzNDsKIAomIzQzOy8qIG1vZHVsZS1vd25lZCB3b3JrcXVldWUgb24gd2hpY2ggYWxsIG92cG4tc3BlY2lmaWMgd29yayBpcyBxdWV1ZWQgKi8KJiM0MztzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqb3Zwbl93cTsKJiM0MzsKIHN0YXRpYyB2b2lkIG92cG5fcHJpdl9mcmVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCiB7CiAJc3RydWN0IG92cG5fcHJpdiAqb3ZwbiA9IG5ldGRldl9wcml2KG5ldCk7CkBAIC0yNjQsMTAgJiM0MzsyNjgsMTYgQEAgc3RhdGljIGludCBfX2luaXQgb3Zwbl9pbml0KHZvaWQpCiAKIAlvdnBuX3RjcF9pbml0KCk7CiAKJiM0MzsJb3Zwbl93cSA9IGFsbG9jX3dvcmtxdWV1ZSgmIzM0O292cG4mIzM0OywgV1FfUEVSQ1BVLCAwKTsKJiM0MzsJaWYgKCFvdnBuX3dxKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDtvdnBuOiBjYW5ub3QgYWxsb2NhdGUgd29ya3F1ZXVlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwogCWVyciA9IHJ0bmxfbGlua19yZWdpc3RlcigmYW1wO292cG5fbGlua19vcHMpOwogCWlmIChlcnIpIHsKIAkJcHJfZXJyKCYjMzQ7b3ZwbjogY2FuJiMzOTt0IHJlZ2lzdGVyIHJ0bmwgbGluayBvcHM6ICVkXG4mIzM0OywgZXJyKTsKLQkJcmV0dXJuIGVycjsKJiM0MzsJCWdvdG8gZGVzdHJveV93cTsKIAl9CiAKIAllcnIgPSBvdnBuX25sX3JlZ2lzdGVyKCk7CkBAIC0yODAsNiAmIzQzOzI5MCw5IEBAIHN0YXRpYyBpbnQgX19pbml0IG92cG5faW5pdCh2b2lkKQogCiB1bnJlZ19ydG5sOgogCXJ0bmxfbGlua191bnJlZ2lzdGVyKCZhbXA7b3Zwbl9saW5rX29wcyk7CiYjNDM7ZGVzdHJveV93cToKJiM0MzsJZGVzdHJveV93b3JrcXVldWUob3Zwbl93cSk7CiYjNDM7CW92cG5fd3EgPSBOVUxMOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTI4OCw3ICYjNDM7MzAxLDExIEBAIHN0YXRpYyBfX2V4aXQgdm9pZCBvdnBuX2NsZWFudXAodm9pZCkKIAlvdnBuX25sX3VucmVnaXN0ZXIoKTsKIAlydG5sX2xpbmtfdW5yZWdpc3RlcigmYW1wO292cG5fbGlua19vcHMpOwogCiYjNDM7CWZsdXNoX3dvcmtxdWV1ZShvdnBuX3dxKTsKIAlyY3VfYmFycmllcigpOwomIzQzOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZShvdnBuX3dxKTsKJiM0MzsJb3Zwbl93cSA9IE5VTEw7CiB9CiAKIG1vZHVsZV9pbml0KG92cG5faW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL292cG5wcml2LmggYi9kcml2ZXJzL25ldC9vdnBuL292cG5wcml2LmgKaW5kZXggNTg5OGY2YWRhZGE3Zi4uODQ0OTkxNDBlNGJkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9vdnBucHJpdi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L292cG4vb3ZwbnByaXYuaApAQCAtMTUsNiAmIzQzOzE1LDEwIEBACiAjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9pZl9saW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9vdnBuLmgmZ3Q7CiAKJiM0MztzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdDsKJiM0MzsKJiM0MztleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm92cG5fd3E7CiYjNDM7CiAvKioKICAqIHN0cnVjdCBvdnBuX3BlZXJfY29sbGVjdGlvbiAtIGNvbnRhaW5lciBvZiBwZWVycyBmb3IgTXVsdGlQZWVyIG1vZGUKICAqIEBieV9pZDogdGFibGUgb2YgcGVlcnMgaW5kZXggYnkgSUQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vcGVlci5jIGIvZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmMKaW5kZXggYjA1MTlmOTg0MGQ4My4uYzk1NjU2Y2E3YzM1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmMKQEAgLTYyLDcgJiM0Mzs2Miw3IEBAIHZvaWQgb3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXQoc3RydWN0IG92cG5fcGVlciAqcGVlciwgdTMyIGludGVydmFsLCB1MzIgdGltZW91dCkKIAkvKiBub3cgdGhhdCBpbnRlcnZhbCBhbmQgdGltZW91dCBoYXZlIGJlZW4gY2hhbmdlZCwga2ljawogCSAqIG9mZiB0aGUgd29ya2VyIHNvIHRoYXQgdGhlIG5leHQgZGVsYXkgY2FuIGJlIHJlY29tcHV0ZWQKIAkgKi8KLQltb2RfZGVsYXllZF93b3JrKHN5c3RlbV9wZXJjcHVfd3EsICZhbXA7cGVlci0mZ3Q7b3Zwbi0mZ3Q7a2VlcGFsaXZlX3dvcmssIDApOwomIzQzOwltb2RfZGVsYXllZF93b3JrKG92cG5fd3EsICZhbXA7cGVlci0mZ3Q7b3Zwbi0mZ3Q7a2VlcGFsaXZlX3dvcmssIDApOwogfQogCiAvKioKQEAgLTEzNzEsNyAmIzQzOzEzNzEsNyBAQCBzdGF0aWMgdGltZTY0X3Qgb3Zwbl9wZWVyX2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLAogCQkJICAgcGVlci0mZ3Q7aWQpOwogCQlpZiAoV0FSTl9PTighb3Zwbl9wZWVyX2hvbGQocGVlcikpKQogCQkJcmV0dXJuIDA7Ci0JCWlmICghc2NoZWR1bGVfd29yaygmYW1wO3BlZXItJmd0O2tlZXBhbGl2ZV93b3JrKSkKJiM0MzsJCWlmICghcXVldWVfd29yayhvdnBuX3dxLCAmYW1wO3BlZXItJmd0O2tlZXBhbGl2ZV93b3JrKSkKIAkJCW92cG5fcGVlcl9wdXQocGVlcik7CiAJfQogCkBAIC0xNDYzLDggJiM0MzsxNDYzLDggQEAgdm9pZCBvdnBuX3BlZXJfa2VlcGFsaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQluZXRkZXZfZGJnKG92cG4tJmd0O2RldiwKIAkJCSAgICYjMzQ7c2NoZWR1bGluZyBrZWVwYWxpdmUgd29yazogbm93PSVsbHUgbmV4dF9ydW49JWxsdSBkZWx0YT0lbGx1XG4mIzM0OywKIAkJCSAgIG5leHRfcnVuLCBub3csIG5leHRfcnVuIC0gbm93KTsKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7b3Zwbi0mZ3Q7a2VlcGFsaXZlX3dvcmssCi0JCQkJICAgICAgKG5leHRfcnVuIC0gbm93KSAqIEhaKTsKJiM0MzsJCXF1ZXVlX2RlbGF5ZWRfd29yayhvdnBuX3dxLCAmYW1wO292cG4tJmd0O2tlZXBhbGl2ZV93b3JrLAomIzQzOwkJCQkgICAobmV4dF9ydW4gLSBub3cpICogSFopOwogCX0KIAl1bmxvY2tfb3ZwbihvdnBuLCAmYW1wO3JlbGVhc2VfbGlzdCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL3RjcC5jIGIvZHJpdmVycy9uZXQvb3Zwbi90Y3AuYwppbmRleCAwYWYxNDA1NWMzOWFhLi44ZmU4YThlNzUwYTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9vdnBuL3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L292cG4vdGNwLmMKQEAgLTE1MSw3ICYjNDM7MTUxLDcgQEAgc3RhdGljIHZvaWQgb3Zwbl90Y3BfcmN2KHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpCiAJLyogdGFrZSByZWZlcmVuY2UgZm9yIGRlZmVycmVkIHBlZXIgZGVsZXRpb24uIHNob3VsZCBuZXZlciBmYWlsICovCiAJaWYgKFdBUk5fT04oIW92cG5fcGVlcl9ob2xkKHBlZXIpKSkKIAkJZ290byBlcnJfbm9wZWVyOwotCWlmICghc2NoZWR1bGVfd29yaygmYW1wO3BlZXItJmd0O3RjcC5kZWZlcl9kZWxfd29yaykpCiYjNDM7CWlmICghcXVldWVfd29yayhvdnBuX3dxLCAmYW1wO3BlZXItJmd0O3RjcC5kZWZlcl9kZWxfd29yaykpCiAJCW92cG5fcGVlcl9wdXQocGVlcik7CiAJb3Zwbl9kZXZfZHN0YXRzX3J4X2Ryb3BwZWQocGVlci0mZ3Q7b3Zwbi0mZ3Q7ZGV2KTsKIGVycl9ub3BlZXI6CkBAIC0yODQsMTMgJiM0MzsyODQsMTIgQEAgc3RhdGljIHZvaWQgb3Zwbl90Y3Bfc2VuZF9zb2NrKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBzb2NrICpzaykKIAkJCSAqIHN0cmVhbSB0aGVyZWZvcmUgd2UgYWJvcnQgdGhlIGNvbm5lY3Rpb24KIAkJCSAqLwogCQkJb3Zwbl9wZWVyX2hvbGQocGVlcik7Ci0JCQlpZiAoIXNjaGVkdWxlX3dvcmsoJmFtcDtwZWVyLSZndDt0Y3AuZGVmZXJfZGVsX3dvcmspKQomIzQzOwkJCWlmICghcXVldWVfd29yayhvdnBuX3dxLCAmYW1wO3BlZXItJmd0O3RjcC5kZWZlcl9kZWxfd29yaykpCiAJCQkJb3Zwbl9wZWVyX3B1dChwZWVyKTsKIAogCQkJLyogd2UgYmFpbCBvdXQgaW1tZWRpYXRlbHkgYW5kIGtlZXAgdHhfaW5fcHJvZ3Jlc3Mgc2V0CiAJCQkgKiB0byB0cnVlLiBUaGlzIHdheSB3ZSBwcmV2ZW50IG1vcmUgVFggYXR0ZW1wdHMKLQkJCSAqIHdoaWNoIHdvdWxkIGxlYWQgdG8gbW9yZSBpbnZvY2F0aW9ucyBvZgotCQkJICogc2NoZWR1bGVfd29yaygpCiYjNDM7CQkJICogd2hpY2ggd291bGQgbGVhZCB0byBtb3JlIGludm9jYXRpb25zIG9mIHF1ZXVlX3dvcmsoKQogCQkJICovCiAJCQlyZXR1cm47CiAJCX0KQEAgLTQ4Nyw3ICYjNDM7NDg2LDcgQEAgc3RhdGljIHZvaWQgb3Zwbl90Y3Bfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKQogCXJjdV9yZWFkX2xvY2soKTsKIAlzb2NrID0gcmN1X2RlcmVmZXJlbmNlX3NrX3VzZXJfZGF0YShzayk7CiAJaWYgKGxpa2VseShzb2NrICZhbXA7JmFtcDsgc29jay0mZ3Q7cGVlcikpIHsKLQkJc2NoZWR1bGVfd29yaygmYW1wO3NvY2stJmd0O3RjcF90eF93b3JrKTsKJiM0MzsJCXF1ZXVlX3dvcmsob3Zwbl93cSwgJmFtcDtzb2NrLSZndDt0Y3BfdHhfd29yayk7CiAJCXNvY2stJmd0O3BlZXItJmd0O3RjcC5za19jYi5za193cml0ZV9zcGFjZShzayk7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMjE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIxOAoJCQkJCQkJb3V0cHV0OiAxNjMKCQkJCQkJCXRob3VnaHRzOiAxMTYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IE9wZW5WUE4gRHJpdmVyIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGBvdnBuYCBkcml2ZXIgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGVzZSBjaGFuZ2VzIGNvdWxkIHBvdGVudGlhbGx5IGludHJvZHVjZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgc3BlY2lmaWNhbGx5IHRob3NlIHRoYXQgS01TQU4gd291bGQgZmxhZy4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyByZWZhY3RvcmluZyB0aGUgZHJpdmVyJiMzOTtzIHdvcmtxdWV1ZSBtYW5hZ2VtZW50LiBXZSYjMzk7cmUgbW92aW5nIGZyb20gdGhlIHN0YW5kYXJkIHN5c3RlbSB3b3JrcXVldWUgdG8gYSBkZWRpY2F0ZWQgYG92cG5fd3FgLiBUaGlzIGludm9sdmVzIHJlcGxhY2luZyBjYWxscyB0byBgc2NoZWR1bGVfd29ya2AsIGBzY2hlZHVsZV9kZWxheWVkX3dvcmtgLCBhbmQgYGNhbGxfcmN1YCB3aXRoIGBxdWV1ZV93b3JrYCwgYHF1ZXVlX2RlbGF5ZWRfd29ya2AsIGFuZCBgcXVldWVfcmN1X3dvcmtgLCByZXNwZWN0aXZlbHksIGFsbCBkaXJlY3RlZCB0byB0aGlzIG5ldyBgb3Zwbl93cWAuIFNlZW1zIGxpa2UgYSBzdGFuZGFyZCBpc29sYXRpb24vcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLgoKQmV5b25kIHRoZSB3b3JrcXVldWUgY2hhbmdlcywgdGhlcmUgYXJlIHNldmVyYWwgb3RoZXIgbm90YWJsZSBtb2RpZmljYXRpb25zLiBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgIGhhcyBiZWVuIHVwZGF0ZWQsIGFuZCBJIG5lZWQgdG8gbG9vayBjbG9zZXIgYXQgdGhhdCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1YnRsZSBpc3N1ZXMuIEFsc28sIHRoZXJlJiMzOTtzIGEgcmVvcmRlcmluZyBvZiBga2ZyZWVfc2tiYCBhbmQgYG92cG5fcGVlcl9wdXRgL2BvdnBuX2NyeXB0b19rZXlfc2xvdF9wdXRgIHdpdGhpbiB0aGUgYG92cG5fZGVjcnlwdF9wb3N0YCBhbmQgYG92cG5fZW5jcnlwdF9wb3N0YCBmdW5jdGlvbnMuIFRoYXQgc2NyZWFtcyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUsIG9yIGEgY2xlYW51cCBvcmRlciB0aGF0IG5lZWRlZCB0byBiZSBtb3JlIGNhcmVmdWwuCgpOb3csIGxldCYjMzk7cyBkaWcgaW50byB0aGUgZGV0YWlsczoKCjEuICBgb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZWAgbm93IHVzZXMgYHF1ZXVlX3JjdV93b3JrYC4gVGhpcyBpcyBmaW5lLCB1c2luZyBSQ1UgY29ycmVjdGx5IGlzIGdvb2QuCjIuICBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgIGhhcyBiZWVuIG1vZGlmaWVkLiBBbHJpZ2h0LCBsZXQmIzM5O3Mgem9vbSBpbiBvbiB0aGF0IGNvZGUgc25pcHBldC4gVGhlICpvbGQqIGNvZGUgaGFkIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSEgSXQgZGlyZWN0bHkgYWNjZXNzZWQgYHRtcC0mZ3Q7a2V5X2lkYCB3aXRob3V0IGNoZWNraW5nIGlmIGBjcy0mZ3Q7c2xvdHNbMF1gIG9yIGBjcy0mZ3Q7c2xvdHNbMV1gIHdhcyBhY3R1YWxseSB2YWxpZC4gVGhpcyBpcyBhIGNsZWFyIGJ1ZyBmaXgsIGVuc3VyaW5nIGB0bXBgIGlzIHZhbGlkIGJlZm9yZSBkZXJlZmVyZW5jaW5nLiBUaGlzIGlzICpnb29kKiwgYSBjbGFzc2ljIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB2dWxuZXJhYmlsaXR5IGZpeC4KMy4gIGBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2ZyZWVfd29ya2AgaGFzIGJlZW4gaW50cm9kdWNlZC4gVGhpcyBpcyBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSB3b3JrcXVldWUgYW5kIFJDVSBjbGVhbnVwLiBBZ2FpbiwgZXhwZWN0ZWQgd2l0aCB0aGUgd29ya3F1ZXVlIGNoYW5nZXMuCjQuICBUaGUgcmVvcmRlcmluZyBvZiBga2ZyZWVfc2tiYCBhbmQgYG92cG5fcGVlcl9wdXRgIGluIGBvdnBuX2RlY3J5cHRfcG9zdGAgYW5kIGBvdnBuX2VuY3J5cHRfcG9zdGAuIFByZXZpb3VzbHksIHRoZSBjb2RlIGZyZWVkIHRoZSBza2IgKmJlZm9yZSogcG9zc2libHkgcmVsZWFzaW5nIHRoZSBwZWVyLiBOb3cgd2UgaGF2ZSBhIHNhZmVyIG9yZGVyLiBUaGlzIGlzIGEgcG90ZW50aWFsIFVBRiBmaXg7IGl0JiMzOTtzIGEgZ29vZCBjaGFuZ2UuCjUuICBUaGUgYG92cG5fd3FgIGlzIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZCBhcHByb3ByaWF0ZWx5LiBTb3VuZHMgY2xlYW4sIG5vIGlzc3VlcyB0aGVyZS4KNi4gIFRoZSB3b3JrcXVldWUgY2FsbHMgYXJlIGJlaW5nIHJlcGxhY2VkIGNvbnNpc3RlbnRseS4gV29ya3F1ZXVlIG1hbmFnZW1lbnQsIG5vdGhpbmcgY3JpdGljYWwgaW4gaXRzZWxmLgoKQW5hbHl6aW5nIHRoZSBjb2RlOiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFkZCBjb21wbGV4IGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGUgY2hhbmdlcyBhcmUgbGFyZ2VseSBmb2N1c2VkIG9uOiB3b3JrcXVldWUgbWFuYWdlbWVudCAod2hpY2ggaXMgYSBzYWZlIHJlZmFjdG9yaW5nKSwgcHJvcGVyIFJDVSBkZXN0cnVjdGlvbiwgYW5kIGZpeGluZyBrbm93biBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gSW4gcGFydGljdWxhciwgdGhlIGNoYW5nZXMgdG8gYG92cG5fY3J5cHRvX2tpbGxfa2V5YCBhbmQgdGhlIHJlb3JkZXJpbmcgb2YgYGtmcmVlX3NrYmAgYXJlIGNyaXRpY2FsLCBjbGFzc2ljIGJ1ZyBmaXhlcy4gVGhlIHJlb3JkZXJpbmcgaXMgYWxtb3N0IGNlcnRhaW5seSB0byBhdm9pZCBVQUYsIHNvIGlzIGEgZ29vZCB0aGluZyB0byBmaW5kLgoKU2luY2UgdGhlc2UgY2hhbmdlcyBhZGRyZXNzIGtub3duIG1lbW9yeSBzYWZldHkgdnVsbmVyYWJpbGl0aWVzIGFuZCBpbXByb3ZlIGdlbmVyYWwgY29kZSBoeWdpZW5lLCAqYW5kKiBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgcmlza3kgYmVoYXZpb3IgaW4gdGVybXMgb2YgZGF0YSBzdHJ1Y3R1cmVzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBJIGNhbiBjb21mb3J0YWJseSBzYXkgdGhhdCBLTVNBTiBpcyB1bmxpa2VseSB0byBmbGFnIGFueXRoaW5nIGhlcmUuIFRoaXMgbG9va3MgbGlrZSBhIHN0YW5kYXJkIHNldCBvZiBidWcgZml4ZXMgYW5kIGltcHJvdmVtZW50cyB0byB3b3JrcXVldWUgbWFuYWdlbWVudC4gTm8gbmVlZCBmb3Igc3BlY2lhbCBLTVNBTiB0ZXN0aW5nLgoqKlRoZXJlZm9yZSwgdGhlIGFuc3dlciBpcyBOZWVkc0tNU0FOID0gZmFsc2UuKioKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMjE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gZml4aW5nIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBvdnBuX2NyeXB0b19raWxsX2tleWAsIHJlb3JkZXJpbmcgY2xlYW51cCBmdW5jdGlvbnMgdG8gcHJldmVudCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYnVncywgYW5kIG1pZ3JhdGluZyB3b3JrIGl0ZW1zIGZyb20gdGhlIHN5c3RlbSB3b3JrcXVldWUgdG8gYSBkZWRpY2F0ZWQgYG92cG5fd3FgIHdvcmtxdWV1ZS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG1lbW9yeSBzYWZldHkgaXNzdWVzIChOVUxMIGRlcmVmZXJlbmNlcywgVUFGKSBhbmQgY29uY3VycmVuY3kgbWFuYWdlbWVudCwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGNoYW5nZXMgdG8gZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBmb2N1c2VzIG9uIGZpeGluZyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgLCByZW9yZGVyaW5nIGNsZWFudXAgZnVuY3Rpb25zIHRvIHByZXZlbnQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIGFuZCBtaWdyYXRpbmcgd29yayBpdGVtcyBmcm9tIHRoZSBzeXN0ZW0gd29ya3F1ZXVlIHRvIGEgZGVkaWNhdGVkIGBvdnBuX3dxYCB3b3JrcXVldWUuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoTlVMTCBkZXJlZmVyZW5jZXMsIFVBRikgYW5kIGNvbmN1cnJlbmN5IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBubyBjaGFuZ2VzIHRvIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUyOjUwLjk2NDYzMDg1N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3ODM4OTMxMjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9WUE5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdnBuX2NyeXB0b19rZXlfc2xvdF9yZWxlYXNlXCIsXG4gICAgXCJvdnBuX2NyeXB0b19raWxsX2tleVwiLFxuICAgIFwib3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXdcIixcbiAgICBcIm92cG5fcGVlcl9rZWVwYWxpdmVfc2V0XCIsXG4gICAgXCJvdnBuX3BlZXJfa2VlcGFsaXZlX3dvcmtcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBmb2N1c2VzIG9uIGZpeGluZyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgLCByZW9yZGVyaW5nIGNsZWFudXAgZnVuY3Rpb25zIHRvIHByZXZlbnQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIGFuZCBtaWdyYXRpbmcgd29yayBpdGVtcyBmcm9tIHRoZSBzeXN0ZW0gd29ya3F1ZXVlIHRvIGEgZGVkaWNhdGVkIGBvdnBuX3dxYCB3b3JrcXVldWUuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoTlVMTCBkZXJlZmVyZW5jZXMsIFVBRikgYW5kIGNvbmN1cnJlbmN5IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBubyBjaGFuZ2VzIHRvIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWQgZHJpdmVyIChkcml2ZXJzL25ldC9vdnBuKS4gSXQgcmVwbGFjZXMgY2FsbF9yY3Ugd2l0aCBxdWV1ZV9yY3Vfd29yayBmb3IgZnJlZWluZyBjcnlwdG8ga2V5IHNsb3RzLCBpbnRyb2R1Y2VzIGEgZGVkaWNhdGVkIHdvcmtxdWV1ZSAob3Zwbl93cSkgZm9yIGFsbCBvdnBuLXNwZWNpZmljIHdvcmssIGFuZCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBvdnBuX2NyeXB0b19raWxsX2tleS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBhIHJlYWNoYWJsZSBuZXR3b3JrIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMjE6NTI6NTAuOTY0NjQwNTU3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTcwNjM1MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhOTVmMjZkYjUyMjJkNjJhMWZlMzkyNDBjNDhmOGUwYWViOTE2NjA5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDkgMjE6NTI6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmNcXG5pbmRleCA5MDU4MGUzMjA1MmZiLi43ZTU0NTQyODkwMGE5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmNcXG4rKysgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jXFxuQEAgLTE4LDIwICsxOCwxMiBAQFxcbiAjaW5jbHVkZSBcXFwiY3J5cHRvX2FlYWQuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImNyeXB0by5oXFxcIlxcbiBcXG4tc3RhdGljIHZvaWQgb3Zwbl9rc19kZXN0cm95X3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuLXtcXG4tXFx0c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcztcXG4tXFxuLVxcdGtzID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCwgcmN1KTtcXG4tXFx0b3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9kZXN0cm95KGtzKTtcXG4tfVxcbi1cXG4gdm9pZCBvdnBuX2NyeXB0b19rZXlfc2xvdF9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKVxcbiB7XFxuIFxcdHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3M7XFxuIFxcbiBcXHRrcyA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QsIHJlZmNvdW50KTtcXG4tXFx0Y2FsbF9yY3UoXFx1MDAyNmtzLVxcdTAwM2VyY3UsIG92cG5fa3NfZGVzdHJveV9yY3UpO1xcbitcXHRxdWV1ZV9yY3Vfd29yayhvdnBuX3dxLCBcXHUwMDI2a3MtXFx1MDAzZWZyZWVfd29yayk7XFxuIH1cXG4gXFxuIC8qIGNhbiBvbmx5IGJlIGludm9rZWQgd2hlbiBhbGwgcGVlciByZWZlcmVuY2VzIGhhdmUgYmVlbiBkcm9wcGVkIChpLmUuIFJDVVxcbkBAIC01OCwxNSArNTAsMTkgQEAgdm9pZCBvdnBuX2NyeXB0b19zdGF0ZV9yZWxlYXNlKHN0cnVjdCBvdnBuX2NyeXB0b19zdGF0ZSAqY3MpXFxuIGJvb2wgb3Zwbl9jcnlwdG9fa2lsbF9rZXkoc3RydWN0IG92cG5fY3J5cHRvX3N0YXRlICpjcywgdTgga2V5X2lkKVxcbiB7XFxuIFxcdHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MgPSBOVUxMO1xcbitcXHRzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKnRtcDtcXG4rXFx0aW50IHNsb3QgPSAwO1xcbiBcXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZjcy1cXHUwMDNlbG9jayk7XFxuLVxcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoY3MtXFx1MDAzZXNsb3RzWzBdKS1cXHUwMDNla2V5X2lkID09IGtleV9pZCkge1xcbi1cXHRcXHRrcyA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoY3MtXFx1MDAzZXNsb3RzWzBdLCBOVUxMLFxcbi1cXHRcXHRcXHRcXHRcXHQgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZjcy1cXHUwMDNlbG9jaykpO1xcbi1cXHR9IGVsc2UgaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihjcy1cXHUwMDNlc2xvdHNbMV0pLVxcdTAwM2VrZXlfaWQgPT0ga2V5X2lkKSB7XFxuLVxcdFxcdGtzID0gcmN1X3JlcGxhY2VfcG9pbnRlcihjcy1cXHUwMDNlc2xvdHNbMV0sIE5VTEwsXFxuLVxcdFxcdFxcdFxcdFxcdCBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNmNzLVxcdTAwM2Vsb2NrKSk7XFxuK1xcdHRtcCA9IHJjdV9hY2Nlc3NfcG9pbnRlcihjcy1cXHUwMDNlc2xvdHNbc2xvdF0pO1xcbitcXHRpZiAoIXRtcCB8fCB0bXAtXFx1MDAzZWtleV9pZCAhPSBrZXlfaWQpIHtcXG4rXFx0XFx0c2xvdCA9IDE7XFxuK1xcdFxcdHRtcCA9IHJjdV9hY2Nlc3NfcG9pbnRlcihjcy1cXHUwMDNlc2xvdHNbc2xvdF0pO1xcbiBcXHR9XFxuK1xcbitcXHRpZiAodG1wIFxcdTAwMjZcXHUwMDI2IHRtcC1cXHUwMDNla2V5X2lkID09IGtleV9pZClcXG4rXFx0XFx0a3MgPSByY3VfcmVwbGFjZV9wb2ludGVyKGNzLVxcdTAwM2VzbG90c1tzbG90XSwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0XFx0IGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2Y3MtXFx1MDAzZWxvY2spKTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmNzLVxcdTAwM2Vsb2NrKTtcXG4gXFxuIFxcdGlmIChrcylcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaCBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmhcXG5pbmRleCAwZTI4NGZlYzNhNzVhLi5lM2ZlYjE2ZDU0OTg1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmhcXG4rKysgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oXFxuQEAgLTEwLDYgKzEwLDggQEBcXG4gI2lmbmRlZiBfTkVUX09WUE5fT1ZQTkNSWVBUT19IX1xcbiAjZGVmaW5lIF9ORVRfT1ZQTl9PVlBOQ1JZUFRPX0hfXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcXHUwMDNlXFxuK1xcbiAjaW5jbHVkZSBcXFwicGt0aWQuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInByb3RvLmhcXFwiXFxuIFxcbkBAIC00NSw4ICs0Nyw4IEBAIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCB7XFxuIFxcbiBcXHRzdHJ1Y3Qgb3Zwbl9wa3RpZF9yZWN2IHBpZF9yZWN2IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XFxuIFxcdHN0cnVjdCBvdnBuX3BrdGlkX3htaXQgcGlkX3htaXQgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcXG4rXFx0c3RydWN0IHJjdV93b3JrIGZyZWVfd29yaztcXG4gXFx0c3RydWN0IGtyZWYgcmVmY291bnQ7XFxuLVxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuIH07XFxuIFxcbiBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmMgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmNcXG5pbmRleCA4ZjA3YzQxODYyMmIyLi43NGVhZjZmYWMyZjUyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuY1xcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuY1xcbkBAIC05LDYgKzksNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2NyeXB0by9hZWFkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2lwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaXB2Ni5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3VkcC5oXFx1MDAzZVxcbkBAIC0zODAsMTMgKzM4MSwxOSBAQCBzdGF0aWMgc3RydWN0IGNyeXB0b19hZWFkICpvdnBuX2FlYWRfaW5pdChjb25zdCBjaGFyICp0aXRsZSxcXG4gXFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4gfVxcbiBcXG4tdm9pZCBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2Rlc3Ryb3koc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcylcXG4rc3RhdGljIHZvaWQgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9mcmVlKHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MpXFxuIHtcXG4tXFx0aWYgKCFrcylcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4gXFx0Y3J5cHRvX2ZyZWVfYWVhZChrcy1cXHUwMDNlZW5jcnlwdCk7XFxuIFxcdGNyeXB0b19mcmVlX2FlYWQoa3MtXFx1MDAzZWRlY3J5cHQpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2ZyZWVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcztcXG4rXFxuK1xcdGtzID0gY29udGFpbmVyX29mKHRvX3JjdV93b3JrKHdvcmspLCBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QsXFxuK1xcdFxcdFxcdCAgZnJlZV93b3JrKTtcXG4rXFx0b3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9mcmVlKGtzKTtcXG4gXFx0a2ZyZWUoa3MpO1xcbiB9XFxuIFxcbkBAIC00MjAsNiArNDI3LDcgQEAgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXcoY29uc3Qgc3RydWN0IG92cG5fa2V5X2NvbmZpZyAqa2MpXFxuIFxcbiBcXHRrcy1cXHUwMDNlZW5jcnlwdCA9IE5VTEw7XFxuIFxcdGtzLVxcdTAwM2VkZWNyeXB0ID0gTlVMTDtcXG4rXFx0SU5JVF9SQ1VfV09SSyhcXHUwMDI2a3MtXFx1MDAzZWZyZWVfd29yaywgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9mcmVlX3dvcmspO1xcbiBcXHRrcmVmX2luaXQoXFx1MDAyNmtzLVxcdTAwM2VyZWZjb3VudCk7XFxuIFxcdGtzLVxcdTAwM2VrZXlfaWQgPSBrYy1cXHUwMDNla2V5X2lkO1xcbiBcXG5AQCAtNDUzLDcgKzQ2MSw4IEBAIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3KGNvbnN0IHN0cnVjdCBvdnBuX2tleV9jb25maWcgKmtjKVxcbiBcXHRyZXR1cm4ga3M7XFxuIFxcbiBkZXN0cm95X2tzOlxcbi1cXHRvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2Rlc3Ryb3koa3MpO1xcbitcXHRvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2ZyZWUoa3MpO1xcbitcXHRrZnJlZShrcyk7XFxuIFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaCBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaFxcbmluZGV4IDY1YTJmZjMwNzg5ODYuLmZhZTNiNTg1YTQzYjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5oXFxuKysrIGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5oXFxuQEAgLTIyLDcgKzIyLDYgQEAgaW50IG92cG5fYWVhZF9kZWNyeXB0KHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MsXFxuIFxcbiBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKlxcbiBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X25ldyhjb25zdCBzdHJ1Y3Qgb3Zwbl9rZXlfY29uZmlnICprYyk7XFxuLXZvaWQgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9kZXN0cm95KHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MpO1xcbiBcXG4gZW51bSBvdnBuX2NpcGhlcl9hbGcgb3Zwbl9hZWFkX2NyeXB0b19hbGcoc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcyk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2lvLmMgYi9kcml2ZXJzL25ldC9vdnBuL2lvLmNcXG5pbmRleCA5YTY2ZDY5MzAzOWEzLi45NTI2ZjgwOTZkYTYwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vaW8uY1xcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vaW8uY1xcbkBAIC0yMDQsMTAgKzIwNCwxMCBAQCB2b2lkIG92cG5fZGVjcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpXFxuIFxcdFxcdG92cG5fZGV2X2RzdGF0c19yeF9kcm9wcGVkKHBlZXItXFx1MDAzZW92cG4tXFx1MDAzZWRldik7XFxuIFxcdGtmcmVlX3NrYihza2IpO1xcbiBkcm9wX25vY291bnQ6XFxuLVxcdGlmIChsaWtlbHkocGVlcikpXFxuLVxcdFxcdG92cG5fcGVlcl9wdXQocGVlcik7XFxuIFxcdGlmIChsaWtlbHkoa3MpKVxcbiBcXHRcXHRvdnBuX2NyeXB0b19rZXlfc2xvdF9wdXQoa3MpO1xcbitcXHRpZiAobGlrZWx5KHBlZXIpKVxcbitcXHRcXHRvdnBuX3BlZXJfcHV0KHBlZXIpO1xcbiB9XFxuIFxcbiAvKiBSWCBwYXRoIGVudHJ5IHBvaW50OiBkZWNyeXB0IHBhY2tldCBhbmQgZm9yd2FyZCBpdCB0byB0aGUgZGV2aWNlICovXFxuQEAgLTMwMiwxMSArMzAyLDExIEBAIHZvaWQgb3Zwbl9lbmNyeXB0X3Bvc3Qodm9pZCAqZGF0YSwgaW50IHJldClcXG4gZXJyOlxcbiBcXHRpZiAodW5saWtlbHkoc2tiKSlcXG4gXFx0XFx0b3Zwbl9kZXZfZHN0YXRzX3R4X2Ryb3BwZWQocGVlci1cXHUwMDNlb3Zwbi1cXHUwMDNlZGV2KTtcXG4tXFx0aWYgKGxpa2VseShwZWVyKSlcXG4tXFx0XFx0b3Zwbl9wZWVyX3B1dChwZWVyKTtcXG4rXFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcdGlmIChsaWtlbHkoa3MpKVxcbiBcXHRcXHRvdnBuX2NyeXB0b19rZXlfc2xvdF9wdXQoa3MpO1xcbi1cXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0aWYgKGxpa2VseShwZWVyKSlcXG4rXFx0XFx0b3Zwbl9wZWVyX3B1dChwZWVyKTtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgb3Zwbl9lbmNyeXB0X29uZShzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL21haW4uYyBiL2RyaXZlcnMvbmV0L292cG4vbWFpbi5jXFxuaW5kZXggMTY4Y2ZlOWI1OWE5OC4uMDcwODI0OWU5NjA3YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vbWFpbi5jXFxuQEAgLTEyLDYgKzEyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbmV0ZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9ncm9fY2VsbHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3J0bmV0bGluay5oXFx1MDAzZVxcbkBAIC0yNiw2ICsyNyw5IEBAXFxuICNpbmNsdWRlIFxcXCJ0Y3AuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInVkcC5oXFxcIlxcbiBcXG4rLyogbW9kdWxlLW93bmVkIHdvcmtxdWV1ZSBvbiB3aGljaCBhbGwgb3Zwbi1zcGVjaWZpYyB3b3JrIGlzIHF1ZXVlZCAqL1xcbitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqb3Zwbl93cTtcXG4rXFxuIHN0YXRpYyB2b2lkIG92cG5fcHJpdl9mcmVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXFxuIHtcXG4gXFx0c3RydWN0IG92cG5fcHJpdiAqb3ZwbiA9IG5ldGRldl9wcml2KG5ldCk7XFxuQEAgLTI2NCwxMCArMjY4LDE2IEBAIHN0YXRpYyBpbnQgX19pbml0IG92cG5faW5pdCh2b2lkKVxcbiBcXG4gXFx0b3Zwbl90Y3BfaW5pdCgpO1xcbiBcXG4rXFx0b3Zwbl93cSA9IGFsbG9jX3dvcmtxdWV1ZShcXFwib3ZwblxcXCIsIFdRX1BFUkNQVSwgMCk7XFxuK1xcdGlmICghb3Zwbl93cSkge1xcbitcXHRcXHRwcl9lcnIoXFxcIm92cG46IGNhbm5vdCBhbGxvY2F0ZSB3b3JrcXVldWVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4gXFx0ZXJyID0gcnRubF9saW5rX3JlZ2lzdGVyKFxcdTAwMjZvdnBuX2xpbmtfb3BzKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRwcl9lcnIoXFxcIm92cG46IGNhbid0IHJlZ2lzdGVyIHJ0bmwgbGluayBvcHM6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRnb3RvIGRlc3Ryb3lfd3E7XFxuIFxcdH1cXG4gXFxuIFxcdGVyciA9IG92cG5fbmxfcmVnaXN0ZXIoKTtcXG5AQCAtMjgwLDYgKzI5MCw5IEBAIHN0YXRpYyBpbnQgX19pbml0IG92cG5faW5pdCh2b2lkKVxcbiBcXG4gdW5yZWdfcnRubDpcXG4gXFx0cnRubF9saW5rX3VucmVnaXN0ZXIoXFx1MDAyNm92cG5fbGlua19vcHMpO1xcbitkZXN0cm95X3dxOlxcbitcXHRkZXN0cm95X3dvcmtxdWV1ZShvdnBuX3dxKTtcXG4rXFx0b3Zwbl93cSA9IE5VTEw7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTI4OCw3ICszMDEsMTEgQEAgc3RhdGljIF9fZXhpdCB2b2lkIG92cG5fY2xlYW51cCh2b2lkKVxcbiBcXHRvdnBuX25sX3VucmVnaXN0ZXIoKTtcXG4gXFx0cnRubF9saW5rX3VucmVnaXN0ZXIoXFx1MDAyNm92cG5fbGlua19vcHMpO1xcbiBcXG4rXFx0Zmx1c2hfd29ya3F1ZXVlKG92cG5fd3EpO1xcbiBcXHRyY3VfYmFycmllcigpO1xcbitcXG4rXFx0ZGVzdHJveV93b3JrcXVldWUob3Zwbl93cSk7XFxuK1xcdG92cG5fd3EgPSBOVUxMO1xcbiB9XFxuIFxcbiBtb2R1bGVfaW5pdChvdnBuX2luaXQpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL292cG5wcml2LmggYi9kcml2ZXJzL25ldC9vdnBuL292cG5wcml2LmhcXG5pbmRleCA1ODk4ZjZhZGFkYTdmLi44NDQ5OTE0MGU0YmQ5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vb3ZwbnByaXYuaFxcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vb3ZwbnByaXYuaFxcbkBAIC0xNSw2ICsxNSwxMCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9pZl9saW5rLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L292cG4uaFxcdTAwM2VcXG4gXFxuK3N0cnVjdCB3b3JrcXVldWVfc3RydWN0O1xcbitcXG4rZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpvdnBuX3dxO1xcbitcXG4gLyoqXFxuICAqIHN0cnVjdCBvdnBuX3BlZXJfY29sbGVjdGlvbiAtIGNvbnRhaW5lciBvZiBwZWVycyBmb3IgTXVsdGlQZWVyIG1vZGVcXG4gICogQGJ5X2lkOiB0YWJsZSBvZiBwZWVycyBpbmRleCBieSBJRFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL3BlZXIuYyBiL2RyaXZlcnMvbmV0L292cG4vcGVlci5jXFxuaW5kZXggYjA1MTlmOTg0MGQ4My4uYzk1NjU2Y2E3YzM1NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL3BlZXIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vcGVlci5jXFxuQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBvdnBuX3BlZXJfa2VlcGFsaXZlX3NldChzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCB1MzIgaW50ZXJ2YWwsIHUzMiB0aW1lb3V0KVxcbiBcXHQvKiBub3cgdGhhdCBpbnRlcnZhbCBhbmQgdGltZW91dCBoYXZlIGJlZW4gY2hhbmdlZCwga2lja1xcbiBcXHQgKiBvZmYgdGhlIHdvcmtlciBzbyB0aGF0IHRoZSBuZXh0IGRlbGF5IGNhbiBiZSByZWNvbXB1dGVkXFxuIFxcdCAqL1xcbi1cXHRtb2RfZGVsYXllZF93b3JrKHN5c3RlbV9wZXJjcHVfd3EsIFxcdTAwMjZwZWVyLVxcdTAwM2VvdnBuLVxcdTAwM2VrZWVwYWxpdmVfd29yaywgMCk7XFxuK1xcdG1vZF9kZWxheWVkX3dvcmsob3Zwbl93cSwgXFx1MDAyNnBlZXItXFx1MDAzZW92cG4tXFx1MDAzZWtlZXBhbGl2ZV93b3JrLCAwKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTEzNzEsNyArMTM3MSw3IEBAIHN0YXRpYyB0aW1lNjRfdCBvdnBuX3BlZXJfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsXFxuIFxcdFxcdFxcdCAgIHBlZXItXFx1MDAzZWlkKTtcXG4gXFx0XFx0aWYgKFdBUk5fT04oIW92cG5fcGVlcl9ob2xkKHBlZXIpKSlcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuLVxcdFxcdGlmICghc2NoZWR1bGVfd29yayhcXHUwMDI2cGVlci1cXHUwMDNla2VlcGFsaXZlX3dvcmspKVxcbitcXHRcXHRpZiAoIXF1ZXVlX3dvcmsob3Zwbl93cSwgXFx1MDAyNnBlZXItXFx1MDAzZWtlZXBhbGl2ZV93b3JrKSlcXG4gXFx0XFx0XFx0b3Zwbl9wZWVyX3B1dChwZWVyKTtcXG4gXFx0fVxcbiBcXG5AQCAtMTQ2Myw4ICsxNDYzLDggQEAgdm9pZCBvdnBuX3BlZXJfa2VlcGFsaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRcXHRuZXRkZXZfZGJnKG92cG4tXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0ICAgXFxcInNjaGVkdWxpbmcga2VlcGFsaXZlIHdvcms6IG5vdz0lbGx1IG5leHRfcnVuPSVsbHUgZGVsdGE9JWxsdVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgbmV4dF9ydW4sIG5vdywgbmV4dF9ydW4gLSBub3cpO1xcbi1cXHRcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNm92cG4tXFx1MDAzZWtlZXBhbGl2ZV93b3JrLFxcbi1cXHRcXHRcXHRcXHQgICAgICAobmV4dF9ydW4gLSBub3cpICogSFopO1xcbitcXHRcXHRxdWV1ZV9kZWxheWVkX3dvcmsob3Zwbl93cSwgXFx1MDAyNm92cG4tXFx1MDAzZWtlZXBhbGl2ZV93b3JrLFxcbitcXHRcXHRcXHRcXHQgICAobmV4dF9ydW4gLSBub3cpICogSFopO1xcbiBcXHR9XFxuIFxcdHVubG9ja19vdnBuKG92cG4sIFxcdTAwMjZyZWxlYXNlX2xpc3QpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vdGNwLmMgYi9kcml2ZXJzL25ldC9vdnBuL3RjcC5jXFxuaW5kZXggMGFmMTQwNTVjMzlhYS4uOGZlOGE4ZTc1MGE0MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL3RjcC5jXFxuKysrIGIvZHJpdmVycy9uZXQvb3Zwbi90Y3AuY1xcbkBAIC0xNTEsNyArMTUxLDcgQEAgc3RhdGljIHZvaWQgb3Zwbl90Y3BfcmN2KHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdC8qIHRha2UgcmVmZXJlbmNlIGZvciBkZWZlcnJlZCBwZWVyIGRlbGV0aW9uLiBzaG91bGQgbmV2ZXIgZmFpbCAqL1xcbiBcXHRpZiAoV0FSTl9PTighb3Zwbl9wZWVyX2hvbGQocGVlcikpKVxcbiBcXHRcXHRnb3RvIGVycl9ub3BlZXI7XFxuLVxcdGlmICghc2NoZWR1bGVfd29yayhcXHUwMDI2cGVlci1cXHUwMDNldGNwLmRlZmVyX2RlbF93b3JrKSlcXG4rXFx0aWYgKCFxdWV1ZV93b3JrKG92cG5fd3EsIFxcdTAwMjZwZWVyLVxcdTAwM2V0Y3AuZGVmZXJfZGVsX3dvcmspKVxcbiBcXHRcXHRvdnBuX3BlZXJfcHV0KHBlZXIpO1xcbiBcXHRvdnBuX2Rldl9kc3RhdHNfcnhfZHJvcHBlZChwZWVyLVxcdTAwM2VvdnBuLVxcdTAwM2VkZXYpO1xcbiBlcnJfbm9wZWVyOlxcbkBAIC0yODQsMTMgKzI4NCwxMiBAQCBzdGF0aWMgdm9pZCBvdnBuX3RjcF9zZW5kX3NvY2soc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNvY2sgKnNrKVxcbiBcXHRcXHRcXHQgKiBzdHJlYW0gdGhlcmVmb3JlIHdlIGFib3J0IHRoZSBjb25uZWN0aW9uXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRvdnBuX3BlZXJfaG9sZChwZWVyKTtcXG4tXFx0XFx0XFx0aWYgKCFzY2hlZHVsZV93b3JrKFxcdTAwMjZwZWVyLVxcdTAwM2V0Y3AuZGVmZXJfZGVsX3dvcmspKVxcbitcXHRcXHRcXHRpZiAoIXF1ZXVlX3dvcmsob3Zwbl93cSwgXFx1MDAyNnBlZXItXFx1MDAzZXRjcC5kZWZlcl9kZWxfd29yaykpXFxuIFxcdFxcdFxcdFxcdG92cG5fcGVlcl9wdXQocGVlcik7XFxuIFxcbiBcXHRcXHRcXHQvKiB3ZSBiYWlsIG91dCBpbW1lZGlhdGVseSBhbmQga2VlcCB0eF9pbl9wcm9ncmVzcyBzZXRcXG4gXFx0XFx0XFx0ICogdG8gdHJ1ZS4gVGhpcyB3YXkgd2UgcHJldmVudCBtb3JlIFRYIGF0dGVtcHRzXFxuLVxcdFxcdFxcdCAqIHdoaWNoIHdvdWxkIGxlYWQgdG8gbW9yZSBpbnZvY2F0aW9ucyBvZlxcbi1cXHRcXHRcXHQgKiBzY2hlZHVsZV93b3JrKClcXG4rXFx0XFx0XFx0ICogd2hpY2ggd291bGQgbGVhZCB0byBtb3JlIGludm9jYXRpb25zIG9mIHF1ZXVlX3dvcmsoKVxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHR9XFxuQEAgLTQ4Nyw3ICs0ODYsNyBAQCBzdGF0aWMgdm9pZCBvdnBuX3RjcF93cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0c29jayA9IHJjdV9kZXJlZmVyZW5jZV9za191c2VyX2RhdGEoc2spO1xcbiBcXHRpZiAobGlrZWx5KHNvY2sgXFx1MDAyNlxcdTAwMjYgc29jay1cXHUwMDNlcGVlcikpIHtcXG4tXFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2c29jay1cXHUwMDNldGNwX3R4X3dvcmspO1xcbitcXHRcXHRxdWV1ZV93b3JrKG92cG5fd3EsIFxcdTAwMjZzb2NrLVxcdTAwM2V0Y3BfdHhfd29yayk7XFxuIFxcdFxcdHNvY2stXFx1MDAzZXBlZXItXFx1MDAzZXRjcC5za19jYi5za193cml0ZV9zcGFjZShzayk7XFxuIFxcdH1cXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUyOjUxLjQ4MjU3MDA0M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQyMjgyOTY5OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9WUE5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdnBuX2NyeXB0b19rZXlfc2xvdF9yZWxlYXNlXCIsXG4gICAgXCJvdnBuX2NyeXB0b19raWxsX2tleVwiLFxuICAgIFwib3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXdcIixcbiAgICBcIm92cG5fcGVlcl9rZWVwYWxpdmVfc2V0XCIsXG4gICAgXCJvdnBuX3BlZXJfa2VlcGFsaXZlX3dvcmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgT3BlblZQTiBkYXRhIGNoYW5uZWwgb2ZmbG9hZCBkcml2ZXIgKGRyaXZlcnMvbmV0L292cG4pLiBJdCByZXBsYWNlcyBjYWxsX3JjdSB3aXRoIHF1ZXVlX3JjdV93b3JrIGZvciBmcmVlaW5nIGNyeXB0byBrZXkgc2xvdHMsIGludHJvZHVjZXMgYSBkZWRpY2F0ZWQgd29ya3F1ZXVlIChvdnBuX3dxKSBmb3IgYWxsIG92cG4tc3BlY2lmaWMgd29yaywgYW5kIGZpeGVzIGEgbG9naWMgYnVnIGluIG92cG5fY3J5cHRvX2tpbGxfa2V5LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGEgcmVhY2hhYmxlIG5ldHdvcmsgZHJpdmVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhOTVmMjZkYjUyMjJkNjJhMWZlMzkyNDBjNDhmOGUwYWViOTE2NjA5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgOSAyMTo1Mjo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmMgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jXG5pbmRleCA5MDU4MGUzMjA1MmZiLi43ZTU0NTQyODkwMGE5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uY1xuKysrIGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uY1xuQEAgLTE4LDIwICsxOCwxMiBAQFxuICNpbmNsdWRlIFwiY3J5cHRvX2FlYWQuaFwiXG4gI2luY2x1ZGUgXCJjcnlwdG8uaFwiXG4gXG4tc3RhdGljIHZvaWQgb3Zwbl9rc19kZXN0cm95X3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4te1xuLVx0c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcztcbi1cbi1cdGtzID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCwgcmN1KTtcbi1cdG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZGVzdHJveShrcyk7XG4tfVxuLVxuIHZvaWQgb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiB7XG4gXHRzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzO1xuIFxuIFx0a3MgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90LCByZWZjb3VudCk7XG4tXHRjYWxsX3JjdShcdTAwMjZrcy1cdTAwM2VyY3UsIG92cG5fa3NfZGVzdHJveV9yY3UpO1xuK1x0cXVldWVfcmN1X3dvcmsob3Zwbl93cSwgXHUwMDI2a3MtXHUwMDNlZnJlZV93b3JrKTtcbiB9XG4gXG4gLyogY2FuIG9ubHkgYmUgaW52b2tlZCB3aGVuIGFsbCBwZWVyIHJlZmVyZW5jZXMgaGF2ZSBiZWVuIGRyb3BwZWQgKGkuZS4gUkNVXG5AQCAtNTgsMTUgKzUwLDE5IEBAIHZvaWQgb3Zwbl9jcnlwdG9fc3RhdGVfcmVsZWFzZShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzKVxuIGJvb2wgb3Zwbl9jcnlwdG9fa2lsbF9rZXkoc3RydWN0IG92cG5fY3J5cHRvX3N0YXRlICpjcywgdTgga2V5X2lkKVxuIHtcbiBcdHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MgPSBOVUxMO1xuK1x0c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICp0bXA7XG4rXHRpbnQgc2xvdCA9IDA7XG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2Y3MtXHUwMDNlbG9jayk7XG4tXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNzLVx1MDAzZXNsb3RzWzBdKS1cdTAwM2VrZXlfaWQgPT0ga2V5X2lkKSB7XG4tXHRcdGtzID0gcmN1X3JlcGxhY2VfcG9pbnRlcihjcy1cdTAwM2VzbG90c1swXSwgTlVMTCxcbi1cdFx0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZjcy1cdTAwM2Vsb2NrKSk7XG4tXHR9IGVsc2UgaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihjcy1cdTAwM2VzbG90c1sxXSktXHUwMDNla2V5X2lkID09IGtleV9pZCkge1xuLVx0XHRrcyA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoY3MtXHUwMDNlc2xvdHNbMV0sIE5VTEwsXG4tXHRcdFx0XHRcdCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2Y3MtXHUwMDNlbG9jaykpO1xuK1x0dG1wID0gcmN1X2FjY2Vzc19wb2ludGVyKGNzLVx1MDAzZXNsb3RzW3Nsb3RdKTtcbitcdGlmICghdG1wIHx8IHRtcC1cdTAwM2VrZXlfaWQgIT0ga2V5X2lkKSB7XG4rXHRcdHNsb3QgPSAxO1xuK1x0XHR0bXAgPSByY3VfYWNjZXNzX3BvaW50ZXIoY3MtXHUwMDNlc2xvdHNbc2xvdF0pO1xuIFx0fVxuK1xuK1x0aWYgKHRtcCBcdTAwMjZcdTAwMjYgdG1wLVx1MDAzZWtleV9pZCA9PSBrZXlfaWQpXG4rXHRcdGtzID0gcmN1X3JlcGxhY2VfcG9pbnRlcihjcy1cdTAwM2VzbG90c1tzbG90XSwgTlVMTCxcbitcdFx0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZjcy1cdTAwM2Vsb2NrKSk7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZjcy1cdTAwM2Vsb2NrKTtcbiBcbiBcdGlmIChrcylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oIGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaFxuaW5kZXggMGUyODRmZWMzYTc1YS4uZTNmZWIxNmQ1NDk4NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmhcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmhcbkBAIC0xMCw2ICsxMCw4IEBAXG4gI2lmbmRlZiBfTkVUX09WUE5fT1ZQTkNSWVBUT19IX1xuICNkZWZpbmUgX05FVF9PVlBOX09WUE5DUllQVE9fSF9cbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuK1xuICNpbmNsdWRlIFwicGt0aWQuaFwiXG4gI2luY2x1ZGUgXCJwcm90by5oXCJcbiBcbkBAIC00NSw4ICs0Nyw4IEBAIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCB7XG4gXG4gXHRzdHJ1Y3Qgb3Zwbl9wa3RpZF9yZWN2IHBpZF9yZWN2IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4gXHRzdHJ1Y3Qgb3Zwbl9wa3RpZF94bWl0IHBpZF94bWl0IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4rXHRzdHJ1Y3QgcmN1X3dvcmsgZnJlZV93b3JrO1xuIFx0c3RydWN0IGtyZWYgcmVmY291bnQ7XG4tXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuIH07XG4gXG4gc3RydWN0IG92cG5fY3J5cHRvX3N0YXRlIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmMgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmNcbmluZGV4IDhmMDdjNDE4NjIyYjIuLjc0ZWFmNmZhYzJmNTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmNcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuY1xuQEAgLTksNiArOSw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjY3J5cHRvL2FlYWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcHY2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdWRwLmhcdTAwM2VcbkBAIC0zODAsMTMgKzM4MSwxOSBAQCBzdGF0aWMgc3RydWN0IGNyeXB0b19hZWFkICpvdnBuX2FlYWRfaW5pdChjb25zdCBjaGFyICp0aXRsZSxcbiBcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gfVxuIFxuLXZvaWQgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9kZXN0cm95KHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MpXG4rc3RhdGljIHZvaWQgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9mcmVlKHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MpXG4ge1xuLVx0aWYgKCFrcylcbi1cdFx0cmV0dXJuO1xuLVxuIFx0Y3J5cHRvX2ZyZWVfYWVhZChrcy1cdTAwM2VlbmNyeXB0KTtcbiBcdGNyeXB0b19mcmVlX2FlYWQoa3MtXHUwMDNlZGVjcnlwdCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZnJlZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzO1xuK1xuK1x0a3MgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCxcbitcdFx0XHQgIGZyZWVfd29yayk7XG4rXHRvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2ZyZWUoa3MpO1xuIFx0a2ZyZWUoa3MpO1xuIH1cbiBcbkBAIC00MjAsNiArNDI3LDcgQEAgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXcoY29uc3Qgc3RydWN0IG92cG5fa2V5X2NvbmZpZyAqa2MpXG4gXG4gXHRrcy1cdTAwM2VlbmNyeXB0ID0gTlVMTDtcbiBcdGtzLVx1MDAzZWRlY3J5cHQgPSBOVUxMO1xuK1x0SU5JVF9SQ1VfV09SSyhcdTAwMjZrcy1cdTAwM2VmcmVlX3dvcmssIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZnJlZV93b3JrKTtcbiBcdGtyZWZfaW5pdChcdTAwMjZrcy1cdTAwM2VyZWZjb3VudCk7XG4gXHRrcy1cdTAwM2VrZXlfaWQgPSBrYy1cdTAwM2VrZXlfaWQ7XG4gXG5AQCAtNDUzLDcgKzQ2MSw4IEBAIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3KGNvbnN0IHN0cnVjdCBvdnBuX2tleV9jb25maWcgKmtjKVxuIFx0cmV0dXJuIGtzO1xuIFxuIGRlc3Ryb3lfa3M6XG4tXHRvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2Rlc3Ryb3koa3MpO1xuK1x0b3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9mcmVlKGtzKTtcbitcdGtmcmVlKGtzKTtcbiBcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaCBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaFxuaW5kZXggNjVhMmZmMzA3ODk4Ni4uZmFlM2I1ODVhNDNiMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaFxuKysrIGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5oXG5AQCAtMjIsNyArMjIsNiBAQCBpbnQgb3Zwbl9hZWFkX2RlY3J5cHQoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcyxcbiBcbiBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKlxuIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3KGNvbnN0IHN0cnVjdCBvdnBuX2tleV9jb25maWcgKmtjKTtcbi12b2lkIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZGVzdHJveShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzKTtcbiBcbiBlbnVtIG92cG5fY2lwaGVyX2FsZyBvdnBuX2FlYWRfY3J5cHRvX2FsZyhzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2lvLmMgYi9kcml2ZXJzL25ldC9vdnBuL2lvLmNcbmluZGV4IDlhNjZkNjkzMDM5YTMuLjk1MjZmODA5NmRhNjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL2lvLmNcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vaW8uY1xuQEAgLTIwNCwxMCArMjA0LDEwIEBAIHZvaWQgb3Zwbl9kZWNyeXB0X3Bvc3Qodm9pZCAqZGF0YSwgaW50IHJldClcbiBcdFx0b3Zwbl9kZXZfZHN0YXRzX3J4X2Ryb3BwZWQocGVlci1cdTAwM2VvdnBuLVx1MDAzZWRldik7XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBkcm9wX25vY291bnQ6XG4tXHRpZiAobGlrZWx5KHBlZXIpKVxuLVx0XHRvdnBuX3BlZXJfcHV0KHBlZXIpO1xuIFx0aWYgKGxpa2VseShrcykpXG4gXHRcdG92cG5fY3J5cHRvX2tleV9zbG90X3B1dChrcyk7XG4rXHRpZiAobGlrZWx5KHBlZXIpKVxuK1x0XHRvdnBuX3BlZXJfcHV0KHBlZXIpO1xuIH1cbiBcbiAvKiBSWCBwYXRoIGVudHJ5IHBvaW50OiBkZWNyeXB0IHBhY2tldCBhbmQgZm9yd2FyZCBpdCB0byB0aGUgZGV2aWNlICovXG5AQCAtMzAyLDExICszMDIsMTEgQEAgdm9pZCBvdnBuX2VuY3J5cHRfcG9zdCh2b2lkICpkYXRhLCBpbnQgcmV0KVxuIGVycjpcbiBcdGlmICh1bmxpa2VseShza2IpKVxuIFx0XHRvdnBuX2Rldl9kc3RhdHNfdHhfZHJvcHBlZChwZWVyLVx1MDAzZW92cG4tXHUwMDNlZGV2KTtcbi1cdGlmIChsaWtlbHkocGVlcikpXG4tXHRcdG92cG5fcGVlcl9wdXQocGVlcik7XG4rXHRrZnJlZV9za2Ioc2tiKTtcbiBcdGlmIChsaWtlbHkoa3MpKVxuIFx0XHRvdnBuX2NyeXB0b19rZXlfc2xvdF9wdXQoa3MpO1xuLVx0a2ZyZWVfc2tiKHNrYik7XG4rXHRpZiAobGlrZWx5KHBlZXIpKVxuK1x0XHRvdnBuX3BlZXJfcHV0KHBlZXIpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBvdnBuX2VuY3J5cHRfb25lKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBza19idWZmICpza2IpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9tYWluLmMgYi9kcml2ZXJzL25ldC9vdnBuL21haW4uY1xuaW5kZXggMTY4Y2ZlOWI1OWE5OC4uMDcwODI0OWU5NjA3YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9vdnBuL21haW4uY1xuQEAgLTEyLDYgKzEyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5ldGRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZ3JvX2NlbGxzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9ydG5ldGxpbmsuaFx1MDAzZVxuQEAgLTI2LDYgKzI3LDkgQEBcbiAjaW5jbHVkZSBcInRjcC5oXCJcbiAjaW5jbHVkZSBcInVkcC5oXCJcbiBcbisvKiBtb2R1bGUtb3duZWQgd29ya3F1ZXVlIG9uIHdoaWNoIGFsbCBvdnBuLXNwZWNpZmljIHdvcmsgaXMgcXVldWVkICovXG4rc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm92cG5fd3E7XG4rXG4gc3RhdGljIHZvaWQgb3Zwbl9wcml2X2ZyZWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbiB7XG4gXHRzdHJ1Y3Qgb3Zwbl9wcml2ICpvdnBuID0gbmV0ZGV2X3ByaXYobmV0KTtcbkBAIC0yNjQsMTAgKzI2OCwxNiBAQCBzdGF0aWMgaW50IF9faW5pdCBvdnBuX2luaXQodm9pZClcbiBcbiBcdG92cG5fdGNwX2luaXQoKTtcbiBcbitcdG92cG5fd3EgPSBhbGxvY193b3JrcXVldWUoXCJvdnBuXCIsIFdRX1BFUkNQVSwgMCk7XG4rXHRpZiAoIW92cG5fd3EpIHtcbitcdFx0cHJfZXJyKFwib3ZwbjogY2Fubm90IGFsbG9jYXRlIHdvcmtxdWV1ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4gXHRlcnIgPSBydG5sX2xpbmtfcmVnaXN0ZXIoXHUwMDI2b3Zwbl9saW5rX29wcyk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdHByX2VycihcIm92cG46IGNhbid0IHJlZ2lzdGVyIHJ0bmwgbGluayBvcHM6ICVkXFxuXCIsIGVycik7XG4tXHRcdHJldHVybiBlcnI7XG4rXHRcdGdvdG8gZGVzdHJveV93cTtcbiBcdH1cbiBcbiBcdGVyciA9IG92cG5fbmxfcmVnaXN0ZXIoKTtcbkBAIC0yODAsNiArMjkwLDkgQEAgc3RhdGljIGludCBfX2luaXQgb3Zwbl9pbml0KHZvaWQpXG4gXG4gdW5yZWdfcnRubDpcbiBcdHJ0bmxfbGlua191bnJlZ2lzdGVyKFx1MDAyNm92cG5fbGlua19vcHMpO1xuK2Rlc3Ryb3lfd3E6XG4rXHRkZXN0cm95X3dvcmtxdWV1ZShvdnBuX3dxKTtcbitcdG92cG5fd3EgPSBOVUxMO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMjg4LDcgKzMwMSwxMSBAQCBzdGF0aWMgX19leGl0IHZvaWQgb3Zwbl9jbGVhbnVwKHZvaWQpXG4gXHRvdnBuX25sX3VucmVnaXN0ZXIoKTtcbiBcdHJ0bmxfbGlua191bnJlZ2lzdGVyKFx1MDAyNm92cG5fbGlua19vcHMpO1xuIFxuK1x0Zmx1c2hfd29ya3F1ZXVlKG92cG5fd3EpO1xuIFx0cmN1X2JhcnJpZXIoKTtcbitcbitcdGRlc3Ryb3lfd29ya3F1ZXVlKG92cG5fd3EpO1xuK1x0b3Zwbl93cSA9IE5VTEw7XG4gfVxuIFxuIG1vZHVsZV9pbml0KG92cG5faW5pdCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9vdnBucHJpdi5oIGIvZHJpdmVycy9uZXQvb3Zwbi9vdnBucHJpdi5oXG5pbmRleCA1ODk4ZjZhZGFkYTdmLi44NDQ5OTE0MGU0YmQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9vdnBucHJpdi5oXG4rKysgYi9kcml2ZXJzL25ldC9vdnBuL292cG5wcml2LmhcbkBAIC0xNSw2ICsxNSwxMCBAQFxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvaWZfbGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9vdnBuLmhcdTAwM2VcbiBcbitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdDtcbitcbitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm92cG5fd3E7XG4rXG4gLyoqXG4gICogc3RydWN0IG92cG5fcGVlcl9jb2xsZWN0aW9uIC0gY29udGFpbmVyIG9mIHBlZXJzIGZvciBNdWx0aVBlZXIgbW9kZVxuICAqIEBieV9pZDogdGFibGUgb2YgcGVlcnMgaW5kZXggYnkgSURcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL3BlZXIuYyBiL2RyaXZlcnMvbmV0L292cG4vcGVlci5jXG5pbmRleCBiMDUxOWY5ODQwZDgzLi5jOTU2NTZjYTdjMzU3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmNcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vcGVlci5jXG5AQCAtNjIsNyArNjIsNyBAQCB2b2lkIG92cG5fcGVlcl9rZWVwYWxpdmVfc2V0KHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHUzMiBpbnRlcnZhbCwgdTMyIHRpbWVvdXQpXG4gXHQvKiBub3cgdGhhdCBpbnRlcnZhbCBhbmQgdGltZW91dCBoYXZlIGJlZW4gY2hhbmdlZCwga2lja1xuIFx0ICogb2ZmIHRoZSB3b3JrZXIgc28gdGhhdCB0aGUgbmV4dCBkZWxheSBjYW4gYmUgcmVjb21wdXRlZFxuIFx0ICovXG4tXHRtb2RfZGVsYXllZF93b3JrKHN5c3RlbV9wZXJjcHVfd3EsIFx1MDAyNnBlZXItXHUwMDNlb3Zwbi1cdTAwM2VrZWVwYWxpdmVfd29yaywgMCk7XG4rXHRtb2RfZGVsYXllZF93b3JrKG92cG5fd3EsIFx1MDAyNnBlZXItXHUwMDNlb3Zwbi1cdTAwM2VrZWVwYWxpdmVfd29yaywgMCk7XG4gfVxuIFxuIC8qKlxuQEAgLTEzNzEsNyArMTM3MSw3IEBAIHN0YXRpYyB0aW1lNjRfdCBvdnBuX3BlZXJfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsXG4gXHRcdFx0ICAgcGVlci1cdTAwM2VpZCk7XG4gXHRcdGlmIChXQVJOX09OKCFvdnBuX3BlZXJfaG9sZChwZWVyKSkpXG4gXHRcdFx0cmV0dXJuIDA7XG4tXHRcdGlmICghc2NoZWR1bGVfd29yayhcdTAwMjZwZWVyLVx1MDAzZWtlZXBhbGl2ZV93b3JrKSlcbitcdFx0aWYgKCFxdWV1ZV93b3JrKG92cG5fd3EsIFx1MDAyNnBlZXItXHUwMDNla2VlcGFsaXZlX3dvcmspKVxuIFx0XHRcdG92cG5fcGVlcl9wdXQocGVlcik7XG4gXHR9XG4gXG5AQCAtMTQ2Myw4ICsxNDYzLDggQEAgdm9pZCBvdnBuX3BlZXJfa2VlcGFsaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRuZXRkZXZfZGJnKG92cG4tXHUwMDNlZGV2LFxuIFx0XHRcdCAgIFwic2NoZWR1bGluZyBrZWVwYWxpdmUgd29yazogbm93PSVsbHUgbmV4dF9ydW49JWxsdSBkZWx0YT0lbGx1XFxuXCIsXG4gXHRcdFx0ICAgbmV4dF9ydW4sIG5vdywgbmV4dF9ydW4gLSBub3cpO1xuLVx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2b3Zwbi1cdTAwM2VrZWVwYWxpdmVfd29yayxcbi1cdFx0XHRcdCAgICAgIChuZXh0X3J1biAtIG5vdykgKiBIWik7XG4rXHRcdHF1ZXVlX2RlbGF5ZWRfd29yayhvdnBuX3dxLCBcdTAwMjZvdnBuLVx1MDAzZWtlZXBhbGl2ZV93b3JrLFxuK1x0XHRcdFx0ICAgKG5leHRfcnVuIC0gbm93KSAqIEhaKTtcbiBcdH1cbiBcdHVubG9ja19vdnBuKG92cG4sIFx1MDAyNnJlbGVhc2VfbGlzdCk7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vdGNwLmMgYi9kcml2ZXJzL25ldC9vdnBuL3RjcC5jXG5pbmRleCAwYWYxNDA1NWMzOWFhLi44ZmU4YThlNzUwYTQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi90Y3AuY1xuKysrIGIvZHJpdmVycy9uZXQvb3Zwbi90Y3AuY1xuQEAgLTE1MSw3ICsxNTEsNyBAQCBzdGF0aWMgdm9pZCBvdnBuX3RjcF9yY3Yoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdC8qIHRha2UgcmVmZXJlbmNlIGZvciBkZWZlcnJlZCBwZWVyIGRlbGV0aW9uLiBzaG91bGQgbmV2ZXIgZmFpbCAqL1xuIFx0aWYgKFdBUk5fT04oIW92cG5fcGVlcl9ob2xkKHBlZXIpKSlcbiBcdFx0Z290byBlcnJfbm9wZWVyO1xuLVx0aWYgKCFzY2hlZHVsZV93b3JrKFx1MDAyNnBlZXItXHUwMDNldGNwLmRlZmVyX2RlbF93b3JrKSlcbitcdGlmICghcXVldWVfd29yayhvdnBuX3dxLCBcdTAwMjZwZWVyLVx1MDAzZXRjcC5kZWZlcl9kZWxfd29yaykpXG4gXHRcdG92cG5fcGVlcl9wdXQocGVlcik7XG4gXHRvdnBuX2Rldl9kc3RhdHNfcnhfZHJvcHBlZChwZWVyLVx1MDAzZW92cG4tXHUwMDNlZGV2KTtcbiBlcnJfbm9wZWVyOlxuQEAgLTI4NCwxMyArMjg0LDEyIEBAIHN0YXRpYyB2b2lkIG92cG5fdGNwX3NlbmRfc29jayhzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdFx0ICogc3RyZWFtIHRoZXJlZm9yZSB3ZSBhYm9ydCB0aGUgY29ubmVjdGlvblxuIFx0XHRcdCAqL1xuIFx0XHRcdG92cG5fcGVlcl9ob2xkKHBlZXIpO1xuLVx0XHRcdGlmICghc2NoZWR1bGVfd29yayhcdTAwMjZwZWVyLVx1MDAzZXRjcC5kZWZlcl9kZWxfd29yaykpXG4rXHRcdFx0aWYgKCFxdWV1ZV93b3JrKG92cG5fd3EsIFx1MDAyNnBlZXItXHUwMDNldGNwLmRlZmVyX2RlbF93b3JrKSlcbiBcdFx0XHRcdG92cG5fcGVlcl9wdXQocGVlcik7XG4gXG4gXHRcdFx0Lyogd2UgYmFpbCBvdXQgaW1tZWRpYXRlbHkgYW5kIGtlZXAgdHhfaW5fcHJvZ3Jlc3Mgc2V0XG4gXHRcdFx0ICogdG8gdHJ1ZS4gVGhpcyB3YXkgd2UgcHJldmVudCBtb3JlIFRYIGF0dGVtcHRzXG4tXHRcdFx0ICogd2hpY2ggd291bGQgbGVhZCB0byBtb3JlIGludm9jYXRpb25zIG9mXG4tXHRcdFx0ICogc2NoZWR1bGVfd29yaygpXG4rXHRcdFx0ICogd2hpY2ggd291bGQgbGVhZCB0byBtb3JlIGludm9jYXRpb25zIG9mIHF1ZXVlX3dvcmsoKVxuIFx0XHRcdCAqL1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuQEAgLTQ4Nyw3ICs0ODYsNyBAQCBzdGF0aWMgdm9pZCBvdnBuX3RjcF93cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRzb2NrID0gcmN1X2RlcmVmZXJlbmNlX3NrX3VzZXJfZGF0YShzayk7XG4gXHRpZiAobGlrZWx5KHNvY2sgXHUwMDI2XHUwMDI2IHNvY2stXHUwMDNlcGVlcikpIHtcbi1cdFx0c2NoZWR1bGVfd29yayhcdTAwMjZzb2NrLVx1MDAzZXRjcF90eF93b3JrKTtcbitcdFx0cXVldWVfd29yayhvdnBuX3dxLCBcdTAwMjZzb2NrLVx1MDAzZXRjcF90eF93b3JrKTtcbiBcdFx0c29jay1cdTAwM2VwZWVyLVx1MDAzZXRjcC5za19jYi5za193cml0ZV9zcGFjZShzayk7XG4gXHR9XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUyOjUxLjQ4MjU3MTUzM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxODEyMzM1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBJbXBhY3Qgb2YgdGhlIE9wZW5WUE4gUGF0Y2ggU2VyaWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgd2FycmFudCBmdXp6aW5nIGVmZm9ydHMuIFRoZSBwYXRjaCB0b3VjaGVzIGEgc2lnbmlmaWNhbnQgbnVtYmVyIG9mIGZpbGVzIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L292cG5gIGRpcmVjdG9yeTogYGNyeXB0by5jYCwgYGNyeXB0by5oYCwgYGNyeXB0b19hZWFkLmNgLCBgY3J5cHRvX2FlYWQuaGAsIGBpby5jYCwgYG1haW4uY2AsIGBvdnBucHJpdi5oYCwgYHBlZXIuY2AsIGFuZCBgdGNwLmNgLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yIG9mIHBvdGVudGlhbCBmdW5jdGlvbmFsIGltcGFjdC5cblxuTm93LCBsZXQncyBkaXNzZWN0IHRoZSBjaGFuZ2VzLiBGaXJzdCwgYG92cG5fY3J5cHRvX2tleV9zbG90X3JlbGVhc2VgIGlzIHN3aXRjaGluZyBmcm9tIGBjYWxsX3JjdWAgdG8gYHF1ZXVlX3JjdV93b3JrYCB3aXRoIGBvdnBuX3dxYC4gVGhpcyBoaW50cyBhdCBhIG1vdmUgdG93YXJkcyBhIHdvcmtxdWV1ZS1iYXNlZCBtZWNoYW5pc20gZm9yIHJlc291cmNlIG1hbmFnZW1lbnQsIHdoaWNoLCBpZiBtaXNoYW5kbGVkLCAqY291bGQqIGludHJvZHVjZSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBjb3JydXB0aW9uIHNjZW5hcmlvcy4gTmV4dCwgYG92cG5fY3J5cHRvX2tpbGxfa2V5YCBoYXMgYSBsb2dpYyBjaGFuZ2UgaW4gaG93IGl0IGl0ZXJhdGVzIHRocm91Z2ggYW5kIHJlcGxhY2VzIHBvaW50ZXJzIHdpdGhpbiB0aGUgYGNzLVx1MDAzZXNsb3RzYCBzdHJ1Y3R1cmUuIFRoaXMgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBwb2ludGVyIG1hbmlwdWxhdGlvbiBpcyBhIGtub3duIHZ1bG5lcmFiaWxpdHkgYXJlYSwgYW5kIHRoaXMgY291bGQgb3BlbiB1cCBhIHZlY3RvciBmb3IgZXhwbG9pdGF0aW9uLlxuXG5BIG1vZHVsZS1vd25lZCB3b3JrcXVldWUsIGBvdnBuX3dxYCwgaXMgYmVpbmcgaW50cm9kdWNlZC4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0IGNlbnRyYWxpemVzIHdvcmtxdWV1ZSBvcGVyYXRpb25zIHdpdGhpbiB0aGUgYG92cG5gIG1vZHVsZS4gVGhlIGFkZGl0aW9uIG9mIGBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2ZyZWVfd29ya2AgaXMgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgd29ya3F1ZXVlLWJhc2VkIGZyZWVpbmcuIFRoaXMgbG9va3MgbGlrZSBhIGNoYW5nZSB0byBob3cgcmVzb3VyY2VzIGFyZSBtYW5hZ2VkLCB3aGljaCBpcyBnb29kLiBUaGVyZSBpcyBhbHNvIGEgY2hhbmdlIGluIHRoZSBvcmRlciBvZiBwdXQgY2FsbHMsIHdoaWNoIGhhcyB0aGUgcG90ZW50aWFsIHRvIGludHJvZHVjZSBpc3N1ZXMuXG5cbkZ1cnRoZXJtb3JlLCBgb3Zwbl93cWAgaXMgYWxsb2NhdGVkIGluIGBvdnBuX2luaXRgIGFuZCBkZXN0cm95ZWQgaW4gYG92cG5fY2xlYW51cGAsIHdoaWNoIG1lYW5zIHRoYXQgaXQgaGFzIGEgbGlmZSBjeWNsZSB0aWVkIHRvIHRoZSBtb2R1bGUgaXRzZWxmLiBUaGUgcmVzdCBvZiB0aGUgbWVudGlvbmVkIGZ1bmN0aW9ucywgc3VjaCBhcyBgb3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXRgLCBgb3Zwbl9wZWVyX2tlZXBhbGl2ZV93b3JrX3NpbmdsZWAsIGV0Yy4sIG5vdyBsZXZlcmFnZSBgb3Zwbl93cWAgaW5zdGVhZCBvZiBnZW5lcmljIHdvcmtxdWV1ZXMuXG5cbkdpdmVuIHRoZXNlIGNoYW5nZXMsIGl0J3MgY2xlYXIgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHRvIHRoZSBPcGVuVlBOIChvdnBuKSBkcml2ZXIuIFRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgdGhpcyBkcml2ZXIgKnJlYWNoYWJsZSogYW5kIGFtZW5hYmxlIHRvIGZ1enppbmc/IFdlbGwsIGl0J3MgYSBuZXR3b3JrIGRyaXZlciwgd2hpY2ggbWVhbnMgaXQgc2hvdWxkIGJlIGludGVyYWN0YWJsZSB2aWEgbmV0bGluayBhbmQgc29ja2V0cy4gVGhhdCdzIGEgXCJ5ZXNcIiBvbiByZWFjaGFiaWxpdHkuIEFuZCBjb25zaWRlcmluZyB0aGUgcG9pbnRlciBsb2dpYyBjaGFuZ2UgaW4gYG92cG5fY3J5cHRvX2tpbGxfa2V5YCBjb21iaW5lZCB3aXRoIHRoZSB3b3JrcXVldWUgbW9kaWZpY2F0aW9ucywgdGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcgZWZmb3J0cy4gSSBuZWVkIHRvIG5vdyBjaGVjayB0aGUgS2NvbmZpZyBmb3IgdGhlIG92cG4gZHJpdmVyIHRvIGNvbmZpcm0gaXRzIGJ1aWxkIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMjEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQyMTo1Mjo1OS42NjM4MDgyODlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxMDQ3Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPVlBOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTkyPWNvbmZpZyBXSVJFR1VBUkRfREVCVUdcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMTAyLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MTAzOmNvbmZpZyBPVlBOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xMDQtXFx0dHJpc3RhdGUgXFxcIk9wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUyOjU5Ljg2NDg2MjQ2OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDg2MzYzMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIE9WUE4gQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBjb25maWcgaW4gcGxheSBoZXJlIGlzIGRlZmluaXRlbHkgYE9WUE5gLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBpbW1lZGlhdGVseSBqdW1wIGludG8gYGRyaXZlcnMvbmV0L0tjb25maWdgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhpcyBPcGVuVlBOIGNvbmZpZ3VyYXRpb24uIFdlJ3JlIGxvb2tpbmcgdG8gdW5kZXJzdGFuZCBhbnkgYnVpbGQtdGltZSByZWxhdGlvbnNoaXBzLCByZXF1aXJlZCBmZWF0dXJlcywgb3IgcGxhdGZvcm0tc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgZm9yIGBPVlBOYCB3aXRoaW4gdGhpcyBrZXJuZWwgY29udGV4dC4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gaWRlbnRpZnkgYW55IG1pc3NpbmcgcGllY2VzIG9yIHBvdGVudGlhbCBjb25mbGljdHMgYmVmb3JlIHdlIGV2ZW4gdGhpbmsgYWJvdXQgYnVpbGRpbmcgdGhlIGtlcm5lbC4gTGV0J3Mgc2VlIHdoYXQgYEtjb25maWdgIHJldmVhbHMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ2NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUzOjAyLjkxMzUwMTc3OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcbiAxMDE6XFx0XFx0ICBTYXkgTiBoZXJlIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZy5cXG4gMTAyOlxcdFxcbiAxMDM6XFx0Y29uZmlnIE9WUE5cXG4gMTA0OlxcdFxcdHRyaXN0YXRlIFxcXCJPcGVuVlBOIGRhdGEgY2hhbm5lbCBvZmZsb2FkXFxcIlxcbiAxMDU6XFx0XFx0ZGVwZW5kcyBvbiBORVQgXFx1MDAyNlxcdTAwMjYgSU5FVFxcbiAxMDY6XFx0XFx0c2VsZWN0IERTVF9DQUNIRVxcbiAxMDc6XFx0XFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuIDEwODpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuIDEwOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0FFU1xcbiAxMTA6XFx0XFx0c2VsZWN0IENSWVBUT19HQ01cXG4gMTExOlxcdFxcdHNlbGVjdCBDUllQVE9fQ0hBQ0hBMjBQT0xZMTMwNVxcbiAxMTI6XFx0XFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG4gMTEzOlxcdFxcdGhlbHBcXG4gMTE0OlxcdFxcdCAgVGhpcyBtb2R1bGUgZW5oYW5jZXMgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBPcGVuVlBOIHVzZXJzcGFjZSBzb2Z0d2FyZVxcbiAxMTU6XFx0XFx0ICBieSBvZmZsb2FkaW5nIHRoZSBkYXRhIGNoYW5uZWwgcHJvY2Vzc2luZyB0byBrZXJuZWxzcGFjZS5cXG4gMTE2OlxcdFxcbiAxMTc6XFx0Y29uZmlnIEVRVUFMSVpFUlxcbiAxMTg6XFx0XFx0dHJpc3RhdGUgXFxcIkVRTCAoc2VyaWFsIGxpbmUgbG9hZCBiYWxhbmNpbmcpIHN1cHBvcnRcXFwiXFxuIDExOTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUzOjAyLjkxMzU5MTA0OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NDU1NzI3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE9wZW5WUE4gQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhlIGRlcGVuZGVuY2llczogYE5FVGAgYW5kIGBJTkVUYC4gVGhhdCdzIHN0YW5kYXJkIHN0dWZmIGZvciBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkuIFRoZSBzZWxlY3RlZCBvcHRpb25zIGFyZSBpbnRlcmVzdGluZzogYERTVF9DQUNIRWAsIHdoaWNoIHByb2JhYmx5IG1lYW5zIHNvbWUga2luZCBvZiBkZXN0aW5hdGlvbiBjYWNoaW5nLCB3aGljaCBpcyBhbiBvcHRpbWl6YXRpb24gc3RyYXRlZ3kgZm9yIHJvdXRpbmcgYW5kIGNvbm5lY3Rpb24gc2V0dXA7IGBORVRfVURQX1RVTk5FTGAsIHN1Z2dlc3RpbmcgVURQIHR1bm5lbGluZywgYXMgZXhwZWN0ZWQgd2l0aCBPcGVuVlBOOyBgQ1JZUFRPYCwgd2hpY2ggaXMgYSBnaXZlbjsgdGhlbiB3ZSBoYXZlIHRoZSBzcGVjaWZpYyBjcnlwdG9ncmFwaGljIGFsZ29yaXRobXMg4oCTIGBDUllQVE9fQUVTYCwgYENSWVBUT19HQ01gLCBgQ1JZUFRPX0NIQUNIQTIwUE9MWTEzMDVgIHdoaWNoIGluZGljYXRlcyBBRVMsIEdhbG9pcy9Db3VudGVyIE1vZGUsIGFuZCBDaGFDaGEyMC1Qb2x5MTMwNSBlbmNyeXB0aW9uIHN1cHBvcnQsIHJlc3BlY3RpdmVseSwgYW5kIGBTVFJFQU1fUEFSU0VSYCwgd2hpY2ggaXMgYWxtb3N0IGNlcnRhaW5seSBhYm91dCBwYXJzaW5nIHRoZSBpbmNvbWluZyBkYXRhIHN0cmVhbS5cblxuUmlnaHQsIHNvIHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgT3BlblZQTiBjb25maWd1cmF0aW9uLCB0aGUga2V5IGhlcmUgaXMgYE9WUE5gLiBUaGF0J3Mgb3VyIHRhcmdldC5cblxuTm93LCB3aGVyZSBhcmUgdGhlIGtleSBjaGFuZ2VzPyBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGtleSBhcmVhcy4gSSBzZWUgYSBsaXN0IG9mIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSSdtIGdvaW5nIHRvIHJ1biB0aHJvdWdoIHRoZXNlIGluIG15IGhlYWQuXG5cbiogICBgb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZWAsIGFuZCBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgIHRoZXNlIGRlYWwgd2l0aCBjcnlwdG9ncmFwaGljIGtleXMsIGxpa2VseSBtYW5hZ2luZyB0aGVpciBsaWZlY3ljbGUuIGBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2ZyZWVfd29ya2AsIGBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X25ld2AsIHRoaXMgZGVhbHMgd2l0aCBBRUFEIGNpcGhlcnMsIHNvIHByb2JhYmx5IHBhcnQgb2YgdGhlIGluaXRpYWwgY3J5cHRvZ3JhcGhpYyBzZXR1cCwgb3Iga2V5IG1hbmFnZW1lbnQuXG4qICAgYG92cG5fZGVjcnlwdF9wb3N0YCwgYG92cG5fZW5jcnlwdF9wb3N0YCwgdGhlc2UgYXJlIHBvc3QtcHJvY2Vzc2luZyBzdGVwcy5cbiogICBgb3Zwbl9pbml0YCwgYG92cG5fY2xlYW51cGAsIHRoZSBiYXNpYyBsaWZlY3ljbGUuXG4qICAgYG92cG5fcGVlcl9rZWVwYWxpdmVfc2V0YCwgYG92cG5fcGVlcl9rZWVwYWxpdmVfd29ya19zaW5nbGVgLCBgb3Zwbl9wZWVyX2tlZXBhbGl2ZV93b3JrYCB3aGljaCBzZWVtcyB0byBiZSBhYm91dCBrZWVwYWxpdmUgZnVuY3Rpb25hbGl0eS5cbiogICBgb3Zwbl90Y3BfcmN2YCwgYG92cG5fdGNwX3NlbmRfc29ja2AsIGBvdnBuX3RjcF93cml0ZV9zcGFjZWAgaXMgdGhlIFRDUCBmdW5jdGlvbmFsaXR5LlxuXG5Pa2F5LCBsZXQncyBob25lIGluIG9uIHRoZSBpbXBvcnRhbnQgZnVuY3Rpb25zLCB0aGlzIGlzIHRoZSBjb3JlOiBgb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZWAsIGBvdnBuX2NyeXB0b19raWxsX2tleWAsIGBvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X25ld2AsIGBvdnBuX3BlZXJfa2VlcGFsaXZlX3NldGAsIGBvdnBuX3BlZXJfa2VlcGFsaXZlX3dvcmtgLiBOb3csIGFyZSB0aGV5IGV4cG9ydGVkIG9yIHN0YXRpYz8gQWgsIGdvb2QsIHRoZXkncmUgbm90IHN0YXRpYywgbWVhbmluZyB0aGV5J3JlIGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIHRoZSBjdXJyZW50IHNjb3BlLiBUaGF0IGlzIGltcG9ydGFudCB0byByZW1lbWJlci4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZW50cnkgcG9pbnRzIG9yIGNvcmUgbWFuYWdlbWVudCBmdW5jdGlvbnMuXG5JIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBJIG5lZWQgdG8gdmVyaWZ5IHRoZXNlIGZ1bmN0aW9ucy4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjaGFuZ2VzIGFyZSBoYXBwZW5pbmcsIHRoZSBjcnlwdG9ncmFwaGljIGtleSBtYW5hZ2VtZW50IGFuZCBrZWVwYWxpdmUgbWVjaGFuaXNtcywgc28gbGV0IG1lIHRha2UgYSBjbG9zZXIgbG9vayBhbmQgYmVnaW4gZnJvbSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkzNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUzOjEwLjY1OTE2NzMwOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjExOTQxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnBuX2NyeXB0b19raWxsX2tleVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9vdnBuL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jPTMyPXZvaWQgb3Zwbl9jcnlwdG9fc3RhdGVfcmVsZWFzZShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzKVxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYy00OS0vKiByZW1vdmVzIHRoZSBrZXkgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBpZCBmcm9tIHRoZSBjcnlwdG8gY29udGV4dCAqL1xcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmM6NTA6Ym9vbCBvdnBuX2NyeXB0b19raWxsX2tleShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzLCB1OCBrZXlfaWQpXFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYy01MS17XFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oPTE0MT1pbnQgb3Zwbl9jcnlwdG9fY29uZmlnX2dldChzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzLFxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaC0xNDQtXFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaDoxNDU6Ym9vbCBvdnBuX2NyeXB0b19raWxsX2tleShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzLCB1OCBrZXlfaWQpO1xcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmgtMTQ2LVxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jPTIzOD12b2lkIG92cG5fZW5jcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtMjY0LVxcdFxcdFxcdCAgICBwZWVyLVxcdTAwM2VpZCk7XFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjI2NTpcXHRcXHRpZiAob3Zwbl9jcnlwdG9fa2lsbF9rZXkoXFx1MDAyNnBlZXItXFx1MDAzZWNyeXB0bywga3MtXFx1MDAzZWtleV9pZCkpXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTI2Ni1cXHRcXHRcXHQvKiBsZXQgdXNlcnNwYWNlIGtub3cgc28gdGhhdCBhIG5ldyBrZXkgbXVzdCBiZSBuZWdvdGlhdGVkICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUzOjEwLjcxMTI5NjUzM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MzM5MTA4MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipEYXRhIFBhdGggQ29uY2VybnMgYW5kIEtlZXBhbGl2ZSBJbnRlZ3JhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIE9wZW5WUE4ga2VybmVsIG1vZHVsZSBoZXJlLiBUaGUgY3JpdGljYWwgZnVuY3Rpb24gYG92cG5fY3J5cHRvX2tpbGxfa2V5YCDigJMgdGhhdCdzIGEga2V5IG1hbmFnZW1lbnQgZnVuY3Rpb24sIGxpa2VseSBkZWFsaW5nIHdpdGggY3J5cHRvIGtleSBjbGVhbnVwIOKAkyBpdCdzIGRpcmVjdGx5IGNhbGxlZCBmcm9tIGBvdnBuX2VuY3J5cHRfcG9zdGAuIEFuZCBgb3Zwbl9lbmNyeXB0X3Bvc3RgLCB0aGF0J3MgZmlybWx5IGluIHRoZSAqZGF0YSBwYXRoKi4gTWVhbmluZyBhbnkgaW5lZmZpY2llbmN5IHRoZXJlIGhhcyBhbiBpbW1lZGlhdGUgaW1wYWN0IG9uIHRocm91Z2hwdXQgYW5kIGxhdGVuY3kuIFdlIG5lZWQgdG8gYmUgKnZlcnkqIG1pbmRmdWwgb2YgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGF0IGBvdnBuX2NyeXB0b19raWxsX2tleWAgY2FsbCwgZXNwZWNpYWxseSBpdHMgc3luY2hyb25pemF0aW9uIG9yIHBvdGVudGlhbCBsb2NraW5nLiBBbnkgYmxvY2tpbmcgaW4ga2V5IG1hbmFnZW1lbnQgd2lsbCBibGVlZCBkaXJlY3RseSBpbnRvIHRoZSBlbmNyeXB0IGFuZCB0cmFuc21pdCB0aW1lLlxuXG5PbiB0aGUgb3RoZXIgaGFuZCwgYG92cG5fcGVlcl9rZWVwYWxpdmVfc2V0YCBpcyBiZWluZyBjYWxsZWQgZnJvbSAqbmV0bGluayouIEludGVyZXN0aW5nLiBUaGF0IGxpa2VseSB0aWVzIGludG8gdGhlIGNvbnRyb2wgcGxhbmUsIHNldHRpbmcga2VlcGFsaXZlIHBhcmFtZXRlcnMgZm9yIGEgcGVlciwgcHJvYmFibHkgaW4gcmVzcG9uc2UgdG8gdXNlciBjb25maWd1cmF0aW9uIG9yIG5ldHdvcmsgZXZlbnRzLiBUaGlzIHN1Z2dlc3RzIGEgY29udHJvbCBwYXRoIGludGVncmF0aW9uLCB3aXRoIHBvdGVudGlhbCB0byB0cmlnZ2VyIGtlZXBhbGl2ZSBiZWhhdmlvdXIgb24gY2VydGFpbiBjb25kaXRpb25zLiBXZSBzaG91bGQgbWFrZSBzdXJlIHdlJ3JlIG1hbmFnaW5nIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGVzZSB0d28gcGF0aHMgZWZmaWNpZW50bHkuIEFyZSB0aGVyZSBhbnkgcmFjZSBjb25kaXRpb25zLCBkYXRhIGluY29uc2lzdGVuY2llcywgb3IgY29udGVudGlvbiBwb3NzaWJpbGl0aWVzIHRoYXQgd2UgbmVlZCB0byBzY3J1dGluaXplIGNhcmVmdWxseT8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGVzZSB0d28gaW5kZXBlbmRlbnQgcGllY2VzLCBkYXRhIHBhdGggZW5jcnlwdGlvbi9rZXkgaGFuZGxpbmcgYW5kIGNvbnRyb2wgcGF0aCBrZWVwYWxpdmVzLCBwbGF5IHRvZ2V0aGVyLiBBbnkgdW5leHBlY3RlZCBiZWhhdmlvdXIgb24gb25lIHNpZGUgd2lsbCBpbmZsdWVuY2UgdGhlIG90aGVyLCB0aGlzIGNvdWxkIGltcGFjdCBuZXR3b3JrIHN0YWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQzMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUzOjE2LjQ0NTIxMTQwNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE5NzYyODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvb3Zwbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLmM9Mjc5PXN0YXRpYyBpbnQgb3Zwbl9ubF9wZWVyX21vZGlmeShzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLmMtMzMwLVxcdFxcdHRpbWVvdXQgPSBubGFfZ2V0X3UzMihhdHRyc1tPVlBOX0FfUEVFUl9LRUVQQUxJVkVfVElNRU9VVF0pO1xcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay5jOjMzMTpcXHRcXHRvdnBuX3BlZXJfa2VlcGFsaXZlX3NldChwZWVyLCBpbnRlcnYsIHRpbWVvdXQpO1xcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay5jLTMzMi1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL3BlZXIuYz0yNT1zdGF0aWMgdm9pZCB1bmxvY2tfb3ZwbihzdHJ1Y3Qgb3Zwbl9wcml2ICpvdnBuLFxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmMtNDAtLyoqXFxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmM6NDE6ICogb3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXQgLSBjb25maWd1cmUga2VlcGFsaXZlIHZhbHVlcyBmb3IgcGVlclxcbmRyaXZlcnMvbmV0L292cG4vcGVlci5jLTQyLSAqIEBwZWVyOiB0aGUgcGVlciB0byBjb25maWd1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vcGVlci5jLTQ1LSAqL1xcbmRyaXZlcnMvbmV0L292cG4vcGVlci5jOjQ2OnZvaWQgb3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXQoc3RydWN0IG92cG5fcGVlciAqcGVlciwgdTMyIGludGVydmFsLCB1MzIgdGltZW91dClcXG5kcml2ZXJzL25ldC9vdnBuL3BlZXIuYy00Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL3BlZXIuaD0xNTQ9Ym9vbCBvdnBuX3BlZXJfY2hlY2tfYnlfc3JjKHN0cnVjdCBvdnBuX3ByaXYgKm92cG4sIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL3BlZXIuaC0xNTYtXFxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmg6MTU3OnZvaWQgb3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXQoc3RydWN0IG92cG5fcGVlciAqcGVlciwgdTMyIGludGVydmFsLCB1MzIgdGltZW91dCk7XFxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmgtMTU4LXZvaWQgb3Zwbl9wZWVyX2tlZXBhbGl2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUzOjE2LjQ5NzE5NjYxOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzk3NTA1Nzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipSZWZsZWN0aW5nIG9uIE9wZW5WUE4gT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgT3BlblZQTi1yZWxhdGVkIGJpdHMgYW5kIHBpZWNlcy4gKmBvdnBuX3BlZXJfa2VlcGFsaXZlX3NldGAqLCB5ZXMsIHRoYXQgbG9va3MgcHJvbWlzaW5nLCBnb29kIHRvIHNlZSB0aGF0IGJlaW5nIHVzZWQsIHByb2JhYmx5IGZvciBrZWVwaW5nIHRob3NlIGNvbm5lY3Rpb25zIGhlYWx0aHkgYW5kIGFsaXZlIOKAkyBhbHdheXMgYSBrZXkgY29uY2VybiB3aXRoIFZQTnMuIEFuZCB0aGVuLi4uICpgb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZWAqIOKAkyBhaCwgcmlnaHQsIHRoYXQncyB0aGUgY2xlYW51cCBtZWNoYW5pc20gZm9yIGNyeXB0b2dyYXBoaWMga2V5cywgaGFuZGxpbmcgdGhlaXIgcmVsZWFzZSB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQgaGl0cyB6ZXJvLiBUaGF0J3MgZXhhY3RseSBob3cgaXQgc2hvdWxkIGJlLiBFbnN1cmVzIHdlJ3JlIG5vdCBsZWFraW5nIHJlc291cmNlcyBhbmQga2VlcHMgdGhpbmdzIHNlY3VyZS4gR29vZCwgZWZmaWNpZW50IG1lbW9yeSBtYW5hZ2VtZW50IGlzIGNyaXRpY2FsIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzE2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMjE6NTM6MjAuMjk0NzA1NjIyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTA2MTIxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnBuX2NyeXB0b19rZXlfc2xvdF9yZWxlYXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L292cG4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmMtMjAtXFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYzoyMTp2b2lkIG92cG5fY3J5cHRvX2tleV9zbG90X3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpXFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYy0yMi17XFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oPTExMT1vdnBuX2NyeXB0b19rZXlfc2xvdF9wcmltYXJ5KGNvbnN0IHN0cnVjdCBvdnBuX2NyeXB0b19zdGF0ZSAqY3MpXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oLTEyMy1cXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oOjEyNDp2b2lkIG92cG5fY3J5cHRvX2tleV9zbG90X3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpO1xcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmgtMTI1LVxcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmg9MTI2PXN0YXRpYyBpbmxpbmUgdm9pZCBvdnBuX2NyeXB0b19rZXlfc2xvdF9wdXQoc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcylcXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oLTEyNy17XFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaDoxMjg6XFx0a3JlZl9wdXQoXFx1MDAyNmtzLVxcdTAwM2VyZWZjb3VudCwgb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZSk7XFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaC0xMjktfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQyMTo1MzoyMC4zNDU3NzM0NDZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwOTc3OTg1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIE9wZW5WUE4gQ3J5cHRvIEtleSBNYW5hZ2VtZW50KipcblxuQWxyaWdodCwgKm92cG5cXF9jcnlwdG9cXF9rZXlcXF9zbG90XFxfcmVsZWFzZSogaXMgcHJlY2lzZWx5IHdoYXQgSSdkIGV4cGVjdCB0byBzZWUgaW4gYSBrZXkgbWFuYWdlbWVudCBzeXN0ZW0sIHRoZSBleHBlY3RlZCByZWxlYXNlIG9mIHRoZSBrZXkgc2xvdCBpcyBnb29kIGZvciBtZW1vcnkgbWFuYWdlbWVudC4gVGhhdCdzIGEgc29saWQgc3RhcnQuIE5vdywgbGV0J3MgZHJpbGwgZG93biBhIGJpdCBkZWVwZXIgaW50byB0aGUgbGlmZWN5Y2xlLiBUaGUgbmF0dXJhbCBwbGFjZSB0byBsb29rIG5leHQgaXMgaXRzIGNvdW50ZXJwYXJ0LCB0aGUgYWxsb2NhdGlvbiBmdW5jdGlvbjogKm92cG5cXF9hZWFkXFxfY3J5cHRvXFxfa2V5XFxfc2xvdFxcX25ldyouIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBuZXcgc2xvdHMgYXJlIGNyZWF0ZWQuIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY2hlY2tzIG9uIHRoaXMgZnVuY3Rpb24gdGhhdCBuZWVkIHRvIGJlIG1hZGUuIEFyZSB0aGV5IGxpbmtlZCwgaW4gdGVybXMgb2YgcmVzb3VyY2UgbWFuYWdlbWVudCwgb3IgYXJlIHRoZXJlIHNlcGFyYXRlIG1hbmFnZW1lbnQgZnVuY3Rpb25zIHRoYXQgb3ZlcmxhcD8gV2hhdCBkb2VzIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MgYWN0dWFsbHkgZW50YWlsIOKAkyBtZW1vcnkgYWxsb2NhdGlvbiwga2V5IGRlcml2YXRpb24vZ2VuZXJhdGlvbiwgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHVuZGVybHlpbmcgY3J5cHRvIGNvbnRleHQ/IEkgbmVlZCB0byBjaGVjayB0aGUgcG90ZW50aWFsIGZvciB2dWxuZXJhYmlsaXRpZXMsIHN1Y2ggYXMgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCwgaW1wcm9wZXIga2V5IGRlcml2YXRpb24sIG9yIGluc3VmZmljaWVudCBlbnRyb3B5IHNvdXJjaW5nIGR1cmluZyB0aGUga2V5IGdlbmVyYXRpb24uIEkgd2FudCB0byBsb29rIGZvciBwb3RlbnRpYWwgbG9jay11cHMgdG9vLiBUaGUgbW9yZSBJIGNhbiB1bmRlcnN0YW5kIGFib3V0IHRoaXMgY3JpdGljYWwgcGFpcmluZywgdGhlIG1vcmUgZWZmZWN0aXZlIG15IG92ZXJhbGwgYW5hbHlzaXMgb2YgT3BlblZQTidzIGNyeXB0byBpbXBsZW1lbnRhdGlvbiBjYW4gYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODQ0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMjE6NTM6MjQuMTU1NTU4MDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODI5Mjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L292cG4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmM9Nzg9aW50IG92cG5fY3J5cHRvX3N0YXRlX3Jlc2V0KHN0cnVjdCBvdnBuX2NyeXB0b19zdGF0ZSAqY3MsXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jLTg3LVxcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmM6ODg6XFx0bmV3ID0gb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXcoXFx1MDAyNnBrci1cXHUwMDNla2V5KTtcXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jLTg5LVxcdGlmIChJU19FUlIobmV3KSlcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYz00MDA9c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICpcXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmM6NDAxOm92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3KGNvbnN0IHN0cnVjdCBvdnBuX2tleV9jb25maWcgKmtjKVxcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYy00MDIte1xcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5oPTIzPXN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqXFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5oOjI0Om92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3KGNvbnN0IHN0cnVjdCBvdnBuX2tleV9jb25maWcgKmtjKTtcXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmgtMjUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUzOjI0LjIwODM5NDc5NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDcxMjUxMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgT3BlblZQTiBEYXRhIENoYW5uZWwgT2ZmbG9hZCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXdgIGxvb2tzIHNvbGlkLCBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBmb2N1cywgdGhlbiwgbmVlZHMgdG8gYmUgb24gdGhlc2Ugc3ltYm9sczogYG92cG5fY3J5cHRvX2tleV9zbG90X3JlbGVhc2VgLCBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgLCBgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXdgLCBgb3Zwbl9wZWVyX2tlZXBhbGl2ZV9zZXRgLCBhbmQgYG92cG5fcGVlcl9rZWVwYWxpdmVfd29ya2AuIFRoaXMgaXMgYWJvdXQgaG93IHRoZSBjcnlwdG8ga2V5cyBhcmUgaGFuZGxlZCBpbiB0aGUgb2ZmbG9hZCBkcml2ZXIuXG5cblRoZSBwYXRjaCBpcyB0b3VjaGluZyB0aGUgT3BlblZQTiBkYXRhIGNoYW5uZWwgb2ZmbG9hZCBkcml2ZXIgKGBkcml2ZXJzL25ldC9vdnBuYCksIHNvIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBuZXR3b3JrIGRyaXZlciDigJMgYWx3YXlzIHNvbWV0aGluZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvLiBTcGVjaWZpY2FsbHksIGl0J3Mgc3dhcHBpbmcgYGNhbGxfcmN1YCBmb3IgYHF1ZXVlX3JjdV93b3JrYCBmb3IgY3J5cHRvIGtleSBzbG90IGZyZWVpbmcsIHdoaWNoIGlzIGEgZ29vZCBtb3ZlIGZvciBpbmNyZWFzZWQgZWZmaWNpZW5jeSBhbmQgcmVkdWNlZCBjb250ZW50aW9uLiBUaGV5J3JlIGludHJvZHVjaW5nIGEgZGVkaWNhdGVkIHdvcmtxdWV1ZSAoYG92cG5fd3FgKSBmb3IgYWxsIG92cG4tc3BlY2lmaWMgd29yaywgYW5kIGZpeGluZyBhIGxvZ2ljIGJ1ZyBpbiBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgLiBUaGVzZSBhcmUgYWxsIGNydWNpYWwgaW1wcm92ZW1lbnRzLCBhbmQgdGhpcyBpcyBnb29kIHRvIHNlZSBhcyBpdCBzdHJlYW1saW5lcyBvcGVyYXRpb25zLlxuXG5Ob3csIGxldCBtZSBqdXN0IGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb25zIGFyZSBhbGwgaW4gb3JkZXIuIFRoZXkncmUgcmVmZXJlbmNpbmcgYE9WUE5gLCB3aGljaCBkZXBlbmRzIG9uIGBORVRgIGFuZCBgSU5FVGAsIHdoaWNoIGlzIGV4cGVjdGVkLiBMb29rcyBsaWtlIGl0IGFsc28gc2VsZWN0cyBgRFNUX0NBQ0hFYCwgYE5FVF9VRFBfVFVOTkVMYCwgYENSWVBUT2AsIGBDUllQVE9fQUVTYCwgYENSWVBUT19HQ01gLCBgQ1JZUFRPX0NIQUNIQTIwUE9MWTEzMDVgLCBhbmQgYFNUUkVBTV9QQVJTRVJgLiBHb29kLCB0aGUgY29uZmlndXJhdGlvbiBpcyBzdWZmaWNpZW50LiBTZWVtcyBsaWtlIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0ODYsIk91dHB1dFRva2VucyI6MTgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUzOjMzLjY3OTY1MDE3NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1ODg2NzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPVlBOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZVwiLFxuICAgIFwib3Zwbl9jcnlwdG9fa2lsbF9rZXlcIixcbiAgICBcIm92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3XCIsXG4gICAgXCJvdnBuX3BlZXJfa2VlcGFsaXZlX3NldFwiLFxuICAgIFwib3Zwbl9wZWVyX2tlZXBhbGl2ZV93b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWQgZHJpdmVyIChkcml2ZXJzL25ldC9vdnBuKS4gSXQgcmVwbGFjZXMgY2FsbF9yY3Ugd2l0aCBxdWV1ZV9yY3Vfd29yayBmb3IgZnJlZWluZyBjcnlwdG8ga2V5IHNsb3RzLCBpbnRyb2R1Y2VzIGEgZGVkaWNhdGVkIHdvcmtxdWV1ZSAob3Zwbl93cSkgZm9yIGFsbCBvdnBuLXNwZWNpZmljIHdvcmssIGFuZCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBvdnBuX2NyeXB0b19raWxsX2tleS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBhIHJlYWNoYWJsZSBuZXR3b3JrIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPVlBOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZVwiLFxuICAgIFwib3Zwbl9jcnlwdG9fa2lsbF9rZXlcIixcbiAgICBcIm92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3XCIsXG4gICAgXCJvdnBuX3BlZXJfa2VlcGFsaXZlX3NldFwiLFxuICAgIFwib3Zwbl9wZWVyX2tlZXBhbGl2ZV93b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWQgZHJpdmVyIChkcml2ZXJzL25ldC9vdnBuKS4gSXQgcmVwbGFjZXMgY2FsbF9yY3Ugd2l0aCBxdWV1ZV9yY3Vfd29yayBmb3IgZnJlZWluZyBjcnlwdG8ga2V5IHNsb3RzLCBpbnRyb2R1Y2VzIGEgZGVkaWNhdGVkIHdvcmtxdWV1ZSAob3Zwbl93cSkgZm9yIGFsbCBvdnBuLXNwZWNpZmljIHdvcmssIGFuZCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBvdnBuX2NyeXB0b19raWxsX2tleS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBhIHJlYWNoYWJsZSBuZXR3b3JrIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMjE6NTM6MzMuNzY1NTQ0MDA1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAzODAwNTk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUzOjMzLjc2NjE1NzY2NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTAzNzM4ODI4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gZml4aW5nIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBvdnBuX2NyeXB0b19raWxsX2tleWAsIHJlb3JkZXJpbmcgY2xlYW51cCBmdW5jdGlvbnMgdG8gcHJldmVudCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYnVncywgYW5kIG1pZ3JhdGluZyB3b3JrIGl0ZW1zIGZyb20gdGhlIHN5c3RlbSB3b3JrcXVldWUgdG8gYSBkZWRpY2F0ZWQgYG92cG5fd3FgIHdvcmtxdWV1ZS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG1lbW9yeSBzYWZldHkgaXNzdWVzIChOVUxMIGRlcmVmZXJlbmNlcywgVUFGKSBhbmQgY29uY3VycmVuY3kgbWFuYWdlbWVudCwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGNoYW5nZXMgdG8gZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhOTVmMjZkYjUyMjJkNjJhMWZlMzkyNDBjNDhmOGUwYWViOTE2NjA5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgOSAyMTo1Mjo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmMgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jXG5pbmRleCA5MDU4MGUzMjA1MmZiLi43ZTU0NTQyODkwMGE5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uY1xuKysrIGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uY1xuQEAgLTE4LDIwICsxOCwxMiBAQFxuICNpbmNsdWRlIFwiY3J5cHRvX2FlYWQuaFwiXG4gI2luY2x1ZGUgXCJjcnlwdG8uaFwiXG4gXG4tc3RhdGljIHZvaWQgb3Zwbl9rc19kZXN0cm95X3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4te1xuLVx0c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcztcbi1cbi1cdGtzID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCwgcmN1KTtcbi1cdG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZGVzdHJveShrcyk7XG4tfVxuLVxuIHZvaWQgb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiB7XG4gXHRzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzO1xuIFxuIFx0a3MgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90LCByZWZjb3VudCk7XG4tXHRjYWxsX3JjdShcdTAwMjZrcy1cdTAwM2VyY3UsIG92cG5fa3NfZGVzdHJveV9yY3UpO1xuK1x0cXVldWVfcmN1X3dvcmsob3Zwbl93cSwgXHUwMDI2a3MtXHUwMDNlZnJlZV93b3JrKTtcbiB9XG4gXG4gLyogY2FuIG9ubHkgYmUgaW52b2tlZCB3aGVuIGFsbCBwZWVyIHJlZmVyZW5jZXMgaGF2ZSBiZWVuIGRyb3BwZWQgKGkuZS4gUkNVXG5AQCAtNTgsMTUgKzUwLDE5IEBAIHZvaWQgb3Zwbl9jcnlwdG9fc3RhdGVfcmVsZWFzZShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzKVxuIGJvb2wgb3Zwbl9jcnlwdG9fa2lsbF9rZXkoc3RydWN0IG92cG5fY3J5cHRvX3N0YXRlICpjcywgdTgga2V5X2lkKVxuIHtcbiBcdHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MgPSBOVUxMO1xuK1x0c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICp0bXA7XG4rXHRpbnQgc2xvdCA9IDA7XG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2Y3MtXHUwMDNlbG9jayk7XG4tXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNzLVx1MDAzZXNsb3RzWzBdKS1cdTAwM2VrZXlfaWQgPT0ga2V5X2lkKSB7XG4tXHRcdGtzID0gcmN1X3JlcGxhY2VfcG9pbnRlcihjcy1cdTAwM2VzbG90c1swXSwgTlVMTCxcbi1cdFx0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZjcy1cdTAwM2Vsb2NrKSk7XG4tXHR9IGVsc2UgaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihjcy1cdTAwM2VzbG90c1sxXSktXHUwMDNla2V5X2lkID09IGtleV9pZCkge1xuLVx0XHRrcyA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoY3MtXHUwMDNlc2xvdHNbMV0sIE5VTEwsXG4tXHRcdFx0XHRcdCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2Y3MtXHUwMDNlbG9jaykpO1xuK1x0dG1wID0gcmN1X2FjY2Vzc19wb2ludGVyKGNzLVx1MDAzZXNsb3RzW3Nsb3RdKTtcbitcdGlmICghdG1wIHx8IHRtcC1cdTAwM2VrZXlfaWQgIT0ga2V5X2lkKSB7XG4rXHRcdHNsb3QgPSAxO1xuK1x0XHR0bXAgPSByY3VfYWNjZXNzX3BvaW50ZXIoY3MtXHUwMDNlc2xvdHNbc2xvdF0pO1xuIFx0fVxuK1xuK1x0aWYgKHRtcCBcdTAwMjZcdTAwMjYgdG1wLVx1MDAzZWtleV9pZCA9PSBrZXlfaWQpXG4rXHRcdGtzID0gcmN1X3JlcGxhY2VfcG9pbnRlcihjcy1cdTAwM2VzbG90c1tzbG90XSwgTlVMTCxcbitcdFx0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZjcy1cdTAwM2Vsb2NrKSk7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZjcy1cdTAwM2Vsb2NrKTtcbiBcbiBcdGlmIChrcylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oIGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaFxuaW5kZXggMGUyODRmZWMzYTc1YS4uZTNmZWIxNmQ1NDk4NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmhcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmhcbkBAIC0xMCw2ICsxMCw4IEBAXG4gI2lmbmRlZiBfTkVUX09WUE5fT1ZQTkNSWVBUT19IX1xuICNkZWZpbmUgX05FVF9PVlBOX09WUE5DUllQVE9fSF9cbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuK1xuICNpbmNsdWRlIFwicGt0aWQuaFwiXG4gI2luY2x1ZGUgXCJwcm90by5oXCJcbiBcbkBAIC00NSw4ICs0Nyw4IEBAIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCB7XG4gXG4gXHRzdHJ1Y3Qgb3Zwbl9wa3RpZF9yZWN2IHBpZF9yZWN2IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4gXHRzdHJ1Y3Qgb3Zwbl9wa3RpZF94bWl0IHBpZF94bWl0IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4rXHRzdHJ1Y3QgcmN1X3dvcmsgZnJlZV93b3JrO1xuIFx0c3RydWN0IGtyZWYgcmVmY291bnQ7XG4tXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuIH07XG4gXG4gc3RydWN0IG92cG5fY3J5cHRvX3N0YXRlIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmMgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmNcbmluZGV4IDhmMDdjNDE4NjIyYjIuLjc0ZWFmNmZhYzJmNTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmNcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuY1xuQEAgLTksNiArOSw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjY3J5cHRvL2FlYWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcHY2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdWRwLmhcdTAwM2VcbkBAIC0zODAsMTMgKzM4MSwxOSBAQCBzdGF0aWMgc3RydWN0IGNyeXB0b19hZWFkICpvdnBuX2FlYWRfaW5pdChjb25zdCBjaGFyICp0aXRsZSxcbiBcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gfVxuIFxuLXZvaWQgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9kZXN0cm95KHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MpXG4rc3RhdGljIHZvaWQgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9mcmVlKHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MpXG4ge1xuLVx0aWYgKCFrcylcbi1cdFx0cmV0dXJuO1xuLVxuIFx0Y3J5cHRvX2ZyZWVfYWVhZChrcy1cdTAwM2VlbmNyeXB0KTtcbiBcdGNyeXB0b19mcmVlX2FlYWQoa3MtXHUwMDNlZGVjcnlwdCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZnJlZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzO1xuK1xuK1x0a3MgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCxcbitcdFx0XHQgIGZyZWVfd29yayk7XG4rXHRvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2ZyZWUoa3MpO1xuIFx0a2ZyZWUoa3MpO1xuIH1cbiBcbkBAIC00MjAsNiArNDI3LDcgQEAgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9uZXcoY29uc3Qgc3RydWN0IG92cG5fa2V5X2NvbmZpZyAqa2MpXG4gXG4gXHRrcy1cdTAwM2VlbmNyeXB0ID0gTlVMTDtcbiBcdGtzLVx1MDAzZWRlY3J5cHQgPSBOVUxMO1xuK1x0SU5JVF9SQ1VfV09SSyhcdTAwMjZrcy1cdTAwM2VmcmVlX3dvcmssIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZnJlZV93b3JrKTtcbiBcdGtyZWZfaW5pdChcdTAwMjZrcy1cdTAwM2VyZWZjb3VudCk7XG4gXHRrcy1cdTAwM2VrZXlfaWQgPSBrYy1cdTAwM2VrZXlfaWQ7XG4gXG5AQCAtNDUzLDcgKzQ2MSw4IEBAIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3KGNvbnN0IHN0cnVjdCBvdnBuX2tleV9jb25maWcgKmtjKVxuIFx0cmV0dXJuIGtzO1xuIFxuIGRlc3Ryb3lfa3M6XG4tXHRvdnBuX2FlYWRfY3J5cHRvX2tleV9zbG90X2Rlc3Ryb3koa3MpO1xuK1x0b3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9mcmVlKGtzKTtcbitcdGtmcmVlKGtzKTtcbiBcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaCBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaFxuaW5kZXggNjVhMmZmMzA3ODk4Ni4uZmFlM2I1ODVhNDNiMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuaFxuKysrIGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5oXG5AQCAtMjIsNyArMjIsNiBAQCBpbnQgb3Zwbl9hZWFkX2RlY3J5cHQoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcyxcbiBcbiBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKlxuIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfbmV3KGNvbnN0IHN0cnVjdCBvdnBuX2tleV9jb25maWcgKmtjKTtcbi12b2lkIG92cG5fYWVhZF9jcnlwdG9fa2V5X3Nsb3RfZGVzdHJveShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzKTtcbiBcbiBlbnVtIG92cG5fY2lwaGVyX2FsZyBvdnBuX2FlYWRfY3J5cHRvX2FsZyhzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2lvLmMgYi9kcml2ZXJzL25ldC9vdnBuL2lvLmNcbmluZGV4IDlhNjZkNjkzMDM5YTMuLjk1MjZmODA5NmRhNjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL2lvLmNcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vaW8uY1xuQEAgLTIwNCwxMCArMjA0LDEwIEBAIHZvaWQgb3Zwbl9kZWNyeXB0X3Bvc3Qodm9pZCAqZGF0YSwgaW50IHJldClcbiBcdFx0b3Zwbl9kZXZfZHN0YXRzX3J4X2Ryb3BwZWQocGVlci1cdTAwM2VvdnBuLVx1MDAzZWRldik7XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBkcm9wX25vY291bnQ6XG4tXHRpZiAobGlrZWx5KHBlZXIpKVxuLVx0XHRvdnBuX3BlZXJfcHV0KHBlZXIpO1xuIFx0aWYgKGxpa2VseShrcykpXG4gXHRcdG92cG5fY3J5cHRvX2tleV9zbG90X3B1dChrcyk7XG4rXHRpZiAobGlrZWx5KHBlZXIpKVxuK1x0XHRvdnBuX3BlZXJfcHV0KHBlZXIpO1xuIH1cbiBcbiAvKiBSWCBwYXRoIGVudHJ5IHBvaW50OiBkZWNyeXB0IHBhY2tldCBhbmQgZm9yd2FyZCBpdCB0byB0aGUgZGV2aWNlICovXG5AQCAtMzAyLDExICszMDIsMTEgQEAgdm9pZCBvdnBuX2VuY3J5cHRfcG9zdCh2b2lkICpkYXRhLCBpbnQgcmV0KVxuIGVycjpcbiBcdGlmICh1bmxpa2VseShza2IpKVxuIFx0XHRvdnBuX2Rldl9kc3RhdHNfdHhfZHJvcHBlZChwZWVyLVx1MDAzZW92cG4tXHUwMDNlZGV2KTtcbi1cdGlmIChsaWtlbHkocGVlcikpXG4tXHRcdG92cG5fcGVlcl9wdXQocGVlcik7XG4rXHRrZnJlZV9za2Ioc2tiKTtcbiBcdGlmIChsaWtlbHkoa3MpKVxuIFx0XHRvdnBuX2NyeXB0b19rZXlfc2xvdF9wdXQoa3MpO1xuLVx0a2ZyZWVfc2tiKHNrYik7XG4rXHRpZiAobGlrZWx5KHBlZXIpKVxuK1x0XHRvdnBuX3BlZXJfcHV0KHBlZXIpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBvdnBuX2VuY3J5cHRfb25lKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBza19idWZmICpza2IpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9tYWluLmMgYi9kcml2ZXJzL25ldC9vdnBuL21haW4uY1xuaW5kZXggMTY4Y2ZlOWI1OWE5OC4uMDcwODI0OWU5NjA3YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9vdnBuL21haW4uY1xuQEAgLTEyLDYgKzEyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5ldGRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZ3JvX2NlbGxzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9ydG5ldGxpbmsuaFx1MDAzZVxuQEAgLTI2LDYgKzI3LDkgQEBcbiAjaW5jbHVkZSBcInRjcC5oXCJcbiAjaW5jbHVkZSBcInVkcC5oXCJcbiBcbisvKiBtb2R1bGUtb3duZWQgd29ya3F1ZXVlIG9uIHdoaWNoIGFsbCBvdnBuLXNwZWNpZmljIHdvcmsgaXMgcXVldWVkICovXG4rc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm92cG5fd3E7XG4rXG4gc3RhdGljIHZvaWQgb3Zwbl9wcml2X2ZyZWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbiB7XG4gXHRzdHJ1Y3Qgb3Zwbl9wcml2ICpvdnBuID0gbmV0ZGV2X3ByaXYobmV0KTtcbkBAIC0yNjQsMTAgKzI2OCwxNiBAQCBzdGF0aWMgaW50IF9faW5pdCBvdnBuX2luaXQodm9pZClcbiBcbiBcdG92cG5fdGNwX2luaXQoKTtcbiBcbitcdG92cG5fd3EgPSBhbGxvY193b3JrcXVldWUoXCJvdnBuXCIsIFdRX1BFUkNQVSwgMCk7XG4rXHRpZiAoIW92cG5fd3EpIHtcbitcdFx0cHJfZXJyKFwib3ZwbjogY2Fubm90IGFsbG9jYXRlIHdvcmtxdWV1ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4gXHRlcnIgPSBydG5sX2xpbmtfcmVnaXN0ZXIoXHUwMDI2b3Zwbl9saW5rX29wcyk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdHByX2VycihcIm92cG46IGNhbid0IHJlZ2lzdGVyIHJ0bmwgbGluayBvcHM6ICVkXFxuXCIsIGVycik7XG4tXHRcdHJldHVybiBlcnI7XG4rXHRcdGdvdG8gZGVzdHJveV93cTtcbiBcdH1cbiBcbiBcdGVyciA9IG92cG5fbmxfcmVnaXN0ZXIoKTtcbkBAIC0yODAsNiArMjkwLDkgQEAgc3RhdGljIGludCBfX2luaXQgb3Zwbl9pbml0KHZvaWQpXG4gXG4gdW5yZWdfcnRubDpcbiBcdHJ0bmxfbGlua191bnJlZ2lzdGVyKFx1MDAyNm92cG5fbGlua19vcHMpO1xuK2Rlc3Ryb3lfd3E6XG4rXHRkZXN0cm95X3dvcmtxdWV1ZShvdnBuX3dxKTtcbitcdG92cG5fd3EgPSBOVUxMO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMjg4LDcgKzMwMSwxMSBAQCBzdGF0aWMgX19leGl0IHZvaWQgb3Zwbl9jbGVhbnVwKHZvaWQpXG4gXHRvdnBuX25sX3VucmVnaXN0ZXIoKTtcbiBcdHJ0bmxfbGlua191bnJlZ2lzdGVyKFx1MDAyNm92cG5fbGlua19vcHMpO1xuIFxuK1x0Zmx1c2hfd29ya3F1ZXVlKG92cG5fd3EpO1xuIFx0cmN1X2JhcnJpZXIoKTtcbitcbitcdGRlc3Ryb3lfd29ya3F1ZXVlKG92cG5fd3EpO1xuK1x0b3Zwbl93cSA9IE5VTEw7XG4gfVxuIFxuIG1vZHVsZV9pbml0KG92cG5faW5pdCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9vdnBucHJpdi5oIGIvZHJpdmVycy9uZXQvb3Zwbi9vdnBucHJpdi5oXG5pbmRleCA1ODk4ZjZhZGFkYTdmLi44NDQ5OTE0MGU0YmQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9vdnBucHJpdi5oXG4rKysgYi9kcml2ZXJzL25ldC9vdnBuL292cG5wcml2LmhcbkBAIC0xNSw2ICsxNSwxMCBAQFxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvaWZfbGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9vdnBuLmhcdTAwM2VcbiBcbitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdDtcbitcbitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm92cG5fd3E7XG4rXG4gLyoqXG4gICogc3RydWN0IG92cG5fcGVlcl9jb2xsZWN0aW9uIC0gY29udGFpbmVyIG9mIHBlZXJzIGZvciBNdWx0aVBlZXIgbW9kZVxuICAqIEBieV9pZDogdGFibGUgb2YgcGVlcnMgaW5kZXggYnkgSURcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL3BlZXIuYyBiL2RyaXZlcnMvbmV0L292cG4vcGVlci5jXG5pbmRleCBiMDUxOWY5ODQwZDgzLi5jOTU2NTZjYTdjMzU3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmNcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vcGVlci5jXG5AQCAtNjIsNyArNjIsNyBAQCB2b2lkIG92cG5fcGVlcl9rZWVwYWxpdmVfc2V0KHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHUzMiBpbnRlcnZhbCwgdTMyIHRpbWVvdXQpXG4gXHQvKiBub3cgdGhhdCBpbnRlcnZhbCBhbmQgdGltZW91dCBoYXZlIGJlZW4gY2hhbmdlZCwga2lja1xuIFx0ICogb2ZmIHRoZSB3b3JrZXIgc28gdGhhdCB0aGUgbmV4dCBkZWxheSBjYW4gYmUgcmVjb21wdXRlZFxuIFx0ICovXG4tXHRtb2RfZGVsYXllZF93b3JrKHN5c3RlbV9wZXJjcHVfd3EsIFx1MDAyNnBlZXItXHUwMDNlb3Zwbi1cdTAwM2VrZWVwYWxpdmVfd29yaywgMCk7XG4rXHRtb2RfZGVsYXllZF93b3JrKG92cG5fd3EsIFx1MDAyNnBlZXItXHUwMDNlb3Zwbi1cdTAwM2VrZWVwYWxpdmVfd29yaywgMCk7XG4gfVxuIFxuIC8qKlxuQEAgLTEzNzEsNyArMTM3MSw3IEBAIHN0YXRpYyB0aW1lNjRfdCBvdnBuX3BlZXJfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsXG4gXHRcdFx0ICAgcGVlci1cdTAwM2VpZCk7XG4gXHRcdGlmIChXQVJOX09OKCFvdnBuX3BlZXJfaG9sZChwZWVyKSkpXG4gXHRcdFx0cmV0dXJuIDA7XG4tXHRcdGlmICghc2NoZWR1bGVfd29yayhcdTAwMjZwZWVyLVx1MDAzZWtlZXBhbGl2ZV93b3JrKSlcbitcdFx0aWYgKCFxdWV1ZV93b3JrKG92cG5fd3EsIFx1MDAyNnBlZXItXHUwMDNla2VlcGFsaXZlX3dvcmspKVxuIFx0XHRcdG92cG5fcGVlcl9wdXQocGVlcik7XG4gXHR9XG4gXG5AQCAtMTQ2Myw4ICsxNDYzLDggQEAgdm9pZCBvdnBuX3BlZXJfa2VlcGFsaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRuZXRkZXZfZGJnKG92cG4tXHUwMDNlZGV2LFxuIFx0XHRcdCAgIFwic2NoZWR1bGluZyBrZWVwYWxpdmUgd29yazogbm93PSVsbHUgbmV4dF9ydW49JWxsdSBkZWx0YT0lbGx1XFxuXCIsXG4gXHRcdFx0ICAgbmV4dF9ydW4sIG5vdywgbmV4dF9ydW4gLSBub3cpO1xuLVx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2b3Zwbi1cdTAwM2VrZWVwYWxpdmVfd29yayxcbi1cdFx0XHRcdCAgICAgIChuZXh0X3J1biAtIG5vdykgKiBIWik7XG4rXHRcdHF1ZXVlX2RlbGF5ZWRfd29yayhvdnBuX3dxLCBcdTAwMjZvdnBuLVx1MDAzZWtlZXBhbGl2ZV93b3JrLFxuK1x0XHRcdFx0ICAgKG5leHRfcnVuIC0gbm93KSAqIEhaKTtcbiBcdH1cbiBcdHVubG9ja19vdnBuKG92cG4sIFx1MDAyNnJlbGVhc2VfbGlzdCk7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vdGNwLmMgYi9kcml2ZXJzL25ldC9vdnBuL3RjcC5jXG5pbmRleCAwYWYxNDA1NWMzOWFhLi44ZmU4YThlNzUwYTQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi90Y3AuY1xuKysrIGIvZHJpdmVycy9uZXQvb3Zwbi90Y3AuY1xuQEAgLTE1MSw3ICsxNTEsNyBAQCBzdGF0aWMgdm9pZCBvdnBuX3RjcF9yY3Yoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdC8qIHRha2UgcmVmZXJlbmNlIGZvciBkZWZlcnJlZCBwZWVyIGRlbGV0aW9uLiBzaG91bGQgbmV2ZXIgZmFpbCAqL1xuIFx0aWYgKFdBUk5fT04oIW92cG5fcGVlcl9ob2xkKHBlZXIpKSlcbiBcdFx0Z290byBlcnJfbm9wZWVyO1xuLVx0aWYgKCFzY2hlZHVsZV93b3JrKFx1MDAyNnBlZXItXHUwMDNldGNwLmRlZmVyX2RlbF93b3JrKSlcbitcdGlmICghcXVldWVfd29yayhvdnBuX3dxLCBcdTAwMjZwZWVyLVx1MDAzZXRjcC5kZWZlcl9kZWxfd29yaykpXG4gXHRcdG92cG5fcGVlcl9wdXQocGVlcik7XG4gXHRvdnBuX2Rldl9kc3RhdHNfcnhfZHJvcHBlZChwZWVyLVx1MDAzZW92cG4tXHUwMDNlZGV2KTtcbiBlcnJfbm9wZWVyOlxuQEAgLTI4NCwxMyArMjg0LDEyIEBAIHN0YXRpYyB2b2lkIG92cG5fdGNwX3NlbmRfc29jayhzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdFx0ICogc3RyZWFtIHRoZXJlZm9yZSB3ZSBhYm9ydCB0aGUgY29ubmVjdGlvblxuIFx0XHRcdCAqL1xuIFx0XHRcdG92cG5fcGVlcl9ob2xkKHBlZXIpO1xuLVx0XHRcdGlmICghc2NoZWR1bGVfd29yayhcdTAwMjZwZWVyLVx1MDAzZXRjcC5kZWZlcl9kZWxfd29yaykpXG4rXHRcdFx0aWYgKCFxdWV1ZV93b3JrKG92cG5fd3EsIFx1MDAyNnBlZXItXHUwMDNldGNwLmRlZmVyX2RlbF93b3JrKSlcbiBcdFx0XHRcdG92cG5fcGVlcl9wdXQocGVlcik7XG4gXG4gXHRcdFx0Lyogd2UgYmFpbCBvdXQgaW1tZWRpYXRlbHkgYW5kIGtlZXAgdHhfaW5fcHJvZ3Jlc3Mgc2V0XG4gXHRcdFx0ICogdG8gdHJ1ZS4gVGhpcyB3YXkgd2UgcHJldmVudCBtb3JlIFRYIGF0dGVtcHRzXG4tXHRcdFx0ICogd2hpY2ggd291bGQgbGVhZCB0byBtb3JlIGludm9jYXRpb25zIG9mXG4tXHRcdFx0ICogc2NoZWR1bGVfd29yaygpXG4rXHRcdFx0ICogd2hpY2ggd291bGQgbGVhZCB0byBtb3JlIGludm9jYXRpb25zIG9mIHF1ZXVlX3dvcmsoKVxuIFx0XHRcdCAqL1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuQEAgLTQ4Nyw3ICs0ODYsNyBAQCBzdGF0aWMgdm9pZCBvdnBuX3RjcF93cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRzb2NrID0gcmN1X2RlcmVmZXJlbmNlX3NrX3VzZXJfZGF0YShzayk7XG4gXHRpZiAobGlrZWx5KHNvY2sgXHUwMDI2XHUwMDI2IHNvY2stXHUwMDNlcGVlcikpIHtcbi1cdFx0c2NoZWR1bGVfd29yayhcdTAwMjZzb2NrLVx1MDAzZXRjcF90eF93b3JrKTtcbitcdFx0cXVldWVfd29yayhvdnBuX3dxLCBcdTAwMjZzb2NrLVx1MDAzZXRjcF90eF93b3JrKTtcbiBcdFx0c29jay1cdTAwM2VwZWVyLVx1MDAzZXRjcC5za19jYi5za193cml0ZV9zcGFjZShzayk7XG4gXHR9XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIxOjUzOjMzLjc2NjE1ODQ4NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTAzNzM2NTc1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBPcGVuVlBOIERyaXZlciBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgYG92cG5gIGRyaXZlciBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgY291bGQgcG90ZW50aWFsbHkgaW50cm9kdWNlIG1lbW9yeSBzYWZldHkgaXNzdWVzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzcGVjaWZpY2FsbHkgdGhvc2UgdGhhdCBLTVNBTiB3b3VsZCBmbGFnLlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgcmVmYWN0b3JpbmcgdGhlIGRyaXZlcidzIHdvcmtxdWV1ZSBtYW5hZ2VtZW50LiBXZSdyZSBtb3ZpbmcgZnJvbSB0aGUgc3RhbmRhcmQgc3lzdGVtIHdvcmtxdWV1ZSB0byBhIGRlZGljYXRlZCBgb3Zwbl93cWAuIFRoaXMgaW52b2x2ZXMgcmVwbGFjaW5nIGNhbGxzIHRvIGBzY2hlZHVsZV93b3JrYCwgYHNjaGVkdWxlX2RlbGF5ZWRfd29ya2AsIGFuZCBgY2FsbF9yY3VgIHdpdGggYHF1ZXVlX3dvcmtgLCBgcXVldWVfZGVsYXllZF93b3JrYCwgYW5kIGBxdWV1ZV9yY3Vfd29ya2AsIHJlc3BlY3RpdmVseSwgYWxsIGRpcmVjdGVkIHRvIHRoaXMgbmV3IGBvdnBuX3dxYC4gU2VlbXMgbGlrZSBhIHN0YW5kYXJkIGlzb2xhdGlvbi9wZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uXG5cbkJleW9uZCB0aGUgd29ya3F1ZXVlIGNoYW5nZXMsIHRoZXJlIGFyZSBzZXZlcmFsIG90aGVyIG5vdGFibGUgbW9kaWZpY2F0aW9ucy4gYG92cG5fY3J5cHRvX2tpbGxfa2V5YCBoYXMgYmVlbiB1cGRhdGVkLCBhbmQgSSBuZWVkIHRvIGxvb2sgY2xvc2VyIGF0IHRoYXQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdWJ0bGUgaXNzdWVzLiBBbHNvLCB0aGVyZSdzIGEgcmVvcmRlcmluZyBvZiBga2ZyZWVfc2tiYCBhbmQgYG92cG5fcGVlcl9wdXRgL2BvdnBuX2NyeXB0b19rZXlfc2xvdF9wdXRgIHdpdGhpbiB0aGUgYG92cG5fZGVjcnlwdF9wb3N0YCBhbmQgYG92cG5fZW5jcnlwdF9wb3N0YCBmdW5jdGlvbnMuIFRoYXQgc2NyZWFtcyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUsIG9yIGEgY2xlYW51cCBvcmRlciB0aGF0IG5lZWRlZCB0byBiZSBtb3JlIGNhcmVmdWwuXG5cbk5vdywgbGV0J3MgZGlnIGludG8gdGhlIGRldGFpbHM6XG5cbjEuICBgb3Zwbl9jcnlwdG9fa2V5X3Nsb3RfcmVsZWFzZWAgbm93IHVzZXMgYHF1ZXVlX3JjdV93b3JrYC4gVGhpcyBpcyBmaW5lLCB1c2luZyBSQ1UgY29ycmVjdGx5IGlzIGdvb2QuXG4yLiAgYG92cG5fY3J5cHRvX2tpbGxfa2V5YCBoYXMgYmVlbiBtb2RpZmllZC4gQWxyaWdodCwgbGV0J3Mgem9vbSBpbiBvbiB0aGF0IGNvZGUgc25pcHBldC4gVGhlICpvbGQqIGNvZGUgaGFkIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSEgSXQgZGlyZWN0bHkgYWNjZXNzZWQgYHRtcC1cdTAwM2VrZXlfaWRgIHdpdGhvdXQgY2hlY2tpbmcgaWYgYGNzLVx1MDAzZXNsb3RzWzBdYCBvciBgY3MtXHUwMDNlc2xvdHNbMV1gIHdhcyBhY3R1YWxseSB2YWxpZC4gVGhpcyBpcyBhIGNsZWFyIGJ1ZyBmaXgsIGVuc3VyaW5nIGB0bXBgIGlzIHZhbGlkIGJlZm9yZSBkZXJlZmVyZW5jaW5nLiBUaGlzIGlzICpnb29kKiwgYSBjbGFzc2ljIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB2dWxuZXJhYmlsaXR5IGZpeC5cbjMuICBgb3Zwbl9hZWFkX2NyeXB0b19rZXlfc2xvdF9mcmVlX3dvcmtgIGhhcyBiZWVuIGludHJvZHVjZWQuIFRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgd29ya3F1ZXVlIGFuZCBSQ1UgY2xlYW51cC4gQWdhaW4sIGV4cGVjdGVkIHdpdGggdGhlIHdvcmtxdWV1ZSBjaGFuZ2VzLlxuNC4gIFRoZSByZW9yZGVyaW5nIG9mIGBrZnJlZV9za2JgIGFuZCBgb3Zwbl9wZWVyX3B1dGAgaW4gYG92cG5fZGVjcnlwdF9wb3N0YCBhbmQgYG92cG5fZW5jcnlwdF9wb3N0YC4gUHJldmlvdXNseSwgdGhlIGNvZGUgZnJlZWQgdGhlIHNrYiAqYmVmb3JlKiBwb3NzaWJseSByZWxlYXNpbmcgdGhlIHBlZXIuIE5vdyB3ZSBoYXZlIGEgc2FmZXIgb3JkZXIuIFRoaXMgaXMgYSBwb3RlbnRpYWwgVUFGIGZpeDsgaXQncyBhIGdvb2QgY2hhbmdlLlxuNS4gIFRoZSBgb3Zwbl93cWAgaXMgY3JlYXRlZCBhbmQgZGVzdHJveWVkIGFwcHJvcHJpYXRlbHkuIFNvdW5kcyBjbGVhbiwgbm8gaXNzdWVzIHRoZXJlLlxuNi4gIFRoZSB3b3JrcXVldWUgY2FsbHMgYXJlIGJlaW5nIHJlcGxhY2VkIGNvbnNpc3RlbnRseS4gV29ya3F1ZXVlIG1hbmFnZW1lbnQsIG5vdGhpbmcgY3JpdGljYWwgaW4gaXRzZWxmLlxuXG5BbmFseXppbmcgdGhlIGNvZGU6IE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhcHBlYXIgdG8gaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgYWRkIGNvbXBsZXggY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZSBjaGFuZ2VzIGFyZSBsYXJnZWx5IGZvY3VzZWQgb246IHdvcmtxdWV1ZSBtYW5hZ2VtZW50ICh3aGljaCBpcyBhIHNhZmUgcmVmYWN0b3JpbmcpLCBwcm9wZXIgUkNVIGRlc3RydWN0aW9uLCBhbmQgZml4aW5nIGtub3duIG1lbW9yeSBzYWZldHkgaXNzdWVzLiBJbiBwYXJ0aWN1bGFyLCB0aGUgY2hhbmdlcyB0byBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgIGFuZCB0aGUgcmVvcmRlcmluZyBvZiBga2ZyZWVfc2tiYCBhcmUgY3JpdGljYWwsIGNsYXNzaWMgYnVnIGZpeGVzLiBUaGUgcmVvcmRlcmluZyBpcyBhbG1vc3QgY2VydGFpbmx5IHRvIGF2b2lkIFVBRiwgc28gaXMgYSBnb29kIHRoaW5nIHRvIGZpbmQuXG5cblNpbmNlIHRoZXNlIGNoYW5nZXMgYWRkcmVzcyBrbm93biBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdGllcyBhbmQgaW1wcm92ZSBnZW5lcmFsIGNvZGUgaHlnaWVuZSwgKmFuZCogZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IHJpc2t5IGJlaGF2aW9yIGluIHRlcm1zIG9mIGRhdGEgc3RydWN0dXJlcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgSSBjYW4gY29tZm9ydGFibHkgc2F5IHRoYXQgS01TQU4gaXMgdW5saWtlbHkgdG8gZmxhZyBhbnl0aGluZyBoZXJlLiBUaGlzIGxvb2tzIGxpa2UgYSBzdGFuZGFyZCBzZXQgb2YgYnVnIGZpeGVzIGFuZCBpbXByb3ZlbWVudHMgdG8gd29ya3F1ZXVlIG1hbmFnZW1lbnQuIE5vIG5lZWQgZm9yIHNwZWNpYWwgS01TQU4gdGVzdGluZy5cbioqVGhlcmVmb3JlLCB0aGUgYW5zd2VyIGlzIE5lZWRzS01TQU4gPSBmYWxzZS4qKlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjE4LCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQyMTo1Mzo0OC44MDM1MjcwOTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBmb2N1c2VzIG9uIGZpeGluZyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgLCByZW9yZGVyaW5nIGNsZWFudXAgZnVuY3Rpb25zIHRvIHByZXZlbnQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIGFuZCBtaWdyYXRpbmcgd29yayBpdGVtcyBmcm9tIHRoZSBzeXN0ZW0gd29ya3F1ZXVlIHRvIGEgZGVkaWNhdGVkIGBvdnBuX3dxYCB3b3JrcXVldWUuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoTlVMTCBkZXJlZmVyZW5jZXMsIFVBRikgYW5kIGNvbmN1cnJlbmN5IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBubyBjaGFuZ2VzIHRvIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gZml4aW5nIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBvdnBuX2NyeXB0b19raWxsX2tleWAsIHJlb3JkZXJpbmcgY2xlYW51cCBmdW5jdGlvbnMgdG8gcHJldmVudCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYnVncywgYW5kIG1pZ3JhdGluZyB3b3JrIGl0ZW1zIGZyb20gdGhlIHN5c3RlbSB3b3JrcXVldWUgdG8gYSBkZWRpY2F0ZWQgYG92cG5fd3FgIHdvcmtxdWV1ZS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG1lbW9yeSBzYWZldHkgaXNzdWVzIChOVUxMIGRlcmVmZXJlbmNlcywgVUFGKSBhbmQgY29uY3VycmVuY3kgbWFuYWdlbWVudCwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGNoYW5nZXMgdG8gZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvmsws[1] Phase: Succeeded StartedAt: 2026-08-09 21:54:00 +0000 UTC FinishedAt: 2026-08-09 21:54:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmsws[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-09 21:54:00 +0000 UTC FinishedAt: 2026-08-09 21:54:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmsws[2] Phase: Succeeded StartedAt: 2026-08-09 21:54:00 +0000 UTC FinishedAt: 2026-08-09 23:31:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-09 21:54:00 +0000 UTC FinishedAt: 2026-08-09 23:31:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-09 21:54:00 +0000 UTC FinishedAt: 2026-08-09 21:54:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-09 21:54:00 +0000 UTC FinishedAt: 2026-08-09 21:54:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvmsws/series-workflowvmsws-convert-artifact-425802530/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-09 21:54:10 +0000 UTC FinishedAt: 2026-08-09 22:12:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-09 21:54:10 +0000 UTC FinishedAt: 2026-08-09 22:12:47 +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:*5f56ad08-ecfa-47ec-99c6-bf5114c3a8a6,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-workflowvmsws/series-workflowvmsws-convert-artifact-425802530/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": "1cbe86d6-4181-4ddf-80aa-b512c9d11394", "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-workflowvmsws/series-workflowvmsws-build-action-3311320288/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-09 21:54:10 +0000 UTC FinishedAt: 2026-08-09 22:12:38 +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:*5f56ad08-ecfa-47ec-99c6-bf5114c3a8a6,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-workflowvmsws/series-workflowvmsws-convert-artifact-425802530/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": "1cbe86d6-4181-4ddf-80aa-b512c9d11394", "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-workflowvmsws/series-workflowvmsws-build-action-3311320288/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-09 22:12:47 +0000 UTC FinishedAt: 2026-08-09 22:12:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-09 22:12:47 +0000 UTC FinishedAt: 2026-08-09 22:12:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-09 22:12:47 +0000 UTC FinishedAt: 2026-08-09 22:12:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-09 22:12:47 +0000 UTC FinishedAt: 2026-08-09 22:12:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvmsws/series-workflowvmsws-convert-artifact-3636966269/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-09 22:12:58 +0000 UTC FinishedAt: 2026-08-09 22:15:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-09 22:12:58 +0000 UTC FinishedAt: 2026-08-09 22:15:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1cbe86d6-4181-4ddf-80aa-b512c9d11394,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-workflowvmsws/series-workflowvmsws-build-action-3311320288/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-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-09 22:15:43 +0000 UTC FinishedAt: 2026-08-09 22:15:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-09 22:15:43 +0000 UTC FinishedAt: 2026-08-09 22:15:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-09 22:15:43 +0000 UTC FinishedAt: 2026-08-09 22:32:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-09 22:15:43 +0000 UTC FinishedAt: 2026-08-09 22:32:11 +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:*5f56ad08-ecfa-47ec-99c6-bf5114c3a8a6,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-workflowvmsws/series-workflowvmsws-convert-artifact-3636966269/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": "1d2127a7-5736-4312-801a-efc976c3c8d0", "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-workflowvmsws/series-workflowvmsws-build-action-558330841/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-09 22:15:43 +0000 UTC FinishedAt: 2026-08-09 22:32:01 +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:*5f56ad08-ecfa-47ec-99c6-bf5114c3a8a6,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-workflowvmsws/series-workflowvmsws-convert-artifact-3636966269/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": "1d2127a7-5736-4312-801a-efc976c3c8d0", "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-workflowvmsws/series-workflowvmsws-build-action-558330841/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-09 22:32:11 +0000 UTC FinishedAt: 2026-08-09 22:32:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-09 22:32:11 +0000 UTC FinishedAt: 2026-08-09 22:32:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-09 22:32:11 +0000 UTC FinishedAt: 2026-08-09 22:34:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-09 22:32:11 +0000 UTC FinishedAt: 2026-08-09 22:34:49 +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:*1d2127a7-5736-4312-801a-efc976c3c8d0,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-workflowvmsws/series-workflowvmsws-build-action-558330841/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-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-09 22:34:59 +0000 UTC FinishedAt: 2026-08-09 23:31:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-09 22:34:59 +0000 UTC FinishedAt: 2026-08-09 23:31:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"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:*1cbe86d6-4181-4ddf-80aa-b512c9d11394,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1d2127a7-5736-4312-801a-efc976c3c8d0,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-workflowvmsws/series-workflowvmsws-build-action-3311320288/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-workflowvmsws/series-workflowvmsws-build-action-558330841/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-09 22:34:59 +0000 UTC FinishedAt: 2026-08-09 22:35:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-09 22:34:59 +0000 UTC FinishedAt: 2026-08-09 22:35:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"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-workflowvmsws/series-workflowvmsws-convert-artifact-3286150402/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-09 22:34:59 +0000 UTC FinishedAt: 2026-08-09 22:34:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-09 22:34:59 +0000 UTC FinishedAt: 2026-08-09 22:34:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-09 22:34:59 +0000 UTC FinishedAt: 2026-08-09 22:34:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-09 22:35:09 +0000 UTC FinishedAt: 2026-08-09 23:31:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmsws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_key_slot_release","ovpn_crypto_kill_key","ovpn_aead_crypto_key_slot_new","ovpn_peer_keepalive_set","ovpn_peer_keepalive_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"a4ced93a-dc5f-4de7-8639-cb332917801d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-09 22:35:09 +0000 UTC FinishedAt: 2026-08-09 23:31:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1cbe86d6-4181-4ddf-80aa-b512c9d11394,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1d2127a7-5736-4312-801a-efc976c3c8d0,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-workflowvmsws/series-workflowvmsws-build-action-3311320288/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-workflowvmsws/series-workflowvmsws-build-action-558330841/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-workflowvmsws/series-workflowvmsws-convert-artifact-3286150402/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,}