Name: series-workflow4vjdd Phase: Succeeded StartedAt: 2026-08-15 00:00:01 +0000 UTC FinishedAt: 2026-08-15 02:08:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vjdd[0] Phase: Succeeded StartedAt: 2026-08-15 00:00:01 +0000 UTC FinishedAt: 2026-08-15 00:19:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vjdd[0].run-triage Phase: Succeeded StartedAt: 2026-08-15 00:00:01 +0000 UTC FinishedAt: 2026-08-15 00:19:35 +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": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_GOOGLE", "GVE", "XDP_SOCKETS", "BPF_SYSCALL", "PCI_MSI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_GOOGLE", "GVE", "XDP_SOCKETS", "BPF_SYSCALL", "PCI_MSI" ], "series_id": "34ad716b-166f-40c6-80af-a0af3d4fe96f" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "gve_rx_poll_dqo", "gve_napi_poll_dqo", "gve_xdp_poll_dqo" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfR09PR0xFJiMzNDssCiAgICAmIzM0O0dWRSYjMzQ7LAogICAgJiMzNDtYRFBfU09DS0VUUyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtQQ0lfTVNJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z3ZlX3J4X3BvbGxfZHFvJiMzNDssCiAgICAmIzM0O2d2ZV9uYXBpX3BvbGxfZHFvJiMzNDssCiAgICAmIzM0O2d2ZV94ZHBfcG9sbF9kcW8mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKGd2ZSkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZml4aW5nIFhEUCBwb29sIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiBsb2dpYywgTkFQSSBsb2NraW5nICh1c2luZyBuYXBpX2Rpc2FibGVfbG9ja2VkL25hcGlfZW5hYmxlX2xvY2tlZCksIG1lbW9yeSBsZWFrcyAoZnJlZWluZyB4c2tfYnVmZiksIGFuZCBOQVBJIGJ1ZGdldCBhY2NvdW50aW5nIGluIGd2ZV9yeF9wb2xsX2Rxby4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZXhwb3NlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGRlYWRsb2NrcywgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBMT0NLREVQLCBLQVNBTiwgYW5kIEtNRU1MRUFLLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKGd2ZSkgZHJpdmVyIHRvIGZpeCBidWdzIHJlbGF0ZWQgdG8gQUZfWERQIChYRFAgc29ja2V0cykgc3VwcG9ydC4gSXQgZml4ZXMgYSBtZW1vcnkgbGVhayBpbiBgZ3ZlX3J4X3Jlc2V0X3JpbmdfZHFvYCBhbmQgYGd2ZV9yeF9kcW9gIGJ5IHByb3Blcmx5IGZyZWVpbmcgYHhza19idWZmYC4gSXQgYWxzbyBmaXhlcyBhIGJ1ZyBpbiBgZ3ZlX3J4X3BvbGxfZHFvYCB3aGVyZSBgd29ya19kb25lYCB3YXMgbm90IGluY3JlbWVudGVkIGNvcnJlY3RseSwgYW5kIGZpeGVzIERNQSB1bm1hcHBpbmcgaW4gYGd2ZV94c2tfcG9vbF9lbmFibGVgIGFuZCBgZ3ZlX3hza19wb29sX2Rpc2FibGVgLiBUaGVzZSBjaGFuZ2VzIGhhdmUgZnVuY3Rpb25hbCBpbXBhY3Qgb24gdGhlIG5ldHdvcmsgZGF0YXBhdGggYW5kIEFGX1hEUCBzb2NrZXQgaGFuZGxpbmcuIFRoZSBHVkUgZHJpdmVyIGlzIHRoZSBwcmltYXJ5IG5ldHdvcmsgaW50ZXJmYWNlIHVzZWQgaW4gR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpIFZNcywgd2hlcmUgc3l6a2FsbGVyIHJ1bnMsIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIGhpZ2hseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGZkODg0MWZhMjY4MzRhOTE0Y2ZhNzhjYTI0YTc2OTIzYjhhYmU2MGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxNSAwMDoxNzozNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmNcbmluZGV4IGU0ZDc4YWU1MmRhZmUuLmNjYWY1Zjg2YTFlNmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uY1xuQEAgLTE2NTQsMjAgJiM0MzsxNjU0LDE4IEBAIHN0YXRpYyBpbnQgZ3ZlX3hza19wb29sX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKCFwcml2LVx1MDAzZXhkcF9wcm9nIHx8ICFuZXRpZl9ydW5uaW5nKGRldikpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0ZXJyID0gZ3ZlX3JlZ194c2tfcG9vbChwcml2LCBkZXYsIHBvb2wsIHFpZCk7XG4tXHRpZiAoZXJyKVxuLVx0XHRnb3RvIGVycl94c2tfcG9vbF9kbWFfbWFwcGVkO1xuLVxuLVx0LyogU3RvcCBhbmQgc3RhcnQgUkRBIHF1ZXVlcyB0byByZXBvc3QgYnVmZmVycy4gKi9cbi1cdGlmICghZ3ZlX2lzX3FwbChwcml2KSkge1xuJiM0MztcdGlmIChndmVfaXNfcXBsKHByaXYpKSB7XG4mIzQzO1x0XHRlcnIgPSBndmVfcmVnX3hza19wb29sKHByaXYsIGRldiwgcG9vbCwgcWlkKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3hza19wb29sX2RtYV9tYXBwZWQ7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIFN0b3AgYW5kIHN0YXJ0IFJEQSBxdWV1ZXMgdG8gcmVwb3N0IGJ1ZmZlcnMuICovXG4gXHRcdGVyciA9IGd2ZV9jb25maWd1cmVfcmluZ3NfeGRwKHByaXYsIHByaXYtXHUwMDNlcnhfY2ZnLm51bV9xdWV1ZXMpO1xuIFx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXJyX3hza19wb29sX3JlZ2lzdGVyZWQ7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX3hza19wb29sX2RtYV9tYXBwZWQ7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbiBcbi1lcnJfeHNrX3Bvb2xfcmVnaXN0ZXJlZDpcbi1cdGd2ZV91bnJlZ194c2tfcG9vbChwcml2LCBxaWQpO1xuIGVycl94c2tfcG9vbF9kbWFfbWFwcGVkOlxuIFx0Y2xlYXJfYml0KHFpZCwgcHJpdi1cdTAwM2V4c2tfcG9vbHMpO1xuIFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsXG5AQCAtMTY4Myw0MiAmIzQzOzE2ODEsMzggQEAgc3RhdGljIGludCBndmVfeHNrX3Bvb2xfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpX3J4O1xuIFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpX3R4O1xuIFx0c3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2w7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4gXHRpbnQgdHhfcWlkO1xuLVx0aW50IGVycjtcbiBcbi1cdGlmIChxaWQgXHUwMDNlPSBwcml2LVx1MDAzZXJ4X2NmZy5udW1fcXVldWVzKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAocWlkIFx1MDAzZT0gcHJpdi1cdTAwM2VyeF9jZmcubnVtX3F1ZXVlcykge1xuJiM0MztcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gdW5tYXBfYW5kX3JldHVybjtcbiYjNDM7XHR9XG4gXG4gXHRjbGVhcl9iaXQocWlkLCBwcml2LVx1MDAzZXhza19wb29scyk7XG4gXG4tXHRwb29sID0geHNrX2dldF9wb29sX2Zyb21fcWlkKGRldiwgcWlkKTtcbi1cdGlmIChwb29sKVxuLVx0XHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCxcbi1cdFx0XHRcdCAgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMgfFxuLVx0XHRcdFx0ICAgRE1BX0FUVFJfV0VBS19PUkRFUklORyk7XG4tXG4gXHRpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSB8fCAhcHJpdi1cdTAwM2V0eF9jZmcubnVtX3hkcF9xdWV1ZXMpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdFx0Z290byB1bm1hcF9hbmRfcmV0dXJuO1xuIFxuIFx0LyogU3RvcCBhbmQgc3RhcnQgUkRBIHF1ZXVlcyB0byByZXBvc3QgYnVmZmVycy4gKi9cbiBcdGlmICghZ3ZlX2lzX3FwbChwcml2KSBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2V4ZHBfcHJvZykge1xuIFx0XHRlcnIgPSBndmVfY29uZmlndXJlX3JpbmdzX3hkcChwcml2LCBwcml2LVx1MDAzZXJ4X2NmZy5udW1fcXVldWVzKTtcbiBcdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0XHRnb3RvIHVubWFwX2FuZF9yZXR1cm47XG4gXHR9XG4gXG4gXHRuYXBpX3J4ID0gXHUwMDI2cHJpdi1cdTAwM2VudGZ5X2Jsb2Nrc1twcml2LVx1MDAzZXJ4W3FpZF0ubnRmeV9pZF0ubmFwaTtcbi1cdG5hcGlfZGlzYWJsZShuYXBpX3J4KTsgLyogbWFrZSBzdXJlIGN1cnJlbnQgcnggcG9sbCBpcyBkb25lICovXG4mIzQzO1x0bmFwaV9kaXNhYmxlX2xvY2tlZChuYXBpX3J4KTsgLyogbWFrZSBzdXJlIGN1cnJlbnQgcnggcG9sbCBpcyBkb25lICovXG4gXG4gXHR0eF9xaWQgPSBndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsIHFpZCk7XG4gXHRuYXBpX3R4ID0gXHUwMDI2cHJpdi1cdTAwM2VudGZ5X2Jsb2Nrc1twcml2LVx1MDAzZXR4W3R4X3FpZF0ubnRmeV9pZF0ubmFwaTtcbi1cdG5hcGlfZGlzYWJsZShuYXBpX3R4KTsgLyogbWFrZSBzdXJlIGN1cnJlbnQgdHggcG9sbCBpcyBkb25lICovXG4mIzQzO1x0bmFwaV9kaXNhYmxlX2xvY2tlZChuYXBpX3R4KTsgLyogbWFrZSBzdXJlIGN1cnJlbnQgdHggcG9sbCBpcyBkb25lICovXG4gXG4gXHRndmVfdW5yZWdfeHNrX3Bvb2wocHJpdiwgcWlkKTtcbiBcdHNtcF9tYigpOyAvKiBNYWtlIHN1cmUgaXQgaXMgdmlzaWJsZSB0byB0aGUgd29ya2VycyBvbiBkYXRhcGF0aCAqL1xuIFxuLVx0bmFwaV9lbmFibGUobmFwaV9yeCk7XG4tXHRuYXBpX2VuYWJsZShuYXBpX3R4KTtcbiYjNDM7XHRuYXBpX2VuYWJsZV9sb2NrZWQobmFwaV9yeCk7XG4mIzQzO1x0bmFwaV9lbmFibGVfbG9ja2VkKG5hcGlfdHgpO1xuIFx0aWYgKGd2ZV9pc19ncWkocHJpdikpIHtcbiBcdFx0aWYgKGd2ZV9yeF93b3JrX3BlbmRpbmcoXHUwMDI2cHJpdi1cdTAwM2VyeFtxaWRdKSlcbiBcdFx0XHRuYXBpX3NjaGVkdWxlKG5hcGlfcngpO1xuQEAgLTE3MjcsNyAmIzQzOzE3MjEsMTQgQEAgc3RhdGljIGludCBndmVfeHNrX3Bvb2xfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdG5hcGlfc2NoZWR1bGUobmFwaV90eCk7XG4gXHR9XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7dW5tYXBfYW5kX3JldHVybjpcbiYjNDM7XHRwb29sID0geHNrX2dldF9wb29sX2Zyb21fcWlkKGRldiwgcWlkKTtcbiYjNDM7XHRpZiAocG9vbClcbiYjNDM7XHRcdHhza19wb29sX2RtYV91bm1hcChwb29sLFxuJiM0MztcdFx0XHRcdCAgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMgfFxuJiM0MztcdFx0XHRcdCAgIERNQV9BVFRSX1dFQUtfT1JERVJJTkcpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW50IGd2ZV94c2tfd2FrZXVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBxdWV1ZV9pZCwgdTMyIGZsYWdzKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmNcbmluZGV4IDBlY2UyZjZmZGZmYjQuLjgxMWRiNDJkMDVjNjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmNcbkBAIC0xMTMsNiAmIzQzOzExMywxMiBAQCBzdGF0aWMgdm9pZCBndmVfcnhfcmVzZXRfcmluZ19kcW8oc3RydWN0IGd2ZV9wcml2ICpwcml2LCBpbnQgaWR4KVxuIFx0XHRcdFx0Z3ZlX2ZyZWVfdG9fcGFnZV9wb29sKHJ4LCBicywgZmFsc2UpO1xuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdGd2ZV9mcmVlX3FwbF9wYWdlX2Rxbyhicyk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoZ3ZlX2J1Zl9zdGF0ZV9pc19hbGxvY2F0ZWQocngsIGJzKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgIGJzLVx1MDAzZXhza19idWZmKSB7XG4mIzQzO1x0XHRcdFx0eHNrX2J1ZmZfZnJlZShicy1cdTAwM2V4c2tfYnVmZik7XG4mIzQzO1x0XHRcdFx0YnMtXHUwMDNleHNrX2J1ZmYgPSBOVUxMO1xuJiM0MztcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC04MzksNyAmIzQzOzg0NSwxMiBAQCBzdGF0aWMgaW50IGd2ZV9yeF9kcW8oc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxuIFx0fVxuIFxuIFx0aWYgKHVubGlrZWx5KGNvbXBsX2Rlc2MtXHUwMDNlcnhfZXJyb3IpKSB7XG4tXHRcdGd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTtcbiYjNDM7XHRcdGlmIChidWZfc3RhdGUtXHUwMDNleHNrX2J1ZmYpIHtcbiYjNDM7XHRcdFx0eHNrX2J1ZmZfZnJlZShidWZfc3RhdGUtXHUwMDNleHNrX2J1ZmYpO1xuJiM0MztcdFx0XHRndmVfZnJlZV9idWZfc3RhdGUocngsIGJ1Zl9zdGF0ZSk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRndmVfZnJlZV9idWZmZXIocngsIGJ1Zl9zdGF0ZSk7XG4mIzQzO1x0XHR9XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuQEAgLTExNDUsMTMgJiM0MzsxMTU2LDE0IEBAIGludCBndmVfcnhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBpbnQgYnVkZ2V0KVxuIFx0XHQvKiBGcmVlIHJ1bm5pbmcgY291bnRlciBvZiBjb21wbGV0ZWQgZGVzY3JpcHRvcnMgKi9cbiBcdFx0cngtXHUwMDNlY250JiM0MzsmIzQzOztcbiBcbi1cdFx0aWYgKCFyeC1cdTAwM2VjdHguc2tiX2hlYWQpXG4tXHRcdFx0Y29udGludWU7XG4tXG4gXHRcdGlmICghY29tcGxfZGVzYy1cdTAwM2VlbmRfb2ZfcGFja2V0KVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHR3b3JrX2RvbmUmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdGlmICghcngtXHUwMDNlY3R4LnNrYl9oZWFkKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4gXHRcdHBrdF9ieXRlcyA9IHJ4LVx1MDAzZWN0eC5za2JfaGVhZC1cdTAwM2VsZW47XG4gXHRcdC8qIFRoZSBldGhlcm5ldCBoZWFkZXIgKGZpcnN0IEVUSF9ITEVOIGJ5dGVzKSBpcyBzbmlwcGVkIG9mZlxuIFx0XHQgKiBieSBldGhfdHlwZV90cmFucy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9HT09HTEUmIzM0OywKICAgICYjMzQ7R1ZFJiMzNDssCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1BDSV9NU0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtndmVfcnhfcG9sbF9kcW8mIzM0OywKICAgICYjMzQ7Z3ZlX25hcGlfcG9sbF9kcW8mIzM0OywKICAgICYjMzQ7Z3ZlX3hkcF9wb2xsX2RxbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKGd2ZSkgZHJpdmVyIHRvIGZpeCBidWdzIHJlbGF0ZWQgdG8gQUZfWERQIChYRFAgc29ja2V0cykgc3VwcG9ydC4gSXQgZml4ZXMgYSBtZW1vcnkgbGVhayBpbiBgZ3ZlX3J4X3Jlc2V0X3JpbmdfZHFvYCBhbmQgYGd2ZV9yeF9kcW9gIGJ5IHByb3Blcmx5IGZyZWVpbmcgYHhza19idWZmYC4gSXQgYWxzbyBmaXhlcyBhIGJ1ZyBpbiBgZ3ZlX3J4X3BvbGxfZHFvYCB3aGVyZSBgd29ya19kb25lYCB3YXMgbm90IGluY3JlbWVudGVkIGNvcnJlY3RseSwgYW5kIGZpeGVzIERNQSB1bm1hcHBpbmcgaW4gYGd2ZV94c2tfcG9vbF9lbmFibGVgIGFuZCBgZ3ZlX3hza19wb29sX2Rpc2FibGVgLiBUaGVzZSBjaGFuZ2VzIGhhdmUgZnVuY3Rpb25hbCBpbXBhY3Qgb24gdGhlIG5ldHdvcmsgZGF0YXBhdGggYW5kIEFGX1hEUCBzb2NrZXQgaGFuZGxpbmcuIFRoZSBHVkUgZHJpdmVyIGlzIHRoZSBwcmltYXJ5IG5ldHdvcmsgaW50ZXJmYWNlIHVzZWQgaW4gR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpIFZNcywgd2hlcmUgc3l6a2FsbGVyIHJ1bnMsIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIGhpZ2hseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZkODg0MWZhMjY4MzRhOTE0Y2ZhNzhjYTI0YTc2OTIzYjhhYmU2MGEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxNSAwMDoxNzozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYwppbmRleCBlNGQ3OGFlNTJkYWZlLi5jY2FmNWY4NmExZTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jCkBAIC0xNjU0LDIwICYjNDM7MTY1NCwxOCBAQCBzdGF0aWMgaW50IGd2ZV94c2tfcG9vbF9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAoIXByaXYtJmd0O3hkcF9wcm9nIHx8ICFuZXRpZl9ydW5uaW5nKGRldikpCiAJCXJldHVybiAwOwogCi0JZXJyID0gZ3ZlX3JlZ194c2tfcG9vbChwcml2LCBkZXYsIHBvb2wsIHFpZCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfeHNrX3Bvb2xfZG1hX21hcHBlZDsKLQotCS8qIFN0b3AgYW5kIHN0YXJ0IFJEQSBxdWV1ZXMgdG8gcmVwb3N0IGJ1ZmZlcnMuICovCi0JaWYgKCFndmVfaXNfcXBsKHByaXYpKSB7CiYjNDM7CWlmIChndmVfaXNfcXBsKHByaXYpKSB7CiYjNDM7CQllcnIgPSBndmVfcmVnX3hza19wb29sKHByaXYsIGRldiwgcG9vbCwgcWlkKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBlcnJfeHNrX3Bvb2xfZG1hX21hcHBlZDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIFN0b3AgYW5kIHN0YXJ0IFJEQSBxdWV1ZXMgdG8gcmVwb3N0IGJ1ZmZlcnMuICovCiAJCWVyciA9IGd2ZV9jb25maWd1cmVfcmluZ3NfeGRwKHByaXYsIHByaXYtJmd0O3J4X2NmZy5udW1fcXVldWVzKTsKIAkJaWYgKGVycikKLQkJCWdvdG8gZXJyX3hza19wb29sX3JlZ2lzdGVyZWQ7CiYjNDM7CQkJZ290byBlcnJfeHNrX3Bvb2xfZG1hX21hcHBlZDsKIAl9CiAJcmV0dXJuIDA7CiAKLWVycl94c2tfcG9vbF9yZWdpc3RlcmVkOgotCWd2ZV91bnJlZ194c2tfcG9vbChwcml2LCBxaWQpOwogZXJyX3hza19wb29sX2RtYV9tYXBwZWQ6CiAJY2xlYXJfYml0KHFpZCwgcHJpdi0mZ3Q7eHNrX3Bvb2xzKTsKIAl4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwKQEAgLTE2ODMsNDIgJiM0MzsxNjgxLDM4IEBAIHN0YXRpYyBpbnQgZ3ZlX3hza19wb29sX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGlfcng7CiAJc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpX3R4OwogCXN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sOwomIzQzOwlpbnQgZXJyID0gMDsKIAlpbnQgdHhfcWlkOwotCWludCBlcnI7CiAKLQlpZiAocWlkICZndDs9IHByaXYtJmd0O3J4X2NmZy5udW1fcXVldWVzKQotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKHFpZCAmZ3Q7PSBwcml2LSZndDtyeF9jZmcubnVtX3F1ZXVlcykgewomIzQzOwkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gdW5tYXBfYW5kX3JldHVybjsKJiM0MzsJfQogCiAJY2xlYXJfYml0KHFpZCwgcHJpdi0mZ3Q7eHNrX3Bvb2xzKTsKIAotCXBvb2wgPSB4c2tfZ2V0X3Bvb2xfZnJvbV9xaWQoZGV2LCBxaWQpOwotCWlmIChwb29sKQotCQl4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwKLQkJCQkgICBETUFfQVRUUl9TS0lQX0NQVV9TWU5DIHwKLQkJCQkgICBETUFfQVRUUl9XRUFLX09SREVSSU5HKTsKLQogCWlmICghbmV0aWZfcnVubmluZyhkZXYpIHx8ICFwcml2LSZndDt0eF9jZmcubnVtX3hkcF9xdWV1ZXMpCi0JCXJldHVybiAwOwomIzQzOwkJZ290byB1bm1hcF9hbmRfcmV0dXJuOwogCiAJLyogU3RvcCBhbmQgc3RhcnQgUkRBIHF1ZXVlcyB0byByZXBvc3QgYnVmZmVycy4gKi8KIAlpZiAoIWd2ZV9pc19xcGwocHJpdikgJmFtcDsmYW1wOyBwcml2LSZndDt4ZHBfcHJvZykgewogCQllcnIgPSBndmVfY29uZmlndXJlX3JpbmdzX3hkcChwcml2LCBwcml2LSZndDtyeF9jZmcubnVtX3F1ZXVlcyk7CiAJCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwomIzQzOwkJCWdvdG8gdW5tYXBfYW5kX3JldHVybjsKIAl9CiAKIAluYXBpX3J4ID0gJmFtcDtwcml2LSZndDtudGZ5X2Jsb2Nrc1twcml2LSZndDtyeFtxaWRdLm50ZnlfaWRdLm5hcGk7Ci0JbmFwaV9kaXNhYmxlKG5hcGlfcngpOyAvKiBtYWtlIHN1cmUgY3VycmVudCByeCBwb2xsIGlzIGRvbmUgKi8KJiM0MzsJbmFwaV9kaXNhYmxlX2xvY2tlZChuYXBpX3J4KTsgLyogbWFrZSBzdXJlIGN1cnJlbnQgcnggcG9sbCBpcyBkb25lICovCiAKIAl0eF9xaWQgPSBndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsIHFpZCk7CiAJbmFwaV90eCA9ICZhbXA7cHJpdi0mZ3Q7bnRmeV9ibG9ja3NbcHJpdi0mZ3Q7dHhbdHhfcWlkXS5udGZ5X2lkXS5uYXBpOwotCW5hcGlfZGlzYWJsZShuYXBpX3R4KTsgLyogbWFrZSBzdXJlIGN1cnJlbnQgdHggcG9sbCBpcyBkb25lICovCiYjNDM7CW5hcGlfZGlzYWJsZV9sb2NrZWQobmFwaV90eCk7IC8qIG1ha2Ugc3VyZSBjdXJyZW50IHR4IHBvbGwgaXMgZG9uZSAqLwogCiAJZ3ZlX3VucmVnX3hza19wb29sKHByaXYsIHFpZCk7CiAJc21wX21iKCk7IC8qIE1ha2Ugc3VyZSBpdCBpcyB2aXNpYmxlIHRvIHRoZSB3b3JrZXJzIG9uIGRhdGFwYXRoICovCiAKLQluYXBpX2VuYWJsZShuYXBpX3J4KTsKLQluYXBpX2VuYWJsZShuYXBpX3R4KTsKJiM0MzsJbmFwaV9lbmFibGVfbG9ja2VkKG5hcGlfcngpOwomIzQzOwluYXBpX2VuYWJsZV9sb2NrZWQobmFwaV90eCk7CiAJaWYgKGd2ZV9pc19ncWkocHJpdikpIHsKIAkJaWYgKGd2ZV9yeF93b3JrX3BlbmRpbmcoJmFtcDtwcml2LSZndDtyeFtxaWRdKSkKIAkJCW5hcGlfc2NoZWR1bGUobmFwaV9yeCk7CkBAIC0xNzI3LDcgJiM0MzsxNzIxLDE0IEBAIHN0YXRpYyBpbnQgZ3ZlX3hza19wb29sX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCW5hcGlfc2NoZWR1bGUobmFwaV90eCk7CiAJfQogCi0JcmV0dXJuIDA7CiYjNDM7dW5tYXBfYW5kX3JldHVybjoKJiM0MzsJcG9vbCA9IHhza19nZXRfcG9vbF9mcm9tX3FpZChkZXYsIHFpZCk7CiYjNDM7CWlmIChwb29sKQomIzQzOwkJeHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsCiYjNDM7CQkJCSAgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMgfAomIzQzOwkJCQkgICBETUFfQVRUUl9XRUFLX09SREVSSU5HKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBndmVfeHNrX3dha2V1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcXVldWVfaWQsIHUzMiBmbGFncykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMKaW5kZXggMGVjZTJmNmZkZmZiNC4uODExZGI0MmQwNWM2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMKQEAgLTExMyw2ICYjNDM7MTEzLDEyIEBAIHN0YXRpYyB2b2lkIGd2ZV9yeF9yZXNldF9yaW5nX2RxbyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIGludCBpZHgpCiAJCQkJZ3ZlX2ZyZWVfdG9fcGFnZV9wb29sKHJ4LCBicywgZmFsc2UpOwogCQkJZWxzZQogCQkJCWd2ZV9mcmVlX3FwbF9wYWdlX2Rxbyhicyk7CiYjNDM7CiYjNDM7CQkJaWYgKGd2ZV9idWZfc3RhdGVfaXNfYWxsb2NhdGVkKHJ4LCBicykgJmFtcDsmYW1wOwomIzQzOwkJCSAgICBicy0mZ3Q7eHNrX2J1ZmYpIHsKJiM0MzsJCQkJeHNrX2J1ZmZfZnJlZShicy0mZ3Q7eHNrX2J1ZmYpOwomIzQzOwkJCQlicy0mZ3Q7eHNrX2J1ZmYgPSBOVUxMOwomIzQzOwkJCX0KIAkJfQogCX0KIApAQCAtODM5LDcgJiM0Mzs4NDUsMTIgQEAgc3RhdGljIGludCBndmVfcnhfZHFvKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCwKIAl9CiAKIAlpZiAodW5saWtlbHkoY29tcGxfZGVzYy0mZ3Q7cnhfZXJyb3IpKSB7Ci0JCWd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTsKJiM0MzsJCWlmIChidWZfc3RhdGUtJmd0O3hza19idWZmKSB7CiYjNDM7CQkJeHNrX2J1ZmZfZnJlZShidWZfc3RhdGUtJmd0O3hza19idWZmKTsKJiM0MzsJCQlndmVfZnJlZV9idWZfc3RhdGUocngsIGJ1Zl9zdGF0ZSk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTsKJiM0MzsJCX0KIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMTQ1LDEzICYjNDM7MTE1NiwxNCBAQCBpbnQgZ3ZlX3J4X3BvbGxfZHFvKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpibG9jaywgaW50IGJ1ZGdldCkKIAkJLyogRnJlZSBydW5uaW5nIGNvdW50ZXIgb2YgY29tcGxldGVkIGRlc2NyaXB0b3JzICovCiAJCXJ4LSZndDtjbnQmIzQzOyYjNDM7OwogCi0JCWlmICghcngtJmd0O2N0eC5za2JfaGVhZCkKLQkJCWNvbnRpbnVlOwotCiAJCWlmICghY29tcGxfZGVzYy0mZ3Q7ZW5kX29mX3BhY2tldCkKIAkJCWNvbnRpbnVlOwogCiAJCXdvcmtfZG9uZSYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlpZiAoIXJ4LSZndDtjdHguc2tiX2hlYWQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCXBrdF9ieXRlcyA9IHJ4LSZndDtjdHguc2tiX2hlYWQtJmd0O2xlbjsKIAkJLyogVGhlIGV0aGVybmV0IGhlYWRlciAoZmlyc3QgRVRIX0hMRU4gYnl0ZXMpIGlzIHNuaXBwZWQgb2ZmCiAJCSAqIGJ5IGV0aF90eXBlX3RyYW5zLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODUzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkdWRSBEcml2ZXIgWERQL0FGX1hEUCBDaGFuZ2VzIC0gV29ydGggSW52ZXN0aWdhdGluZyoqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggdG91Y2hlcyB0aGUgYGd2ZV9tYWluLmNgIGFuZCBgZ3ZlX3J4X2Rxby5jYCBmaWxlcyB3aXRoaW4gdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChHVkUpIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCBmb2N1c2VzIG9uIHRoZSBYRFAgYW5kIEFGX1hEUCAoeHNrKSBzdXBwb3J0LCBtb2RpZnlpbmcgZnVuY3Rpb25zIGxpa2UgYGd2ZV94c2tfcG9vbF9lbmFibGVgLCBgZ3ZlX3hza19wb29sX2Rpc2FibGVgLCBgZ3ZlX3J4X3Jlc2V0X3JpbmdfZHFvYCwgYGd2ZV9yeF9kcW9gLCBhbmQgYGd2ZV9yeF9wb2xsX2Rxb2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgaXRzIHRlc3RhYmlsaXR5LiBHVkUgaXMgYSB2aXJ0dWFsaXplZCBkcml2ZXIsIGlzbiYjMzk7dCBpdD8gQWgsIHllcywgaXQmIzM5O3MgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHVzZWQgaW4gR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpLCBzbyBpdCAqaXMqIHZpcnR1YWxpemVkLiBBbmQgc3l6a2FsbGVyLCB3aGljaCBJIHVzZSBleHRlbnNpdmVseSwgcnVucyBvbiBHQ0UgYnkgZGVmYXVsdCwgc28gR1ZFIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBXYWl0LCBkb2VzIHN5emthbGxlciBhY3R1YWxseSAqdXNlKiBHVkU/IFllcywgdXN1YWxseSBHQ0UgVk1zIGxldmVyYWdlIEdWRSBvciB2aXJ0aW8tbmV0LgoKVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogaXMgaXQgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gSXQmIzM5O3MgYSBuZXR3b3JrIGRyaXZlciBhbmQgaXQmIzM5O3MgcmVhY2hhYmxlIGZyb20gdGhlIGd1ZXN0LCBlaXRoZXIgYXMgdGhlIHByaW1hcnkgaW50ZXJmYWNlIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgaWYgd2UgY2FuIGluc3RhbnRpYXRlIGl0LiBXaGlsZSBpbnN0YW50aWF0aW5nIGl0IGluIFFFTVUgbWlnaHQgYmUgdHJpY2t5LCBzeXprYWxsZXIgKmlzKiBydW5uaW5nIGluIEdDRSwgd2hlcmUgR1ZFIGlzIHByZXNlbnQsIGFuZCB0aGVyZWZvcmUgYWNjZXNzaWJsZS4gVGhlIGRvY3VtZW50YXRpb24gZXhwbGljaXRseSBtZW50aW9ucyBub3QgYm90aGVyaW5nIHdpdGggY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiBHQ0Ug4oCTIGFuZCB0aGlzIGlzICp0aGUqIEdDRSBuZXR3b3JrIGRyaXZlciEKCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUgY2hhbmdlcy4gVGhlIHBhdGNoIG1vZGlmaWVzIGBndmVfeHNrX3Bvb2xfZW5hYmxlYCBhbmQgYGd2ZV94c2tfcG9vbF9kaXNhYmxlYC4gQWxzbywgYGd2ZV9yeF9yZXNldF9yaW5nX2Rxb2AgYW5kIGBndmVfcnhfZHFvYCBhcmUgdXBkYXRlZCB0byBoYW5kbGUgdGhlIGB4c2tfYnVmZmAgZnJlZWluZy4gQW5kIGBndmVfcnhfcG9sbF9kcW9gIGdldHMgYSBidWcgZml4LiBUaGlzIHNlZW1zIGxpa2UgYSBnb29kIHRhcmdldC4gSXQmIzM5O3Mgd29ydGggYSBsb29rIGF0IHRoZSBjb25maWcgZm9yIEdWRSwgd2hpY2ggc2hvdWxkIGJlIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZ2AuIExldCYjMzk7cyBjaGVjayBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgR1ZFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZz0xNj1pZiBORVRfVkVORE9SX0dPT0dMRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWctMTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZzoxODpjb25maWcgR1ZFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZy0xOS1cdHRyaXN0YXRlIFwmIzM0O0dvb2dsZSBWaXJ0dWFsIE5JQyAoZ1ZOSUMpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTk3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3Igc29tZXRoaW5nLiBUaGUgbmF0dXJhbCBzdGFydGluZyBwb2ludCwgYXMgYWx3YXlzLCBpcyB0aGUgS2NvbmZpZyBmaWxlLiBJJiMzOTttIGRlYWxpbmcgd2l0aCB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0gYW5kIHNwZWNpZmljYWxseSBFdGhlcm5ldCBkcml2ZXJzIGZyb20gR29vZ2xlLCBzbyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWdgIHNlZW1zIGxpa2UgdGhlIG9idmlvdXMgcGxhY2UgdG8gYmVnaW4uIFRpbWUgdG8gb3BlbiBpdCB1cCBhbmQgc2VlIHdoYXQgSSBjYW4gbGVhcm4gYWJvdXQgaG93IHRoaXMgcGllY2UgZml0cyBpbnRvIHRoZSBsYXJnZXIgcHV6emxlIG9mIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhpcyBLY29uZmlnIGZpbGUgcmV2ZWFscy4uLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cywgbWF5YmUgc29tZSBgc2VsZWN0YCBkaXJlY3RpdmVzLCBhbmQgaG9wZWZ1bGx5IGVub3VnaCBjbHVlcyB0byBwaW5wb2ludCB0aGUgcmVxdWlyZWQgcHJlcmVxdWlzaXRlcyBmb3IgZW5hYmxpbmcgdGhpcyBzcGVjaWZpYyBHb29nbGUgRXRoZXJuZXQgZHJpdmVyLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsLCBvZiBjb3Vyc2UsIHRvIGF2b2lkIGFueSBidWlsZCBmYWlsdXJlcyBvciBydW50aW1lIGlzc3VlcyBkb3duIHRoZSBsaW5lLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjXG4gICAyOlx0IyBHb29nbGUgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxuICAgMzpcdCNcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgTkVUX1ZFTkRPUl9HT09HTEVcbiAgIDY6XHRcdGJvb2wgXCYjMzQ7R29vZ2xlIERldmljZXNcJiMzNDtcbiAgIDc6XHRcdGRlZmF1bHQgeVxuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBkZXZpY2UgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxuICAxMDpcdFxuICAxMTpcdFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbiAgMTI6XHRcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbFxuICAxMzpcdFx0ICB0aGUgcXVlc3Rpb25zIGFib3V0IEdvb2dsZSBkZXZpY2VzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkXG4gIDE0Olx0XHQgIGZvciB5b3VyIHNwZWNpZmljIGRldmljZSBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cbiAgMTU6XHRcbiAgMTY6XHRpZiBORVRfVkVORE9SX0dPT0dMRVxuICAxNzpcdFxuICAxODpcdGNvbmZpZyBHVkVcbiAgMTk6XHRcdHRyaXN0YXRlIFwmIzM0O0dvb2dsZSBWaXJ0dWFsIE5JQyAoZ1ZOSUMpIHN1cHBvcnRcJiMzNDtcbiAgMjA6XHRcdGRlcGVuZHMgb24gKFBDSV9NU0kgXHUwMDI2XHUwMDI2IChYODYgfHwgQ1BVX0xJVFRMRV9FTkRJQU4pKVxuICAyMTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICAyMjpcdFx0c2VsZWN0IFBBR0VfUE9PTFxuICAyMzpcdFx0aGVscFxuICAyNDpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBHb29nbGUgVmlydHVhbCBOSUMgKGdWTklDKVwmIzM0O1xuICAyNTpcdFxuICAyNjpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxuICAyNzpcdFx0ICBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGd2ZS5cbiAgMjg6XHRcbiAgMjk6XHRlbmRpZiAjTkVUX1ZFTkRPUl9HT09HTEVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjI3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIEdWRSBEcml2ZXI6IEluaXRpYWwgVGhvdWdodHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgTkVUX1ZFTkRPUl9HT09HTEVgIGFuZCBgR1ZFYC4gUmlnaHQsIGFuZCBgR1ZFYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBQQ0lfTVNJYCwgd2hpY2ggaXMgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCBmb3Igc2V0dXAuIFRoZSBjb3JlIHF1ZXN0aW9uIGlzOiBjYW4gSSBlZmZlY3RpdmVseSBmdXp6IGBndmVfeHNrX3Bvb2xfZW5hYmxlYD8gVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQuIFRoaW5raW5nIGFib3V0IGl0LCB0aGUgYW5zd2VyIGlzIHllcywgSSBjYW4uIExldmVyYWdpbmcgQUZfWERQIHNvY2tldHMgb24gdGhlIEdWRSBpbnRlcmZhY2UgaXMgdGhlIGtleSB0aGVyZS4KCk5vdywgbGV0JiMzOTtzIHBpbnBvaW50IHRoZSBmdW5jdGlvbnMgSSBzaG91bGQgZm9jdXMgbXkgYXR0ZW50aW9uIG9uLiBJJiMzOTttIHRoaW5raW5nOiBgZ3ZlX3hza19wb29sX2VuYWJsZWAsIGBndmVfeHNrX3Bvb2xfZGlzYWJsZWAsIGBndmVfcnhfcmVzZXRfcmluZ19kcW9gIChldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMsIGl0JiMzOTtzIHJlbGV2YW50IHRvIHRoZSBkYXRhIGZsb3cpLCBgZ3ZlX3J4X2Rxb2AgKGFub3RoZXIgc3RhdGljIG9uZSB0aGF0IGxpa2VseSBkb2VzIGltcG9ydGFudCB3b3JrKSwgYW5kIGNydWNpYWxseSwgYGd2ZV9yeF9wb2xsX2Rxb2AsIHdoaWNoIGlzIG5vbi1zdGF0aWMgYW5kIG9mZmVycyBhIGRpcmVjdCBhY2Nlc3MgcG9pbnQuCgpUaW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byBleGFtaW5lIGBndmVfeHNrX3Bvb2xfZW5hYmxlYCBhbmQgYGd2ZV94c2tfcG9vbF9kaXNhYmxlYCBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jYC4gVGhvc2UgYXJlIG15IGVudHJ5IHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtndmVfeHNrX3Bvb2xfZW5hYmxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTE2MTY9c3RhdGljIGludCBndmVfeGRwX3htaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG4sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE2MjgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6MTYyOTpzdGF0aWMgaW50IGd2ZV94c2tfcG9vbF9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xNjMwLVx0XHRcdCAgICAgICBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MTgwNT1zdGF0aWMgaW50IGd2ZV94ZHAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGRldl9icGYgKnhkcClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTgxNy1cdFx0aWYgKHhkcC1cdTAwM2V4c2sucG9vbClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxODE4Olx0XHRcdHJldHVybiBndmVfeHNrX3Bvb2xfZW5hYmxlKGRldiwgeGRwLVx1MDAzZXhzay5wb29sLCB4ZHAtXHUwMDNleHNrLnF1ZXVlX2lkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xODE5LVx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ5NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipBbmFseXppbmcgdGhlIEdWRSBEYXRhIFBhdGgqKgoKT2theSwgc28gYGd2ZV94c2tfcG9vbF9lbmFibGVgIGlzIGRlZmluZWQgYXMgYSBzdGF0aWMgdmFyaWFibGUsIHRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIGtub3cgcmlnaHQgb2ZmIHRoZSBiYXQuIEl0IG1lYW5zIGl0cyB2aXNpYmlsaXR5IGFuZCBsaWZldGltZSBhcmUgcmVzdHJpY3RlZCB3aXRoaW4gaXRzIGNvbXBpbGF0aW9uIHVuaXQsIHVzdWFsbHkgYSBnb29kIGluZGljYXRvciB0aGF0IGl0JiMzOTtzIGFuIGludGVybmFsIGZsYWcgb3Igc2V0dGluZywgbm90IHNvbWV0aGluZyBleHBvc2VkIGdsb2JhbGx5LiBOb3csIHRoZSBtYWluIGVudHJ5IHBvaW50cyBzZWVtIHRvIGJlIGVpdGhlciBgZ3ZlX3hkcGAgb3IgYGd2ZV94c2tfd2FrZXVwYC4gR2l2ZW4gdGhvc2UgdHdvLCBpdCBtYWtlcyB0aGUgbW9zdCBzZW5zZSB0byBzdGFydCB3aXRoIGBndmVfeGRwYCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsIGRhdGEgZmxvdy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBzdGF0aWMgdmFyaWFibGUgKGBndmVfeHNrX3Bvb2xfZW5hYmxlYCkgaXMgdXNlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIFhEUCBoYW5kbGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtndmVfeGRwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaD0xODk9c3RydWN0IGd2ZV9yeF9idWZfc3RhdGVfZHFvIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTIwOC0vKiBXcmFwcGVyIGZvciBYRFAgUnggbWV0YWRhdGEgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MjA5OnN0cnVjdCBndmVfeGRwX2J1ZmYge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0yMTAtXHRzdHJ1Y3QgeGRwX2J1ZmYgeGRwO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg9MTE3OT1zdGF0aWMgaW5saW5lIHUzMiBndmVfbnVtX3R4X3F1ZXVlcyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMTgzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaDoxMTg0OnN0YXRpYyBpbmxpbmUgdTMyIGd2ZV94ZHBfdHhfcXVldWVfaWQoc3RydWN0IGd2ZV9wcml2ICpwcml2LCB1MzIgcXVldWVfaWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTExODUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMTE4OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MTE4OTpzdGF0aWMgaW5saW5lIHUzMiBndmVfeGRwX3R4X3N0YXJ0X3F1ZXVlX2lkKHN0cnVjdCBndmVfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMTE5MC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oOjExOTE6XHRyZXR1cm4gZ3ZlX3hkcF90eF9xdWV1ZV9pZChwcml2LCAwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMTE5Mi19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaD0xMjI2PW5ldGRldl90eF90IGd2ZV90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MTIyNzppbnQgZ3ZlX3hkcF94bWl0X2dxaShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbiwgc3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMTIyOC1cdFx0ICAgICB1MzIgZmxhZ3MpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaDoxMjI5OmludCBndmVfeGRwX3htaXRfZHFvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuLCBzdHJ1Y3QgeGRwX2ZyYW1lICoqZnJhbWVzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMjMwLVx0XHQgICAgIHUzMiBmbGFncyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oOjEyMzE6aW50IGd2ZV94ZHBfeG1pdF9vbmUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX3R4X3JpbmcgKnR4LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMjMyLVx0XHQgICAgIHZvaWQgKmRhdGEsIGludCBsZW4sIHZvaWQgKmZyYW1lX3ApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaDoxMjMzOnZvaWQgZ3ZlX3hkcF90eF9mbHVzaChzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHUzMiB4ZHBfcWlkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MTIzNDppbnQgZ3ZlX3hkcF94bWl0X29uZV9kcW8oc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX3R4X3JpbmcgKnR4LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMjM1LVx0XHRcdCBzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg9MTIzNj1ib29sIGd2ZV90eF9wb2xsKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpibG9jaywgaW50IGJ1ZGdldCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oOjEyMzc6Ym9vbCBndmVfeGRwX3BvbGwoc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBpbnQgYnVkZ2V0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMTIzOC1pbnQgZ3ZlX3hza190eF9wb2xsKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpibG9jaywgaW50IGJ1ZGdldCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZHFvLmg9MzY9bmV0ZGV2X2ZlYXR1cmVzX3QgZ3ZlX2ZlYXR1cmVzX2NoZWNrX2RxbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Rxby5oLTM4LVx0XHRcdFx0XHQgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZHFvLmg6Mzk6aW50IGd2ZV94ZHBfcnhfdGltZXN0YW1wKGNvbnN0IHN0cnVjdCB4ZHBfbWQgKl9jdHgsIHU2NCAqdGltZXN0YW1wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Rxby5oLTQwLWJvb2wgZ3ZlX3R4X3BvbGxfZHFvKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpibG9jaywgYm9vbCBkb19jbGVhbik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9kcW8uaDo0MTpib29sIGd2ZV94ZHBfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Rxby5oLTQyLWJvb2wgZ3ZlX3hza190eF9wb2xsX2RxbyhzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqYmxvY2ssIGludCBidWRnZXQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Rxby5oPTY1PXZvaWQgZ3ZlX3J4X3dyaXRlX2Rvb3JiZWxsX2Rxbyhjb25zdCBzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIGludCBxdWV1ZV9pZHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZHFvLmg6NjY6dm9pZCBndmVfeGRwX3R4X2ZsdXNoX2RxbyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHUzMiB4ZHBfcWlkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Rxby5oLTY3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0zNTM9aW50IGd2ZV9uYXBpX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0zNjctXHRcdGVsc2UgaWYgKGJ1ZGdldClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzozNjg6XHRcdFx0cmVzY2hlZHVsZSB8PSBndmVfeGRwX3BvbGwoYmxvY2ssIGJ1ZGdldCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMzY5LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz00MTE9aW50IGd2ZV9uYXBpX3BvbGxfZHFvKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtNDIyLVx0XHRlbHNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6NDIzOlx0XHRcdHJlc2NoZWR1bGUgfD0gZ3ZlX3hkcF9wb2xsX2RxbyhibG9jayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtNDI0LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz05MzY9c3RhdGljIHZvaWQgaW5pdF94ZHBfc3luY19zdGF0cyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtOTM3LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzo5Mzg6XHRpbnQgc3RhcnRfaWQgPSBndmVfeGRwX3R4X3N0YXJ0X3F1ZXVlX2lkKHByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTkzOS1cdGludCBpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0xMjEwPXN0YXRpYyB2b2lkIGd2ZV91bnJlZ194c2tfcG9vbChzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHUxNiBxaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTEyMjMtXHRcdHJldHVybjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxMjI0Olx0cHJpdi1cdTAwM2V0eFtndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsIHFpZCldLnhza19wb29sID0gTlVMTDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xMjI1LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MTIyNz1zdGF0aWMgaW50IGd2ZV9yZWdfeHNrX3Bvb2woc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xMjQzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjEyNDQ6XHR0eF9xaWQgPSBndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsIHFpZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTI0NS1cdHByaXYtXHUwMDNldHhbdHhfcWlkXS54c2tfcG9vbCA9IHBvb2w7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTE1Nzk9c3RhdGljIGludCBndmVfc2V0X3hkcChzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTYxNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxNjE2OnN0YXRpYyBpbnQgZ3ZlX3hkcF94bWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE2MTctXHRcdFx0c3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcywgdTMyIGZsYWdzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xNjIxLVx0aWYgKHByaXYtXHUwMDNlcXVldWVfZm9ybWF0ID09IEdWRV9HUUlfUVBMX0ZPUk1BVClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxNjIyOlx0XHRyZXR1cm4gZ3ZlX3hkcF94bWl0X2dxaShkZXYsIG4sIGZyYW1lcywgZmxhZ3MpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE2MjMtXHRlbHNlIGlmIChwcml2LVx1MDAzZXF1ZXVlX2Zvcm1hdCA9PSBHVkVfRFFPX1JEQV9GT1JNQVQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6MTYyNDpcdFx0cmV0dXJuIGd2ZV94ZHBfeG1pdF9kcW8oZGV2LCBuLCBmcmFtZXMsIGZsYWdzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xNjI1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0xNjc3PXN0YXRpYyBpbnQgZ3ZlX3hza19wb29sX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTcwNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxNzA3Olx0dHhfcWlkID0gZ3ZlX3hkcF90eF9xdWV1ZV9pZChwcml2LCBxaWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE3MDgtXHRuYXBpX3R4ID0gXHUwMDI2cHJpdi1cdTAwM2VudGZ5X2Jsb2Nrc1twcml2LVx1MDAzZXR4W3R4X3FpZF0ubnRmeV9pZF0ubmFwaTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MTc1Nj1zdGF0aWMgaW50IGd2ZV92ZXJpZnlfeGRwX2NvbmZpZ3VyYXRpb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTgwNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxODA1OnN0YXRpYyBpbnQgZ3ZlX3hkcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ZGV2X2JwZiAqeGRwKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE4MDYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0yMjQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZ3ZlX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTIyNTItXHQubmRvX3NldF9mZWF0dXJlc1x0PVx0Z3ZlX3NldF9mZWF0dXJlcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoyMjUzOlx0Lm5kb19icGZcdFx0PVx0Z3ZlX3hkcCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoyMjU0Olx0Lm5kb194ZHBfeG1pdFx0XHQ9XHRndmVfeGRwX3htaXQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjI1NS1cdC5uZG9feHNrX3dha2V1cFx0XHQ9XHRndmVfeHNrX3dha2V1cCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MjM3OT1zdGF0aWMgdm9pZCBndmVfc2V0X25ldGRldl94ZHBfZmVhdHVyZXMoc3RydWN0IGd2ZV9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yMzk3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjIzOTg6c3RhdGljIGNvbnN0IHN0cnVjdCB4ZHBfbWV0YWRhdGFfb3BzIGd2ZV94ZHBfbWV0YWRhdGFfb3BzID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjIzOTk6XHQueG1vX3J4X3RpbWVzdGFtcFx0PSBndmVfeGRwX3J4X3RpbWVzdGFtcCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yNDAwLX07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTI0MDI9c3RhdGljIGludCBndmVfaW5pdF9wcml2KHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgYm9vbCBza2lwX2Rlc2NyaWJlX2RldmljZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjQ5Ny1cdGlmICghZ3ZlX2lzX2dxaShwcml2KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoyNDk4Olx0XHRwcml2LVx1MDAzZWRldi1cdTAwM2V4ZHBfbWV0YWRhdGFfb3BzID0gXHUwMDI2Z3ZlX3hkcF9tZXRhZGF0YV9vcHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjQ5OS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jPTY5ND1zdGF0aWMgaW50IGd2ZV94c2tfcG9vbF9yZWRpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtNzE4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYzo3MTk6c3RhdGljIGludCBndmVfeGRwX3JlZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBndmVfcnhfcmluZyAqcngsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTcyMC1cdFx0XHQgICAgc3RydWN0IHhkcF9idWZmICpvcmlnLCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtNzUxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYzo3NTI6c3RhdGljIHZvaWQgZ3ZlX3hkcF9kb25lKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtNzUzLVx0XHRcdCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgc3RydWN0IGJwZl9wcm9nICp4cHJvZyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTc2NS1cdGNhc2UgWERQX1RYOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYzo3NjY6XHRcdHR4X3FpZCA9IGd2ZV94ZHBfdHhfcXVldWVfaWQocHJpdiwgcngtXHUwMDNlcV9udW0pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYy03NjctXHRcdHR4ID0gXHUwMDI2cHJpdi1cdTAwM2V0eFt0eF9xaWRdO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYy03NjgtXHRcdHNwaW5fbG9jayhcdTAwMjZ0eC1cdTAwM2V4ZHBfbG9jayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jOjc2OTpcdFx0ZXJyID0gZ3ZlX3hkcF94bWl0X29uZShwcml2LCB0eCwgeGRwLVx1MDAzZWRhdGEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTc3MC1cdFx0XHRcdCAgICAgICB4ZHAtXHUwMDNlZGF0YV9lbmQgLSB4ZHAtXHUwMDNlZGF0YSwgTlVMTCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYy03NzktXHRjYXNlIFhEUF9SRURJUkVDVDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM6NzgwOlx0XHRlcnIgPSBndmVfeGRwX3JlZGlyZWN0KHByaXYtXHUwMDNlZGV2LCByeCwgeGRwLCB4cHJvZyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTc4MS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jPTc5Nj1zdGF0aWMgdm9pZCBndmVfcngoc3RydWN0IGd2ZV9yeF9yaW5nICpyeCwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTg2Ni1cdFx0aWYgKHhkcF9hY3QgIT0gWERQX1BBU1MpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM6ODY3Olx0XHRcdGd2ZV94ZHBfZG9uZShwcml2LCByeCwgXHUwMDI2eGRwLCB4cHJvZywgeGRwX2FjdCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTg2OC1cdFx0XHRjdHgtXHUwMDNldG90YWxfc2l6ZSAmIzQzOz0gZnJhZ19zaXplO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM9MTAwMD1zdGF0aWMgaW50IGd2ZV9jbGVhbl9yeF9kb25lKHN0cnVjdCBndmVfcnhfcmluZyAqcngsIGludCBidWRnZXQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYy0xMDUyLVx0aWYgKHhkcF90eHMgIT0gcngtXHUwMDNleGRwX2FjdGlvbnNbWERQX1RYXSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM6MTA1MzpcdFx0Z3ZlX3hkcF90eF9mbHVzaChwcml2LCByeC1cdTAwM2VxX251bSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTEwNTQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM9MjM1PWludCBndmVfcnhfYWxsb2NfcmluZ19kcW8oc3RydWN0IGd2ZV9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTI2Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjI2MzpcdC8qIHN0cnVjdCBndmVfeGRwX2J1ZmYgaXMgb3ZlcmxhaWQgb24gc3RydWN0IHhkcF9idWZmX3hzayBhbmQgdXRpbGl6ZXNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTI2NC1cdCAqIHRoZSAyNCBieXRlIGZpZWxkIGNiIHRvIHN0b3JlIGd2ZSBzcGVjaWZpYyBkYXRhLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtMjY1LVx0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzoyNjY6XHRYU0tfQ0hFQ0tfUFJJVl9UWVBFKHN0cnVjdCBndmVfeGRwX2J1ZmYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtMjY3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jPTUxNT1zdGF0aWMgdm9pZCBndmVfcnhfc2tiX2h3dHN0YW1wKHN0cnVjdCBndmVfcnhfcmluZyAqcngsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNTI0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6NTI1OmludCBndmVfeGRwX3J4X3RpbWVzdGFtcChjb25zdCBzdHJ1Y3QgeGRwX21kICpfY3R4LCB1NjQgKnRpbWVzdGFtcClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTUyNi17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo1Mjc6XHRjb25zdCBzdHJ1Y3QgZ3ZlX3hkcF9idWZmICpjdHggPSAodm9pZCAqKV9jdHg7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy01MjgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM9NjExPXN0YXRpYyBpbnQgZ3ZlX3J4X2FwcGVuZF9mcmFncyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNjQ5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6NjUwOnN0YXRpYyBpbnQgZ3ZlX3hkcF90eF9kcW8oc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNjUxLVx0XHRcdCAgc3RydWN0IHhkcF9idWZmICp4ZHApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNjY0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6NjY1Olx0dHhfcWlkID0gZ3ZlX3hkcF90eF9xdWV1ZV9pZChwcml2LCByeC1cdTAwM2VxX251bSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy02NjYtXHR0eCA9IFx1MDAyNnByaXYtXHUwMDNldHhbdHhfcWlkXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTY2Ny1cdHNwaW5fbG9jayhcdTAwMjZ0eC1cdTAwM2VkcW9fdHgueGRwX2xvY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6NjY4Olx0ZXJyID0gZ3ZlX3hkcF94bWl0X29uZV9kcW8ocHJpdiwgdHgsIHhkcGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNjY5LVx0c3Bpbl91bmxvY2soXHUwMDI2dHgtXHUwMDNlZHFvX3R4LnhkcF9sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYz02NzQ9c3RhdGljIHZvaWQgZ3ZlX3hza19kb25lX2RxbyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBndmVfcnhfcmluZyAqcngsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNjg0LVx0Y2FzZSBYRFBfVFg6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo2ODU6XHRcdGlmICh1bmxpa2VseShndmVfeGRwX3R4X2Rxbyhwcml2LCByeCwgeGRwKSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy02ODYtXHRcdFx0Z290byBlcnI7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNzA4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6NzA5OnN0YXRpYyB2b2lkIGd2ZV94ZHBfZG9uZV9kcW8oc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNzEwLVx0XHRcdCAgICAgc3RydWN0IHhkcF9idWZmICp4ZHAsIHN0cnVjdCBicGZfcHJvZyAqeHByb2csXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNzIxLVx0Y2FzZSBYRFBfVFg6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo3MjI6XHRcdGVyciA9IGd2ZV94ZHBfdHhfZHFvKHByaXYsIHJ4LCB4ZHApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNzIzLVx0XHRpZiAodW5saWtlbHkoZXJyKSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYz03NTA9c3RhdGljIGludCBndmVfcnhfeHNrX2RxbyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBndmVfcnhfcmluZyAqcngsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNzU3LVx0c3RydWN0IGd2ZV9wcml2ICpwcml2ID0gcngtXHUwMDNlZ3ZlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6NzU4Olx0c3RydWN0IGd2ZV94ZHBfYnVmZiAqZ3ZlX3hkcDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTc1OS1cdGludCB4ZHBfYWN0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTc2My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjc2NDpcdGd2ZV94ZHAgPSAodm9pZCAqKXhkcDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjc2NTpcdGd2ZV94ZHAtXHUwMDNlZ3ZlID0gcHJpdjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjc2NjpcdGd2ZV94ZHAtXHUwMDNlY29tcGxfZGVzYyA9IGNvbXBsX2Rlc2M7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy03NjctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM9ODIxPXN0YXRpYyBpbnQgZ3ZlX3J4X2RxbyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBndmVfcnhfcmluZyAqcngsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtOTI3LVx0aWYgKHhwcm9nKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo5Mjg6XHRcdHN0cnVjdCBndmVfeGRwX2J1ZmYgZ3ZlX3hkcDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTkyOS1cdFx0dm9pZCAqb2xkX2RhdGE7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtOTMxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6OTMyOlx0XHR4ZHBfaW5pdF9idWZmKFx1MDAyNmd2ZV94ZHAueGRwLCBidWZfc3RhdGUtXHUwMDNlcGFnZV9pbmZvLmJ1Zl9zaXplLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtOTMzLVx0XHRcdCAgICAgIFx1MDAyNnJ4LVx1MDAzZXhkcF9yeHEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6OTM0Olx0XHR4ZHBfcHJlcGFyZV9idWZmKFx1MDAyNmd2ZV94ZHAueGRwLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtOTM1LVx0XHRcdFx0IGJ1Zl9zdGF0ZS1cdTAwM2VwYWdlX2luZm8ucGFnZV9hZGRyZXNzICYjNDM7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtOTM4LVx0XHRcdFx0IGJ1Zl9sZW4sIGZhbHNlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjkzOTpcdFx0Z3ZlX3hkcC5ndmUgPSBwcml2O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6OTQwOlx0XHRndmVfeGRwLmNvbXBsX2Rlc2MgPSBjb21wbF9kZXNjO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtOTQxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6OTQyOlx0XHRvbGRfZGF0YSA9IGd2ZV94ZHAueGRwLmRhdGE7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo5NDM6XHRcdHhkcF9hY3QgPSBicGZfcHJvZ19ydW5feGRwKHhwcm9nLCBcdTAwMjZndmVfeGRwLnhkcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo5NDQ6XHRcdGJ1Zl9zdGF0ZS1cdTAwM2VwYWdlX2luZm8ucGFkICYjNDM7PSBndmVfeGRwLnhkcC5kYXRhIC0gb2xkX2RhdGE7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo5NDU6XHRcdGJ1Zl9sZW4gPSBndmVfeGRwLnhkcC5kYXRhX2VuZCAtIGd2ZV94ZHAueGRwLmRhdGE7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy05NDYtXHRcdGlmICh4ZHBfYWN0ICE9IFhEUF9QQVNTKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo5NDc6XHRcdFx0Z3ZlX3hkcF9kb25lX2Rxbyhwcml2LCByeCwgXHUwMDI2Z3ZlX3hkcC54ZHAsIHhwcm9nLCB4ZHBfYWN0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtOTQ4LVx0XHRcdFx0XHQgYnVmX3N0YXRlKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYz0xMDkxPWludCBndmVfcnhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBpbnQgYnVkZ2V0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTExODgtXHRpZiAoeGRwX3R4cyAhPSByeC1cdTAwM2V4ZHBfYWN0aW9uc1tYRFBfVFhdKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6MTE4OTpcdFx0Z3ZlX3hkcF90eF9mbHVzaF9kcW8ocHJpdiwgcngtXHUwMDNlcV9udW0pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtMTE5MC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eC5jPTE2PXN0YXRpYyBpbmxpbmUgdm9pZCBndmVfdHhfcHV0X2Rvb3JiZWxsKHN0cnVjdCBndmVfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eC5jLTIyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYzoyMzp2b2lkIGd2ZV94ZHBfdHhfZmx1c2goc3RydWN0IGd2ZV9wcml2ICpwcml2LCB1MzIgeGRwX3FpZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmMtMjQte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYzoyNTpcdHUzMiB0eF9xaWQgPSBndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsIHhkcF9xaWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYy0yNi1cdHN0cnVjdCBndmVfdHhfcmluZyAqdHggPSBcdTAwMjZwcml2LVx1MDAzZXR4W3R4X3FpZF07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYz03Nzc9c3RhdGljIGludCBndmVfdHhfZmlsbF94ZHAoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX3R4X3JpbmcgKnR4LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmMtODIzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYzo4MjQ6aW50IGd2ZV94ZHBfeG1pdF9ncWkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG4sIHN0cnVjdCB4ZHBfZnJhbWUgKipmcmFtZXMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eC5jLTgyNS1cdFx0ICAgICB1MzIgZmxhZ3MpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYy04MzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eC5jOjgzNzpcdHFpZCA9IGd2ZV94ZHBfdHhfcXVldWVfaWQocHJpdixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmMtODM4LVx0XHRcdFx0ICBzbXBfcHJvY2Vzc29yX2lkKCkgJSBwcml2LVx1MDAzZXR4X2NmZy5udW1feGRwX3F1ZXVlcyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYy04NDMtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYzo4NDQ6XHRcdGVyciA9IGd2ZV94ZHBfeG1pdF9vbmUocHJpdiwgdHgsIGZyYW1lc1tpXS1cdTAwM2VkYXRhLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYy04NDUtXHRcdFx0XHQgICAgICAgZnJhbWVzW2ldLVx1MDAzZWxlbiwgZnJhbWVzW2ldKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eC5jLTg2Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmM6ODYzOmludCBndmVfeGRwX3htaXRfb25lKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV90eF9yaW5nICp0eCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmMtODY0LVx0XHQgICAgIHZvaWQgKmRhdGEsIGludCBsZW4sIHZvaWQgKmZyYW1lX3ApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYz05NzE9aW50IGd2ZV94c2tfdHhfcG9sbChzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqcnhfYmxvY2ssIGludCBidWRnZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYy05NzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eC5jOjk3ODpcdHR4ID0gXHUwMDI2cHJpdi1cdTAwM2V0eFtndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsIHJ4LVx1MDAzZXFfbnVtKV07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eC5jLTk3OS1cdGlmICh0eC1cdTAwM2V4c2tfcG9vbCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmMtOTkxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYzo5OTI6Ym9vbCBndmVfeGRwX3BvbGwoc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBpbnQgYnVkZ2V0KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYy05OTMte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jPTEwMj1zdGF0aWMgYm9vbCBndmVfaGFzX3BlbmRpbmdfcGFja2V0KHN0cnVjdCBndmVfdHhfcmluZyAqdHgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmMtMTE0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmM6MTE1OnZvaWQgZ3ZlX3hkcF90eF9mbHVzaF9kcW8oc3RydWN0IGd2ZV9wcml2ICpwcml2LCB1MzIgeGRwX3FpZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTExNi17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYzoxMTc6XHR1MzIgdHhfcWlkID0gZ3ZlX3hkcF90eF9xdWV1ZV9pZChwcml2LCB4ZHBfcWlkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTExOC1cdHN0cnVjdCBndmVfdHhfcmluZyAqdHggPSBcdTAwMjZwcml2LVx1MDAzZXR4W3R4X3FpZF07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmM9MTUxMD1ib29sIGd2ZV94c2tfdHhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKnJ4X2Jsb2NrLCBpbnQgYnVkZ2V0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE1MTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYzoxNTE2Olx0dHggPSBcdTAwMjZwcml2LVx1MDAzZXR4W2d2ZV94ZHBfdHhfcXVldWVfaWQocHJpdiwgcngtXHUwMDNlcV9udW0pXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE1MTctXHRpZiAodHgtXHUwMDNleHNrX3Bvb2wpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmMtMTUyMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jOjE1MjM6Ym9vbCBndmVfeGRwX3BvbGxfZHFvKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpibG9jaylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE1MjQte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE1MzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYzoxNTM2OmludCBndmVfeGRwX3htaXRfb25lX2RxbyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBndmVfdHhfcmluZyAqdHgsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYy0xNTM3LVx0XHRcdCBzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE1ODItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYzoxNTgzOmludCBndmVfeGRwX3htaXRfZHFvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuLCBzdHJ1Y3QgeGRwX2ZyYW1lICoqZnJhbWVzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmMtMTU4NC1cdFx0ICAgICB1MzIgZmxhZ3MpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmMtMTU5Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jOjE1OTM6XHRxaWQgPSBndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYy0xNTk0LVx0XHRcdFx0ICBzbXBfcHJvY2Vzc29yX2lkKCkgJSBwcml2LVx1MDAzZXR4X2NmZy5udW1feGRwX3F1ZXVlcyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmMtMTU5OS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG47IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYzoxNjAwOlx0XHRlcnIgPSBndmVfeGRwX3htaXRfb25lX2Rxbyhwcml2LCB0eCwgZnJhbWVzW2ldKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE2MDEtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDkwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJZGVudGlmeWluZyBhbmQgUHJpb3JpdGl6aW5nIEVudHJ5IFBvaW50cyBmb3IgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgbW9zdCBzdWl0YWJsZSBlbnRyeSBwb2ludHMgZm9yIHRoaXMgYW5hbHlzaXMsIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBpbnN0cnVjdGlvbnMuIEkmIzM5O20gbG9va2luZyBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4KCkluaXRpYWxseSwgSSBpZGVudGlmaWVkIGEgZmV3IGtleSBlbnRyeSBwb2ludHM6IGBndmVfeGRwYCAod2hpY2ggaW50ZXJuYWxseSBjYWxscyBgZ3ZlX3hza19wb29sX2VuYWJsZWAgYW5kIGBndmVfeHNrX3Bvb2xfZGlzYWJsZWApLCBgZ3ZlX3hkcF94bWl0YCwgYGd2ZV94c2tfd2FrZXVwYCwgYW5kIGBndmVfbmFwaV9wb2xsX2Rxb2AgKHdoaWNoIGNhbGxzIGBndmVfcnhfcG9sbF9kcW9gKS4gQnV0LCB0aGUgY2FsbCBncmFwaCBpcyBhIGJpdCBtb3JlIGludHJpY2F0ZSB0aGFuIHRoYXQsIHNvIEkgZm9jdXNlZCBvbjogYGd2ZV94ZHBgLCBgZ3ZlX3hza193YWtldXBgLCBgZ3ZlX25hcGlfcG9sbF9kcW9gLCBhbmQgYGd2ZV9yeF9wb2xsX2Rxb2AuCgpOb3csIHRoZSBpbnN0cnVjdGlvbnMgc3Ryb25nbHkgc3VnZ2VzdCBwcmVmZXJyaW5nIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiAgYGd2ZV9yeF9wb2xsX2Rxb2AgaW1tZWRpYXRlbHkgY2F1Z2h0IG15IGV5ZSBiZWNhdXNlIGl0IGlzIG5vbi1zdGF0aWMuIExldCBtZSBjb25maXJtIHRoZSBzaWduYXR1cmU6IGBpbnQgZ3ZlX3J4X3BvbGxfZHFvKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpibG9jaywgaW50IGJ1ZGdldClgLiBDb25maXJtZWQuCgpgZ3ZlX3hkcGAsIHRob3VnaCBhY2Nlc3NpYmxlIHZpYSBgLm5kb19icGZgIGFuZCBzeXprYWxsZXIgKHRocm91Z2ggdGhlIGBicGZgIHN5c2NhbGwgb3IgYG5ldGxpbmtgIFhEUCBzZXR1cCksIGlzIHVuZm9ydHVuYXRlbHkgc3RhdGljLiBUaGUgaW5zdHJ1Y3Rpb25zIGNsZWFybHkgZmF2b3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHNvIGBndmVfeGRwYCBpcyBsZXNzIGlkZWFsLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgc3RhdGljIG5hdHVyZSBvZiBgZ3ZlX3hza19wb29sX2VuYWJsZWAuIFllcywgaXQgaXMgc3RhdGljLgoKT2theSwgbGV0JiMzOTtzIGV4cGFuZCBteSBzZWFyY2ggZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBJIHNlZSBhIGZldyBvcHRpb25zOiBgZ3ZlX3hkcF94bWl0X2Rxb2AsIGBndmVfeGRwX3htaXRfZ3FpYCwgYGd2ZV94ZHBfeG1pdF9vbmVgLCBgZ3ZlX3hkcF90eF9mbHVzaGAsIGBndmVfeGRwX3htaXRfb25lX2Rxb2AsIGBndmVfeGRwX3BvbGxgLCBhbmQgYGd2ZV94c2tfdHhfcG9sbGAuIFRoZXNlIGFyZSBhbHNvIG5vbi1zdGF0aWMgYnV0IEkmIzM5O2xsIGhvbGQgdGhlbSBhcyBzZWNvbmRhcnkgY2FuZGlkYXRlcy4KCkNvbnNpZGVyaW5nIHRoZSBwYXRjaCBtb2RpZmljYXRpb25zLCBmb2N1c2luZyBvbiB0aGUgb25lcyB3aGljaCBhcmUgY2hhbmdlZCBtaWdodCBiZSBhIGJldHRlciBpZGVhLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGd2ZV94c2tfcG9vbF9lbmFibGVgLCBgZ3ZlX3hza19wb29sX2Rpc2FibGVgLCBgZ3ZlX3J4X3Jlc2V0X3JpbmdfZHFvYCwgYGd2ZV9yeF9kcW9gLCBhbmQgYGd2ZV9yeF9wb2xsX2Rxb2AuIFRoaXMgc3Ryb25nbHkgcmVpbmZvcmNlcyBgZ3ZlX3J4X3BvbGxfZHFvYCBhcyBhIGdvb2QgdGFyZ2V0LgoKTm93LCB0aGUgcXVlc3Rpb24gaXMgYWJvdXQgcmVhY2hhYmlsaXR5LCBzcGVjaWZpY2FsbHkgd2l0aGluIEdDRSBhbmQgUUVNVS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGluc3RydWN0aW9ucyBzdGF0ZSB0aGF0IGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSBhcmUgcHJvYmxlbWF0aWMuICBHVkUgaXMgYSB2aXJ0dWFsIE5JQyB1c2VkIGluIEdDRSwgYW5kIHNpbmNlIHN5emthbGxlciBydW5zIG9uIEdDRSwgdGhhdCYjMzk7cyBwZXJmZWN0ISAgVGhlIGRyaXZlciB3aWxsIGJlIHByZXNlbnQgYW5kIGFjdGl2ZS4gR1ZFIGlzIGEgUENJIGRldmljZSwgYnV0IGl0IGlzIGF2YWlsYWJsZS4gVGhlIEdDRSBWTXMgaGF2ZSBHVkUgYXMgdGhlIHByaW1hcnkgbmV0d29yayBpbnRlcmZhY2UsIHNvIGl0JiMzOTtzIGxvYWRlZCBhbmQgcHJlc2VudC4gU3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IGluc3RhbnRpYXRlIHRoZSBkZXZpY2UsIGl0JiMzOTtzIGEgcHJpbWFyeSBpbnRlcmZhY2UuIFRoZXJlZm9yZSwgYGd2ZV9yeF9wb2xsX2Rxb2AgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlLgoKU28sIGBndmVfcnhfcG9sbF9kcW9gIGlzIG15IHByaW1hcnkgZm9jdXMuIEkgd2lsbCBkb3VibGUtY2hlY2sgaXRzIG5vbi1zdGF0aWMgbmF0dXJlIG9uZSBsYXN0IHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBndmVfcnhfcG9sbF9kcW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9kcW8uaD00Mj1ib29sIGd2ZV94c2tfdHhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBpbnQgYnVkZ2V0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Rxby5oOjQzOmludCBndmVfcnhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBpbnQgYnVkZ2V0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Rxby5oLTQ0LWludCBndmVfdHhfYWxsb2NfcmluZ3NfZHFvKHN0cnVjdCBndmVfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYz0xMDU1PXN0YXRpYyBpbnQgZ3ZlX3J4X2NvbXBsZXRlX3NrYihzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtMTA5MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjEwOTE6aW50IGd2ZV9yeF9wb2xsX2RxbyhzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqYmxvY2ssIGludCBidWRnZXQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy0xMDkyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyODIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIElkZW50aWZ5aW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZ3ZlX3J4X3BvbGxfZHFvYCwgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgbm9uLXN0YXRpYywgZ290IHRoYXQuIE5vdywgd2hhdCBhYm91dCBgZ3ZlX3hkcGA/IEFoLCByaWdodCwgdGhhdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbi4gSG1tLCBpcyB0aGVyZSBhbnkgKm5vbi1zdGF0aWMqIGNvdW50ZXJwYXJ0IHRoYXQgY2FsbHMgYGd2ZV94c2tfcG9vbF9lbmFibGVgPyBObywgaXQmIzM5O3MgY2FsbGVkIGRpcmVjdGx5IGZyb20gd2l0aGluIGBndmVfeGRwYC4gTWFrZXMgc2Vuc2UuIEFscmlnaHQsIEkmIzM5O2xsIGFkZCBgZ3ZlX3J4X3BvbGxfZHFvYCB0byBteSBGb2N1c1N5bWJvbHMgbGlzdCDigJMgdGhhdCBzZWVtcyBpbXBvcnRhbnQuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlc2UgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFRpbWUgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIGNvbmZpZ3MuIEkgYWxyZWFkeSBzZWUgYE5FVF9WRU5ET1JfR09PR0xFYCBhbmQgYEdWRWAuLi5idXQgd2FpdCBhIHNlY29uZC4gRG9lcyBlbmFibGluZyBgR1ZFYCBpdHNlbGYgcHVsbCBpbiBkZXBlbmRlbmNpZXMgbGlrZSBgQlBGX1NZU0NBTExgIG9yIGBYRFBfU09DS0VUU2A/IFRoZSBwYXRjaCBJJiMzOTttIGV4YW1pbmluZyBtb2RpZmllcyBgZ3ZlX3hza19wb29sX2VuYWJsZWAsIHdoaWNoLCBpZiBJIHJlY2FsbCwgZGVhbHMgd2l0aCBgeHNrX3Bvb2xfZG1hX3VubWFwYCwgYHhza19nZXRfcG9vbF9mcm9tX3FpZGAsIGFuZCBhbGwgdGhhdCBYRFAtcmVsYXRlZCBzdHVmZi4gU28sIGl0JiMzOTtzIHdvcnRoIGRvdWJsZS1jaGVja2luZyB0aGF0IGBYRFBfU09DS0VUU2AgaXMgYSByZXF1aXJlbWVudCBoZXJlLiBOZWVkIHRvIGNvbmZpcm0gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eHNrX3Bvb2xfZG1hX3VubWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX3hkcC5jPTIxPXN0YXRpYyBpbnQgdHNuZXBfeGRwX2VuYWJsZV9wb29sKHN0cnVjdCB0c25lcF9hZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX3hkcC5jLTQ5LVx0aWYgKHJldHZhbCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfeGRwLmM6NTA6XHRcdHhza19wb29sX2RtYV91bm1hcChwb29sLCBETUFfQVRUUl9TS0lQX0NQVV9TWU5DKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX3hkcC5jLTUxLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX3hkcC5jPTU4PXN0YXRpYyBpbnQgdHNuZXBfeGRwX2Rpc2FibGVfcG9vbChzdHJ1Y3QgdHNuZXBfYWRhcHRlciAqYWRhcHRlciwgdTE2IHF1ZXVlX2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX3hkcC5jLTc0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfeGRwLmM6NzU6XHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwgRE1BX0FUVFJfU0tJUF9DUFVfU1lOQyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF94ZHAuYy03Ni1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTIteHNrLmM9MTczPXN0YXRpYyBpbnQgZHBhYTJfeHNrX2Rpc2FibGVfcG9vbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcWlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi14c2suYy0xODktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTIteHNrLmM6MTkwOlx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXhzay5jLTE5MS1cdGVyciA9IHhkcF9yeHFfaW5mb19yZWdfbWVtX21vZGVsKFx1MDAyNmNoLVx1MDAzZXhkcF9yeHEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXhzay5jPTIyMD1zdGF0aWMgaW50IGRwYWEyX3hza19lbmFibGVfcG9vbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi14c2suYy0yOTQtZXJyX21lbV9tb2RlbDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi14c2suYzoyOTU6XHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwgMCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTIteHNrLmMtMjk2LWVycl9kbWFfdW5tYXA6XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9NDU2MT1zdGF0aWMgaW50IGZlY19lbmFibGVfeHNrX3Bvb2woc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00NTg0LVx0aWYgKGVycikge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6NDU4NTpcdFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNDU4Ni1cdFx0cmV0dXJuIGVycjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYz00NTkyPXN0YXRpYyBpbnQgZmVjX2Rpc2FibGVfeHNrX3Bvb2woc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00NjAxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6NDYwMjpcdFx0eHNrX3Bvb2xfZG1hX3VubWFwKG9sZF9wb29sLCAwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTQ2MDMtXHRcdHJ4cS1cdTAwM2V4c2tfcG9vbCA9IE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNDYxMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjQ2MTM6XHR4c2tfcG9vbF9kbWFfdW5tYXAob2xkX3Bvb2wsIDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNDYxNC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MTYyOT1zdGF0aWMgaW50IGd2ZV94c2tfcG9vbF9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTY3MC1cdGNsZWFyX2JpdChxaWQsIHByaXYtXHUwMDNleHNrX3Bvb2xzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxNjcxOlx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTY3Mi1cdFx0XHQgICBETUFfQVRUUl9TS0lQX0NQVV9TWU5DIHxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MTY3Nz1zdGF0aWMgaW50IGd2ZV94c2tfcG9vbF9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE3MjYtXHRpZiAocG9vbClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxNzI3Olx0XHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xNzI4LVx0XHRcdFx0ICAgRE1BX0FUVFJfU0tJUF9DUFVfU1lOQyB8XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jPTEzOD1zdGF0aWMgaW50IGk0MGVfeHNrX3Bvb2xfZGlzYWJsZShzdHJ1Y3QgaTQwZV92c2kgKnZzaSwgdTE2IHFpZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfeHNrLmMtMTU3LVx0Y2xlYXJfYml0KHFpZCwgdnNpLVx1MDAzZWFmX3hkcF96Y19xcHMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jOjE1ODpcdHhza19wb29sX2RtYV91bm1hcChwb29sLCBJNDBFX1JYX0RNQV9BVFRSKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suYy0xNTktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV94c2suYz0xMjQ9c3RhdGljIGludCBpY2VfeHNrX3Bvb2xfZGlzYWJsZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1MTYgcWlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfeHNrLmMtMTMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV94c2suYzoxMzE6XHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwgSUNFX1JYX0RNQV9BVFRSKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfeHNrLmMtMTMyLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfeHNrLmM9OTc9c3RhdGljIGludCBpZ2JfeHNrX3Bvb2xfZW5hYmxlKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX3hzay5jLTEzMC1cdFx0aWYgKGVycikge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl94c2suYzoxMzE6XHRcdFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIElHQl9SWF9ETUFfQVRUUik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX3hzay5jLTEzMi1cdFx0XHRyZXR1cm4gZXJyO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfeHNrLmM9MTM5PXN0YXRpYyBpbnQgaWdiX3hza19wb29sX2Rpc2FibGUoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1MTYgcWlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfeHNrLmMtMTU0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl94c2suYzoxNTU6XHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwgSUdCX1JYX0RNQV9BVFRSKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfeHNrLmMtMTU2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfeGRwLmM9NTY9c3RhdGljIGludCBpZ2NfeGRwX2VuYWJsZV9wb29sKHN0cnVjdCBpZ2NfYWRhcHRlciAqYWRhcHRlcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX3hkcC5jLTEwOS1cdFx0aWYgKGVycikge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY194ZHAuYzoxMTA6XHRcdFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIElHQ19SWF9ETUFfQVRUUik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX3hkcC5jLTExMS1cdFx0XHRyZXR1cm4gZXJyO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfeGRwLmM9MTE4PXN0YXRpYyBpbnQgaWdjX3hkcF9kaXNhYmxlX3Bvb2woc3RydWN0IGlnY19hZGFwdGVyICphZGFwdGVyLCB1MTYgcXVldWVfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY194ZHAuYy0xNDUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX3hkcC5jOjE0NjpcdHhza19wb29sX2RtYV91bm1hcChwb29sLCBJR0NfUlhfRE1BX0FUVFIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY194ZHAuYy0xNDctXHRjbGVhcl9iaXQoSUdDX1JJTkdfRkxBR19BRl9YRFBfWkMsIFx1MDAyNnJ4X3JpbmctXHUwMDNlZmxhZ3MpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jPTIzPXN0YXRpYyBpbnQgaXhnYmVfeHNrX3Bvb2xfZW5hYmxlKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jLTU2LVx0XHRcdGNsZWFyX2JpdChxaWQsIGFkYXB0ZXItXHUwMDNlYWZfeGRwX3pjX3Fwcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV94c2suYzo1NzpcdFx0XHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwgSVhHQkVfUlhfRE1BX0FUVFIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeHNrLmMtNTgtXHRcdFx0cmV0dXJuIGVycjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV94c2suYz02NT1zdGF0aWMgaW50IGl4Z2JlX3hza19wb29sX2Rpc2FibGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBxaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeHNrLmMtODAtXHRjbGVhcl9iaXQocWlkLCBhZGFwdGVyLVx1MDAzZWFmX3hkcF96Y19xcHMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeHNrLmM6ODE6XHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwgSVhHQkVfUlhfRE1BX0FUVFIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeHNrLmMtODItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliZXRoL3hzay5jPTI1Nj1pbnQgbGliZXRoX3hza19zZXR1cF9wb29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBxaWQsIGJvb2wgZW5hYmxlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC94c2suYy0yNjctXHRlbHNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgveHNrLmM6MjY4Olx0XHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwgTElCRVRIX1hTS19ETUFfQVRUUik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgveHNrLmMtMjY5LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3hzay5jPTE0MD1pbnQgb3R4Ml94c2tfcG9vbF9kaXNhYmxlKHN0cnVjdCBvdHgyX25pYyAqcGYsIHUxNiBxaWR4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3hzay5jLTE1My1cdGNsZWFyX2JpdChxaWR4LCBwZi1cdTAwM2VhZl94ZHBfemNfcWlkeCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml94c2suYzoxNTQ6XHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwgRE1BX0FUVFJfU0tJUF9DUFVfU1lOQyB8IERNQV9BVFRSX1dFQUtfT1JERVJJTkcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfeHNrLmMtMTU1LVx0LyogUmVjb25maWd1cmUgUlNTIHRhYmxlIGFzICYjMzk7cWlkeCYjMzk7IG5vdyBuZWVkIHRvIGJlIHBhcnQgb2YgUlNTIG5vdyAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94c2svcG9vbC5jPTE3PXN0YXRpYyB2b2lkIG1seDVlX3hza191bm1hcF9wb29sKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94c2svcG9vbC5jLTE5LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94c2svcG9vbC5jOjIwOlx0cmV0dXJuIHhza19wb29sX2RtYV91bm1hcChwb29sLCBETUFfQVRUUl9TS0lQX0NQVV9TWU5DKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94c2svcG9vbC5jLTIxLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfeHNrLmM9OTk9c3RhdGljIHZvaWQgbmZwX25ldF94c2tfcG9vbF91bm1hcChzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X3hzay5jLTEwMS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfeHNrLmM6MTAyOlx0cmV0dXJuIHhza19wb29sX2RtYV91bm1hcChwb29sLCAwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF94c2suYy0xMDMtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY194ZHAuYz01OD1zdGF0aWMgaW50IHN0bW1hY194ZHBfZGlzYWJsZV9wb29sKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTE2IHF1ZXVlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY194ZHAuYy04MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY194ZHAuYzo4MTpcdHhza19wb29sX2RtYV91bm1hcChwb29sLCBTVE1NQUNfUlhfRE1BX0FUVFIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3hkcC5jLTgyLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jPTE1MjA9c3RhdGljIGludCBwcnVldGhfeHNrX3Bvb2xfZGlzYWJsZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIHUxNiBxdWV1ZV9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguYy0xNTQ5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmM6MTU1MDpcdHhza19wb29sX2RtYV91bm1hcChwb29sLCBQUlVFVEhfUlhfRE1BX0FUVFIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmMtMTU1MS1cdGVtYWMtXHUwMDNleHNrX3FpZCA9IC1FSU5WQUw7XG4tLVxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jPTU4ODU9c3RhdGljIGludCB2aXJ0bmV0X3hza19wb29sX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy01OTU5LWVycl9ycTpcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYzo1OTYwOlx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIDApO1xuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jLTU5NjEtZXJyX3hza19tYXA6XG4tLVxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jPTU5Njk9c3RhdGljIGludCB2aXJ0bmV0X3hza19wb29sX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHFpZClcbi0tXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMtNTk4Ny1cbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYzo1OTg4Olx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIDApO1xuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jLTU5ODktXG4tLVxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2Lmg9ODY9c3RhdGljIGlubGluZSB2b2lkIHhza19wb29sX2ZpbGxfY2Ioc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4tLVxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2LmgtOTEtXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaDo5MjpzdGF0aWMgaW5saW5lIHZvaWQgeHNrX3Bvb2xfZG1hX3VubWFwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2LmgtOTMtXHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGF0dHJzKVxuLS1cbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oPTQyMj1zdGF0aWMgaW5saW5lIHZvaWQgeHNrX3Bvb2xfZmlsbF9jYihzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbi0tXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaC00MjYtXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaDo0Mjc6c3RhdGljIGlubGluZSB2b2lkIHhza19wb29sX2RtYV91bm1hcChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oLTQyOC1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgYXR0cnMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDQxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBYRFBfU09DS0VUUyBEZXBlbmRlbmN5IGZvciB4c2tfcG9vbF9kbWFfdW5tYXAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHhza19wb29sX2RtYV91bm1hcGAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyB0byBtZSB0aGF0IGl0JiMzOTtzIHJlbHlpbmcgb24gYFhEUF9TT0NLRVRTYCBiZWluZyBwcm9wZXJseSBjb25maWd1cmVkIGZvciBpdCB0byBiZSBmdWxseSBmdW5jdGlvbmFsLiBUaGlzIGlzIGEgY29tbW9uIHNpdHVhdGlvbiwgcmlnaHQ/IEZ1bmN0aW9ucyBvZnRlbiBkZXBlbmQgb24gY2VydGFpbiB1bmRlcmx5aW5nIGZlYXR1cmUgZmxhZ3Mgb3IgY29uZmlndXJhdGlvbnMgdG8gd29yayBhcyBpbnRlbmRlZC4gVGhlIHRyYWNlIEkgaGF2ZSBpbmRpY2F0ZXMgdGhlIG5lZWQgZm9yIGBYRFBfU09DS0VUU2AuCgpOb3csIHRoZSB0aGluZyB0aGF0IHN0cmlrZXMgbWUgaXMgd2hlcmUgdGhpcyBgWERQX1NPQ0tFVFNgIGlzIGRlZmluZWQuIEl0JiMzOTtzIHR1Y2tlZCBhd2F5IGluIGBpbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaGAuIEdpdmVuIHRoYXQgdGhpcyBpcyBhIGNvcmUgcGllY2Ugb2YgWERQIHNvY2tldCBpbmZyYXN0cnVjdHVyZSwgaXQgbWFrZXMgc2Vuc2UgaXQmIzM5O3MgaW4gYSBoZWFkZXIgc3BlY2lmaWMgdG8gdGhhdC4KClNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBpbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYFhEUF9TT0NLRVRTYCBhY3R1YWxseSBlbnRhaWxzLCB3aGF0IGl0JiMzOTtzIGVuYWJsaW5nLCBhbmQgZXhhY3RseSBob3cgaXQgcmVsYXRlcyB0byB0aGlzIGB4c2tfcG9vbF9kbWFfdW5tYXBgIGZ1bmN0aW9uLiBJIGhhdmUgYSBmZWVsaW5nIEkmIzM5O2xsIGZpbmQgdGhlIGFuc3dlciB0byBteSBvcmlnaW5hbCBxdWVzdGlvbiBhYm91dCB0aGUgZnVuY3Rpb24mIzM5O3MgZnVsbCBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGF0IGluY2x1ZGUgZmlsZS4gSXQmIzM5O3MgYSBiaXQgb2YgZGV0ZWN0aXZlIHdvcmssIGJ1dCB0aGF0JiMzOTtzIGhvdyB5b3UgZmlndXJlIG91dCB0aGVzZSBkZXBlbmRlbmNpZXMgaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4gICAyOlx0LyogSW50ZXJmYWNlIGZvciBpbXBsZW1lbnRpbmcgQUZfWERQIHplcm8tY29weSBzdXBwb3J0IGluIGRyaXZlcnMuXG4gICAzOlx0ICogQ29weXJpZ2h0KGMpIDIwMjAgSW50ZWwgQ29ycG9yYXRpb24uXG4gICA0Olx0ICovXG4gICA1Olx0XG4gICA2Olx0I2lmbmRlZiBfTElOVVhfWERQX1NPQ0tfRFJWX0hcbiAgIDc6XHQjZGVmaW5lIF9MSU5VWF9YRFBfU09DS19EUlZfSFxuICAgODpcdFxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY25ldC94ZHBfc29jay5oXHUwMDNlXG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbmV0L3hza19idWZmX3Bvb2wuaFx1MDAzZVxuICAxMTpcdFxuICAxMjpcdCNkZWZpbmUgWERQX1VNRU1fTUlOX0NIVU5LX1NISUZUIDExXG4gIDEzOlx0I2RlZmluZSBYRFBfVU1FTV9NSU5fQ0hVTktfU0laRSAoMSBcdTAwM2NcdTAwM2MgWERQX1VNRU1fTUlOX0NIVU5LX1NISUZUKVxuICAxNDpcdFxuICAxNTpcdCNkZWZpbmUgTkVUREVWX1hEUF9BQ1RfWFNLXHQoTkVUREVWX1hEUF9BQ1RfQkFTSUMgfFx0XHRcXFxuICAxNjpcdFx0XHRcdFx0IE5FVERFVl9YRFBfQUNUX1JFRElSRUNUIHxcdFxcXG4gIDE3Olx0XHRcdFx0XHQgTkVUREVWX1hEUF9BQ1RfWFNLX1pFUk9DT1BZKVxuICAxODpcdFxuICAxOTpcdHN0cnVjdCB4c2tfY2JfZGVzYyB7XG4gIDIwOlx0XHR2b2lkICpzcmM7XG4gIDIxOlx0XHR1OCBvZmY7XG4gIDIyOlx0XHR1OCBieXRlcztcbiAgMjM6XHR9O1xuICAyNDpcdFxuICAyNTpcdCNpZmRlZiBDT05GSUdfWERQX1NPQ0tFVFNcbiAgMjY6XHRcbiAgMjc6XHR2b2lkIHhza190eF9jb21wbGV0ZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9lbnRyaWVzKTtcbiAgMjg6XHRib29sIHhza190eF9wZWVrX2Rlc2Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYyk7XG4gIDI5Olx0dTMyIHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heCk7XG4gIDMwOlx0dm9pZCB4c2tfdHhfcmVsZWFzZShzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCk7XG4gIDMxOlx0c3RydWN0IHhza19idWZmX3Bvb2wgKnhza19nZXRfcG9vbF9mcm9tX3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuICAzMjpcdFx0XHRcdFx0XHQgICAgdTE2IHF1ZXVlX2lkKTtcbiAgMzM6XHR2b2lkIHhza19zZXRfcnhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpO1xuICAzNDpcdHZvaWQgeHNrX3NldF90eF9uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCk7XG4gIDM1Olx0dm9pZCB4c2tfY2xlYXJfcnhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpO1xuICAzNjpcdHZvaWQgeHNrX2NsZWFyX3R4X25lZWRfd2FrZXVwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKTtcbiAgMzc6XHRib29sIHhza191c2VzX25lZWRfd2FrZXVwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKTtcbiAgMzg6XHRcbiAgMzk6XHRzdGF0aWMgaW5saW5lIHUzMiB4c2tfcG9vbF9nZXRfaGVhZHJvb20oc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG4gIDQwOlx0e1xuICA0MTpcdFx0cmV0dXJuIFhEUF9QQUNLRVRfSEVBRFJPT00gJiM0MzsgcG9vbC1cdTAwM2VoZWFkcm9vbTtcbiAgNDI6XHR9XG4gIDQzOlx0XG4gIDQ0Olx0c3RhdGljIGlubGluZSB1MzIgeHNrX3Bvb2xfZ2V0X3RhaWxyb29tKGJvb2wgbWJ1ZilcbiAgNDU6XHR7XG4gIDQ2Olx0XHRyZXR1cm4gbWJ1ZiA/IFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSkgOiAwO1xuICA0NzpcdH1cbiAgNDg6XHRcbiAgNDk6XHRzdGF0aWMgaW5saW5lIHUzMiB4c2tfcG9vbF9nZXRfY2h1bmtfc2l6ZShzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcbiAgNTA6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzQ2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBHVkUgUGF0Y2gqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCByZWxhdGVkIHRvIEdvb2dsZSYjMzk7cyBWaXJ0dWFsIEV0aGVybmV0IChHVkUpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgWERQIGFuZCBBRl9YRFAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBDT05GSUdfWERQX1NPQ0tFVFNgIGlzIGluZGVlZCByZXF1aXJlZCwgc28gSSYjMzk7bGwgYmUgYWRkaW5nIGBYRFBfU09DS0VUU2AgdG8gYEVuYWJsZUNvbmZpZ3NgLiBHaXZlbiB0aGUgY29udGV4dCwgaXQmIzM5O3MgY2xlYXIgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBHVkUsIHNvIG5hdHVyYWxseSwgYE5FVF9WRU5ET1JfR09PR0xFYCBhbmQgYEdWRWAgbmVlZCB0byBiZSBlbmFibGVkLiBBbmQgc2luY2Ugd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBYRFAsIGBCUEZfU1lTQ0FMTGAgaXMgcHJldHR5IG11Y2ggYSBnaXZlbi4KCkxldCYjMzk7cyBxdWlja2x5IHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgR1ZFYCwgc2luY2UgdGhpcyBpcyBhIGNyaXRpY2FsIGRyaXZlci4gQWhhLCBgUENJX01TSWAgYW5kIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgYXJlIHJlcXVpcmVkLiBUaGF0IGNvbmZpcm1zIHRoZSBuZWNlc3NhcnkgZm91bmRhdGlvbi4KCk5vdywgZm9jdXNpbmcgb24gdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvbiBmdW5jdGlvbiBjYWxscy4gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IGBndmVfcnhfcG9sbF9kcW9gIGFnYWluLCBhbmQgYW0gY2hlY2tpbmcgZm9yIHJlbGF0ZWQgbW9kaWZpY2F0aW9ucyB0byBvdGhlciBmdW5jdGlvbnMuCgpgZ3ZlX3J4X2Rxb2AsIGBndmVfcnhfcmVzZXRfcmluZ19kcW9gLCBgZ3ZlX3hza19wb29sX2VuYWJsZWAsIGBndmVfeHNrX3Bvb2xfZGlzYWJsZWAsIGFuZCBgZ3ZlX3hza193YWtldXBgIGFyZSBhbGwgc3RhdGljLCBzbyB0aGV5IHdvbiYjMzk7dCBiZSBleHBvc2VkIGFzIHN5bWJvbHMuIEJ1dCB3YWl0LCBgZ3ZlX25hcGlfcG9sbF9kcW9gIGlzIGFsc28gbm9uLXN0YXRpYy4gQmVjYXVzZSBvZiB0aGlzLCBJIG5lZWQgdG8gYWRkIGJvdGggYGd2ZV9yeF9wb2xsX2Rxb2AgYW5kIGBndmVfbmFwaV9wb2xsX2Rxb2AgYXMgc3ltYm9scy4KCkFscmlnaHQsIGxldCYjMzk7cyByZWNhcCB0aGUgcGF0Y2gmIzM5O3MgcmVhc29uaW5nLiBJdCYjMzk7cyBhZGRyZXNzaW5nIGEgYnVnIGluIGBndmVfcnhfcG9sbF9kcW9gIHdoZXJlIGB3b3JrX2RvbmVgIHdhc24mIzM5O3QgYmVpbmcgY29ycmVjdGx5IGluY3JlbWVudGVkIHVuZGVyIGEgc3BlY2lmaWMgY29uZGl0aW9uIGFuZCBpbmNvcnJlY3Qgb3IgbWlzc2luZyBjYWxscyB0byBgeHNrX3Bvb2xfZG1hX3VubWFwYCBpbiBgZ3ZlX3hza19wb29sX2VuYWJsZWAgYW5kIGBndmVfeHNrX3Bvb2xfZGlzYWJsZWAuIEFsc28sIHRoZXJlJiMzOTtzIGEgbWVtb3J5IGxlYWsgZml4ZWQgaW4gYGd2ZV9yeF9yZXNldF9yaW5nX2Rxb2AgYW5kIGBndmVfcnhfZHFvYCBieSBmcmVlaW5nIGB4c2tfYnVmZmAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsbHkgcmVsZXZhbnQgYW5kIGRlbW9uc3RyYWJseSByZWFjaGFibGUgaW4gR0NFIGVudmlyb25tZW50cy4gQ29uc2lkZXJpbmcgdGhhdCB0aGVzZSBmaXhlcyBoYXZlIHJlYWwtd29ybGQgaW1wYWN0LCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkIGhlcmUuCgpTbywganVzdCB0byBzdW1tYXJpemUgbXkgZmluZGluZ3MsIEkmIzM5O2xsIGJlIGVuYWJsaW5nIGBORVRfVkVORE9SX0dPT0dMRWAsIGBHVkVgLCBgWERQX1NPQ0tFVFNgLCBhbmQgYEJQRl9TWVNDQUxMYC4KClRoZSBrZXkgc3ltYm9scyBJJiMzOTttIGZvY3VzaW5nIG9uIGFyZSBgZ3ZlX3J4X3BvbGxfZHFvYCBhbmQgYGd2ZV9uYXBpX3BvbGxfZHFvYC4gSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcsIGp1c3QgdG8gYmUgc3VyZSwgdGhhdCBgZ3ZlX25hcGlfcG9sbF9kcW9gIGlzIGluZGVlZCBub24tc3RhdGljIGFuZCBleHBvc2VkIGFzIGEgc3ltYm9sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgZ3ZlX25hcGlfcG9sbF9kcW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9kcW8uaD0xMDc9Z3ZlX3NldF9pdHJfY29hbGVzY2VfdXNlY3NfZHFvKHN0cnVjdCBndmVfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9kcW8uaC0xMTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9kcW8uaDoxMTU6aW50IGd2ZV9uYXBpX3BvbGxfZHFvKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9kcW8uaC0xMTYtI2VuZGlmIC8qIF9HVkVfRFFPX0hfICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTM1Mz1pbnQgZ3ZlX25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTQxMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzo0MTE6aW50IGd2ZV9uYXBpX3BvbGxfZHFvKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy00MTIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTg2NgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBOb24tU3RhdGljIEZ1bmN0aW9uIFVzYWdlKioKCkFscmlnaHQsIHNvIGBndmVfbmFwaV9wb2xsX2Rxb2AgaXMgZGVmaW5pdGl2ZWx5IG5vbi1zdGF0aWMsIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIHJlbGF0ZWQgdG8gaXRzIGludGVyYWN0aW9uIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGRyaXZlci4gTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHdoZXRoZXIgYGd2ZV94ZHBfeG1pdF9kcW9gIGlzIGFsc28gZGVjbGFyZWQgYXMgbm9uLXN0YXRpYy4gVGhpcyBpcyBrZXksIGJlY2F1c2UgdGhlIG5vbi1zdGF0aWMgbmF0dXJlIG9mIHRoZXNlIGZ1bmN0aW9ucyBwbGF5cyBhIHNpZ25pZmljYW50IHJvbGUgaW4gaG93IHRoZSBkYXRhIHF1ZXVlIG9wZXJhdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgd2lkZXIgc3lzdGVtLiBUaGF0IGluZm9ybWF0aW9uIHdpbGwgaGVscCBkZXRlcm1pbmUgd2hhdCBhcmVhcyBvZiB0aGUgY29kZSBhcmUgYWZmZWN0ZWQgYnkgdGhpcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGd2ZV94ZHBfeG1pdF9kcW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oPTEyMjc9aW50IGd2ZV94ZHBfeG1pdF9ncWkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG4sIHN0cnVjdCB4ZHBfZnJhbWUgKipmcmFtZXMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTEyMjgtXHRcdCAgICAgdTMyIGZsYWdzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MTIyOTppbnQgZ3ZlX3hkcF94bWl0X2RxbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbiwgc3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMTIzMC1cdFx0ICAgICB1MzIgZmxhZ3MpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jPTE1MzY9aW50IGd2ZV94ZHBfeG1pdF9vbmVfZHFvKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV90eF9yaW5nICp0eCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYy0xNTgyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmM6MTU4MzppbnQgZ3ZlX3hkcF94bWl0X2RxbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbiwgc3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE1ODQtXHRcdCAgICAgdTMyIGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQ3MQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFkZGluZyBgZ3ZlX3hkcF94bWl0X2Rxb2AgYW5kIENoZWNraW5nIGBndmVfeGRwX3BvbGxfZHFvYCoqCgpSaWdodCwgc28gYGd2ZV94ZHBfeG1pdF9kcW9gIGlzIGRlZmluaXRlbHkgbm90IHN0YXRpYy4gTWFrZXMgcGVyZmVjdCBzZW5zZSwgZ2l2ZW4gaXRzIHJvbGUuIFNpbmNlIGl0IGRpcmVjdGx5IGRlYWxzIHdpdGggWERQIHRyYW5zbWlzc2lvbiB3aXRoaW4gdGhlIERRTyBmb3JtYXQsIGFuZCB0aGF0JiMzOTtzIHByZWNpc2VseSB3aGVyZSB3ZSYjMzk7dmUgYmVlbiBtYWtpbmcgbW9kaWZpY2F0aW9ucyBpbiBgZ3ZlX3J4X2Rxby5jYCwgaXTigJlzIGNsZWFyIEkgbmVlZCB0byBpbmNsdWRlIGl0IGluIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBJdOKAmXMgbG9naWNhbGx5IGNvbm5lY3RlZCBhbmQgY3J1Y2lhbCBmb3IgdGhlIGJpZ2dlciBwaWN0dXJlLiBXZSBoYXZlIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUga2VlcGluZyB0cmFjayBvZiBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyBEUU8gZm9ybWF0LgoKTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgc3RhdHVzIG9mIGBndmVfeGRwX3BvbGxfZHFvYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGF0IGZ1bmN0aW9uIGlzIHN0YXRpYyBvciBub3QuIFdlIGhhdmUgdG8gYmUgdGhvcm91Z2ggaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym9vbCBndmVfeGRwX3BvbGxfZHFvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZHFvLmg9NDA9Ym9vbCBndmVfdHhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBib29sIGRvX2NsZWFuKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Rxby5oOjQxOmJvb2wgZ3ZlX3hkcF9wb2xsX2RxbyhzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqYmxvY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZHFvLmgtNDItYm9vbCBndmVfeHNrX3R4X3BvbGxfZHFvKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpibG9jaywgaW50IGJ1ZGdldCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmM9MTUxMD1ib29sIGd2ZV94c2tfdHhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKnJ4X2Jsb2NrLCBpbnQgYnVkZ2V0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE1MjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYzoxNTIzOmJvb2wgZ3ZlX3hkcF9wb2xsX2RxbyhzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqYmxvY2spXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYy0xNTI0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxMzQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgR1ZFIFhEUCBQb2xsaW5nKioKCk9rYXksIHNvIGBndmVfeGRwX3BvbGxfZHFvYCBpcyBkZWZpbml0aXZlbHkgKm5vdCogYSBzdGF0aWMgc3ltYm9sLiBUaGF0JiMzOTtzIGEga2V5IHBvaW50LiBUaGlzIG1lYW5zLCB3aGVuIGNvbnNpZGVyaW5nIEZvY3VzU3ltYm9scywgd2UmIzM5O3JlIGRlZmluaXRlbHkgbG9va2luZyBhdDogYGd2ZV9yeF9wb2xsX2Rxb2AsIGBndmVfbmFwaV9wb2xsX2Rxb2AsIGFuZCwgY3J1Y2lhbGx5LCB0aGUgYGd2ZV94ZHBfcG9sbF9kcW9gIGZ1bmN0aW9uIHdlIGVzdGFibGlzaGVkIGFzIG5vbi1zdGF0aWMuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBORVRfVkVORE9SX0dPT0dMRWAsIGBHVkVgLCBgWERQX1NPQ0tFVFNgLCBhbmQgYEJQRl9TWVNDQUxMYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBCUEZfU1lTQ0FMTGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgY29udGV4dC4gVGhpcyByZXF1aXJlcyBhIGRlZXBlciBkaXZlIGludG8gaG93IHRoaXMgcmVsYXRlcyB0byBYRFAgYW5kIEdvb2dsZSYjMzk7cyBuZXR3b3JraW5nIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBJIHdpbGwgdmVyaWZ5IHRoYXQgdGhpcyBjb25maWd1cmF0aW9uIGlzIGNvcnJlY3RseSBzdXBwb3J0aW5nIHRoZSBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc1NzAKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipWZXJpZnlpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIGVCUEYqKgoKQWxyaWdodCwgdGhhdCBpbml0aWFsIGFzc2Vzc21lbnQgb2YgYEJQRl9TWVNDQUxMYCBzZWVtcyBzcG90LW9uLiBXZSYjMzk7cmUgZGVmaW5pdGVseSBvbiB0aGUgcmlnaHQgdHJhY2sgdGhlcmUuIE5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgd2UmIzM5O3ZlIGdvdCB0aGUgbmVjZXNzYXJ5IHN1cHBvcnQgZm9yIGBYRFBfU09DS0VUU2AgY29uZmlndXJlZCBjb3JyZWN0bHkuIEl0JiMzOTtzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoaXMgY29tcG9uZW50IGlzIGVuYWJsZWQsIHRvIGJlIGFibGUgdG8gcHJvY2VlZCBjb3JyZWN0bHkuIEdvdHRhIGRvdWJsZS1jaGVjayB0aG9zZSBmdW5kYW1lbnRhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRFBfU09DS0VUUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC94ZHAvS2NvbmZpZzoyOmNvbmZpZyBYRFBfU09DS0VUU1xubmV0L3hkcC9LY29uZmlnLTMtXHRib29sIFwmIzM0O1hEUCBzb2NrZXRzXCYjMzQ7XG4tLVxubmV0L3hkcC9LY29uZmlnLTktXG5uZXQveGRwL0tjb25maWc6MTA6Y29uZmlnIFhEUF9TT0NLRVRTX0RJQUdcbm5ldC94ZHAvS2NvbmZpZy0xMS1cdHRyaXN0YXRlIFwmIzM0O1hEUCBzb2NrZXRzOiBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzg3NgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb246CgoqKlhEUCBhbmQgTVNJIERlcGVuZGVuY3kgQ2hlY2sqKgoKUmlnaHQsIGBYRFBfU09DS0VUU2AgaXMgdGhlIHJpZ2h0IHBhdGggdG8gcHVyc3VlLCBjb25maXJtZWQuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCBkbyBJIG5lZWQgdG8gY29uY2VybiBteXNlbGYgd2l0aCBgUENJX01TSWA/IEFoLCB5ZXMsIGBHVkVgIGlzIGEga2V5IGNvbXBvbmVudCwgYW5kIGl0JiMzOTtzIGRlcGVuZGVudCBvbiBgUENJX01TSWAuIFRpbWUgdG8gdmVyaWZ5IGlmIGBQQ0lfTVNJYCBpcyBhY3R1YWxseSBhIGNvbmZpZ3VyYWJsZSBvcHRpb24uIE5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBkZXBlbmRlbmN5IGlzIHNvbWV0aGluZyBJIGNhbiBjb250cm9sLCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmV4cGVjdGVkIGJ1aWxkIGNvbmZsaWN0cy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyBhIGxlZ2l0aW1hdGUgY29uZmlnIHBhcmFtZXRlciBhbmQgaXNuJiMzOTt0IGJha2VkIGluLCB0aGF0IHdheSBJIGNhbiBzZXQgaXQgYXMgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUENJX01TSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS9LY29uZmlnPTQyPXNvdXJjZSBcJiMzNDtkcml2ZXJzL3BjaS9wY2llL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvcGNpL0tjb25maWctNDMtXG5kcml2ZXJzL3BjaS9LY29uZmlnOjQ0OmNvbmZpZyBQQ0lfTVNJXG5kcml2ZXJzL3BjaS9LY29uZmlnLTQ1LVx0Ym9vbCBcJiMzNDtNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdHMgKE1TSSBhbmQgTVNJLVgpXCYjMzQ7XG4tLVxuZHJpdmVycy9wY2kvS2NvbmZpZy01OC1cbmRyaXZlcnMvcGNpL0tjb25maWc6NTk6Y29uZmlnIFBDSV9NU0lfQVJDSF9GQUxMQkFDS1NcbmRyaXZlcnMvcGNpL0tjb25maWctNjAtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MjY5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uZmlybWluZyBDb25maWd1cmF0aW9uIGFuZCBFeHBsb3JpbmcgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHllcCwgbG9va3MgbGlrZSBteSBpbml0aWFsIGFzc2Vzc21lbnQgb24gYFBDSV9NU0lgIGlzIHNwb3Qtb24uIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggTWVzc2FnZSBTaWduYWxlZCBJbnRlcnJ1cHRzLCBhbmQgdGhhdCYjMzk7cyB0aGUgY29ycmVjdCBpbml0aWFsIHBhcmFtZXRlci4gTm93LCBiZWZvcmUgSSBtb3ZlIG9uLCBJIHdhbnQgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYFBUUF8xNTg4X0NMT0NLX09QVElPTkFMYCBpcyBhY3R1YWxseSBzZXQgYXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3IgaWYgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGVsc2UgYXQgcGxheS4gTmVlZCB0byBydWxlIHRoYXQgb3V0IGFzIGEgdmFyaWFibGUgYmVmb3JlIHByb2NlZWRpbmcuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL0tjb25maWc9OD1jb25maWcgUFRQXzE1ODhfQ0xPQ0tcbi0tXG5kcml2ZXJzL3B0cC9LY29uZmlnLTI5LVxuZHJpdmVycy9wdHAvS2NvbmZpZzozMDpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvcHRwL0tjb25maWctMzEtXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODU1NQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDI2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IExpbmUgb2YgUmVhc29uaW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24uIE5vdywgbGV0JiMzOTtzIHNlZSwgdGhlIGN1cnJlbnQgYWN0aXZlIGNvbmZpZ3VyYXRpb25zIGFyZTogYE5FVF9WRU5ET1JfR09PR0xFYCwgYEdWRWAsIGBYRFBfU09DS0VUU2AsIGBCUEZfU1lTQ0FMTGAsIGBQQ0lfTVNJYCwgYW5kIHRoYXQgYFBUUF8xNTg4X0NMT0NLX09QVElPTkFMYCBzZXR0aW5nLgoKV2FpdCBhIHNlY29uZCwgcmlnaHQsIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgaXMgYSAqdHJpc3RhdGUqIHZhcmlhYmxlLiBJdCYjMzk7cyBlaXRoZXIgc2VsZWN0ZWQgb3IgaXQgaGFzIGRlcGVuZGVuY2llcy4gQWgsIHRoZSBkZXBlbmRlbmNpZXMsICppdCBkZXBlbmRzIG9uIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAqLgoKTGV0JiMzOTtzIGNoZWNrIHRoZSBkZWZpbml0aW9uIGFnYWluOiBpdCYjMzk7cyBhIHRyaXN0YXRlLCBhbmQgdGhlIGRlZmF1bHQgaXMgJiMzOTt5JiMzOTsgKmlmKiBgUFRQXzE1ODhfQ0xPQ0tgIGlzICYjMzk7biYjMzk7LCBvdGhlcndpc2UgdGhlIGRlZmF1bHQgaXMgYFBUUF8xNTg4X0NMT0NLYC4gVGhlcmVmb3JlLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYFBUUF8xNTg4X0NMT0NLYCBpcyAmIzM5O3kmIzM5OywgJiMzOTttJiMzOTssIG9yICYjMzk7biYjMzk7LCBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgIGlzIGF1dG9tYXRpY2FsbHkgc2F0aXNmaWVkLiBTbywgd2hpbGUgaXQgd291bGRuJiMzOTt0IGh1cnQgdG8gZXhwbGljaXRseSBlbmFibGUgaXQsIGl0JiMzOTtzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkuIEl0JiMzOTtzIGF1dG9tYXRpY2FsbHkgdGFrZW4gY2FyZSBvZi4KCkFscmlnaHQsIHdoYXQmIzM5O3MgbmV4dD8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgd2hldGhlciBgUEFHRV9QT09MYCBpcyBhIGNvbmZpZ3VyYXRpb24gaXRlbSwgc2hvdWxkbiYjMzk7dCBJPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEFHRV9QT09MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ4Nz1jb25maWcgTkVUX0RFVkxJTktcbi0tXG5uZXQvS2NvbmZpZy00OTAtXG5uZXQvS2NvbmZpZzo0OTE6Y29uZmlnIFBBR0VfUE9PTFxubmV0L0tjb25maWctNDkyLVx0Ym9vbFxubmV0L0tjb25maWctNDkzLVxubmV0L0tjb25maWc6NDk0OmNvbmZpZyBQQUdFX1BPT0xfU1RBVFNcbm5ldC9LY29uZmlnLTQ5NS1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTI2NgoJCQkJCQkJb3V0cHV0OiAyODYKCQkJCQkJCXRob3VnaHRzOiAzMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgR1ZFIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IGRyaXZlciwgYEdWRWAuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBzb21lIGNyaXRpY2FsIGlzc3VlcyB3aXRoIEFGX1hEUCAoWERQIHNvY2tldHMpIHN1cHBvcnQuIFRoZSBrZXkgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBtZW1vcnkgbGVha3MgYW5kIERNQSB1bm1hcHBpbmcsIHdoaWNoIGFyZSBwcmltZSBzdXNwZWN0cyBmb3IgcmVsaWFiaWxpdHkgcHJvYmxlbXMgaW4gYW55IG5ldHdvcmsgZHJpdmVyLCBlc3BlY2lhbGx5IG9uZSBsaWtlIGBHVkVgIHRoYXQgaXMgdGhlIHByaW1hcnkgaW50ZXJmYWNlIGluIEdDRSBWTXMuIEkgc2VlIGZpeGVzIGluIGBndmVfcnhfcmVzZXRfcmluZ19kcW9gIGFuZCBgZ3ZlX3J4X2Rxb2AgdGhhdCBhcmUgY2xlYW5pbmcgdXAgYHhza19idWZmYCBjb3JyZWN0bHkgdG8gcHJldmVudCB0aGUgbGVhay4gQWxzbywgdGhlIGBndmVfcnhfcG9sbF9kcW9gIGZpeCBmb3IgYHdvcmtfZG9uZWAgaXMgZ29vZCB0byBzZWU7IHRoYXQga2luZCBvZiBzdWJ0bGUgb2ZmLWJ5LW9uZSBlcnJvciBjYW4gY2F1c2Ugc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gb3IgZXZlbiBpbnRlcm1pdHRlbnQgZGF0YSBsb3NzLCBlc3BlY2lhbGx5IHVuZGVyIGhlYXZ5IGxvYWQuIFRoZSBETUEgdW5tYXBwaW5nIGZpeGVzIGluIGBndmVfeHNrX3Bvb2xfZW5hYmxlYCBhbmQgYGd2ZV94c2tfcG9vbF9kaXNhYmxlYCBhcmUgY3J1Y2lhbCwgdG9vOyBnZXR0aW5nIHRob3NlIHJpZ2h0IGlzIGZ1bmRhbWVudGFsIGZvciBkYXRhIGludGVncml0eSBhbmQgaGFyZHdhcmUgcmVzb3VyY2UgbWFuYWdlbWVudC4KClRoZSBmYWN0IHRoYXQgdGhpcyB0b3VjaGVzIHRoZSBuZXR3b3JrIGRhdGFwYXRoIGFuZCBBRl9YRFAgc29ja2V0IGhhbmRsaW5nIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSBzeXprYWxsZXIgaXMgbW9zdCBsaWtlbHkgdG8gZmluZCB0aGVzZSBidWdzLiBJIGFudGljaXBhdGUgdGhpcyBwYXRjaCB3aWxsIGltcHJvdmUgdGhlIHN0YWJpbGl0eSBvZiBHQ0UgVk1zLCBhbmQgaXQmIzM5O3MgbmljZSB0aGF0IHRoZXkgYXJlIGFkZHJlc3NpbmcgQUZfWERQLgoKSSBhbHNvIG5vdGljZSB0aGF0IGBQQUdFX1BPT0xgIGlzIHNlbGVjdGVkIGJ5IGBHVkVgLCBzbyBJIGRvbiYjMzk7dCBuZWVkIHRvIHdvcnJ5IGFib3V0IG1hbnVhbGx5IGVuYWJsaW5nIGl0LiBNYWtlcyB0aGUgY29uZmlndXJhdGlvbiBzaW1wbGVyLgoKSSYjMzk7bGwgZm9ybXVsYXRlIHRoZSBmaW5hbCByZXNwb25zZSBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfVkVORE9SX0dPT0dMRSYjMzQ7LAogICAgJiMzNDtHVkUmIzM0OywKICAgICYjMzQ7WERQX1NPQ0tFVFMmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7UENJX01TSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2d2ZV9yeF9wb2xsX2RxbyYjMzQ7LAogICAgJiMzNDtndmVfbmFwaV9wb2xsX2RxbyYjMzQ7LAogICAgJiMzNDtndmVfeGRwX3BvbGxfZHFvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHb29nbGUgVmlydHVhbCBFdGhlcm5ldCAoZ3ZlKSBkcml2ZXIgdG8gZml4IGJ1Z3MgcmVsYXRlZCB0byBBRl9YRFAgKFhEUCBzb2NrZXRzKSBzdXBwb3J0LiBJdCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIGBndmVfcnhfcmVzZXRfcmluZ19kcW9gIGFuZCBgZ3ZlX3J4X2Rxb2AgYnkgcHJvcGVybHkgZnJlZWluZyBgeHNrX2J1ZmZgLiBJdCBhbHNvIGZpeGVzIGEgYnVnIGluIGBndmVfcnhfcG9sbF9kcW9gIHdoZXJlIGB3b3JrX2RvbmVgIHdhcyBub3QgaW5jcmVtZW50ZWQgY29ycmVjdGx5LCBhbmQgZml4ZXMgRE1BIHVubWFwcGluZyBpbiBgZ3ZlX3hza19wb29sX2VuYWJsZWAgYW5kIGBndmVfeHNrX3Bvb2xfZGlzYWJsZWAuIFRoZXNlIGNoYW5nZXMgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdCBvbiB0aGUgbmV0d29yayBkYXRhcGF0aCBhbmQgQUZfWERQIHNvY2tldCBoYW5kbGluZy4gVGhlIEdWRSBkcml2ZXIgaXMgdGhlIHByaW1hcnkgbmV0d29yayBpbnRlcmZhY2UgdXNlZCBpbiBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgVk1zLCB3aGVyZSBzeXprYWxsZXIgcnVucywgbWFraW5nIHRoZXNlIGNvZGUgcGF0aHMgaGlnaGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfVkVORE9SX0dPT0dMRSYjMzQ7LAogICAgJiMzNDtHVkUmIzM0OywKICAgICYjMzQ7WERQX1NPQ0tFVFMmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7UENJX01TSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2d2ZV9yeF9wb2xsX2RxbyYjMzQ7LAogICAgJiMzNDtndmVfbmFwaV9wb2xsX2RxbyYjMzQ7LAogICAgJiMzNDtndmVfeGRwX3BvbGxfZHFvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHb29nbGUgVmlydHVhbCBFdGhlcm5ldCAoZ3ZlKSBkcml2ZXIgdG8gZml4IGJ1Z3MgcmVsYXRlZCB0byBBRl9YRFAgKFhEUCBzb2NrZXRzKSBzdXBwb3J0LiBJdCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIGBndmVfcnhfcmVzZXRfcmluZ19kcW9gIGFuZCBgZ3ZlX3J4X2Rxb2AgYnkgcHJvcGVybHkgZnJlZWluZyBgeHNrX2J1ZmZgLiBJdCBhbHNvIGZpeGVzIGEgYnVnIGluIGBndmVfcnhfcG9sbF9kcW9gIHdoZXJlIGB3b3JrX2RvbmVgIHdhcyBub3QgaW5jcmVtZW50ZWQgY29ycmVjdGx5LCBhbmQgZml4ZXMgRE1BIHVubWFwcGluZyBpbiBgZ3ZlX3hza19wb29sX2VuYWJsZWAgYW5kIGBndmVfeHNrX3Bvb2xfZGlzYWJsZWAuIFRoZXNlIGNoYW5nZXMgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdCBvbiB0aGUgbmV0d29yayBkYXRhcGF0aCBhbmQgQUZfWERQIHNvY2tldCBoYW5kbGluZy4gVGhlIEdWRSBkcml2ZXIgaXMgdGhlIHByaW1hcnkgbmV0d29yayBpbnRlcmZhY2UgdXNlZCBpbiBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgVk1zLCB3aGVyZSBzeXprYWxsZXIgcnVucywgbWFraW5nIHRoZXNlIGNvZGUgcGF0aHMgaGlnaGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHb29nbGUgVmlydHVhbCBFdGhlcm5ldCAoZ3ZlKSBkcml2ZXIsIHNwZWNpZmljYWxseSBmaXhpbmcgWERQIHBvb2wgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIGxvZ2ljLCBOQVBJIGxvY2tpbmcgKHVzaW5nIG5hcGlfZGlzYWJsZV9sb2NrZWQvbmFwaV9lbmFibGVfbG9ja2VkKSwgbWVtb3J5IGxlYWtzIChmcmVlaW5nIHhza19idWZmKSwgYW5kIE5BUEkgYnVkZ2V0IGFjY291bnRpbmcgaW4gZ3ZlX3J4X3BvbGxfZHFvLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IHN0cnVjdHVyZSBwYWRkaW5nLCBvciBleHBvc2UgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgZGVhZGxvY2tzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgS01FTUxFQUsuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZkODg0MWZhMjY4MzRhOTE0Y2ZhNzhjYTI0YTc2OTIzYjhhYmU2MGEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxNSAwMDoxNzozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYwppbmRleCBlNGQ3OGFlNTJkYWZlLi5jY2FmNWY4NmExZTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jCkBAIC0xNjU0LDIwICYjNDM7MTY1NCwxOCBAQCBzdGF0aWMgaW50IGd2ZV94c2tfcG9vbF9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAoIXByaXYtJmd0O3hkcF9wcm9nIHx8ICFuZXRpZl9ydW5uaW5nKGRldikpCiAJCXJldHVybiAwOwogCi0JZXJyID0gZ3ZlX3JlZ194c2tfcG9vbChwcml2LCBkZXYsIHBvb2wsIHFpZCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfeHNrX3Bvb2xfZG1hX21hcHBlZDsKLQotCS8qIFN0b3AgYW5kIHN0YXJ0IFJEQSBxdWV1ZXMgdG8gcmVwb3N0IGJ1ZmZlcnMuICovCi0JaWYgKCFndmVfaXNfcXBsKHByaXYpKSB7CiYjNDM7CWlmIChndmVfaXNfcXBsKHByaXYpKSB7CiYjNDM7CQllcnIgPSBndmVfcmVnX3hza19wb29sKHByaXYsIGRldiwgcG9vbCwgcWlkKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBlcnJfeHNrX3Bvb2xfZG1hX21hcHBlZDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIFN0b3AgYW5kIHN0YXJ0IFJEQSBxdWV1ZXMgdG8gcmVwb3N0IGJ1ZmZlcnMuICovCiAJCWVyciA9IGd2ZV9jb25maWd1cmVfcmluZ3NfeGRwKHByaXYsIHByaXYtJmd0O3J4X2NmZy5udW1fcXVldWVzKTsKIAkJaWYgKGVycikKLQkJCWdvdG8gZXJyX3hza19wb29sX3JlZ2lzdGVyZWQ7CiYjNDM7CQkJZ290byBlcnJfeHNrX3Bvb2xfZG1hX21hcHBlZDsKIAl9CiAJcmV0dXJuIDA7CiAKLWVycl94c2tfcG9vbF9yZWdpc3RlcmVkOgotCWd2ZV91bnJlZ194c2tfcG9vbChwcml2LCBxaWQpOwogZXJyX3hza19wb29sX2RtYV9tYXBwZWQ6CiAJY2xlYXJfYml0KHFpZCwgcHJpdi0mZ3Q7eHNrX3Bvb2xzKTsKIAl4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwKQEAgLTE2ODMsNDIgJiM0MzsxNjgxLDM4IEBAIHN0YXRpYyBpbnQgZ3ZlX3hza19wb29sX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGlfcng7CiAJc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpX3R4OwogCXN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sOwomIzQzOwlpbnQgZXJyID0gMDsKIAlpbnQgdHhfcWlkOwotCWludCBlcnI7CiAKLQlpZiAocWlkICZndDs9IHByaXYtJmd0O3J4X2NmZy5udW1fcXVldWVzKQotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKHFpZCAmZ3Q7PSBwcml2LSZndDtyeF9jZmcubnVtX3F1ZXVlcykgewomIzQzOwkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gdW5tYXBfYW5kX3JldHVybjsKJiM0MzsJfQogCiAJY2xlYXJfYml0KHFpZCwgcHJpdi0mZ3Q7eHNrX3Bvb2xzKTsKIAotCXBvb2wgPSB4c2tfZ2V0X3Bvb2xfZnJvbV9xaWQoZGV2LCBxaWQpOwotCWlmIChwb29sKQotCQl4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwKLQkJCQkgICBETUFfQVRUUl9TS0lQX0NQVV9TWU5DIHwKLQkJCQkgICBETUFfQVRUUl9XRUFLX09SREVSSU5HKTsKLQogCWlmICghbmV0aWZfcnVubmluZyhkZXYpIHx8ICFwcml2LSZndDt0eF9jZmcubnVtX3hkcF9xdWV1ZXMpCi0JCXJldHVybiAwOwomIzQzOwkJZ290byB1bm1hcF9hbmRfcmV0dXJuOwogCiAJLyogU3RvcCBhbmQgc3RhcnQgUkRBIHF1ZXVlcyB0byByZXBvc3QgYnVmZmVycy4gKi8KIAlpZiAoIWd2ZV9pc19xcGwocHJpdikgJmFtcDsmYW1wOyBwcml2LSZndDt4ZHBfcHJvZykgewogCQllcnIgPSBndmVfY29uZmlndXJlX3JpbmdzX3hkcChwcml2LCBwcml2LSZndDtyeF9jZmcubnVtX3F1ZXVlcyk7CiAJCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwomIzQzOwkJCWdvdG8gdW5tYXBfYW5kX3JldHVybjsKIAl9CiAKIAluYXBpX3J4ID0gJmFtcDtwcml2LSZndDtudGZ5X2Jsb2Nrc1twcml2LSZndDtyeFtxaWRdLm50ZnlfaWRdLm5hcGk7Ci0JbmFwaV9kaXNhYmxlKG5hcGlfcngpOyAvKiBtYWtlIHN1cmUgY3VycmVudCByeCBwb2xsIGlzIGRvbmUgKi8KJiM0MzsJbmFwaV9kaXNhYmxlX2xvY2tlZChuYXBpX3J4KTsgLyogbWFrZSBzdXJlIGN1cnJlbnQgcnggcG9sbCBpcyBkb25lICovCiAKIAl0eF9xaWQgPSBndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsIHFpZCk7CiAJbmFwaV90eCA9ICZhbXA7cHJpdi0mZ3Q7bnRmeV9ibG9ja3NbcHJpdi0mZ3Q7dHhbdHhfcWlkXS5udGZ5X2lkXS5uYXBpOwotCW5hcGlfZGlzYWJsZShuYXBpX3R4KTsgLyogbWFrZSBzdXJlIGN1cnJlbnQgdHggcG9sbCBpcyBkb25lICovCiYjNDM7CW5hcGlfZGlzYWJsZV9sb2NrZWQobmFwaV90eCk7IC8qIG1ha2Ugc3VyZSBjdXJyZW50IHR4IHBvbGwgaXMgZG9uZSAqLwogCiAJZ3ZlX3VucmVnX3hza19wb29sKHByaXYsIHFpZCk7CiAJc21wX21iKCk7IC8qIE1ha2Ugc3VyZSBpdCBpcyB2aXNpYmxlIHRvIHRoZSB3b3JrZXJzIG9uIGRhdGFwYXRoICovCiAKLQluYXBpX2VuYWJsZShuYXBpX3J4KTsKLQluYXBpX2VuYWJsZShuYXBpX3R4KTsKJiM0MzsJbmFwaV9lbmFibGVfbG9ja2VkKG5hcGlfcngpOwomIzQzOwluYXBpX2VuYWJsZV9sb2NrZWQobmFwaV90eCk7CiAJaWYgKGd2ZV9pc19ncWkocHJpdikpIHsKIAkJaWYgKGd2ZV9yeF93b3JrX3BlbmRpbmcoJmFtcDtwcml2LSZndDtyeFtxaWRdKSkKIAkJCW5hcGlfc2NoZWR1bGUobmFwaV9yeCk7CkBAIC0xNzI3LDcgJiM0MzsxNzIxLDE0IEBAIHN0YXRpYyBpbnQgZ3ZlX3hza19wb29sX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCW5hcGlfc2NoZWR1bGUobmFwaV90eCk7CiAJfQogCi0JcmV0dXJuIDA7CiYjNDM7dW5tYXBfYW5kX3JldHVybjoKJiM0MzsJcG9vbCA9IHhza19nZXRfcG9vbF9mcm9tX3FpZChkZXYsIHFpZCk7CiYjNDM7CWlmIChwb29sKQomIzQzOwkJeHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsCiYjNDM7CQkJCSAgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMgfAomIzQzOwkJCQkgICBETUFfQVRUUl9XRUFLX09SREVSSU5HKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBndmVfeHNrX3dha2V1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcXVldWVfaWQsIHUzMiBmbGFncykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMKaW5kZXggMGVjZTJmNmZkZmZiNC4uODExZGI0MmQwNWM2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMKQEAgLTExMyw2ICYjNDM7MTEzLDEyIEBAIHN0YXRpYyB2b2lkIGd2ZV9yeF9yZXNldF9yaW5nX2RxbyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIGludCBpZHgpCiAJCQkJZ3ZlX2ZyZWVfdG9fcGFnZV9wb29sKHJ4LCBicywgZmFsc2UpOwogCQkJZWxzZQogCQkJCWd2ZV9mcmVlX3FwbF9wYWdlX2Rxbyhicyk7CiYjNDM7CiYjNDM7CQkJaWYgKGd2ZV9idWZfc3RhdGVfaXNfYWxsb2NhdGVkKHJ4LCBicykgJmFtcDsmYW1wOwomIzQzOwkJCSAgICBicy0mZ3Q7eHNrX2J1ZmYpIHsKJiM0MzsJCQkJeHNrX2J1ZmZfZnJlZShicy0mZ3Q7eHNrX2J1ZmYpOwomIzQzOwkJCQlicy0mZ3Q7eHNrX2J1ZmYgPSBOVUxMOwomIzQzOwkJCX0KIAkJfQogCX0KIApAQCAtODM5LDcgJiM0Mzs4NDUsMTIgQEAgc3RhdGljIGludCBndmVfcnhfZHFvKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCwKIAl9CiAKIAlpZiAodW5saWtlbHkoY29tcGxfZGVzYy0mZ3Q7cnhfZXJyb3IpKSB7Ci0JCWd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTsKJiM0MzsJCWlmIChidWZfc3RhdGUtJmd0O3hza19idWZmKSB7CiYjNDM7CQkJeHNrX2J1ZmZfZnJlZShidWZfc3RhdGUtJmd0O3hza19idWZmKTsKJiM0MzsJCQlndmVfZnJlZV9idWZfc3RhdGUocngsIGJ1Zl9zdGF0ZSk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTsKJiM0MzsJCX0KIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMTQ1LDEzICYjNDM7MTE1NiwxNCBAQCBpbnQgZ3ZlX3J4X3BvbGxfZHFvKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpibG9jaywgaW50IGJ1ZGdldCkKIAkJLyogRnJlZSBydW5uaW5nIGNvdW50ZXIgb2YgY29tcGxldGVkIGRlc2NyaXB0b3JzICovCiAJCXJ4LSZndDtjbnQmIzQzOyYjNDM7OwogCi0JCWlmICghcngtJmd0O2N0eC5za2JfaGVhZCkKLQkJCWNvbnRpbnVlOwotCiAJCWlmICghY29tcGxfZGVzYy0mZ3Q7ZW5kX29mX3BhY2tldCkKIAkJCWNvbnRpbnVlOwogCiAJCXdvcmtfZG9uZSYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlpZiAoIXJ4LSZndDtjdHguc2tiX2hlYWQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCXBrdF9ieXRlcyA9IHJ4LSZndDtjdHguc2tiX2hlYWQtJmd0O2xlbjsKIAkJLyogVGhlIGV0aGVybmV0IGhlYWRlciAoZmlyc3QgRVRIX0hMRU4gYnl0ZXMpIGlzIHNuaXBwZWQgb2ZmCiAJCSAqIGJ5IGV0aF90eXBlX3RyYW5zLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg1MAoJCQkJCQkJb3V0cHV0OiAxNjgKCQkJCQkJCXRob3VnaHRzOiA2ODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKGd2ZSkgZHJpdmVyLiBJIHNlZSBpdCYjMzk7cyB0b3VjaGluZyBgZ3ZlX21haW4uY2AgYW5kIGBndmVfcnhfZHFvLmNgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgZm9jdXNlZCBvbiBwb3RlbnRpYWwgcmlza3MsIHBhcnRpY3VsYXJseSB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMsIGFzIHRoYXQmIzM5O3MgYWx3YXlzIGEgY29uY2Vybi4KCkxvb2tpbmcgYXQgYGd2ZV9tYWluLmNgLCB0aGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIHRoZSBYRFAgc29ja2V0IChYU0spIHBvb2wgbWFuYWdlbWVudDogYGd2ZV94c2tfcG9vbF9lbmFibGVgIGlzIGdldHRpbmcgdXBkYXRlZCBpbiBob3cgaXQgaGFuZGxlcyByZWdpc3RlcmluZyBhbmQgY29uZmlndXJpbmcgdGhlIFhTSyBwb29sLCBhbmQgYGd2ZV94c2tfcG9vbF9kaXNhYmxlYCBub3cgdXNlcyB0aGUgbG9ja2VkIHZlcnNpb25zIG9mIGBuYXBpX2Rpc2FibGVgIGFuZCBgbmFwaV9lbmFibGVgLCBhbmQgbW92ZXMgYHhza19wb29sX2RtYV91bm1hcGAgdG8gdGhlIHZlcnkgZW5kIG9mIHRoZSBmdW5jdGlvbi4gVGhpcyBOQVBJIGxvY2tpbmcgY2hhbmdlIGlzIGNyaXRpY2FsIGZvciBjb25jdXJyZW5jeSwgcHJldmVudGluZyBkZWFkbG9ja3Mgb3IgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0aGUgZGlzYWJsZSBwcm9jZXNzLiBNb3ZpbmcgYHhza19wb29sX2RtYV91bm1hcGAgdG8gdGhlIGVuZCBtYWtlcyBzZW5zZSB0byByZWR1Y2UgY2hhbmNlcyBvZiBhY2Nlc3NpbmcgdW5tYXBwZWQgbWVtb3J5LgoKVGhlbiwgaW4gYGd2ZV9yeF9kcW8uY2AsIHRoaW5ncyBhcmUgbW9yZSBpbnRlcmVzdGluZy4gSSBzZWUgYSBjb3VwbGUgb2YgbWVtb3J5IGxlYWsgZml4ZXM6IGxvZ2ljIGlzIGJlaW5nIGFkZGVkIGluIGBndmVfcnhfcmVzZXRfcmluZ19kcW9gIHRvIGZyZWUgYHhza19idWZmYCBpZiBpdCYjMzk7cyBhbGxvY2F0ZWQsIHdoaWNoIGlzIGdvb2QuIEFsc28sIGluIGBndmVfcnhfZHFvYCwgdGhlcmUmIzM5O3MgYSBuZXcgY2hlY2sgdG8gZnJlZSB0aGUgYHhza19idWZmYCBpZiBgY29tcGxfZGVzYy0mZ3Q7cnhfZXJyb3JgLiBQcmV2ZW50aW5nIHRoZXNlIG1lbW9yeSBsZWFrcyBpcyB2aXRhbCwgb2YgY291cnNlLCBidXQgaXQgZG9lc24mIzM5O3Qgc2VlbSB0byBpbnRyb2R1Y2UgYW55IG5ldyBleHBvc3VyZSB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4KClRoZSBgZ3ZlX3J4X3BvbGxfZHFvYCBmdW5jdGlvbiBoYXMgYSByZW9yZGVyaW5nIG9mIHRoZSBjaGVja3M6IHRoZSBvcmRlciBvZiBgIXJ4LSZndDtjdHguc2tiX2hlYWRgIGFuZCBgIWNvbXBsX2Rlc2MtJmd0O2VuZF9vZl9wYWNrZXRgIGNoZWNrcyBoYXZlIGJlZW4gc3dhcHBlZC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgb3JpZ2luYWwgY29kZSBoYWQ6CgpgYGBjCgkJaWYgKCFyeC0mZ3Q7Y3R4LnNrYl9oZWFkKQoJCQljb250aW51ZTsKCgkJaWYgKCFjb21wbF9kZXNjLSZndDtlbmRfb2ZfcGFja2V0KQoJCQljb250aW51ZTsKYGBgCgpBbmQgbm93IGl0JiMzOTtzOgoKYGBgYwoJCWlmICghY29tcGxfZGVzYy0mZ3Q7ZW5kX29mX3BhY2tldCkKCQkJY29udGludWU7CgoJCXdvcmtfZG9uZSYjNDM7JiM0Mzs7CgoJCWlmICghcngtJmd0O2N0eC5za2JfaGVhZCkKCQkJY29udGludWU7CmBgYAoKQWgsIEkgc2VlLiBXaXRoIHRoZSBvcmlnaW5hbCBsb2dpYywgaXQgc2tpcHMgdGhlIHBhY2tldCBpZiBpdCYjMzk7cyBub3QgdGhlIGZpcnN0IHBhcnQgb2YgYSBwYWNrZXQuIEJ1dCBpZiBgY29tcGxfZGVzYy0mZ3Q7ZW5kX29mX3BhY2tldGAgaXMgdHJ1ZSwgdGhlIGB3b3JrX2RvbmVgIHdpbGwgYmUgaW5jcmVtZW50ZWQuIFRoZSBjaGFuZ2UgaGFzIG1vdmVkIHRoZSBjaGVjayB0byBlbnN1cmUgdGhhdCBwYWNrZXRzIHdpdGhvdXQgYSBoZWFkZXIgKnN0aWxsKiBjb3VudCBhcyB3b3JrIGRvbmUuIFRoYXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gTkFQSSBidWRnZXQgYWNjb3VudGluZy4KClNvLCB0YWtpbmcgYSBzdGVwIGJhY2ssIHRoaXMgcGF0Y2ggc2VlbXMgcHJldHR5IGNsZWFuLiBXZSYjMzk7cmUgbG9va2luZyBhdCBYRFAgcG9vbCBtYW5hZ2VtZW50LCBOQVBJIGxvY2tpbmcgKGVzc2VudGlhbCksIG1lbW9yeSBsZWFrIGZpeGVzLCBhbmQgYSBOQVBJIGJ1ZGdldCByZWxhdGVkIGNvbnRyb2wgZmxvdyBjaGFuZ2UuIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIGhlcmUuIFRoZSBwcmltYXJ5IHJpc2tzIGFwcGVhciB0byBiZSB0aG9zZSByZWxhdGVkIHRvIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgZGVhZGxvY2tzLCBhbmQgdGhhdCBjYW4gYmUgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBvciBLTUVNTEVBSy4gS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBBbGwgdGhpbmdzIGNvbnNpZGVyZWQsIEkgZG9uJiMzOTt0IHNlZSBhbnkgaW1tZWRpYXRlIHJlZCBmbGFncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChndmUpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZpeGluZyBYRFAgcG9vbCByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24gbG9naWMsIE5BUEkgbG9ja2luZyAodXNpbmcgbmFwaV9kaXNhYmxlX2xvY2tlZC9uYXBpX2VuYWJsZV9sb2NrZWQpLCBtZW1vcnkgbGVha3MgKGZyZWVpbmcgeHNrX2J1ZmYpLCBhbmQgTkFQSSBidWRnZXQgYWNjb3VudGluZyBpbiBndmVfcnhfcG9sbF9kcW8uIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGV4cG9zZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2UuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSBkZWFkbG9ja3MsIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBLTUVNTEVBSy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHb29nbGUgVmlydHVhbCBFdGhlcm5ldCAoZ3ZlKSBkcml2ZXIsIHNwZWNpZmljYWxseSBmaXhpbmcgWERQIHBvb2wgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIGxvZ2ljLCBOQVBJIGxvY2tpbmcgKHVzaW5nIG5hcGlfZGlzYWJsZV9sb2NrZWQvbmFwaV9lbmFibGVfbG9ja2VkKSwgbWVtb3J5IGxlYWtzIChmcmVlaW5nIHhza19idWZmKSwgYW5kIE5BUEkgYnVkZ2V0IGFjY291bnRpbmcgaW4gZ3ZlX3J4X3BvbGxfZHFvLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IHN0cnVjdHVyZSBwYWRkaW5nLCBvciBleHBvc2UgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgZGVhZGxvY2tzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgS01FTUxFQUsuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjE3OjM2Ljk0Mzk1MjA0NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzIzNzU4OTM2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX0dPT0dMRVwiLFxuICAgIFwiR1ZFXCIsXG4gICAgXCJYRFBfU09DS0VUU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlBDSV9NU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJndmVfcnhfcG9sbF9kcW9cIixcbiAgICBcImd2ZV9uYXBpX3BvbGxfZHFvXCIsXG4gICAgXCJndmVfeGRwX3BvbGxfZHFvXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKGd2ZSkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZml4aW5nIFhEUCBwb29sIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiBsb2dpYywgTkFQSSBsb2NraW5nICh1c2luZyBuYXBpX2Rpc2FibGVfbG9ja2VkL25hcGlfZW5hYmxlX2xvY2tlZCksIG1lbW9yeSBsZWFrcyAoZnJlZWluZyB4c2tfYnVmZiksIGFuZCBOQVBJIGJ1ZGdldCBhY2NvdW50aW5nIGluIGd2ZV9yeF9wb2xsX2Rxby4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZXhwb3NlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGRlYWRsb2NrcywgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBMT0NLREVQLCBLQVNBTiwgYW5kIEtNRU1MRUFLLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHb29nbGUgVmlydHVhbCBFdGhlcm5ldCAoZ3ZlKSBkcml2ZXIgdG8gZml4IGJ1Z3MgcmVsYXRlZCB0byBBRl9YRFAgKFhEUCBzb2NrZXRzKSBzdXBwb3J0LiBJdCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIGBndmVfcnhfcmVzZXRfcmluZ19kcW9gIGFuZCBgZ3ZlX3J4X2Rxb2AgYnkgcHJvcGVybHkgZnJlZWluZyBgeHNrX2J1ZmZgLiBJdCBhbHNvIGZpeGVzIGEgYnVnIGluIGBndmVfcnhfcG9sbF9kcW9gIHdoZXJlIGB3b3JrX2RvbmVgIHdhcyBub3QgaW5jcmVtZW50ZWQgY29ycmVjdGx5LCBhbmQgZml4ZXMgRE1BIHVubWFwcGluZyBpbiBgZ3ZlX3hza19wb29sX2VuYWJsZWAgYW5kIGBndmVfeHNrX3Bvb2xfZGlzYWJsZWAuIFRoZXNlIGNoYW5nZXMgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdCBvbiB0aGUgbmV0d29yayBkYXRhcGF0aCBhbmQgQUZfWERQIHNvY2tldCBoYW5kbGluZy4gVGhlIEdWRSBkcml2ZXIgaXMgdGhlIHByaW1hcnkgbmV0d29yayBpbnRlcmZhY2UgdXNlZCBpbiBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgVk1zLCB3aGVyZSBzeXprYWxsZXIgcnVucywgbWFraW5nIHRoZXNlIGNvZGUgcGF0aHMgaGlnaGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxNzozNi45NDM5NTgxMjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMjgyMDc0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZkODg0MWZhMjY4MzRhOTE0Y2ZhNzhjYTI0YTc2OTIzYjhhYmU2MGFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMTUgMDA6MTc6MzYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jXFxuaW5kZXggZTRkNzhhZTUyZGFmZS4uY2NhZjVmODZhMWU2ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmNcXG5AQCAtMTY1NCwyMCArMTY1NCwxOCBAQCBzdGF0aWMgaW50IGd2ZV94c2tfcG9vbF9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aWYgKCFwcml2LVxcdTAwM2V4ZHBfcHJvZyB8fCAhbmV0aWZfcnVubmluZyhkZXYpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGVyciA9IGd2ZV9yZWdfeHNrX3Bvb2wocHJpdiwgZGV2LCBwb29sLCBxaWQpO1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRnb3RvIGVycl94c2tfcG9vbF9kbWFfbWFwcGVkO1xcbi1cXG4tXFx0LyogU3RvcCBhbmQgc3RhcnQgUkRBIHF1ZXVlcyB0byByZXBvc3QgYnVmZmVycy4gKi9cXG4tXFx0aWYgKCFndmVfaXNfcXBsKHByaXYpKSB7XFxuK1xcdGlmIChndmVfaXNfcXBsKHByaXYpKSB7XFxuK1xcdFxcdGVyciA9IGd2ZV9yZWdfeHNrX3Bvb2wocHJpdiwgZGV2LCBwb29sLCBxaWQpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGVycl94c2tfcG9vbF9kbWFfbWFwcGVkO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBTdG9wIGFuZCBzdGFydCBSREEgcXVldWVzIHRvIHJlcG9zdCBidWZmZXJzLiAqL1xcbiBcXHRcXHRlcnIgPSBndmVfY29uZmlndXJlX3JpbmdzX3hkcChwcml2LCBwcml2LVxcdTAwM2VyeF9jZmcubnVtX3F1ZXVlcyk7XFxuIFxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdGdvdG8gZXJyX3hza19wb29sX3JlZ2lzdGVyZWQ7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX3hza19wb29sX2RtYV9tYXBwZWQ7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIDA7XFxuIFxcbi1lcnJfeHNrX3Bvb2xfcmVnaXN0ZXJlZDpcXG4tXFx0Z3ZlX3VucmVnX3hza19wb29sKHByaXYsIHFpZCk7XFxuIGVycl94c2tfcG9vbF9kbWFfbWFwcGVkOlxcbiBcXHRjbGVhcl9iaXQocWlkLCBwcml2LVxcdTAwM2V4c2tfcG9vbHMpO1xcbiBcXHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCxcXG5AQCAtMTY4Myw0MiArMTY4MSwzOCBAQCBzdGF0aWMgaW50IGd2ZV94c2tfcG9vbF9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaV9yeDtcXG4gXFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpX3R4O1xcbiBcXHRzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbDtcXG4rXFx0aW50IGVyciA9IDA7XFxuIFxcdGludCB0eF9xaWQ7XFxuLVxcdGludCBlcnI7XFxuIFxcbi1cXHRpZiAocWlkIFxcdTAwM2U9IHByaXYtXFx1MDAzZXJ4X2NmZy5udW1fcXVldWVzKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKHFpZCBcXHUwMDNlPSBwcml2LVxcdTAwM2VyeF9jZmcubnVtX3F1ZXVlcykge1xcbitcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIHVubWFwX2FuZF9yZXR1cm47XFxuK1xcdH1cXG4gXFxuIFxcdGNsZWFyX2JpdChxaWQsIHByaXYtXFx1MDAzZXhza19wb29scyk7XFxuIFxcbi1cXHRwb29sID0geHNrX2dldF9wb29sX2Zyb21fcWlkKGRldiwgcWlkKTtcXG4tXFx0aWYgKHBvb2wpXFxuLVxcdFxcdHhza19wb29sX2RtYV91bm1hcChwb29sLFxcbi1cXHRcXHRcXHRcXHQgICBETUFfQVRUUl9TS0lQX0NQVV9TWU5DIHxcXG4tXFx0XFx0XFx0XFx0ICAgRE1BX0FUVFJfV0VBS19PUkRFUklORyk7XFxuLVxcbiBcXHRpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSB8fCAhcHJpdi1cXHUwMDNldHhfY2ZnLm51bV94ZHBfcXVldWVzKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0Z290byB1bm1hcF9hbmRfcmV0dXJuO1xcbiBcXG4gXFx0LyogU3RvcCBhbmQgc3RhcnQgUkRBIHF1ZXVlcyB0byByZXBvc3QgYnVmZmVycy4gKi9cXG4gXFx0aWYgKCFndmVfaXNfcXBsKHByaXYpIFxcdTAwMjZcXHUwMDI2IHByaXYtXFx1MDAzZXhkcF9wcm9nKSB7XFxuIFxcdFxcdGVyciA9IGd2ZV9jb25maWd1cmVfcmluZ3NfeGRwKHByaXYsIHByaXYtXFx1MDAzZXJ4X2NmZy5udW1fcXVldWVzKTtcXG4gXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0XFx0Z290byB1bm1hcF9hbmRfcmV0dXJuO1xcbiBcXHR9XFxuIFxcbiBcXHRuYXBpX3J4ID0gXFx1MDAyNnByaXYtXFx1MDAzZW50ZnlfYmxvY2tzW3ByaXYtXFx1MDAzZXJ4W3FpZF0ubnRmeV9pZF0ubmFwaTtcXG4tXFx0bmFwaV9kaXNhYmxlKG5hcGlfcngpOyAvKiBtYWtlIHN1cmUgY3VycmVudCByeCBwb2xsIGlzIGRvbmUgKi9cXG4rXFx0bmFwaV9kaXNhYmxlX2xvY2tlZChuYXBpX3J4KTsgLyogbWFrZSBzdXJlIGN1cnJlbnQgcnggcG9sbCBpcyBkb25lICovXFxuIFxcbiBcXHR0eF9xaWQgPSBndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsIHFpZCk7XFxuIFxcdG5hcGlfdHggPSBcXHUwMDI2cHJpdi1cXHUwMDNlbnRmeV9ibG9ja3NbcHJpdi1cXHUwMDNldHhbdHhfcWlkXS5udGZ5X2lkXS5uYXBpO1xcbi1cXHRuYXBpX2Rpc2FibGUobmFwaV90eCk7IC8qIG1ha2Ugc3VyZSBjdXJyZW50IHR4IHBvbGwgaXMgZG9uZSAqL1xcbitcXHRuYXBpX2Rpc2FibGVfbG9ja2VkKG5hcGlfdHgpOyAvKiBtYWtlIHN1cmUgY3VycmVudCB0eCBwb2xsIGlzIGRvbmUgKi9cXG4gXFxuIFxcdGd2ZV91bnJlZ194c2tfcG9vbChwcml2LCBxaWQpO1xcbiBcXHRzbXBfbWIoKTsgLyogTWFrZSBzdXJlIGl0IGlzIHZpc2libGUgdG8gdGhlIHdvcmtlcnMgb24gZGF0YXBhdGggKi9cXG4gXFxuLVxcdG5hcGlfZW5hYmxlKG5hcGlfcngpO1xcbi1cXHRuYXBpX2VuYWJsZShuYXBpX3R4KTtcXG4rXFx0bmFwaV9lbmFibGVfbG9ja2VkKG5hcGlfcngpO1xcbitcXHRuYXBpX2VuYWJsZV9sb2NrZWQobmFwaV90eCk7XFxuIFxcdGlmIChndmVfaXNfZ3FpKHByaXYpKSB7XFxuIFxcdFxcdGlmIChndmVfcnhfd29ya19wZW5kaW5nKFxcdTAwMjZwcml2LVxcdTAwM2VyeFtxaWRdKSlcXG4gXFx0XFx0XFx0bmFwaV9zY2hlZHVsZShuYXBpX3J4KTtcXG5AQCAtMTcyNyw3ICsxNzIxLDE0IEBAIHN0YXRpYyBpbnQgZ3ZlX3hza19wb29sX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0bmFwaV9zY2hlZHVsZShuYXBpX3R4KTtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK3VubWFwX2FuZF9yZXR1cm46XFxuK1xcdHBvb2wgPSB4c2tfZ2V0X3Bvb2xfZnJvbV9xaWQoZGV2LCBxaWQpO1xcbitcXHRpZiAocG9vbClcXG4rXFx0XFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsXFxuK1xcdFxcdFxcdFxcdCAgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMgfFxcbitcXHRcXHRcXHRcXHQgICBETUFfQVRUUl9XRUFLX09SREVSSU5HKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZ3ZlX3hza193YWtldXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHF1ZXVlX2lkLCB1MzIgZmxhZ3MpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmNcXG5pbmRleCAwZWNlMmY2ZmRmZmI0Li44MTFkYjQyZDA1YzY3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmNcXG5AQCAtMTEzLDYgKzExMywxMiBAQCBzdGF0aWMgdm9pZCBndmVfcnhfcmVzZXRfcmluZ19kcW8oc3RydWN0IGd2ZV9wcml2ICpwcml2LCBpbnQgaWR4KVxcbiBcXHRcXHRcXHRcXHRndmVfZnJlZV90b19wYWdlX3Bvb2wocngsIGJzLCBmYWxzZSk7XFxuIFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0Z3ZlX2ZyZWVfcXBsX3BhZ2VfZHFvKGJzKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChndmVfYnVmX3N0YXRlX2lzX2FsbG9jYXRlZChyeCwgYnMpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICBicy1cXHUwMDNleHNrX2J1ZmYpIHtcXG4rXFx0XFx0XFx0XFx0eHNrX2J1ZmZfZnJlZShicy1cXHUwMDNleHNrX2J1ZmYpO1xcbitcXHRcXHRcXHRcXHRicy1cXHUwMDNleHNrX2J1ZmYgPSBOVUxMO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5AQCAtODM5LDcgKzg0NSwxMiBAQCBzdGF0aWMgaW50IGd2ZV9yeF9kcW8oc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoY29tcGxfZGVzYy1cXHUwMDNlcnhfZXJyb3IpKSB7XFxuLVxcdFxcdGd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTtcXG4rXFx0XFx0aWYgKGJ1Zl9zdGF0ZS1cXHUwMDNleHNrX2J1ZmYpIHtcXG4rXFx0XFx0XFx0eHNrX2J1ZmZfZnJlZShidWZfc3RhdGUtXFx1MDAzZXhza19idWZmKTtcXG4rXFx0XFx0XFx0Z3ZlX2ZyZWVfYnVmX3N0YXRlKHJ4LCBidWZfc3RhdGUpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRndmVfZnJlZV9idWZmZXIocngsIGJ1Zl9zdGF0ZSk7XFxuK1xcdFxcdH1cXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuQEAgLTExNDUsMTMgKzExNTYsMTQgQEAgaW50IGd2ZV9yeF9wb2xsX2RxbyhzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqYmxvY2ssIGludCBidWRnZXQpXFxuIFxcdFxcdC8qIEZyZWUgcnVubmluZyBjb3VudGVyIG9mIGNvbXBsZXRlZCBkZXNjcmlwdG9ycyAqL1xcbiBcXHRcXHRyeC1cXHUwMDNlY250Kys7XFxuIFxcbi1cXHRcXHRpZiAoIXJ4LVxcdTAwM2VjdHguc2tiX2hlYWQpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4gXFx0XFx0aWYgKCFjb21wbF9kZXNjLVxcdTAwM2VlbmRfb2ZfcGFja2V0KVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdHdvcmtfZG9uZSsrO1xcbitcXG4rXFx0XFx0aWYgKCFyeC1cXHUwMDNlY3R4LnNrYl9oZWFkKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuIFxcdFxcdHBrdF9ieXRlcyA9IHJ4LVxcdTAwM2VjdHguc2tiX2hlYWQtXFx1MDAzZWxlbjtcXG4gXFx0XFx0LyogVGhlIGV0aGVybmV0IGhlYWRlciAoZmlyc3QgRVRIX0hMRU4gYnl0ZXMpIGlzIHNuaXBwZWQgb2ZmXFxuIFxcdFxcdCAqIGJ5IGV0aF90eXBlX3RyYW5zLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxNzozNy40NDczNzM5OTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NzQ1NDE4MDYxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX0dPT0dMRVwiLFxuICAgIFwiR1ZFXCIsXG4gICAgXCJYRFBfU09DS0VUU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlBDSV9NU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJndmVfcnhfcG9sbF9kcW9cIixcbiAgICBcImd2ZV9uYXBpX3BvbGxfZHFvXCIsXG4gICAgXCJndmVfeGRwX3BvbGxfZHFvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChndmUpIGRyaXZlciB0byBmaXggYnVncyByZWxhdGVkIHRvIEFGX1hEUCAoWERQIHNvY2tldHMpIHN1cHBvcnQuIEl0IGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gYGd2ZV9yeF9yZXNldF9yaW5nX2Rxb2AgYW5kIGBndmVfcnhfZHFvYCBieSBwcm9wZXJseSBmcmVlaW5nIGB4c2tfYnVmZmAuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gYGd2ZV9yeF9wb2xsX2Rxb2Agd2hlcmUgYHdvcmtfZG9uZWAgd2FzIG5vdCBpbmNyZW1lbnRlZCBjb3JyZWN0bHksIGFuZCBmaXhlcyBETUEgdW5tYXBwaW5nIGluIGBndmVfeHNrX3Bvb2xfZW5hYmxlYCBhbmQgYGd2ZV94c2tfcG9vbF9kaXNhYmxlYC4gVGhlc2UgY2hhbmdlcyBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHRoZSBuZXR3b3JrIGRhdGFwYXRoIGFuZCBBRl9YRFAgc29ja2V0IGhhbmRsaW5nLiBUaGUgR1ZFIGRyaXZlciBpcyB0aGUgcHJpbWFyeSBuZXR3b3JrIGludGVyZmFjZSB1c2VkIGluIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKSBWTXMsIHdoZXJlIHN5emthbGxlciBydW5zLCBtYWtpbmcgdGhlc2UgY29kZSBwYXRocyBoaWdobHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZkODg0MWZhMjY4MzRhOTE0Y2ZhNzhjYTI0YTc2OTIzYjhhYmU2MGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxNSAwMDoxNzozNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uY1xuaW5kZXggZTRkNzhhZTUyZGFmZS4uY2NhZjVmODZhMWU2ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jXG5AQCAtMTY1NCwyMCArMTY1NCwxOCBAQCBzdGF0aWMgaW50IGd2ZV94c2tfcG9vbF9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmICghcHJpdi1cdTAwM2V4ZHBfcHJvZyB8fCAhbmV0aWZfcnVubmluZyhkZXYpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGVyciA9IGd2ZV9yZWdfeHNrX3Bvb2wocHJpdiwgZGV2LCBwb29sLCBxaWQpO1xuLVx0aWYgKGVycilcbi1cdFx0Z290byBlcnJfeHNrX3Bvb2xfZG1hX21hcHBlZDtcbi1cbi1cdC8qIFN0b3AgYW5kIHN0YXJ0IFJEQSBxdWV1ZXMgdG8gcmVwb3N0IGJ1ZmZlcnMuICovXG4tXHRpZiAoIWd2ZV9pc19xcGwocHJpdikpIHtcbitcdGlmIChndmVfaXNfcXBsKHByaXYpKSB7XG4rXHRcdGVyciA9IGd2ZV9yZWdfeHNrX3Bvb2wocHJpdiwgZGV2LCBwb29sLCBxaWQpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gZXJyX3hza19wb29sX2RtYV9tYXBwZWQ7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBTdG9wIGFuZCBzdGFydCBSREEgcXVldWVzIHRvIHJlcG9zdCBidWZmZXJzLiAqL1xuIFx0XHRlcnIgPSBndmVfY29uZmlndXJlX3JpbmdzX3hkcChwcml2LCBwcml2LVx1MDAzZXJ4X2NmZy5udW1fcXVldWVzKTtcbiBcdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGVycl94c2tfcG9vbF9yZWdpc3RlcmVkO1xuK1x0XHRcdGdvdG8gZXJyX3hza19wb29sX2RtYV9tYXBwZWQ7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbiBcbi1lcnJfeHNrX3Bvb2xfcmVnaXN0ZXJlZDpcbi1cdGd2ZV91bnJlZ194c2tfcG9vbChwcml2LCBxaWQpO1xuIGVycl94c2tfcG9vbF9kbWFfbWFwcGVkOlxuIFx0Y2xlYXJfYml0KHFpZCwgcHJpdi1cdTAwM2V4c2tfcG9vbHMpO1xuIFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsXG5AQCAtMTY4Myw0MiArMTY4MSwzOCBAQCBzdGF0aWMgaW50IGd2ZV94c2tfcG9vbF9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGlfcng7XG4gXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGlfdHg7XG4gXHRzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbDtcbitcdGludCBlcnIgPSAwO1xuIFx0aW50IHR4X3FpZDtcbi1cdGludCBlcnI7XG4gXG4tXHRpZiAocWlkIFx1MDAzZT0gcHJpdi1cdTAwM2VyeF9jZmcubnVtX3F1ZXVlcylcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAocWlkIFx1MDAzZT0gcHJpdi1cdTAwM2VyeF9jZmcubnVtX3F1ZXVlcykge1xuK1x0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIHVubWFwX2FuZF9yZXR1cm47XG4rXHR9XG4gXG4gXHRjbGVhcl9iaXQocWlkLCBwcml2LVx1MDAzZXhza19wb29scyk7XG4gXG4tXHRwb29sID0geHNrX2dldF9wb29sX2Zyb21fcWlkKGRldiwgcWlkKTtcbi1cdGlmIChwb29sKVxuLVx0XHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCxcbi1cdFx0XHRcdCAgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMgfFxuLVx0XHRcdFx0ICAgRE1BX0FUVFJfV0VBS19PUkRFUklORyk7XG4tXG4gXHRpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSB8fCAhcHJpdi1cdTAwM2V0eF9jZmcubnVtX3hkcF9xdWV1ZXMpXG4tXHRcdHJldHVybiAwO1xuK1x0XHRnb3RvIHVubWFwX2FuZF9yZXR1cm47XG4gXG4gXHQvKiBTdG9wIGFuZCBzdGFydCBSREEgcXVldWVzIHRvIHJlcG9zdCBidWZmZXJzLiAqL1xuIFx0aWYgKCFndmVfaXNfcXBsKHByaXYpIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXhkcF9wcm9nKSB7XG4gXHRcdGVyciA9IGd2ZV9jb25maWd1cmVfcmluZ3NfeGRwKHByaXYsIHByaXYtXHUwMDNlcnhfY2ZnLm51bV9xdWV1ZXMpO1xuIFx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4rXHRcdFx0Z290byB1bm1hcF9hbmRfcmV0dXJuO1xuIFx0fVxuIFxuIFx0bmFwaV9yeCA9IFx1MDAyNnByaXYtXHUwMDNlbnRmeV9ibG9ja3NbcHJpdi1cdTAwM2VyeFtxaWRdLm50ZnlfaWRdLm5hcGk7XG4tXHRuYXBpX2Rpc2FibGUobmFwaV9yeCk7IC8qIG1ha2Ugc3VyZSBjdXJyZW50IHJ4IHBvbGwgaXMgZG9uZSAqL1xuK1x0bmFwaV9kaXNhYmxlX2xvY2tlZChuYXBpX3J4KTsgLyogbWFrZSBzdXJlIGN1cnJlbnQgcnggcG9sbCBpcyBkb25lICovXG4gXG4gXHR0eF9xaWQgPSBndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsIHFpZCk7XG4gXHRuYXBpX3R4ID0gXHUwMDI2cHJpdi1cdTAwM2VudGZ5X2Jsb2Nrc1twcml2LVx1MDAzZXR4W3R4X3FpZF0ubnRmeV9pZF0ubmFwaTtcbi1cdG5hcGlfZGlzYWJsZShuYXBpX3R4KTsgLyogbWFrZSBzdXJlIGN1cnJlbnQgdHggcG9sbCBpcyBkb25lICovXG4rXHRuYXBpX2Rpc2FibGVfbG9ja2VkKG5hcGlfdHgpOyAvKiBtYWtlIHN1cmUgY3VycmVudCB0eCBwb2xsIGlzIGRvbmUgKi9cbiBcbiBcdGd2ZV91bnJlZ194c2tfcG9vbChwcml2LCBxaWQpO1xuIFx0c21wX21iKCk7IC8qIE1ha2Ugc3VyZSBpdCBpcyB2aXNpYmxlIHRvIHRoZSB3b3JrZXJzIG9uIGRhdGFwYXRoICovXG4gXG4tXHRuYXBpX2VuYWJsZShuYXBpX3J4KTtcbi1cdG5hcGlfZW5hYmxlKG5hcGlfdHgpO1xuK1x0bmFwaV9lbmFibGVfbG9ja2VkKG5hcGlfcngpO1xuK1x0bmFwaV9lbmFibGVfbG9ja2VkKG5hcGlfdHgpO1xuIFx0aWYgKGd2ZV9pc19ncWkocHJpdikpIHtcbiBcdFx0aWYgKGd2ZV9yeF93b3JrX3BlbmRpbmcoXHUwMDI2cHJpdi1cdTAwM2VyeFtxaWRdKSlcbiBcdFx0XHRuYXBpX3NjaGVkdWxlKG5hcGlfcngpO1xuQEAgLTE3MjcsNyArMTcyMSwxNCBAQCBzdGF0aWMgaW50IGd2ZV94c2tfcG9vbF9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0bmFwaV9zY2hlZHVsZShuYXBpX3R4KTtcbiBcdH1cbiBcbi1cdHJldHVybiAwO1xuK3VubWFwX2FuZF9yZXR1cm46XG4rXHRwb29sID0geHNrX2dldF9wb29sX2Zyb21fcWlkKGRldiwgcWlkKTtcbitcdGlmIChwb29sKVxuK1x0XHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCxcbitcdFx0XHRcdCAgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMgfFxuK1x0XHRcdFx0ICAgRE1BX0FUVFJfV0VBS19PUkRFUklORyk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW50IGd2ZV94c2tfd2FrZXVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBxdWV1ZV9pZCwgdTMyIGZsYWdzKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmNcbmluZGV4IDBlY2UyZjZmZGZmYjQuLjgxMWRiNDJkMDVjNjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmNcbkBAIC0xMTMsNiArMTEzLDEyIEBAIHN0YXRpYyB2b2lkIGd2ZV9yeF9yZXNldF9yaW5nX2RxbyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIGludCBpZHgpXG4gXHRcdFx0XHRndmVfZnJlZV90b19wYWdlX3Bvb2wocngsIGJzLCBmYWxzZSk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0Z3ZlX2ZyZWVfcXBsX3BhZ2VfZHFvKGJzKTtcbitcbitcdFx0XHRpZiAoZ3ZlX2J1Zl9zdGF0ZV9pc19hbGxvY2F0ZWQocngsIGJzKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgYnMtXHUwMDNleHNrX2J1ZmYpIHtcbitcdFx0XHRcdHhza19idWZmX2ZyZWUoYnMtXHUwMDNleHNrX2J1ZmYpO1xuK1x0XHRcdFx0YnMtXHUwMDNleHNrX2J1ZmYgPSBOVUxMO1xuK1x0XHRcdH1cbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTgzOSw3ICs4NDUsMTIgQEAgc3RhdGljIGludCBndmVfcnhfZHFvKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcbiBcdH1cbiBcbiBcdGlmICh1bmxpa2VseShjb21wbF9kZXNjLVx1MDAzZXJ4X2Vycm9yKSkge1xuLVx0XHRndmVfZnJlZV9idWZmZXIocngsIGJ1Zl9zdGF0ZSk7XG4rXHRcdGlmIChidWZfc3RhdGUtXHUwMDNleHNrX2J1ZmYpIHtcbitcdFx0XHR4c2tfYnVmZl9mcmVlKGJ1Zl9zdGF0ZS1cdTAwM2V4c2tfYnVmZik7XG4rXHRcdFx0Z3ZlX2ZyZWVfYnVmX3N0YXRlKHJ4LCBidWZfc3RhdGUpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTtcbitcdFx0fVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbkBAIC0xMTQ1LDEzICsxMTU2LDE0IEBAIGludCBndmVfcnhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBpbnQgYnVkZ2V0KVxuIFx0XHQvKiBGcmVlIHJ1bm5pbmcgY291bnRlciBvZiBjb21wbGV0ZWQgZGVzY3JpcHRvcnMgKi9cbiBcdFx0cngtXHUwMDNlY250Kys7XG4gXG4tXHRcdGlmICghcngtXHUwMDNlY3R4LnNrYl9oZWFkKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuIFx0XHRpZiAoIWNvbXBsX2Rlc2MtXHUwMDNlZW5kX29mX3BhY2tldClcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0d29ya19kb25lKys7XG4rXG4rXHRcdGlmICghcngtXHUwMDNlY3R4LnNrYl9oZWFkKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHRwa3RfYnl0ZXMgPSByeC1cdTAwM2VjdHguc2tiX2hlYWQtXHUwMDNlbGVuO1xuIFx0XHQvKiBUaGUgZXRoZXJuZXQgaGVhZGVyIChmaXJzdCBFVEhfSExFTiBieXRlcykgaXMgc25pcHBlZCBvZmZcbiBcdFx0ICogYnkgZXRoX3R5cGVfdHJhbnMuXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxNzozNy40NDczNzUxMDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzMxNzczNzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkdWRSBEcml2ZXIgWERQL0FGX1hEUCBDaGFuZ2VzIC0gV29ydGggSW52ZXN0aWdhdGluZyoqXG5cbk9rYXksIHNvIHRoZSBwYXRjaCB0b3VjaGVzIHRoZSBgZ3ZlX21haW4uY2AgYW5kIGBndmVfcnhfZHFvLmNgIGZpbGVzIHdpdGhpbiB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKEdWRSkgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0IGZvY3VzZXMgb24gdGhlIFhEUCBhbmQgQUZfWERQICh4c2spIHN1cHBvcnQsIG1vZGlmeWluZyBmdW5jdGlvbnMgbGlrZSBgZ3ZlX3hza19wb29sX2VuYWJsZWAsIGBndmVfeHNrX3Bvb2xfZGlzYWJsZWAsIGBndmVfcnhfcmVzZXRfcmluZ19kcW9gLCBgZ3ZlX3J4X2Rxb2AsIGFuZCBgZ3ZlX3J4X3BvbGxfZHFvYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgdGVzdGFiaWxpdHkuIEdWRSBpcyBhIHZpcnR1YWxpemVkIGRyaXZlciwgaXNuJ3QgaXQ/IEFoLCB5ZXMsIGl0J3MgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHVzZWQgaW4gR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpLCBzbyBpdCAqaXMqIHZpcnR1YWxpemVkLiBBbmQgc3l6a2FsbGVyLCB3aGljaCBJIHVzZSBleHRlbnNpdmVseSwgcnVucyBvbiBHQ0UgYnkgZGVmYXVsdCwgc28gR1ZFIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBXYWl0LCBkb2VzIHN5emthbGxlciBhY3R1YWxseSAqdXNlKiBHVkU/IFllcywgdXN1YWxseSBHQ0UgVk1zIGxldmVyYWdlIEdWRSBvciB2aXJ0aW8tbmV0LlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBpcyBpdCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBJdCdzIGEgbmV0d29yayBkcml2ZXIgYW5kIGl0J3MgcmVhY2hhYmxlIGZyb20gdGhlIGd1ZXN0LCBlaXRoZXIgYXMgdGhlIHByaW1hcnkgaW50ZXJmYWNlIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgaWYgd2UgY2FuIGluc3RhbnRpYXRlIGl0LiBXaGlsZSBpbnN0YW50aWF0aW5nIGl0IGluIFFFTVUgbWlnaHQgYmUgdHJpY2t5LCBzeXprYWxsZXIgKmlzKiBydW5uaW5nIGluIEdDRSwgd2hlcmUgR1ZFIGlzIHByZXNlbnQsIGFuZCB0aGVyZWZvcmUgYWNjZXNzaWJsZS4gVGhlIGRvY3VtZW50YXRpb24gZXhwbGljaXRseSBtZW50aW9ucyBub3QgYm90aGVyaW5nIHdpdGggY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiBHQ0Ug4oCTIGFuZCB0aGlzIGlzICp0aGUqIEdDRSBuZXR3b3JrIGRyaXZlciFcblxuTGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGNoYW5nZXMuIFRoZSBwYXRjaCBtb2RpZmllcyBgZ3ZlX3hza19wb29sX2VuYWJsZWAgYW5kIGBndmVfeHNrX3Bvb2xfZGlzYWJsZWAuIEFsc28sIGBndmVfcnhfcmVzZXRfcmluZ19kcW9gIGFuZCBgZ3ZlX3J4X2Rxb2AgYXJlIHVwZGF0ZWQgdG8gaGFuZGxlIHRoZSBgeHNrX2J1ZmZgIGZyZWVpbmcuIEFuZCBgZ3ZlX3J4X3BvbGxfZHFvYCBnZXRzIGEgYnVnIGZpeC4gVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQuIEl0J3Mgd29ydGggYSBsb29rIGF0IHRoZSBjb25maWcgZm9yIEdWRSwgd2hpY2ggc2hvdWxkIGJlIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZ2AuIExldCdzIGNoZWNrIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozODUzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTc6NDUuNzc5MTUxMTUzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTM3NzA1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgR1ZFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWc9MTY9aWYgTkVUX1ZFTkRPUl9HT09HTEVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZy0xNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZzoxODpjb25maWcgR1ZFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWctMTktXFx0dHJpc3RhdGUgXFxcIkdvb2dsZSBWaXJ0dWFsIE5JQyAoZ1ZOSUMpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjE3OjQ2LjAyODUzMjI3NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTM5ODkwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBzb21ldGhpbmcuIFRoZSBuYXR1cmFsIHN0YXJ0aW5nIHBvaW50LCBhcyBhbHdheXMsIGlzIHRoZSBLY29uZmlnIGZpbGUuIEknbSBkZWFsaW5nIHdpdGggdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFuZCBzcGVjaWZpY2FsbHkgRXRoZXJuZXQgZHJpdmVycyBmcm9tIEdvb2dsZSwgc28gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnYCBzZWVtcyBsaWtlIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGJlZ2luLiBUaW1lIHRvIG9wZW4gaXQgdXAgYW5kIHNlZSB3aGF0IEkgY2FuIGxlYXJuIGFib3V0IGhvdyB0aGlzIHBpZWNlIGZpdHMgaW50byB0aGUgbGFyZ2VyIHB1enpsZSBvZiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQncyBzZWUgd2hhdCB0aGlzIEtjb25maWcgZmlsZSByZXZlYWxzLi4uIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMsIG1heWJlIHNvbWUgYHNlbGVjdGAgZGlyZWN0aXZlcywgYW5kIGhvcGVmdWxseSBlbm91Z2ggY2x1ZXMgdG8gcGlucG9pbnQgdGhlIHJlcXVpcmVkIHByZXJlcXVpc2l0ZXMgZm9yIGVuYWJsaW5nIHRoaXMgc3BlY2lmaWMgR29vZ2xlIEV0aGVybmV0IGRyaXZlci4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCwgb2YgY291cnNlLCB0byBhdm9pZCBhbnkgYnVpbGQgZmFpbHVyZXMgb3IgcnVudGltZSBpc3N1ZXMgZG93biB0aGUgbGluZS4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTk3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTc6NDkuMDgyNTIzODE1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjXFxuICAgMjpcXHQjIEdvb2dsZSBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uXFxuICAgMzpcXHQjXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBORVRfVkVORE9SX0dPT0dMRVxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiR29vZ2xlIERldmljZXNcXFwiXFxuICAgNzpcXHRcXHRkZWZhdWx0IHlcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgZGV2aWNlIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0XFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxcbiAgMTI6XFx0XFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXFxuICAxMzpcXHRcXHQgIHRoZSBxdWVzdGlvbnMgYWJvdXQgR29vZ2xlIGRldmljZXMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWRcXG4gIDE0OlxcdFxcdCAgZm9yIHlvdXIgc3BlY2lmaWMgZGV2aWNlIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRpZiBORVRfVkVORE9SX0dPT0dMRVxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgR1ZFXFxuICAxOTpcXHRcXHR0cmlzdGF0ZSBcXFwiR29vZ2xlIFZpcnR1YWwgTklDIChnVk5JQykgc3VwcG9ydFxcXCJcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gKFBDSV9NU0kgXFx1MDAyNlxcdTAwMjYgKFg4NiB8fCBDUFVfTElUVExFX0VORElBTikpXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAyMjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEdvb2dsZSBWaXJ0dWFsIE5JQyAoZ1ZOSUMpXFxcIlxcbiAgMjU6XFx0XFxuICAyNjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuICAyNzpcXHRcXHQgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3ZlLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRlbmRpZiAjTkVUX1ZFTkRPUl9HT09HTEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTc6NDkuMDgyNjE5ODA2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDczNTI5MjA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBHVkUgRHJpdmVyOiBJbml0aWFsIFRob3VnaHRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBORVRfVkVORE9SX0dPT0dMRWAgYW5kIGBHVkVgLiBSaWdodCwgYW5kIGBHVkVgIGhhcyBhIGRlcGVuZGVuY3kgb24gYFBDSV9NU0lgLCB3aGljaCBpcyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kIGZvciBzZXR1cC4gVGhlIGNvcmUgcXVlc3Rpb24gaXM6IGNhbiBJIGVmZmVjdGl2ZWx5IGZ1enogYGd2ZV94c2tfcG9vbF9lbmFibGVgPyBUaGF0IHNlZW1zIGxpa2UgYSBnb29kIHRhcmdldC4gVGhpbmtpbmcgYWJvdXQgaXQsIHRoZSBhbnN3ZXIgaXMgeWVzLCBJIGNhbi4gTGV2ZXJhZ2luZyBBRl9YRFAgc29ja2V0cyBvbiB0aGUgR1ZFIGludGVyZmFjZSBpcyB0aGUga2V5IHRoZXJlLlxuXG5Ob3csIGxldCdzIHBpbnBvaW50IHRoZSBmdW5jdGlvbnMgSSBzaG91bGQgZm9jdXMgbXkgYXR0ZW50aW9uIG9uLiBJJ20gdGhpbmtpbmc6IGBndmVfeHNrX3Bvb2xfZW5hYmxlYCwgYGd2ZV94c2tfcG9vbF9kaXNhYmxlYCwgYGd2ZV9yeF9yZXNldF9yaW5nX2Rxb2AgKGV2ZW4gdGhvdWdoIGl0J3Mgc3RhdGljLCBpdCdzIHJlbGV2YW50IHRvIHRoZSBkYXRhIGZsb3cpLCBgZ3ZlX3J4X2Rxb2AgKGFub3RoZXIgc3RhdGljIG9uZSB0aGF0IGxpa2VseSBkb2VzIGltcG9ydGFudCB3b3JrKSwgYW5kIGNydWNpYWxseSwgYGd2ZV9yeF9wb2xsX2Rxb2AsIHdoaWNoIGlzIG5vbi1zdGF0aWMgYW5kIG9mZmVycyBhIGRpcmVjdCBhY2Nlc3MgcG9pbnQuXG5cblRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIGV4YW1pbmUgYGd2ZV94c2tfcG9vbF9lbmFibGVgIGFuZCBgZ3ZlX3hza19wb29sX2Rpc2FibGVgIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmNgLiBUaG9zZSBhcmUgbXkgZW50cnkgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjI3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTc6NTMuODE3OTE1MzE5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODkxNzA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndmVfeHNrX3Bvb2xfZW5hYmxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0xNjE2PXN0YXRpYyBpbnQgZ3ZlX3hkcF94bWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE2MjgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjE2Mjk6c3RhdGljIGludCBndmVfeHNrX3Bvb2xfZW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE2MzAtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTE4MDU9c3RhdGljIGludCBndmVfeGRwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRkZXZfYnBmICp4ZHApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTgxNy1cXHRcXHRpZiAoeGRwLVxcdTAwM2V4c2sucG9vbClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6MTgxODpcXHRcXHRcXHRyZXR1cm4gZ3ZlX3hza19wb29sX2VuYWJsZShkZXYsIHhkcC1cXHUwMDNleHNrLnBvb2wsIHhkcC1cXHUwMDNleHNrLnF1ZXVlX2lkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTgxOS1cXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjE3OjUzLjkyNjgzODQ4OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTE4MzUzODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkFuYWx5emluZyB0aGUgR1ZFIERhdGEgUGF0aCoqXG5cbk9rYXksIHNvIGBndmVfeHNrX3Bvb2xfZW5hYmxlYCBpcyBkZWZpbmVkIGFzIGEgc3RhdGljIHZhcmlhYmxlLCB0aGF0J3MgaW1wb3J0YW50IHRvIGtub3cgcmlnaHQgb2ZmIHRoZSBiYXQuIEl0IG1lYW5zIGl0cyB2aXNpYmlsaXR5IGFuZCBsaWZldGltZSBhcmUgcmVzdHJpY3RlZCB3aXRoaW4gaXRzIGNvbXBpbGF0aW9uIHVuaXQsIHVzdWFsbHkgYSBnb29kIGluZGljYXRvciB0aGF0IGl0J3MgYW4gaW50ZXJuYWwgZmxhZyBvciBzZXR0aW5nLCBub3Qgc29tZXRoaW5nIGV4cG9zZWQgZ2xvYmFsbHkuIE5vdywgdGhlIG1haW4gZW50cnkgcG9pbnRzIHNlZW0gdG8gYmUgZWl0aGVyIGBndmVfeGRwYCBvciBgZ3ZlX3hza193YWtldXBgLiBHaXZlbiB0aG9zZSB0d28sIGl0IG1ha2VzIHRoZSBtb3N0IHNlbnNlIHRvIHN0YXJ0IHdpdGggYGd2ZV94ZHBgIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWwgZGF0YSBmbG93LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHN0YXRpYyB2YXJpYWJsZSAoYGd2ZV94c2tfcG9vbF9lbmFibGVgKSBpcyB1c2VkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgWERQIGhhbmRsZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0OTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxNzo1Ny41Mzg2NzY2MzlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NTAwMTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImd2ZV94ZHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaD0xODk9c3RydWN0IGd2ZV9yeF9idWZfc3RhdGVfZHFvIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMjA4LS8qIFdyYXBwZXIgZm9yIFhEUCBSeCBtZXRhZGF0YSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MjA5OnN0cnVjdCBndmVfeGRwX2J1ZmYge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMjEwLVxcdHN0cnVjdCB4ZHBfYnVmZiB4ZHA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oPTExNzk9c3RhdGljIGlubGluZSB1MzIgZ3ZlX251bV90eF9xdWV1ZXMoc3RydWN0IGd2ZV9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMTgzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MTE4NDpzdGF0aWMgaW5saW5lIHUzMiBndmVfeGRwX3R4X3F1ZXVlX2lkKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgdTMyIHF1ZXVlX2lkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMTE4NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTExODgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaDoxMTg5OnN0YXRpYyBpbmxpbmUgdTMyIGd2ZV94ZHBfdHhfc3RhcnRfcXVldWVfaWQoc3RydWN0IGd2ZV9wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMTE5MC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaDoxMTkxOlxcdHJldHVybiBndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsIDApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMTE5Mi19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oPTEyMjY9bmV0ZGV2X3R4X3QgZ3ZlX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MTIyNzppbnQgZ3ZlX3hkcF94bWl0X2dxaShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbiwgc3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTEyMjgtXFx0XFx0ICAgICB1MzIgZmxhZ3MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MTIyOTppbnQgZ3ZlX3hkcF94bWl0X2RxbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbiwgc3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTEyMzAtXFx0XFx0ICAgICB1MzIgZmxhZ3MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MTIzMTppbnQgZ3ZlX3hkcF94bWl0X29uZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBndmVfdHhfcmluZyAqdHgsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMjMyLVxcdFxcdCAgICAgdm9pZCAqZGF0YSwgaW50IGxlbiwgdm9pZCAqZnJhbWVfcCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaDoxMjMzOnZvaWQgZ3ZlX3hkcF90eF9mbHVzaChzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHUzMiB4ZHBfcWlkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oOjEyMzQ6aW50IGd2ZV94ZHBfeG1pdF9vbmVfZHFvKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV90eF9yaW5nICp0eCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTEyMzUtXFx0XFx0XFx0IHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg9MTIzNj1ib29sIGd2ZV90eF9wb2xsKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpibG9jaywgaW50IGJ1ZGdldCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaDoxMjM3OmJvb2wgZ3ZlX3hkcF9wb2xsKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpibG9jaywgaW50IGJ1ZGdldCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMjM4LWludCBndmVfeHNrX3R4X3BvbGwoc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBpbnQgYnVkZ2V0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Rxby5oPTM2PW5ldGRldl9mZWF0dXJlc190IGd2ZV9mZWF0dXJlc19jaGVja19kcW8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Rxby5oLTM4LVxcdFxcdFxcdFxcdFxcdCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZHFvLmg6Mzk6aW50IGd2ZV94ZHBfcnhfdGltZXN0YW1wKGNvbnN0IHN0cnVjdCB4ZHBfbWQgKl9jdHgsIHU2NCAqdGltZXN0YW1wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9kcW8uaC00MC1ib29sIGd2ZV90eF9wb2xsX2RxbyhzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqYmxvY2ssIGJvb2wgZG9fY2xlYW4pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Rxby5oOjQxOmJvb2wgZ3ZlX3hkcF9wb2xsX2RxbyhzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqYmxvY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Rxby5oLTQyLWJvb2wgZ3ZlX3hza190eF9wb2xsX2RxbyhzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqYmxvY2ssIGludCBidWRnZXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZHFvLmg9NjU9dm9pZCBndmVfcnhfd3JpdGVfZG9vcmJlbGxfZHFvKGNvbnN0IHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgaW50IHF1ZXVlX2lkeCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZHFvLmg6NjY6dm9pZCBndmVfeGRwX3R4X2ZsdXNoX2RxbyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHUzMiB4ZHBfcWlkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9kcW8uaC02Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0zNTM9aW50IGd2ZV9uYXBpX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTM2Ny1cXHRcXHRlbHNlIGlmIChidWRnZXQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjM2ODpcXHRcXHRcXHRyZXNjaGVkdWxlIHw9IGd2ZV94ZHBfcG9sbChibG9jaywgYnVkZ2V0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMzY5LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz00MTE9aW50IGd2ZV9uYXBpX3BvbGxfZHFvKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy00MjItXFx0XFx0ZWxzZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzo0MjM6XFx0XFx0XFx0cmVzY2hlZHVsZSB8PSBndmVfeGRwX3BvbGxfZHFvKGJsb2NrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtNDI0LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz05MzY9c3RhdGljIHZvaWQgaW5pdF94ZHBfc3luY19zdGF0cyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTkzNy17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjkzODpcXHRpbnQgc3RhcnRfaWQgPSBndmVfeGRwX3R4X3N0YXJ0X3F1ZXVlX2lkKHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy05MzktXFx0aW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MTIxMD1zdGF0aWMgdm9pZCBndmVfdW5yZWdfeHNrX3Bvb2woc3RydWN0IGd2ZV9wcml2ICpwcml2LCB1MTYgcWlkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTEyMjMtXFx0XFx0cmV0dXJuO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxMjI0OlxcdHByaXYtXFx1MDAzZXR4W2d2ZV94ZHBfdHhfcXVldWVfaWQocHJpdiwgcWlkKV0ueHNrX3Bvb2wgPSBOVUxMO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xMjI1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0xMjI3PXN0YXRpYyBpbnQgZ3ZlX3JlZ194c2tfcG9vbChzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTI0My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6MTI0NDpcXHR0eF9xaWQgPSBndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsIHFpZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTEyNDUtXFx0cHJpdi1cXHUwMDNldHhbdHhfcWlkXS54c2tfcG9vbCA9IHBvb2w7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MTU3OT1zdGF0aWMgaW50IGd2ZV9zZXRfeGRwKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE2MTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjE2MTY6c3RhdGljIGludCBndmVfeGRwX3htaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG4sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE2MTctXFx0XFx0XFx0c3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcywgdTMyIGZsYWdzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE2MjEtXFx0aWYgKHByaXYtXFx1MDAzZXF1ZXVlX2Zvcm1hdCA9PSBHVkVfR1FJX1FQTF9GT1JNQVQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjE2MjI6XFx0XFx0cmV0dXJuIGd2ZV94ZHBfeG1pdF9ncWkoZGV2LCBuLCBmcmFtZXMsIGZsYWdzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTYyMy1cXHRlbHNlIGlmIChwcml2LVxcdTAwM2VxdWV1ZV9mb3JtYXQgPT0gR1ZFX0RRT19SREFfRk9STUFUKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxNjI0OlxcdFxcdHJldHVybiBndmVfeGRwX3htaXRfZHFvKGRldiwgbiwgZnJhbWVzLCBmbGFncyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE2MjUtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MTY3Nz1zdGF0aWMgaW50IGd2ZV94c2tfcG9vbF9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTcwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6MTcwNzpcXHR0eF9xaWQgPSBndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsIHFpZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE3MDgtXFx0bmFwaV90eCA9IFxcdTAwMjZwcml2LVxcdTAwM2VudGZ5X2Jsb2Nrc1twcml2LVxcdTAwM2V0eFt0eF9xaWRdLm50ZnlfaWRdLm5hcGk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MTc1Nj1zdGF0aWMgaW50IGd2ZV92ZXJpZnlfeGRwX2NvbmZpZ3VyYXRpb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xODA0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxODA1OnN0YXRpYyBpbnQgZ3ZlX3hkcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ZGV2X2JwZiAqeGRwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xODA2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0yMjQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZ3ZlX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjI1Mi1cXHQubmRvX3NldF9mZWF0dXJlc1xcdD1cXHRndmVfc2V0X2ZlYXR1cmVzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoyMjUzOlxcdC5uZG9fYnBmXFx0XFx0PVxcdGd2ZV94ZHAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjIyNTQ6XFx0Lm5kb194ZHBfeG1pdFxcdFxcdD1cXHRndmVfeGRwX3htaXQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTIyNTUtXFx0Lm5kb194c2tfd2FrZXVwXFx0XFx0PVxcdGd2ZV94c2tfd2FrZXVwLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTIzNzk9c3RhdGljIHZvaWQgZ3ZlX3NldF9uZXRkZXZfeGRwX2ZlYXR1cmVzKHN0cnVjdCBndmVfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yMzk3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoyMzk4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgeGRwX21ldGFkYXRhX29wcyBndmVfeGRwX21ldGFkYXRhX29wcyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6MjM5OTpcXHQueG1vX3J4X3RpbWVzdGFtcFxcdD0gZ3ZlX3hkcF9yeF90aW1lc3RhbXAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTI0MDAtfTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0yNDAyPXN0YXRpYyBpbnQgZ3ZlX2luaXRfcHJpdihzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIGJvb2wgc2tpcF9kZXNjcmliZV9kZXZpY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjQ5Ny1cXHRpZiAoIWd2ZV9pc19ncWkocHJpdikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjI0OTg6XFx0XFx0cHJpdi1cXHUwMDNlZGV2LVxcdTAwM2V4ZHBfbWV0YWRhdGFfb3BzID0gXFx1MDAyNmd2ZV94ZHBfbWV0YWRhdGFfb3BzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yNDk5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYz02OTQ9c3RhdGljIGludCBndmVfeHNrX3Bvb2xfcmVkaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtNzE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM6NzE5OnN0YXRpYyBpbnQgZ3ZlX3hkcF9yZWRpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtNzIwLVxcdFxcdFxcdCAgICBzdHJ1Y3QgeGRwX2J1ZmYgKm9yaWcsIHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2cpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTc1MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jOjc1MjpzdGF0aWMgdm9pZCBndmVfeGRwX2RvbmUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtNzUzLVxcdFxcdFxcdCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgc3RydWN0IGJwZl9wcm9nICp4cHJvZyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtNzY1LVxcdGNhc2UgWERQX1RYOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM6NzY2OlxcdFxcdHR4X3FpZCA9IGd2ZV94ZHBfdHhfcXVldWVfaWQocHJpdiwgcngtXFx1MDAzZXFfbnVtKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTc2Ny1cXHRcXHR0eCA9IFxcdTAwMjZwcml2LVxcdTAwM2V0eFt0eF9xaWRdO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtNzY4LVxcdFxcdHNwaW5fbG9jayhcXHUwMDI2dHgtXFx1MDAzZXhkcF9sb2NrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jOjc2OTpcXHRcXHRlcnIgPSBndmVfeGRwX3htaXRfb25lKHByaXYsIHR4LCB4ZHAtXFx1MDAzZWRhdGEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYy03NzAtXFx0XFx0XFx0XFx0ICAgICAgIHhkcC1cXHUwMDNlZGF0YV9lbmQgLSB4ZHAtXFx1MDAzZWRhdGEsIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYy03NzktXFx0Y2FzZSBYRFBfUkVESVJFQ1Q6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYzo3ODA6XFx0XFx0ZXJyID0gZ3ZlX3hkcF9yZWRpcmVjdChwcml2LVxcdTAwM2VkZXYsIHJ4LCB4ZHAsIHhwcm9nKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTc4MS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM9Nzk2PXN0YXRpYyB2b2lkIGd2ZV9yeChzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYy04NjYtXFx0XFx0aWYgKHhkcF9hY3QgIT0gWERQX1BBU1MpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jOjg2NzpcXHRcXHRcXHRndmVfeGRwX2RvbmUocHJpdiwgcngsIFxcdTAwMjZ4ZHAsIHhwcm9nLCB4ZHBfYWN0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTg2OC1cXHRcXHRcXHRjdHgtXFx1MDAzZXRvdGFsX3NpemUgKz0gZnJhZ19zaXplO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYz0xMDAwPXN0YXRpYyBpbnQgZ3ZlX2NsZWFuX3J4X2RvbmUoc3RydWN0IGd2ZV9yeF9yaW5nICpyeCwgaW50IGJ1ZGdldCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtMTA1Mi1cXHRpZiAoeGRwX3R4cyAhPSByeC1cXHUwMDNleGRwX2FjdGlvbnNbWERQX1RYXSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jOjEwNTM6XFx0XFx0Z3ZlX3hkcF90eF9mbHVzaChwcml2LCByeC1cXHUwMDNlcV9udW0pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtMTA1NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jPTIzNT1pbnQgZ3ZlX3J4X2FsbG9jX3JpbmdfZHFvKHN0cnVjdCBndmVfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTI2Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzoyNjM6XFx0Lyogc3RydWN0IGd2ZV94ZHBfYnVmZiBpcyBvdmVybGFpZCBvbiBzdHJ1Y3QgeGRwX2J1ZmZfeHNrIGFuZCB1dGlsaXplc1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTI2NC1cXHQgKiB0aGUgMjQgYnl0ZSBmaWVsZCBjYiB0byBzdG9yZSBndmUgc3BlY2lmaWMgZGF0YS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy0yNjUtXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6MjY2OlxcdFhTS19DSEVDS19QUklWX1RZUEUoc3RydWN0IGd2ZV94ZHBfYnVmZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtMjY3LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM9NTE1PXN0YXRpYyB2b2lkIGd2ZV9yeF9za2JfaHd0c3RhbXAoc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTUyNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo1MjU6aW50IGd2ZV94ZHBfcnhfdGltZXN0YW1wKGNvbnN0IHN0cnVjdCB4ZHBfbWQgKl9jdHgsIHU2NCAqdGltZXN0YW1wKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTUyNi17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6NTI3OlxcdGNvbnN0IHN0cnVjdCBndmVfeGRwX2J1ZmYgKmN0eCA9ICh2b2lkICopX2N0eDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy01MjgtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYz02MTE9c3RhdGljIGludCBndmVfcnhfYXBwZW5kX2ZyYWdzKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTY0OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo2NTA6c3RhdGljIGludCBndmVfeGRwX3R4X2RxbyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBndmVfcnhfcmluZyAqcngsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNjUxLVxcdFxcdFxcdCAgc3RydWN0IHhkcF9idWZmICp4ZHApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy02NjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6NjY1OlxcdHR4X3FpZCA9IGd2ZV94ZHBfdHhfcXVldWVfaWQocHJpdiwgcngtXFx1MDAzZXFfbnVtKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy02NjYtXFx0dHggPSBcXHUwMDI2cHJpdi1cXHUwMDNldHhbdHhfcWlkXTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy02NjctXFx0c3Bpbl9sb2NrKFxcdTAwMjZ0eC1cXHUwMDNlZHFvX3R4LnhkcF9sb2NrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo2Njg6XFx0ZXJyID0gZ3ZlX3hkcF94bWl0X29uZV9kcW8ocHJpdiwgdHgsIHhkcGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTY2OS1cXHRzcGluX3VubG9jayhcXHUwMDI2dHgtXFx1MDAzZWRxb190eC54ZHBfbG9jayk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYz02NzQ9c3RhdGljIHZvaWQgZ3ZlX3hza19kb25lX2RxbyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBndmVfcnhfcmluZyAqcngsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy02ODQtXFx0Y2FzZSBYRFBfVFg6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6Njg1OlxcdFxcdGlmICh1bmxpa2VseShndmVfeGRwX3R4X2Rxbyhwcml2LCByeCwgeGRwKSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNjg2LVxcdFxcdFxcdGdvdG8gZXJyO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNzA4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjcwOTpzdGF0aWMgdm9pZCBndmVfeGRwX2RvbmVfZHFvKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy03MTAtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgc3RydWN0IGJwZl9wcm9nICp4cHJvZyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTcyMS1cXHRjYXNlIFhEUF9UWDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo3MjI6XFx0XFx0ZXJyID0gZ3ZlX3hkcF90eF9kcW8ocHJpdiwgcngsIHhkcCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNzIzLVxcdFxcdGlmICh1bmxpa2VseShlcnIpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM9NzUwPXN0YXRpYyBpbnQgZ3ZlX3J4X3hza19kcW8oc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNzU3LVxcdHN0cnVjdCBndmVfcHJpdiAqcHJpdiA9IHJ4LVxcdTAwM2VndmU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6NzU4OlxcdHN0cnVjdCBndmVfeGRwX2J1ZmYgKmd2ZV94ZHA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNzU5LVxcdGludCB4ZHBfYWN0O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNzYzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjc2NDpcXHRndmVfeGRwID0gKHZvaWQgKil4ZHA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6NzY1OlxcdGd2ZV94ZHAtXFx1MDAzZWd2ZSA9IHByaXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6NzY2OlxcdGd2ZV94ZHAtXFx1MDAzZWNvbXBsX2Rlc2MgPSBjb21wbF9kZXNjO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTc2Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jPTgyMT1zdGF0aWMgaW50IGd2ZV9yeF9kcW8oc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtOTI3LVxcdGlmICh4cHJvZykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjkyODpcXHRcXHRzdHJ1Y3QgZ3ZlX3hkcF9idWZmIGd2ZV94ZHA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtOTI5LVxcdFxcdHZvaWQgKm9sZF9kYXRhO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtOTMxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjkzMjpcXHRcXHR4ZHBfaW5pdF9idWZmKFxcdTAwMjZndmVfeGRwLnhkcCwgYnVmX3N0YXRlLVxcdTAwM2VwYWdlX2luZm8uYnVmX3NpemUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtOTMzLVxcdFxcdFxcdCAgICAgIFxcdTAwMjZyeC1cXHUwMDNleGRwX3J4cSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6OTM0OlxcdFxcdHhkcF9wcmVwYXJlX2J1ZmYoXFx1MDAyNmd2ZV94ZHAueGRwLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTkzNS1cXHRcXHRcXHRcXHQgYnVmX3N0YXRlLVxcdTAwM2VwYWdlX2luZm8ucGFnZV9hZGRyZXNzICtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTkzOC1cXHRcXHRcXHRcXHQgYnVmX2xlbiwgZmFsc2UpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjkzOTpcXHRcXHRndmVfeGRwLmd2ZSA9IHByaXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6OTQwOlxcdFxcdGd2ZV94ZHAuY29tcGxfZGVzYyA9IGNvbXBsX2Rlc2M7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtOTQxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjk0MjpcXHRcXHRvbGRfZGF0YSA9IGd2ZV94ZHAueGRwLmRhdGE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6OTQzOlxcdFxcdHhkcF9hY3QgPSBicGZfcHJvZ19ydW5feGRwKHhwcm9nLCBcXHUwMDI2Z3ZlX3hkcC54ZHApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjk0NDpcXHRcXHRidWZfc3RhdGUtXFx1MDAzZXBhZ2VfaW5mby5wYWQgKz0gZ3ZlX3hkcC54ZHAuZGF0YSAtIG9sZF9kYXRhO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjk0NTpcXHRcXHRidWZfbGVuID0gZ3ZlX3hkcC54ZHAuZGF0YV9lbmQgLSBndmVfeGRwLnhkcC5kYXRhO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTk0Ni1cXHRcXHRpZiAoeGRwX2FjdCAhPSBYRFBfUEFTUykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjk0NzpcXHRcXHRcXHRndmVfeGRwX2RvbmVfZHFvKHByaXYsIHJ4LCBcXHUwMDI2Z3ZlX3hkcC54ZHAsIHhwcm9nLCB4ZHBfYWN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTk0OC1cXHRcXHRcXHRcXHRcXHQgYnVmX3N0YXRlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jPTEwOTE9aW50IGd2ZV9yeF9wb2xsX2RxbyhzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqYmxvY2ssIGludCBidWRnZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy0xMTg4LVxcdGlmICh4ZHBfdHhzICE9IHJ4LVxcdTAwM2V4ZHBfYWN0aW9uc1tYRFBfVFhdKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjExODk6XFx0XFx0Z3ZlX3hkcF90eF9mbHVzaF9kcW8ocHJpdiwgcngtXFx1MDAzZXFfbnVtKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy0xMTkwLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYz0xNj1zdGF0aWMgaW5saW5lIHZvaWQgZ3ZlX3R4X3B1dF9kb29yYmVsbChzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eC5jLTIyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmM6MjM6dm9pZCBndmVfeGRwX3R4X2ZsdXNoKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgdTMyIHhkcF9xaWQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYy0yNC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYzoyNTpcXHR1MzIgdHhfcWlkID0gZ3ZlX3hkcF90eF9xdWV1ZV9pZChwcml2LCB4ZHBfcWlkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eC5jLTI2LVxcdHN0cnVjdCBndmVfdHhfcmluZyAqdHggPSBcXHUwMDI2cHJpdi1cXHUwMDNldHhbdHhfcWlkXTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmM9Nzc3PXN0YXRpYyBpbnQgZ3ZlX3R4X2ZpbGxfeGRwKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV90eF9yaW5nICp0eCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmMtODIzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmM6ODI0OmludCBndmVfeGRwX3htaXRfZ3FpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuLCBzdHJ1Y3QgeGRwX2ZyYW1lICoqZnJhbWVzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmMtODI1LVxcdFxcdCAgICAgdTMyIGZsYWdzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYy04MzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYzo4Mzc6XFx0cWlkID0gZ3ZlX3hkcF90eF9xdWV1ZV9pZChwcml2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmMtODM4LVxcdFxcdFxcdFxcdCAgc21wX3Byb2Nlc3Nvcl9pZCgpICUgcHJpdi1cXHUwMDNldHhfY2ZnLm51bV94ZHBfcXVldWVzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmMtODQzLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuOyBpKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eC5jOjg0NDpcXHRcXHRlcnIgPSBndmVfeGRwX3htaXRfb25lKHByaXYsIHR4LCBmcmFtZXNbaV0tXFx1MDAzZWRhdGEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYy04NDUtXFx0XFx0XFx0XFx0ICAgICAgIGZyYW1lc1tpXS1cXHUwMDNlbGVuLCBmcmFtZXNbaV0pO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYy04NjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYzo4NjM6aW50IGd2ZV94ZHBfeG1pdF9vbmUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX3R4X3JpbmcgKnR4LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmMtODY0LVxcdFxcdCAgICAgdm9pZCAqZGF0YSwgaW50IGxlbiwgdm9pZCAqZnJhbWVfcClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmM9OTcxPWludCBndmVfeHNrX3R4X3BvbGwoc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKnJ4X2Jsb2NrLCBpbnQgYnVkZ2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYy05NzctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYzo5Nzg6XFx0dHggPSBcXHUwMDI2cHJpdi1cXHUwMDNldHhbZ3ZlX3hkcF90eF9xdWV1ZV9pZChwcml2LCByeC1cXHUwMDNlcV9udW0pXTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eC5jLTk3OS1cXHRpZiAodHgtXFx1MDAzZXhza19wb29sKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eC5jLTk5MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eC5jOjk5Mjpib29sIGd2ZV94ZHBfcG9sbChzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqYmxvY2ssIGludCBidWRnZXQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYy05OTMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmM9MTAyPXN0YXRpYyBib29sIGd2ZV9oYXNfcGVuZGluZ19wYWNrZXQoc3RydWN0IGd2ZV90eF9yaW5nICp0eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTExNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYzoxMTU6dm9pZCBndmVfeGRwX3R4X2ZsdXNoX2RxbyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHUzMiB4ZHBfcWlkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTExNi17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmM6MTE3OlxcdHUzMiB0eF9xaWQgPSBndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsIHhkcF9xaWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTExOC1cXHRzdHJ1Y3QgZ3ZlX3R4X3JpbmcgKnR4ID0gXFx1MDAyNnByaXYtXFx1MDAzZXR4W3R4X3FpZF07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYz0xNTEwPWJvb2wgZ3ZlX3hza190eF9wb2xsX2RxbyhzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqcnhfYmxvY2ssIGludCBidWRnZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYy0xNTE1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jOjE1MTY6XFx0dHggPSBcXHUwMDI2cHJpdi1cXHUwMDNldHhbZ3ZlX3hkcF90eF9xdWV1ZV9pZChwcml2LCByeC1cXHUwMDNlcV9udW0pXTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYy0xNTE3LVxcdGlmICh0eC1cXHUwMDNleHNrX3Bvb2wpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYy0xNTIyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jOjE1MjM6Ym9vbCBndmVfeGRwX3BvbGxfZHFvKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpibG9jaylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYy0xNTI0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE1MzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmM6MTUzNjppbnQgZ3ZlX3hkcF94bWl0X29uZV9kcW8oc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX3R4X3JpbmcgKnR4LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE1MzctXFx0XFx0XFx0IHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYy0xNTgyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jOjE1ODM6aW50IGd2ZV94ZHBfeG1pdF9kcW8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG4sIHN0cnVjdCB4ZHBfZnJhbWUgKipmcmFtZXMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmMtMTU4NC1cXHRcXHQgICAgIHUzMiBmbGFncylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE1OTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmM6MTU5MzpcXHRxaWQgPSBndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmMtMTU5NC1cXHRcXHRcXHRcXHQgIHNtcF9wcm9jZXNzb3JfaWQoKSAlIHByaXYtXFx1MDAzZXR4X2NmZy5udW1feGRwX3F1ZXVlcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYy0xNTk5LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuOyBpKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYzoxNjAwOlxcdFxcdGVyciA9IGd2ZV94ZHBfeG1pdF9vbmVfZHFvKHByaXYsIHR4LCBmcmFtZXNbaV0pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE2MDEtXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTc6NTcuNjIzMTgyNTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIzNzI4NDg2ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSWRlbnRpZnlpbmcgYW5kIFByaW9yaXRpemluZyBFbnRyeSBQb2ludHMgZm9yIEFuYWx5c2lzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGlkZW50aWZ5IHRoZSBtb3N0IHN1aXRhYmxlIGVudHJ5IHBvaW50cyBmb3IgdGhpcyBhbmFseXNpcywgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGluc3RydWN0aW9ucy4gSSdtIGxvb2tpbmcgZm9yIGZ1bmN0aW9ucyB0aGF0IGFyZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuXG5cbkluaXRpYWxseSwgSSBpZGVudGlmaWVkIGEgZmV3IGtleSBlbnRyeSBwb2ludHM6IGBndmVfeGRwYCAod2hpY2ggaW50ZXJuYWxseSBjYWxscyBgZ3ZlX3hza19wb29sX2VuYWJsZWAgYW5kIGBndmVfeHNrX3Bvb2xfZGlzYWJsZWApLCBgZ3ZlX3hkcF94bWl0YCwgYGd2ZV94c2tfd2FrZXVwYCwgYW5kIGBndmVfbmFwaV9wb2xsX2Rxb2AgKHdoaWNoIGNhbGxzIGBndmVfcnhfcG9sbF9kcW9gKS4gQnV0LCB0aGUgY2FsbCBncmFwaCBpcyBhIGJpdCBtb3JlIGludHJpY2F0ZSB0aGFuIHRoYXQsIHNvIEkgZm9jdXNlZCBvbjogYGd2ZV94ZHBgLCBgZ3ZlX3hza193YWtldXBgLCBgZ3ZlX25hcGlfcG9sbF9kcW9gLCBhbmQgYGd2ZV9yeF9wb2xsX2Rxb2AuXG5cbk5vdywgdGhlIGluc3RydWN0aW9ucyBzdHJvbmdseSBzdWdnZXN0IHByZWZlcnJpbmcgbm9uLXN0YXRpYyBmdW5jdGlvbnMuICBgZ3ZlX3J4X3BvbGxfZHFvYCBpbW1lZGlhdGVseSBjYXVnaHQgbXkgZXllIGJlY2F1c2UgaXQgaXMgbm9uLXN0YXRpYy4gTGV0IG1lIGNvbmZpcm0gdGhlIHNpZ25hdHVyZTogYGludCBndmVfcnhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBpbnQgYnVkZ2V0KWAuIENvbmZpcm1lZC5cblxuYGd2ZV94ZHBgLCB0aG91Z2ggYWNjZXNzaWJsZSB2aWEgYC5uZG9fYnBmYCBhbmQgc3l6a2FsbGVyICh0aHJvdWdoIHRoZSBgYnBmYCBzeXNjYWxsIG9yIGBuZXRsaW5rYCBYRFAgc2V0dXApLCBpcyB1bmZvcnR1bmF0ZWx5IHN0YXRpYy4gVGhlIGluc3RydWN0aW9ucyBjbGVhcmx5IGZhdm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBzbyBgZ3ZlX3hkcGAgaXMgbGVzcyBpZGVhbC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIHN0YXRpYyBuYXR1cmUgb2YgYGd2ZV94c2tfcG9vbF9lbmFibGVgLiBZZXMsIGl0IGlzIHN0YXRpYy5cblxuT2theSwgbGV0J3MgZXhwYW5kIG15IHNlYXJjaCBmb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMuIEkgc2VlIGEgZmV3IG9wdGlvbnM6IGBndmVfeGRwX3htaXRfZHFvYCwgYGd2ZV94ZHBfeG1pdF9ncWlgLCBgZ3ZlX3hkcF94bWl0X29uZWAsIGBndmVfeGRwX3R4X2ZsdXNoYCwgYGd2ZV94ZHBfeG1pdF9vbmVfZHFvYCwgYGd2ZV94ZHBfcG9sbGAsIGFuZCBgZ3ZlX3hza190eF9wb2xsYC4gVGhlc2UgYXJlIGFsc28gbm9uLXN0YXRpYyBidXQgSSdsbCBob2xkIHRoZW0gYXMgc2Vjb25kYXJ5IGNhbmRpZGF0ZXMuXG5cbkNvbnNpZGVyaW5nIHRoZSBwYXRjaCBtb2RpZmljYXRpb25zLCBmb2N1c2luZyBvbiB0aGUgb25lcyB3aGljaCBhcmUgY2hhbmdlZCBtaWdodCBiZSBhIGJldHRlciBpZGVhLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGd2ZV94c2tfcG9vbF9lbmFibGVgLCBgZ3ZlX3hza19wb29sX2Rpc2FibGVgLCBgZ3ZlX3J4X3Jlc2V0X3JpbmdfZHFvYCwgYGd2ZV9yeF9kcW9gLCBhbmQgYGd2ZV9yeF9wb2xsX2Rxb2AuIFRoaXMgc3Ryb25nbHkgcmVpbmZvcmNlcyBgZ3ZlX3J4X3BvbGxfZHFvYCBhcyBhIGdvb2QgdGFyZ2V0LlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcyBhYm91dCByZWFjaGFiaWxpdHksIHNwZWNpZmljYWxseSB3aXRoaW4gR0NFIGFuZCBRRU1VLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGUgaW5zdHJ1Y3Rpb25zIHN0YXRlIHRoYXQgY29kZSBwYXRocyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIGFyZSBwcm9ibGVtYXRpYy4gIEdWRSBpcyBhIHZpcnR1YWwgTklDIHVzZWQgaW4gR0NFLCBhbmQgc2luY2Ugc3l6a2FsbGVyIHJ1bnMgb24gR0NFLCB0aGF0J3MgcGVyZmVjdCEgIFRoZSBkcml2ZXIgd2lsbCBiZSBwcmVzZW50IGFuZCBhY3RpdmUuIEdWRSBpcyBhIFBDSSBkZXZpY2UsIGJ1dCBpdCBpcyBhdmFpbGFibGUuIFRoZSBHQ0UgVk1zIGhhdmUgR1ZFIGFzIHRoZSBwcmltYXJ5IG5ldHdvcmsgaW50ZXJmYWNlLCBzbyBpdCdzIGxvYWRlZCBhbmQgcHJlc2VudC4gU3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IGluc3RhbnRpYXRlIHRoZSBkZXZpY2UsIGl0J3MgYSBwcmltYXJ5IGludGVyZmFjZS4gVGhlcmVmb3JlLCBgZ3ZlX3J4X3BvbGxfZHFvYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUuXG5cblNvLCBgZ3ZlX3J4X3BvbGxfZHFvYCBpcyBteSBwcmltYXJ5IGZvY3VzLiBJIHdpbGwgZG91YmxlLWNoZWNrIGl0cyBub24tc3RhdGljIG5hdHVyZSBvbmUgbGFzdCB0aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA5MCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTg6MDkuOTk2MDM0OTEzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzUwMjg2MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGd2ZV9yeF9wb2xsX2Rxb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9kcW8uaD00Mj1ib29sIGd2ZV94c2tfdHhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBpbnQgYnVkZ2V0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9kcW8uaDo0MzppbnQgZ3ZlX3J4X3BvbGxfZHFvKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpibG9jaywgaW50IGJ1ZGdldCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZHFvLmgtNDQtaW50IGd2ZV90eF9hbGxvY19yaW5nc19kcW8oc3RydWN0IGd2ZV9wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM9MTA1NT1zdGF0aWMgaW50IGd2ZV9yeF9jb21wbGV0ZV9za2Ioc3RydWN0IGd2ZV9yeF9yaW5nICpyeCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtMTA5MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzoxMDkxOmludCBndmVfcnhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBpbnQgYnVkZ2V0KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTEwOTIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxODoxMC4yMzEwNjk5MjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkzNzc5OTk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gSWRlbnRpZnlpbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZ3ZlX3J4X3BvbGxfZHFvYCwgYW5kIGl0J3MgZGVmaW5pdGVseSBub24tc3RhdGljLCBnb3QgdGhhdC4gTm93LCB3aGF0IGFib3V0IGBndmVfeGRwYD8gQWgsIHJpZ2h0LCB0aGF0J3MgYSBzdGF0aWMgZnVuY3Rpb24uIEhtbSwgaXMgdGhlcmUgYW55ICpub24tc3RhdGljKiBjb3VudGVycGFydCB0aGF0IGNhbGxzIGBndmVfeHNrX3Bvb2xfZW5hYmxlYD8gTm8sIGl0J3MgY2FsbGVkIGRpcmVjdGx5IGZyb20gd2l0aGluIGBndmVfeGRwYC4gTWFrZXMgc2Vuc2UuIEFscmlnaHQsIEknbGwgYWRkIGBndmVfcnhfcG9sbF9kcW9gIHRvIG15IEZvY3VzU3ltYm9scyBsaXN0IOKAkyB0aGF0IHNlZW1zIGltcG9ydGFudC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlc2UgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFRpbWUgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIGNvbmZpZ3MuIEkgYWxyZWFkeSBzZWUgYE5FVF9WRU5ET1JfR09PR0xFYCBhbmQgYEdWRWAuLi5idXQgd2FpdCBhIHNlY29uZC4gRG9lcyBlbmFibGluZyBgR1ZFYCBpdHNlbGYgcHVsbCBpbiBkZXBlbmRlbmNpZXMgbGlrZSBgQlBGX1NZU0NBTExgIG9yIGBYRFBfU09DS0VUU2A/IFRoZSBwYXRjaCBJJ20gZXhhbWluaW5nIG1vZGlmaWVzIGBndmVfeHNrX3Bvb2xfZW5hYmxlYCwgd2hpY2gsIGlmIEkgcmVjYWxsLCBkZWFscyB3aXRoIGB4c2tfcG9vbF9kbWFfdW5tYXBgLCBgeHNrX2dldF9wb29sX2Zyb21fcWlkYCwgYW5kIGFsbCB0aGF0IFhEUC1yZWxhdGVkIHN0dWZmLiBTbywgaXQncyB3b3J0aCBkb3VibGUtY2hlY2tpbmcgdGhhdCBgWERQX1NPQ0tFVFNgIGlzIGEgcmVxdWlyZW1lbnQgaGVyZS4gTmVlZCB0byBjb25maXJtIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjgyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjE4OjE1LjE2ODg3Mzk3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDIyNzc1NTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhza19wb29sX2RtYV91bm1hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfeGRwLmM9MjE9c3RhdGljIGludCB0c25lcF94ZHBfZW5hYmxlX3Bvb2woc3RydWN0IHRzbmVwX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF94ZHAuYy00OS1cXHRpZiAocmV0dmFsKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfeGRwLmM6NTA6XFx0XFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX3hkcC5jLTUxLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfeGRwLmM9NTg9c3RhdGljIGludCB0c25lcF94ZHBfZGlzYWJsZV9wb29sKHN0cnVjdCB0c25lcF9hZGFwdGVyICphZGFwdGVyLCB1MTYgcXVldWVfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF94ZHAuYy03NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF94ZHAuYzo3NTpcXHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwgRE1BX0FUVFJfU0tJUF9DUFVfU1lOQyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfeGRwLmMtNzYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTIteHNrLmM9MTczPXN0YXRpYyBpbnQgZHBhYTJfeHNrX2Rpc2FibGVfcG9vbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcWlkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXhzay5jLTE4OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTIteHNrLmM6MTkwOlxcdHhza19wb29sX2RtYV91bm1hcChwb29sLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTIteHNrLmMtMTkxLVxcdGVyciA9IHhkcF9yeHFfaW5mb19yZWdfbWVtX21vZGVsKFxcdTAwMjZjaC1cXHUwMDNleGRwX3J4cSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi14c2suYz0yMjA9c3RhdGljIGludCBkcGFhMl94c2tfZW5hYmxlX3Bvb2woc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi14c2suYy0yOTQtZXJyX21lbV9tb2RlbDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTIteHNrLmM6Mjk1OlxcdHhza19wb29sX2RtYV91bm1hcChwb29sLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTIteHNrLmMtMjk2LWVycl9kbWFfdW5tYXA6XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYz00NTYxPXN0YXRpYyBpbnQgZmVjX2VuYWJsZV94c2tfcG9vbChzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNDU4NC1cXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6NDU4NTpcXHRcXHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwgMCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNDU4Ni1cXHRcXHRyZXR1cm4gZXJyO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9NDU5Mj1zdGF0aWMgaW50IGZlY19kaXNhYmxlX3hza19wb29sKHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXAsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00NjAxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjQ2MDI6XFx0XFx0eHNrX3Bvb2xfZG1hX3VubWFwKG9sZF9wb29sLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00NjAzLVxcdFxcdHJ4cS1cXHUwMDNleHNrX3Bvb2wgPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNDYxMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzo0NjEzOlxcdHhza19wb29sX2RtYV91bm1hcChvbGRfcG9vbCwgMCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNDYxNC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0xNjI5PXN0YXRpYyBpbnQgZ3ZlX3hza19wb29sX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE2NzAtXFx0Y2xlYXJfYml0KHFpZCwgcHJpdi1cXHUwMDNleHNrX3Bvb2xzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6MTY3MTpcXHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTY3Mi1cXHRcXHRcXHQgICBETUFfQVRUUl9TS0lQX0NQVV9TWU5DIHxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0xNjc3PXN0YXRpYyBpbnQgZ3ZlX3hza19wb29sX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xNzI2LVxcdGlmIChwb29sKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxNzI3OlxcdFxcdHhza19wb29sX2RtYV91bm1hcChwb29sLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xNzI4LVxcdFxcdFxcdFxcdCAgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMgfFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jPTEzOD1zdGF0aWMgaW50IGk0MGVfeHNrX3Bvb2xfZGlzYWJsZShzdHJ1Y3QgaTQwZV92c2kgKnZzaSwgdTE2IHFpZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suYy0xNTctXFx0Y2xlYXJfYml0KHFpZCwgdnNpLVxcdTAwM2VhZl94ZHBfemNfcXBzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfeHNrLmM6MTU4OlxcdHhza19wb29sX2RtYV91bm1hcChwb29sLCBJNDBFX1JYX0RNQV9BVFRSKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfeHNrLmMtMTU5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV94c2suYz0xMjQ9c3RhdGljIGludCBpY2VfeHNrX3Bvb2xfZGlzYWJsZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1MTYgcWlkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV94c2suYy0xMzAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV94c2suYzoxMzE6XFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIElDRV9SWF9ETUFfQVRUUik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV94c2suYy0xMzItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX3hzay5jPTk3PXN0YXRpYyBpbnQgaWdiX3hza19wb29sX2VuYWJsZShzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX3hzay5jLTEzMC1cXHRcXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl94c2suYzoxMzE6XFx0XFx0XFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIElHQl9SWF9ETUFfQVRUUik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl94c2suYy0xMzItXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfeHNrLmM9MTM5PXN0YXRpYyBpbnQgaWdiX3hza19wb29sX2Rpc2FibGUoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1MTYgcWlkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl94c2suYy0xNTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl94c2suYzoxNTU6XFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIElHQl9SWF9ETUFfQVRUUik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl94c2suYy0xNTYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX3hkcC5jPTU2PXN0YXRpYyBpbnQgaWdjX3hkcF9lbmFibGVfcG9vbChzdHJ1Y3QgaWdjX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX3hkcC5jLTEwOS1cXHRcXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY194ZHAuYzoxMTA6XFx0XFx0XFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIElHQ19SWF9ETUFfQVRUUik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY194ZHAuYy0xMTEtXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfeGRwLmM9MTE4PXN0YXRpYyBpbnQgaWdjX3hkcF9kaXNhYmxlX3Bvb2woc3RydWN0IGlnY19hZGFwdGVyICphZGFwdGVyLCB1MTYgcXVldWVfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX3hkcC5jLTE0NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX3hkcC5jOjE0NjpcXHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwgSUdDX1JYX0RNQV9BVFRSKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX3hkcC5jLTE0Ny1cXHRjbGVhcl9iaXQoSUdDX1JJTkdfRkxBR19BRl9YRFBfWkMsIFxcdTAwMjZyeF9yaW5nLVxcdTAwM2VmbGFncyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV94c2suYz0yMz1zdGF0aWMgaW50IGl4Z2JlX3hza19wb29sX2VuYWJsZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jLTU2LVxcdFxcdFxcdGNsZWFyX2JpdChxaWQsIGFkYXB0ZXItXFx1MDAzZWFmX3hkcF96Y19xcHMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jOjU3OlxcdFxcdFxcdHhza19wb29sX2RtYV91bm1hcChwb29sLCBJWEdCRV9SWF9ETUFfQVRUUik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeHNrLmMtNTgtXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jPTY1PXN0YXRpYyBpbnQgaXhnYmVfeHNrX3Bvb2xfZGlzYWJsZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgdTE2IHFpZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jLTgwLVxcdGNsZWFyX2JpdChxaWQsIGFkYXB0ZXItXFx1MDAzZWFmX3hkcF96Y19xcHMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jOjgxOlxcdHhza19wb29sX2RtYV91bm1hcChwb29sLCBJWEdCRV9SWF9ETUFfQVRUUik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeHNrLmMtODItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgveHNrLmM9MjU2PWludCBsaWJldGhfeHNrX3NldHVwX3Bvb2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHFpZCwgYm9vbCBlbmFibGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgveHNrLmMtMjY3LVxcdGVsc2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgveHNrLmM6MjY4OlxcdFxcdHhza19wb29sX2RtYV91bm1hcChwb29sLCBMSUJFVEhfWFNLX0RNQV9BVFRSKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgveHNrLmMtMjY5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfeHNrLmM9MTQwPWludCBvdHgyX3hza19wb29sX2Rpc2FibGUoc3RydWN0IG90eDJfbmljICpwZiwgdTE2IHFpZHgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml94c2suYy0xNTMtXFx0Y2xlYXJfYml0KHFpZHgsIHBmLVxcdTAwM2VhZl94ZHBfemNfcWlkeCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfeHNrLmM6MTU0OlxcdHhza19wb29sX2RtYV91bm1hcChwb29sLCBETUFfQVRUUl9TS0lQX0NQVV9TWU5DIHwgRE1BX0FUVFJfV0VBS19PUkRFUklORyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfeHNrLmMtMTU1LVxcdC8qIFJlY29uZmlndXJlIFJTUyB0YWJsZSBhcyAncWlkeCcgbm93IG5lZWQgdG8gYmUgcGFydCBvZiBSU1Mgbm93ICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veHNrL3Bvb2wuYz0xNz1zdGF0aWMgdm9pZCBtbHg1ZV94c2tfdW5tYXBfcG9vbChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94c2svcG9vbC5jLTE5LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veHNrL3Bvb2wuYzoyMDpcXHRyZXR1cm4geHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94c2svcG9vbC5jLTIxLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF94c2suYz05OT1zdGF0aWMgdm9pZCBuZnBfbmV0X3hza19wb29sX3VubWFwKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF94c2suYy0xMDEte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF94c2suYzoxMDI6XFx0cmV0dXJuIHhza19wb29sX2RtYV91bm1hcChwb29sLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfeHNrLmMtMTAzLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY194ZHAuYz01OD1zdGF0aWMgaW50IHN0bW1hY194ZHBfZGlzYWJsZV9wb29sKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTE2IHF1ZXVlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3hkcC5jLTgwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY194ZHAuYzo4MTpcXHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwgU1RNTUFDX1JYX0RNQV9BVFRSKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfeGRwLmMtODItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguYz0xNTIwPXN0YXRpYyBpbnQgcHJ1ZXRoX3hza19wb29sX2Rpc2FibGUoc3RydWN0IHBydWV0aF9lbWFjICplbWFjLCB1MTYgcXVldWVfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguYy0xNTQ5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jOjE1NTA6XFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIFBSVUVUSF9SWF9ETUFfQVRUUik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmMtMTU1MS1cXHRlbWFjLVxcdTAwM2V4c2tfcWlkID0gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYz01ODg1PXN0YXRpYyBpbnQgdmlydG5ldF94c2tfcG9vbF9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy01OTU5LWVycl9ycTpcXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmM6NTk2MDpcXHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwgMCk7XFxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jLTU5NjEtZXJyX3hza19tYXA6XFxuLS1cXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmM9NTk2OT1zdGF0aWMgaW50IHZpcnRuZXRfeHNrX3Bvb2xfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcWlkKVxcbi0tXFxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jLTU5ODctXFxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jOjU5ODg6XFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIDApO1xcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy01OTg5LVxcbi0tXFxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2Lmg9ODY9c3RhdGljIGlubGluZSB2b2lkIHhza19wb29sX2ZpbGxfY2Ioc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxuLS1cXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaC05MS1cXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaDo5MjpzdGF0aWMgaW5saW5lIHZvaWQgeHNrX3Bvb2xfZG1hX3VubWFwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oLTkzLVxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgYXR0cnMpXFxuLS1cXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaD00MjI9c3RhdGljIGlubGluZSB2b2lkIHhza19wb29sX2ZpbGxfY2Ioc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxuLS1cXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaC00MjYtXFxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2Lmg6NDI3OnN0YXRpYyBpbmxpbmUgdm9pZCB4c2tfcG9vbF9kbWFfdW5tYXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2LmgtNDI4LVxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgYXR0cnMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjE4OjE3LjU5MTY1NDQzN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjcwNzUxMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFhEUF9TT0NLRVRTIERlcGVuZGVuY3kgZm9yIHhza19wb29sX2RtYV91bm1hcCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHhza19wb29sX2RtYV91bm1hcGAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyB0byBtZSB0aGF0IGl0J3MgcmVseWluZyBvbiBgWERQX1NPQ0tFVFNgIGJlaW5nIHByb3Blcmx5IGNvbmZpZ3VyZWQgZm9yIGl0IHRvIGJlIGZ1bGx5IGZ1bmN0aW9uYWwuIFRoaXMgaXMgYSBjb21tb24gc2l0dWF0aW9uLCByaWdodD8gRnVuY3Rpb25zIG9mdGVuIGRlcGVuZCBvbiBjZXJ0YWluIHVuZGVybHlpbmcgZmVhdHVyZSBmbGFncyBvciBjb25maWd1cmF0aW9ucyB0byB3b3JrIGFzIGludGVuZGVkLiBUaGUgdHJhY2UgSSBoYXZlIGluZGljYXRlcyB0aGUgbmVlZCBmb3IgYFhEUF9TT0NLRVRTYC5cblxuTm93LCB0aGUgdGhpbmcgdGhhdCBzdHJpa2VzIG1lIGlzIHdoZXJlIHRoaXMgYFhEUF9TT0NLRVRTYCBpcyBkZWZpbmVkLiBJdCdzIHR1Y2tlZCBhd2F5IGluIGBpbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaGAuIEdpdmVuIHRoYXQgdGhpcyBpcyBhIGNvcmUgcGllY2Ugb2YgWERQIHNvY2tldCBpbmZyYXN0cnVjdHVyZSwgaXQgbWFrZXMgc2Vuc2UgaXQncyBpbiBhIGhlYWRlciBzcGVjaWZpYyB0byB0aGF0LlxuXG5TbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2LmhgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBYRFBfU09DS0VUU2AgYWN0dWFsbHkgZW50YWlscywgd2hhdCBpdCdzIGVuYWJsaW5nLCBhbmQgZXhhY3RseSBob3cgaXQgcmVsYXRlcyB0byB0aGlzIGB4c2tfcG9vbF9kbWFfdW5tYXBgIGZ1bmN0aW9uLiBJIGhhdmUgYSBmZWVsaW5nIEknbGwgZmluZCB0aGUgYW5zd2VyIHRvIG15IG9yaWdpbmFsIHF1ZXN0aW9uIGFib3V0IHRoZSBmdW5jdGlvbidzIGZ1bGwgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhhdCBpbmNsdWRlIGZpbGUuIEl0J3MgYSBiaXQgb2YgZGV0ZWN0aXZlIHdvcmssIGJ1dCB0aGF0J3MgaG93IHlvdSBmaWd1cmUgb3V0IHRoZXNlIGRlcGVuZGVuY2llcyBpbiB0aGUga2VybmVsLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDQxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTg6MjIuMjYyNDA4NDE2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuICAgMjpcXHQvKiBJbnRlcmZhY2UgZm9yIGltcGxlbWVudGluZyBBRl9YRFAgemVyby1jb3B5IHN1cHBvcnQgaW4gZHJpdmVycy5cXG4gICAzOlxcdCAqIENvcHlyaWdodChjKSAyMDIwIEludGVsIENvcnBvcmF0aW9uLlxcbiAgIDQ6XFx0ICovXFxuICAgNTpcXHRcXG4gICA2OlxcdCNpZm5kZWYgX0xJTlVYX1hEUF9TT0NLX0RSVl9IXFxuICAgNzpcXHQjZGVmaW5lIF9MSU5VWF9YRFBfU09DS19EUlZfSFxcbiAgIDg6XFx0XFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3hkcF9zb2NrLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3hza19idWZmX3Bvb2wuaFxcdTAwM2VcXG4gIDExOlxcdFxcbiAgMTI6XFx0I2RlZmluZSBYRFBfVU1FTV9NSU5fQ0hVTktfU0hJRlQgMTFcXG4gIDEzOlxcdCNkZWZpbmUgWERQX1VNRU1fTUlOX0NIVU5LX1NJWkUgKDEgXFx1MDAzY1xcdTAwM2MgWERQX1VNRU1fTUlOX0NIVU5LX1NISUZUKVxcbiAgMTQ6XFx0XFxuICAxNTpcXHQjZGVmaW5lIE5FVERFVl9YRFBfQUNUX1hTS1xcdChORVRERVZfWERQX0FDVF9CQVNJQyB8XFx0XFx0XFxcXFxcbiAgMTY6XFx0XFx0XFx0XFx0XFx0IE5FVERFVl9YRFBfQUNUX1JFRElSRUNUIHxcXHRcXFxcXFxuICAxNzpcXHRcXHRcXHRcXHRcXHQgTkVUREVWX1hEUF9BQ1RfWFNLX1pFUk9DT1BZKVxcbiAgMTg6XFx0XFxuICAxOTpcXHRzdHJ1Y3QgeHNrX2NiX2Rlc2Mge1xcbiAgMjA6XFx0XFx0dm9pZCAqc3JjO1xcbiAgMjE6XFx0XFx0dTggb2ZmO1xcbiAgMjI6XFx0XFx0dTggYnl0ZXM7XFxuICAyMzpcXHR9O1xcbiAgMjQ6XFx0XFxuICAyNTpcXHQjaWZkZWYgQ09ORklHX1hEUF9TT0NLRVRTXFxuICAyNjpcXHRcXG4gIDI3OlxcdHZvaWQgeHNrX3R4X2NvbXBsZXRlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX2VudHJpZXMpO1xcbiAgMjg6XFx0Ym9vbCB4c2tfdHhfcGVla19kZXNjKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpO1xcbiAgMjk6XFx0dTMyIHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heCk7XFxuICAzMDpcXHR2b2lkIHhza190eF9yZWxlYXNlKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKTtcXG4gIDMxOlxcdHN0cnVjdCB4c2tfYnVmZl9wb29sICp4c2tfZ2V0X3Bvb2xfZnJvbV9xaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gIDMyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICB1MTYgcXVldWVfaWQpO1xcbiAgMzM6XFx0dm9pZCB4c2tfc2V0X3J4X25lZWRfd2FrZXVwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKTtcXG4gIDM0OlxcdHZvaWQgeHNrX3NldF90eF9uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCk7XFxuICAzNTpcXHR2b2lkIHhza19jbGVhcl9yeF9uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCk7XFxuICAzNjpcXHR2b2lkIHhza19jbGVhcl90eF9uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCk7XFxuICAzNzpcXHRib29sIHhza191c2VzX25lZWRfd2FrZXVwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKTtcXG4gIDM4OlxcdFxcbiAgMzk6XFx0c3RhdGljIGlubGluZSB1MzIgeHNrX3Bvb2xfZ2V0X2hlYWRyb29tKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxcbiAgNDA6XFx0e1xcbiAgNDE6XFx0XFx0cmV0dXJuIFhEUF9QQUNLRVRfSEVBRFJPT00gKyBwb29sLVxcdTAwM2VoZWFkcm9vbTtcXG4gIDQyOlxcdH1cXG4gIDQzOlxcdFxcbiAgNDQ6XFx0c3RhdGljIGlubGluZSB1MzIgeHNrX3Bvb2xfZ2V0X3RhaWxyb29tKGJvb2wgbWJ1ZilcXG4gIDQ1OlxcdHtcXG4gIDQ2OlxcdFxcdHJldHVybiBtYnVmID8gU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKSA6IDA7XFxuICA0NzpcXHR9XFxuICA0ODpcXHRcXG4gIDQ5OlxcdHN0YXRpYyBpbmxpbmUgdTMyIHhza19wb29sX2dldF9jaHVua19zaXplKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxcbiAgNTA6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxODoyMi4yNjI1NjYyMDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU1MDg3NzQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgR1ZFIFBhdGNoKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBhIHBhdGNoIHJlbGF0ZWQgdG8gR29vZ2xlJ3MgVmlydHVhbCBFdGhlcm5ldCAoR1ZFKSBkcml2ZXIsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIFhEUCBhbmQgQUZfWERQLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgQ09ORklHX1hEUF9TT0NLRVRTYCBpcyBpbmRlZWQgcmVxdWlyZWQsIHNvIEknbGwgYmUgYWRkaW5nIGBYRFBfU09DS0VUU2AgdG8gYEVuYWJsZUNvbmZpZ3NgLiBHaXZlbiB0aGUgY29udGV4dCwgaXQncyBjbGVhciB3ZSdyZSBkZWFsaW5nIHdpdGggR1ZFLCBzbyBuYXR1cmFsbHksIGBORVRfVkVORE9SX0dPT0dMRWAgYW5kIGBHVkVgIG5lZWQgdG8gYmUgZW5hYmxlZC4gQW5kIHNpbmNlIHdlJ3JlIHdvcmtpbmcgd2l0aCBYRFAsIGBCUEZfU1lTQ0FMTGAgaXMgcHJldHR5IG11Y2ggYSBnaXZlbi5cblxuTGV0J3MgcXVpY2tseSB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEdWRWAsIHNpbmNlIHRoaXMgaXMgYSBjcml0aWNhbCBkcml2ZXIuIEFoYSwgYFBDSV9NU0lgIGFuZCBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgIGFyZSByZXF1aXJlZC4gVGhhdCBjb25maXJtcyB0aGUgbmVjZXNzYXJ5IGZvdW5kYXRpb24uXG5cbk5vdywgZm9jdXNpbmcgb24gdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvbiBmdW5jdGlvbiBjYWxscy4gSSdtIHRha2luZyBhIGxvb2sgYXQgYGd2ZV9yeF9wb2xsX2Rxb2AgYWdhaW4sIGFuZCBhbSBjaGVja2luZyBmb3IgcmVsYXRlZCBtb2RpZmljYXRpb25zIHRvIG90aGVyIGZ1bmN0aW9ucy5cblxuYGd2ZV9yeF9kcW9gLCBgZ3ZlX3J4X3Jlc2V0X3JpbmdfZHFvYCwgYGd2ZV94c2tfcG9vbF9lbmFibGVgLCBgZ3ZlX3hza19wb29sX2Rpc2FibGVgLCBhbmQgYGd2ZV94c2tfd2FrZXVwYCBhcmUgYWxsIHN0YXRpYywgc28gdGhleSB3b24ndCBiZSBleHBvc2VkIGFzIHN5bWJvbHMuIEJ1dCB3YWl0LCBgZ3ZlX25hcGlfcG9sbF9kcW9gIGlzIGFsc28gbm9uLXN0YXRpYy4gQmVjYXVzZSBvZiB0aGlzLCBJIG5lZWQgdG8gYWRkIGJvdGggYGd2ZV9yeF9wb2xsX2Rxb2AgYW5kIGBndmVfbmFwaV9wb2xsX2Rxb2AgYXMgc3ltYm9scy5cblxuQWxyaWdodCwgbGV0J3MgcmVjYXAgdGhlIHBhdGNoJ3MgcmVhc29uaW5nLiBJdCdzIGFkZHJlc3NpbmcgYSBidWcgaW4gYGd2ZV9yeF9wb2xsX2Rxb2Agd2hlcmUgYHdvcmtfZG9uZWAgd2Fzbid0IGJlaW5nIGNvcnJlY3RseSBpbmNyZW1lbnRlZCB1bmRlciBhIHNwZWNpZmljIGNvbmRpdGlvbiBhbmQgaW5jb3JyZWN0IG9yIG1pc3NpbmcgY2FsbHMgdG8gYHhza19wb29sX2RtYV91bm1hcGAgaW4gYGd2ZV94c2tfcG9vbF9lbmFibGVgIGFuZCBgZ3ZlX3hza19wb29sX2Rpc2FibGVgLiBBbHNvLCB0aGVyZSdzIGEgbWVtb3J5IGxlYWsgZml4ZWQgaW4gYGd2ZV9yeF9yZXNldF9yaW5nX2Rxb2AgYW5kIGBndmVfcnhfZHFvYCBieSBmcmVlaW5nIGB4c2tfYnVmZmAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsbHkgcmVsZXZhbnQgYW5kIGRlbW9uc3RyYWJseSByZWFjaGFibGUgaW4gR0NFIGVudmlyb25tZW50cy4gQ29uc2lkZXJpbmcgdGhhdCB0aGVzZSBmaXhlcyBoYXZlIHJlYWwtd29ybGQgaW1wYWN0LCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkIGhlcmUuXG5cblNvLCBqdXN0IHRvIHN1bW1hcml6ZSBteSBmaW5kaW5ncywgSSdsbCBiZSBlbmFibGluZyBgTkVUX1ZFTkRPUl9HT09HTEVgLCBgR1ZFYCwgYFhEUF9TT0NLRVRTYCwgYW5kIGBCUEZfU1lTQ0FMTGAuXG5cblRoZSBrZXkgc3ltYm9scyBJJ20gZm9jdXNpbmcgb24gYXJlIGBndmVfcnhfcG9sbF9kcW9gIGFuZCBgZ3ZlX25hcGlfcG9sbF9kcW9gLiBJJ20gZG91YmxlLWNoZWNraW5nLCBqdXN0IHRvIGJlIHN1cmUsIHRoYXQgYGd2ZV9uYXBpX3BvbGxfZHFvYCBpcyBpbmRlZWQgbm9uLXN0YXRpYyBhbmQgZXhwb3NlZCBhcyBhIHN5bWJvbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzNDYsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxODoyOS44MTM0NTM2NzRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODk4NzIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgZ3ZlX25hcGlfcG9sbF9kcW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZHFvLmg9MTA3PWd2ZV9zZXRfaXRyX2NvYWxlc2NlX3VzZWNzX2RxbyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9kcW8uaC0xMTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZHFvLmg6MTE1OmludCBndmVfbmFwaV9wb2xsX2RxbyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Rxby5oLTExNi0jZW5kaWYgLyogX0dWRV9EUU9fSF8gKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0zNTM9aW50IGd2ZV9uYXBpX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTQxMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6NDExOmludCBndmVfbmFwaV9wb2xsX2RxbyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTQxMi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjE4OjI5LjkyMjQ1MDU4M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDY4OTIxMzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBOb24tU3RhdGljIEZ1bmN0aW9uIFVzYWdlKipcblxuQWxyaWdodCwgc28gYGd2ZV9uYXBpX3BvbGxfZHFvYCBpcyBkZWZpbml0aXZlbHkgbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4gTm93LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgcmVsYXRlZCB0byBpdHMgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgZHJpdmVyLiBNeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSB2ZXJpZnkgd2hldGhlciBgZ3ZlX3hkcF94bWl0X2Rxb2AgaXMgYWxzbyBkZWNsYXJlZCBhcyBub24tc3RhdGljLiBUaGlzIGlzIGtleSwgYmVjYXVzZSB0aGUgbm9uLXN0YXRpYyBuYXR1cmUgb2YgdGhlc2UgZnVuY3Rpb25zIHBsYXlzIGEgc2lnbmlmaWNhbnQgcm9sZSBpbiBob3cgdGhlIGRhdGEgcXVldWUgb3BlcmF0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSB3aWRlciBzeXN0ZW0uIFRoYXQgaW5mb3JtYXRpb24gd2lsbCBoZWxwIGRldGVybWluZSB3aGF0IGFyZWFzIG9mIHRoZSBjb2RlIGFyZSBhZmZlY3RlZCBieSB0aGlzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTg2NiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjE4OjMyLjk5MTM3NTM5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDE5ODc1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgZ3ZlX3hkcF94bWl0X2Rxb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oPTEyMjc9aW50IGd2ZV94ZHBfeG1pdF9ncWkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG4sIHN0cnVjdCB4ZHBfZnJhbWUgKipmcmFtZXMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMjI4LVxcdFxcdCAgICAgdTMyIGZsYWdzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oOjEyMjk6aW50IGd2ZV94ZHBfeG1pdF9kcW8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG4sIHN0cnVjdCB4ZHBfZnJhbWUgKipmcmFtZXMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMjMwLVxcdFxcdCAgICAgdTMyIGZsYWdzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jPTE1MzY9aW50IGd2ZV94ZHBfeG1pdF9vbmVfZHFvKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV90eF9yaW5nICp0eCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE1ODItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmM6MTU4MzppbnQgZ3ZlX3hkcF94bWl0X2RxbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbiwgc3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYy0xNTg0LVxcdFxcdCAgICAgdTMyIGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxODozMy4wNDU1ODA1NzVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3NTAzNDc3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQWRkaW5nIGBndmVfeGRwX3htaXRfZHFvYCBhbmQgQ2hlY2tpbmcgYGd2ZV94ZHBfcG9sbF9kcW9gKipcblxuUmlnaHQsIHNvIGBndmVfeGRwX3htaXRfZHFvYCBpcyBkZWZpbml0ZWx5IG5vdCBzdGF0aWMuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UsIGdpdmVuIGl0cyByb2xlLiBTaW5jZSBpdCBkaXJlY3RseSBkZWFscyB3aXRoIFhEUCB0cmFuc21pc3Npb24gd2l0aGluIHRoZSBEUU8gZm9ybWF0LCBhbmQgdGhhdCdzIHByZWNpc2VseSB3aGVyZSB3ZSd2ZSBiZWVuIG1ha2luZyBtb2RpZmljYXRpb25zIGluIGBndmVfcnhfZHFvLmNgLCBpdOKAmXMgY2xlYXIgSSBuZWVkIHRvIGluY2x1ZGUgaXQgaW4gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QuIEl04oCZcyBsb2dpY2FsbHkgY29ubmVjdGVkIGFuZCBjcnVjaWFsIGZvciB0aGUgYmlnZ2VyIHBpY3R1cmUuIFdlIGhhdmUgdG8gbWFrZSBzdXJlIHdlJ3JlIGtlZXBpbmcgdHJhY2sgb2YgZXZlcnl0aGluZyByZWxhdGVkIHRvIHRoaXMgRFFPIGZvcm1hdC5cblxuTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgc3RhdHVzIG9mIGBndmVfeGRwX3BvbGxfZHFvYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGF0IGZ1bmN0aW9uIGlzIHN0YXRpYyBvciBub3QuIFdlIGhhdmUgdG8gYmUgdGhvcm91Z2ggaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY0NzEsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxODozNi41MjA2MjYxODlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTIzODE2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJib29sIGd2ZV94ZHBfcG9sbF9kcW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZHFvLmg9NDA9Ym9vbCBndmVfdHhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBib29sIGRvX2NsZWFuKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9kcW8uaDo0MTpib29sIGd2ZV94ZHBfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9kcW8uaC00Mi1ib29sIGd2ZV94c2tfdHhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBpbnQgYnVkZ2V0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jPTE1MTA9Ym9vbCBndmVfeHNrX3R4X3BvbGxfZHFvKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpyeF9ibG9jaywgaW50IGJ1ZGdldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE1MjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmM6MTUyMzpib29sIGd2ZV94ZHBfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE1MjQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxODozNi43Mjk4Njg2NjdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc0NjkyNTA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBHVkUgWERQIFBvbGxpbmcqKlxuXG5Pa2F5LCBzbyBgZ3ZlX3hkcF9wb2xsX2Rxb2AgaXMgZGVmaW5pdGl2ZWx5ICpub3QqIGEgc3RhdGljIHN5bWJvbC4gVGhhdCdzIGEga2V5IHBvaW50LiBUaGlzIG1lYW5zLCB3aGVuIGNvbnNpZGVyaW5nIEZvY3VzU3ltYm9scywgd2UncmUgZGVmaW5pdGVseSBsb29raW5nIGF0OiBgZ3ZlX3J4X3BvbGxfZHFvYCwgYGd2ZV9uYXBpX3BvbGxfZHFvYCwgYW5kLCBjcnVjaWFsbHksIHRoZSBgZ3ZlX3hkcF9wb2xsX2Rxb2AgZnVuY3Rpb24gd2UgZXN0YWJsaXNoZWQgYXMgbm9uLXN0YXRpYy5cblxuTm93LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBORVRfVkVORE9SX0dPT0dMRWAsIGBHVkVgLCBgWERQX1NPQ0tFVFNgLCBhbmQgYEJQRl9TWVNDQUxMYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBCUEZfU1lTQ0FMTGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgY29udGV4dC4gVGhpcyByZXF1aXJlcyBhIGRlZXBlciBkaXZlIGludG8gaG93IHRoaXMgcmVsYXRlcyB0byBYRFAgYW5kIEdvb2dsZSdzIG5ldHdvcmtpbmcgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIEkgd2lsbCB2ZXJpZnkgdGhhdCB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgY29ycmVjdGx5IHN1cHBvcnRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTM0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjE4OjQwLjQ3Njc5Njg0NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3NzEwMDUzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTg6NDIuODUzOTAzOTk2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODIwMjY2MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKlZlcmlmeWluZyB0aGUgQ29uZmlndXJhdGlvbiBmb3IgZUJQRioqXG5cbkFscmlnaHQsIHRoYXQgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIGBCUEZfU1lTQ0FMTGAgc2VlbXMgc3BvdC1vbi4gV2UncmUgZGVmaW5pdGVseSBvbiB0aGUgcmlnaHQgdHJhY2sgdGhlcmUuIE5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgd2UndmUgZ290IHRoZSBuZWNlc3Nhcnkgc3VwcG9ydCBmb3IgYFhEUF9TT0NLRVRTYCBjb25maWd1cmVkIGNvcnJlY3RseS4gSXQncyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLCBhbmQgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGlzIGNvbXBvbmVudCBpcyBlbmFibGVkLCB0byBiZSBhYmxlIHRvIHByb2NlZWQgY29ycmVjdGx5LiBHb3R0YSBkb3VibGUtY2hlY2sgdGhvc2UgZnVuZGFtZW50YWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzU3MCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjE4OjQ1LjgzNTkzMjY4M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxMzQ2ODc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWERQX1NPQ0tFVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZHAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC94ZHAvS2NvbmZpZzoyOmNvbmZpZyBYRFBfU09DS0VUU1xcbm5ldC94ZHAvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlhEUCBzb2NrZXRzXFxcIlxcbi0tXFxubmV0L3hkcC9LY29uZmlnLTktXFxubmV0L3hkcC9LY29uZmlnOjEwOmNvbmZpZyBYRFBfU09DS0VUU19ESUFHXFxubmV0L3hkcC9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJYRFAgc29ja2V0czogbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjE4OjQ4LjM0OTQwNTg2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjQ2MTQzNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIHdlZWRzIG9mIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb246XG5cbioqWERQIGFuZCBNU0kgRGVwZW5kZW5jeSBDaGVjayoqXG5cblJpZ2h0LCBgWERQX1NPQ0tFVFNgIGlzIHRoZSByaWdodCBwYXRoIHRvIHB1cnN1ZSwgY29uZmlybWVkLiBOb3csIHRoZSBxdWVzdGlvbiBpcywgZG8gSSBuZWVkIHRvIGNvbmNlcm4gbXlzZWxmIHdpdGggYFBDSV9NU0lgPyBBaCwgeWVzLCBgR1ZFYCBpcyBhIGtleSBjb21wb25lbnQsIGFuZCBpdCdzIGRlcGVuZGVudCBvbiBgUENJX01TSWAuIFRpbWUgdG8gdmVyaWZ5IGlmIGBQQ0lfTVNJYCBpcyBhY3R1YWxseSBhIGNvbmZpZ3VyYWJsZSBvcHRpb24uIE5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBkZXBlbmRlbmN5IGlzIHNvbWV0aGluZyBJIGNhbiBjb250cm9sLCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuZXhwZWN0ZWQgYnVpbGQgY29uZmxpY3RzLiBMZXQncyBtYWtlIHN1cmUgaXQncyBhIGxlZ2l0aW1hdGUgY29uZmlnIHBhcmFtZXRlciBhbmQgaXNuJ3QgYmFrZWQgaW4sIHRoYXQgd2F5IEkgY2FuIHNldCBpdCBhcyBuZWVkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3ODc2LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTg6NTEuNTE0MDIzMDU4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU0NTQ5NDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQ0lfTVNJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3BjaS9LY29uZmlnPTQyPXNvdXJjZSBcXFwiZHJpdmVycy9wY2kvcGNpZS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvcGNpL0tjb25maWctNDMtXFxuZHJpdmVycy9wY2kvS2NvbmZpZzo0NDpjb25maWcgUENJX01TSVxcbmRyaXZlcnMvcGNpL0tjb25maWctNDUtXFx0Ym9vbCBcXFwiTWVzc2FnZSBTaWduYWxlZCBJbnRlcnJ1cHRzIChNU0kgYW5kIE1TSS1YKVxcXCJcXG4tLVxcbmRyaXZlcnMvcGNpL0tjb25maWctNTgtXFxuZHJpdmVycy9wY2kvS2NvbmZpZzo1OTpjb25maWcgUENJX01TSV9BUkNIX0ZBTExCQUNLU1xcbmRyaXZlcnMvcGNpL0tjb25maWctNjAtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxODo1My43Njg1NzgwMTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU0ODgzMDI1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ29uZmlybWluZyBDb25maWd1cmF0aW9uIGFuZCBFeHBsb3JpbmcgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgeWVwLCBsb29rcyBsaWtlIG15IGluaXRpYWwgYXNzZXNzbWVudCBvbiBgUENJX01TSWAgaXMgc3BvdC1vbi4gV2UncmUgZGVhbGluZyB3aXRoIE1lc3NhZ2UgU2lnbmFsZWQgSW50ZXJydXB0cywgYW5kIHRoYXQncyB0aGUgY29ycmVjdCBpbml0aWFsIHBhcmFtZXRlci4gTm93LCBiZWZvcmUgSSBtb3ZlIG9uLCBJIHdhbnQgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYFBUUF8xNTg4X0NMT0NLX09QVElPTkFMYCBpcyBhY3R1YWxseSBzZXQgYXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3IgaWYgdGhlcmUncyBzb21ldGhpbmcgZWxzZSBhdCBwbGF5LiBOZWVkIHRvIHJ1bGUgdGhhdCBvdXQgYXMgYSB2YXJpYWJsZSBiZWZvcmUgcHJvY2VlZGluZy4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MjY5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTg6NTguMzE3NDEyODM0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjYwMTg5MzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wdHAvS2NvbmZpZz04PWNvbmZpZyBQVFBfMTU4OF9DTE9DS1xcbi0tXFxuZHJpdmVycy9wdHAvS2NvbmZpZy0yOS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnOjMwOmNvbmZpZyBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvcHRwL0tjb25maWctMzEtXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTk6MDAuNTc3NjA4NzI3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5Mzk0NTQ1NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBMaW5lIG9mIFJlYXNvbmluZyoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYFBUUF8xNTg4X0NMT0NLX09QVElPTkFMYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbi4gTm93LCBsZXQncyBzZWUsIHRoZSBjdXJyZW50IGFjdGl2ZSBjb25maWd1cmF0aW9ucyBhcmU6IGBORVRfVkVORE9SX0dPT0dMRWAsIGBHVkVgLCBgWERQX1NPQ0tFVFNgLCBgQlBGX1NZU0NBTExgLCBgUENJX01TSWAsIGFuZCB0aGF0IGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgc2V0dGluZy5cblxuV2FpdCBhIHNlY29uZCwgcmlnaHQsIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgaXMgYSAqdHJpc3RhdGUqIHZhcmlhYmxlLiBJdCdzIGVpdGhlciBzZWxlY3RlZCBvciBpdCBoYXMgZGVwZW5kZW5jaWVzLiBBaCwgdGhlIGRlcGVuZGVuY2llcywgKml0IGRlcGVuZHMgb24gYFBUUF8xNTg4X0NMT0NLX09QVElPTkFMYCouXG5cbkxldCdzIGNoZWNrIHRoZSBkZWZpbml0aW9uIGFnYWluOiBpdCdzIGEgdHJpc3RhdGUsIGFuZCB0aGUgZGVmYXVsdCBpcyAneScgKmlmKiBgUFRQXzE1ODhfQ0xPQ0tgIGlzICduJywgb3RoZXJ3aXNlIHRoZSBkZWZhdWx0IGlzIGBQVFBfMTU4OF9DTE9DS2AuIFRoZXJlZm9yZSwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGBQVFBfMTU4OF9DTE9DS2AgaXMgJ3knLCAnbScsIG9yICduJywgYFBUUF8xNTg4X0NMT0NLX09QVElPTkFMYCBpcyBhdXRvbWF0aWNhbGx5IHNhdGlzZmllZC4gU28sIHdoaWxlIGl0IHdvdWxkbid0IGh1cnQgdG8gZXhwbGljaXRseSBlbmFibGUgaXQsIGl0J3Mgbm90IHN0cmljdGx5IG5lY2Vzc2FyeS4gSXQncyBhdXRvbWF0aWNhbGx5IHRha2VuIGNhcmUgb2YuXG5cbkFscmlnaHQsIHdoYXQncyBuZXh0PyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB3aGV0aGVyIGBQQUdFX1BPT0xgIGlzIGEgY29uZmlndXJhdGlvbiBpdGVtLCBzaG91bGRuJ3QgST9cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1NTUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTk6MDUuNTE3MDY2NDc5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA5MTY0NDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQUdFX1BPT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTQ4Nz1jb25maWcgTkVUX0RFVkxJTktcXG4tLVxcbm5ldC9LY29uZmlnLTQ5MC1cXG5uZXQvS2NvbmZpZzo0OTE6Y29uZmlnIFBBR0VfUE9PTFxcbm5ldC9LY29uZmlnLTQ5Mi1cXHRib29sXFxubmV0L0tjb25maWctNDkzLVxcbm5ldC9LY29uZmlnOjQ5NDpjb25maWcgUEFHRV9QT09MX1NUQVRTXFxubmV0L0tjb25maWctNDk1LVxcdGRlZmF1bHQgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxOTowNy43MjYyMzQ5OTdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAzNzUzNTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBHVkUgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IGRyaXZlciwgYEdWRWAuIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRyZXNzaW5nIHNvbWUgY3JpdGljYWwgaXNzdWVzIHdpdGggQUZfWERQIChYRFAgc29ja2V0cykgc3VwcG9ydC4gVGhlIGtleSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIG1lbW9yeSBsZWFrcyBhbmQgRE1BIHVubWFwcGluZywgd2hpY2ggYXJlIHByaW1lIHN1c3BlY3RzIGZvciByZWxpYWJpbGl0eSBwcm9ibGVtcyBpbiBhbnkgbmV0d29yayBkcml2ZXIsIGVzcGVjaWFsbHkgb25lIGxpa2UgYEdWRWAgdGhhdCBpcyB0aGUgcHJpbWFyeSBpbnRlcmZhY2UgaW4gR0NFIFZNcy4gSSBzZWUgZml4ZXMgaW4gYGd2ZV9yeF9yZXNldF9yaW5nX2Rxb2AgYW5kIGBndmVfcnhfZHFvYCB0aGF0IGFyZSBjbGVhbmluZyB1cCBgeHNrX2J1ZmZgIGNvcnJlY3RseSB0byBwcmV2ZW50IHRoZSBsZWFrLiBBbHNvLCB0aGUgYGd2ZV9yeF9wb2xsX2Rxb2AgZml4IGZvciBgd29ya19kb25lYCBpcyBnb29kIHRvIHNlZTsgdGhhdCBraW5kIG9mIHN1YnRsZSBvZmYtYnktb25lIGVycm9yIGNhbiBjYXVzZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBvciBldmVuIGludGVybWl0dGVudCBkYXRhIGxvc3MsIGVzcGVjaWFsbHkgdW5kZXIgaGVhdnkgbG9hZC4gVGhlIERNQSB1bm1hcHBpbmcgZml4ZXMgaW4gYGd2ZV94c2tfcG9vbF9lbmFibGVgIGFuZCBgZ3ZlX3hza19wb29sX2Rpc2FibGVgIGFyZSBjcnVjaWFsLCB0b287IGdldHRpbmcgdGhvc2UgcmlnaHQgaXMgZnVuZGFtZW50YWwgZm9yIGRhdGEgaW50ZWdyaXR5IGFuZCBoYXJkd2FyZSByZXNvdXJjZSBtYW5hZ2VtZW50LlxuXG5UaGUgZmFjdCB0aGF0IHRoaXMgdG91Y2hlcyB0aGUgbmV0d29yayBkYXRhcGF0aCBhbmQgQUZfWERQIHNvY2tldCBoYW5kbGluZyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIHRoYXQncyB3aGVyZSBzeXprYWxsZXIgaXMgbW9zdCBsaWtlbHkgdG8gZmluZCB0aGVzZSBidWdzLiBJIGFudGljaXBhdGUgdGhpcyBwYXRjaCB3aWxsIGltcHJvdmUgdGhlIHN0YWJpbGl0eSBvZiBHQ0UgVk1zLCBhbmQgaXQncyBuaWNlIHRoYXQgdGhleSBhcmUgYWRkcmVzc2luZyBBRl9YRFAuXG5cbkkgYWxzbyBub3RpY2UgdGhhdCBgUEFHRV9QT09MYCBpcyBzZWxlY3RlZCBieSBgR1ZFYCwgc28gSSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IG1hbnVhbGx5IGVuYWJsaW5nIGl0LiBNYWtlcyB0aGUgY29uZmlndXJhdGlvbiBzaW1wbGVyLlxuXG5JJ2xsIGZvcm11bGF0ZSB0aGUgZmluYWwgcmVzcG9uc2Ugbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTI2NiwiT3V0cHV0VG9rZW5zIjoyODYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTk6MTQuNzYzNzczNDI3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3Nzc2MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX0dPT0dMRVwiLFxuICAgIFwiR1ZFXCIsXG4gICAgXCJYRFBfU09DS0VUU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlBDSV9NU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJndmVfcnhfcG9sbF9kcW9cIixcbiAgICBcImd2ZV9uYXBpX3BvbGxfZHFvXCIsXG4gICAgXCJndmVfeGRwX3BvbGxfZHFvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChndmUpIGRyaXZlciB0byBmaXggYnVncyByZWxhdGVkIHRvIEFGX1hEUCAoWERQIHNvY2tldHMpIHN1cHBvcnQuIEl0IGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gYGd2ZV9yeF9yZXNldF9yaW5nX2Rxb2AgYW5kIGBndmVfcnhfZHFvYCBieSBwcm9wZXJseSBmcmVlaW5nIGB4c2tfYnVmZmAuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gYGd2ZV9yeF9wb2xsX2Rxb2Agd2hlcmUgYHdvcmtfZG9uZWAgd2FzIG5vdCBpbmNyZW1lbnRlZCBjb3JyZWN0bHksIGFuZCBmaXhlcyBETUEgdW5tYXBwaW5nIGluIGBndmVfeHNrX3Bvb2xfZW5hYmxlYCBhbmQgYGd2ZV94c2tfcG9vbF9kaXNhYmxlYC4gVGhlc2UgY2hhbmdlcyBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHRoZSBuZXR3b3JrIGRhdGFwYXRoIGFuZCBBRl9YRFAgc29ja2V0IGhhbmRsaW5nLiBUaGUgR1ZFIGRyaXZlciBpcyB0aGUgcHJpbWFyeSBuZXR3b3JrIGludGVyZmFjZSB1c2VkIGluIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKSBWTXMsIHdoZXJlIHN5emthbGxlciBydW5zLCBtYWtpbmcgdGhlc2UgY29kZSBwYXRocyBoaWdobHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1ZFTkRPUl9HT09HTEVcIixcbiAgICBcIkdWRVwiLFxuICAgIFwiWERQX1NPQ0tFVFNcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJQQ0lfTVNJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3ZlX3J4X3BvbGxfZHFvXCIsXG4gICAgXCJndmVfbmFwaV9wb2xsX2Rxb1wiLFxuICAgIFwiZ3ZlX3hkcF9wb2xsX2Rxb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHb29nbGUgVmlydHVhbCBFdGhlcm5ldCAoZ3ZlKSBkcml2ZXIgdG8gZml4IGJ1Z3MgcmVsYXRlZCB0byBBRl9YRFAgKFhEUCBzb2NrZXRzKSBzdXBwb3J0LiBJdCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIGBndmVfcnhfcmVzZXRfcmluZ19kcW9gIGFuZCBgZ3ZlX3J4X2Rxb2AgYnkgcHJvcGVybHkgZnJlZWluZyBgeHNrX2J1ZmZgLiBJdCBhbHNvIGZpeGVzIGEgYnVnIGluIGBndmVfcnhfcG9sbF9kcW9gIHdoZXJlIGB3b3JrX2RvbmVgIHdhcyBub3QgaW5jcmVtZW50ZWQgY29ycmVjdGx5LCBhbmQgZml4ZXMgRE1BIHVubWFwcGluZyBpbiBgZ3ZlX3hza19wb29sX2VuYWJsZWAgYW5kIGBndmVfeHNrX3Bvb2xfZGlzYWJsZWAuIFRoZXNlIGNoYW5nZXMgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdCBvbiB0aGUgbmV0d29yayBkYXRhcGF0aCBhbmQgQUZfWERQIHNvY2tldCBoYW5kbGluZy4gVGhlIEdWRSBkcml2ZXIgaXMgdGhlIHByaW1hcnkgbmV0d29yayBpbnRlcmZhY2UgdXNlZCBpbiBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgVk1zLCB3aGVyZSBzeXprYWxsZXIgcnVucywgbWFraW5nIHRoZXNlIGNvZGUgcGF0aHMgaGlnaGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxOToxNC45MDE1NTk1MjNaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNzk5NjUyMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxOToxNC45MDIzMzA1NTNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTI3OTE4OTIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChndmUpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZpeGluZyBYRFAgcG9vbCByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24gbG9naWMsIE5BUEkgbG9ja2luZyAodXNpbmcgbmFwaV9kaXNhYmxlX2xvY2tlZC9uYXBpX2VuYWJsZV9sb2NrZWQpLCBtZW1vcnkgbGVha3MgKGZyZWVpbmcgeHNrX2J1ZmYpLCBhbmQgTkFQSSBidWRnZXQgYWNjb3VudGluZyBpbiBndmVfcnhfcG9sbF9kcW8uIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGV4cG9zZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2UuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSBkZWFkbG9ja3MsIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBLTUVNTEVBSy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmZDg4NDFmYTI2ODM0YTkxNGNmYTc4Y2EyNGE3NjkyM2I4YWJlNjBhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMDA6MTc6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmNcbmluZGV4IGU0ZDc4YWU1MmRhZmUuLmNjYWY1Zjg2YTFlNmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uY1xuQEAgLTE2NTQsMjAgKzE2NTQsMTggQEAgc3RhdGljIGludCBndmVfeHNrX3Bvb2xfZW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAoIXByaXYtXHUwMDNleGRwX3Byb2cgfHwgIW5ldGlmX3J1bm5pbmcoZGV2KSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRlcnIgPSBndmVfcmVnX3hza19wb29sKHByaXYsIGRldiwgcG9vbCwgcWlkKTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gZXJyX3hza19wb29sX2RtYV9tYXBwZWQ7XG4tXG4tXHQvKiBTdG9wIGFuZCBzdGFydCBSREEgcXVldWVzIHRvIHJlcG9zdCBidWZmZXJzLiAqL1xuLVx0aWYgKCFndmVfaXNfcXBsKHByaXYpKSB7XG4rXHRpZiAoZ3ZlX2lzX3FwbChwcml2KSkge1xuK1x0XHRlcnIgPSBndmVfcmVnX3hza19wb29sKHByaXYsIGRldiwgcG9vbCwgcWlkKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGVycl94c2tfcG9vbF9kbWFfbWFwcGVkO1xuK1x0fSBlbHNlIHtcbitcdFx0LyogU3RvcCBhbmQgc3RhcnQgUkRBIHF1ZXVlcyB0byByZXBvc3QgYnVmZmVycy4gKi9cbiBcdFx0ZXJyID0gZ3ZlX2NvbmZpZ3VyZV9yaW5nc194ZHAocHJpdiwgcHJpdi1cdTAwM2VyeF9jZmcubnVtX3F1ZXVlcyk7XG4gXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBlcnJfeHNrX3Bvb2xfcmVnaXN0ZXJlZDtcbitcdFx0XHRnb3RvIGVycl94c2tfcG9vbF9kbWFfbWFwcGVkO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4gXG4tZXJyX3hza19wb29sX3JlZ2lzdGVyZWQ6XG4tXHRndmVfdW5yZWdfeHNrX3Bvb2wocHJpdiwgcWlkKTtcbiBlcnJfeHNrX3Bvb2xfZG1hX21hcHBlZDpcbiBcdGNsZWFyX2JpdChxaWQsIHByaXYtXHUwMDNleHNrX3Bvb2xzKTtcbiBcdHhza19wb29sX2RtYV91bm1hcChwb29sLFxuQEAgLTE2ODMsNDIgKzE2ODEsMzggQEAgc3RhdGljIGludCBndmVfeHNrX3Bvb2xfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpX3J4O1xuIFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpX3R4O1xuIFx0c3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2w7XG4rXHRpbnQgZXJyID0gMDtcbiBcdGludCB0eF9xaWQ7XG4tXHRpbnQgZXJyO1xuIFxuLVx0aWYgKHFpZCBcdTAwM2U9IHByaXYtXHUwMDNlcnhfY2ZnLm51bV9xdWV1ZXMpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKHFpZCBcdTAwM2U9IHByaXYtXHUwMDNlcnhfY2ZnLm51bV9xdWV1ZXMpIHtcbitcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0Z290byB1bm1hcF9hbmRfcmV0dXJuO1xuK1x0fVxuIFxuIFx0Y2xlYXJfYml0KHFpZCwgcHJpdi1cdTAwM2V4c2tfcG9vbHMpO1xuIFxuLVx0cG9vbCA9IHhza19nZXRfcG9vbF9mcm9tX3FpZChkZXYsIHFpZCk7XG4tXHRpZiAocG9vbClcbi1cdFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsXG4tXHRcdFx0XHQgICBETUFfQVRUUl9TS0lQX0NQVV9TWU5DIHxcbi1cdFx0XHRcdCAgIERNQV9BVFRSX1dFQUtfT1JERVJJTkcpO1xuLVxuIFx0aWYgKCFuZXRpZl9ydW5uaW5nKGRldikgfHwgIXByaXYtXHUwMDNldHhfY2ZnLm51bV94ZHBfcXVldWVzKVxuLVx0XHRyZXR1cm4gMDtcbitcdFx0Z290byB1bm1hcF9hbmRfcmV0dXJuO1xuIFxuIFx0LyogU3RvcCBhbmQgc3RhcnQgUkRBIHF1ZXVlcyB0byByZXBvc3QgYnVmZmVycy4gKi9cbiBcdGlmICghZ3ZlX2lzX3FwbChwcml2KSBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2V4ZHBfcHJvZykge1xuIFx0XHRlcnIgPSBndmVfY29uZmlndXJlX3JpbmdzX3hkcChwcml2LCBwcml2LVx1MDAzZXJ4X2NmZy5udW1fcXVldWVzKTtcbiBcdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRcdGdvdG8gdW5tYXBfYW5kX3JldHVybjtcbiBcdH1cbiBcbiBcdG5hcGlfcnggPSBcdTAwMjZwcml2LVx1MDAzZW50ZnlfYmxvY2tzW3ByaXYtXHUwMDNlcnhbcWlkXS5udGZ5X2lkXS5uYXBpO1xuLVx0bmFwaV9kaXNhYmxlKG5hcGlfcngpOyAvKiBtYWtlIHN1cmUgY3VycmVudCByeCBwb2xsIGlzIGRvbmUgKi9cbitcdG5hcGlfZGlzYWJsZV9sb2NrZWQobmFwaV9yeCk7IC8qIG1ha2Ugc3VyZSBjdXJyZW50IHJ4IHBvbGwgaXMgZG9uZSAqL1xuIFxuIFx0dHhfcWlkID0gZ3ZlX3hkcF90eF9xdWV1ZV9pZChwcml2LCBxaWQpO1xuIFx0bmFwaV90eCA9IFx1MDAyNnByaXYtXHUwMDNlbnRmeV9ibG9ja3NbcHJpdi1cdTAwM2V0eFt0eF9xaWRdLm50ZnlfaWRdLm5hcGk7XG4tXHRuYXBpX2Rpc2FibGUobmFwaV90eCk7IC8qIG1ha2Ugc3VyZSBjdXJyZW50IHR4IHBvbGwgaXMgZG9uZSAqL1xuK1x0bmFwaV9kaXNhYmxlX2xvY2tlZChuYXBpX3R4KTsgLyogbWFrZSBzdXJlIGN1cnJlbnQgdHggcG9sbCBpcyBkb25lICovXG4gXG4gXHRndmVfdW5yZWdfeHNrX3Bvb2wocHJpdiwgcWlkKTtcbiBcdHNtcF9tYigpOyAvKiBNYWtlIHN1cmUgaXQgaXMgdmlzaWJsZSB0byB0aGUgd29ya2VycyBvbiBkYXRhcGF0aCAqL1xuIFxuLVx0bmFwaV9lbmFibGUobmFwaV9yeCk7XG4tXHRuYXBpX2VuYWJsZShuYXBpX3R4KTtcbitcdG5hcGlfZW5hYmxlX2xvY2tlZChuYXBpX3J4KTtcbitcdG5hcGlfZW5hYmxlX2xvY2tlZChuYXBpX3R4KTtcbiBcdGlmIChndmVfaXNfZ3FpKHByaXYpKSB7XG4gXHRcdGlmIChndmVfcnhfd29ya19wZW5kaW5nKFx1MDAyNnByaXYtXHUwMDNlcnhbcWlkXSkpXG4gXHRcdFx0bmFwaV9zY2hlZHVsZShuYXBpX3J4KTtcbkBAIC0xNzI3LDcgKzE3MjEsMTQgQEAgc3RhdGljIGludCBndmVfeHNrX3Bvb2xfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdG5hcGlfc2NoZWR1bGUobmFwaV90eCk7XG4gXHR9XG4gXG4tXHRyZXR1cm4gMDtcbit1bm1hcF9hbmRfcmV0dXJuOlxuK1x0cG9vbCA9IHhza19nZXRfcG9vbF9mcm9tX3FpZChkZXYsIHFpZCk7XG4rXHRpZiAocG9vbClcbitcdFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsXG4rXHRcdFx0XHQgICBETUFfQVRUUl9TS0lQX0NQVV9TWU5DIHxcbitcdFx0XHRcdCAgIERNQV9BVFRSX1dFQUtfT1JERVJJTkcpO1xuK1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIGludCBndmVfeHNrX3dha2V1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcXVldWVfaWQsIHUzMiBmbGFncylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jXG5pbmRleCAwZWNlMmY2ZmRmZmI0Li44MTFkYjQyZDA1YzY3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jXG5AQCAtMTEzLDYgKzExMywxMiBAQCBzdGF0aWMgdm9pZCBndmVfcnhfcmVzZXRfcmluZ19kcW8oc3RydWN0IGd2ZV9wcml2ICpwcml2LCBpbnQgaWR4KVxuIFx0XHRcdFx0Z3ZlX2ZyZWVfdG9fcGFnZV9wb29sKHJ4LCBicywgZmFsc2UpO1xuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdGd2ZV9mcmVlX3FwbF9wYWdlX2Rxbyhicyk7XG4rXG4rXHRcdFx0aWYgKGd2ZV9idWZfc3RhdGVfaXNfYWxsb2NhdGVkKHJ4LCBicykgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIGJzLVx1MDAzZXhza19idWZmKSB7XG4rXHRcdFx0XHR4c2tfYnVmZl9mcmVlKGJzLVx1MDAzZXhza19idWZmKTtcbitcdFx0XHRcdGJzLVx1MDAzZXhza19idWZmID0gTlVMTDtcbitcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC04MzksNyArODQ1LDEyIEBAIHN0YXRpYyBpbnQgZ3ZlX3J4X2RxbyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBndmVfcnhfcmluZyAqcngsXG4gXHR9XG4gXG4gXHRpZiAodW5saWtlbHkoY29tcGxfZGVzYy1cdTAwM2VyeF9lcnJvcikpIHtcbi1cdFx0Z3ZlX2ZyZWVfYnVmZmVyKHJ4LCBidWZfc3RhdGUpO1xuK1x0XHRpZiAoYnVmX3N0YXRlLVx1MDAzZXhza19idWZmKSB7XG4rXHRcdFx0eHNrX2J1ZmZfZnJlZShidWZfc3RhdGUtXHUwMDNleHNrX2J1ZmYpO1xuK1x0XHRcdGd2ZV9mcmVlX2J1Zl9zdGF0ZShyeCwgYnVmX3N0YXRlKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRndmVfZnJlZV9idWZmZXIocngsIGJ1Zl9zdGF0ZSk7XG4rXHRcdH1cbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5AQCAtMTE0NSwxMyArMTE1NiwxNCBAQCBpbnQgZ3ZlX3J4X3BvbGxfZHFvKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpibG9jaywgaW50IGJ1ZGdldClcbiBcdFx0LyogRnJlZSBydW5uaW5nIGNvdW50ZXIgb2YgY29tcGxldGVkIGRlc2NyaXB0b3JzICovXG4gXHRcdHJ4LVx1MDAzZWNudCsrO1xuIFxuLVx0XHRpZiAoIXJ4LVx1MDAzZWN0eC5za2JfaGVhZClcbi1cdFx0XHRjb250aW51ZTtcbi1cbiBcdFx0aWYgKCFjb21wbF9kZXNjLVx1MDAzZWVuZF9vZl9wYWNrZXQpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHdvcmtfZG9uZSsrO1xuK1xuK1x0XHRpZiAoIXJ4LVx1MDAzZWN0eC5za2JfaGVhZClcbitcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0cGt0X2J5dGVzID0gcngtXHUwMDNlY3R4LnNrYl9oZWFkLVx1MDAzZWxlbjtcbiBcdFx0LyogVGhlIGV0aGVybmV0IGhlYWRlciAoZmlyc3QgRVRIX0hMRU4gYnl0ZXMpIGlzIHNuaXBwZWQgb2ZmXG4gXHRcdCAqIGJ5IGV0aF90eXBlX3RyYW5zLlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTk6MTQuOTAyMzMxODUzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyNzkxNjA2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IERyaXZlcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBmb3IgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChndmUpIGRyaXZlci4gSSBzZWUgaXQncyB0b3VjaGluZyBgZ3ZlX21haW4uY2AgYW5kIGBndmVfcnhfZHFvLmNgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgZm9jdXNlZCBvbiBwb3RlbnRpYWwgcmlza3MsIHBhcnRpY3VsYXJseSB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMsIGFzIHRoYXQncyBhbHdheXMgYSBjb25jZXJuLlxuXG5Mb29raW5nIGF0IGBndmVfbWFpbi5jYCwgdGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCB0aGUgWERQIHNvY2tldCAoWFNLKSBwb29sIG1hbmFnZW1lbnQ6IGBndmVfeHNrX3Bvb2xfZW5hYmxlYCBpcyBnZXR0aW5nIHVwZGF0ZWQgaW4gaG93IGl0IGhhbmRsZXMgcmVnaXN0ZXJpbmcgYW5kIGNvbmZpZ3VyaW5nIHRoZSBYU0sgcG9vbCwgYW5kIGBndmVfeHNrX3Bvb2xfZGlzYWJsZWAgbm93IHVzZXMgdGhlIGxvY2tlZCB2ZXJzaW9ucyBvZiBgbmFwaV9kaXNhYmxlYCBhbmQgYG5hcGlfZW5hYmxlYCwgYW5kIG1vdmVzIGB4c2tfcG9vbF9kbWFfdW5tYXBgIHRvIHRoZSB2ZXJ5IGVuZCBvZiB0aGUgZnVuY3Rpb24uIFRoaXMgTkFQSSBsb2NraW5nIGNoYW5nZSBpcyBjcml0aWNhbCBmb3IgY29uY3VycmVuY3ksIHByZXZlbnRpbmcgZGVhZGxvY2tzIG9yIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGhlIGRpc2FibGUgcHJvY2Vzcy4gTW92aW5nIGB4c2tfcG9vbF9kbWFfdW5tYXBgIHRvIHRoZSBlbmQgbWFrZXMgc2Vuc2UgdG8gcmVkdWNlIGNoYW5jZXMgb2YgYWNjZXNzaW5nIHVubWFwcGVkIG1lbW9yeS5cblxuVGhlbiwgaW4gYGd2ZV9yeF9kcW8uY2AsIHRoaW5ncyBhcmUgbW9yZSBpbnRlcmVzdGluZy4gSSBzZWUgYSBjb3VwbGUgb2YgbWVtb3J5IGxlYWsgZml4ZXM6IGxvZ2ljIGlzIGJlaW5nIGFkZGVkIGluIGBndmVfcnhfcmVzZXRfcmluZ19kcW9gIHRvIGZyZWUgYHhza19idWZmYCBpZiBpdCdzIGFsbG9jYXRlZCwgd2hpY2ggaXMgZ29vZC4gQWxzbywgaW4gYGd2ZV9yeF9kcW9gLCB0aGVyZSdzIGEgbmV3IGNoZWNrIHRvIGZyZWUgdGhlIGB4c2tfYnVmZmAgaWYgYGNvbXBsX2Rlc2MtXHUwMDNlcnhfZXJyb3JgLiBQcmV2ZW50aW5nIHRoZXNlIG1lbW9yeSBsZWFrcyBpcyB2aXRhbCwgb2YgY291cnNlLCBidXQgaXQgZG9lc24ndCBzZWVtIHRvIGludHJvZHVjZSBhbnkgbmV3IGV4cG9zdXJlIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGUgYGd2ZV9yeF9wb2xsX2Rxb2AgZnVuY3Rpb24gaGFzIGEgcmVvcmRlcmluZyBvZiB0aGUgY2hlY2tzOiB0aGUgb3JkZXIgb2YgYCFyeC1cdTAwM2VjdHguc2tiX2hlYWRgIGFuZCBgIWNvbXBsX2Rlc2MtXHUwMDNlZW5kX29mX3BhY2tldGAgY2hlY2tzIGhhdmUgYmVlbiBzd2FwcGVkLiBMZXQncyBzZWUuLi4gdGhlIG9yaWdpbmFsIGNvZGUgaGFkOlxuXG5gYGBjXG5cdFx0aWYgKCFyeC1cdTAwM2VjdHguc2tiX2hlYWQpXG5cdFx0XHRjb250aW51ZTtcblxuXHRcdGlmICghY29tcGxfZGVzYy1cdTAwM2VlbmRfb2ZfcGFja2V0KVxuXHRcdFx0Y29udGludWU7XG5gYGBcblxuQW5kIG5vdyBpdCdzOlxuXG5gYGBjXG5cdFx0aWYgKCFjb21wbF9kZXNjLVx1MDAzZWVuZF9vZl9wYWNrZXQpXG5cdFx0XHRjb250aW51ZTtcblxuXHRcdHdvcmtfZG9uZSsrO1xuXG5cdFx0aWYgKCFyeC1cdTAwM2VjdHguc2tiX2hlYWQpXG5cdFx0XHRjb250aW51ZTtcbmBgYFxuXG5BaCwgSSBzZWUuIFdpdGggdGhlIG9yaWdpbmFsIGxvZ2ljLCBpdCBza2lwcyB0aGUgcGFja2V0IGlmIGl0J3Mgbm90IHRoZSBmaXJzdCBwYXJ0IG9mIGEgcGFja2V0LiBCdXQgaWYgYGNvbXBsX2Rlc2MtXHUwMDNlZW5kX29mX3BhY2tldGAgaXMgdHJ1ZSwgdGhlIGB3b3JrX2RvbmVgIHdpbGwgYmUgaW5jcmVtZW50ZWQuIFRoZSBjaGFuZ2UgaGFzIG1vdmVkIHRoZSBjaGVjayB0byBlbnN1cmUgdGhhdCBwYWNrZXRzIHdpdGhvdXQgYSBoZWFkZXIgKnN0aWxsKiBjb3VudCBhcyB3b3JrIGRvbmUuIFRoYXQncyBsaWtlbHkgcmVsYXRlZCB0byBOQVBJIGJ1ZGdldCBhY2NvdW50aW5nLlxuXG5TbywgdGFraW5nIGEgc3RlcCBiYWNrLCB0aGlzIHBhdGNoIHNlZW1zIHByZXR0eSBjbGVhbi4gV2UncmUgbG9va2luZyBhdCBYRFAgcG9vbCBtYW5hZ2VtZW50LCBOQVBJIGxvY2tpbmcgKGVzc2VudGlhbCksIG1lbW9yeSBsZWFrIGZpeGVzLCBhbmQgYSBOQVBJIGJ1ZGdldCByZWxhdGVkIGNvbnRyb2wgZmxvdyBjaGFuZ2UuIEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgaGVyZS4gVGhlIHByaW1hcnkgcmlza3MgYXBwZWFyIHRvIGJlIHRob3NlIHJlbGF0ZWQgdG8gbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBvciBkZWFkbG9ja3MsIGFuZCB0aGF0IGNhbiBiZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIEtNRU1MRUFLLiBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS4gQWxsIHRoaW5ncyBjb25zaWRlcmVkLCBJIGRvbid0IHNlZSBhbnkgaW1tZWRpYXRlIHJlZCBmbGFncy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg1MCwiT3V0cHV0VG9rZW5zIjoxNjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxOToyNC4xODE0OTYyOTRaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTMyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHb29nbGUgVmlydHVhbCBFdGhlcm5ldCAoZ3ZlKSBkcml2ZXIsIHNwZWNpZmljYWxseSBmaXhpbmcgWERQIHBvb2wgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIGxvZ2ljLCBOQVBJIGxvY2tpbmcgKHVzaW5nIG5hcGlfZGlzYWJsZV9sb2NrZWQvbmFwaV9lbmFibGVfbG9ja2VkKSwgbWVtb3J5IGxlYWtzIChmcmVlaW5nIHhza19idWZmKSwgYW5kIE5BUEkgYnVkZ2V0IGFjY291bnRpbmcgaW4gZ3ZlX3J4X3BvbGxfZHFvLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IHN0cnVjdHVyZSBwYWRkaW5nLCBvciBleHBvc2UgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgZGVhZGxvY2tzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgS01FTUxFQUsuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChndmUpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZpeGluZyBYRFAgcG9vbCByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24gbG9naWMsIE5BUEkgbG9ja2luZyAodXNpbmcgbmFwaV9kaXNhYmxlX2xvY2tlZC9uYXBpX2VuYWJsZV9sb2NrZWQpLCBtZW1vcnkgbGVha3MgKGZyZWVpbmcgeHNrX2J1ZmYpLCBhbmQgTkFQSSBidWRnZXQgYWNjb3VudGluZyBpbiBndmVfcnhfcG9sbF9kcW8uIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGV4cG9zZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2UuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSBkZWFkbG9ja3MsIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBLTUVNTEVBSy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow4vjdd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-15 00:00:01 +0000 UTC FinishedAt: 2026-08-15 00:19:25 +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": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_GOOGLE", "GVE", "XDP_SOCKETS", "BPF_SYSCALL", "PCI_MSI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_GOOGLE", "GVE", "XDP_SOCKETS", "BPF_SYSCALL", "PCI_MSI" ], "series_id": "34ad716b-166f-40c6-80af-a0af3d4fe96f" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "gve_rx_poll_dqo", "gve_napi_poll_dqo", "gve_xdp_poll_dqo" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfR09PR0xFJiMzNDssCiAgICAmIzM0O0dWRSYjMzQ7LAogICAgJiMzNDtYRFBfU09DS0VUUyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtQQ0lfTVNJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z3ZlX3J4X3BvbGxfZHFvJiMzNDssCiAgICAmIzM0O2d2ZV9uYXBpX3BvbGxfZHFvJiMzNDssCiAgICAmIzM0O2d2ZV94ZHBfcG9sbF9kcW8mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKGd2ZSkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZml4aW5nIFhEUCBwb29sIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiBsb2dpYywgTkFQSSBsb2NraW5nICh1c2luZyBuYXBpX2Rpc2FibGVfbG9ja2VkL25hcGlfZW5hYmxlX2xvY2tlZCksIG1lbW9yeSBsZWFrcyAoZnJlZWluZyB4c2tfYnVmZiksIGFuZCBOQVBJIGJ1ZGdldCBhY2NvdW50aW5nIGluIGd2ZV9yeF9wb2xsX2Rxby4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZXhwb3NlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGRlYWRsb2NrcywgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBMT0NLREVQLCBLQVNBTiwgYW5kIEtNRU1MRUFLLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKGd2ZSkgZHJpdmVyIHRvIGZpeCBidWdzIHJlbGF0ZWQgdG8gQUZfWERQIChYRFAgc29ja2V0cykgc3VwcG9ydC4gSXQgZml4ZXMgYSBtZW1vcnkgbGVhayBpbiBgZ3ZlX3J4X3Jlc2V0X3JpbmdfZHFvYCBhbmQgYGd2ZV9yeF9kcW9gIGJ5IHByb3Blcmx5IGZyZWVpbmcgYHhza19idWZmYC4gSXQgYWxzbyBmaXhlcyBhIGJ1ZyBpbiBgZ3ZlX3J4X3BvbGxfZHFvYCB3aGVyZSBgd29ya19kb25lYCB3YXMgbm90IGluY3JlbWVudGVkIGNvcnJlY3RseSwgYW5kIGZpeGVzIERNQSB1bm1hcHBpbmcgaW4gYGd2ZV94c2tfcG9vbF9lbmFibGVgIGFuZCBgZ3ZlX3hza19wb29sX2Rpc2FibGVgLiBUaGVzZSBjaGFuZ2VzIGhhdmUgZnVuY3Rpb25hbCBpbXBhY3Qgb24gdGhlIG5ldHdvcmsgZGF0YXBhdGggYW5kIEFGX1hEUCBzb2NrZXQgaGFuZGxpbmcuIFRoZSBHVkUgZHJpdmVyIGlzIHRoZSBwcmltYXJ5IG5ldHdvcmsgaW50ZXJmYWNlIHVzZWQgaW4gR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpIFZNcywgd2hlcmUgc3l6a2FsbGVyIHJ1bnMsIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIGhpZ2hseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGZkODg0MWZhMjY4MzRhOTE0Y2ZhNzhjYTI0YTc2OTIzYjhhYmU2MGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxNSAwMDoxNzozNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmNcbmluZGV4IGU0ZDc4YWU1MmRhZmUuLmNjYWY1Zjg2YTFlNmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uY1xuQEAgLTE2NTQsMjAgJiM0MzsxNjU0LDE4IEBAIHN0YXRpYyBpbnQgZ3ZlX3hza19wb29sX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKCFwcml2LVx1MDAzZXhkcF9wcm9nIHx8ICFuZXRpZl9ydW5uaW5nKGRldikpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0ZXJyID0gZ3ZlX3JlZ194c2tfcG9vbChwcml2LCBkZXYsIHBvb2wsIHFpZCk7XG4tXHRpZiAoZXJyKVxuLVx0XHRnb3RvIGVycl94c2tfcG9vbF9kbWFfbWFwcGVkO1xuLVxuLVx0LyogU3RvcCBhbmQgc3RhcnQgUkRBIHF1ZXVlcyB0byByZXBvc3QgYnVmZmVycy4gKi9cbi1cdGlmICghZ3ZlX2lzX3FwbChwcml2KSkge1xuJiM0MztcdGlmIChndmVfaXNfcXBsKHByaXYpKSB7XG4mIzQzO1x0XHRlcnIgPSBndmVfcmVnX3hza19wb29sKHByaXYsIGRldiwgcG9vbCwgcWlkKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3hza19wb29sX2RtYV9tYXBwZWQ7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIFN0b3AgYW5kIHN0YXJ0IFJEQSBxdWV1ZXMgdG8gcmVwb3N0IGJ1ZmZlcnMuICovXG4gXHRcdGVyciA9IGd2ZV9jb25maWd1cmVfcmluZ3NfeGRwKHByaXYsIHByaXYtXHUwMDNlcnhfY2ZnLm51bV9xdWV1ZXMpO1xuIFx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXJyX3hza19wb29sX3JlZ2lzdGVyZWQ7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX3hza19wb29sX2RtYV9tYXBwZWQ7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbiBcbi1lcnJfeHNrX3Bvb2xfcmVnaXN0ZXJlZDpcbi1cdGd2ZV91bnJlZ194c2tfcG9vbChwcml2LCBxaWQpO1xuIGVycl94c2tfcG9vbF9kbWFfbWFwcGVkOlxuIFx0Y2xlYXJfYml0KHFpZCwgcHJpdi1cdTAwM2V4c2tfcG9vbHMpO1xuIFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsXG5AQCAtMTY4Myw0MiAmIzQzOzE2ODEsMzggQEAgc3RhdGljIGludCBndmVfeHNrX3Bvb2xfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpX3J4O1xuIFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpX3R4O1xuIFx0c3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2w7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4gXHRpbnQgdHhfcWlkO1xuLVx0aW50IGVycjtcbiBcbi1cdGlmIChxaWQgXHUwMDNlPSBwcml2LVx1MDAzZXJ4X2NmZy5udW1fcXVldWVzKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAocWlkIFx1MDAzZT0gcHJpdi1cdTAwM2VyeF9jZmcubnVtX3F1ZXVlcykge1xuJiM0MztcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gdW5tYXBfYW5kX3JldHVybjtcbiYjNDM7XHR9XG4gXG4gXHRjbGVhcl9iaXQocWlkLCBwcml2LVx1MDAzZXhza19wb29scyk7XG4gXG4tXHRwb29sID0geHNrX2dldF9wb29sX2Zyb21fcWlkKGRldiwgcWlkKTtcbi1cdGlmIChwb29sKVxuLVx0XHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCxcbi1cdFx0XHRcdCAgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMgfFxuLVx0XHRcdFx0ICAgRE1BX0FUVFJfV0VBS19PUkRFUklORyk7XG4tXG4gXHRpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSB8fCAhcHJpdi1cdTAwM2V0eF9jZmcubnVtX3hkcF9xdWV1ZXMpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdFx0Z290byB1bm1hcF9hbmRfcmV0dXJuO1xuIFxuIFx0LyogU3RvcCBhbmQgc3RhcnQgUkRBIHF1ZXVlcyB0byByZXBvc3QgYnVmZmVycy4gKi9cbiBcdGlmICghZ3ZlX2lzX3FwbChwcml2KSBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2V4ZHBfcHJvZykge1xuIFx0XHRlcnIgPSBndmVfY29uZmlndXJlX3JpbmdzX3hkcChwcml2LCBwcml2LVx1MDAzZXJ4X2NmZy5udW1fcXVldWVzKTtcbiBcdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0XHRnb3RvIHVubWFwX2FuZF9yZXR1cm47XG4gXHR9XG4gXG4gXHRuYXBpX3J4ID0gXHUwMDI2cHJpdi1cdTAwM2VudGZ5X2Jsb2Nrc1twcml2LVx1MDAzZXJ4W3FpZF0ubnRmeV9pZF0ubmFwaTtcbi1cdG5hcGlfZGlzYWJsZShuYXBpX3J4KTsgLyogbWFrZSBzdXJlIGN1cnJlbnQgcnggcG9sbCBpcyBkb25lICovXG4mIzQzO1x0bmFwaV9kaXNhYmxlX2xvY2tlZChuYXBpX3J4KTsgLyogbWFrZSBzdXJlIGN1cnJlbnQgcnggcG9sbCBpcyBkb25lICovXG4gXG4gXHR0eF9xaWQgPSBndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsIHFpZCk7XG4gXHRuYXBpX3R4ID0gXHUwMDI2cHJpdi1cdTAwM2VudGZ5X2Jsb2Nrc1twcml2LVx1MDAzZXR4W3R4X3FpZF0ubnRmeV9pZF0ubmFwaTtcbi1cdG5hcGlfZGlzYWJsZShuYXBpX3R4KTsgLyogbWFrZSBzdXJlIGN1cnJlbnQgdHggcG9sbCBpcyBkb25lICovXG4mIzQzO1x0bmFwaV9kaXNhYmxlX2xvY2tlZChuYXBpX3R4KTsgLyogbWFrZSBzdXJlIGN1cnJlbnQgdHggcG9sbCBpcyBkb25lICovXG4gXG4gXHRndmVfdW5yZWdfeHNrX3Bvb2wocHJpdiwgcWlkKTtcbiBcdHNtcF9tYigpOyAvKiBNYWtlIHN1cmUgaXQgaXMgdmlzaWJsZSB0byB0aGUgd29ya2VycyBvbiBkYXRhcGF0aCAqL1xuIFxuLVx0bmFwaV9lbmFibGUobmFwaV9yeCk7XG4tXHRuYXBpX2VuYWJsZShuYXBpX3R4KTtcbiYjNDM7XHRuYXBpX2VuYWJsZV9sb2NrZWQobmFwaV9yeCk7XG4mIzQzO1x0bmFwaV9lbmFibGVfbG9ja2VkKG5hcGlfdHgpO1xuIFx0aWYgKGd2ZV9pc19ncWkocHJpdikpIHtcbiBcdFx0aWYgKGd2ZV9yeF93b3JrX3BlbmRpbmcoXHUwMDI2cHJpdi1cdTAwM2VyeFtxaWRdKSlcbiBcdFx0XHRuYXBpX3NjaGVkdWxlKG5hcGlfcngpO1xuQEAgLTE3MjcsNyAmIzQzOzE3MjEsMTQgQEAgc3RhdGljIGludCBndmVfeHNrX3Bvb2xfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdG5hcGlfc2NoZWR1bGUobmFwaV90eCk7XG4gXHR9XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7dW5tYXBfYW5kX3JldHVybjpcbiYjNDM7XHRwb29sID0geHNrX2dldF9wb29sX2Zyb21fcWlkKGRldiwgcWlkKTtcbiYjNDM7XHRpZiAocG9vbClcbiYjNDM7XHRcdHhza19wb29sX2RtYV91bm1hcChwb29sLFxuJiM0MztcdFx0XHRcdCAgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMgfFxuJiM0MztcdFx0XHRcdCAgIERNQV9BVFRSX1dFQUtfT1JERVJJTkcpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW50IGd2ZV94c2tfd2FrZXVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBxdWV1ZV9pZCwgdTMyIGZsYWdzKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmNcbmluZGV4IDBlY2UyZjZmZGZmYjQuLjgxMWRiNDJkMDVjNjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmNcbkBAIC0xMTMsNiAmIzQzOzExMywxMiBAQCBzdGF0aWMgdm9pZCBndmVfcnhfcmVzZXRfcmluZ19kcW8oc3RydWN0IGd2ZV9wcml2ICpwcml2LCBpbnQgaWR4KVxuIFx0XHRcdFx0Z3ZlX2ZyZWVfdG9fcGFnZV9wb29sKHJ4LCBicywgZmFsc2UpO1xuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdGd2ZV9mcmVlX3FwbF9wYWdlX2Rxbyhicyk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoZ3ZlX2J1Zl9zdGF0ZV9pc19hbGxvY2F0ZWQocngsIGJzKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgIGJzLVx1MDAzZXhza19idWZmKSB7XG4mIzQzO1x0XHRcdFx0eHNrX2J1ZmZfZnJlZShicy1cdTAwM2V4c2tfYnVmZik7XG4mIzQzO1x0XHRcdFx0YnMtXHUwMDNleHNrX2J1ZmYgPSBOVUxMO1xuJiM0MztcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC04MzksNyAmIzQzOzg0NSwxMiBAQCBzdGF0aWMgaW50IGd2ZV9yeF9kcW8oc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxuIFx0fVxuIFxuIFx0aWYgKHVubGlrZWx5KGNvbXBsX2Rlc2MtXHUwMDNlcnhfZXJyb3IpKSB7XG4tXHRcdGd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTtcbiYjNDM7XHRcdGlmIChidWZfc3RhdGUtXHUwMDNleHNrX2J1ZmYpIHtcbiYjNDM7XHRcdFx0eHNrX2J1ZmZfZnJlZShidWZfc3RhdGUtXHUwMDNleHNrX2J1ZmYpO1xuJiM0MztcdFx0XHRndmVfZnJlZV9idWZfc3RhdGUocngsIGJ1Zl9zdGF0ZSk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRndmVfZnJlZV9idWZmZXIocngsIGJ1Zl9zdGF0ZSk7XG4mIzQzO1x0XHR9XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuQEAgLTExNDUsMTMgJiM0MzsxMTU2LDE0IEBAIGludCBndmVfcnhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBpbnQgYnVkZ2V0KVxuIFx0XHQvKiBGcmVlIHJ1bm5pbmcgY291bnRlciBvZiBjb21wbGV0ZWQgZGVzY3JpcHRvcnMgKi9cbiBcdFx0cngtXHUwMDNlY250JiM0MzsmIzQzOztcbiBcbi1cdFx0aWYgKCFyeC1cdTAwM2VjdHguc2tiX2hlYWQpXG4tXHRcdFx0Y29udGludWU7XG4tXG4gXHRcdGlmICghY29tcGxfZGVzYy1cdTAwM2VlbmRfb2ZfcGFja2V0KVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHR3b3JrX2RvbmUmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdGlmICghcngtXHUwMDNlY3R4LnNrYl9oZWFkKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4gXHRcdHBrdF9ieXRlcyA9IHJ4LVx1MDAzZWN0eC5za2JfaGVhZC1cdTAwM2VsZW47XG4gXHRcdC8qIFRoZSBldGhlcm5ldCBoZWFkZXIgKGZpcnN0IEVUSF9ITEVOIGJ5dGVzKSBpcyBzbmlwcGVkIG9mZlxuIFx0XHQgKiBieSBldGhfdHlwZV90cmFucy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9HT09HTEUmIzM0OywKICAgICYjMzQ7R1ZFJiMzNDssCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1BDSV9NU0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtndmVfcnhfcG9sbF9kcW8mIzM0OywKICAgICYjMzQ7Z3ZlX25hcGlfcG9sbF9kcW8mIzM0OywKICAgICYjMzQ7Z3ZlX3hkcF9wb2xsX2RxbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKGd2ZSkgZHJpdmVyIHRvIGZpeCBidWdzIHJlbGF0ZWQgdG8gQUZfWERQIChYRFAgc29ja2V0cykgc3VwcG9ydC4gSXQgZml4ZXMgYSBtZW1vcnkgbGVhayBpbiBgZ3ZlX3J4X3Jlc2V0X3JpbmdfZHFvYCBhbmQgYGd2ZV9yeF9kcW9gIGJ5IHByb3Blcmx5IGZyZWVpbmcgYHhza19idWZmYC4gSXQgYWxzbyBmaXhlcyBhIGJ1ZyBpbiBgZ3ZlX3J4X3BvbGxfZHFvYCB3aGVyZSBgd29ya19kb25lYCB3YXMgbm90IGluY3JlbWVudGVkIGNvcnJlY3RseSwgYW5kIGZpeGVzIERNQSB1bm1hcHBpbmcgaW4gYGd2ZV94c2tfcG9vbF9lbmFibGVgIGFuZCBgZ3ZlX3hza19wb29sX2Rpc2FibGVgLiBUaGVzZSBjaGFuZ2VzIGhhdmUgZnVuY3Rpb25hbCBpbXBhY3Qgb24gdGhlIG5ldHdvcmsgZGF0YXBhdGggYW5kIEFGX1hEUCBzb2NrZXQgaGFuZGxpbmcuIFRoZSBHVkUgZHJpdmVyIGlzIHRoZSBwcmltYXJ5IG5ldHdvcmsgaW50ZXJmYWNlIHVzZWQgaW4gR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpIFZNcywgd2hlcmUgc3l6a2FsbGVyIHJ1bnMsIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIGhpZ2hseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZkODg0MWZhMjY4MzRhOTE0Y2ZhNzhjYTI0YTc2OTIzYjhhYmU2MGEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxNSAwMDoxNzozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYwppbmRleCBlNGQ3OGFlNTJkYWZlLi5jY2FmNWY4NmExZTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jCkBAIC0xNjU0LDIwICYjNDM7MTY1NCwxOCBAQCBzdGF0aWMgaW50IGd2ZV94c2tfcG9vbF9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAoIXByaXYtJmd0O3hkcF9wcm9nIHx8ICFuZXRpZl9ydW5uaW5nKGRldikpCiAJCXJldHVybiAwOwogCi0JZXJyID0gZ3ZlX3JlZ194c2tfcG9vbChwcml2LCBkZXYsIHBvb2wsIHFpZCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfeHNrX3Bvb2xfZG1hX21hcHBlZDsKLQotCS8qIFN0b3AgYW5kIHN0YXJ0IFJEQSBxdWV1ZXMgdG8gcmVwb3N0IGJ1ZmZlcnMuICovCi0JaWYgKCFndmVfaXNfcXBsKHByaXYpKSB7CiYjNDM7CWlmIChndmVfaXNfcXBsKHByaXYpKSB7CiYjNDM7CQllcnIgPSBndmVfcmVnX3hza19wb29sKHByaXYsIGRldiwgcG9vbCwgcWlkKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBlcnJfeHNrX3Bvb2xfZG1hX21hcHBlZDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIFN0b3AgYW5kIHN0YXJ0IFJEQSBxdWV1ZXMgdG8gcmVwb3N0IGJ1ZmZlcnMuICovCiAJCWVyciA9IGd2ZV9jb25maWd1cmVfcmluZ3NfeGRwKHByaXYsIHByaXYtJmd0O3J4X2NmZy5udW1fcXVldWVzKTsKIAkJaWYgKGVycikKLQkJCWdvdG8gZXJyX3hza19wb29sX3JlZ2lzdGVyZWQ7CiYjNDM7CQkJZ290byBlcnJfeHNrX3Bvb2xfZG1hX21hcHBlZDsKIAl9CiAJcmV0dXJuIDA7CiAKLWVycl94c2tfcG9vbF9yZWdpc3RlcmVkOgotCWd2ZV91bnJlZ194c2tfcG9vbChwcml2LCBxaWQpOwogZXJyX3hza19wb29sX2RtYV9tYXBwZWQ6CiAJY2xlYXJfYml0KHFpZCwgcHJpdi0mZ3Q7eHNrX3Bvb2xzKTsKIAl4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwKQEAgLTE2ODMsNDIgJiM0MzsxNjgxLDM4IEBAIHN0YXRpYyBpbnQgZ3ZlX3hza19wb29sX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGlfcng7CiAJc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpX3R4OwogCXN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sOwomIzQzOwlpbnQgZXJyID0gMDsKIAlpbnQgdHhfcWlkOwotCWludCBlcnI7CiAKLQlpZiAocWlkICZndDs9IHByaXYtJmd0O3J4X2NmZy5udW1fcXVldWVzKQotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKHFpZCAmZ3Q7PSBwcml2LSZndDtyeF9jZmcubnVtX3F1ZXVlcykgewomIzQzOwkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gdW5tYXBfYW5kX3JldHVybjsKJiM0MzsJfQogCiAJY2xlYXJfYml0KHFpZCwgcHJpdi0mZ3Q7eHNrX3Bvb2xzKTsKIAotCXBvb2wgPSB4c2tfZ2V0X3Bvb2xfZnJvbV9xaWQoZGV2LCBxaWQpOwotCWlmIChwb29sKQotCQl4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwKLQkJCQkgICBETUFfQVRUUl9TS0lQX0NQVV9TWU5DIHwKLQkJCQkgICBETUFfQVRUUl9XRUFLX09SREVSSU5HKTsKLQogCWlmICghbmV0aWZfcnVubmluZyhkZXYpIHx8ICFwcml2LSZndDt0eF9jZmcubnVtX3hkcF9xdWV1ZXMpCi0JCXJldHVybiAwOwomIzQzOwkJZ290byB1bm1hcF9hbmRfcmV0dXJuOwogCiAJLyogU3RvcCBhbmQgc3RhcnQgUkRBIHF1ZXVlcyB0byByZXBvc3QgYnVmZmVycy4gKi8KIAlpZiAoIWd2ZV9pc19xcGwocHJpdikgJmFtcDsmYW1wOyBwcml2LSZndDt4ZHBfcHJvZykgewogCQllcnIgPSBndmVfY29uZmlndXJlX3JpbmdzX3hkcChwcml2LCBwcml2LSZndDtyeF9jZmcubnVtX3F1ZXVlcyk7CiAJCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwomIzQzOwkJCWdvdG8gdW5tYXBfYW5kX3JldHVybjsKIAl9CiAKIAluYXBpX3J4ID0gJmFtcDtwcml2LSZndDtudGZ5X2Jsb2Nrc1twcml2LSZndDtyeFtxaWRdLm50ZnlfaWRdLm5hcGk7Ci0JbmFwaV9kaXNhYmxlKG5hcGlfcngpOyAvKiBtYWtlIHN1cmUgY3VycmVudCByeCBwb2xsIGlzIGRvbmUgKi8KJiM0MzsJbmFwaV9kaXNhYmxlX2xvY2tlZChuYXBpX3J4KTsgLyogbWFrZSBzdXJlIGN1cnJlbnQgcnggcG9sbCBpcyBkb25lICovCiAKIAl0eF9xaWQgPSBndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsIHFpZCk7CiAJbmFwaV90eCA9ICZhbXA7cHJpdi0mZ3Q7bnRmeV9ibG9ja3NbcHJpdi0mZ3Q7dHhbdHhfcWlkXS5udGZ5X2lkXS5uYXBpOwotCW5hcGlfZGlzYWJsZShuYXBpX3R4KTsgLyogbWFrZSBzdXJlIGN1cnJlbnQgdHggcG9sbCBpcyBkb25lICovCiYjNDM7CW5hcGlfZGlzYWJsZV9sb2NrZWQobmFwaV90eCk7IC8qIG1ha2Ugc3VyZSBjdXJyZW50IHR4IHBvbGwgaXMgZG9uZSAqLwogCiAJZ3ZlX3VucmVnX3hza19wb29sKHByaXYsIHFpZCk7CiAJc21wX21iKCk7IC8qIE1ha2Ugc3VyZSBpdCBpcyB2aXNpYmxlIHRvIHRoZSB3b3JrZXJzIG9uIGRhdGFwYXRoICovCiAKLQluYXBpX2VuYWJsZShuYXBpX3J4KTsKLQluYXBpX2VuYWJsZShuYXBpX3R4KTsKJiM0MzsJbmFwaV9lbmFibGVfbG9ja2VkKG5hcGlfcngpOwomIzQzOwluYXBpX2VuYWJsZV9sb2NrZWQobmFwaV90eCk7CiAJaWYgKGd2ZV9pc19ncWkocHJpdikpIHsKIAkJaWYgKGd2ZV9yeF93b3JrX3BlbmRpbmcoJmFtcDtwcml2LSZndDtyeFtxaWRdKSkKIAkJCW5hcGlfc2NoZWR1bGUobmFwaV9yeCk7CkBAIC0xNzI3LDcgJiM0MzsxNzIxLDE0IEBAIHN0YXRpYyBpbnQgZ3ZlX3hza19wb29sX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCW5hcGlfc2NoZWR1bGUobmFwaV90eCk7CiAJfQogCi0JcmV0dXJuIDA7CiYjNDM7dW5tYXBfYW5kX3JldHVybjoKJiM0MzsJcG9vbCA9IHhza19nZXRfcG9vbF9mcm9tX3FpZChkZXYsIHFpZCk7CiYjNDM7CWlmIChwb29sKQomIzQzOwkJeHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsCiYjNDM7CQkJCSAgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMgfAomIzQzOwkJCQkgICBETUFfQVRUUl9XRUFLX09SREVSSU5HKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBndmVfeHNrX3dha2V1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcXVldWVfaWQsIHUzMiBmbGFncykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMKaW5kZXggMGVjZTJmNmZkZmZiNC4uODExZGI0MmQwNWM2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMKQEAgLTExMyw2ICYjNDM7MTEzLDEyIEBAIHN0YXRpYyB2b2lkIGd2ZV9yeF9yZXNldF9yaW5nX2RxbyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIGludCBpZHgpCiAJCQkJZ3ZlX2ZyZWVfdG9fcGFnZV9wb29sKHJ4LCBicywgZmFsc2UpOwogCQkJZWxzZQogCQkJCWd2ZV9mcmVlX3FwbF9wYWdlX2Rxbyhicyk7CiYjNDM7CiYjNDM7CQkJaWYgKGd2ZV9idWZfc3RhdGVfaXNfYWxsb2NhdGVkKHJ4LCBicykgJmFtcDsmYW1wOwomIzQzOwkJCSAgICBicy0mZ3Q7eHNrX2J1ZmYpIHsKJiM0MzsJCQkJeHNrX2J1ZmZfZnJlZShicy0mZ3Q7eHNrX2J1ZmYpOwomIzQzOwkJCQlicy0mZ3Q7eHNrX2J1ZmYgPSBOVUxMOwomIzQzOwkJCX0KIAkJfQogCX0KIApAQCAtODM5LDcgJiM0Mzs4NDUsMTIgQEAgc3RhdGljIGludCBndmVfcnhfZHFvKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCwKIAl9CiAKIAlpZiAodW5saWtlbHkoY29tcGxfZGVzYy0mZ3Q7cnhfZXJyb3IpKSB7Ci0JCWd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTsKJiM0MzsJCWlmIChidWZfc3RhdGUtJmd0O3hza19idWZmKSB7CiYjNDM7CQkJeHNrX2J1ZmZfZnJlZShidWZfc3RhdGUtJmd0O3hza19idWZmKTsKJiM0MzsJCQlndmVfZnJlZV9idWZfc3RhdGUocngsIGJ1Zl9zdGF0ZSk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTsKJiM0MzsJCX0KIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMTQ1LDEzICYjNDM7MTE1NiwxNCBAQCBpbnQgZ3ZlX3J4X3BvbGxfZHFvKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpibG9jaywgaW50IGJ1ZGdldCkKIAkJLyogRnJlZSBydW5uaW5nIGNvdW50ZXIgb2YgY29tcGxldGVkIGRlc2NyaXB0b3JzICovCiAJCXJ4LSZndDtjbnQmIzQzOyYjNDM7OwogCi0JCWlmICghcngtJmd0O2N0eC5za2JfaGVhZCkKLQkJCWNvbnRpbnVlOwotCiAJCWlmICghY29tcGxfZGVzYy0mZ3Q7ZW5kX29mX3BhY2tldCkKIAkJCWNvbnRpbnVlOwogCiAJCXdvcmtfZG9uZSYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlpZiAoIXJ4LSZndDtjdHguc2tiX2hlYWQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCXBrdF9ieXRlcyA9IHJ4LSZndDtjdHguc2tiX2hlYWQtJmd0O2xlbjsKIAkJLyogVGhlIGV0aGVybmV0IGhlYWRlciAoZmlyc3QgRVRIX0hMRU4gYnl0ZXMpIGlzIHNuaXBwZWQgb2ZmCiAJCSAqIGJ5IGV0aF90eXBlX3RyYW5zLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODUzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkdWRSBEcml2ZXIgWERQL0FGX1hEUCBDaGFuZ2VzIC0gV29ydGggSW52ZXN0aWdhdGluZyoqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggdG91Y2hlcyB0aGUgYGd2ZV9tYWluLmNgIGFuZCBgZ3ZlX3J4X2Rxby5jYCBmaWxlcyB3aXRoaW4gdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChHVkUpIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCBmb2N1c2VzIG9uIHRoZSBYRFAgYW5kIEFGX1hEUCAoeHNrKSBzdXBwb3J0LCBtb2RpZnlpbmcgZnVuY3Rpb25zIGxpa2UgYGd2ZV94c2tfcG9vbF9lbmFibGVgLCBgZ3ZlX3hza19wb29sX2Rpc2FibGVgLCBgZ3ZlX3J4X3Jlc2V0X3JpbmdfZHFvYCwgYGd2ZV9yeF9kcW9gLCBhbmQgYGd2ZV9yeF9wb2xsX2Rxb2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgaXRzIHRlc3RhYmlsaXR5LiBHVkUgaXMgYSB2aXJ0dWFsaXplZCBkcml2ZXIsIGlzbiYjMzk7dCBpdD8gQWgsIHllcywgaXQmIzM5O3MgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHVzZWQgaW4gR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpLCBzbyBpdCAqaXMqIHZpcnR1YWxpemVkLiBBbmQgc3l6a2FsbGVyLCB3aGljaCBJIHVzZSBleHRlbnNpdmVseSwgcnVucyBvbiBHQ0UgYnkgZGVmYXVsdCwgc28gR1ZFIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBXYWl0LCBkb2VzIHN5emthbGxlciBhY3R1YWxseSAqdXNlKiBHVkU/IFllcywgdXN1YWxseSBHQ0UgVk1zIGxldmVyYWdlIEdWRSBvciB2aXJ0aW8tbmV0LgoKVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogaXMgaXQgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gSXQmIzM5O3MgYSBuZXR3b3JrIGRyaXZlciBhbmQgaXQmIzM5O3MgcmVhY2hhYmxlIGZyb20gdGhlIGd1ZXN0LCBlaXRoZXIgYXMgdGhlIHByaW1hcnkgaW50ZXJmYWNlIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgaWYgd2UgY2FuIGluc3RhbnRpYXRlIGl0LiBXaGlsZSBpbnN0YW50aWF0aW5nIGl0IGluIFFFTVUgbWlnaHQgYmUgdHJpY2t5LCBzeXprYWxsZXIgKmlzKiBydW5uaW5nIGluIEdDRSwgd2hlcmUgR1ZFIGlzIHByZXNlbnQsIGFuZCB0aGVyZWZvcmUgYWNjZXNzaWJsZS4gVGhlIGRvY3VtZW50YXRpb24gZXhwbGljaXRseSBtZW50aW9ucyBub3QgYm90aGVyaW5nIHdpdGggY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiBHQ0Ug4oCTIGFuZCB0aGlzIGlzICp0aGUqIEdDRSBuZXR3b3JrIGRyaXZlciEKCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUgY2hhbmdlcy4gVGhlIHBhdGNoIG1vZGlmaWVzIGBndmVfeHNrX3Bvb2xfZW5hYmxlYCBhbmQgYGd2ZV94c2tfcG9vbF9kaXNhYmxlYC4gQWxzbywgYGd2ZV9yeF9yZXNldF9yaW5nX2Rxb2AgYW5kIGBndmVfcnhfZHFvYCBhcmUgdXBkYXRlZCB0byBoYW5kbGUgdGhlIGB4c2tfYnVmZmAgZnJlZWluZy4gQW5kIGBndmVfcnhfcG9sbF9kcW9gIGdldHMgYSBidWcgZml4LiBUaGlzIHNlZW1zIGxpa2UgYSBnb29kIHRhcmdldC4gSXQmIzM5O3Mgd29ydGggYSBsb29rIGF0IHRoZSBjb25maWcgZm9yIEdWRSwgd2hpY2ggc2hvdWxkIGJlIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZ2AuIExldCYjMzk7cyBjaGVjayBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgR1ZFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZz0xNj1pZiBORVRfVkVORE9SX0dPT0dMRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWctMTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZzoxODpjb25maWcgR1ZFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZy0xOS1cdHRyaXN0YXRlIFwmIzM0O0dvb2dsZSBWaXJ0dWFsIE5JQyAoZ1ZOSUMpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTk3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3Igc29tZXRoaW5nLiBUaGUgbmF0dXJhbCBzdGFydGluZyBwb2ludCwgYXMgYWx3YXlzLCBpcyB0aGUgS2NvbmZpZyBmaWxlLiBJJiMzOTttIGRlYWxpbmcgd2l0aCB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0gYW5kIHNwZWNpZmljYWxseSBFdGhlcm5ldCBkcml2ZXJzIGZyb20gR29vZ2xlLCBzbyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWdgIHNlZW1zIGxpa2UgdGhlIG9idmlvdXMgcGxhY2UgdG8gYmVnaW4uIFRpbWUgdG8gb3BlbiBpdCB1cCBhbmQgc2VlIHdoYXQgSSBjYW4gbGVhcm4gYWJvdXQgaG93IHRoaXMgcGllY2UgZml0cyBpbnRvIHRoZSBsYXJnZXIgcHV6emxlIG9mIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhpcyBLY29uZmlnIGZpbGUgcmV2ZWFscy4uLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cywgbWF5YmUgc29tZSBgc2VsZWN0YCBkaXJlY3RpdmVzLCBhbmQgaG9wZWZ1bGx5IGVub3VnaCBjbHVlcyB0byBwaW5wb2ludCB0aGUgcmVxdWlyZWQgcHJlcmVxdWlzaXRlcyBmb3IgZW5hYmxpbmcgdGhpcyBzcGVjaWZpYyBHb29nbGUgRXRoZXJuZXQgZHJpdmVyLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsLCBvZiBjb3Vyc2UsIHRvIGF2b2lkIGFueSBidWlsZCBmYWlsdXJlcyBvciBydW50aW1lIGlzc3VlcyBkb3duIHRoZSBsaW5lLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjXG4gICAyOlx0IyBHb29nbGUgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxuICAgMzpcdCNcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgTkVUX1ZFTkRPUl9HT09HTEVcbiAgIDY6XHRcdGJvb2wgXCYjMzQ7R29vZ2xlIERldmljZXNcJiMzNDtcbiAgIDc6XHRcdGRlZmF1bHQgeVxuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBkZXZpY2UgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxuICAxMDpcdFxuICAxMTpcdFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbiAgMTI6XHRcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbFxuICAxMzpcdFx0ICB0aGUgcXVlc3Rpb25zIGFib3V0IEdvb2dsZSBkZXZpY2VzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkXG4gIDE0Olx0XHQgIGZvciB5b3VyIHNwZWNpZmljIGRldmljZSBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cbiAgMTU6XHRcbiAgMTY6XHRpZiBORVRfVkVORE9SX0dPT0dMRVxuICAxNzpcdFxuICAxODpcdGNvbmZpZyBHVkVcbiAgMTk6XHRcdHRyaXN0YXRlIFwmIzM0O0dvb2dsZSBWaXJ0dWFsIE5JQyAoZ1ZOSUMpIHN1cHBvcnRcJiMzNDtcbiAgMjA6XHRcdGRlcGVuZHMgb24gKFBDSV9NU0kgXHUwMDI2XHUwMDI2IChYODYgfHwgQ1BVX0xJVFRMRV9FTkRJQU4pKVxuICAyMTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICAyMjpcdFx0c2VsZWN0IFBBR0VfUE9PTFxuICAyMzpcdFx0aGVscFxuICAyNDpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBHb29nbGUgVmlydHVhbCBOSUMgKGdWTklDKVwmIzM0O1xuICAyNTpcdFxuICAyNjpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxuICAyNzpcdFx0ICBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGd2ZS5cbiAgMjg6XHRcbiAgMjk6XHRlbmRpZiAjTkVUX1ZFTkRPUl9HT09HTEVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjI3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIEdWRSBEcml2ZXI6IEluaXRpYWwgVGhvdWdodHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgTkVUX1ZFTkRPUl9HT09HTEVgIGFuZCBgR1ZFYC4gUmlnaHQsIGFuZCBgR1ZFYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBQQ0lfTVNJYCwgd2hpY2ggaXMgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCBmb3Igc2V0dXAuIFRoZSBjb3JlIHF1ZXN0aW9uIGlzOiBjYW4gSSBlZmZlY3RpdmVseSBmdXp6IGBndmVfeHNrX3Bvb2xfZW5hYmxlYD8gVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQuIFRoaW5raW5nIGFib3V0IGl0LCB0aGUgYW5zd2VyIGlzIHllcywgSSBjYW4uIExldmVyYWdpbmcgQUZfWERQIHNvY2tldHMgb24gdGhlIEdWRSBpbnRlcmZhY2UgaXMgdGhlIGtleSB0aGVyZS4KCk5vdywgbGV0JiMzOTtzIHBpbnBvaW50IHRoZSBmdW5jdGlvbnMgSSBzaG91bGQgZm9jdXMgbXkgYXR0ZW50aW9uIG9uLiBJJiMzOTttIHRoaW5raW5nOiBgZ3ZlX3hza19wb29sX2VuYWJsZWAsIGBndmVfeHNrX3Bvb2xfZGlzYWJsZWAsIGBndmVfcnhfcmVzZXRfcmluZ19kcW9gIChldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMsIGl0JiMzOTtzIHJlbGV2YW50IHRvIHRoZSBkYXRhIGZsb3cpLCBgZ3ZlX3J4X2Rxb2AgKGFub3RoZXIgc3RhdGljIG9uZSB0aGF0IGxpa2VseSBkb2VzIGltcG9ydGFudCB3b3JrKSwgYW5kIGNydWNpYWxseSwgYGd2ZV9yeF9wb2xsX2Rxb2AsIHdoaWNoIGlzIG5vbi1zdGF0aWMgYW5kIG9mZmVycyBhIGRpcmVjdCBhY2Nlc3MgcG9pbnQuCgpUaW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byBleGFtaW5lIGBndmVfeHNrX3Bvb2xfZW5hYmxlYCBhbmQgYGd2ZV94c2tfcG9vbF9kaXNhYmxlYCBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jYC4gVGhvc2UgYXJlIG15IGVudHJ5IHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtndmVfeHNrX3Bvb2xfZW5hYmxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTE2MTY9c3RhdGljIGludCBndmVfeGRwX3htaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG4sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE2MjgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6MTYyOTpzdGF0aWMgaW50IGd2ZV94c2tfcG9vbF9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xNjMwLVx0XHRcdCAgICAgICBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MTgwNT1zdGF0aWMgaW50IGd2ZV94ZHAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGRldl9icGYgKnhkcClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTgxNy1cdFx0aWYgKHhkcC1cdTAwM2V4c2sucG9vbClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxODE4Olx0XHRcdHJldHVybiBndmVfeHNrX3Bvb2xfZW5hYmxlKGRldiwgeGRwLVx1MDAzZXhzay5wb29sLCB4ZHAtXHUwMDNleHNrLnF1ZXVlX2lkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xODE5LVx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ5NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipBbmFseXppbmcgdGhlIEdWRSBEYXRhIFBhdGgqKgoKT2theSwgc28gYGd2ZV94c2tfcG9vbF9lbmFibGVgIGlzIGRlZmluZWQgYXMgYSBzdGF0aWMgdmFyaWFibGUsIHRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIGtub3cgcmlnaHQgb2ZmIHRoZSBiYXQuIEl0IG1lYW5zIGl0cyB2aXNpYmlsaXR5IGFuZCBsaWZldGltZSBhcmUgcmVzdHJpY3RlZCB3aXRoaW4gaXRzIGNvbXBpbGF0aW9uIHVuaXQsIHVzdWFsbHkgYSBnb29kIGluZGljYXRvciB0aGF0IGl0JiMzOTtzIGFuIGludGVybmFsIGZsYWcgb3Igc2V0dGluZywgbm90IHNvbWV0aGluZyBleHBvc2VkIGdsb2JhbGx5LiBOb3csIHRoZSBtYWluIGVudHJ5IHBvaW50cyBzZWVtIHRvIGJlIGVpdGhlciBgZ3ZlX3hkcGAgb3IgYGd2ZV94c2tfd2FrZXVwYC4gR2l2ZW4gdGhvc2UgdHdvLCBpdCBtYWtlcyB0aGUgbW9zdCBzZW5zZSB0byBzdGFydCB3aXRoIGBndmVfeGRwYCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsIGRhdGEgZmxvdy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBzdGF0aWMgdmFyaWFibGUgKGBndmVfeHNrX3Bvb2xfZW5hYmxlYCkgaXMgdXNlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIFhEUCBoYW5kbGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtndmVfeGRwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaD0xODk9c3RydWN0IGd2ZV9yeF9idWZfc3RhdGVfZHFvIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTIwOC0vKiBXcmFwcGVyIGZvciBYRFAgUnggbWV0YWRhdGEgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MjA5OnN0cnVjdCBndmVfeGRwX2J1ZmYge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0yMTAtXHRzdHJ1Y3QgeGRwX2J1ZmYgeGRwO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg9MTE3OT1zdGF0aWMgaW5saW5lIHUzMiBndmVfbnVtX3R4X3F1ZXVlcyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMTgzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaDoxMTg0OnN0YXRpYyBpbmxpbmUgdTMyIGd2ZV94ZHBfdHhfcXVldWVfaWQoc3RydWN0IGd2ZV9wcml2ICpwcml2LCB1MzIgcXVldWVfaWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTExODUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMTE4OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MTE4OTpzdGF0aWMgaW5saW5lIHUzMiBndmVfeGRwX3R4X3N0YXJ0X3F1ZXVlX2lkKHN0cnVjdCBndmVfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMTE5MC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oOjExOTE6XHRyZXR1cm4gZ3ZlX3hkcF90eF9xdWV1ZV9pZChwcml2LCAwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMTE5Mi19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaD0xMjI2PW5ldGRldl90eF90IGd2ZV90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MTIyNzppbnQgZ3ZlX3hkcF94bWl0X2dxaShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbiwgc3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMTIyOC1cdFx0ICAgICB1MzIgZmxhZ3MpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaDoxMjI5OmludCBndmVfeGRwX3htaXRfZHFvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuLCBzdHJ1Y3QgeGRwX2ZyYW1lICoqZnJhbWVzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMjMwLVx0XHQgICAgIHUzMiBmbGFncyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oOjEyMzE6aW50IGd2ZV94ZHBfeG1pdF9vbmUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX3R4X3JpbmcgKnR4LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMjMyLVx0XHQgICAgIHZvaWQgKmRhdGEsIGludCBsZW4sIHZvaWQgKmZyYW1lX3ApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaDoxMjMzOnZvaWQgZ3ZlX3hkcF90eF9mbHVzaChzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHUzMiB4ZHBfcWlkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MTIzNDppbnQgZ3ZlX3hkcF94bWl0X29uZV9kcW8oc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX3R4X3JpbmcgKnR4LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMjM1LVx0XHRcdCBzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg9MTIzNj1ib29sIGd2ZV90eF9wb2xsKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpibG9jaywgaW50IGJ1ZGdldCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oOjEyMzc6Ym9vbCBndmVfeGRwX3BvbGwoc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBpbnQgYnVkZ2V0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMTIzOC1pbnQgZ3ZlX3hza190eF9wb2xsKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpibG9jaywgaW50IGJ1ZGdldCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZHFvLmg9MzY9bmV0ZGV2X2ZlYXR1cmVzX3QgZ3ZlX2ZlYXR1cmVzX2NoZWNrX2RxbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Rxby5oLTM4LVx0XHRcdFx0XHQgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZHFvLmg6Mzk6aW50IGd2ZV94ZHBfcnhfdGltZXN0YW1wKGNvbnN0IHN0cnVjdCB4ZHBfbWQgKl9jdHgsIHU2NCAqdGltZXN0YW1wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Rxby5oLTQwLWJvb2wgZ3ZlX3R4X3BvbGxfZHFvKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpibG9jaywgYm9vbCBkb19jbGVhbik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9kcW8uaDo0MTpib29sIGd2ZV94ZHBfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Rxby5oLTQyLWJvb2wgZ3ZlX3hza190eF9wb2xsX2RxbyhzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqYmxvY2ssIGludCBidWRnZXQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Rxby5oPTY1PXZvaWQgZ3ZlX3J4X3dyaXRlX2Rvb3JiZWxsX2Rxbyhjb25zdCBzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIGludCBxdWV1ZV9pZHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZHFvLmg6NjY6dm9pZCBndmVfeGRwX3R4X2ZsdXNoX2RxbyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHUzMiB4ZHBfcWlkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Rxby5oLTY3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0zNTM9aW50IGd2ZV9uYXBpX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0zNjctXHRcdGVsc2UgaWYgKGJ1ZGdldClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzozNjg6XHRcdFx0cmVzY2hlZHVsZSB8PSBndmVfeGRwX3BvbGwoYmxvY2ssIGJ1ZGdldCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMzY5LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz00MTE9aW50IGd2ZV9uYXBpX3BvbGxfZHFvKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtNDIyLVx0XHRlbHNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6NDIzOlx0XHRcdHJlc2NoZWR1bGUgfD0gZ3ZlX3hkcF9wb2xsX2RxbyhibG9jayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtNDI0LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz05MzY9c3RhdGljIHZvaWQgaW5pdF94ZHBfc3luY19zdGF0cyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtOTM3LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzo5Mzg6XHRpbnQgc3RhcnRfaWQgPSBndmVfeGRwX3R4X3N0YXJ0X3F1ZXVlX2lkKHByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTkzOS1cdGludCBpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0xMjEwPXN0YXRpYyB2b2lkIGd2ZV91bnJlZ194c2tfcG9vbChzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHUxNiBxaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTEyMjMtXHRcdHJldHVybjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxMjI0Olx0cHJpdi1cdTAwM2V0eFtndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsIHFpZCldLnhza19wb29sID0gTlVMTDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xMjI1LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MTIyNz1zdGF0aWMgaW50IGd2ZV9yZWdfeHNrX3Bvb2woc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xMjQzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjEyNDQ6XHR0eF9xaWQgPSBndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsIHFpZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTI0NS1cdHByaXYtXHUwMDNldHhbdHhfcWlkXS54c2tfcG9vbCA9IHBvb2w7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTE1Nzk9c3RhdGljIGludCBndmVfc2V0X3hkcChzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTYxNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxNjE2OnN0YXRpYyBpbnQgZ3ZlX3hkcF94bWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE2MTctXHRcdFx0c3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcywgdTMyIGZsYWdzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xNjIxLVx0aWYgKHByaXYtXHUwMDNlcXVldWVfZm9ybWF0ID09IEdWRV9HUUlfUVBMX0ZPUk1BVClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxNjIyOlx0XHRyZXR1cm4gZ3ZlX3hkcF94bWl0X2dxaShkZXYsIG4sIGZyYW1lcywgZmxhZ3MpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE2MjMtXHRlbHNlIGlmIChwcml2LVx1MDAzZXF1ZXVlX2Zvcm1hdCA9PSBHVkVfRFFPX1JEQV9GT1JNQVQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6MTYyNDpcdFx0cmV0dXJuIGd2ZV94ZHBfeG1pdF9kcW8oZGV2LCBuLCBmcmFtZXMsIGZsYWdzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xNjI1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0xNjc3PXN0YXRpYyBpbnQgZ3ZlX3hza19wb29sX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTcwNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxNzA3Olx0dHhfcWlkID0gZ3ZlX3hkcF90eF9xdWV1ZV9pZChwcml2LCBxaWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE3MDgtXHRuYXBpX3R4ID0gXHUwMDI2cHJpdi1cdTAwM2VudGZ5X2Jsb2Nrc1twcml2LVx1MDAzZXR4W3R4X3FpZF0ubnRmeV9pZF0ubmFwaTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MTc1Nj1zdGF0aWMgaW50IGd2ZV92ZXJpZnlfeGRwX2NvbmZpZ3VyYXRpb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTgwNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxODA1OnN0YXRpYyBpbnQgZ3ZlX3hkcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ZGV2X2JwZiAqeGRwKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE4MDYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0yMjQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZ3ZlX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTIyNTItXHQubmRvX3NldF9mZWF0dXJlc1x0PVx0Z3ZlX3NldF9mZWF0dXJlcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoyMjUzOlx0Lm5kb19icGZcdFx0PVx0Z3ZlX3hkcCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoyMjU0Olx0Lm5kb194ZHBfeG1pdFx0XHQ9XHRndmVfeGRwX3htaXQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjI1NS1cdC5uZG9feHNrX3dha2V1cFx0XHQ9XHRndmVfeHNrX3dha2V1cCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MjM3OT1zdGF0aWMgdm9pZCBndmVfc2V0X25ldGRldl94ZHBfZmVhdHVyZXMoc3RydWN0IGd2ZV9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yMzk3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjIzOTg6c3RhdGljIGNvbnN0IHN0cnVjdCB4ZHBfbWV0YWRhdGFfb3BzIGd2ZV94ZHBfbWV0YWRhdGFfb3BzID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjIzOTk6XHQueG1vX3J4X3RpbWVzdGFtcFx0PSBndmVfeGRwX3J4X3RpbWVzdGFtcCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yNDAwLX07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTI0MDI9c3RhdGljIGludCBndmVfaW5pdF9wcml2KHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgYm9vbCBza2lwX2Rlc2NyaWJlX2RldmljZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjQ5Ny1cdGlmICghZ3ZlX2lzX2dxaShwcml2KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoyNDk4Olx0XHRwcml2LVx1MDAzZWRldi1cdTAwM2V4ZHBfbWV0YWRhdGFfb3BzID0gXHUwMDI2Z3ZlX3hkcF9tZXRhZGF0YV9vcHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjQ5OS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jPTY5ND1zdGF0aWMgaW50IGd2ZV94c2tfcG9vbF9yZWRpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtNzE4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYzo3MTk6c3RhdGljIGludCBndmVfeGRwX3JlZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBndmVfcnhfcmluZyAqcngsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTcyMC1cdFx0XHQgICAgc3RydWN0IHhkcF9idWZmICpvcmlnLCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtNzUxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYzo3NTI6c3RhdGljIHZvaWQgZ3ZlX3hkcF9kb25lKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtNzUzLVx0XHRcdCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgc3RydWN0IGJwZl9wcm9nICp4cHJvZyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTc2NS1cdGNhc2UgWERQX1RYOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYzo3NjY6XHRcdHR4X3FpZCA9IGd2ZV94ZHBfdHhfcXVldWVfaWQocHJpdiwgcngtXHUwMDNlcV9udW0pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYy03NjctXHRcdHR4ID0gXHUwMDI2cHJpdi1cdTAwM2V0eFt0eF9xaWRdO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYy03NjgtXHRcdHNwaW5fbG9jayhcdTAwMjZ0eC1cdTAwM2V4ZHBfbG9jayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jOjc2OTpcdFx0ZXJyID0gZ3ZlX3hkcF94bWl0X29uZShwcml2LCB0eCwgeGRwLVx1MDAzZWRhdGEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTc3MC1cdFx0XHRcdCAgICAgICB4ZHAtXHUwMDNlZGF0YV9lbmQgLSB4ZHAtXHUwMDNlZGF0YSwgTlVMTCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYy03NzktXHRjYXNlIFhEUF9SRURJUkVDVDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM6NzgwOlx0XHRlcnIgPSBndmVfeGRwX3JlZGlyZWN0KHByaXYtXHUwMDNlZGV2LCByeCwgeGRwLCB4cHJvZyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTc4MS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jPTc5Nj1zdGF0aWMgdm9pZCBndmVfcngoc3RydWN0IGd2ZV9yeF9yaW5nICpyeCwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTg2Ni1cdFx0aWYgKHhkcF9hY3QgIT0gWERQX1BBU1MpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM6ODY3Olx0XHRcdGd2ZV94ZHBfZG9uZShwcml2LCByeCwgXHUwMDI2eGRwLCB4cHJvZywgeGRwX2FjdCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTg2OC1cdFx0XHRjdHgtXHUwMDNldG90YWxfc2l6ZSAmIzQzOz0gZnJhZ19zaXplO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM9MTAwMD1zdGF0aWMgaW50IGd2ZV9jbGVhbl9yeF9kb25lKHN0cnVjdCBndmVfcnhfcmluZyAqcngsIGludCBidWRnZXQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYy0xMDUyLVx0aWYgKHhkcF90eHMgIT0gcngtXHUwMDNleGRwX2FjdGlvbnNbWERQX1RYXSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM6MTA1MzpcdFx0Z3ZlX3hkcF90eF9mbHVzaChwcml2LCByeC1cdTAwM2VxX251bSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTEwNTQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM9MjM1PWludCBndmVfcnhfYWxsb2NfcmluZ19kcW8oc3RydWN0IGd2ZV9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTI2Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjI2MzpcdC8qIHN0cnVjdCBndmVfeGRwX2J1ZmYgaXMgb3ZlcmxhaWQgb24gc3RydWN0IHhkcF9idWZmX3hzayBhbmQgdXRpbGl6ZXNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTI2NC1cdCAqIHRoZSAyNCBieXRlIGZpZWxkIGNiIHRvIHN0b3JlIGd2ZSBzcGVjaWZpYyBkYXRhLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtMjY1LVx0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzoyNjY6XHRYU0tfQ0hFQ0tfUFJJVl9UWVBFKHN0cnVjdCBndmVfeGRwX2J1ZmYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtMjY3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jPTUxNT1zdGF0aWMgdm9pZCBndmVfcnhfc2tiX2h3dHN0YW1wKHN0cnVjdCBndmVfcnhfcmluZyAqcngsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNTI0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6NTI1OmludCBndmVfeGRwX3J4X3RpbWVzdGFtcChjb25zdCBzdHJ1Y3QgeGRwX21kICpfY3R4LCB1NjQgKnRpbWVzdGFtcClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTUyNi17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo1Mjc6XHRjb25zdCBzdHJ1Y3QgZ3ZlX3hkcF9idWZmICpjdHggPSAodm9pZCAqKV9jdHg7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy01MjgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM9NjExPXN0YXRpYyBpbnQgZ3ZlX3J4X2FwcGVuZF9mcmFncyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNjQ5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6NjUwOnN0YXRpYyBpbnQgZ3ZlX3hkcF90eF9kcW8oc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNjUxLVx0XHRcdCAgc3RydWN0IHhkcF9idWZmICp4ZHApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNjY0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6NjY1Olx0dHhfcWlkID0gZ3ZlX3hkcF90eF9xdWV1ZV9pZChwcml2LCByeC1cdTAwM2VxX251bSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy02NjYtXHR0eCA9IFx1MDAyNnByaXYtXHUwMDNldHhbdHhfcWlkXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTY2Ny1cdHNwaW5fbG9jayhcdTAwMjZ0eC1cdTAwM2VkcW9fdHgueGRwX2xvY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6NjY4Olx0ZXJyID0gZ3ZlX3hkcF94bWl0X29uZV9kcW8ocHJpdiwgdHgsIHhkcGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNjY5LVx0c3Bpbl91bmxvY2soXHUwMDI2dHgtXHUwMDNlZHFvX3R4LnhkcF9sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYz02NzQ9c3RhdGljIHZvaWQgZ3ZlX3hza19kb25lX2RxbyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBndmVfcnhfcmluZyAqcngsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNjg0LVx0Y2FzZSBYRFBfVFg6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo2ODU6XHRcdGlmICh1bmxpa2VseShndmVfeGRwX3R4X2Rxbyhwcml2LCByeCwgeGRwKSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy02ODYtXHRcdFx0Z290byBlcnI7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNzA4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6NzA5OnN0YXRpYyB2b2lkIGd2ZV94ZHBfZG9uZV9kcW8oc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNzEwLVx0XHRcdCAgICAgc3RydWN0IHhkcF9idWZmICp4ZHAsIHN0cnVjdCBicGZfcHJvZyAqeHByb2csXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNzIxLVx0Y2FzZSBYRFBfVFg6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo3MjI6XHRcdGVyciA9IGd2ZV94ZHBfdHhfZHFvKHByaXYsIHJ4LCB4ZHApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNzIzLVx0XHRpZiAodW5saWtlbHkoZXJyKSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYz03NTA9c3RhdGljIGludCBndmVfcnhfeHNrX2RxbyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBndmVfcnhfcmluZyAqcngsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNzU3LVx0c3RydWN0IGd2ZV9wcml2ICpwcml2ID0gcngtXHUwMDNlZ3ZlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6NzU4Olx0c3RydWN0IGd2ZV94ZHBfYnVmZiAqZ3ZlX3hkcDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTc1OS1cdGludCB4ZHBfYWN0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTc2My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjc2NDpcdGd2ZV94ZHAgPSAodm9pZCAqKXhkcDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjc2NTpcdGd2ZV94ZHAtXHUwMDNlZ3ZlID0gcHJpdjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjc2NjpcdGd2ZV94ZHAtXHUwMDNlY29tcGxfZGVzYyA9IGNvbXBsX2Rlc2M7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy03NjctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM9ODIxPXN0YXRpYyBpbnQgZ3ZlX3J4X2RxbyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBndmVfcnhfcmluZyAqcngsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtOTI3LVx0aWYgKHhwcm9nKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo5Mjg6XHRcdHN0cnVjdCBndmVfeGRwX2J1ZmYgZ3ZlX3hkcDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTkyOS1cdFx0dm9pZCAqb2xkX2RhdGE7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtOTMxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6OTMyOlx0XHR4ZHBfaW5pdF9idWZmKFx1MDAyNmd2ZV94ZHAueGRwLCBidWZfc3RhdGUtXHUwMDNlcGFnZV9pbmZvLmJ1Zl9zaXplLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtOTMzLVx0XHRcdCAgICAgIFx1MDAyNnJ4LVx1MDAzZXhkcF9yeHEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6OTM0Olx0XHR4ZHBfcHJlcGFyZV9idWZmKFx1MDAyNmd2ZV94ZHAueGRwLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtOTM1LVx0XHRcdFx0IGJ1Zl9zdGF0ZS1cdTAwM2VwYWdlX2luZm8ucGFnZV9hZGRyZXNzICYjNDM7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtOTM4LVx0XHRcdFx0IGJ1Zl9sZW4sIGZhbHNlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjkzOTpcdFx0Z3ZlX3hkcC5ndmUgPSBwcml2O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6OTQwOlx0XHRndmVfeGRwLmNvbXBsX2Rlc2MgPSBjb21wbF9kZXNjO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtOTQxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6OTQyOlx0XHRvbGRfZGF0YSA9IGd2ZV94ZHAueGRwLmRhdGE7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo5NDM6XHRcdHhkcF9hY3QgPSBicGZfcHJvZ19ydW5feGRwKHhwcm9nLCBcdTAwMjZndmVfeGRwLnhkcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo5NDQ6XHRcdGJ1Zl9zdGF0ZS1cdTAwM2VwYWdlX2luZm8ucGFkICYjNDM7PSBndmVfeGRwLnhkcC5kYXRhIC0gb2xkX2RhdGE7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo5NDU6XHRcdGJ1Zl9sZW4gPSBndmVfeGRwLnhkcC5kYXRhX2VuZCAtIGd2ZV94ZHAueGRwLmRhdGE7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy05NDYtXHRcdGlmICh4ZHBfYWN0ICE9IFhEUF9QQVNTKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo5NDc6XHRcdFx0Z3ZlX3hkcF9kb25lX2Rxbyhwcml2LCByeCwgXHUwMDI2Z3ZlX3hkcC54ZHAsIHhwcm9nLCB4ZHBfYWN0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtOTQ4LVx0XHRcdFx0XHQgYnVmX3N0YXRlKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYz0xMDkxPWludCBndmVfcnhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBpbnQgYnVkZ2V0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTExODgtXHRpZiAoeGRwX3R4cyAhPSByeC1cdTAwM2V4ZHBfYWN0aW9uc1tYRFBfVFhdKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6MTE4OTpcdFx0Z3ZlX3hkcF90eF9mbHVzaF9kcW8ocHJpdiwgcngtXHUwMDNlcV9udW0pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtMTE5MC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eC5jPTE2PXN0YXRpYyBpbmxpbmUgdm9pZCBndmVfdHhfcHV0X2Rvb3JiZWxsKHN0cnVjdCBndmVfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eC5jLTIyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYzoyMzp2b2lkIGd2ZV94ZHBfdHhfZmx1c2goc3RydWN0IGd2ZV9wcml2ICpwcml2LCB1MzIgeGRwX3FpZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmMtMjQte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYzoyNTpcdHUzMiB0eF9xaWQgPSBndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsIHhkcF9xaWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYy0yNi1cdHN0cnVjdCBndmVfdHhfcmluZyAqdHggPSBcdTAwMjZwcml2LVx1MDAzZXR4W3R4X3FpZF07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYz03Nzc9c3RhdGljIGludCBndmVfdHhfZmlsbF94ZHAoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX3R4X3JpbmcgKnR4LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmMtODIzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYzo4MjQ6aW50IGd2ZV94ZHBfeG1pdF9ncWkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG4sIHN0cnVjdCB4ZHBfZnJhbWUgKipmcmFtZXMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eC5jLTgyNS1cdFx0ICAgICB1MzIgZmxhZ3MpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYy04MzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eC5jOjgzNzpcdHFpZCA9IGd2ZV94ZHBfdHhfcXVldWVfaWQocHJpdixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmMtODM4LVx0XHRcdFx0ICBzbXBfcHJvY2Vzc29yX2lkKCkgJSBwcml2LVx1MDAzZXR4X2NmZy5udW1feGRwX3F1ZXVlcyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYy04NDMtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYzo4NDQ6XHRcdGVyciA9IGd2ZV94ZHBfeG1pdF9vbmUocHJpdiwgdHgsIGZyYW1lc1tpXS1cdTAwM2VkYXRhLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYy04NDUtXHRcdFx0XHQgICAgICAgZnJhbWVzW2ldLVx1MDAzZWxlbiwgZnJhbWVzW2ldKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eC5jLTg2Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmM6ODYzOmludCBndmVfeGRwX3htaXRfb25lKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV90eF9yaW5nICp0eCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmMtODY0LVx0XHQgICAgIHZvaWQgKmRhdGEsIGludCBsZW4sIHZvaWQgKmZyYW1lX3ApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYz05NzE9aW50IGd2ZV94c2tfdHhfcG9sbChzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqcnhfYmxvY2ssIGludCBidWRnZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYy05NzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eC5jOjk3ODpcdHR4ID0gXHUwMDI2cHJpdi1cdTAwM2V0eFtndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsIHJ4LVx1MDAzZXFfbnVtKV07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eC5jLTk3OS1cdGlmICh0eC1cdTAwM2V4c2tfcG9vbCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmMtOTkxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYzo5OTI6Ym9vbCBndmVfeGRwX3BvbGwoc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBpbnQgYnVkZ2V0KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYy05OTMte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jPTEwMj1zdGF0aWMgYm9vbCBndmVfaGFzX3BlbmRpbmdfcGFja2V0KHN0cnVjdCBndmVfdHhfcmluZyAqdHgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmMtMTE0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmM6MTE1OnZvaWQgZ3ZlX3hkcF90eF9mbHVzaF9kcW8oc3RydWN0IGd2ZV9wcml2ICpwcml2LCB1MzIgeGRwX3FpZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTExNi17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYzoxMTc6XHR1MzIgdHhfcWlkID0gZ3ZlX3hkcF90eF9xdWV1ZV9pZChwcml2LCB4ZHBfcWlkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTExOC1cdHN0cnVjdCBndmVfdHhfcmluZyAqdHggPSBcdTAwMjZwcml2LVx1MDAzZXR4W3R4X3FpZF07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmM9MTUxMD1ib29sIGd2ZV94c2tfdHhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKnJ4X2Jsb2NrLCBpbnQgYnVkZ2V0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE1MTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYzoxNTE2Olx0dHggPSBcdTAwMjZwcml2LVx1MDAzZXR4W2d2ZV94ZHBfdHhfcXVldWVfaWQocHJpdiwgcngtXHUwMDNlcV9udW0pXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE1MTctXHRpZiAodHgtXHUwMDNleHNrX3Bvb2wpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmMtMTUyMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jOjE1MjM6Ym9vbCBndmVfeGRwX3BvbGxfZHFvKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpibG9jaylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE1MjQte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE1MzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYzoxNTM2OmludCBndmVfeGRwX3htaXRfb25lX2RxbyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBndmVfdHhfcmluZyAqdHgsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYy0xNTM3LVx0XHRcdCBzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE1ODItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYzoxNTgzOmludCBndmVfeGRwX3htaXRfZHFvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuLCBzdHJ1Y3QgeGRwX2ZyYW1lICoqZnJhbWVzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmMtMTU4NC1cdFx0ICAgICB1MzIgZmxhZ3MpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmMtMTU5Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jOjE1OTM6XHRxaWQgPSBndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYy0xNTk0LVx0XHRcdFx0ICBzbXBfcHJvY2Vzc29yX2lkKCkgJSBwcml2LVx1MDAzZXR4X2NmZy5udW1feGRwX3F1ZXVlcyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmMtMTU5OS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG47IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYzoxNjAwOlx0XHRlcnIgPSBndmVfeGRwX3htaXRfb25lX2Rxbyhwcml2LCB0eCwgZnJhbWVzW2ldKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE2MDEtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDkwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJZGVudGlmeWluZyBhbmQgUHJpb3JpdGl6aW5nIEVudHJ5IFBvaW50cyBmb3IgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgbW9zdCBzdWl0YWJsZSBlbnRyeSBwb2ludHMgZm9yIHRoaXMgYW5hbHlzaXMsIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBpbnN0cnVjdGlvbnMuIEkmIzM5O20gbG9va2luZyBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4KCkluaXRpYWxseSwgSSBpZGVudGlmaWVkIGEgZmV3IGtleSBlbnRyeSBwb2ludHM6IGBndmVfeGRwYCAod2hpY2ggaW50ZXJuYWxseSBjYWxscyBgZ3ZlX3hza19wb29sX2VuYWJsZWAgYW5kIGBndmVfeHNrX3Bvb2xfZGlzYWJsZWApLCBgZ3ZlX3hkcF94bWl0YCwgYGd2ZV94c2tfd2FrZXVwYCwgYW5kIGBndmVfbmFwaV9wb2xsX2Rxb2AgKHdoaWNoIGNhbGxzIGBndmVfcnhfcG9sbF9kcW9gKS4gQnV0LCB0aGUgY2FsbCBncmFwaCBpcyBhIGJpdCBtb3JlIGludHJpY2F0ZSB0aGFuIHRoYXQsIHNvIEkgZm9jdXNlZCBvbjogYGd2ZV94ZHBgLCBgZ3ZlX3hza193YWtldXBgLCBgZ3ZlX25hcGlfcG9sbF9kcW9gLCBhbmQgYGd2ZV9yeF9wb2xsX2Rxb2AuCgpOb3csIHRoZSBpbnN0cnVjdGlvbnMgc3Ryb25nbHkgc3VnZ2VzdCBwcmVmZXJyaW5nIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiAgYGd2ZV9yeF9wb2xsX2Rxb2AgaW1tZWRpYXRlbHkgY2F1Z2h0IG15IGV5ZSBiZWNhdXNlIGl0IGlzIG5vbi1zdGF0aWMuIExldCBtZSBjb25maXJtIHRoZSBzaWduYXR1cmU6IGBpbnQgZ3ZlX3J4X3BvbGxfZHFvKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpibG9jaywgaW50IGJ1ZGdldClgLiBDb25maXJtZWQuCgpgZ3ZlX3hkcGAsIHRob3VnaCBhY2Nlc3NpYmxlIHZpYSBgLm5kb19icGZgIGFuZCBzeXprYWxsZXIgKHRocm91Z2ggdGhlIGBicGZgIHN5c2NhbGwgb3IgYG5ldGxpbmtgIFhEUCBzZXR1cCksIGlzIHVuZm9ydHVuYXRlbHkgc3RhdGljLiBUaGUgaW5zdHJ1Y3Rpb25zIGNsZWFybHkgZmF2b3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHNvIGBndmVfeGRwYCBpcyBsZXNzIGlkZWFsLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgc3RhdGljIG5hdHVyZSBvZiBgZ3ZlX3hza19wb29sX2VuYWJsZWAuIFllcywgaXQgaXMgc3RhdGljLgoKT2theSwgbGV0JiMzOTtzIGV4cGFuZCBteSBzZWFyY2ggZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBJIHNlZSBhIGZldyBvcHRpb25zOiBgZ3ZlX3hkcF94bWl0X2Rxb2AsIGBndmVfeGRwX3htaXRfZ3FpYCwgYGd2ZV94ZHBfeG1pdF9vbmVgLCBgZ3ZlX3hkcF90eF9mbHVzaGAsIGBndmVfeGRwX3htaXRfb25lX2Rxb2AsIGBndmVfeGRwX3BvbGxgLCBhbmQgYGd2ZV94c2tfdHhfcG9sbGAuIFRoZXNlIGFyZSBhbHNvIG5vbi1zdGF0aWMgYnV0IEkmIzM5O2xsIGhvbGQgdGhlbSBhcyBzZWNvbmRhcnkgY2FuZGlkYXRlcy4KCkNvbnNpZGVyaW5nIHRoZSBwYXRjaCBtb2RpZmljYXRpb25zLCBmb2N1c2luZyBvbiB0aGUgb25lcyB3aGljaCBhcmUgY2hhbmdlZCBtaWdodCBiZSBhIGJldHRlciBpZGVhLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGd2ZV94c2tfcG9vbF9lbmFibGVgLCBgZ3ZlX3hza19wb29sX2Rpc2FibGVgLCBgZ3ZlX3J4X3Jlc2V0X3JpbmdfZHFvYCwgYGd2ZV9yeF9kcW9gLCBhbmQgYGd2ZV9yeF9wb2xsX2Rxb2AuIFRoaXMgc3Ryb25nbHkgcmVpbmZvcmNlcyBgZ3ZlX3J4X3BvbGxfZHFvYCBhcyBhIGdvb2QgdGFyZ2V0LgoKTm93LCB0aGUgcXVlc3Rpb24gaXMgYWJvdXQgcmVhY2hhYmlsaXR5LCBzcGVjaWZpY2FsbHkgd2l0aGluIEdDRSBhbmQgUUVNVS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGluc3RydWN0aW9ucyBzdGF0ZSB0aGF0IGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSBhcmUgcHJvYmxlbWF0aWMuICBHVkUgaXMgYSB2aXJ0dWFsIE5JQyB1c2VkIGluIEdDRSwgYW5kIHNpbmNlIHN5emthbGxlciBydW5zIG9uIEdDRSwgdGhhdCYjMzk7cyBwZXJmZWN0ISAgVGhlIGRyaXZlciB3aWxsIGJlIHByZXNlbnQgYW5kIGFjdGl2ZS4gR1ZFIGlzIGEgUENJIGRldmljZSwgYnV0IGl0IGlzIGF2YWlsYWJsZS4gVGhlIEdDRSBWTXMgaGF2ZSBHVkUgYXMgdGhlIHByaW1hcnkgbmV0d29yayBpbnRlcmZhY2UsIHNvIGl0JiMzOTtzIGxvYWRlZCBhbmQgcHJlc2VudC4gU3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IGluc3RhbnRpYXRlIHRoZSBkZXZpY2UsIGl0JiMzOTtzIGEgcHJpbWFyeSBpbnRlcmZhY2UuIFRoZXJlZm9yZSwgYGd2ZV9yeF9wb2xsX2Rxb2AgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlLgoKU28sIGBndmVfcnhfcG9sbF9kcW9gIGlzIG15IHByaW1hcnkgZm9jdXMuIEkgd2lsbCBkb3VibGUtY2hlY2sgaXRzIG5vbi1zdGF0aWMgbmF0dXJlIG9uZSBsYXN0IHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBndmVfcnhfcG9sbF9kcW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9kcW8uaD00Mj1ib29sIGd2ZV94c2tfdHhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBpbnQgYnVkZ2V0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Rxby5oOjQzOmludCBndmVfcnhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBpbnQgYnVkZ2V0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Rxby5oLTQ0LWludCBndmVfdHhfYWxsb2NfcmluZ3NfZHFvKHN0cnVjdCBndmVfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYz0xMDU1PXN0YXRpYyBpbnQgZ3ZlX3J4X2NvbXBsZXRlX3NrYihzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtMTA5MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjEwOTE6aW50IGd2ZV9yeF9wb2xsX2RxbyhzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqYmxvY2ssIGludCBidWRnZXQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy0xMDkyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyODIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIElkZW50aWZ5aW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZ3ZlX3J4X3BvbGxfZHFvYCwgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgbm9uLXN0YXRpYywgZ290IHRoYXQuIE5vdywgd2hhdCBhYm91dCBgZ3ZlX3hkcGA/IEFoLCByaWdodCwgdGhhdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbi4gSG1tLCBpcyB0aGVyZSBhbnkgKm5vbi1zdGF0aWMqIGNvdW50ZXJwYXJ0IHRoYXQgY2FsbHMgYGd2ZV94c2tfcG9vbF9lbmFibGVgPyBObywgaXQmIzM5O3MgY2FsbGVkIGRpcmVjdGx5IGZyb20gd2l0aGluIGBndmVfeGRwYC4gTWFrZXMgc2Vuc2UuIEFscmlnaHQsIEkmIzM5O2xsIGFkZCBgZ3ZlX3J4X3BvbGxfZHFvYCB0byBteSBGb2N1c1N5bWJvbHMgbGlzdCDigJMgdGhhdCBzZWVtcyBpbXBvcnRhbnQuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlc2UgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFRpbWUgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIGNvbmZpZ3MuIEkgYWxyZWFkeSBzZWUgYE5FVF9WRU5ET1JfR09PR0xFYCBhbmQgYEdWRWAuLi5idXQgd2FpdCBhIHNlY29uZC4gRG9lcyBlbmFibGluZyBgR1ZFYCBpdHNlbGYgcHVsbCBpbiBkZXBlbmRlbmNpZXMgbGlrZSBgQlBGX1NZU0NBTExgIG9yIGBYRFBfU09DS0VUU2A/IFRoZSBwYXRjaCBJJiMzOTttIGV4YW1pbmluZyBtb2RpZmllcyBgZ3ZlX3hza19wb29sX2VuYWJsZWAsIHdoaWNoLCBpZiBJIHJlY2FsbCwgZGVhbHMgd2l0aCBgeHNrX3Bvb2xfZG1hX3VubWFwYCwgYHhza19nZXRfcG9vbF9mcm9tX3FpZGAsIGFuZCBhbGwgdGhhdCBYRFAtcmVsYXRlZCBzdHVmZi4gU28sIGl0JiMzOTtzIHdvcnRoIGRvdWJsZS1jaGVja2luZyB0aGF0IGBYRFBfU09DS0VUU2AgaXMgYSByZXF1aXJlbWVudCBoZXJlLiBOZWVkIHRvIGNvbmZpcm0gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eHNrX3Bvb2xfZG1hX3VubWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX3hkcC5jPTIxPXN0YXRpYyBpbnQgdHNuZXBfeGRwX2VuYWJsZV9wb29sKHN0cnVjdCB0c25lcF9hZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX3hkcC5jLTQ5LVx0aWYgKHJldHZhbCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfeGRwLmM6NTA6XHRcdHhza19wb29sX2RtYV91bm1hcChwb29sLCBETUFfQVRUUl9TS0lQX0NQVV9TWU5DKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX3hkcC5jLTUxLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX3hkcC5jPTU4PXN0YXRpYyBpbnQgdHNuZXBfeGRwX2Rpc2FibGVfcG9vbChzdHJ1Y3QgdHNuZXBfYWRhcHRlciAqYWRhcHRlciwgdTE2IHF1ZXVlX2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX3hkcC5jLTc0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfeGRwLmM6NzU6XHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwgRE1BX0FUVFJfU0tJUF9DUFVfU1lOQyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF94ZHAuYy03Ni1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTIteHNrLmM9MTczPXN0YXRpYyBpbnQgZHBhYTJfeHNrX2Rpc2FibGVfcG9vbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcWlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi14c2suYy0xODktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTIteHNrLmM6MTkwOlx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXhzay5jLTE5MS1cdGVyciA9IHhkcF9yeHFfaW5mb19yZWdfbWVtX21vZGVsKFx1MDAyNmNoLVx1MDAzZXhkcF9yeHEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXhzay5jPTIyMD1zdGF0aWMgaW50IGRwYWEyX3hza19lbmFibGVfcG9vbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi14c2suYy0yOTQtZXJyX21lbV9tb2RlbDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi14c2suYzoyOTU6XHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwgMCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTIteHNrLmMtMjk2LWVycl9kbWFfdW5tYXA6XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9NDU2MT1zdGF0aWMgaW50IGZlY19lbmFibGVfeHNrX3Bvb2woc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00NTg0LVx0aWYgKGVycikge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6NDU4NTpcdFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNDU4Ni1cdFx0cmV0dXJuIGVycjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYz00NTkyPXN0YXRpYyBpbnQgZmVjX2Rpc2FibGVfeHNrX3Bvb2woc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00NjAxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6NDYwMjpcdFx0eHNrX3Bvb2xfZG1hX3VubWFwKG9sZF9wb29sLCAwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTQ2MDMtXHRcdHJ4cS1cdTAwM2V4c2tfcG9vbCA9IE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNDYxMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjQ2MTM6XHR4c2tfcG9vbF9kbWFfdW5tYXAob2xkX3Bvb2wsIDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNDYxNC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MTYyOT1zdGF0aWMgaW50IGd2ZV94c2tfcG9vbF9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTY3MC1cdGNsZWFyX2JpdChxaWQsIHByaXYtXHUwMDNleHNrX3Bvb2xzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxNjcxOlx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTY3Mi1cdFx0XHQgICBETUFfQVRUUl9TS0lQX0NQVV9TWU5DIHxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MTY3Nz1zdGF0aWMgaW50IGd2ZV94c2tfcG9vbF9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE3MjYtXHRpZiAocG9vbClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxNzI3Olx0XHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xNzI4LVx0XHRcdFx0ICAgRE1BX0FUVFJfU0tJUF9DUFVfU1lOQyB8XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jPTEzOD1zdGF0aWMgaW50IGk0MGVfeHNrX3Bvb2xfZGlzYWJsZShzdHJ1Y3QgaTQwZV92c2kgKnZzaSwgdTE2IHFpZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfeHNrLmMtMTU3LVx0Y2xlYXJfYml0KHFpZCwgdnNpLVx1MDAzZWFmX3hkcF96Y19xcHMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jOjE1ODpcdHhza19wb29sX2RtYV91bm1hcChwb29sLCBJNDBFX1JYX0RNQV9BVFRSKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suYy0xNTktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV94c2suYz0xMjQ9c3RhdGljIGludCBpY2VfeHNrX3Bvb2xfZGlzYWJsZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1MTYgcWlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfeHNrLmMtMTMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV94c2suYzoxMzE6XHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwgSUNFX1JYX0RNQV9BVFRSKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfeHNrLmMtMTMyLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfeHNrLmM9OTc9c3RhdGljIGludCBpZ2JfeHNrX3Bvb2xfZW5hYmxlKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX3hzay5jLTEzMC1cdFx0aWYgKGVycikge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl94c2suYzoxMzE6XHRcdFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIElHQl9SWF9ETUFfQVRUUik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX3hzay5jLTEzMi1cdFx0XHRyZXR1cm4gZXJyO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfeHNrLmM9MTM5PXN0YXRpYyBpbnQgaWdiX3hza19wb29sX2Rpc2FibGUoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1MTYgcWlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfeHNrLmMtMTU0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl94c2suYzoxNTU6XHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwgSUdCX1JYX0RNQV9BVFRSKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfeHNrLmMtMTU2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfeGRwLmM9NTY9c3RhdGljIGludCBpZ2NfeGRwX2VuYWJsZV9wb29sKHN0cnVjdCBpZ2NfYWRhcHRlciAqYWRhcHRlcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX3hkcC5jLTEwOS1cdFx0aWYgKGVycikge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY194ZHAuYzoxMTA6XHRcdFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIElHQ19SWF9ETUFfQVRUUik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX3hkcC5jLTExMS1cdFx0XHRyZXR1cm4gZXJyO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfeGRwLmM9MTE4PXN0YXRpYyBpbnQgaWdjX3hkcF9kaXNhYmxlX3Bvb2woc3RydWN0IGlnY19hZGFwdGVyICphZGFwdGVyLCB1MTYgcXVldWVfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY194ZHAuYy0xNDUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX3hkcC5jOjE0NjpcdHhza19wb29sX2RtYV91bm1hcChwb29sLCBJR0NfUlhfRE1BX0FUVFIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY194ZHAuYy0xNDctXHRjbGVhcl9iaXQoSUdDX1JJTkdfRkxBR19BRl9YRFBfWkMsIFx1MDAyNnJ4X3JpbmctXHUwMDNlZmxhZ3MpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jPTIzPXN0YXRpYyBpbnQgaXhnYmVfeHNrX3Bvb2xfZW5hYmxlKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jLTU2LVx0XHRcdGNsZWFyX2JpdChxaWQsIGFkYXB0ZXItXHUwMDNlYWZfeGRwX3pjX3Fwcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV94c2suYzo1NzpcdFx0XHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwgSVhHQkVfUlhfRE1BX0FUVFIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeHNrLmMtNTgtXHRcdFx0cmV0dXJuIGVycjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV94c2suYz02NT1zdGF0aWMgaW50IGl4Z2JlX3hza19wb29sX2Rpc2FibGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBxaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeHNrLmMtODAtXHRjbGVhcl9iaXQocWlkLCBhZGFwdGVyLVx1MDAzZWFmX3hkcF96Y19xcHMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeHNrLmM6ODE6XHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwgSVhHQkVfUlhfRE1BX0FUVFIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeHNrLmMtODItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliZXRoL3hzay5jPTI1Nj1pbnQgbGliZXRoX3hza19zZXR1cF9wb29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBxaWQsIGJvb2wgZW5hYmxlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC94c2suYy0yNjctXHRlbHNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgveHNrLmM6MjY4Olx0XHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwgTElCRVRIX1hTS19ETUFfQVRUUik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgveHNrLmMtMjY5LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3hzay5jPTE0MD1pbnQgb3R4Ml94c2tfcG9vbF9kaXNhYmxlKHN0cnVjdCBvdHgyX25pYyAqcGYsIHUxNiBxaWR4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3hzay5jLTE1My1cdGNsZWFyX2JpdChxaWR4LCBwZi1cdTAwM2VhZl94ZHBfemNfcWlkeCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml94c2suYzoxNTQ6XHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwgRE1BX0FUVFJfU0tJUF9DUFVfU1lOQyB8IERNQV9BVFRSX1dFQUtfT1JERVJJTkcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfeHNrLmMtMTU1LVx0LyogUmVjb25maWd1cmUgUlNTIHRhYmxlIGFzICYjMzk7cWlkeCYjMzk7IG5vdyBuZWVkIHRvIGJlIHBhcnQgb2YgUlNTIG5vdyAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94c2svcG9vbC5jPTE3PXN0YXRpYyB2b2lkIG1seDVlX3hza191bm1hcF9wb29sKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94c2svcG9vbC5jLTE5LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94c2svcG9vbC5jOjIwOlx0cmV0dXJuIHhza19wb29sX2RtYV91bm1hcChwb29sLCBETUFfQVRUUl9TS0lQX0NQVV9TWU5DKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94c2svcG9vbC5jLTIxLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfeHNrLmM9OTk9c3RhdGljIHZvaWQgbmZwX25ldF94c2tfcG9vbF91bm1hcChzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X3hzay5jLTEwMS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfeHNrLmM6MTAyOlx0cmV0dXJuIHhza19wb29sX2RtYV91bm1hcChwb29sLCAwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF94c2suYy0xMDMtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY194ZHAuYz01OD1zdGF0aWMgaW50IHN0bW1hY194ZHBfZGlzYWJsZV9wb29sKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTE2IHF1ZXVlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY194ZHAuYy04MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY194ZHAuYzo4MTpcdHhza19wb29sX2RtYV91bm1hcChwb29sLCBTVE1NQUNfUlhfRE1BX0FUVFIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3hkcC5jLTgyLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jPTE1MjA9c3RhdGljIGludCBwcnVldGhfeHNrX3Bvb2xfZGlzYWJsZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIHUxNiBxdWV1ZV9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguYy0xNTQ5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmM6MTU1MDpcdHhza19wb29sX2RtYV91bm1hcChwb29sLCBQUlVFVEhfUlhfRE1BX0FUVFIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmMtMTU1MS1cdGVtYWMtXHUwMDNleHNrX3FpZCA9IC1FSU5WQUw7XG4tLVxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jPTU4ODU9c3RhdGljIGludCB2aXJ0bmV0X3hza19wb29sX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy01OTU5LWVycl9ycTpcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYzo1OTYwOlx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIDApO1xuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jLTU5NjEtZXJyX3hza19tYXA6XG4tLVxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jPTU5Njk9c3RhdGljIGludCB2aXJ0bmV0X3hza19wb29sX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHFpZClcbi0tXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMtNTk4Ny1cbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYzo1OTg4Olx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIDApO1xuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jLTU5ODktXG4tLVxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2Lmg9ODY9c3RhdGljIGlubGluZSB2b2lkIHhza19wb29sX2ZpbGxfY2Ioc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4tLVxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2LmgtOTEtXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaDo5MjpzdGF0aWMgaW5saW5lIHZvaWQgeHNrX3Bvb2xfZG1hX3VubWFwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2LmgtOTMtXHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGF0dHJzKVxuLS1cbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oPTQyMj1zdGF0aWMgaW5saW5lIHZvaWQgeHNrX3Bvb2xfZmlsbF9jYihzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbi0tXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaC00MjYtXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaDo0Mjc6c3RhdGljIGlubGluZSB2b2lkIHhza19wb29sX2RtYV91bm1hcChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oLTQyOC1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgYXR0cnMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDQxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBYRFBfU09DS0VUUyBEZXBlbmRlbmN5IGZvciB4c2tfcG9vbF9kbWFfdW5tYXAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHhza19wb29sX2RtYV91bm1hcGAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyB0byBtZSB0aGF0IGl0JiMzOTtzIHJlbHlpbmcgb24gYFhEUF9TT0NLRVRTYCBiZWluZyBwcm9wZXJseSBjb25maWd1cmVkIGZvciBpdCB0byBiZSBmdWxseSBmdW5jdGlvbmFsLiBUaGlzIGlzIGEgY29tbW9uIHNpdHVhdGlvbiwgcmlnaHQ/IEZ1bmN0aW9ucyBvZnRlbiBkZXBlbmQgb24gY2VydGFpbiB1bmRlcmx5aW5nIGZlYXR1cmUgZmxhZ3Mgb3IgY29uZmlndXJhdGlvbnMgdG8gd29yayBhcyBpbnRlbmRlZC4gVGhlIHRyYWNlIEkgaGF2ZSBpbmRpY2F0ZXMgdGhlIG5lZWQgZm9yIGBYRFBfU09DS0VUU2AuCgpOb3csIHRoZSB0aGluZyB0aGF0IHN0cmlrZXMgbWUgaXMgd2hlcmUgdGhpcyBgWERQX1NPQ0tFVFNgIGlzIGRlZmluZWQuIEl0JiMzOTtzIHR1Y2tlZCBhd2F5IGluIGBpbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaGAuIEdpdmVuIHRoYXQgdGhpcyBpcyBhIGNvcmUgcGllY2Ugb2YgWERQIHNvY2tldCBpbmZyYXN0cnVjdHVyZSwgaXQgbWFrZXMgc2Vuc2UgaXQmIzM5O3MgaW4gYSBoZWFkZXIgc3BlY2lmaWMgdG8gdGhhdC4KClNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBpbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYFhEUF9TT0NLRVRTYCBhY3R1YWxseSBlbnRhaWxzLCB3aGF0IGl0JiMzOTtzIGVuYWJsaW5nLCBhbmQgZXhhY3RseSBob3cgaXQgcmVsYXRlcyB0byB0aGlzIGB4c2tfcG9vbF9kbWFfdW5tYXBgIGZ1bmN0aW9uLiBJIGhhdmUgYSBmZWVsaW5nIEkmIzM5O2xsIGZpbmQgdGhlIGFuc3dlciB0byBteSBvcmlnaW5hbCBxdWVzdGlvbiBhYm91dCB0aGUgZnVuY3Rpb24mIzM5O3MgZnVsbCBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGF0IGluY2x1ZGUgZmlsZS4gSXQmIzM5O3MgYSBiaXQgb2YgZGV0ZWN0aXZlIHdvcmssIGJ1dCB0aGF0JiMzOTtzIGhvdyB5b3UgZmlndXJlIG91dCB0aGVzZSBkZXBlbmRlbmNpZXMgaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4gICAyOlx0LyogSW50ZXJmYWNlIGZvciBpbXBsZW1lbnRpbmcgQUZfWERQIHplcm8tY29weSBzdXBwb3J0IGluIGRyaXZlcnMuXG4gICAzOlx0ICogQ29weXJpZ2h0KGMpIDIwMjAgSW50ZWwgQ29ycG9yYXRpb24uXG4gICA0Olx0ICovXG4gICA1Olx0XG4gICA2Olx0I2lmbmRlZiBfTElOVVhfWERQX1NPQ0tfRFJWX0hcbiAgIDc6XHQjZGVmaW5lIF9MSU5VWF9YRFBfU09DS19EUlZfSFxuICAgODpcdFxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY25ldC94ZHBfc29jay5oXHUwMDNlXG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbmV0L3hza19idWZmX3Bvb2wuaFx1MDAzZVxuICAxMTpcdFxuICAxMjpcdCNkZWZpbmUgWERQX1VNRU1fTUlOX0NIVU5LX1NISUZUIDExXG4gIDEzOlx0I2RlZmluZSBYRFBfVU1FTV9NSU5fQ0hVTktfU0laRSAoMSBcdTAwM2NcdTAwM2MgWERQX1VNRU1fTUlOX0NIVU5LX1NISUZUKVxuICAxNDpcdFxuICAxNTpcdCNkZWZpbmUgTkVUREVWX1hEUF9BQ1RfWFNLXHQoTkVUREVWX1hEUF9BQ1RfQkFTSUMgfFx0XHRcXFxuICAxNjpcdFx0XHRcdFx0IE5FVERFVl9YRFBfQUNUX1JFRElSRUNUIHxcdFxcXG4gIDE3Olx0XHRcdFx0XHQgTkVUREVWX1hEUF9BQ1RfWFNLX1pFUk9DT1BZKVxuICAxODpcdFxuICAxOTpcdHN0cnVjdCB4c2tfY2JfZGVzYyB7XG4gIDIwOlx0XHR2b2lkICpzcmM7XG4gIDIxOlx0XHR1OCBvZmY7XG4gIDIyOlx0XHR1OCBieXRlcztcbiAgMjM6XHR9O1xuICAyNDpcdFxuICAyNTpcdCNpZmRlZiBDT05GSUdfWERQX1NPQ0tFVFNcbiAgMjY6XHRcbiAgMjc6XHR2b2lkIHhza190eF9jb21wbGV0ZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9lbnRyaWVzKTtcbiAgMjg6XHRib29sIHhza190eF9wZWVrX2Rlc2Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYyk7XG4gIDI5Olx0dTMyIHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heCk7XG4gIDMwOlx0dm9pZCB4c2tfdHhfcmVsZWFzZShzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCk7XG4gIDMxOlx0c3RydWN0IHhza19idWZmX3Bvb2wgKnhza19nZXRfcG9vbF9mcm9tX3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuICAzMjpcdFx0XHRcdFx0XHQgICAgdTE2IHF1ZXVlX2lkKTtcbiAgMzM6XHR2b2lkIHhza19zZXRfcnhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpO1xuICAzNDpcdHZvaWQgeHNrX3NldF90eF9uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCk7XG4gIDM1Olx0dm9pZCB4c2tfY2xlYXJfcnhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpO1xuICAzNjpcdHZvaWQgeHNrX2NsZWFyX3R4X25lZWRfd2FrZXVwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKTtcbiAgMzc6XHRib29sIHhza191c2VzX25lZWRfd2FrZXVwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKTtcbiAgMzg6XHRcbiAgMzk6XHRzdGF0aWMgaW5saW5lIHUzMiB4c2tfcG9vbF9nZXRfaGVhZHJvb20oc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG4gIDQwOlx0e1xuICA0MTpcdFx0cmV0dXJuIFhEUF9QQUNLRVRfSEVBRFJPT00gJiM0MzsgcG9vbC1cdTAwM2VoZWFkcm9vbTtcbiAgNDI6XHR9XG4gIDQzOlx0XG4gIDQ0Olx0c3RhdGljIGlubGluZSB1MzIgeHNrX3Bvb2xfZ2V0X3RhaWxyb29tKGJvb2wgbWJ1ZilcbiAgNDU6XHR7XG4gIDQ2Olx0XHRyZXR1cm4gbWJ1ZiA/IFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSkgOiAwO1xuICA0NzpcdH1cbiAgNDg6XHRcbiAgNDk6XHRzdGF0aWMgaW5saW5lIHUzMiB4c2tfcG9vbF9nZXRfY2h1bmtfc2l6ZShzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcbiAgNTA6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzQ2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBHVkUgUGF0Y2gqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCByZWxhdGVkIHRvIEdvb2dsZSYjMzk7cyBWaXJ0dWFsIEV0aGVybmV0IChHVkUpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgWERQIGFuZCBBRl9YRFAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBDT05GSUdfWERQX1NPQ0tFVFNgIGlzIGluZGVlZCByZXF1aXJlZCwgc28gSSYjMzk7bGwgYmUgYWRkaW5nIGBYRFBfU09DS0VUU2AgdG8gYEVuYWJsZUNvbmZpZ3NgLiBHaXZlbiB0aGUgY29udGV4dCwgaXQmIzM5O3MgY2xlYXIgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBHVkUsIHNvIG5hdHVyYWxseSwgYE5FVF9WRU5ET1JfR09PR0xFYCBhbmQgYEdWRWAgbmVlZCB0byBiZSBlbmFibGVkLiBBbmQgc2luY2Ugd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBYRFAsIGBCUEZfU1lTQ0FMTGAgaXMgcHJldHR5IG11Y2ggYSBnaXZlbi4KCkxldCYjMzk7cyBxdWlja2x5IHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgR1ZFYCwgc2luY2UgdGhpcyBpcyBhIGNyaXRpY2FsIGRyaXZlci4gQWhhLCBgUENJX01TSWAgYW5kIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgYXJlIHJlcXVpcmVkLiBUaGF0IGNvbmZpcm1zIHRoZSBuZWNlc3NhcnkgZm91bmRhdGlvbi4KCk5vdywgZm9jdXNpbmcgb24gdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvbiBmdW5jdGlvbiBjYWxscy4gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IGBndmVfcnhfcG9sbF9kcW9gIGFnYWluLCBhbmQgYW0gY2hlY2tpbmcgZm9yIHJlbGF0ZWQgbW9kaWZpY2F0aW9ucyB0byBvdGhlciBmdW5jdGlvbnMuCgpgZ3ZlX3J4X2Rxb2AsIGBndmVfcnhfcmVzZXRfcmluZ19kcW9gLCBgZ3ZlX3hza19wb29sX2VuYWJsZWAsIGBndmVfeHNrX3Bvb2xfZGlzYWJsZWAsIGFuZCBgZ3ZlX3hza193YWtldXBgIGFyZSBhbGwgc3RhdGljLCBzbyB0aGV5IHdvbiYjMzk7dCBiZSBleHBvc2VkIGFzIHN5bWJvbHMuIEJ1dCB3YWl0LCBgZ3ZlX25hcGlfcG9sbF9kcW9gIGlzIGFsc28gbm9uLXN0YXRpYy4gQmVjYXVzZSBvZiB0aGlzLCBJIG5lZWQgdG8gYWRkIGJvdGggYGd2ZV9yeF9wb2xsX2Rxb2AgYW5kIGBndmVfbmFwaV9wb2xsX2Rxb2AgYXMgc3ltYm9scy4KCkFscmlnaHQsIGxldCYjMzk7cyByZWNhcCB0aGUgcGF0Y2gmIzM5O3MgcmVhc29uaW5nLiBJdCYjMzk7cyBhZGRyZXNzaW5nIGEgYnVnIGluIGBndmVfcnhfcG9sbF9kcW9gIHdoZXJlIGB3b3JrX2RvbmVgIHdhc24mIzM5O3QgYmVpbmcgY29ycmVjdGx5IGluY3JlbWVudGVkIHVuZGVyIGEgc3BlY2lmaWMgY29uZGl0aW9uIGFuZCBpbmNvcnJlY3Qgb3IgbWlzc2luZyBjYWxscyB0byBgeHNrX3Bvb2xfZG1hX3VubWFwYCBpbiBgZ3ZlX3hza19wb29sX2VuYWJsZWAgYW5kIGBndmVfeHNrX3Bvb2xfZGlzYWJsZWAuIEFsc28sIHRoZXJlJiMzOTtzIGEgbWVtb3J5IGxlYWsgZml4ZWQgaW4gYGd2ZV9yeF9yZXNldF9yaW5nX2Rxb2AgYW5kIGBndmVfcnhfZHFvYCBieSBmcmVlaW5nIGB4c2tfYnVmZmAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsbHkgcmVsZXZhbnQgYW5kIGRlbW9uc3RyYWJseSByZWFjaGFibGUgaW4gR0NFIGVudmlyb25tZW50cy4gQ29uc2lkZXJpbmcgdGhhdCB0aGVzZSBmaXhlcyBoYXZlIHJlYWwtd29ybGQgaW1wYWN0LCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkIGhlcmUuCgpTbywganVzdCB0byBzdW1tYXJpemUgbXkgZmluZGluZ3MsIEkmIzM5O2xsIGJlIGVuYWJsaW5nIGBORVRfVkVORE9SX0dPT0dMRWAsIGBHVkVgLCBgWERQX1NPQ0tFVFNgLCBhbmQgYEJQRl9TWVNDQUxMYC4KClRoZSBrZXkgc3ltYm9scyBJJiMzOTttIGZvY3VzaW5nIG9uIGFyZSBgZ3ZlX3J4X3BvbGxfZHFvYCBhbmQgYGd2ZV9uYXBpX3BvbGxfZHFvYC4gSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcsIGp1c3QgdG8gYmUgc3VyZSwgdGhhdCBgZ3ZlX25hcGlfcG9sbF9kcW9gIGlzIGluZGVlZCBub24tc3RhdGljIGFuZCBleHBvc2VkIGFzIGEgc3ltYm9sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgZ3ZlX25hcGlfcG9sbF9kcW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9kcW8uaD0xMDc9Z3ZlX3NldF9pdHJfY29hbGVzY2VfdXNlY3NfZHFvKHN0cnVjdCBndmVfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9kcW8uaC0xMTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9kcW8uaDoxMTU6aW50IGd2ZV9uYXBpX3BvbGxfZHFvKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9kcW8uaC0xMTYtI2VuZGlmIC8qIF9HVkVfRFFPX0hfICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTM1Mz1pbnQgZ3ZlX25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTQxMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzo0MTE6aW50IGd2ZV9uYXBpX3BvbGxfZHFvKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy00MTIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTg2NgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBOb24tU3RhdGljIEZ1bmN0aW9uIFVzYWdlKioKCkFscmlnaHQsIHNvIGBndmVfbmFwaV9wb2xsX2Rxb2AgaXMgZGVmaW5pdGl2ZWx5IG5vbi1zdGF0aWMsIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIHJlbGF0ZWQgdG8gaXRzIGludGVyYWN0aW9uIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGRyaXZlci4gTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHdoZXRoZXIgYGd2ZV94ZHBfeG1pdF9kcW9gIGlzIGFsc28gZGVjbGFyZWQgYXMgbm9uLXN0YXRpYy4gVGhpcyBpcyBrZXksIGJlY2F1c2UgdGhlIG5vbi1zdGF0aWMgbmF0dXJlIG9mIHRoZXNlIGZ1bmN0aW9ucyBwbGF5cyBhIHNpZ25pZmljYW50IHJvbGUgaW4gaG93IHRoZSBkYXRhIHF1ZXVlIG9wZXJhdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgd2lkZXIgc3lzdGVtLiBUaGF0IGluZm9ybWF0aW9uIHdpbGwgaGVscCBkZXRlcm1pbmUgd2hhdCBhcmVhcyBvZiB0aGUgY29kZSBhcmUgYWZmZWN0ZWQgYnkgdGhpcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGd2ZV94ZHBfeG1pdF9kcW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oPTEyMjc9aW50IGd2ZV94ZHBfeG1pdF9ncWkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG4sIHN0cnVjdCB4ZHBfZnJhbWUgKipmcmFtZXMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTEyMjgtXHRcdCAgICAgdTMyIGZsYWdzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MTIyOTppbnQgZ3ZlX3hkcF94bWl0X2RxbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbiwgc3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMTIzMC1cdFx0ICAgICB1MzIgZmxhZ3MpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jPTE1MzY9aW50IGd2ZV94ZHBfeG1pdF9vbmVfZHFvKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV90eF9yaW5nICp0eCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYy0xNTgyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmM6MTU4MzppbnQgZ3ZlX3hkcF94bWl0X2RxbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbiwgc3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE1ODQtXHRcdCAgICAgdTMyIGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQ3MQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFkZGluZyBgZ3ZlX3hkcF94bWl0X2Rxb2AgYW5kIENoZWNraW5nIGBndmVfeGRwX3BvbGxfZHFvYCoqCgpSaWdodCwgc28gYGd2ZV94ZHBfeG1pdF9kcW9gIGlzIGRlZmluaXRlbHkgbm90IHN0YXRpYy4gTWFrZXMgcGVyZmVjdCBzZW5zZSwgZ2l2ZW4gaXRzIHJvbGUuIFNpbmNlIGl0IGRpcmVjdGx5IGRlYWxzIHdpdGggWERQIHRyYW5zbWlzc2lvbiB3aXRoaW4gdGhlIERRTyBmb3JtYXQsIGFuZCB0aGF0JiMzOTtzIHByZWNpc2VseSB3aGVyZSB3ZSYjMzk7dmUgYmVlbiBtYWtpbmcgbW9kaWZpY2F0aW9ucyBpbiBgZ3ZlX3J4X2Rxby5jYCwgaXTigJlzIGNsZWFyIEkgbmVlZCB0byBpbmNsdWRlIGl0IGluIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBJdOKAmXMgbG9naWNhbGx5IGNvbm5lY3RlZCBhbmQgY3J1Y2lhbCBmb3IgdGhlIGJpZ2dlciBwaWN0dXJlLiBXZSBoYXZlIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUga2VlcGluZyB0cmFjayBvZiBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyBEUU8gZm9ybWF0LgoKTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgc3RhdHVzIG9mIGBndmVfeGRwX3BvbGxfZHFvYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGF0IGZ1bmN0aW9uIGlzIHN0YXRpYyBvciBub3QuIFdlIGhhdmUgdG8gYmUgdGhvcm91Z2ggaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym9vbCBndmVfeGRwX3BvbGxfZHFvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZHFvLmg9NDA9Ym9vbCBndmVfdHhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBib29sIGRvX2NsZWFuKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Rxby5oOjQxOmJvb2wgZ3ZlX3hkcF9wb2xsX2RxbyhzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqYmxvY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZHFvLmgtNDItYm9vbCBndmVfeHNrX3R4X3BvbGxfZHFvKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpibG9jaywgaW50IGJ1ZGdldCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmM9MTUxMD1ib29sIGd2ZV94c2tfdHhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKnJ4X2Jsb2NrLCBpbnQgYnVkZ2V0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE1MjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYzoxNTIzOmJvb2wgZ3ZlX3hkcF9wb2xsX2RxbyhzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqYmxvY2spXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYy0xNTI0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxMzQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgR1ZFIFhEUCBQb2xsaW5nKioKCk9rYXksIHNvIGBndmVfeGRwX3BvbGxfZHFvYCBpcyBkZWZpbml0aXZlbHkgKm5vdCogYSBzdGF0aWMgc3ltYm9sLiBUaGF0JiMzOTtzIGEga2V5IHBvaW50LiBUaGlzIG1lYW5zLCB3aGVuIGNvbnNpZGVyaW5nIEZvY3VzU3ltYm9scywgd2UmIzM5O3JlIGRlZmluaXRlbHkgbG9va2luZyBhdDogYGd2ZV9yeF9wb2xsX2Rxb2AsIGBndmVfbmFwaV9wb2xsX2Rxb2AsIGFuZCwgY3J1Y2lhbGx5LCB0aGUgYGd2ZV94ZHBfcG9sbF9kcW9gIGZ1bmN0aW9uIHdlIGVzdGFibGlzaGVkIGFzIG5vbi1zdGF0aWMuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBORVRfVkVORE9SX0dPT0dMRWAsIGBHVkVgLCBgWERQX1NPQ0tFVFNgLCBhbmQgYEJQRl9TWVNDQUxMYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBCUEZfU1lTQ0FMTGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgY29udGV4dC4gVGhpcyByZXF1aXJlcyBhIGRlZXBlciBkaXZlIGludG8gaG93IHRoaXMgcmVsYXRlcyB0byBYRFAgYW5kIEdvb2dsZSYjMzk7cyBuZXR3b3JraW5nIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBJIHdpbGwgdmVyaWZ5IHRoYXQgdGhpcyBjb25maWd1cmF0aW9uIGlzIGNvcnJlY3RseSBzdXBwb3J0aW5nIHRoZSBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc1NzAKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipWZXJpZnlpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIGVCUEYqKgoKQWxyaWdodCwgdGhhdCBpbml0aWFsIGFzc2Vzc21lbnQgb2YgYEJQRl9TWVNDQUxMYCBzZWVtcyBzcG90LW9uLiBXZSYjMzk7cmUgZGVmaW5pdGVseSBvbiB0aGUgcmlnaHQgdHJhY2sgdGhlcmUuIE5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgd2UmIzM5O3ZlIGdvdCB0aGUgbmVjZXNzYXJ5IHN1cHBvcnQgZm9yIGBYRFBfU09DS0VUU2AgY29uZmlndXJlZCBjb3JyZWN0bHkuIEl0JiMzOTtzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoaXMgY29tcG9uZW50IGlzIGVuYWJsZWQsIHRvIGJlIGFibGUgdG8gcHJvY2VlZCBjb3JyZWN0bHkuIEdvdHRhIGRvdWJsZS1jaGVjayB0aG9zZSBmdW5kYW1lbnRhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRFBfU09DS0VUUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC94ZHAvS2NvbmZpZzoyOmNvbmZpZyBYRFBfU09DS0VUU1xubmV0L3hkcC9LY29uZmlnLTMtXHRib29sIFwmIzM0O1hEUCBzb2NrZXRzXCYjMzQ7XG4tLVxubmV0L3hkcC9LY29uZmlnLTktXG5uZXQveGRwL0tjb25maWc6MTA6Y29uZmlnIFhEUF9TT0NLRVRTX0RJQUdcbm5ldC94ZHAvS2NvbmZpZy0xMS1cdHRyaXN0YXRlIFwmIzM0O1hEUCBzb2NrZXRzOiBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzg3NgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb246CgoqKlhEUCBhbmQgTVNJIERlcGVuZGVuY3kgQ2hlY2sqKgoKUmlnaHQsIGBYRFBfU09DS0VUU2AgaXMgdGhlIHJpZ2h0IHBhdGggdG8gcHVyc3VlLCBjb25maXJtZWQuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCBkbyBJIG5lZWQgdG8gY29uY2VybiBteXNlbGYgd2l0aCBgUENJX01TSWA/IEFoLCB5ZXMsIGBHVkVgIGlzIGEga2V5IGNvbXBvbmVudCwgYW5kIGl0JiMzOTtzIGRlcGVuZGVudCBvbiBgUENJX01TSWAuIFRpbWUgdG8gdmVyaWZ5IGlmIGBQQ0lfTVNJYCBpcyBhY3R1YWxseSBhIGNvbmZpZ3VyYWJsZSBvcHRpb24uIE5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBkZXBlbmRlbmN5IGlzIHNvbWV0aGluZyBJIGNhbiBjb250cm9sLCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmV4cGVjdGVkIGJ1aWxkIGNvbmZsaWN0cy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyBhIGxlZ2l0aW1hdGUgY29uZmlnIHBhcmFtZXRlciBhbmQgaXNuJiMzOTt0IGJha2VkIGluLCB0aGF0IHdheSBJIGNhbiBzZXQgaXQgYXMgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUENJX01TSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS9LY29uZmlnPTQyPXNvdXJjZSBcJiMzNDtkcml2ZXJzL3BjaS9wY2llL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvcGNpL0tjb25maWctNDMtXG5kcml2ZXJzL3BjaS9LY29uZmlnOjQ0OmNvbmZpZyBQQ0lfTVNJXG5kcml2ZXJzL3BjaS9LY29uZmlnLTQ1LVx0Ym9vbCBcJiMzNDtNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdHMgKE1TSSBhbmQgTVNJLVgpXCYjMzQ7XG4tLVxuZHJpdmVycy9wY2kvS2NvbmZpZy01OC1cbmRyaXZlcnMvcGNpL0tjb25maWc6NTk6Y29uZmlnIFBDSV9NU0lfQVJDSF9GQUxMQkFDS1NcbmRyaXZlcnMvcGNpL0tjb25maWctNjAtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MjY5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uZmlybWluZyBDb25maWd1cmF0aW9uIGFuZCBFeHBsb3JpbmcgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHllcCwgbG9va3MgbGlrZSBteSBpbml0aWFsIGFzc2Vzc21lbnQgb24gYFBDSV9NU0lgIGlzIHNwb3Qtb24uIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggTWVzc2FnZSBTaWduYWxlZCBJbnRlcnJ1cHRzLCBhbmQgdGhhdCYjMzk7cyB0aGUgY29ycmVjdCBpbml0aWFsIHBhcmFtZXRlci4gTm93LCBiZWZvcmUgSSBtb3ZlIG9uLCBJIHdhbnQgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYFBUUF8xNTg4X0NMT0NLX09QVElPTkFMYCBpcyBhY3R1YWxseSBzZXQgYXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3IgaWYgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGVsc2UgYXQgcGxheS4gTmVlZCB0byBydWxlIHRoYXQgb3V0IGFzIGEgdmFyaWFibGUgYmVmb3JlIHByb2NlZWRpbmcuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL0tjb25maWc9OD1jb25maWcgUFRQXzE1ODhfQ0xPQ0tcbi0tXG5kcml2ZXJzL3B0cC9LY29uZmlnLTI5LVxuZHJpdmVycy9wdHAvS2NvbmZpZzozMDpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvcHRwL0tjb25maWctMzEtXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODU1NQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDI2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IExpbmUgb2YgUmVhc29uaW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24uIE5vdywgbGV0JiMzOTtzIHNlZSwgdGhlIGN1cnJlbnQgYWN0aXZlIGNvbmZpZ3VyYXRpb25zIGFyZTogYE5FVF9WRU5ET1JfR09PR0xFYCwgYEdWRWAsIGBYRFBfU09DS0VUU2AsIGBCUEZfU1lTQ0FMTGAsIGBQQ0lfTVNJYCwgYW5kIHRoYXQgYFBUUF8xNTg4X0NMT0NLX09QVElPTkFMYCBzZXR0aW5nLgoKV2FpdCBhIHNlY29uZCwgcmlnaHQsIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgaXMgYSAqdHJpc3RhdGUqIHZhcmlhYmxlLiBJdCYjMzk7cyBlaXRoZXIgc2VsZWN0ZWQgb3IgaXQgaGFzIGRlcGVuZGVuY2llcy4gQWgsIHRoZSBkZXBlbmRlbmNpZXMsICppdCBkZXBlbmRzIG9uIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAqLgoKTGV0JiMzOTtzIGNoZWNrIHRoZSBkZWZpbml0aW9uIGFnYWluOiBpdCYjMzk7cyBhIHRyaXN0YXRlLCBhbmQgdGhlIGRlZmF1bHQgaXMgJiMzOTt5JiMzOTsgKmlmKiBgUFRQXzE1ODhfQ0xPQ0tgIGlzICYjMzk7biYjMzk7LCBvdGhlcndpc2UgdGhlIGRlZmF1bHQgaXMgYFBUUF8xNTg4X0NMT0NLYC4gVGhlcmVmb3JlLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYFBUUF8xNTg4X0NMT0NLYCBpcyAmIzM5O3kmIzM5OywgJiMzOTttJiMzOTssIG9yICYjMzk7biYjMzk7LCBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgIGlzIGF1dG9tYXRpY2FsbHkgc2F0aXNmaWVkLiBTbywgd2hpbGUgaXQgd291bGRuJiMzOTt0IGh1cnQgdG8gZXhwbGljaXRseSBlbmFibGUgaXQsIGl0JiMzOTtzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkuIEl0JiMzOTtzIGF1dG9tYXRpY2FsbHkgdGFrZW4gY2FyZSBvZi4KCkFscmlnaHQsIHdoYXQmIzM5O3MgbmV4dD8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgd2hldGhlciBgUEFHRV9QT09MYCBpcyBhIGNvbmZpZ3VyYXRpb24gaXRlbSwgc2hvdWxkbiYjMzk7dCBJPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEFHRV9QT09MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ4Nz1jb25maWcgTkVUX0RFVkxJTktcbi0tXG5uZXQvS2NvbmZpZy00OTAtXG5uZXQvS2NvbmZpZzo0OTE6Y29uZmlnIFBBR0VfUE9PTFxubmV0L0tjb25maWctNDkyLVx0Ym9vbFxubmV0L0tjb25maWctNDkzLVxubmV0L0tjb25maWc6NDk0OmNvbmZpZyBQQUdFX1BPT0xfU1RBVFNcbm5ldC9LY29uZmlnLTQ5NS1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTI2NgoJCQkJCQkJb3V0cHV0OiAyODYKCQkJCQkJCXRob3VnaHRzOiAzMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgR1ZFIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IGRyaXZlciwgYEdWRWAuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBzb21lIGNyaXRpY2FsIGlzc3VlcyB3aXRoIEFGX1hEUCAoWERQIHNvY2tldHMpIHN1cHBvcnQuIFRoZSBrZXkgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBtZW1vcnkgbGVha3MgYW5kIERNQSB1bm1hcHBpbmcsIHdoaWNoIGFyZSBwcmltZSBzdXNwZWN0cyBmb3IgcmVsaWFiaWxpdHkgcHJvYmxlbXMgaW4gYW55IG5ldHdvcmsgZHJpdmVyLCBlc3BlY2lhbGx5IG9uZSBsaWtlIGBHVkVgIHRoYXQgaXMgdGhlIHByaW1hcnkgaW50ZXJmYWNlIGluIEdDRSBWTXMuIEkgc2VlIGZpeGVzIGluIGBndmVfcnhfcmVzZXRfcmluZ19kcW9gIGFuZCBgZ3ZlX3J4X2Rxb2AgdGhhdCBhcmUgY2xlYW5pbmcgdXAgYHhza19idWZmYCBjb3JyZWN0bHkgdG8gcHJldmVudCB0aGUgbGVhay4gQWxzbywgdGhlIGBndmVfcnhfcG9sbF9kcW9gIGZpeCBmb3IgYHdvcmtfZG9uZWAgaXMgZ29vZCB0byBzZWU7IHRoYXQga2luZCBvZiBzdWJ0bGUgb2ZmLWJ5LW9uZSBlcnJvciBjYW4gY2F1c2Ugc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gb3IgZXZlbiBpbnRlcm1pdHRlbnQgZGF0YSBsb3NzLCBlc3BlY2lhbGx5IHVuZGVyIGhlYXZ5IGxvYWQuIFRoZSBETUEgdW5tYXBwaW5nIGZpeGVzIGluIGBndmVfeHNrX3Bvb2xfZW5hYmxlYCBhbmQgYGd2ZV94c2tfcG9vbF9kaXNhYmxlYCBhcmUgY3J1Y2lhbCwgdG9vOyBnZXR0aW5nIHRob3NlIHJpZ2h0IGlzIGZ1bmRhbWVudGFsIGZvciBkYXRhIGludGVncml0eSBhbmQgaGFyZHdhcmUgcmVzb3VyY2UgbWFuYWdlbWVudC4KClRoZSBmYWN0IHRoYXQgdGhpcyB0b3VjaGVzIHRoZSBuZXR3b3JrIGRhdGFwYXRoIGFuZCBBRl9YRFAgc29ja2V0IGhhbmRsaW5nIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSBzeXprYWxsZXIgaXMgbW9zdCBsaWtlbHkgdG8gZmluZCB0aGVzZSBidWdzLiBJIGFudGljaXBhdGUgdGhpcyBwYXRjaCB3aWxsIGltcHJvdmUgdGhlIHN0YWJpbGl0eSBvZiBHQ0UgVk1zLCBhbmQgaXQmIzM5O3MgbmljZSB0aGF0IHRoZXkgYXJlIGFkZHJlc3NpbmcgQUZfWERQLgoKSSBhbHNvIG5vdGljZSB0aGF0IGBQQUdFX1BPT0xgIGlzIHNlbGVjdGVkIGJ5IGBHVkVgLCBzbyBJIGRvbiYjMzk7dCBuZWVkIHRvIHdvcnJ5IGFib3V0IG1hbnVhbGx5IGVuYWJsaW5nIGl0LiBNYWtlcyB0aGUgY29uZmlndXJhdGlvbiBzaW1wbGVyLgoKSSYjMzk7bGwgZm9ybXVsYXRlIHRoZSBmaW5hbCByZXNwb25zZSBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfVkVORE9SX0dPT0dMRSYjMzQ7LAogICAgJiMzNDtHVkUmIzM0OywKICAgICYjMzQ7WERQX1NPQ0tFVFMmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7UENJX01TSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2d2ZV9yeF9wb2xsX2RxbyYjMzQ7LAogICAgJiMzNDtndmVfbmFwaV9wb2xsX2RxbyYjMzQ7LAogICAgJiMzNDtndmVfeGRwX3BvbGxfZHFvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHb29nbGUgVmlydHVhbCBFdGhlcm5ldCAoZ3ZlKSBkcml2ZXIgdG8gZml4IGJ1Z3MgcmVsYXRlZCB0byBBRl9YRFAgKFhEUCBzb2NrZXRzKSBzdXBwb3J0LiBJdCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIGBndmVfcnhfcmVzZXRfcmluZ19kcW9gIGFuZCBgZ3ZlX3J4X2Rxb2AgYnkgcHJvcGVybHkgZnJlZWluZyBgeHNrX2J1ZmZgLiBJdCBhbHNvIGZpeGVzIGEgYnVnIGluIGBndmVfcnhfcG9sbF9kcW9gIHdoZXJlIGB3b3JrX2RvbmVgIHdhcyBub3QgaW5jcmVtZW50ZWQgY29ycmVjdGx5LCBhbmQgZml4ZXMgRE1BIHVubWFwcGluZyBpbiBgZ3ZlX3hza19wb29sX2VuYWJsZWAgYW5kIGBndmVfeHNrX3Bvb2xfZGlzYWJsZWAuIFRoZXNlIGNoYW5nZXMgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdCBvbiB0aGUgbmV0d29yayBkYXRhcGF0aCBhbmQgQUZfWERQIHNvY2tldCBoYW5kbGluZy4gVGhlIEdWRSBkcml2ZXIgaXMgdGhlIHByaW1hcnkgbmV0d29yayBpbnRlcmZhY2UgdXNlZCBpbiBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgVk1zLCB3aGVyZSBzeXprYWxsZXIgcnVucywgbWFraW5nIHRoZXNlIGNvZGUgcGF0aHMgaGlnaGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfVkVORE9SX0dPT0dMRSYjMzQ7LAogICAgJiMzNDtHVkUmIzM0OywKICAgICYjMzQ7WERQX1NPQ0tFVFMmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7UENJX01TSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2d2ZV9yeF9wb2xsX2RxbyYjMzQ7LAogICAgJiMzNDtndmVfbmFwaV9wb2xsX2RxbyYjMzQ7LAogICAgJiMzNDtndmVfeGRwX3BvbGxfZHFvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHb29nbGUgVmlydHVhbCBFdGhlcm5ldCAoZ3ZlKSBkcml2ZXIgdG8gZml4IGJ1Z3MgcmVsYXRlZCB0byBBRl9YRFAgKFhEUCBzb2NrZXRzKSBzdXBwb3J0LiBJdCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIGBndmVfcnhfcmVzZXRfcmluZ19kcW9gIGFuZCBgZ3ZlX3J4X2Rxb2AgYnkgcHJvcGVybHkgZnJlZWluZyBgeHNrX2J1ZmZgLiBJdCBhbHNvIGZpeGVzIGEgYnVnIGluIGBndmVfcnhfcG9sbF9kcW9gIHdoZXJlIGB3b3JrX2RvbmVgIHdhcyBub3QgaW5jcmVtZW50ZWQgY29ycmVjdGx5LCBhbmQgZml4ZXMgRE1BIHVubWFwcGluZyBpbiBgZ3ZlX3hza19wb29sX2VuYWJsZWAgYW5kIGBndmVfeHNrX3Bvb2xfZGlzYWJsZWAuIFRoZXNlIGNoYW5nZXMgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdCBvbiB0aGUgbmV0d29yayBkYXRhcGF0aCBhbmQgQUZfWERQIHNvY2tldCBoYW5kbGluZy4gVGhlIEdWRSBkcml2ZXIgaXMgdGhlIHByaW1hcnkgbmV0d29yayBpbnRlcmZhY2UgdXNlZCBpbiBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgVk1zLCB3aGVyZSBzeXprYWxsZXIgcnVucywgbWFraW5nIHRoZXNlIGNvZGUgcGF0aHMgaGlnaGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHb29nbGUgVmlydHVhbCBFdGhlcm5ldCAoZ3ZlKSBkcml2ZXIsIHNwZWNpZmljYWxseSBmaXhpbmcgWERQIHBvb2wgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIGxvZ2ljLCBOQVBJIGxvY2tpbmcgKHVzaW5nIG5hcGlfZGlzYWJsZV9sb2NrZWQvbmFwaV9lbmFibGVfbG9ja2VkKSwgbWVtb3J5IGxlYWtzIChmcmVlaW5nIHhza19idWZmKSwgYW5kIE5BUEkgYnVkZ2V0IGFjY291bnRpbmcgaW4gZ3ZlX3J4X3BvbGxfZHFvLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IHN0cnVjdHVyZSBwYWRkaW5nLCBvciBleHBvc2UgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgZGVhZGxvY2tzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgS01FTUxFQUsuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZkODg0MWZhMjY4MzRhOTE0Y2ZhNzhjYTI0YTc2OTIzYjhhYmU2MGEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxNSAwMDoxNzozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYwppbmRleCBlNGQ3OGFlNTJkYWZlLi5jY2FmNWY4NmExZTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jCkBAIC0xNjU0LDIwICYjNDM7MTY1NCwxOCBAQCBzdGF0aWMgaW50IGd2ZV94c2tfcG9vbF9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAoIXByaXYtJmd0O3hkcF9wcm9nIHx8ICFuZXRpZl9ydW5uaW5nKGRldikpCiAJCXJldHVybiAwOwogCi0JZXJyID0gZ3ZlX3JlZ194c2tfcG9vbChwcml2LCBkZXYsIHBvb2wsIHFpZCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfeHNrX3Bvb2xfZG1hX21hcHBlZDsKLQotCS8qIFN0b3AgYW5kIHN0YXJ0IFJEQSBxdWV1ZXMgdG8gcmVwb3N0IGJ1ZmZlcnMuICovCi0JaWYgKCFndmVfaXNfcXBsKHByaXYpKSB7CiYjNDM7CWlmIChndmVfaXNfcXBsKHByaXYpKSB7CiYjNDM7CQllcnIgPSBndmVfcmVnX3hza19wb29sKHByaXYsIGRldiwgcG9vbCwgcWlkKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBlcnJfeHNrX3Bvb2xfZG1hX21hcHBlZDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIFN0b3AgYW5kIHN0YXJ0IFJEQSBxdWV1ZXMgdG8gcmVwb3N0IGJ1ZmZlcnMuICovCiAJCWVyciA9IGd2ZV9jb25maWd1cmVfcmluZ3NfeGRwKHByaXYsIHByaXYtJmd0O3J4X2NmZy5udW1fcXVldWVzKTsKIAkJaWYgKGVycikKLQkJCWdvdG8gZXJyX3hza19wb29sX3JlZ2lzdGVyZWQ7CiYjNDM7CQkJZ290byBlcnJfeHNrX3Bvb2xfZG1hX21hcHBlZDsKIAl9CiAJcmV0dXJuIDA7CiAKLWVycl94c2tfcG9vbF9yZWdpc3RlcmVkOgotCWd2ZV91bnJlZ194c2tfcG9vbChwcml2LCBxaWQpOwogZXJyX3hza19wb29sX2RtYV9tYXBwZWQ6CiAJY2xlYXJfYml0KHFpZCwgcHJpdi0mZ3Q7eHNrX3Bvb2xzKTsKIAl4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwKQEAgLTE2ODMsNDIgJiM0MzsxNjgxLDM4IEBAIHN0YXRpYyBpbnQgZ3ZlX3hza19wb29sX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGlfcng7CiAJc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpX3R4OwogCXN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sOwomIzQzOwlpbnQgZXJyID0gMDsKIAlpbnQgdHhfcWlkOwotCWludCBlcnI7CiAKLQlpZiAocWlkICZndDs9IHByaXYtJmd0O3J4X2NmZy5udW1fcXVldWVzKQotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKHFpZCAmZ3Q7PSBwcml2LSZndDtyeF9jZmcubnVtX3F1ZXVlcykgewomIzQzOwkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gdW5tYXBfYW5kX3JldHVybjsKJiM0MzsJfQogCiAJY2xlYXJfYml0KHFpZCwgcHJpdi0mZ3Q7eHNrX3Bvb2xzKTsKIAotCXBvb2wgPSB4c2tfZ2V0X3Bvb2xfZnJvbV9xaWQoZGV2LCBxaWQpOwotCWlmIChwb29sKQotCQl4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwKLQkJCQkgICBETUFfQVRUUl9TS0lQX0NQVV9TWU5DIHwKLQkJCQkgICBETUFfQVRUUl9XRUFLX09SREVSSU5HKTsKLQogCWlmICghbmV0aWZfcnVubmluZyhkZXYpIHx8ICFwcml2LSZndDt0eF9jZmcubnVtX3hkcF9xdWV1ZXMpCi0JCXJldHVybiAwOwomIzQzOwkJZ290byB1bm1hcF9hbmRfcmV0dXJuOwogCiAJLyogU3RvcCBhbmQgc3RhcnQgUkRBIHF1ZXVlcyB0byByZXBvc3QgYnVmZmVycy4gKi8KIAlpZiAoIWd2ZV9pc19xcGwocHJpdikgJmFtcDsmYW1wOyBwcml2LSZndDt4ZHBfcHJvZykgewogCQllcnIgPSBndmVfY29uZmlndXJlX3JpbmdzX3hkcChwcml2LCBwcml2LSZndDtyeF9jZmcubnVtX3F1ZXVlcyk7CiAJCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwomIzQzOwkJCWdvdG8gdW5tYXBfYW5kX3JldHVybjsKIAl9CiAKIAluYXBpX3J4ID0gJmFtcDtwcml2LSZndDtudGZ5X2Jsb2Nrc1twcml2LSZndDtyeFtxaWRdLm50ZnlfaWRdLm5hcGk7Ci0JbmFwaV9kaXNhYmxlKG5hcGlfcngpOyAvKiBtYWtlIHN1cmUgY3VycmVudCByeCBwb2xsIGlzIGRvbmUgKi8KJiM0MzsJbmFwaV9kaXNhYmxlX2xvY2tlZChuYXBpX3J4KTsgLyogbWFrZSBzdXJlIGN1cnJlbnQgcnggcG9sbCBpcyBkb25lICovCiAKIAl0eF9xaWQgPSBndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsIHFpZCk7CiAJbmFwaV90eCA9ICZhbXA7cHJpdi0mZ3Q7bnRmeV9ibG9ja3NbcHJpdi0mZ3Q7dHhbdHhfcWlkXS5udGZ5X2lkXS5uYXBpOwotCW5hcGlfZGlzYWJsZShuYXBpX3R4KTsgLyogbWFrZSBzdXJlIGN1cnJlbnQgdHggcG9sbCBpcyBkb25lICovCiYjNDM7CW5hcGlfZGlzYWJsZV9sb2NrZWQobmFwaV90eCk7IC8qIG1ha2Ugc3VyZSBjdXJyZW50IHR4IHBvbGwgaXMgZG9uZSAqLwogCiAJZ3ZlX3VucmVnX3hza19wb29sKHByaXYsIHFpZCk7CiAJc21wX21iKCk7IC8qIE1ha2Ugc3VyZSBpdCBpcyB2aXNpYmxlIHRvIHRoZSB3b3JrZXJzIG9uIGRhdGFwYXRoICovCiAKLQluYXBpX2VuYWJsZShuYXBpX3J4KTsKLQluYXBpX2VuYWJsZShuYXBpX3R4KTsKJiM0MzsJbmFwaV9lbmFibGVfbG9ja2VkKG5hcGlfcngpOwomIzQzOwluYXBpX2VuYWJsZV9sb2NrZWQobmFwaV90eCk7CiAJaWYgKGd2ZV9pc19ncWkocHJpdikpIHsKIAkJaWYgKGd2ZV9yeF93b3JrX3BlbmRpbmcoJmFtcDtwcml2LSZndDtyeFtxaWRdKSkKIAkJCW5hcGlfc2NoZWR1bGUobmFwaV9yeCk7CkBAIC0xNzI3LDcgJiM0MzsxNzIxLDE0IEBAIHN0YXRpYyBpbnQgZ3ZlX3hza19wb29sX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCW5hcGlfc2NoZWR1bGUobmFwaV90eCk7CiAJfQogCi0JcmV0dXJuIDA7CiYjNDM7dW5tYXBfYW5kX3JldHVybjoKJiM0MzsJcG9vbCA9IHhza19nZXRfcG9vbF9mcm9tX3FpZChkZXYsIHFpZCk7CiYjNDM7CWlmIChwb29sKQomIzQzOwkJeHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsCiYjNDM7CQkJCSAgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMgfAomIzQzOwkJCQkgICBETUFfQVRUUl9XRUFLX09SREVSSU5HKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBndmVfeHNrX3dha2V1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcXVldWVfaWQsIHUzMiBmbGFncykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMKaW5kZXggMGVjZTJmNmZkZmZiNC4uODExZGI0MmQwNWM2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMKQEAgLTExMyw2ICYjNDM7MTEzLDEyIEBAIHN0YXRpYyB2b2lkIGd2ZV9yeF9yZXNldF9yaW5nX2RxbyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIGludCBpZHgpCiAJCQkJZ3ZlX2ZyZWVfdG9fcGFnZV9wb29sKHJ4LCBicywgZmFsc2UpOwogCQkJZWxzZQogCQkJCWd2ZV9mcmVlX3FwbF9wYWdlX2Rxbyhicyk7CiYjNDM7CiYjNDM7CQkJaWYgKGd2ZV9idWZfc3RhdGVfaXNfYWxsb2NhdGVkKHJ4LCBicykgJmFtcDsmYW1wOwomIzQzOwkJCSAgICBicy0mZ3Q7eHNrX2J1ZmYpIHsKJiM0MzsJCQkJeHNrX2J1ZmZfZnJlZShicy0mZ3Q7eHNrX2J1ZmYpOwomIzQzOwkJCQlicy0mZ3Q7eHNrX2J1ZmYgPSBOVUxMOwomIzQzOwkJCX0KIAkJfQogCX0KIApAQCAtODM5LDcgJiM0Mzs4NDUsMTIgQEAgc3RhdGljIGludCBndmVfcnhfZHFvKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCwKIAl9CiAKIAlpZiAodW5saWtlbHkoY29tcGxfZGVzYy0mZ3Q7cnhfZXJyb3IpKSB7Ci0JCWd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTsKJiM0MzsJCWlmIChidWZfc3RhdGUtJmd0O3hza19idWZmKSB7CiYjNDM7CQkJeHNrX2J1ZmZfZnJlZShidWZfc3RhdGUtJmd0O3hza19idWZmKTsKJiM0MzsJCQlndmVfZnJlZV9idWZfc3RhdGUocngsIGJ1Zl9zdGF0ZSk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTsKJiM0MzsJCX0KIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMTQ1LDEzICYjNDM7MTE1NiwxNCBAQCBpbnQgZ3ZlX3J4X3BvbGxfZHFvKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpibG9jaywgaW50IGJ1ZGdldCkKIAkJLyogRnJlZSBydW5uaW5nIGNvdW50ZXIgb2YgY29tcGxldGVkIGRlc2NyaXB0b3JzICovCiAJCXJ4LSZndDtjbnQmIzQzOyYjNDM7OwogCi0JCWlmICghcngtJmd0O2N0eC5za2JfaGVhZCkKLQkJCWNvbnRpbnVlOwotCiAJCWlmICghY29tcGxfZGVzYy0mZ3Q7ZW5kX29mX3BhY2tldCkKIAkJCWNvbnRpbnVlOwogCiAJCXdvcmtfZG9uZSYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlpZiAoIXJ4LSZndDtjdHguc2tiX2hlYWQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCXBrdF9ieXRlcyA9IHJ4LSZndDtjdHguc2tiX2hlYWQtJmd0O2xlbjsKIAkJLyogVGhlIGV0aGVybmV0IGhlYWRlciAoZmlyc3QgRVRIX0hMRU4gYnl0ZXMpIGlzIHNuaXBwZWQgb2ZmCiAJCSAqIGJ5IGV0aF90eXBlX3RyYW5zLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg1MAoJCQkJCQkJb3V0cHV0OiAxNjgKCQkJCQkJCXRob3VnaHRzOiA2ODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKGd2ZSkgZHJpdmVyLiBJIHNlZSBpdCYjMzk7cyB0b3VjaGluZyBgZ3ZlX21haW4uY2AgYW5kIGBndmVfcnhfZHFvLmNgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgZm9jdXNlZCBvbiBwb3RlbnRpYWwgcmlza3MsIHBhcnRpY3VsYXJseSB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMsIGFzIHRoYXQmIzM5O3MgYWx3YXlzIGEgY29uY2Vybi4KCkxvb2tpbmcgYXQgYGd2ZV9tYWluLmNgLCB0aGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIHRoZSBYRFAgc29ja2V0IChYU0spIHBvb2wgbWFuYWdlbWVudDogYGd2ZV94c2tfcG9vbF9lbmFibGVgIGlzIGdldHRpbmcgdXBkYXRlZCBpbiBob3cgaXQgaGFuZGxlcyByZWdpc3RlcmluZyBhbmQgY29uZmlndXJpbmcgdGhlIFhTSyBwb29sLCBhbmQgYGd2ZV94c2tfcG9vbF9kaXNhYmxlYCBub3cgdXNlcyB0aGUgbG9ja2VkIHZlcnNpb25zIG9mIGBuYXBpX2Rpc2FibGVgIGFuZCBgbmFwaV9lbmFibGVgLCBhbmQgbW92ZXMgYHhza19wb29sX2RtYV91bm1hcGAgdG8gdGhlIHZlcnkgZW5kIG9mIHRoZSBmdW5jdGlvbi4gVGhpcyBOQVBJIGxvY2tpbmcgY2hhbmdlIGlzIGNyaXRpY2FsIGZvciBjb25jdXJyZW5jeSwgcHJldmVudGluZyBkZWFkbG9ja3Mgb3IgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0aGUgZGlzYWJsZSBwcm9jZXNzLiBNb3ZpbmcgYHhza19wb29sX2RtYV91bm1hcGAgdG8gdGhlIGVuZCBtYWtlcyBzZW5zZSB0byByZWR1Y2UgY2hhbmNlcyBvZiBhY2Nlc3NpbmcgdW5tYXBwZWQgbWVtb3J5LgoKVGhlbiwgaW4gYGd2ZV9yeF9kcW8uY2AsIHRoaW5ncyBhcmUgbW9yZSBpbnRlcmVzdGluZy4gSSBzZWUgYSBjb3VwbGUgb2YgbWVtb3J5IGxlYWsgZml4ZXM6IGxvZ2ljIGlzIGJlaW5nIGFkZGVkIGluIGBndmVfcnhfcmVzZXRfcmluZ19kcW9gIHRvIGZyZWUgYHhza19idWZmYCBpZiBpdCYjMzk7cyBhbGxvY2F0ZWQsIHdoaWNoIGlzIGdvb2QuIEFsc28sIGluIGBndmVfcnhfZHFvYCwgdGhlcmUmIzM5O3MgYSBuZXcgY2hlY2sgdG8gZnJlZSB0aGUgYHhza19idWZmYCBpZiBgY29tcGxfZGVzYy0mZ3Q7cnhfZXJyb3JgLiBQcmV2ZW50aW5nIHRoZXNlIG1lbW9yeSBsZWFrcyBpcyB2aXRhbCwgb2YgY291cnNlLCBidXQgaXQgZG9lc24mIzM5O3Qgc2VlbSB0byBpbnRyb2R1Y2UgYW55IG5ldyBleHBvc3VyZSB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4KClRoZSBgZ3ZlX3J4X3BvbGxfZHFvYCBmdW5jdGlvbiBoYXMgYSByZW9yZGVyaW5nIG9mIHRoZSBjaGVja3M6IHRoZSBvcmRlciBvZiBgIXJ4LSZndDtjdHguc2tiX2hlYWRgIGFuZCBgIWNvbXBsX2Rlc2MtJmd0O2VuZF9vZl9wYWNrZXRgIGNoZWNrcyBoYXZlIGJlZW4gc3dhcHBlZC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgb3JpZ2luYWwgY29kZSBoYWQ6CgpgYGBjCgkJaWYgKCFyeC0mZ3Q7Y3R4LnNrYl9oZWFkKQoJCQljb250aW51ZTsKCgkJaWYgKCFjb21wbF9kZXNjLSZndDtlbmRfb2ZfcGFja2V0KQoJCQljb250aW51ZTsKYGBgCgpBbmQgbm93IGl0JiMzOTtzOgoKYGBgYwoJCWlmICghY29tcGxfZGVzYy0mZ3Q7ZW5kX29mX3BhY2tldCkKCQkJY29udGludWU7CgoJCXdvcmtfZG9uZSYjNDM7JiM0Mzs7CgoJCWlmICghcngtJmd0O2N0eC5za2JfaGVhZCkKCQkJY29udGludWU7CmBgYAoKQWgsIEkgc2VlLiBXaXRoIHRoZSBvcmlnaW5hbCBsb2dpYywgaXQgc2tpcHMgdGhlIHBhY2tldCBpZiBpdCYjMzk7cyBub3QgdGhlIGZpcnN0IHBhcnQgb2YgYSBwYWNrZXQuIEJ1dCBpZiBgY29tcGxfZGVzYy0mZ3Q7ZW5kX29mX3BhY2tldGAgaXMgdHJ1ZSwgdGhlIGB3b3JrX2RvbmVgIHdpbGwgYmUgaW5jcmVtZW50ZWQuIFRoZSBjaGFuZ2UgaGFzIG1vdmVkIHRoZSBjaGVjayB0byBlbnN1cmUgdGhhdCBwYWNrZXRzIHdpdGhvdXQgYSBoZWFkZXIgKnN0aWxsKiBjb3VudCBhcyB3b3JrIGRvbmUuIFRoYXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gTkFQSSBidWRnZXQgYWNjb3VudGluZy4KClNvLCB0YWtpbmcgYSBzdGVwIGJhY2ssIHRoaXMgcGF0Y2ggc2VlbXMgcHJldHR5IGNsZWFuLiBXZSYjMzk7cmUgbG9va2luZyBhdCBYRFAgcG9vbCBtYW5hZ2VtZW50LCBOQVBJIGxvY2tpbmcgKGVzc2VudGlhbCksIG1lbW9yeSBsZWFrIGZpeGVzLCBhbmQgYSBOQVBJIGJ1ZGdldCByZWxhdGVkIGNvbnRyb2wgZmxvdyBjaGFuZ2UuIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIGhlcmUuIFRoZSBwcmltYXJ5IHJpc2tzIGFwcGVhciB0byBiZSB0aG9zZSByZWxhdGVkIHRvIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgZGVhZGxvY2tzLCBhbmQgdGhhdCBjYW4gYmUgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBvciBLTUVNTEVBSy4gS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBBbGwgdGhpbmdzIGNvbnNpZGVyZWQsIEkgZG9uJiMzOTt0IHNlZSBhbnkgaW1tZWRpYXRlIHJlZCBmbGFncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChndmUpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZpeGluZyBYRFAgcG9vbCByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24gbG9naWMsIE5BUEkgbG9ja2luZyAodXNpbmcgbmFwaV9kaXNhYmxlX2xvY2tlZC9uYXBpX2VuYWJsZV9sb2NrZWQpLCBtZW1vcnkgbGVha3MgKGZyZWVpbmcgeHNrX2J1ZmYpLCBhbmQgTkFQSSBidWRnZXQgYWNjb3VudGluZyBpbiBndmVfcnhfcG9sbF9kcW8uIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGV4cG9zZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2UuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSBkZWFkbG9ja3MsIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBLTUVNTEVBSy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHb29nbGUgVmlydHVhbCBFdGhlcm5ldCAoZ3ZlKSBkcml2ZXIsIHNwZWNpZmljYWxseSBmaXhpbmcgWERQIHBvb2wgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIGxvZ2ljLCBOQVBJIGxvY2tpbmcgKHVzaW5nIG5hcGlfZGlzYWJsZV9sb2NrZWQvbmFwaV9lbmFibGVfbG9ja2VkKSwgbWVtb3J5IGxlYWtzIChmcmVlaW5nIHhza19idWZmKSwgYW5kIE5BUEkgYnVkZ2V0IGFjY291bnRpbmcgaW4gZ3ZlX3J4X3BvbGxfZHFvLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IHN0cnVjdHVyZSBwYWRkaW5nLCBvciBleHBvc2UgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgZGVhZGxvY2tzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgS01FTUxFQUsuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjE3OjM2Ljk0Mzk1MjA0NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzIzNzU4OTM2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX0dPT0dMRVwiLFxuICAgIFwiR1ZFXCIsXG4gICAgXCJYRFBfU09DS0VUU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlBDSV9NU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJndmVfcnhfcG9sbF9kcW9cIixcbiAgICBcImd2ZV9uYXBpX3BvbGxfZHFvXCIsXG4gICAgXCJndmVfeGRwX3BvbGxfZHFvXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKGd2ZSkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZml4aW5nIFhEUCBwb29sIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiBsb2dpYywgTkFQSSBsb2NraW5nICh1c2luZyBuYXBpX2Rpc2FibGVfbG9ja2VkL25hcGlfZW5hYmxlX2xvY2tlZCksIG1lbW9yeSBsZWFrcyAoZnJlZWluZyB4c2tfYnVmZiksIGFuZCBOQVBJIGJ1ZGdldCBhY2NvdW50aW5nIGluIGd2ZV9yeF9wb2xsX2Rxby4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZXhwb3NlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGRlYWRsb2NrcywgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBMT0NLREVQLCBLQVNBTiwgYW5kIEtNRU1MRUFLLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHb29nbGUgVmlydHVhbCBFdGhlcm5ldCAoZ3ZlKSBkcml2ZXIgdG8gZml4IGJ1Z3MgcmVsYXRlZCB0byBBRl9YRFAgKFhEUCBzb2NrZXRzKSBzdXBwb3J0LiBJdCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIGBndmVfcnhfcmVzZXRfcmluZ19kcW9gIGFuZCBgZ3ZlX3J4X2Rxb2AgYnkgcHJvcGVybHkgZnJlZWluZyBgeHNrX2J1ZmZgLiBJdCBhbHNvIGZpeGVzIGEgYnVnIGluIGBndmVfcnhfcG9sbF9kcW9gIHdoZXJlIGB3b3JrX2RvbmVgIHdhcyBub3QgaW5jcmVtZW50ZWQgY29ycmVjdGx5LCBhbmQgZml4ZXMgRE1BIHVubWFwcGluZyBpbiBgZ3ZlX3hza19wb29sX2VuYWJsZWAgYW5kIGBndmVfeHNrX3Bvb2xfZGlzYWJsZWAuIFRoZXNlIGNoYW5nZXMgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdCBvbiB0aGUgbmV0d29yayBkYXRhcGF0aCBhbmQgQUZfWERQIHNvY2tldCBoYW5kbGluZy4gVGhlIEdWRSBkcml2ZXIgaXMgdGhlIHByaW1hcnkgbmV0d29yayBpbnRlcmZhY2UgdXNlZCBpbiBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgVk1zLCB3aGVyZSBzeXprYWxsZXIgcnVucywgbWFraW5nIHRoZXNlIGNvZGUgcGF0aHMgaGlnaGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxNzozNi45NDM5NTgxMjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMjgyMDc0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZkODg0MWZhMjY4MzRhOTE0Y2ZhNzhjYTI0YTc2OTIzYjhhYmU2MGFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMTUgMDA6MTc6MzYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jXFxuaW5kZXggZTRkNzhhZTUyZGFmZS4uY2NhZjVmODZhMWU2ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmNcXG5AQCAtMTY1NCwyMCArMTY1NCwxOCBAQCBzdGF0aWMgaW50IGd2ZV94c2tfcG9vbF9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aWYgKCFwcml2LVxcdTAwM2V4ZHBfcHJvZyB8fCAhbmV0aWZfcnVubmluZyhkZXYpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGVyciA9IGd2ZV9yZWdfeHNrX3Bvb2wocHJpdiwgZGV2LCBwb29sLCBxaWQpO1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRnb3RvIGVycl94c2tfcG9vbF9kbWFfbWFwcGVkO1xcbi1cXG4tXFx0LyogU3RvcCBhbmQgc3RhcnQgUkRBIHF1ZXVlcyB0byByZXBvc3QgYnVmZmVycy4gKi9cXG4tXFx0aWYgKCFndmVfaXNfcXBsKHByaXYpKSB7XFxuK1xcdGlmIChndmVfaXNfcXBsKHByaXYpKSB7XFxuK1xcdFxcdGVyciA9IGd2ZV9yZWdfeHNrX3Bvb2wocHJpdiwgZGV2LCBwb29sLCBxaWQpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGVycl94c2tfcG9vbF9kbWFfbWFwcGVkO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBTdG9wIGFuZCBzdGFydCBSREEgcXVldWVzIHRvIHJlcG9zdCBidWZmZXJzLiAqL1xcbiBcXHRcXHRlcnIgPSBndmVfY29uZmlndXJlX3JpbmdzX3hkcChwcml2LCBwcml2LVxcdTAwM2VyeF9jZmcubnVtX3F1ZXVlcyk7XFxuIFxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdGdvdG8gZXJyX3hza19wb29sX3JlZ2lzdGVyZWQ7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX3hza19wb29sX2RtYV9tYXBwZWQ7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIDA7XFxuIFxcbi1lcnJfeHNrX3Bvb2xfcmVnaXN0ZXJlZDpcXG4tXFx0Z3ZlX3VucmVnX3hza19wb29sKHByaXYsIHFpZCk7XFxuIGVycl94c2tfcG9vbF9kbWFfbWFwcGVkOlxcbiBcXHRjbGVhcl9iaXQocWlkLCBwcml2LVxcdTAwM2V4c2tfcG9vbHMpO1xcbiBcXHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCxcXG5AQCAtMTY4Myw0MiArMTY4MSwzOCBAQCBzdGF0aWMgaW50IGd2ZV94c2tfcG9vbF9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaV9yeDtcXG4gXFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpX3R4O1xcbiBcXHRzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbDtcXG4rXFx0aW50IGVyciA9IDA7XFxuIFxcdGludCB0eF9xaWQ7XFxuLVxcdGludCBlcnI7XFxuIFxcbi1cXHRpZiAocWlkIFxcdTAwM2U9IHByaXYtXFx1MDAzZXJ4X2NmZy5udW1fcXVldWVzKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKHFpZCBcXHUwMDNlPSBwcml2LVxcdTAwM2VyeF9jZmcubnVtX3F1ZXVlcykge1xcbitcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIHVubWFwX2FuZF9yZXR1cm47XFxuK1xcdH1cXG4gXFxuIFxcdGNsZWFyX2JpdChxaWQsIHByaXYtXFx1MDAzZXhza19wb29scyk7XFxuIFxcbi1cXHRwb29sID0geHNrX2dldF9wb29sX2Zyb21fcWlkKGRldiwgcWlkKTtcXG4tXFx0aWYgKHBvb2wpXFxuLVxcdFxcdHhza19wb29sX2RtYV91bm1hcChwb29sLFxcbi1cXHRcXHRcXHRcXHQgICBETUFfQVRUUl9TS0lQX0NQVV9TWU5DIHxcXG4tXFx0XFx0XFx0XFx0ICAgRE1BX0FUVFJfV0VBS19PUkRFUklORyk7XFxuLVxcbiBcXHRpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSB8fCAhcHJpdi1cXHUwMDNldHhfY2ZnLm51bV94ZHBfcXVldWVzKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0Z290byB1bm1hcF9hbmRfcmV0dXJuO1xcbiBcXG4gXFx0LyogU3RvcCBhbmQgc3RhcnQgUkRBIHF1ZXVlcyB0byByZXBvc3QgYnVmZmVycy4gKi9cXG4gXFx0aWYgKCFndmVfaXNfcXBsKHByaXYpIFxcdTAwMjZcXHUwMDI2IHByaXYtXFx1MDAzZXhkcF9wcm9nKSB7XFxuIFxcdFxcdGVyciA9IGd2ZV9jb25maWd1cmVfcmluZ3NfeGRwKHByaXYsIHByaXYtXFx1MDAzZXJ4X2NmZy5udW1fcXVldWVzKTtcXG4gXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0XFx0Z290byB1bm1hcF9hbmRfcmV0dXJuO1xcbiBcXHR9XFxuIFxcbiBcXHRuYXBpX3J4ID0gXFx1MDAyNnByaXYtXFx1MDAzZW50ZnlfYmxvY2tzW3ByaXYtXFx1MDAzZXJ4W3FpZF0ubnRmeV9pZF0ubmFwaTtcXG4tXFx0bmFwaV9kaXNhYmxlKG5hcGlfcngpOyAvKiBtYWtlIHN1cmUgY3VycmVudCByeCBwb2xsIGlzIGRvbmUgKi9cXG4rXFx0bmFwaV9kaXNhYmxlX2xvY2tlZChuYXBpX3J4KTsgLyogbWFrZSBzdXJlIGN1cnJlbnQgcnggcG9sbCBpcyBkb25lICovXFxuIFxcbiBcXHR0eF9xaWQgPSBndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsIHFpZCk7XFxuIFxcdG5hcGlfdHggPSBcXHUwMDI2cHJpdi1cXHUwMDNlbnRmeV9ibG9ja3NbcHJpdi1cXHUwMDNldHhbdHhfcWlkXS5udGZ5X2lkXS5uYXBpO1xcbi1cXHRuYXBpX2Rpc2FibGUobmFwaV90eCk7IC8qIG1ha2Ugc3VyZSBjdXJyZW50IHR4IHBvbGwgaXMgZG9uZSAqL1xcbitcXHRuYXBpX2Rpc2FibGVfbG9ja2VkKG5hcGlfdHgpOyAvKiBtYWtlIHN1cmUgY3VycmVudCB0eCBwb2xsIGlzIGRvbmUgKi9cXG4gXFxuIFxcdGd2ZV91bnJlZ194c2tfcG9vbChwcml2LCBxaWQpO1xcbiBcXHRzbXBfbWIoKTsgLyogTWFrZSBzdXJlIGl0IGlzIHZpc2libGUgdG8gdGhlIHdvcmtlcnMgb24gZGF0YXBhdGggKi9cXG4gXFxuLVxcdG5hcGlfZW5hYmxlKG5hcGlfcngpO1xcbi1cXHRuYXBpX2VuYWJsZShuYXBpX3R4KTtcXG4rXFx0bmFwaV9lbmFibGVfbG9ja2VkKG5hcGlfcngpO1xcbitcXHRuYXBpX2VuYWJsZV9sb2NrZWQobmFwaV90eCk7XFxuIFxcdGlmIChndmVfaXNfZ3FpKHByaXYpKSB7XFxuIFxcdFxcdGlmIChndmVfcnhfd29ya19wZW5kaW5nKFxcdTAwMjZwcml2LVxcdTAwM2VyeFtxaWRdKSlcXG4gXFx0XFx0XFx0bmFwaV9zY2hlZHVsZShuYXBpX3J4KTtcXG5AQCAtMTcyNyw3ICsxNzIxLDE0IEBAIHN0YXRpYyBpbnQgZ3ZlX3hza19wb29sX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0bmFwaV9zY2hlZHVsZShuYXBpX3R4KTtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK3VubWFwX2FuZF9yZXR1cm46XFxuK1xcdHBvb2wgPSB4c2tfZ2V0X3Bvb2xfZnJvbV9xaWQoZGV2LCBxaWQpO1xcbitcXHRpZiAocG9vbClcXG4rXFx0XFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsXFxuK1xcdFxcdFxcdFxcdCAgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMgfFxcbitcXHRcXHRcXHRcXHQgICBETUFfQVRUUl9XRUFLX09SREVSSU5HKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZ3ZlX3hza193YWtldXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHF1ZXVlX2lkLCB1MzIgZmxhZ3MpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmNcXG5pbmRleCAwZWNlMmY2ZmRmZmI0Li44MTFkYjQyZDA1YzY3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmNcXG5AQCAtMTEzLDYgKzExMywxMiBAQCBzdGF0aWMgdm9pZCBndmVfcnhfcmVzZXRfcmluZ19kcW8oc3RydWN0IGd2ZV9wcml2ICpwcml2LCBpbnQgaWR4KVxcbiBcXHRcXHRcXHRcXHRndmVfZnJlZV90b19wYWdlX3Bvb2wocngsIGJzLCBmYWxzZSk7XFxuIFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0Z3ZlX2ZyZWVfcXBsX3BhZ2VfZHFvKGJzKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChndmVfYnVmX3N0YXRlX2lzX2FsbG9jYXRlZChyeCwgYnMpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICBicy1cXHUwMDNleHNrX2J1ZmYpIHtcXG4rXFx0XFx0XFx0XFx0eHNrX2J1ZmZfZnJlZShicy1cXHUwMDNleHNrX2J1ZmYpO1xcbitcXHRcXHRcXHRcXHRicy1cXHUwMDNleHNrX2J1ZmYgPSBOVUxMO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5AQCAtODM5LDcgKzg0NSwxMiBAQCBzdGF0aWMgaW50IGd2ZV9yeF9kcW8oc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoY29tcGxfZGVzYy1cXHUwMDNlcnhfZXJyb3IpKSB7XFxuLVxcdFxcdGd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTtcXG4rXFx0XFx0aWYgKGJ1Zl9zdGF0ZS1cXHUwMDNleHNrX2J1ZmYpIHtcXG4rXFx0XFx0XFx0eHNrX2J1ZmZfZnJlZShidWZfc3RhdGUtXFx1MDAzZXhza19idWZmKTtcXG4rXFx0XFx0XFx0Z3ZlX2ZyZWVfYnVmX3N0YXRlKHJ4LCBidWZfc3RhdGUpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRndmVfZnJlZV9idWZmZXIocngsIGJ1Zl9zdGF0ZSk7XFxuK1xcdFxcdH1cXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuQEAgLTExNDUsMTMgKzExNTYsMTQgQEAgaW50IGd2ZV9yeF9wb2xsX2RxbyhzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqYmxvY2ssIGludCBidWRnZXQpXFxuIFxcdFxcdC8qIEZyZWUgcnVubmluZyBjb3VudGVyIG9mIGNvbXBsZXRlZCBkZXNjcmlwdG9ycyAqL1xcbiBcXHRcXHRyeC1cXHUwMDNlY250Kys7XFxuIFxcbi1cXHRcXHRpZiAoIXJ4LVxcdTAwM2VjdHguc2tiX2hlYWQpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4gXFx0XFx0aWYgKCFjb21wbF9kZXNjLVxcdTAwM2VlbmRfb2ZfcGFja2V0KVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdHdvcmtfZG9uZSsrO1xcbitcXG4rXFx0XFx0aWYgKCFyeC1cXHUwMDNlY3R4LnNrYl9oZWFkKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuIFxcdFxcdHBrdF9ieXRlcyA9IHJ4LVxcdTAwM2VjdHguc2tiX2hlYWQtXFx1MDAzZWxlbjtcXG4gXFx0XFx0LyogVGhlIGV0aGVybmV0IGhlYWRlciAoZmlyc3QgRVRIX0hMRU4gYnl0ZXMpIGlzIHNuaXBwZWQgb2ZmXFxuIFxcdFxcdCAqIGJ5IGV0aF90eXBlX3RyYW5zLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxNzozNy40NDczNzM5OTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NzQ1NDE4MDYxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX0dPT0dMRVwiLFxuICAgIFwiR1ZFXCIsXG4gICAgXCJYRFBfU09DS0VUU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlBDSV9NU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJndmVfcnhfcG9sbF9kcW9cIixcbiAgICBcImd2ZV9uYXBpX3BvbGxfZHFvXCIsXG4gICAgXCJndmVfeGRwX3BvbGxfZHFvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChndmUpIGRyaXZlciB0byBmaXggYnVncyByZWxhdGVkIHRvIEFGX1hEUCAoWERQIHNvY2tldHMpIHN1cHBvcnQuIEl0IGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gYGd2ZV9yeF9yZXNldF9yaW5nX2Rxb2AgYW5kIGBndmVfcnhfZHFvYCBieSBwcm9wZXJseSBmcmVlaW5nIGB4c2tfYnVmZmAuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gYGd2ZV9yeF9wb2xsX2Rxb2Agd2hlcmUgYHdvcmtfZG9uZWAgd2FzIG5vdCBpbmNyZW1lbnRlZCBjb3JyZWN0bHksIGFuZCBmaXhlcyBETUEgdW5tYXBwaW5nIGluIGBndmVfeHNrX3Bvb2xfZW5hYmxlYCBhbmQgYGd2ZV94c2tfcG9vbF9kaXNhYmxlYC4gVGhlc2UgY2hhbmdlcyBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHRoZSBuZXR3b3JrIGRhdGFwYXRoIGFuZCBBRl9YRFAgc29ja2V0IGhhbmRsaW5nLiBUaGUgR1ZFIGRyaXZlciBpcyB0aGUgcHJpbWFyeSBuZXR3b3JrIGludGVyZmFjZSB1c2VkIGluIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKSBWTXMsIHdoZXJlIHN5emthbGxlciBydW5zLCBtYWtpbmcgdGhlc2UgY29kZSBwYXRocyBoaWdobHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZkODg0MWZhMjY4MzRhOTE0Y2ZhNzhjYTI0YTc2OTIzYjhhYmU2MGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxNSAwMDoxNzozNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uY1xuaW5kZXggZTRkNzhhZTUyZGFmZS4uY2NhZjVmODZhMWU2ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jXG5AQCAtMTY1NCwyMCArMTY1NCwxOCBAQCBzdGF0aWMgaW50IGd2ZV94c2tfcG9vbF9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmICghcHJpdi1cdTAwM2V4ZHBfcHJvZyB8fCAhbmV0aWZfcnVubmluZyhkZXYpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGVyciA9IGd2ZV9yZWdfeHNrX3Bvb2wocHJpdiwgZGV2LCBwb29sLCBxaWQpO1xuLVx0aWYgKGVycilcbi1cdFx0Z290byBlcnJfeHNrX3Bvb2xfZG1hX21hcHBlZDtcbi1cbi1cdC8qIFN0b3AgYW5kIHN0YXJ0IFJEQSBxdWV1ZXMgdG8gcmVwb3N0IGJ1ZmZlcnMuICovXG4tXHRpZiAoIWd2ZV9pc19xcGwocHJpdikpIHtcbitcdGlmIChndmVfaXNfcXBsKHByaXYpKSB7XG4rXHRcdGVyciA9IGd2ZV9yZWdfeHNrX3Bvb2wocHJpdiwgZGV2LCBwb29sLCBxaWQpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gZXJyX3hza19wb29sX2RtYV9tYXBwZWQ7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBTdG9wIGFuZCBzdGFydCBSREEgcXVldWVzIHRvIHJlcG9zdCBidWZmZXJzLiAqL1xuIFx0XHRlcnIgPSBndmVfY29uZmlndXJlX3JpbmdzX3hkcChwcml2LCBwcml2LVx1MDAzZXJ4X2NmZy5udW1fcXVldWVzKTtcbiBcdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGVycl94c2tfcG9vbF9yZWdpc3RlcmVkO1xuK1x0XHRcdGdvdG8gZXJyX3hza19wb29sX2RtYV9tYXBwZWQ7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbiBcbi1lcnJfeHNrX3Bvb2xfcmVnaXN0ZXJlZDpcbi1cdGd2ZV91bnJlZ194c2tfcG9vbChwcml2LCBxaWQpO1xuIGVycl94c2tfcG9vbF9kbWFfbWFwcGVkOlxuIFx0Y2xlYXJfYml0KHFpZCwgcHJpdi1cdTAwM2V4c2tfcG9vbHMpO1xuIFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsXG5AQCAtMTY4Myw0MiArMTY4MSwzOCBAQCBzdGF0aWMgaW50IGd2ZV94c2tfcG9vbF9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGlfcng7XG4gXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGlfdHg7XG4gXHRzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbDtcbitcdGludCBlcnIgPSAwO1xuIFx0aW50IHR4X3FpZDtcbi1cdGludCBlcnI7XG4gXG4tXHRpZiAocWlkIFx1MDAzZT0gcHJpdi1cdTAwM2VyeF9jZmcubnVtX3F1ZXVlcylcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAocWlkIFx1MDAzZT0gcHJpdi1cdTAwM2VyeF9jZmcubnVtX3F1ZXVlcykge1xuK1x0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIHVubWFwX2FuZF9yZXR1cm47XG4rXHR9XG4gXG4gXHRjbGVhcl9iaXQocWlkLCBwcml2LVx1MDAzZXhza19wb29scyk7XG4gXG4tXHRwb29sID0geHNrX2dldF9wb29sX2Zyb21fcWlkKGRldiwgcWlkKTtcbi1cdGlmIChwb29sKVxuLVx0XHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCxcbi1cdFx0XHRcdCAgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMgfFxuLVx0XHRcdFx0ICAgRE1BX0FUVFJfV0VBS19PUkRFUklORyk7XG4tXG4gXHRpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSB8fCAhcHJpdi1cdTAwM2V0eF9jZmcubnVtX3hkcF9xdWV1ZXMpXG4tXHRcdHJldHVybiAwO1xuK1x0XHRnb3RvIHVubWFwX2FuZF9yZXR1cm47XG4gXG4gXHQvKiBTdG9wIGFuZCBzdGFydCBSREEgcXVldWVzIHRvIHJlcG9zdCBidWZmZXJzLiAqL1xuIFx0aWYgKCFndmVfaXNfcXBsKHByaXYpIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXhkcF9wcm9nKSB7XG4gXHRcdGVyciA9IGd2ZV9jb25maWd1cmVfcmluZ3NfeGRwKHByaXYsIHByaXYtXHUwMDNlcnhfY2ZnLm51bV9xdWV1ZXMpO1xuIFx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4rXHRcdFx0Z290byB1bm1hcF9hbmRfcmV0dXJuO1xuIFx0fVxuIFxuIFx0bmFwaV9yeCA9IFx1MDAyNnByaXYtXHUwMDNlbnRmeV9ibG9ja3NbcHJpdi1cdTAwM2VyeFtxaWRdLm50ZnlfaWRdLm5hcGk7XG4tXHRuYXBpX2Rpc2FibGUobmFwaV9yeCk7IC8qIG1ha2Ugc3VyZSBjdXJyZW50IHJ4IHBvbGwgaXMgZG9uZSAqL1xuK1x0bmFwaV9kaXNhYmxlX2xvY2tlZChuYXBpX3J4KTsgLyogbWFrZSBzdXJlIGN1cnJlbnQgcnggcG9sbCBpcyBkb25lICovXG4gXG4gXHR0eF9xaWQgPSBndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsIHFpZCk7XG4gXHRuYXBpX3R4ID0gXHUwMDI2cHJpdi1cdTAwM2VudGZ5X2Jsb2Nrc1twcml2LVx1MDAzZXR4W3R4X3FpZF0ubnRmeV9pZF0ubmFwaTtcbi1cdG5hcGlfZGlzYWJsZShuYXBpX3R4KTsgLyogbWFrZSBzdXJlIGN1cnJlbnQgdHggcG9sbCBpcyBkb25lICovXG4rXHRuYXBpX2Rpc2FibGVfbG9ja2VkKG5hcGlfdHgpOyAvKiBtYWtlIHN1cmUgY3VycmVudCB0eCBwb2xsIGlzIGRvbmUgKi9cbiBcbiBcdGd2ZV91bnJlZ194c2tfcG9vbChwcml2LCBxaWQpO1xuIFx0c21wX21iKCk7IC8qIE1ha2Ugc3VyZSBpdCBpcyB2aXNpYmxlIHRvIHRoZSB3b3JrZXJzIG9uIGRhdGFwYXRoICovXG4gXG4tXHRuYXBpX2VuYWJsZShuYXBpX3J4KTtcbi1cdG5hcGlfZW5hYmxlKG5hcGlfdHgpO1xuK1x0bmFwaV9lbmFibGVfbG9ja2VkKG5hcGlfcngpO1xuK1x0bmFwaV9lbmFibGVfbG9ja2VkKG5hcGlfdHgpO1xuIFx0aWYgKGd2ZV9pc19ncWkocHJpdikpIHtcbiBcdFx0aWYgKGd2ZV9yeF93b3JrX3BlbmRpbmcoXHUwMDI2cHJpdi1cdTAwM2VyeFtxaWRdKSlcbiBcdFx0XHRuYXBpX3NjaGVkdWxlKG5hcGlfcngpO1xuQEAgLTE3MjcsNyArMTcyMSwxNCBAQCBzdGF0aWMgaW50IGd2ZV94c2tfcG9vbF9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0bmFwaV9zY2hlZHVsZShuYXBpX3R4KTtcbiBcdH1cbiBcbi1cdHJldHVybiAwO1xuK3VubWFwX2FuZF9yZXR1cm46XG4rXHRwb29sID0geHNrX2dldF9wb29sX2Zyb21fcWlkKGRldiwgcWlkKTtcbitcdGlmIChwb29sKVxuK1x0XHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCxcbitcdFx0XHRcdCAgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMgfFxuK1x0XHRcdFx0ICAgRE1BX0FUVFJfV0VBS19PUkRFUklORyk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW50IGd2ZV94c2tfd2FrZXVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBxdWV1ZV9pZCwgdTMyIGZsYWdzKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmNcbmluZGV4IDBlY2UyZjZmZGZmYjQuLjgxMWRiNDJkMDVjNjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmNcbkBAIC0xMTMsNiArMTEzLDEyIEBAIHN0YXRpYyB2b2lkIGd2ZV9yeF9yZXNldF9yaW5nX2RxbyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIGludCBpZHgpXG4gXHRcdFx0XHRndmVfZnJlZV90b19wYWdlX3Bvb2wocngsIGJzLCBmYWxzZSk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0Z3ZlX2ZyZWVfcXBsX3BhZ2VfZHFvKGJzKTtcbitcbitcdFx0XHRpZiAoZ3ZlX2J1Zl9zdGF0ZV9pc19hbGxvY2F0ZWQocngsIGJzKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgYnMtXHUwMDNleHNrX2J1ZmYpIHtcbitcdFx0XHRcdHhza19idWZmX2ZyZWUoYnMtXHUwMDNleHNrX2J1ZmYpO1xuK1x0XHRcdFx0YnMtXHUwMDNleHNrX2J1ZmYgPSBOVUxMO1xuK1x0XHRcdH1cbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTgzOSw3ICs4NDUsMTIgQEAgc3RhdGljIGludCBndmVfcnhfZHFvKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcbiBcdH1cbiBcbiBcdGlmICh1bmxpa2VseShjb21wbF9kZXNjLVx1MDAzZXJ4X2Vycm9yKSkge1xuLVx0XHRndmVfZnJlZV9idWZmZXIocngsIGJ1Zl9zdGF0ZSk7XG4rXHRcdGlmIChidWZfc3RhdGUtXHUwMDNleHNrX2J1ZmYpIHtcbitcdFx0XHR4c2tfYnVmZl9mcmVlKGJ1Zl9zdGF0ZS1cdTAwM2V4c2tfYnVmZik7XG4rXHRcdFx0Z3ZlX2ZyZWVfYnVmX3N0YXRlKHJ4LCBidWZfc3RhdGUpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGd2ZV9mcmVlX2J1ZmZlcihyeCwgYnVmX3N0YXRlKTtcbitcdFx0fVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbkBAIC0xMTQ1LDEzICsxMTU2LDE0IEBAIGludCBndmVfcnhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBpbnQgYnVkZ2V0KVxuIFx0XHQvKiBGcmVlIHJ1bm5pbmcgY291bnRlciBvZiBjb21wbGV0ZWQgZGVzY3JpcHRvcnMgKi9cbiBcdFx0cngtXHUwMDNlY250Kys7XG4gXG4tXHRcdGlmICghcngtXHUwMDNlY3R4LnNrYl9oZWFkKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuIFx0XHRpZiAoIWNvbXBsX2Rlc2MtXHUwMDNlZW5kX29mX3BhY2tldClcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0d29ya19kb25lKys7XG4rXG4rXHRcdGlmICghcngtXHUwMDNlY3R4LnNrYl9oZWFkKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHRwa3RfYnl0ZXMgPSByeC1cdTAwM2VjdHguc2tiX2hlYWQtXHUwMDNlbGVuO1xuIFx0XHQvKiBUaGUgZXRoZXJuZXQgaGVhZGVyIChmaXJzdCBFVEhfSExFTiBieXRlcykgaXMgc25pcHBlZCBvZmZcbiBcdFx0ICogYnkgZXRoX3R5cGVfdHJhbnMuXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxNzozNy40NDczNzUxMDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzMxNzczNzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkdWRSBEcml2ZXIgWERQL0FGX1hEUCBDaGFuZ2VzIC0gV29ydGggSW52ZXN0aWdhdGluZyoqXG5cbk9rYXksIHNvIHRoZSBwYXRjaCB0b3VjaGVzIHRoZSBgZ3ZlX21haW4uY2AgYW5kIGBndmVfcnhfZHFvLmNgIGZpbGVzIHdpdGhpbiB0aGUgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQgKEdWRSkgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0IGZvY3VzZXMgb24gdGhlIFhEUCBhbmQgQUZfWERQICh4c2spIHN1cHBvcnQsIG1vZGlmeWluZyBmdW5jdGlvbnMgbGlrZSBgZ3ZlX3hza19wb29sX2VuYWJsZWAsIGBndmVfeHNrX3Bvb2xfZGlzYWJsZWAsIGBndmVfcnhfcmVzZXRfcmluZ19kcW9gLCBgZ3ZlX3J4X2Rxb2AsIGFuZCBgZ3ZlX3J4X3BvbGxfZHFvYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgdGVzdGFiaWxpdHkuIEdWRSBpcyBhIHZpcnR1YWxpemVkIGRyaXZlciwgaXNuJ3QgaXQ/IEFoLCB5ZXMsIGl0J3MgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHVzZWQgaW4gR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpLCBzbyBpdCAqaXMqIHZpcnR1YWxpemVkLiBBbmQgc3l6a2FsbGVyLCB3aGljaCBJIHVzZSBleHRlbnNpdmVseSwgcnVucyBvbiBHQ0UgYnkgZGVmYXVsdCwgc28gR1ZFIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBXYWl0LCBkb2VzIHN5emthbGxlciBhY3R1YWxseSAqdXNlKiBHVkU/IFllcywgdXN1YWxseSBHQ0UgVk1zIGxldmVyYWdlIEdWRSBvciB2aXJ0aW8tbmV0LlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBpcyBpdCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBJdCdzIGEgbmV0d29yayBkcml2ZXIgYW5kIGl0J3MgcmVhY2hhYmxlIGZyb20gdGhlIGd1ZXN0LCBlaXRoZXIgYXMgdGhlIHByaW1hcnkgaW50ZXJmYWNlIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgaWYgd2UgY2FuIGluc3RhbnRpYXRlIGl0LiBXaGlsZSBpbnN0YW50aWF0aW5nIGl0IGluIFFFTVUgbWlnaHQgYmUgdHJpY2t5LCBzeXprYWxsZXIgKmlzKiBydW5uaW5nIGluIEdDRSwgd2hlcmUgR1ZFIGlzIHByZXNlbnQsIGFuZCB0aGVyZWZvcmUgYWNjZXNzaWJsZS4gVGhlIGRvY3VtZW50YXRpb24gZXhwbGljaXRseSBtZW50aW9ucyBub3QgYm90aGVyaW5nIHdpdGggY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiBHQ0Ug4oCTIGFuZCB0aGlzIGlzICp0aGUqIEdDRSBuZXR3b3JrIGRyaXZlciFcblxuTGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGNoYW5nZXMuIFRoZSBwYXRjaCBtb2RpZmllcyBgZ3ZlX3hza19wb29sX2VuYWJsZWAgYW5kIGBndmVfeHNrX3Bvb2xfZGlzYWJsZWAuIEFsc28sIGBndmVfcnhfcmVzZXRfcmluZ19kcW9gIGFuZCBgZ3ZlX3J4X2Rxb2AgYXJlIHVwZGF0ZWQgdG8gaGFuZGxlIHRoZSBgeHNrX2J1ZmZgIGZyZWVpbmcuIEFuZCBgZ3ZlX3J4X3BvbGxfZHFvYCBnZXRzIGEgYnVnIGZpeC4gVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQuIEl0J3Mgd29ydGggYSBsb29rIGF0IHRoZSBjb25maWcgZm9yIEdWRSwgd2hpY2ggc2hvdWxkIGJlIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZ2AuIExldCdzIGNoZWNrIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozODUzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTc6NDUuNzc5MTUxMTUzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTM3NzA1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgR1ZFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWc9MTY9aWYgTkVUX1ZFTkRPUl9HT09HTEVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZy0xNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZzoxODpjb25maWcgR1ZFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWctMTktXFx0dHJpc3RhdGUgXFxcIkdvb2dsZSBWaXJ0dWFsIE5JQyAoZ1ZOSUMpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjE3OjQ2LjAyODUzMjI3NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTM5ODkwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBzb21ldGhpbmcuIFRoZSBuYXR1cmFsIHN0YXJ0aW5nIHBvaW50LCBhcyBhbHdheXMsIGlzIHRoZSBLY29uZmlnIGZpbGUuIEknbSBkZWFsaW5nIHdpdGggdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFuZCBzcGVjaWZpY2FsbHkgRXRoZXJuZXQgZHJpdmVycyBmcm9tIEdvb2dsZSwgc28gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnYCBzZWVtcyBsaWtlIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGJlZ2luLiBUaW1lIHRvIG9wZW4gaXQgdXAgYW5kIHNlZSB3aGF0IEkgY2FuIGxlYXJuIGFib3V0IGhvdyB0aGlzIHBpZWNlIGZpdHMgaW50byB0aGUgbGFyZ2VyIHB1enpsZSBvZiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQncyBzZWUgd2hhdCB0aGlzIEtjb25maWcgZmlsZSByZXZlYWxzLi4uIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMsIG1heWJlIHNvbWUgYHNlbGVjdGAgZGlyZWN0aXZlcywgYW5kIGhvcGVmdWxseSBlbm91Z2ggY2x1ZXMgdG8gcGlucG9pbnQgdGhlIHJlcXVpcmVkIHByZXJlcXVpc2l0ZXMgZm9yIGVuYWJsaW5nIHRoaXMgc3BlY2lmaWMgR29vZ2xlIEV0aGVybmV0IGRyaXZlci4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCwgb2YgY291cnNlLCB0byBhdm9pZCBhbnkgYnVpbGQgZmFpbHVyZXMgb3IgcnVudGltZSBpc3N1ZXMgZG93biB0aGUgbGluZS4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTk3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTc6NDkuMDgyNTIzODE1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjXFxuICAgMjpcXHQjIEdvb2dsZSBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uXFxuICAgMzpcXHQjXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBORVRfVkVORE9SX0dPT0dMRVxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiR29vZ2xlIERldmljZXNcXFwiXFxuICAgNzpcXHRcXHRkZWZhdWx0IHlcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgZGV2aWNlIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0XFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxcbiAgMTI6XFx0XFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXFxuICAxMzpcXHRcXHQgIHRoZSBxdWVzdGlvbnMgYWJvdXQgR29vZ2xlIGRldmljZXMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWRcXG4gIDE0OlxcdFxcdCAgZm9yIHlvdXIgc3BlY2lmaWMgZGV2aWNlIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRpZiBORVRfVkVORE9SX0dPT0dMRVxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgR1ZFXFxuICAxOTpcXHRcXHR0cmlzdGF0ZSBcXFwiR29vZ2xlIFZpcnR1YWwgTklDIChnVk5JQykgc3VwcG9ydFxcXCJcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gKFBDSV9NU0kgXFx1MDAyNlxcdTAwMjYgKFg4NiB8fCBDUFVfTElUVExFX0VORElBTikpXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAyMjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEdvb2dsZSBWaXJ0dWFsIE5JQyAoZ1ZOSUMpXFxcIlxcbiAgMjU6XFx0XFxuICAyNjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuICAyNzpcXHRcXHQgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3ZlLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRlbmRpZiAjTkVUX1ZFTkRPUl9HT09HTEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTc6NDkuMDgyNjE5ODA2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDczNTI5MjA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBHVkUgRHJpdmVyOiBJbml0aWFsIFRob3VnaHRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBORVRfVkVORE9SX0dPT0dMRWAgYW5kIGBHVkVgLiBSaWdodCwgYW5kIGBHVkVgIGhhcyBhIGRlcGVuZGVuY3kgb24gYFBDSV9NU0lgLCB3aGljaCBpcyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kIGZvciBzZXR1cC4gVGhlIGNvcmUgcXVlc3Rpb24gaXM6IGNhbiBJIGVmZmVjdGl2ZWx5IGZ1enogYGd2ZV94c2tfcG9vbF9lbmFibGVgPyBUaGF0IHNlZW1zIGxpa2UgYSBnb29kIHRhcmdldC4gVGhpbmtpbmcgYWJvdXQgaXQsIHRoZSBhbnN3ZXIgaXMgeWVzLCBJIGNhbi4gTGV2ZXJhZ2luZyBBRl9YRFAgc29ja2V0cyBvbiB0aGUgR1ZFIGludGVyZmFjZSBpcyB0aGUga2V5IHRoZXJlLlxuXG5Ob3csIGxldCdzIHBpbnBvaW50IHRoZSBmdW5jdGlvbnMgSSBzaG91bGQgZm9jdXMgbXkgYXR0ZW50aW9uIG9uLiBJJ20gdGhpbmtpbmc6IGBndmVfeHNrX3Bvb2xfZW5hYmxlYCwgYGd2ZV94c2tfcG9vbF9kaXNhYmxlYCwgYGd2ZV9yeF9yZXNldF9yaW5nX2Rxb2AgKGV2ZW4gdGhvdWdoIGl0J3Mgc3RhdGljLCBpdCdzIHJlbGV2YW50IHRvIHRoZSBkYXRhIGZsb3cpLCBgZ3ZlX3J4X2Rxb2AgKGFub3RoZXIgc3RhdGljIG9uZSB0aGF0IGxpa2VseSBkb2VzIGltcG9ydGFudCB3b3JrKSwgYW5kIGNydWNpYWxseSwgYGd2ZV9yeF9wb2xsX2Rxb2AsIHdoaWNoIGlzIG5vbi1zdGF0aWMgYW5kIG9mZmVycyBhIGRpcmVjdCBhY2Nlc3MgcG9pbnQuXG5cblRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIGV4YW1pbmUgYGd2ZV94c2tfcG9vbF9lbmFibGVgIGFuZCBgZ3ZlX3hza19wb29sX2Rpc2FibGVgIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmNgLiBUaG9zZSBhcmUgbXkgZW50cnkgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjI3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTc6NTMuODE3OTE1MzE5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODkxNzA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndmVfeHNrX3Bvb2xfZW5hYmxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0xNjE2PXN0YXRpYyBpbnQgZ3ZlX3hkcF94bWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE2MjgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjE2Mjk6c3RhdGljIGludCBndmVfeHNrX3Bvb2xfZW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE2MzAtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTE4MDU9c3RhdGljIGludCBndmVfeGRwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRkZXZfYnBmICp4ZHApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTgxNy1cXHRcXHRpZiAoeGRwLVxcdTAwM2V4c2sucG9vbClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6MTgxODpcXHRcXHRcXHRyZXR1cm4gZ3ZlX3hza19wb29sX2VuYWJsZShkZXYsIHhkcC1cXHUwMDNleHNrLnBvb2wsIHhkcC1cXHUwMDNleHNrLnF1ZXVlX2lkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTgxOS1cXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjE3OjUzLjkyNjgzODQ4OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTE4MzUzODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkFuYWx5emluZyB0aGUgR1ZFIERhdGEgUGF0aCoqXG5cbk9rYXksIHNvIGBndmVfeHNrX3Bvb2xfZW5hYmxlYCBpcyBkZWZpbmVkIGFzIGEgc3RhdGljIHZhcmlhYmxlLCB0aGF0J3MgaW1wb3J0YW50IHRvIGtub3cgcmlnaHQgb2ZmIHRoZSBiYXQuIEl0IG1lYW5zIGl0cyB2aXNpYmlsaXR5IGFuZCBsaWZldGltZSBhcmUgcmVzdHJpY3RlZCB3aXRoaW4gaXRzIGNvbXBpbGF0aW9uIHVuaXQsIHVzdWFsbHkgYSBnb29kIGluZGljYXRvciB0aGF0IGl0J3MgYW4gaW50ZXJuYWwgZmxhZyBvciBzZXR0aW5nLCBub3Qgc29tZXRoaW5nIGV4cG9zZWQgZ2xvYmFsbHkuIE5vdywgdGhlIG1haW4gZW50cnkgcG9pbnRzIHNlZW0gdG8gYmUgZWl0aGVyIGBndmVfeGRwYCBvciBgZ3ZlX3hza193YWtldXBgLiBHaXZlbiB0aG9zZSB0d28sIGl0IG1ha2VzIHRoZSBtb3N0IHNlbnNlIHRvIHN0YXJ0IHdpdGggYGd2ZV94ZHBgIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWwgZGF0YSBmbG93LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHN0YXRpYyB2YXJpYWJsZSAoYGd2ZV94c2tfcG9vbF9lbmFibGVgKSBpcyB1c2VkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgWERQIGhhbmRsZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0OTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxNzo1Ny41Mzg2NzY2MzlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NTAwMTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImd2ZV94ZHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaD0xODk9c3RydWN0IGd2ZV9yeF9idWZfc3RhdGVfZHFvIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMjA4LS8qIFdyYXBwZXIgZm9yIFhEUCBSeCBtZXRhZGF0YSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MjA5OnN0cnVjdCBndmVfeGRwX2J1ZmYge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMjEwLVxcdHN0cnVjdCB4ZHBfYnVmZiB4ZHA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oPTExNzk9c3RhdGljIGlubGluZSB1MzIgZ3ZlX251bV90eF9xdWV1ZXMoc3RydWN0IGd2ZV9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMTgzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MTE4NDpzdGF0aWMgaW5saW5lIHUzMiBndmVfeGRwX3R4X3F1ZXVlX2lkKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgdTMyIHF1ZXVlX2lkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMTE4NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTExODgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaDoxMTg5OnN0YXRpYyBpbmxpbmUgdTMyIGd2ZV94ZHBfdHhfc3RhcnRfcXVldWVfaWQoc3RydWN0IGd2ZV9wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMTE5MC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaDoxMTkxOlxcdHJldHVybiBndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsIDApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmgtMTE5Mi19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oPTEyMjY9bmV0ZGV2X3R4X3QgZ3ZlX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MTIyNzppbnQgZ3ZlX3hkcF94bWl0X2dxaShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbiwgc3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTEyMjgtXFx0XFx0ICAgICB1MzIgZmxhZ3MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MTIyOTppbnQgZ3ZlX3hkcF94bWl0X2RxbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbiwgc3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTEyMzAtXFx0XFx0ICAgICB1MzIgZmxhZ3MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg6MTIzMTppbnQgZ3ZlX3hkcF94bWl0X29uZShzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBndmVfdHhfcmluZyAqdHgsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMjMyLVxcdFxcdCAgICAgdm9pZCAqZGF0YSwgaW50IGxlbiwgdm9pZCAqZnJhbWVfcCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaDoxMjMzOnZvaWQgZ3ZlX3hkcF90eF9mbHVzaChzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHUzMiB4ZHBfcWlkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oOjEyMzQ6aW50IGd2ZV94ZHBfeG1pdF9vbmVfZHFvKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV90eF9yaW5nICp0eCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oLTEyMzUtXFx0XFx0XFx0IHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlLmg9MTIzNj1ib29sIGd2ZV90eF9wb2xsKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpibG9jaywgaW50IGJ1ZGdldCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaDoxMjM3OmJvb2wgZ3ZlX3hkcF9wb2xsKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpibG9jaywgaW50IGJ1ZGdldCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMjM4LWludCBndmVfeHNrX3R4X3BvbGwoc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBpbnQgYnVkZ2V0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Rxby5oPTM2PW5ldGRldl9mZWF0dXJlc190IGd2ZV9mZWF0dXJlc19jaGVja19kcW8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Rxby5oLTM4LVxcdFxcdFxcdFxcdFxcdCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZHFvLmg6Mzk6aW50IGd2ZV94ZHBfcnhfdGltZXN0YW1wKGNvbnN0IHN0cnVjdCB4ZHBfbWQgKl9jdHgsIHU2NCAqdGltZXN0YW1wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9kcW8uaC00MC1ib29sIGd2ZV90eF9wb2xsX2RxbyhzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqYmxvY2ssIGJvb2wgZG9fY2xlYW4pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Rxby5oOjQxOmJvb2wgZ3ZlX3hkcF9wb2xsX2RxbyhzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqYmxvY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Rxby5oLTQyLWJvb2wgZ3ZlX3hza190eF9wb2xsX2RxbyhzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqYmxvY2ssIGludCBidWRnZXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZHFvLmg9NjU9dm9pZCBndmVfcnhfd3JpdGVfZG9vcmJlbGxfZHFvKGNvbnN0IHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgaW50IHF1ZXVlX2lkeCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZHFvLmg6NjY6dm9pZCBndmVfeGRwX3R4X2ZsdXNoX2RxbyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHUzMiB4ZHBfcWlkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9kcW8uaC02Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0zNTM9aW50IGd2ZV9uYXBpX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTM2Ny1cXHRcXHRlbHNlIGlmIChidWRnZXQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjM2ODpcXHRcXHRcXHRyZXNjaGVkdWxlIHw9IGd2ZV94ZHBfcG9sbChibG9jaywgYnVkZ2V0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMzY5LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz00MTE9aW50IGd2ZV9uYXBpX3BvbGxfZHFvKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy00MjItXFx0XFx0ZWxzZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzo0MjM6XFx0XFx0XFx0cmVzY2hlZHVsZSB8PSBndmVfeGRwX3BvbGxfZHFvKGJsb2NrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtNDI0LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz05MzY9c3RhdGljIHZvaWQgaW5pdF94ZHBfc3luY19zdGF0cyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTkzNy17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjkzODpcXHRpbnQgc3RhcnRfaWQgPSBndmVfeGRwX3R4X3N0YXJ0X3F1ZXVlX2lkKHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy05MzktXFx0aW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MTIxMD1zdGF0aWMgdm9pZCBndmVfdW5yZWdfeHNrX3Bvb2woc3RydWN0IGd2ZV9wcml2ICpwcml2LCB1MTYgcWlkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTEyMjMtXFx0XFx0cmV0dXJuO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxMjI0OlxcdHByaXYtXFx1MDAzZXR4W2d2ZV94ZHBfdHhfcXVldWVfaWQocHJpdiwgcWlkKV0ueHNrX3Bvb2wgPSBOVUxMO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xMjI1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0xMjI3PXN0YXRpYyBpbnQgZ3ZlX3JlZ194c2tfcG9vbChzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTI0My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6MTI0NDpcXHR0eF9xaWQgPSBndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsIHFpZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTEyNDUtXFx0cHJpdi1cXHUwMDNldHhbdHhfcWlkXS54c2tfcG9vbCA9IHBvb2w7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MTU3OT1zdGF0aWMgaW50IGd2ZV9zZXRfeGRwKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE2MTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjE2MTY6c3RhdGljIGludCBndmVfeGRwX3htaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG4sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE2MTctXFx0XFx0XFx0c3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcywgdTMyIGZsYWdzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE2MjEtXFx0aWYgKHByaXYtXFx1MDAzZXF1ZXVlX2Zvcm1hdCA9PSBHVkVfR1FJX1FQTF9GT1JNQVQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjE2MjI6XFx0XFx0cmV0dXJuIGd2ZV94ZHBfeG1pdF9ncWkoZGV2LCBuLCBmcmFtZXMsIGZsYWdzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTYyMy1cXHRlbHNlIGlmIChwcml2LVxcdTAwM2VxdWV1ZV9mb3JtYXQgPT0gR1ZFX0RRT19SREFfRk9STUFUKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxNjI0OlxcdFxcdHJldHVybiBndmVfeGRwX3htaXRfZHFvKGRldiwgbiwgZnJhbWVzLCBmbGFncyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE2MjUtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MTY3Nz1zdGF0aWMgaW50IGd2ZV94c2tfcG9vbF9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTcwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6MTcwNzpcXHR0eF9xaWQgPSBndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsIHFpZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE3MDgtXFx0bmFwaV90eCA9IFxcdTAwMjZwcml2LVxcdTAwM2VudGZ5X2Jsb2Nrc1twcml2LVxcdTAwM2V0eFt0eF9xaWRdLm50ZnlfaWRdLm5hcGk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM9MTc1Nj1zdGF0aWMgaW50IGd2ZV92ZXJpZnlfeGRwX2NvbmZpZ3VyYXRpb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xODA0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxODA1OnN0YXRpYyBpbnQgZ3ZlX3hkcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ZGV2X2JwZiAqeGRwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xODA2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0yMjQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZ3ZlX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjI1Mi1cXHQubmRvX3NldF9mZWF0dXJlc1xcdD1cXHRndmVfc2V0X2ZlYXR1cmVzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoyMjUzOlxcdC5uZG9fYnBmXFx0XFx0PVxcdGd2ZV94ZHAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjIyNTQ6XFx0Lm5kb194ZHBfeG1pdFxcdFxcdD1cXHRndmVfeGRwX3htaXQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTIyNTUtXFx0Lm5kb194c2tfd2FrZXVwXFx0XFx0PVxcdGd2ZV94c2tfd2FrZXVwLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTIzNzk9c3RhdGljIHZvaWQgZ3ZlX3NldF9uZXRkZXZfeGRwX2ZlYXR1cmVzKHN0cnVjdCBndmVfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yMzk3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoyMzk4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgeGRwX21ldGFkYXRhX29wcyBndmVfeGRwX21ldGFkYXRhX29wcyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6MjM5OTpcXHQueG1vX3J4X3RpbWVzdGFtcFxcdD0gZ3ZlX3hkcF9yeF90aW1lc3RhbXAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTI0MDAtfTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0yNDAyPXN0YXRpYyBpbnQgZ3ZlX2luaXRfcHJpdihzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIGJvb2wgc2tpcF9kZXNjcmliZV9kZXZpY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjQ5Ny1cXHRpZiAoIWd2ZV9pc19ncWkocHJpdikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjI0OTg6XFx0XFx0cHJpdi1cXHUwMDNlZGV2LVxcdTAwM2V4ZHBfbWV0YWRhdGFfb3BzID0gXFx1MDAyNmd2ZV94ZHBfbWV0YWRhdGFfb3BzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yNDk5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYz02OTQ9c3RhdGljIGludCBndmVfeHNrX3Bvb2xfcmVkaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtNzE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM6NzE5OnN0YXRpYyBpbnQgZ3ZlX3hkcF9yZWRpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtNzIwLVxcdFxcdFxcdCAgICBzdHJ1Y3QgeGRwX2J1ZmYgKm9yaWcsIHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2cpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTc1MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jOjc1MjpzdGF0aWMgdm9pZCBndmVfeGRwX2RvbmUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtNzUzLVxcdFxcdFxcdCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgc3RydWN0IGJwZl9wcm9nICp4cHJvZyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtNzY1LVxcdGNhc2UgWERQX1RYOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM6NzY2OlxcdFxcdHR4X3FpZCA9IGd2ZV94ZHBfdHhfcXVldWVfaWQocHJpdiwgcngtXFx1MDAzZXFfbnVtKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTc2Ny1cXHRcXHR0eCA9IFxcdTAwMjZwcml2LVxcdTAwM2V0eFt0eF9xaWRdO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtNzY4LVxcdFxcdHNwaW5fbG9jayhcXHUwMDI2dHgtXFx1MDAzZXhkcF9sb2NrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jOjc2OTpcXHRcXHRlcnIgPSBndmVfeGRwX3htaXRfb25lKHByaXYsIHR4LCB4ZHAtXFx1MDAzZWRhdGEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYy03NzAtXFx0XFx0XFx0XFx0ICAgICAgIHhkcC1cXHUwMDNlZGF0YV9lbmQgLSB4ZHAtXFx1MDAzZWRhdGEsIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYy03NzktXFx0Y2FzZSBYRFBfUkVESVJFQ1Q6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYzo3ODA6XFx0XFx0ZXJyID0gZ3ZlX3hkcF9yZWRpcmVjdChwcml2LVxcdTAwM2VkZXYsIHJ4LCB4ZHAsIHhwcm9nKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTc4MS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmM9Nzk2PXN0YXRpYyB2b2lkIGd2ZV9yeChzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYy04NjYtXFx0XFx0aWYgKHhkcF9hY3QgIT0gWERQX1BBU1MpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jOjg2NzpcXHRcXHRcXHRndmVfeGRwX2RvbmUocHJpdiwgcngsIFxcdTAwMjZ4ZHAsIHhwcm9nLCB4ZHBfYWN0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jLTg2OC1cXHRcXHRcXHRjdHgtXFx1MDAzZXRvdGFsX3NpemUgKz0gZnJhZ19zaXplO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnguYz0xMDAwPXN0YXRpYyBpbnQgZ3ZlX2NsZWFuX3J4X2RvbmUoc3RydWN0IGd2ZV9yeF9yaW5nICpyeCwgaW50IGJ1ZGdldCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtMTA1Mi1cXHRpZiAoeGRwX3R4cyAhPSByeC1cXHUwMDNleGRwX2FjdGlvbnNbWERQX1RYXSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeC5jOjEwNTM6XFx0XFx0Z3ZlX3hkcF90eF9mbHVzaChwcml2LCByeC1cXHUwMDNlcV9udW0pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4LmMtMTA1NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jPTIzNT1pbnQgZ3ZlX3J4X2FsbG9jX3JpbmdfZHFvKHN0cnVjdCBndmVfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTI2Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzoyNjM6XFx0Lyogc3RydWN0IGd2ZV94ZHBfYnVmZiBpcyBvdmVybGFpZCBvbiBzdHJ1Y3QgeGRwX2J1ZmZfeHNrIGFuZCB1dGlsaXplc1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTI2NC1cXHQgKiB0aGUgMjQgYnl0ZSBmaWVsZCBjYiB0byBzdG9yZSBndmUgc3BlY2lmaWMgZGF0YS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy0yNjUtXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6MjY2OlxcdFhTS19DSEVDS19QUklWX1RZUEUoc3RydWN0IGd2ZV94ZHBfYnVmZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtMjY3LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM9NTE1PXN0YXRpYyB2b2lkIGd2ZV9yeF9za2JfaHd0c3RhbXAoc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTUyNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo1MjU6aW50IGd2ZV94ZHBfcnhfdGltZXN0YW1wKGNvbnN0IHN0cnVjdCB4ZHBfbWQgKl9jdHgsIHU2NCAqdGltZXN0YW1wKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTUyNi17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6NTI3OlxcdGNvbnN0IHN0cnVjdCBndmVfeGRwX2J1ZmYgKmN0eCA9ICh2b2lkICopX2N0eDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy01MjgtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYz02MTE9c3RhdGljIGludCBndmVfcnhfYXBwZW5kX2ZyYWdzKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTY0OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo2NTA6c3RhdGljIGludCBndmVfeGRwX3R4X2RxbyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBndmVfcnhfcmluZyAqcngsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNjUxLVxcdFxcdFxcdCAgc3RydWN0IHhkcF9idWZmICp4ZHApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy02NjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6NjY1OlxcdHR4X3FpZCA9IGd2ZV94ZHBfdHhfcXVldWVfaWQocHJpdiwgcngtXFx1MDAzZXFfbnVtKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy02NjYtXFx0dHggPSBcXHUwMDI2cHJpdi1cXHUwMDNldHhbdHhfcWlkXTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy02NjctXFx0c3Bpbl9sb2NrKFxcdTAwMjZ0eC1cXHUwMDNlZHFvX3R4LnhkcF9sb2NrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo2Njg6XFx0ZXJyID0gZ3ZlX3hkcF94bWl0X29uZV9kcW8ocHJpdiwgdHgsIHhkcGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTY2OS1cXHRzcGluX3VubG9jayhcXHUwMDI2dHgtXFx1MDAzZWRxb190eC54ZHBfbG9jayk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYz02NzQ9c3RhdGljIHZvaWQgZ3ZlX3hza19kb25lX2RxbyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHN0cnVjdCBndmVfcnhfcmluZyAqcngsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy02ODQtXFx0Y2FzZSBYRFBfVFg6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6Njg1OlxcdFxcdGlmICh1bmxpa2VseShndmVfeGRwX3R4X2Rxbyhwcml2LCByeCwgeGRwKSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNjg2LVxcdFxcdFxcdGdvdG8gZXJyO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNzA4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjcwOTpzdGF0aWMgdm9pZCBndmVfeGRwX2RvbmVfZHFvKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy03MTAtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgc3RydWN0IGJwZl9wcm9nICp4cHJvZyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTcyMS1cXHRjYXNlIFhEUF9UWDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo3MjI6XFx0XFx0ZXJyID0gZ3ZlX3hkcF90eF9kcW8ocHJpdiwgcngsIHhkcCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNzIzLVxcdFxcdGlmICh1bmxpa2VseShlcnIpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM9NzUwPXN0YXRpYyBpbnQgZ3ZlX3J4X3hza19kcW8oc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNzU3LVxcdHN0cnVjdCBndmVfcHJpdiAqcHJpdiA9IHJ4LVxcdTAwM2VndmU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6NzU4OlxcdHN0cnVjdCBndmVfeGRwX2J1ZmYgKmd2ZV94ZHA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNzU5LVxcdGludCB4ZHBfYWN0O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNzYzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjc2NDpcXHRndmVfeGRwID0gKHZvaWQgKil4ZHA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6NzY1OlxcdGd2ZV94ZHAtXFx1MDAzZWd2ZSA9IHByaXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6NzY2OlxcdGd2ZV94ZHAtXFx1MDAzZWNvbXBsX2Rlc2MgPSBjb21wbF9kZXNjO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTc2Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jPTgyMT1zdGF0aWMgaW50IGd2ZV9yeF9kcW8oc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtOTI3LVxcdGlmICh4cHJvZykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjkyODpcXHRcXHRzdHJ1Y3QgZ3ZlX3hkcF9idWZmIGd2ZV94ZHA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtOTI5LVxcdFxcdHZvaWQgKm9sZF9kYXRhO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtOTMxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjkzMjpcXHRcXHR4ZHBfaW5pdF9idWZmKFxcdTAwMjZndmVfeGRwLnhkcCwgYnVmX3N0YXRlLVxcdTAwM2VwYWdlX2luZm8uYnVmX3NpemUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtOTMzLVxcdFxcdFxcdCAgICAgIFxcdTAwMjZyeC1cXHUwMDNleGRwX3J4cSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6OTM0OlxcdFxcdHhkcF9wcmVwYXJlX2J1ZmYoXFx1MDAyNmd2ZV94ZHAueGRwLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTkzNS1cXHRcXHRcXHRcXHQgYnVmX3N0YXRlLVxcdTAwM2VwYWdlX2luZm8ucGFnZV9hZGRyZXNzICtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTkzOC1cXHRcXHRcXHRcXHQgYnVmX2xlbiwgZmFsc2UpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjkzOTpcXHRcXHRndmVfeGRwLmd2ZSA9IHByaXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6OTQwOlxcdFxcdGd2ZV94ZHAuY29tcGxfZGVzYyA9IGNvbXBsX2Rlc2M7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtOTQxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjk0MjpcXHRcXHRvbGRfZGF0YSA9IGd2ZV94ZHAueGRwLmRhdGE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM6OTQzOlxcdFxcdHhkcF9hY3QgPSBicGZfcHJvZ19ydW5feGRwKHhwcm9nLCBcXHUwMDI2Z3ZlX3hkcC54ZHApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjk0NDpcXHRcXHRidWZfc3RhdGUtXFx1MDAzZXBhZ2VfaW5mby5wYWQgKz0gZ3ZlX3hkcC54ZHAuZGF0YSAtIG9sZF9kYXRhO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjk0NTpcXHRcXHRidWZfbGVuID0gZ3ZlX3hkcC54ZHAuZGF0YV9lbmQgLSBndmVfeGRwLnhkcC5kYXRhO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTk0Ni1cXHRcXHRpZiAoeGRwX2FjdCAhPSBYRFBfUEFTUykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjk0NzpcXHRcXHRcXHRndmVfeGRwX2RvbmVfZHFvKHByaXYsIHJ4LCBcXHUwMDI2Z3ZlX3hkcC54ZHAsIHhwcm9nLCB4ZHBfYWN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTk0OC1cXHRcXHRcXHRcXHRcXHQgYnVmX3N0YXRlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jPTEwOTE9aW50IGd2ZV9yeF9wb2xsX2RxbyhzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqYmxvY2ssIGludCBidWRnZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy0xMTg4LVxcdGlmICh4ZHBfdHhzICE9IHJ4LVxcdTAwM2V4ZHBfYWN0aW9uc1tYRFBfVFhdKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjExODk6XFx0XFx0Z3ZlX3hkcF90eF9mbHVzaF9kcW8ocHJpdiwgcngtXFx1MDAzZXFfbnVtKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy0xMTkwLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYz0xNj1zdGF0aWMgaW5saW5lIHZvaWQgZ3ZlX3R4X3B1dF9kb29yYmVsbChzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eC5jLTIyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmM6MjM6dm9pZCBndmVfeGRwX3R4X2ZsdXNoKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgdTMyIHhkcF9xaWQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYy0yNC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYzoyNTpcXHR1MzIgdHhfcWlkID0gZ3ZlX3hkcF90eF9xdWV1ZV9pZChwcml2LCB4ZHBfcWlkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eC5jLTI2LVxcdHN0cnVjdCBndmVfdHhfcmluZyAqdHggPSBcXHUwMDI2cHJpdi1cXHUwMDNldHhbdHhfcWlkXTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmM9Nzc3PXN0YXRpYyBpbnQgZ3ZlX3R4X2ZpbGxfeGRwKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV90eF9yaW5nICp0eCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmMtODIzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmM6ODI0OmludCBndmVfeGRwX3htaXRfZ3FpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuLCBzdHJ1Y3QgeGRwX2ZyYW1lICoqZnJhbWVzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmMtODI1LVxcdFxcdCAgICAgdTMyIGZsYWdzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYy04MzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYzo4Mzc6XFx0cWlkID0gZ3ZlX3hkcF90eF9xdWV1ZV9pZChwcml2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmMtODM4LVxcdFxcdFxcdFxcdCAgc21wX3Byb2Nlc3Nvcl9pZCgpICUgcHJpdi1cXHUwMDNldHhfY2ZnLm51bV94ZHBfcXVldWVzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmMtODQzLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuOyBpKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eC5jOjg0NDpcXHRcXHRlcnIgPSBndmVfeGRwX3htaXRfb25lKHByaXYsIHR4LCBmcmFtZXNbaV0tXFx1MDAzZWRhdGEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYy04NDUtXFx0XFx0XFx0XFx0ICAgICAgIGZyYW1lc1tpXS1cXHUwMDNlbGVuLCBmcmFtZXNbaV0pO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYy04NjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYzo4NjM6aW50IGd2ZV94ZHBfeG1pdF9vbmUoc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX3R4X3JpbmcgKnR4LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmMtODY0LVxcdFxcdCAgICAgdm9pZCAqZGF0YSwgaW50IGxlbiwgdm9pZCAqZnJhbWVfcClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4LmM9OTcxPWludCBndmVfeHNrX3R4X3BvbGwoc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKnJ4X2Jsb2NrLCBpbnQgYnVkZ2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYy05NzctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYzo5Nzg6XFx0dHggPSBcXHUwMDI2cHJpdi1cXHUwMDNldHhbZ3ZlX3hkcF90eF9xdWV1ZV9pZChwcml2LCByeC1cXHUwMDNlcV9udW0pXTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eC5jLTk3OS1cXHRpZiAodHgtXFx1MDAzZXhza19wb29sKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eC5jLTk5MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eC5jOjk5Mjpib29sIGd2ZV94ZHBfcG9sbChzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqYmxvY2ssIGludCBidWRnZXQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHguYy05OTMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmM9MTAyPXN0YXRpYyBib29sIGd2ZV9oYXNfcGVuZGluZ19wYWNrZXQoc3RydWN0IGd2ZV90eF9yaW5nICp0eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTExNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYzoxMTU6dm9pZCBndmVfeGRwX3R4X2ZsdXNoX2RxbyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsIHUzMiB4ZHBfcWlkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTExNi17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmM6MTE3OlxcdHUzMiB0eF9xaWQgPSBndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsIHhkcF9xaWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTExOC1cXHRzdHJ1Y3QgZ3ZlX3R4X3JpbmcgKnR4ID0gXFx1MDAyNnByaXYtXFx1MDAzZXR4W3R4X3FpZF07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYz0xNTEwPWJvb2wgZ3ZlX3hza190eF9wb2xsX2RxbyhzdHJ1Y3QgZ3ZlX25vdGlmeV9ibG9jayAqcnhfYmxvY2ssIGludCBidWRnZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYy0xNTE1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jOjE1MTY6XFx0dHggPSBcXHUwMDI2cHJpdi1cXHUwMDNldHhbZ3ZlX3hkcF90eF9xdWV1ZV9pZChwcml2LCByeC1cXHUwMDNlcV9udW0pXTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYy0xNTE3LVxcdGlmICh0eC1cXHUwMDNleHNrX3Bvb2wpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYy0xNTIyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jOjE1MjM6Ym9vbCBndmVfeGRwX3BvbGxfZHFvKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpibG9jaylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYy0xNTI0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE1MzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmM6MTUzNjppbnQgZ3ZlX3hkcF94bWl0X29uZV9kcW8oc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX3R4X3JpbmcgKnR4LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE1MzctXFx0XFx0XFx0IHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYy0xNTgyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jOjE1ODM6aW50IGd2ZV94ZHBfeG1pdF9kcW8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG4sIHN0cnVjdCB4ZHBfZnJhbWUgKipmcmFtZXMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmMtMTU4NC1cXHRcXHQgICAgIHUzMiBmbGFncylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE1OTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmM6MTU5MzpcXHRxaWQgPSBndmVfeGRwX3R4X3F1ZXVlX2lkKHByaXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmMtMTU5NC1cXHRcXHRcXHRcXHQgIHNtcF9wcm9jZXNzb3JfaWQoKSAlIHByaXYtXFx1MDAzZXR4X2NmZy5udW1feGRwX3F1ZXVlcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYy0xNTk5LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuOyBpKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYzoxNjAwOlxcdFxcdGVyciA9IGd2ZV94ZHBfeG1pdF9vbmVfZHFvKHByaXYsIHR4LCBmcmFtZXNbaV0pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE2MDEtXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTc6NTcuNjIzMTgyNTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIzNzI4NDg2ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSWRlbnRpZnlpbmcgYW5kIFByaW9yaXRpemluZyBFbnRyeSBQb2ludHMgZm9yIEFuYWx5c2lzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGlkZW50aWZ5IHRoZSBtb3N0IHN1aXRhYmxlIGVudHJ5IHBvaW50cyBmb3IgdGhpcyBhbmFseXNpcywgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGluc3RydWN0aW9ucy4gSSdtIGxvb2tpbmcgZm9yIGZ1bmN0aW9ucyB0aGF0IGFyZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuXG5cbkluaXRpYWxseSwgSSBpZGVudGlmaWVkIGEgZmV3IGtleSBlbnRyeSBwb2ludHM6IGBndmVfeGRwYCAod2hpY2ggaW50ZXJuYWxseSBjYWxscyBgZ3ZlX3hza19wb29sX2VuYWJsZWAgYW5kIGBndmVfeHNrX3Bvb2xfZGlzYWJsZWApLCBgZ3ZlX3hkcF94bWl0YCwgYGd2ZV94c2tfd2FrZXVwYCwgYW5kIGBndmVfbmFwaV9wb2xsX2Rxb2AgKHdoaWNoIGNhbGxzIGBndmVfcnhfcG9sbF9kcW9gKS4gQnV0LCB0aGUgY2FsbCBncmFwaCBpcyBhIGJpdCBtb3JlIGludHJpY2F0ZSB0aGFuIHRoYXQsIHNvIEkgZm9jdXNlZCBvbjogYGd2ZV94ZHBgLCBgZ3ZlX3hza193YWtldXBgLCBgZ3ZlX25hcGlfcG9sbF9kcW9gLCBhbmQgYGd2ZV9yeF9wb2xsX2Rxb2AuXG5cbk5vdywgdGhlIGluc3RydWN0aW9ucyBzdHJvbmdseSBzdWdnZXN0IHByZWZlcnJpbmcgbm9uLXN0YXRpYyBmdW5jdGlvbnMuICBgZ3ZlX3J4X3BvbGxfZHFvYCBpbW1lZGlhdGVseSBjYXVnaHQgbXkgZXllIGJlY2F1c2UgaXQgaXMgbm9uLXN0YXRpYy4gTGV0IG1lIGNvbmZpcm0gdGhlIHNpZ25hdHVyZTogYGludCBndmVfcnhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBpbnQgYnVkZ2V0KWAuIENvbmZpcm1lZC5cblxuYGd2ZV94ZHBgLCB0aG91Z2ggYWNjZXNzaWJsZSB2aWEgYC5uZG9fYnBmYCBhbmQgc3l6a2FsbGVyICh0aHJvdWdoIHRoZSBgYnBmYCBzeXNjYWxsIG9yIGBuZXRsaW5rYCBYRFAgc2V0dXApLCBpcyB1bmZvcnR1bmF0ZWx5IHN0YXRpYy4gVGhlIGluc3RydWN0aW9ucyBjbGVhcmx5IGZhdm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBzbyBgZ3ZlX3hkcGAgaXMgbGVzcyBpZGVhbC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIHN0YXRpYyBuYXR1cmUgb2YgYGd2ZV94c2tfcG9vbF9lbmFibGVgLiBZZXMsIGl0IGlzIHN0YXRpYy5cblxuT2theSwgbGV0J3MgZXhwYW5kIG15IHNlYXJjaCBmb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMuIEkgc2VlIGEgZmV3IG9wdGlvbnM6IGBndmVfeGRwX3htaXRfZHFvYCwgYGd2ZV94ZHBfeG1pdF9ncWlgLCBgZ3ZlX3hkcF94bWl0X29uZWAsIGBndmVfeGRwX3R4X2ZsdXNoYCwgYGd2ZV94ZHBfeG1pdF9vbmVfZHFvYCwgYGd2ZV94ZHBfcG9sbGAsIGFuZCBgZ3ZlX3hza190eF9wb2xsYC4gVGhlc2UgYXJlIGFsc28gbm9uLXN0YXRpYyBidXQgSSdsbCBob2xkIHRoZW0gYXMgc2Vjb25kYXJ5IGNhbmRpZGF0ZXMuXG5cbkNvbnNpZGVyaW5nIHRoZSBwYXRjaCBtb2RpZmljYXRpb25zLCBmb2N1c2luZyBvbiB0aGUgb25lcyB3aGljaCBhcmUgY2hhbmdlZCBtaWdodCBiZSBhIGJldHRlciBpZGVhLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGd2ZV94c2tfcG9vbF9lbmFibGVgLCBgZ3ZlX3hza19wb29sX2Rpc2FibGVgLCBgZ3ZlX3J4X3Jlc2V0X3JpbmdfZHFvYCwgYGd2ZV9yeF9kcW9gLCBhbmQgYGd2ZV9yeF9wb2xsX2Rxb2AuIFRoaXMgc3Ryb25nbHkgcmVpbmZvcmNlcyBgZ3ZlX3J4X3BvbGxfZHFvYCBhcyBhIGdvb2QgdGFyZ2V0LlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcyBhYm91dCByZWFjaGFiaWxpdHksIHNwZWNpZmljYWxseSB3aXRoaW4gR0NFIGFuZCBRRU1VLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGUgaW5zdHJ1Y3Rpb25zIHN0YXRlIHRoYXQgY29kZSBwYXRocyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIGFyZSBwcm9ibGVtYXRpYy4gIEdWRSBpcyBhIHZpcnR1YWwgTklDIHVzZWQgaW4gR0NFLCBhbmQgc2luY2Ugc3l6a2FsbGVyIHJ1bnMgb24gR0NFLCB0aGF0J3MgcGVyZmVjdCEgIFRoZSBkcml2ZXIgd2lsbCBiZSBwcmVzZW50IGFuZCBhY3RpdmUuIEdWRSBpcyBhIFBDSSBkZXZpY2UsIGJ1dCBpdCBpcyBhdmFpbGFibGUuIFRoZSBHQ0UgVk1zIGhhdmUgR1ZFIGFzIHRoZSBwcmltYXJ5IG5ldHdvcmsgaW50ZXJmYWNlLCBzbyBpdCdzIGxvYWRlZCBhbmQgcHJlc2VudC4gU3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IGluc3RhbnRpYXRlIHRoZSBkZXZpY2UsIGl0J3MgYSBwcmltYXJ5IGludGVyZmFjZS4gVGhlcmVmb3JlLCBgZ3ZlX3J4X3BvbGxfZHFvYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUuXG5cblNvLCBgZ3ZlX3J4X3BvbGxfZHFvYCBpcyBteSBwcmltYXJ5IGZvY3VzLiBJIHdpbGwgZG91YmxlLWNoZWNrIGl0cyBub24tc3RhdGljIG5hdHVyZSBvbmUgbGFzdCB0aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA5MCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTg6MDkuOTk2MDM0OTEzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzUwMjg2MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGd2ZV9yeF9wb2xsX2Rxb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9kcW8uaD00Mj1ib29sIGd2ZV94c2tfdHhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBpbnQgYnVkZ2V0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9kcW8uaDo0MzppbnQgZ3ZlX3J4X3BvbGxfZHFvKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpibG9jaywgaW50IGJ1ZGdldCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZHFvLmgtNDQtaW50IGd2ZV90eF9hbGxvY19yaW5nc19kcW8oc3RydWN0IGd2ZV9wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM9MTA1NT1zdGF0aWMgaW50IGd2ZV9yeF9jb21wbGV0ZV9za2Ioc3RydWN0IGd2ZV9yeF9yaW5nICpyeCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtMTA5MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzoxMDkxOmludCBndmVfcnhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBpbnQgYnVkZ2V0KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTEwOTIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxODoxMC4yMzEwNjk5MjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkzNzc5OTk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gSWRlbnRpZnlpbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZ3ZlX3J4X3BvbGxfZHFvYCwgYW5kIGl0J3MgZGVmaW5pdGVseSBub24tc3RhdGljLCBnb3QgdGhhdC4gTm93LCB3aGF0IGFib3V0IGBndmVfeGRwYD8gQWgsIHJpZ2h0LCB0aGF0J3MgYSBzdGF0aWMgZnVuY3Rpb24uIEhtbSwgaXMgdGhlcmUgYW55ICpub24tc3RhdGljKiBjb3VudGVycGFydCB0aGF0IGNhbGxzIGBndmVfeHNrX3Bvb2xfZW5hYmxlYD8gTm8sIGl0J3MgY2FsbGVkIGRpcmVjdGx5IGZyb20gd2l0aGluIGBndmVfeGRwYC4gTWFrZXMgc2Vuc2UuIEFscmlnaHQsIEknbGwgYWRkIGBndmVfcnhfcG9sbF9kcW9gIHRvIG15IEZvY3VzU3ltYm9scyBsaXN0IOKAkyB0aGF0IHNlZW1zIGltcG9ydGFudC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlc2UgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFRpbWUgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIGNvbmZpZ3MuIEkgYWxyZWFkeSBzZWUgYE5FVF9WRU5ET1JfR09PR0xFYCBhbmQgYEdWRWAuLi5idXQgd2FpdCBhIHNlY29uZC4gRG9lcyBlbmFibGluZyBgR1ZFYCBpdHNlbGYgcHVsbCBpbiBkZXBlbmRlbmNpZXMgbGlrZSBgQlBGX1NZU0NBTExgIG9yIGBYRFBfU09DS0VUU2A/IFRoZSBwYXRjaCBJJ20gZXhhbWluaW5nIG1vZGlmaWVzIGBndmVfeHNrX3Bvb2xfZW5hYmxlYCwgd2hpY2gsIGlmIEkgcmVjYWxsLCBkZWFscyB3aXRoIGB4c2tfcG9vbF9kbWFfdW5tYXBgLCBgeHNrX2dldF9wb29sX2Zyb21fcWlkYCwgYW5kIGFsbCB0aGF0IFhEUC1yZWxhdGVkIHN0dWZmLiBTbywgaXQncyB3b3J0aCBkb3VibGUtY2hlY2tpbmcgdGhhdCBgWERQX1NPQ0tFVFNgIGlzIGEgcmVxdWlyZW1lbnQgaGVyZS4gTmVlZCB0byBjb25maXJtIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjgyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjE4OjE1LjE2ODg3Mzk3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDIyNzc1NTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhza19wb29sX2RtYV91bm1hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfeGRwLmM9MjE9c3RhdGljIGludCB0c25lcF94ZHBfZW5hYmxlX3Bvb2woc3RydWN0IHRzbmVwX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF94ZHAuYy00OS1cXHRpZiAocmV0dmFsKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfeGRwLmM6NTA6XFx0XFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX3hkcC5jLTUxLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfeGRwLmM9NTg9c3RhdGljIGludCB0c25lcF94ZHBfZGlzYWJsZV9wb29sKHN0cnVjdCB0c25lcF9hZGFwdGVyICphZGFwdGVyLCB1MTYgcXVldWVfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF94ZHAuYy03NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF94ZHAuYzo3NTpcXHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwgRE1BX0FUVFJfU0tJUF9DUFVfU1lOQyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfeGRwLmMtNzYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTIteHNrLmM9MTczPXN0YXRpYyBpbnQgZHBhYTJfeHNrX2Rpc2FibGVfcG9vbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcWlkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXhzay5jLTE4OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTIteHNrLmM6MTkwOlxcdHhza19wb29sX2RtYV91bm1hcChwb29sLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTIteHNrLmMtMTkxLVxcdGVyciA9IHhkcF9yeHFfaW5mb19yZWdfbWVtX21vZGVsKFxcdTAwMjZjaC1cXHUwMDNleGRwX3J4cSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi14c2suYz0yMjA9c3RhdGljIGludCBkcGFhMl94c2tfZW5hYmxlX3Bvb2woc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi14c2suYy0yOTQtZXJyX21lbV9tb2RlbDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTIteHNrLmM6Mjk1OlxcdHhza19wb29sX2RtYV91bm1hcChwb29sLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTIteHNrLmMtMjk2LWVycl9kbWFfdW5tYXA6XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYz00NTYxPXN0YXRpYyBpbnQgZmVjX2VuYWJsZV94c2tfcG9vbChzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNDU4NC1cXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6NDU4NTpcXHRcXHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwgMCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNDU4Ni1cXHRcXHRyZXR1cm4gZXJyO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9NDU5Mj1zdGF0aWMgaW50IGZlY19kaXNhYmxlX3hza19wb29sKHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXAsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00NjAxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjQ2MDI6XFx0XFx0eHNrX3Bvb2xfZG1hX3VubWFwKG9sZF9wb29sLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00NjAzLVxcdFxcdHJ4cS1cXHUwMDNleHNrX3Bvb2wgPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNDYxMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzo0NjEzOlxcdHhza19wb29sX2RtYV91bm1hcChvbGRfcG9vbCwgMCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNDYxNC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0xNjI5PXN0YXRpYyBpbnQgZ3ZlX3hza19wb29sX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTE2NzAtXFx0Y2xlYXJfYml0KHFpZCwgcHJpdi1cXHUwMDNleHNrX3Bvb2xzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6MTY3MTpcXHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMTY3Mi1cXHRcXHRcXHQgICBETUFfQVRUUl9TS0lQX0NQVV9TWU5DIHxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0xNjc3PXN0YXRpYyBpbnQgZ3ZlX3hza19wb29sX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xNzI2LVxcdGlmIChwb29sKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoxNzI3OlxcdFxcdHhza19wb29sX2RtYV91bm1hcChwb29sLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0xNzI4LVxcdFxcdFxcdFxcdCAgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMgfFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jPTEzOD1zdGF0aWMgaW50IGk0MGVfeHNrX3Bvb2xfZGlzYWJsZShzdHJ1Y3QgaTQwZV92c2kgKnZzaSwgdTE2IHFpZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suYy0xNTctXFx0Y2xlYXJfYml0KHFpZCwgdnNpLVxcdTAwM2VhZl94ZHBfemNfcXBzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfeHNrLmM6MTU4OlxcdHhza19wb29sX2RtYV91bm1hcChwb29sLCBJNDBFX1JYX0RNQV9BVFRSKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfeHNrLmMtMTU5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV94c2suYz0xMjQ9c3RhdGljIGludCBpY2VfeHNrX3Bvb2xfZGlzYWJsZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1MTYgcWlkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV94c2suYy0xMzAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV94c2suYzoxMzE6XFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIElDRV9SWF9ETUFfQVRUUik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV94c2suYy0xMzItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX3hzay5jPTk3PXN0YXRpYyBpbnQgaWdiX3hza19wb29sX2VuYWJsZShzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX3hzay5jLTEzMC1cXHRcXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl94c2suYzoxMzE6XFx0XFx0XFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIElHQl9SWF9ETUFfQVRUUik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl94c2suYy0xMzItXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfeHNrLmM9MTM5PXN0YXRpYyBpbnQgaWdiX3hza19wb29sX2Rpc2FibGUoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1MTYgcWlkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl94c2suYy0xNTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl94c2suYzoxNTU6XFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIElHQl9SWF9ETUFfQVRUUik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl94c2suYy0xNTYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX3hkcC5jPTU2PXN0YXRpYyBpbnQgaWdjX3hkcF9lbmFibGVfcG9vbChzdHJ1Y3QgaWdjX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX3hkcC5jLTEwOS1cXHRcXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY194ZHAuYzoxMTA6XFx0XFx0XFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIElHQ19SWF9ETUFfQVRUUik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY194ZHAuYy0xMTEtXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfeGRwLmM9MTE4PXN0YXRpYyBpbnQgaWdjX3hkcF9kaXNhYmxlX3Bvb2woc3RydWN0IGlnY19hZGFwdGVyICphZGFwdGVyLCB1MTYgcXVldWVfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX3hkcC5jLTE0NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX3hkcC5jOjE0NjpcXHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwgSUdDX1JYX0RNQV9BVFRSKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX3hkcC5jLTE0Ny1cXHRjbGVhcl9iaXQoSUdDX1JJTkdfRkxBR19BRl9YRFBfWkMsIFxcdTAwMjZyeF9yaW5nLVxcdTAwM2VmbGFncyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV94c2suYz0yMz1zdGF0aWMgaW50IGl4Z2JlX3hza19wb29sX2VuYWJsZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jLTU2LVxcdFxcdFxcdGNsZWFyX2JpdChxaWQsIGFkYXB0ZXItXFx1MDAzZWFmX3hkcF96Y19xcHMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jOjU3OlxcdFxcdFxcdHhza19wb29sX2RtYV91bm1hcChwb29sLCBJWEdCRV9SWF9ETUFfQVRUUik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeHNrLmMtNTgtXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jPTY1PXN0YXRpYyBpbnQgaXhnYmVfeHNrX3Bvb2xfZGlzYWJsZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgdTE2IHFpZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jLTgwLVxcdGNsZWFyX2JpdChxaWQsIGFkYXB0ZXItXFx1MDAzZWFmX3hkcF96Y19xcHMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jOjgxOlxcdHhza19wb29sX2RtYV91bm1hcChwb29sLCBJWEdCRV9SWF9ETUFfQVRUUik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeHNrLmMtODItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgveHNrLmM9MjU2PWludCBsaWJldGhfeHNrX3NldHVwX3Bvb2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHFpZCwgYm9vbCBlbmFibGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgveHNrLmMtMjY3LVxcdGVsc2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgveHNrLmM6MjY4OlxcdFxcdHhza19wb29sX2RtYV91bm1hcChwb29sLCBMSUJFVEhfWFNLX0RNQV9BVFRSKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgveHNrLmMtMjY5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfeHNrLmM9MTQwPWludCBvdHgyX3hza19wb29sX2Rpc2FibGUoc3RydWN0IG90eDJfbmljICpwZiwgdTE2IHFpZHgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml94c2suYy0xNTMtXFx0Y2xlYXJfYml0KHFpZHgsIHBmLVxcdTAwM2VhZl94ZHBfemNfcWlkeCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfeHNrLmM6MTU0OlxcdHhza19wb29sX2RtYV91bm1hcChwb29sLCBETUFfQVRUUl9TS0lQX0NQVV9TWU5DIHwgRE1BX0FUVFJfV0VBS19PUkRFUklORyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfeHNrLmMtMTU1LVxcdC8qIFJlY29uZmlndXJlIFJTUyB0YWJsZSBhcyAncWlkeCcgbm93IG5lZWQgdG8gYmUgcGFydCBvZiBSU1Mgbm93ICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veHNrL3Bvb2wuYz0xNz1zdGF0aWMgdm9pZCBtbHg1ZV94c2tfdW5tYXBfcG9vbChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94c2svcG9vbC5jLTE5LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veHNrL3Bvb2wuYzoyMDpcXHRyZXR1cm4geHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94c2svcG9vbC5jLTIxLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF94c2suYz05OT1zdGF0aWMgdm9pZCBuZnBfbmV0X3hza19wb29sX3VubWFwKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF94c2suYy0xMDEte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF94c2suYzoxMDI6XFx0cmV0dXJuIHhza19wb29sX2RtYV91bm1hcChwb29sLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfeHNrLmMtMTAzLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY194ZHAuYz01OD1zdGF0aWMgaW50IHN0bW1hY194ZHBfZGlzYWJsZV9wb29sKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTE2IHF1ZXVlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3hkcC5jLTgwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY194ZHAuYzo4MTpcXHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwgU1RNTUFDX1JYX0RNQV9BVFRSKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfeGRwLmMtODItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguYz0xNTIwPXN0YXRpYyBpbnQgcHJ1ZXRoX3hza19wb29sX2Rpc2FibGUoc3RydWN0IHBydWV0aF9lbWFjICplbWFjLCB1MTYgcXVldWVfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguYy0xNTQ5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jOjE1NTA6XFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIFBSVUVUSF9SWF9ETUFfQVRUUik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmMtMTU1MS1cXHRlbWFjLVxcdTAwM2V4c2tfcWlkID0gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYz01ODg1PXN0YXRpYyBpbnQgdmlydG5ldF94c2tfcG9vbF9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy01OTU5LWVycl9ycTpcXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmM6NTk2MDpcXHR4c2tfcG9vbF9kbWFfdW5tYXAocG9vbCwgMCk7XFxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jLTU5NjEtZXJyX3hza19tYXA6XFxuLS1cXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmM9NTk2OT1zdGF0aWMgaW50IHZpcnRuZXRfeHNrX3Bvb2xfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcWlkKVxcbi0tXFxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jLTU5ODctXFxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jOjU5ODg6XFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsIDApO1xcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy01OTg5LVxcbi0tXFxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2Lmg9ODY9c3RhdGljIGlubGluZSB2b2lkIHhza19wb29sX2ZpbGxfY2Ioc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxuLS1cXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaC05MS1cXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaDo5MjpzdGF0aWMgaW5saW5lIHZvaWQgeHNrX3Bvb2xfZG1hX3VubWFwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oLTkzLVxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgYXR0cnMpXFxuLS1cXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaD00MjI9c3RhdGljIGlubGluZSB2b2lkIHhza19wb29sX2ZpbGxfY2Ioc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxuLS1cXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaC00MjYtXFxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2Lmg6NDI3OnN0YXRpYyBpbmxpbmUgdm9pZCB4c2tfcG9vbF9kbWFfdW5tYXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2LmgtNDI4LVxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgYXR0cnMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjE4OjE3LjU5MTY1NDQzN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjcwNzUxMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFhEUF9TT0NLRVRTIERlcGVuZGVuY3kgZm9yIHhza19wb29sX2RtYV91bm1hcCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHhza19wb29sX2RtYV91bm1hcGAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyB0byBtZSB0aGF0IGl0J3MgcmVseWluZyBvbiBgWERQX1NPQ0tFVFNgIGJlaW5nIHByb3Blcmx5IGNvbmZpZ3VyZWQgZm9yIGl0IHRvIGJlIGZ1bGx5IGZ1bmN0aW9uYWwuIFRoaXMgaXMgYSBjb21tb24gc2l0dWF0aW9uLCByaWdodD8gRnVuY3Rpb25zIG9mdGVuIGRlcGVuZCBvbiBjZXJ0YWluIHVuZGVybHlpbmcgZmVhdHVyZSBmbGFncyBvciBjb25maWd1cmF0aW9ucyB0byB3b3JrIGFzIGludGVuZGVkLiBUaGUgdHJhY2UgSSBoYXZlIGluZGljYXRlcyB0aGUgbmVlZCBmb3IgYFhEUF9TT0NLRVRTYC5cblxuTm93LCB0aGUgdGhpbmcgdGhhdCBzdHJpa2VzIG1lIGlzIHdoZXJlIHRoaXMgYFhEUF9TT0NLRVRTYCBpcyBkZWZpbmVkLiBJdCdzIHR1Y2tlZCBhd2F5IGluIGBpbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaGAuIEdpdmVuIHRoYXQgdGhpcyBpcyBhIGNvcmUgcGllY2Ugb2YgWERQIHNvY2tldCBpbmZyYXN0cnVjdHVyZSwgaXQgbWFrZXMgc2Vuc2UgaXQncyBpbiBhIGhlYWRlciBzcGVjaWZpYyB0byB0aGF0LlxuXG5TbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2LmhgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBYRFBfU09DS0VUU2AgYWN0dWFsbHkgZW50YWlscywgd2hhdCBpdCdzIGVuYWJsaW5nLCBhbmQgZXhhY3RseSBob3cgaXQgcmVsYXRlcyB0byB0aGlzIGB4c2tfcG9vbF9kbWFfdW5tYXBgIGZ1bmN0aW9uLiBJIGhhdmUgYSBmZWVsaW5nIEknbGwgZmluZCB0aGUgYW5zd2VyIHRvIG15IG9yaWdpbmFsIHF1ZXN0aW9uIGFib3V0IHRoZSBmdW5jdGlvbidzIGZ1bGwgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhhdCBpbmNsdWRlIGZpbGUuIEl0J3MgYSBiaXQgb2YgZGV0ZWN0aXZlIHdvcmssIGJ1dCB0aGF0J3MgaG93IHlvdSBmaWd1cmUgb3V0IHRoZXNlIGRlcGVuZGVuY2llcyBpbiB0aGUga2VybmVsLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDQxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTg6MjIuMjYyNDA4NDE2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuICAgMjpcXHQvKiBJbnRlcmZhY2UgZm9yIGltcGxlbWVudGluZyBBRl9YRFAgemVyby1jb3B5IHN1cHBvcnQgaW4gZHJpdmVycy5cXG4gICAzOlxcdCAqIENvcHlyaWdodChjKSAyMDIwIEludGVsIENvcnBvcmF0aW9uLlxcbiAgIDQ6XFx0ICovXFxuICAgNTpcXHRcXG4gICA2OlxcdCNpZm5kZWYgX0xJTlVYX1hEUF9TT0NLX0RSVl9IXFxuICAgNzpcXHQjZGVmaW5lIF9MSU5VWF9YRFBfU09DS19EUlZfSFxcbiAgIDg6XFx0XFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3hkcF9zb2NrLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3hza19idWZmX3Bvb2wuaFxcdTAwM2VcXG4gIDExOlxcdFxcbiAgMTI6XFx0I2RlZmluZSBYRFBfVU1FTV9NSU5fQ0hVTktfU0hJRlQgMTFcXG4gIDEzOlxcdCNkZWZpbmUgWERQX1VNRU1fTUlOX0NIVU5LX1NJWkUgKDEgXFx1MDAzY1xcdTAwM2MgWERQX1VNRU1fTUlOX0NIVU5LX1NISUZUKVxcbiAgMTQ6XFx0XFxuICAxNTpcXHQjZGVmaW5lIE5FVERFVl9YRFBfQUNUX1hTS1xcdChORVRERVZfWERQX0FDVF9CQVNJQyB8XFx0XFx0XFxcXFxcbiAgMTY6XFx0XFx0XFx0XFx0XFx0IE5FVERFVl9YRFBfQUNUX1JFRElSRUNUIHxcXHRcXFxcXFxuICAxNzpcXHRcXHRcXHRcXHRcXHQgTkVUREVWX1hEUF9BQ1RfWFNLX1pFUk9DT1BZKVxcbiAgMTg6XFx0XFxuICAxOTpcXHRzdHJ1Y3QgeHNrX2NiX2Rlc2Mge1xcbiAgMjA6XFx0XFx0dm9pZCAqc3JjO1xcbiAgMjE6XFx0XFx0dTggb2ZmO1xcbiAgMjI6XFx0XFx0dTggYnl0ZXM7XFxuICAyMzpcXHR9O1xcbiAgMjQ6XFx0XFxuICAyNTpcXHQjaWZkZWYgQ09ORklHX1hEUF9TT0NLRVRTXFxuICAyNjpcXHRcXG4gIDI3OlxcdHZvaWQgeHNrX3R4X2NvbXBsZXRlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX2VudHJpZXMpO1xcbiAgMjg6XFx0Ym9vbCB4c2tfdHhfcGVla19kZXNjKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpO1xcbiAgMjk6XFx0dTMyIHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heCk7XFxuICAzMDpcXHR2b2lkIHhza190eF9yZWxlYXNlKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKTtcXG4gIDMxOlxcdHN0cnVjdCB4c2tfYnVmZl9wb29sICp4c2tfZ2V0X3Bvb2xfZnJvbV9xaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gIDMyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICB1MTYgcXVldWVfaWQpO1xcbiAgMzM6XFx0dm9pZCB4c2tfc2V0X3J4X25lZWRfd2FrZXVwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKTtcXG4gIDM0OlxcdHZvaWQgeHNrX3NldF90eF9uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCk7XFxuICAzNTpcXHR2b2lkIHhza19jbGVhcl9yeF9uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCk7XFxuICAzNjpcXHR2b2lkIHhza19jbGVhcl90eF9uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCk7XFxuICAzNzpcXHRib29sIHhza191c2VzX25lZWRfd2FrZXVwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKTtcXG4gIDM4OlxcdFxcbiAgMzk6XFx0c3RhdGljIGlubGluZSB1MzIgeHNrX3Bvb2xfZ2V0X2hlYWRyb29tKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxcbiAgNDA6XFx0e1xcbiAgNDE6XFx0XFx0cmV0dXJuIFhEUF9QQUNLRVRfSEVBRFJPT00gKyBwb29sLVxcdTAwM2VoZWFkcm9vbTtcXG4gIDQyOlxcdH1cXG4gIDQzOlxcdFxcbiAgNDQ6XFx0c3RhdGljIGlubGluZSB1MzIgeHNrX3Bvb2xfZ2V0X3RhaWxyb29tKGJvb2wgbWJ1ZilcXG4gIDQ1OlxcdHtcXG4gIDQ2OlxcdFxcdHJldHVybiBtYnVmID8gU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKSA6IDA7XFxuICA0NzpcXHR9XFxuICA0ODpcXHRcXG4gIDQ5OlxcdHN0YXRpYyBpbmxpbmUgdTMyIHhza19wb29sX2dldF9jaHVua19zaXplKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxcbiAgNTA6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxODoyMi4yNjI1NjYyMDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU1MDg3NzQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgR1ZFIFBhdGNoKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBhIHBhdGNoIHJlbGF0ZWQgdG8gR29vZ2xlJ3MgVmlydHVhbCBFdGhlcm5ldCAoR1ZFKSBkcml2ZXIsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIFhEUCBhbmQgQUZfWERQLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgQ09ORklHX1hEUF9TT0NLRVRTYCBpcyBpbmRlZWQgcmVxdWlyZWQsIHNvIEknbGwgYmUgYWRkaW5nIGBYRFBfU09DS0VUU2AgdG8gYEVuYWJsZUNvbmZpZ3NgLiBHaXZlbiB0aGUgY29udGV4dCwgaXQncyBjbGVhciB3ZSdyZSBkZWFsaW5nIHdpdGggR1ZFLCBzbyBuYXR1cmFsbHksIGBORVRfVkVORE9SX0dPT0dMRWAgYW5kIGBHVkVgIG5lZWQgdG8gYmUgZW5hYmxlZC4gQW5kIHNpbmNlIHdlJ3JlIHdvcmtpbmcgd2l0aCBYRFAsIGBCUEZfU1lTQ0FMTGAgaXMgcHJldHR5IG11Y2ggYSBnaXZlbi5cblxuTGV0J3MgcXVpY2tseSB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEdWRWAsIHNpbmNlIHRoaXMgaXMgYSBjcml0aWNhbCBkcml2ZXIuIEFoYSwgYFBDSV9NU0lgIGFuZCBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgIGFyZSByZXF1aXJlZC4gVGhhdCBjb25maXJtcyB0aGUgbmVjZXNzYXJ5IGZvdW5kYXRpb24uXG5cbk5vdywgZm9jdXNpbmcgb24gdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvbiBmdW5jdGlvbiBjYWxscy4gSSdtIHRha2luZyBhIGxvb2sgYXQgYGd2ZV9yeF9wb2xsX2Rxb2AgYWdhaW4sIGFuZCBhbSBjaGVja2luZyBmb3IgcmVsYXRlZCBtb2RpZmljYXRpb25zIHRvIG90aGVyIGZ1bmN0aW9ucy5cblxuYGd2ZV9yeF9kcW9gLCBgZ3ZlX3J4X3Jlc2V0X3JpbmdfZHFvYCwgYGd2ZV94c2tfcG9vbF9lbmFibGVgLCBgZ3ZlX3hza19wb29sX2Rpc2FibGVgLCBhbmQgYGd2ZV94c2tfd2FrZXVwYCBhcmUgYWxsIHN0YXRpYywgc28gdGhleSB3b24ndCBiZSBleHBvc2VkIGFzIHN5bWJvbHMuIEJ1dCB3YWl0LCBgZ3ZlX25hcGlfcG9sbF9kcW9gIGlzIGFsc28gbm9uLXN0YXRpYy4gQmVjYXVzZSBvZiB0aGlzLCBJIG5lZWQgdG8gYWRkIGJvdGggYGd2ZV9yeF9wb2xsX2Rxb2AgYW5kIGBndmVfbmFwaV9wb2xsX2Rxb2AgYXMgc3ltYm9scy5cblxuQWxyaWdodCwgbGV0J3MgcmVjYXAgdGhlIHBhdGNoJ3MgcmVhc29uaW5nLiBJdCdzIGFkZHJlc3NpbmcgYSBidWcgaW4gYGd2ZV9yeF9wb2xsX2Rxb2Agd2hlcmUgYHdvcmtfZG9uZWAgd2Fzbid0IGJlaW5nIGNvcnJlY3RseSBpbmNyZW1lbnRlZCB1bmRlciBhIHNwZWNpZmljIGNvbmRpdGlvbiBhbmQgaW5jb3JyZWN0IG9yIG1pc3NpbmcgY2FsbHMgdG8gYHhza19wb29sX2RtYV91bm1hcGAgaW4gYGd2ZV94c2tfcG9vbF9lbmFibGVgIGFuZCBgZ3ZlX3hza19wb29sX2Rpc2FibGVgLiBBbHNvLCB0aGVyZSdzIGEgbWVtb3J5IGxlYWsgZml4ZWQgaW4gYGd2ZV9yeF9yZXNldF9yaW5nX2Rxb2AgYW5kIGBndmVfcnhfZHFvYCBieSBmcmVlaW5nIGB4c2tfYnVmZmAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsbHkgcmVsZXZhbnQgYW5kIGRlbW9uc3RyYWJseSByZWFjaGFibGUgaW4gR0NFIGVudmlyb25tZW50cy4gQ29uc2lkZXJpbmcgdGhhdCB0aGVzZSBmaXhlcyBoYXZlIHJlYWwtd29ybGQgaW1wYWN0LCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkIGhlcmUuXG5cblNvLCBqdXN0IHRvIHN1bW1hcml6ZSBteSBmaW5kaW5ncywgSSdsbCBiZSBlbmFibGluZyBgTkVUX1ZFTkRPUl9HT09HTEVgLCBgR1ZFYCwgYFhEUF9TT0NLRVRTYCwgYW5kIGBCUEZfU1lTQ0FMTGAuXG5cblRoZSBrZXkgc3ltYm9scyBJJ20gZm9jdXNpbmcgb24gYXJlIGBndmVfcnhfcG9sbF9kcW9gIGFuZCBgZ3ZlX25hcGlfcG9sbF9kcW9gLiBJJ20gZG91YmxlLWNoZWNraW5nLCBqdXN0IHRvIGJlIHN1cmUsIHRoYXQgYGd2ZV9uYXBpX3BvbGxfZHFvYCBpcyBpbmRlZWQgbm9uLXN0YXRpYyBhbmQgZXhwb3NlZCBhcyBhIHN5bWJvbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzNDYsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxODoyOS44MTM0NTM2NzRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODk4NzIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgZ3ZlX25hcGlfcG9sbF9kcW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZHFvLmg9MTA3PWd2ZV9zZXRfaXRyX2NvYWxlc2NlX3VzZWNzX2RxbyhzdHJ1Y3QgZ3ZlX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9kcW8uaC0xMTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZHFvLmg6MTE1OmludCBndmVfbmFwaV9wb2xsX2RxbyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2Rxby5oLTExNi0jZW5kaWYgLyogX0dWRV9EUU9fSF8gKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYz0zNTM9aW50IGd2ZV9uYXBpX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTQxMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmM6NDExOmludCBndmVfbmFwaV9wb2xsX2RxbyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTQxMi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjE4OjI5LjkyMjQ1MDU4M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDY4OTIxMzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBOb24tU3RhdGljIEZ1bmN0aW9uIFVzYWdlKipcblxuQWxyaWdodCwgc28gYGd2ZV9uYXBpX3BvbGxfZHFvYCBpcyBkZWZpbml0aXZlbHkgbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4gTm93LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgcmVsYXRlZCB0byBpdHMgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgZHJpdmVyLiBNeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSB2ZXJpZnkgd2hldGhlciBgZ3ZlX3hkcF94bWl0X2Rxb2AgaXMgYWxzbyBkZWNsYXJlZCBhcyBub24tc3RhdGljLiBUaGlzIGlzIGtleSwgYmVjYXVzZSB0aGUgbm9uLXN0YXRpYyBuYXR1cmUgb2YgdGhlc2UgZnVuY3Rpb25zIHBsYXlzIGEgc2lnbmlmaWNhbnQgcm9sZSBpbiBob3cgdGhlIGRhdGEgcXVldWUgb3BlcmF0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSB3aWRlciBzeXN0ZW0uIFRoYXQgaW5mb3JtYXRpb24gd2lsbCBoZWxwIGRldGVybWluZSB3aGF0IGFyZWFzIG9mIHRoZSBjb2RlIGFyZSBhZmZlY3RlZCBieSB0aGlzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTg2NiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjE4OjMyLjk5MTM3NTM5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDE5ODc1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgZ3ZlX3hkcF94bWl0X2Rxb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oPTEyMjc9aW50IGd2ZV94ZHBfeG1pdF9ncWkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG4sIHN0cnVjdCB4ZHBfZnJhbWUgKipmcmFtZXMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMjI4LVxcdFxcdCAgICAgdTMyIGZsYWdzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZS5oOjEyMjk6aW50IGd2ZV94ZHBfeG1pdF9kcW8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG4sIHN0cnVjdCB4ZHBfZnJhbWUgKipmcmFtZXMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmUuaC0xMjMwLVxcdFxcdCAgICAgdTMyIGZsYWdzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jPTE1MzY9aW50IGd2ZV94ZHBfeG1pdF9vbmVfZHFvKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV90eF9yaW5nICp0eCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE1ODItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmM6MTU4MzppbnQgZ3ZlX3hkcF94bWl0X2RxbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbiwgc3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV90eF9kcW8uYy0xNTg0LVxcdFxcdCAgICAgdTMyIGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxODozMy4wNDU1ODA1NzVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3NTAzNDc3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQWRkaW5nIGBndmVfeGRwX3htaXRfZHFvYCBhbmQgQ2hlY2tpbmcgYGd2ZV94ZHBfcG9sbF9kcW9gKipcblxuUmlnaHQsIHNvIGBndmVfeGRwX3htaXRfZHFvYCBpcyBkZWZpbml0ZWx5IG5vdCBzdGF0aWMuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UsIGdpdmVuIGl0cyByb2xlLiBTaW5jZSBpdCBkaXJlY3RseSBkZWFscyB3aXRoIFhEUCB0cmFuc21pc3Npb24gd2l0aGluIHRoZSBEUU8gZm9ybWF0LCBhbmQgdGhhdCdzIHByZWNpc2VseSB3aGVyZSB3ZSd2ZSBiZWVuIG1ha2luZyBtb2RpZmljYXRpb25zIGluIGBndmVfcnhfZHFvLmNgLCBpdOKAmXMgY2xlYXIgSSBuZWVkIHRvIGluY2x1ZGUgaXQgaW4gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QuIEl04oCZcyBsb2dpY2FsbHkgY29ubmVjdGVkIGFuZCBjcnVjaWFsIGZvciB0aGUgYmlnZ2VyIHBpY3R1cmUuIFdlIGhhdmUgdG8gbWFrZSBzdXJlIHdlJ3JlIGtlZXBpbmcgdHJhY2sgb2YgZXZlcnl0aGluZyByZWxhdGVkIHRvIHRoaXMgRFFPIGZvcm1hdC5cblxuTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgc3RhdHVzIG9mIGBndmVfeGRwX3BvbGxfZHFvYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGF0IGZ1bmN0aW9uIGlzIHN0YXRpYyBvciBub3QuIFdlIGhhdmUgdG8gYmUgdGhvcm91Z2ggaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY0NzEsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxODozNi41MjA2MjYxODlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTIzODE2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJib29sIGd2ZV94ZHBfcG9sbF9kcW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZHFvLmg9NDA9Ym9vbCBndmVfdHhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBib29sIGRvX2NsZWFuKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9kcW8uaDo0MTpib29sIGd2ZV94ZHBfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9kcW8uaC00Mi1ib29sIGd2ZV94c2tfdHhfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrLCBpbnQgYnVkZ2V0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jPTE1MTA9Ym9vbCBndmVfeHNrX3R4X3BvbGxfZHFvKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpyeF9ibG9jaywgaW50IGJ1ZGdldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE1MjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfdHhfZHFvLmM6MTUyMzpib29sIGd2ZV94ZHBfcG9sbF9kcW8oc3RydWN0IGd2ZV9ub3RpZnlfYmxvY2sgKmJsb2NrKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3R4X2Rxby5jLTE1MjQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxODozNi43Mjk4Njg2NjdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc0NjkyNTA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBHVkUgWERQIFBvbGxpbmcqKlxuXG5Pa2F5LCBzbyBgZ3ZlX3hkcF9wb2xsX2Rxb2AgaXMgZGVmaW5pdGl2ZWx5ICpub3QqIGEgc3RhdGljIHN5bWJvbC4gVGhhdCdzIGEga2V5IHBvaW50LiBUaGlzIG1lYW5zLCB3aGVuIGNvbnNpZGVyaW5nIEZvY3VzU3ltYm9scywgd2UncmUgZGVmaW5pdGVseSBsb29raW5nIGF0OiBgZ3ZlX3J4X3BvbGxfZHFvYCwgYGd2ZV9uYXBpX3BvbGxfZHFvYCwgYW5kLCBjcnVjaWFsbHksIHRoZSBgZ3ZlX3hkcF9wb2xsX2Rxb2AgZnVuY3Rpb24gd2UgZXN0YWJsaXNoZWQgYXMgbm9uLXN0YXRpYy5cblxuTm93LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBORVRfVkVORE9SX0dPT0dMRWAsIGBHVkVgLCBgWERQX1NPQ0tFVFNgLCBhbmQgYEJQRl9TWVNDQUxMYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBCUEZfU1lTQ0FMTGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgY29udGV4dC4gVGhpcyByZXF1aXJlcyBhIGRlZXBlciBkaXZlIGludG8gaG93IHRoaXMgcmVsYXRlcyB0byBYRFAgYW5kIEdvb2dsZSdzIG5ldHdvcmtpbmcgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIEkgd2lsbCB2ZXJpZnkgdGhhdCB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgY29ycmVjdGx5IHN1cHBvcnRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTM0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjE4OjQwLjQ3Njc5Njg0NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3NzEwMDUzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTg6NDIuODUzOTAzOTk2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODIwMjY2MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKlZlcmlmeWluZyB0aGUgQ29uZmlndXJhdGlvbiBmb3IgZUJQRioqXG5cbkFscmlnaHQsIHRoYXQgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIGBCUEZfU1lTQ0FMTGAgc2VlbXMgc3BvdC1vbi4gV2UncmUgZGVmaW5pdGVseSBvbiB0aGUgcmlnaHQgdHJhY2sgdGhlcmUuIE5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgd2UndmUgZ290IHRoZSBuZWNlc3Nhcnkgc3VwcG9ydCBmb3IgYFhEUF9TT0NLRVRTYCBjb25maWd1cmVkIGNvcnJlY3RseS4gSXQncyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLCBhbmQgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGlzIGNvbXBvbmVudCBpcyBlbmFibGVkLCB0byBiZSBhYmxlIHRvIHByb2NlZWQgY29ycmVjdGx5LiBHb3R0YSBkb3VibGUtY2hlY2sgdGhvc2UgZnVuZGFtZW50YWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzU3MCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjE4OjQ1LjgzNTkzMjY4M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxMzQ2ODc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWERQX1NPQ0tFVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZHAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC94ZHAvS2NvbmZpZzoyOmNvbmZpZyBYRFBfU09DS0VUU1xcbm5ldC94ZHAvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlhEUCBzb2NrZXRzXFxcIlxcbi0tXFxubmV0L3hkcC9LY29uZmlnLTktXFxubmV0L3hkcC9LY29uZmlnOjEwOmNvbmZpZyBYRFBfU09DS0VUU19ESUFHXFxubmV0L3hkcC9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJYRFAgc29ja2V0czogbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjE4OjQ4LjM0OTQwNTg2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjQ2MTQzNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIHdlZWRzIG9mIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb246XG5cbioqWERQIGFuZCBNU0kgRGVwZW5kZW5jeSBDaGVjayoqXG5cblJpZ2h0LCBgWERQX1NPQ0tFVFNgIGlzIHRoZSByaWdodCBwYXRoIHRvIHB1cnN1ZSwgY29uZmlybWVkLiBOb3csIHRoZSBxdWVzdGlvbiBpcywgZG8gSSBuZWVkIHRvIGNvbmNlcm4gbXlzZWxmIHdpdGggYFBDSV9NU0lgPyBBaCwgeWVzLCBgR1ZFYCBpcyBhIGtleSBjb21wb25lbnQsIGFuZCBpdCdzIGRlcGVuZGVudCBvbiBgUENJX01TSWAuIFRpbWUgdG8gdmVyaWZ5IGlmIGBQQ0lfTVNJYCBpcyBhY3R1YWxseSBhIGNvbmZpZ3VyYWJsZSBvcHRpb24uIE5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBkZXBlbmRlbmN5IGlzIHNvbWV0aGluZyBJIGNhbiBjb250cm9sLCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuZXhwZWN0ZWQgYnVpbGQgY29uZmxpY3RzLiBMZXQncyBtYWtlIHN1cmUgaXQncyBhIGxlZ2l0aW1hdGUgY29uZmlnIHBhcmFtZXRlciBhbmQgaXNuJ3QgYmFrZWQgaW4sIHRoYXQgd2F5IEkgY2FuIHNldCBpdCBhcyBuZWVkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3ODc2LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTg6NTEuNTE0MDIzMDU4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU0NTQ5NDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQ0lfTVNJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3BjaS9LY29uZmlnPTQyPXNvdXJjZSBcXFwiZHJpdmVycy9wY2kvcGNpZS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvcGNpL0tjb25maWctNDMtXFxuZHJpdmVycy9wY2kvS2NvbmZpZzo0NDpjb25maWcgUENJX01TSVxcbmRyaXZlcnMvcGNpL0tjb25maWctNDUtXFx0Ym9vbCBcXFwiTWVzc2FnZSBTaWduYWxlZCBJbnRlcnJ1cHRzIChNU0kgYW5kIE1TSS1YKVxcXCJcXG4tLVxcbmRyaXZlcnMvcGNpL0tjb25maWctNTgtXFxuZHJpdmVycy9wY2kvS2NvbmZpZzo1OTpjb25maWcgUENJX01TSV9BUkNIX0ZBTExCQUNLU1xcbmRyaXZlcnMvcGNpL0tjb25maWctNjAtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxODo1My43Njg1NzgwMTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU0ODgzMDI1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ29uZmlybWluZyBDb25maWd1cmF0aW9uIGFuZCBFeHBsb3JpbmcgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgeWVwLCBsb29rcyBsaWtlIG15IGluaXRpYWwgYXNzZXNzbWVudCBvbiBgUENJX01TSWAgaXMgc3BvdC1vbi4gV2UncmUgZGVhbGluZyB3aXRoIE1lc3NhZ2UgU2lnbmFsZWQgSW50ZXJydXB0cywgYW5kIHRoYXQncyB0aGUgY29ycmVjdCBpbml0aWFsIHBhcmFtZXRlci4gTm93LCBiZWZvcmUgSSBtb3ZlIG9uLCBJIHdhbnQgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYFBUUF8xNTg4X0NMT0NLX09QVElPTkFMYCBpcyBhY3R1YWxseSBzZXQgYXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3IgaWYgdGhlcmUncyBzb21ldGhpbmcgZWxzZSBhdCBwbGF5LiBOZWVkIHRvIHJ1bGUgdGhhdCBvdXQgYXMgYSB2YXJpYWJsZSBiZWZvcmUgcHJvY2VlZGluZy4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MjY5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTg6NTguMzE3NDEyODM0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjYwMTg5MzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wdHAvS2NvbmZpZz04PWNvbmZpZyBQVFBfMTU4OF9DTE9DS1xcbi0tXFxuZHJpdmVycy9wdHAvS2NvbmZpZy0yOS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnOjMwOmNvbmZpZyBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvcHRwL0tjb25maWctMzEtXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTk6MDAuNTc3NjA4NzI3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5Mzk0NTQ1NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBMaW5lIG9mIFJlYXNvbmluZyoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYFBUUF8xNTg4X0NMT0NLX09QVElPTkFMYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbi4gTm93LCBsZXQncyBzZWUsIHRoZSBjdXJyZW50IGFjdGl2ZSBjb25maWd1cmF0aW9ucyBhcmU6IGBORVRfVkVORE9SX0dPT0dMRWAsIGBHVkVgLCBgWERQX1NPQ0tFVFNgLCBgQlBGX1NZU0NBTExgLCBgUENJX01TSWAsIGFuZCB0aGF0IGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgc2V0dGluZy5cblxuV2FpdCBhIHNlY29uZCwgcmlnaHQsIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgaXMgYSAqdHJpc3RhdGUqIHZhcmlhYmxlLiBJdCdzIGVpdGhlciBzZWxlY3RlZCBvciBpdCBoYXMgZGVwZW5kZW5jaWVzLiBBaCwgdGhlIGRlcGVuZGVuY2llcywgKml0IGRlcGVuZHMgb24gYFBUUF8xNTg4X0NMT0NLX09QVElPTkFMYCouXG5cbkxldCdzIGNoZWNrIHRoZSBkZWZpbml0aW9uIGFnYWluOiBpdCdzIGEgdHJpc3RhdGUsIGFuZCB0aGUgZGVmYXVsdCBpcyAneScgKmlmKiBgUFRQXzE1ODhfQ0xPQ0tgIGlzICduJywgb3RoZXJ3aXNlIHRoZSBkZWZhdWx0IGlzIGBQVFBfMTU4OF9DTE9DS2AuIFRoZXJlZm9yZSwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGBQVFBfMTU4OF9DTE9DS2AgaXMgJ3knLCAnbScsIG9yICduJywgYFBUUF8xNTg4X0NMT0NLX09QVElPTkFMYCBpcyBhdXRvbWF0aWNhbGx5IHNhdGlzZmllZC4gU28sIHdoaWxlIGl0IHdvdWxkbid0IGh1cnQgdG8gZXhwbGljaXRseSBlbmFibGUgaXQsIGl0J3Mgbm90IHN0cmljdGx5IG5lY2Vzc2FyeS4gSXQncyBhdXRvbWF0aWNhbGx5IHRha2VuIGNhcmUgb2YuXG5cbkFscmlnaHQsIHdoYXQncyBuZXh0PyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB3aGV0aGVyIGBQQUdFX1BPT0xgIGlzIGEgY29uZmlndXJhdGlvbiBpdGVtLCBzaG91bGRuJ3QgST9cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1NTUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTk6MDUuNTE3MDY2NDc5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA5MTY0NDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQUdFX1BPT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTQ4Nz1jb25maWcgTkVUX0RFVkxJTktcXG4tLVxcbm5ldC9LY29uZmlnLTQ5MC1cXG5uZXQvS2NvbmZpZzo0OTE6Y29uZmlnIFBBR0VfUE9PTFxcbm5ldC9LY29uZmlnLTQ5Mi1cXHRib29sXFxubmV0L0tjb25maWctNDkzLVxcbm5ldC9LY29uZmlnOjQ5NDpjb25maWcgUEFHRV9QT09MX1NUQVRTXFxubmV0L0tjb25maWctNDk1LVxcdGRlZmF1bHQgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxOTowNy43MjYyMzQ5OTdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAzNzUzNTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBHVkUgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IGRyaXZlciwgYEdWRWAuIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRyZXNzaW5nIHNvbWUgY3JpdGljYWwgaXNzdWVzIHdpdGggQUZfWERQIChYRFAgc29ja2V0cykgc3VwcG9ydC4gVGhlIGtleSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIG1lbW9yeSBsZWFrcyBhbmQgRE1BIHVubWFwcGluZywgd2hpY2ggYXJlIHByaW1lIHN1c3BlY3RzIGZvciByZWxpYWJpbGl0eSBwcm9ibGVtcyBpbiBhbnkgbmV0d29yayBkcml2ZXIsIGVzcGVjaWFsbHkgb25lIGxpa2UgYEdWRWAgdGhhdCBpcyB0aGUgcHJpbWFyeSBpbnRlcmZhY2UgaW4gR0NFIFZNcy4gSSBzZWUgZml4ZXMgaW4gYGd2ZV9yeF9yZXNldF9yaW5nX2Rxb2AgYW5kIGBndmVfcnhfZHFvYCB0aGF0IGFyZSBjbGVhbmluZyB1cCBgeHNrX2J1ZmZgIGNvcnJlY3RseSB0byBwcmV2ZW50IHRoZSBsZWFrLiBBbHNvLCB0aGUgYGd2ZV9yeF9wb2xsX2Rxb2AgZml4IGZvciBgd29ya19kb25lYCBpcyBnb29kIHRvIHNlZTsgdGhhdCBraW5kIG9mIHN1YnRsZSBvZmYtYnktb25lIGVycm9yIGNhbiBjYXVzZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBvciBldmVuIGludGVybWl0dGVudCBkYXRhIGxvc3MsIGVzcGVjaWFsbHkgdW5kZXIgaGVhdnkgbG9hZC4gVGhlIERNQSB1bm1hcHBpbmcgZml4ZXMgaW4gYGd2ZV94c2tfcG9vbF9lbmFibGVgIGFuZCBgZ3ZlX3hza19wb29sX2Rpc2FibGVgIGFyZSBjcnVjaWFsLCB0b287IGdldHRpbmcgdGhvc2UgcmlnaHQgaXMgZnVuZGFtZW50YWwgZm9yIGRhdGEgaW50ZWdyaXR5IGFuZCBoYXJkd2FyZSByZXNvdXJjZSBtYW5hZ2VtZW50LlxuXG5UaGUgZmFjdCB0aGF0IHRoaXMgdG91Y2hlcyB0aGUgbmV0d29yayBkYXRhcGF0aCBhbmQgQUZfWERQIHNvY2tldCBoYW5kbGluZyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIHRoYXQncyB3aGVyZSBzeXprYWxsZXIgaXMgbW9zdCBsaWtlbHkgdG8gZmluZCB0aGVzZSBidWdzLiBJIGFudGljaXBhdGUgdGhpcyBwYXRjaCB3aWxsIGltcHJvdmUgdGhlIHN0YWJpbGl0eSBvZiBHQ0UgVk1zLCBhbmQgaXQncyBuaWNlIHRoYXQgdGhleSBhcmUgYWRkcmVzc2luZyBBRl9YRFAuXG5cbkkgYWxzbyBub3RpY2UgdGhhdCBgUEFHRV9QT09MYCBpcyBzZWxlY3RlZCBieSBgR1ZFYCwgc28gSSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IG1hbnVhbGx5IGVuYWJsaW5nIGl0LiBNYWtlcyB0aGUgY29uZmlndXJhdGlvbiBzaW1wbGVyLlxuXG5JJ2xsIGZvcm11bGF0ZSB0aGUgZmluYWwgcmVzcG9uc2Ugbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTI2NiwiT3V0cHV0VG9rZW5zIjoyODYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTk6MTQuNzYzNzczNDI3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3Nzc2MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX0dPT0dMRVwiLFxuICAgIFwiR1ZFXCIsXG4gICAgXCJYRFBfU09DS0VUU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlBDSV9NU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJndmVfcnhfcG9sbF9kcW9cIixcbiAgICBcImd2ZV9uYXBpX3BvbGxfZHFvXCIsXG4gICAgXCJndmVfeGRwX3BvbGxfZHFvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChndmUpIGRyaXZlciB0byBmaXggYnVncyByZWxhdGVkIHRvIEFGX1hEUCAoWERQIHNvY2tldHMpIHN1cHBvcnQuIEl0IGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gYGd2ZV9yeF9yZXNldF9yaW5nX2Rxb2AgYW5kIGBndmVfcnhfZHFvYCBieSBwcm9wZXJseSBmcmVlaW5nIGB4c2tfYnVmZmAuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gYGd2ZV9yeF9wb2xsX2Rxb2Agd2hlcmUgYHdvcmtfZG9uZWAgd2FzIG5vdCBpbmNyZW1lbnRlZCBjb3JyZWN0bHksIGFuZCBmaXhlcyBETUEgdW5tYXBwaW5nIGluIGBndmVfeHNrX3Bvb2xfZW5hYmxlYCBhbmQgYGd2ZV94c2tfcG9vbF9kaXNhYmxlYC4gVGhlc2UgY2hhbmdlcyBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHRoZSBuZXR3b3JrIGRhdGFwYXRoIGFuZCBBRl9YRFAgc29ja2V0IGhhbmRsaW5nLiBUaGUgR1ZFIGRyaXZlciBpcyB0aGUgcHJpbWFyeSBuZXR3b3JrIGludGVyZmFjZSB1c2VkIGluIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKSBWTXMsIHdoZXJlIHN5emthbGxlciBydW5zLCBtYWtpbmcgdGhlc2UgY29kZSBwYXRocyBoaWdobHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1ZFTkRPUl9HT09HTEVcIixcbiAgICBcIkdWRVwiLFxuICAgIFwiWERQX1NPQ0tFVFNcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJQQ0lfTVNJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3ZlX3J4X3BvbGxfZHFvXCIsXG4gICAgXCJndmVfbmFwaV9wb2xsX2Rxb1wiLFxuICAgIFwiZ3ZlX3hkcF9wb2xsX2Rxb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHb29nbGUgVmlydHVhbCBFdGhlcm5ldCAoZ3ZlKSBkcml2ZXIgdG8gZml4IGJ1Z3MgcmVsYXRlZCB0byBBRl9YRFAgKFhEUCBzb2NrZXRzKSBzdXBwb3J0LiBJdCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIGBndmVfcnhfcmVzZXRfcmluZ19kcW9gIGFuZCBgZ3ZlX3J4X2Rxb2AgYnkgcHJvcGVybHkgZnJlZWluZyBgeHNrX2J1ZmZgLiBJdCBhbHNvIGZpeGVzIGEgYnVnIGluIGBndmVfcnhfcG9sbF9kcW9gIHdoZXJlIGB3b3JrX2RvbmVgIHdhcyBub3QgaW5jcmVtZW50ZWQgY29ycmVjdGx5LCBhbmQgZml4ZXMgRE1BIHVubWFwcGluZyBpbiBgZ3ZlX3hza19wb29sX2VuYWJsZWAgYW5kIGBndmVfeHNrX3Bvb2xfZGlzYWJsZWAuIFRoZXNlIGNoYW5nZXMgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdCBvbiB0aGUgbmV0d29yayBkYXRhcGF0aCBhbmQgQUZfWERQIHNvY2tldCBoYW5kbGluZy4gVGhlIEdWRSBkcml2ZXIgaXMgdGhlIHByaW1hcnkgbmV0d29yayBpbnRlcmZhY2UgdXNlZCBpbiBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgVk1zLCB3aGVyZSBzeXprYWxsZXIgcnVucywgbWFraW5nIHRoZXNlIGNvZGUgcGF0aHMgaGlnaGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxOToxNC45MDE1NTk1MjNaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNzk5NjUyMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxOToxNC45MDIzMzA1NTNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTI3OTE4OTIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChndmUpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZpeGluZyBYRFAgcG9vbCByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24gbG9naWMsIE5BUEkgbG9ja2luZyAodXNpbmcgbmFwaV9kaXNhYmxlX2xvY2tlZC9uYXBpX2VuYWJsZV9sb2NrZWQpLCBtZW1vcnkgbGVha3MgKGZyZWVpbmcgeHNrX2J1ZmYpLCBhbmQgTkFQSSBidWRnZXQgYWNjb3VudGluZyBpbiBndmVfcnhfcG9sbF9kcW8uIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGV4cG9zZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2UuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSBkZWFkbG9ja3MsIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBLTUVNTEVBSy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmZDg4NDFmYTI2ODM0YTkxNGNmYTc4Y2EyNGE3NjkyM2I4YWJlNjBhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMDA6MTc6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmNcbmluZGV4IGU0ZDc4YWU1MmRhZmUuLmNjYWY1Zjg2YTFlNmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uY1xuQEAgLTE2NTQsMjAgKzE2NTQsMTggQEAgc3RhdGljIGludCBndmVfeHNrX3Bvb2xfZW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAoIXByaXYtXHUwMDNleGRwX3Byb2cgfHwgIW5ldGlmX3J1bm5pbmcoZGV2KSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRlcnIgPSBndmVfcmVnX3hza19wb29sKHByaXYsIGRldiwgcG9vbCwgcWlkKTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gZXJyX3hza19wb29sX2RtYV9tYXBwZWQ7XG4tXG4tXHQvKiBTdG9wIGFuZCBzdGFydCBSREEgcXVldWVzIHRvIHJlcG9zdCBidWZmZXJzLiAqL1xuLVx0aWYgKCFndmVfaXNfcXBsKHByaXYpKSB7XG4rXHRpZiAoZ3ZlX2lzX3FwbChwcml2KSkge1xuK1x0XHRlcnIgPSBndmVfcmVnX3hza19wb29sKHByaXYsIGRldiwgcG9vbCwgcWlkKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGVycl94c2tfcG9vbF9kbWFfbWFwcGVkO1xuK1x0fSBlbHNlIHtcbitcdFx0LyogU3RvcCBhbmQgc3RhcnQgUkRBIHF1ZXVlcyB0byByZXBvc3QgYnVmZmVycy4gKi9cbiBcdFx0ZXJyID0gZ3ZlX2NvbmZpZ3VyZV9yaW5nc194ZHAocHJpdiwgcHJpdi1cdTAwM2VyeF9jZmcubnVtX3F1ZXVlcyk7XG4gXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBlcnJfeHNrX3Bvb2xfcmVnaXN0ZXJlZDtcbitcdFx0XHRnb3RvIGVycl94c2tfcG9vbF9kbWFfbWFwcGVkO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4gXG4tZXJyX3hza19wb29sX3JlZ2lzdGVyZWQ6XG4tXHRndmVfdW5yZWdfeHNrX3Bvb2wocHJpdiwgcWlkKTtcbiBlcnJfeHNrX3Bvb2xfZG1hX21hcHBlZDpcbiBcdGNsZWFyX2JpdChxaWQsIHByaXYtXHUwMDNleHNrX3Bvb2xzKTtcbiBcdHhza19wb29sX2RtYV91bm1hcChwb29sLFxuQEAgLTE2ODMsNDIgKzE2ODEsMzggQEAgc3RhdGljIGludCBndmVfeHNrX3Bvb2xfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpX3J4O1xuIFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpX3R4O1xuIFx0c3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2w7XG4rXHRpbnQgZXJyID0gMDtcbiBcdGludCB0eF9xaWQ7XG4tXHRpbnQgZXJyO1xuIFxuLVx0aWYgKHFpZCBcdTAwM2U9IHByaXYtXHUwMDNlcnhfY2ZnLm51bV9xdWV1ZXMpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKHFpZCBcdTAwM2U9IHByaXYtXHUwMDNlcnhfY2ZnLm51bV9xdWV1ZXMpIHtcbitcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0Z290byB1bm1hcF9hbmRfcmV0dXJuO1xuK1x0fVxuIFxuIFx0Y2xlYXJfYml0KHFpZCwgcHJpdi1cdTAwM2V4c2tfcG9vbHMpO1xuIFxuLVx0cG9vbCA9IHhza19nZXRfcG9vbF9mcm9tX3FpZChkZXYsIHFpZCk7XG4tXHRpZiAocG9vbClcbi1cdFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsXG4tXHRcdFx0XHQgICBETUFfQVRUUl9TS0lQX0NQVV9TWU5DIHxcbi1cdFx0XHRcdCAgIERNQV9BVFRSX1dFQUtfT1JERVJJTkcpO1xuLVxuIFx0aWYgKCFuZXRpZl9ydW5uaW5nKGRldikgfHwgIXByaXYtXHUwMDNldHhfY2ZnLm51bV94ZHBfcXVldWVzKVxuLVx0XHRyZXR1cm4gMDtcbitcdFx0Z290byB1bm1hcF9hbmRfcmV0dXJuO1xuIFxuIFx0LyogU3RvcCBhbmQgc3RhcnQgUkRBIHF1ZXVlcyB0byByZXBvc3QgYnVmZmVycy4gKi9cbiBcdGlmICghZ3ZlX2lzX3FwbChwcml2KSBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2V4ZHBfcHJvZykge1xuIFx0XHRlcnIgPSBndmVfY29uZmlndXJlX3JpbmdzX3hkcChwcml2LCBwcml2LVx1MDAzZXJ4X2NmZy5udW1fcXVldWVzKTtcbiBcdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRcdGdvdG8gdW5tYXBfYW5kX3JldHVybjtcbiBcdH1cbiBcbiBcdG5hcGlfcnggPSBcdTAwMjZwcml2LVx1MDAzZW50ZnlfYmxvY2tzW3ByaXYtXHUwMDNlcnhbcWlkXS5udGZ5X2lkXS5uYXBpO1xuLVx0bmFwaV9kaXNhYmxlKG5hcGlfcngpOyAvKiBtYWtlIHN1cmUgY3VycmVudCByeCBwb2xsIGlzIGRvbmUgKi9cbitcdG5hcGlfZGlzYWJsZV9sb2NrZWQobmFwaV9yeCk7IC8qIG1ha2Ugc3VyZSBjdXJyZW50IHJ4IHBvbGwgaXMgZG9uZSAqL1xuIFxuIFx0dHhfcWlkID0gZ3ZlX3hkcF90eF9xdWV1ZV9pZChwcml2LCBxaWQpO1xuIFx0bmFwaV90eCA9IFx1MDAyNnByaXYtXHUwMDNlbnRmeV9ibG9ja3NbcHJpdi1cdTAwM2V0eFt0eF9xaWRdLm50ZnlfaWRdLm5hcGk7XG4tXHRuYXBpX2Rpc2FibGUobmFwaV90eCk7IC8qIG1ha2Ugc3VyZSBjdXJyZW50IHR4IHBvbGwgaXMgZG9uZSAqL1xuK1x0bmFwaV9kaXNhYmxlX2xvY2tlZChuYXBpX3R4KTsgLyogbWFrZSBzdXJlIGN1cnJlbnQgdHggcG9sbCBpcyBkb25lICovXG4gXG4gXHRndmVfdW5yZWdfeHNrX3Bvb2wocHJpdiwgcWlkKTtcbiBcdHNtcF9tYigpOyAvKiBNYWtlIHN1cmUgaXQgaXMgdmlzaWJsZSB0byB0aGUgd29ya2VycyBvbiBkYXRhcGF0aCAqL1xuIFxuLVx0bmFwaV9lbmFibGUobmFwaV9yeCk7XG4tXHRuYXBpX2VuYWJsZShuYXBpX3R4KTtcbitcdG5hcGlfZW5hYmxlX2xvY2tlZChuYXBpX3J4KTtcbitcdG5hcGlfZW5hYmxlX2xvY2tlZChuYXBpX3R4KTtcbiBcdGlmIChndmVfaXNfZ3FpKHByaXYpKSB7XG4gXHRcdGlmIChndmVfcnhfd29ya19wZW5kaW5nKFx1MDAyNnByaXYtXHUwMDNlcnhbcWlkXSkpXG4gXHRcdFx0bmFwaV9zY2hlZHVsZShuYXBpX3J4KTtcbkBAIC0xNzI3LDcgKzE3MjEsMTQgQEAgc3RhdGljIGludCBndmVfeHNrX3Bvb2xfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdG5hcGlfc2NoZWR1bGUobmFwaV90eCk7XG4gXHR9XG4gXG4tXHRyZXR1cm4gMDtcbit1bm1hcF9hbmRfcmV0dXJuOlxuK1x0cG9vbCA9IHhza19nZXRfcG9vbF9mcm9tX3FpZChkZXYsIHFpZCk7XG4rXHRpZiAocG9vbClcbitcdFx0eHNrX3Bvb2xfZG1hX3VubWFwKHBvb2wsXG4rXHRcdFx0XHQgICBETUFfQVRUUl9TS0lQX0NQVV9TWU5DIHxcbitcdFx0XHRcdCAgIERNQV9BVFRSX1dFQUtfT1JERVJJTkcpO1xuK1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIGludCBndmVfeHNrX3dha2V1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcXVldWVfaWQsIHUzMiBmbGFncylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jXG5pbmRleCAwZWNlMmY2ZmRmZmI0Li44MTFkYjQyZDA1YzY3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jXG5AQCAtMTEzLDYgKzExMywxMiBAQCBzdGF0aWMgdm9pZCBndmVfcnhfcmVzZXRfcmluZ19kcW8oc3RydWN0IGd2ZV9wcml2ICpwcml2LCBpbnQgaWR4KVxuIFx0XHRcdFx0Z3ZlX2ZyZWVfdG9fcGFnZV9wb29sKHJ4LCBicywgZmFsc2UpO1xuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdGd2ZV9mcmVlX3FwbF9wYWdlX2Rxbyhicyk7XG4rXG4rXHRcdFx0aWYgKGd2ZV9idWZfc3RhdGVfaXNfYWxsb2NhdGVkKHJ4LCBicykgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIGJzLVx1MDAzZXhza19idWZmKSB7XG4rXHRcdFx0XHR4c2tfYnVmZl9mcmVlKGJzLVx1MDAzZXhza19idWZmKTtcbitcdFx0XHRcdGJzLVx1MDAzZXhza19idWZmID0gTlVMTDtcbitcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC04MzksNyArODQ1LDEyIEBAIHN0YXRpYyBpbnQgZ3ZlX3J4X2RxbyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBndmVfcnhfcmluZyAqcngsXG4gXHR9XG4gXG4gXHRpZiAodW5saWtlbHkoY29tcGxfZGVzYy1cdTAwM2VyeF9lcnJvcikpIHtcbi1cdFx0Z3ZlX2ZyZWVfYnVmZmVyKHJ4LCBidWZfc3RhdGUpO1xuK1x0XHRpZiAoYnVmX3N0YXRlLVx1MDAzZXhza19idWZmKSB7XG4rXHRcdFx0eHNrX2J1ZmZfZnJlZShidWZfc3RhdGUtXHUwMDNleHNrX2J1ZmYpO1xuK1x0XHRcdGd2ZV9mcmVlX2J1Zl9zdGF0ZShyeCwgYnVmX3N0YXRlKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRndmVfZnJlZV9idWZmZXIocngsIGJ1Zl9zdGF0ZSk7XG4rXHRcdH1cbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5AQCAtMTE0NSwxMyArMTE1NiwxNCBAQCBpbnQgZ3ZlX3J4X3BvbGxfZHFvKHN0cnVjdCBndmVfbm90aWZ5X2Jsb2NrICpibG9jaywgaW50IGJ1ZGdldClcbiBcdFx0LyogRnJlZSBydW5uaW5nIGNvdW50ZXIgb2YgY29tcGxldGVkIGRlc2NyaXB0b3JzICovXG4gXHRcdHJ4LVx1MDAzZWNudCsrO1xuIFxuLVx0XHRpZiAoIXJ4LVx1MDAzZWN0eC5za2JfaGVhZClcbi1cdFx0XHRjb250aW51ZTtcbi1cbiBcdFx0aWYgKCFjb21wbF9kZXNjLVx1MDAzZWVuZF9vZl9wYWNrZXQpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHdvcmtfZG9uZSsrO1xuK1xuK1x0XHRpZiAoIXJ4LVx1MDAzZWN0eC5za2JfaGVhZClcbitcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0cGt0X2J5dGVzID0gcngtXHUwMDNlY3R4LnNrYl9oZWFkLVx1MDAzZWxlbjtcbiBcdFx0LyogVGhlIGV0aGVybmV0IGhlYWRlciAoZmlyc3QgRVRIX0hMRU4gYnl0ZXMpIGlzIHNuaXBwZWQgb2ZmXG4gXHRcdCAqIGJ5IGV0aF90eXBlX3RyYW5zLlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDA6MTk6MTQuOTAyMzMxODUzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyNzkxNjA2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IERyaXZlcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBmb3IgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChndmUpIGRyaXZlci4gSSBzZWUgaXQncyB0b3VjaGluZyBgZ3ZlX21haW4uY2AgYW5kIGBndmVfcnhfZHFvLmNgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgZm9jdXNlZCBvbiBwb3RlbnRpYWwgcmlza3MsIHBhcnRpY3VsYXJseSB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMsIGFzIHRoYXQncyBhbHdheXMgYSBjb25jZXJuLlxuXG5Mb29raW5nIGF0IGBndmVfbWFpbi5jYCwgdGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCB0aGUgWERQIHNvY2tldCAoWFNLKSBwb29sIG1hbmFnZW1lbnQ6IGBndmVfeHNrX3Bvb2xfZW5hYmxlYCBpcyBnZXR0aW5nIHVwZGF0ZWQgaW4gaG93IGl0IGhhbmRsZXMgcmVnaXN0ZXJpbmcgYW5kIGNvbmZpZ3VyaW5nIHRoZSBYU0sgcG9vbCwgYW5kIGBndmVfeHNrX3Bvb2xfZGlzYWJsZWAgbm93IHVzZXMgdGhlIGxvY2tlZCB2ZXJzaW9ucyBvZiBgbmFwaV9kaXNhYmxlYCBhbmQgYG5hcGlfZW5hYmxlYCwgYW5kIG1vdmVzIGB4c2tfcG9vbF9kbWFfdW5tYXBgIHRvIHRoZSB2ZXJ5IGVuZCBvZiB0aGUgZnVuY3Rpb24uIFRoaXMgTkFQSSBsb2NraW5nIGNoYW5nZSBpcyBjcml0aWNhbCBmb3IgY29uY3VycmVuY3ksIHByZXZlbnRpbmcgZGVhZGxvY2tzIG9yIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGhlIGRpc2FibGUgcHJvY2Vzcy4gTW92aW5nIGB4c2tfcG9vbF9kbWFfdW5tYXBgIHRvIHRoZSBlbmQgbWFrZXMgc2Vuc2UgdG8gcmVkdWNlIGNoYW5jZXMgb2YgYWNjZXNzaW5nIHVubWFwcGVkIG1lbW9yeS5cblxuVGhlbiwgaW4gYGd2ZV9yeF9kcW8uY2AsIHRoaW5ncyBhcmUgbW9yZSBpbnRlcmVzdGluZy4gSSBzZWUgYSBjb3VwbGUgb2YgbWVtb3J5IGxlYWsgZml4ZXM6IGxvZ2ljIGlzIGJlaW5nIGFkZGVkIGluIGBndmVfcnhfcmVzZXRfcmluZ19kcW9gIHRvIGZyZWUgYHhza19idWZmYCBpZiBpdCdzIGFsbG9jYXRlZCwgd2hpY2ggaXMgZ29vZC4gQWxzbywgaW4gYGd2ZV9yeF9kcW9gLCB0aGVyZSdzIGEgbmV3IGNoZWNrIHRvIGZyZWUgdGhlIGB4c2tfYnVmZmAgaWYgYGNvbXBsX2Rlc2MtXHUwMDNlcnhfZXJyb3JgLiBQcmV2ZW50aW5nIHRoZXNlIG1lbW9yeSBsZWFrcyBpcyB2aXRhbCwgb2YgY291cnNlLCBidXQgaXQgZG9lc24ndCBzZWVtIHRvIGludHJvZHVjZSBhbnkgbmV3IGV4cG9zdXJlIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGUgYGd2ZV9yeF9wb2xsX2Rxb2AgZnVuY3Rpb24gaGFzIGEgcmVvcmRlcmluZyBvZiB0aGUgY2hlY2tzOiB0aGUgb3JkZXIgb2YgYCFyeC1cdTAwM2VjdHguc2tiX2hlYWRgIGFuZCBgIWNvbXBsX2Rlc2MtXHUwMDNlZW5kX29mX3BhY2tldGAgY2hlY2tzIGhhdmUgYmVlbiBzd2FwcGVkLiBMZXQncyBzZWUuLi4gdGhlIG9yaWdpbmFsIGNvZGUgaGFkOlxuXG5gYGBjXG5cdFx0aWYgKCFyeC1cdTAwM2VjdHguc2tiX2hlYWQpXG5cdFx0XHRjb250aW51ZTtcblxuXHRcdGlmICghY29tcGxfZGVzYy1cdTAwM2VlbmRfb2ZfcGFja2V0KVxuXHRcdFx0Y29udGludWU7XG5gYGBcblxuQW5kIG5vdyBpdCdzOlxuXG5gYGBjXG5cdFx0aWYgKCFjb21wbF9kZXNjLVx1MDAzZWVuZF9vZl9wYWNrZXQpXG5cdFx0XHRjb250aW51ZTtcblxuXHRcdHdvcmtfZG9uZSsrO1xuXG5cdFx0aWYgKCFyeC1cdTAwM2VjdHguc2tiX2hlYWQpXG5cdFx0XHRjb250aW51ZTtcbmBgYFxuXG5BaCwgSSBzZWUuIFdpdGggdGhlIG9yaWdpbmFsIGxvZ2ljLCBpdCBza2lwcyB0aGUgcGFja2V0IGlmIGl0J3Mgbm90IHRoZSBmaXJzdCBwYXJ0IG9mIGEgcGFja2V0LiBCdXQgaWYgYGNvbXBsX2Rlc2MtXHUwMDNlZW5kX29mX3BhY2tldGAgaXMgdHJ1ZSwgdGhlIGB3b3JrX2RvbmVgIHdpbGwgYmUgaW5jcmVtZW50ZWQuIFRoZSBjaGFuZ2UgaGFzIG1vdmVkIHRoZSBjaGVjayB0byBlbnN1cmUgdGhhdCBwYWNrZXRzIHdpdGhvdXQgYSBoZWFkZXIgKnN0aWxsKiBjb3VudCBhcyB3b3JrIGRvbmUuIFRoYXQncyBsaWtlbHkgcmVsYXRlZCB0byBOQVBJIGJ1ZGdldCBhY2NvdW50aW5nLlxuXG5TbywgdGFraW5nIGEgc3RlcCBiYWNrLCB0aGlzIHBhdGNoIHNlZW1zIHByZXR0eSBjbGVhbi4gV2UncmUgbG9va2luZyBhdCBYRFAgcG9vbCBtYW5hZ2VtZW50LCBOQVBJIGxvY2tpbmcgKGVzc2VudGlhbCksIG1lbW9yeSBsZWFrIGZpeGVzLCBhbmQgYSBOQVBJIGJ1ZGdldCByZWxhdGVkIGNvbnRyb2wgZmxvdyBjaGFuZ2UuIEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgaGVyZS4gVGhlIHByaW1hcnkgcmlza3MgYXBwZWFyIHRvIGJlIHRob3NlIHJlbGF0ZWQgdG8gbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBvciBkZWFkbG9ja3MsIGFuZCB0aGF0IGNhbiBiZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIEtNRU1MRUFLLiBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS4gQWxsIHRoaW5ncyBjb25zaWRlcmVkLCBJIGRvbid0IHNlZSBhbnkgaW1tZWRpYXRlIHJlZCBmbGFncy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg1MCwiT3V0cHV0VG9rZW5zIjoxNjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDoxOToyNC4xODE0OTYyOTRaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTMyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHb29nbGUgVmlydHVhbCBFdGhlcm5ldCAoZ3ZlKSBkcml2ZXIsIHNwZWNpZmljYWxseSBmaXhpbmcgWERQIHBvb2wgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIGxvZ2ljLCBOQVBJIGxvY2tpbmcgKHVzaW5nIG5hcGlfZGlzYWJsZV9sb2NrZWQvbmFwaV9lbmFibGVfbG9ja2VkKSwgbWVtb3J5IGxlYWtzIChmcmVlaW5nIHhza19idWZmKSwgYW5kIE5BUEkgYnVkZ2V0IGFjY291bnRpbmcgaW4gZ3ZlX3J4X3BvbGxfZHFvLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IHN0cnVjdHVyZSBwYWRkaW5nLCBvciBleHBvc2UgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgZGVhZGxvY2tzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgS01FTUxFQUsuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0IChndmUpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZpeGluZyBYRFAgcG9vbCByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24gbG9naWMsIE5BUEkgbG9ja2luZyAodXNpbmcgbmFwaV9kaXNhYmxlX2xvY2tlZC9uYXBpX2VuYWJsZV9sb2NrZWQpLCBtZW1vcnkgbGVha3MgKGZyZWVpbmcgeHNrX2J1ZmYpLCBhbmQgTkFQSSBidWRnZXQgYWNjb3VudGluZyBpbiBndmVfcnhfcG9sbF9kcW8uIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGV4cG9zZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2UuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSBkZWFkbG9ja3MsIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBLTUVNTEVBSy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow4vjdd[1] Phase: Succeeded StartedAt: 2026-08-15 00:19:35 +0000 UTC FinishedAt: 2026-08-15 00:19:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vjdd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-15 00:19:35 +0000 UTC FinishedAt: 2026-08-15 00:19:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vjdd[2] Phase: Succeeded StartedAt: 2026-08-15 00:19:35 +0000 UTC FinishedAt: 2026-08-15 02:08:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 00:19:35 +0000 UTC FinishedAt: 2026-08-15 02:08:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 00:19:35 +0000 UTC FinishedAt: 2026-08-15 00:19:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 00:19:35 +0000 UTC FinishedAt: 2026-08-15 00:19:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-workflow4vjdd/series-workflow4vjdd-convert-artifact-893728081/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 00:19:45 +0000 UTC FinishedAt: 2026-08-15 00:40:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 00:19:45 +0000 UTC FinishedAt: 2026-08-15 00:40:12 +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:*4312a4a8-bec9-4eba-b262-91de542cec94,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-workflow4vjdd/series-workflow4vjdd-convert-artifact-893728081/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": "934db6d6-45cc-4e69-bfd4-ad038e8a6d21", "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-workflow4vjdd/series-workflow4vjdd-build-action-3762671359/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 00:19:45 +0000 UTC FinishedAt: 2026-08-15 00:39:50 +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:*4312a4a8-bec9-4eba-b262-91de542cec94,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-workflow4vjdd/series-workflow4vjdd-convert-artifact-893728081/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": "934db6d6-45cc-4e69-bfd4-ad038e8a6d21", "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-workflow4vjdd/series-workflow4vjdd-build-action-3762671359/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 00:40:12 +0000 UTC FinishedAt: 2026-08-15 00:40:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 00:40:12 +0000 UTC FinishedAt: 2026-08-15 00:40:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 00:40:12 +0000 UTC FinishedAt: 2026-08-15 00:40:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 00:40:12 +0000 UTC FinishedAt: 2026-08-15 00:40:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-workflow4vjdd/series-workflow4vjdd-convert-artifact-1349477156/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 00:40:22 +0000 UTC FinishedAt: 2026-08-15 00:42:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 00:40:22 +0000 UTC FinishedAt: 2026-08-15 00:42:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*934db6d6-45cc-4e69-bfd4-ad038e8a6d21,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-workflow4vjdd/series-workflow4vjdd-build-action-3762671359/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-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 00:42:28 +0000 UTC FinishedAt: 2026-08-15 00:42:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 00:42:28 +0000 UTC FinishedAt: 2026-08-15 00:42:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 00:42:28 +0000 UTC FinishedAt: 2026-08-15 00:59:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 00:42:28 +0000 UTC FinishedAt: 2026-08-15 00:59:14 +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:*4312a4a8-bec9-4eba-b262-91de542cec94,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-workflow4vjdd/series-workflow4vjdd-convert-artifact-1349477156/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": "ba5ab406-c6af-4130-a488-21d3fbe17758", "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-workflow4vjdd/series-workflow4vjdd-build-action-2796411312/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 00:42:28 +0000 UTC FinishedAt: 2026-08-15 00:59:04 +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:*4312a4a8-bec9-4eba-b262-91de542cec94,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-workflow4vjdd/series-workflow4vjdd-convert-artifact-1349477156/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": "ba5ab406-c6af-4130-a488-21d3fbe17758", "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-workflow4vjdd/series-workflow4vjdd-build-action-2796411312/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 00:59:14 +0000 UTC FinishedAt: 2026-08-15 00:59:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 00:59:14 +0000 UTC FinishedAt: 2026-08-15 00:59:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 00:59:14 +0000 UTC FinishedAt: 2026-08-15 01:01:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 00:59:14 +0000 UTC FinishedAt: 2026-08-15 01:01:02 +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:*ba5ab406-c6af-4130-a488-21d3fbe17758,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-workflow4vjdd/series-workflow4vjdd-build-action-2796411312/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-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 01:01:12 +0000 UTC FinishedAt: 2026-08-15 02:08:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 01:01:12 +0000 UTC FinishedAt: 2026-08-15 02:08:42 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"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:*934db6d6-45cc-4e69-bfd4-ad038e8a6d21,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ba5ab406-c6af-4130-a488-21d3fbe17758,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-workflow4vjdd/series-workflow4vjdd-build-action-3762671359/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-workflow4vjdd/series-workflow4vjdd-build-action-2796411312/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 01:01:12 +0000 UTC FinishedAt: 2026-08-15 01:01:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 01:01:12 +0000 UTC FinishedAt: 2026-08-15 01:01:17 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"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-workflow4vjdd/series-workflow4vjdd-convert-artifact-373424301/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 01:01:12 +0000 UTC FinishedAt: 2026-08-15 01:01:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 01:01:12 +0000 UTC FinishedAt: 2026-08-15 01:01:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 01:01:12 +0000 UTC FinishedAt: 2026-08-15 01:01:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 01:01:22 +0000 UTC FinishedAt: 2026-08-15 02:08:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vjdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["gve_rx_poll_dqo","gve_napi_poll_dqo","gve_xdp_poll_dqo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_GOOGLE","GVE","XDP_SOCKETS","BPF_SYSCALL","PCI_MSI"],"series_id":"34ad716b-166f-40c6-80af-a0af3d4fe96f","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-15 01:01:22 +0000 UTC FinishedAt: 2026-08-15 02:08:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*934db6d6-45cc-4e69-bfd4-ad038e8a6d21,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ba5ab406-c6af-4130-a488-21d3fbe17758,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-workflow4vjdd/series-workflow4vjdd-build-action-3762671359/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-workflow4vjdd/series-workflow4vjdd-build-action-2796411312/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-workflow4vjdd/series-workflow4vjdd-convert-artifact-373424301/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,}