Name: series-workflowzzmxd Phase: Succeeded StartedAt: 2026-08-21 16:54:34 +0000 UTC FinishedAt: 2026-08-21 21:24:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzmxd[0] Phase: Succeeded StartedAt: 2026-08-21 16:54:34 +0000 UTC FinishedAt: 2026-08-21 17:43:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzmxd[0].run-triage Phase: Succeeded StartedAt: 2026-08-21 16:54:34 +0000 UTC FinishedAt: 2026-08-21 17:43:06 +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": "746fc0787f616da418ffc04a110296fe95d53491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_ACT_IFE", "NET_CLS_ACT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "746fc0787f616da418ffc04a110296fe95d53491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_ACT_IFE", "NET_CLS_ACT" ], "series_id": "3c920d4c-a37c-44f5-8f82-4717f914ea4e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcf_ife_act", "ife_encode", "ife_decode" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9BQ1RfSUZFJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNmX2lmZV9hY3QmIzM0OywKICAgICYjMzQ7aWZlX2VuY29kZSYjMzQ7LAogICAgJiMzNDtpZmVfZGVjb2RlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gdGhlIElGRSBwYWNrZXQgYWN0aW9uIHdoZXJlIGBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgd2FzIHVzZWQgaW5zdGVhZCBvZiBgRVRIX0hMRU5gIHRvIHB1c2gvcHVsbCBoZWFkZXJzIGFuZCBjb3B5IGRhdGEuIElmIGEgcGFja2V0IGlzIHJlZGlyZWN0ZWQgZnJvbSBhIG5vbi1FdGhlcm5ldCBkZXZpY2UgKGUuZy4sIHZpYSBtaXJyZWQpLCBgaGFyZF9oZWFkZXJfbGVuYCBtYXkgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBFdGhlcm5ldCBoZWFkZXIgc2l6ZS4gVGhpcyBtaXNtYXRjaCBjYW4gbGVhZCB0byBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcyB3aXRoaW4gdGhlIHNvY2tldCBidWZmZXIgKHNrYikgaWYgYGhhcmRfaGVhZGVyX2xlbmAgaXMgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBwYWNrZXQgZGF0YSwgb3IgcGFja2V0IGNvcnJ1cHRpb24gaWYgaXQgaXMgc21hbGxlci5cblxuT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiBza2IgZGF0YSBidWZmZXJzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTiwgYXMgdGhlIGtlcm5lbCYjMzk7cyBza2IgYWxsb2NhdGlvbiBhbmQgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyBhcmUgZXhwbGljaXRseSBhbm5vdGF0ZWQgdG8gcG9pc29uIHRoZSBoZWFkcm9vbSBhbmQgdGFpbHJvb20uIFRoZSBidWcgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLCBub3IgZG9lcyBpdCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgZnVsbHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhpcyBjbGFzcyBvZiBidWdzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIGluIHRoZSBUQyBJRkUgYWN0aW9uIHdoZXJlIGl0IGluY29ycmVjdGx5IHVzZWQgYHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCBpbnN0ZWFkIG9mIGBFVEhfSExFTmAgZm9yIGVuY2Fwc3VsYXRpb24vZGVjYXBzdWxhdGlvbiwgYW5kIGFkZHMgYSBjaGVjayB0byBkcm9wIG5vbi1FdGhlcm5ldCBwYWNrZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgcGF0aCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwNTdjOTY2ODU0MjBiYjQyYjM1Y2UwMzc5ZmI3ZWE2ODZkMjFlNjQxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTc6NDE6MzMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lmZS9pZmUuYyBiL25ldC9pZmUvaWZlLmNcbmluZGV4IDdhNzU5NDdhMzFlMzEuLjJkZGY3MjVkMzM4OWUgMTAwNjQ0XG4tLS0gYS9uZXQvaWZlL2lmZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaWZlL2lmZS5jXG5AQCAtMzcsNyAmIzQzOzM3LDcgQEAgdm9pZCAqaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbWV0YWxlbilcbiBcdCAqIHdoZXJlIE9SSUdEQVRBID0gb3JpZ2luYWwgZXRoZXJuZXQgaGVhZGVyIC4uLlxuIFx0ICovXG4gXHRpbnQgaGRybSA9IG1ldGFsZW4gJiM0MzsgSUZFX01FVEFIRFJMRU47XG4tXHRpbnQgdG90YWxfcHVzaCA9IGhkcm0gJiM0Mzsgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4mIzQzO1x0aW50IHRvdGFsX3B1c2ggPSBoZHJtICYjNDM7IEVUSF9ITEVOO1xuIFx0c3RydWN0IGlmZWhlYWRyICppZmVoZHI7XG4gXHRzdHJ1Y3QgZXRoaGRyICppZXRoaDtcdC8qIGlubmVyIGV0aGVyIGhlYWRlciAqL1xuIFx0aW50IHNrYm9mZiA9IDA7XG5AQCAtNTAsOSAmIzQzOzUwLDkgQEAgdm9pZCAqaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbWV0YWxlbilcbiBcdGlldGhoID0gKHN0cnVjdCBldGhoZHIgKikgc2tiLVx1MDAzZWRhdGE7XG4gXG4gXHRfX3NrYl9wdXNoKHNrYiwgdG90YWxfcHVzaCk7XG4tXHRtZW1jcHkoc2tiLVx1MDAzZWRhdGEsIGlldGhoLCBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4mIzQzO1x0bWVtY3B5KHNrYi1cdTAwM2VkYXRhLCBpZXRoaCwgRVRIX0hMRU4pO1xuIFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbi1cdHNrYm9mZiAmIzQzOz0gc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4mIzQzO1x0c2tib2ZmICYjNDM7PSBFVEhfSExFTjtcbiBcbiBcdC8qIHRvdGFsIG1ldGFkYXRhIGxlbmd0aCAqL1xuIFx0aWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKSAoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgc2tib2ZmKTtcbkBAIC02OSwxMiAmIzQzOzY5LDEyIEBAIHZvaWQgKmlmZV9kZWNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2ICptZXRhbGVuKVxuIFx0aW50IHRvdGFsX3B1bGw7XG4gXHR1MTYgaWZlaGRybG47XG4gXG4tXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAmIzQzOyBJRkVfTUVUQUhEUkxFTikpXG4mIzQzO1x0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgRVRIX0hMRU4gJiM0MzsgSUZFX01FVEFIRFJMRU4pKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikgKHNrYi1cdTAwM2VkYXRhICYjNDM7IHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbiYjNDM7XHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IEVUSF9ITEVOKTtcbiBcdGlmZWhkcmxuID0gbnRvaHMoaWZlaGRyLVx1MDAzZW1ldGFsZW4pO1xuLVx0dG90YWxfcHVsbCA9IHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICYjNDM7IGlmZWhkcmxuO1xuJiM0MztcdHRvdGFsX3B1bGwgPSBFVEhfSExFTiAmIzQzOyBpZmVoZHJsbjtcbiBcbiBcdGlmICh1bmxpa2VseShpZmVoZHJsbiBcdTAwM2MgMikpXG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTgyLDcgJiM0Mzs4Miw3IEBAIHZvaWQgKmlmZV9kZWNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2ICptZXRhbGVuKVxuIFx0aWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgdG90YWxfcHVsbCAmIzQzOyBFVEhfSExFTikpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuJiM0MztcdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgRVRIX0hMRU4pO1xuIFx0c2tiX3NldF9tYWNfaGVhZGVyKHNrYiwgdG90YWxfcHVsbCk7XG4gXHRfX3NrYl9wdWxsKHNrYiwgdG90YWxfcHVsbCk7XG4gXHQqbWV0YWxlbiA9IGlmZWhkcmxuIC0gSUZFX01FVEFIRFJMRU47XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9pZmUuYyBiL25ldC9zY2hlZC9hY3RfaWZlLmNcbmluZGV4IGZmMmIxNmUzNWI5YjAuLjljZWE3MWZjMWRiM2QgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X2lmZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X2lmZS5jXG5AQCAtMjgsNiAmIzQzOzI4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L3RjX2FjdC90Y19pZmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfaWZlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2FycC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lmZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX3dyYXBwZXIuaFx1MDAzZVxuIFxuQEAgLTcyMyw3ICYjNDM7NzI0LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2RlY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIFx0dGNmX2xhc3R1c2VfdXBkYXRlKFx1MDAyNmlmZS1cdTAwM2V0Y2ZfdG0pO1xuIFxuIFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpXG4tXHRcdHNrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuJiM0MztcdFx0c2tiX3B1c2goc2tiLCBFVEhfSExFTik7XG4gXG4gXHR0bHZfZGF0YSA9IGlmZV9kZWNvZGUoc2tiLCBcdTAwMjZtZXRhbGVuKTtcbiBcdGlmICh1bmxpa2VseSghdGx2X2RhdGEpKSB7XG5AQCAtNzk1LDcgJiM0Mzs3OTYsNyBAQCBzdGF0aWMgaW50IHRjZl9pZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXG4gXHQgICB3aGVyZSBPUklHREFUQSA9IG9yaWdpbmFsIGV0aGVybmV0IGhlYWRlciAuLi5cbiBcdCAqL1xuIFx0dTE2IG1ldGFsZW4gPSBpZmVfZ2V0X3N6KHNrYiwgcCk7XG4tXHRpbnQgaGRybSA9IG1ldGFsZW4gJiM0Mzsgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gJiM0MzsgSUZFX01FVEFIRFJMRU47XG4mIzQzO1x0aW50IGhkcm0gPSBtZXRhbGVuICYjNDM7IEVUSF9ITEVOICYjNDM7IElGRV9NRVRBSERSTEVOO1xuIFx0dW5zaWduZWQgaW50IHNrYm9mZiA9IDA7XG4gXHRpbnQgbmV3X2xlbiA9IHNrYi1cdTAwM2VsZW4gJiM0MzsgaGRybTtcbiBcdGJvb2wgZXhjZWVkX210dSA9IGZhbHNlO1xuQEAgLTgyNiw3ICYjNDM7ODI3LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIFx0fVxuIFxuIFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpXG4tXHRcdHNrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuJiM0MztcdFx0c2tiX3B1c2goc2tiLCBFVEhfSExFTik7XG4gXG4gXHRpZmVfbWV0YSA9IGlmZV9lbmNvZGUoc2tiLCBtZXRhbGVuKTtcbiBcdGlmICghaWZlX21ldGEpXG5AQCAtODU2LDExICYjNDM7ODU3LDI3IEBAIHN0YXRpYyBpbnQgdGNmX2lmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcbiBcdG9ldGhoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhwLVx1MDAzZWV0aF90eXBlKTtcbiBcbiBcdGlmIChza2JfYXRfdGNfaW5ncmVzcyhza2IpKVxuLVx0XHRza2JfcHVsbChza2IsIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbiYjNDM7XHRcdHNrYl9wdWxsKHNrYiwgRVRIX0hMRU4pO1xuIFxuIFx0cmV0dXJuIGFjdGlvbjtcbiB9XG4gXG4mIzQzOy8qIElGRSBlbmNhcHN1bGF0ZXMgdGhlIG9yaWdpbmFsIEV0aGVybmV0IGhlYWRlciBhbmQsIG9uIGRlY29kZSwgZXhwZWN0cyB0b1xuJiM0MzsgKiBmaW5kIG9uZSwgc28gaXQgY2FuIG9ubHkgZXZlciB3b3JrIG9uIHNrYnMgdGhhdCBjYXJyeSBvbmUuIExvb3BiYWNrIGNhcnJpZXNcbiYjNDM7ICogRXRoZXJuZXQgaGVhZGVyIGFzIHdlbGwsIHNvIGl0IHF1YWxpZmllcyBoZXJlLlxuJiM0MzsgKiBBdCBpbmdyZXNzLCBhbHNvIHZlcmlmeSB0aGF0IHRoZSBMMiBoZWFkZXIgYWJvdXQgdG8gYmUgcHVzaGVkIGJhY2sgcmVhbGx5XG4mIzQzOyAqIGlzIGFuIEV0aGVybmV0IGhlYWRlciBiZWNhdXNlIHRoZSBza2IgY291bGQmIzM5O3ZlIGJlZW4gcmVkaXJlY3RlZCB3aXRoIG1pcnJlZFxuJiM0MzsgKiBmcm9tIGEgbm9uLUV0aGVybmV0IGRldmljZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIHRjZl9pZmVfaXNfZXRoX3NrYihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNrYi1cdTAwM2VkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfRVRIRVIgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNrYi1cdTAwM2VkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfTE9PUEJBQ0spXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiAhc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSB8fCBza2ItXHUwMDNlbWFjX2xlbiA9PSBFVEhfSExFTjtcbiYjNDM7fVxuJiM0MztcbiBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2lmZV9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcbiBcdFx0XHRcdCAgc3RydWN0IHRjZl9yZXN1bHQgKnJlcylcbkBAIC04NjksNiAmIzQzOzg4NiwxMyBAQCBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2lmZV9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCB0Y2ZfaWZlX3BhcmFtcyAqcDtcbiBcdGludCByZXQ7XG4gXG4mIzQzO1x0aWYgKHVubGlrZWx5KCF0Y2ZfaWZlX2lzX2V0aF9za2Ioc2tiKSkpIHtcbiYjNDM7XHRcdGJzdGF0c191cGRhdGUodGhpc19jcHVfcHRyKGlmZS1cdTAwM2Vjb21tb24uY3B1X2JzdGF0cyksIHNrYik7XG4mIzQzO1x0XHR0Y2ZfbGFzdHVzZV91cGRhdGUoXHUwMDI2aWZlLVx1MDAzZXRjZl90bSk7XG4mIzQzO1x0XHRxc3RhdHNfY3B1X2Ryb3BfaW5jKGlmZS1cdTAwM2Vjb21tb24uY3B1X3FzdGF0cyk7XG4mIzQzO1x0XHRyZXR1cm4gVENfQUNUX1NIT1Q7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHAgPSByY3VfZGVyZWZlcmVuY2VfYmgoaWZlLVx1MDAzZXBhcmFtcyk7XG4gXHRpZiAocC1cdTAwM2VmbGFncyBcdTAwMjYgSUZFX0VOQ09ERSkge1xuIFx0XHRyZXQgPSB0Y2ZfaWZlX2VuY29kZShza2IsIGEsIHJlcywgcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9BQ1RfSUZFJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNmX2lmZV9hY3QmIzM0OywKICAgICYjMzQ7aWZlX2VuY29kZSYjMzQ7LAogICAgJiMzNDtpZmVfZGVjb2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIGluIHRoZSBUQyBJRkUgYWN0aW9uIHdoZXJlIGl0IGluY29ycmVjdGx5IHVzZWQgYHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCBpbnN0ZWFkIG9mIGBFVEhfSExFTmAgZm9yIGVuY2Fwc3VsYXRpb24vZGVjYXBzdWxhdGlvbiwgYW5kIGFkZHMgYSBjaGVjayB0byBkcm9wIG5vbi1FdGhlcm5ldCBwYWNrZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgcGF0aCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNTdjOTY2ODU0MjBiYjQyYjM1Y2UwMzc5ZmI3ZWE2ODZkMjFlNjQxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMTc6NDE6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaWZlL2lmZS5jIGIvbmV0L2lmZS9pZmUuYwppbmRleCA3YTc1OTQ3YTMxZTMxLi4yZGRmNzI1ZDMzODllIDEwMDY0NAotLS0gYS9uZXQvaWZlL2lmZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pZmUvaWZlLmMKQEAgLTM3LDcgJiM0MzszNyw3IEBAIHZvaWQgKmlmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IG1ldGFsZW4pCiAJICogd2hlcmUgT1JJR0RBVEEgPSBvcmlnaW5hbCBldGhlcm5ldCBoZWFkZXIgLi4uCiAJICovCiAJaW50IGhkcm0gPSBtZXRhbGVuICYjNDM7IElGRV9NRVRBSERSTEVOOwotCWludCB0b3RhbF9wdXNoID0gaGRybSAmIzQzOyBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuOwomIzQzOwlpbnQgdG90YWxfcHVzaCA9IGhkcm0gJiM0MzsgRVRIX0hMRU47CiAJc3RydWN0IGlmZWhlYWRyICppZmVoZHI7CiAJc3RydWN0IGV0aGhkciAqaWV0aGg7CS8qIGlubmVyIGV0aGVyIGhlYWRlciAqLwogCWludCBza2JvZmYgPSAwOwpAQCAtNTAsOSAmIzQzOzUwLDkgQEAgdm9pZCAqaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbWV0YWxlbikKIAlpZXRoaCA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYi0mZ3Q7ZGF0YTsKIAogCV9fc2tiX3B1c2goc2tiLCB0b3RhbF9wdXNoKTsKLQltZW1jcHkoc2tiLSZndDtkYXRhLCBpZXRoaCwgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CW1lbWNweShza2ItJmd0O2RhdGEsIGlldGhoLCBFVEhfSExFTik7CiAJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKLQlza2JvZmYgJiM0Mzs9IHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW47CiYjNDM7CXNrYm9mZiAmIzQzOz0gRVRIX0hMRU47CiAKIAkvKiB0b3RhbCBtZXRhZGF0YSBsZW5ndGggKi8KIAlpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopIChza2ItJmd0O2RhdGEgJiM0Mzsgc2tib2ZmKTsKQEAgLTY5LDEyICYjNDM7NjksMTIgQEAgdm9pZCAqaWZlX2RlY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKm1ldGFsZW4pCiAJaW50IHRvdGFsX3B1bGw7CiAJdTE2IGlmZWhkcmxuOwogCi0JaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiAmIzQzOyBJRkVfTUVUQUhEUkxFTikpCiYjNDM7CWlmICghcHNrYl9tYXlfcHVsbChza2IsIEVUSF9ITEVOICYjNDM7IElGRV9NRVRBSERSTEVOKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopIChza2ItJmd0O2RhdGEgJiM0Mzsgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CWlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IEVUSF9ITEVOKTsKIAlpZmVoZHJsbiA9IG50b2hzKGlmZWhkci0mZ3Q7bWV0YWxlbik7Ci0JdG90YWxfcHVsbCA9IHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gJiM0MzsgaWZlaGRybG47CiYjNDM7CXRvdGFsX3B1bGwgPSBFVEhfSExFTiAmIzQzOyBpZmVoZHJsbjsKIAogCWlmICh1bmxpa2VseShpZmVoZHJsbiAmbHQ7IDIpKQogCQlyZXR1cm4gTlVMTDsKQEAgLTgyLDcgJiM0Mzs4Miw3IEBAIHZvaWQgKmlmZV9kZWNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2ICptZXRhbGVuKQogCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIHRvdGFsX3B1bGwgJiM0MzsgRVRIX0hMRU4pKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKTsKJiM0MzsJaWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItJmd0O2RhdGEgJiM0MzsgRVRIX0hMRU4pOwogCXNrYl9zZXRfbWFjX2hlYWRlcihza2IsIHRvdGFsX3B1bGwpOwogCV9fc2tiX3B1bGwoc2tiLCB0b3RhbF9wdWxsKTsKIAkqbWV0YWxlbiA9IGlmZWhkcmxuIC0gSUZFX01FVEFIRFJMRU47CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2lmZS5jIGIvbmV0L3NjaGVkL2FjdF9pZmUuYwppbmRleCBmZjJiMTZlMzViOWIwLi45Y2VhNzFmYzFkYjNkIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2lmZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfaWZlLmMKQEAgLTI4LDYgJiM0MzsyOCw3IEBACiAjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC90Y19hY3QvdGNfaWZlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3RjX2FjdC90Y19pZmUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ldGhlcmRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pZl9hcnAuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaWZlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3RjX3dyYXBwZXIuaCZndDsKIApAQCAtNzIzLDcgJiM0Mzs3MjQsNyBAQCBzdGF0aWMgaW50IHRjZl9pZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsCiAJdGNmX2xhc3R1c2VfdXBkYXRlKCZhbXA7aWZlLSZndDt0Y2ZfdG0pOwogCiAJaWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpCi0JCXNrYl9wdXNoKHNrYiwgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CQlza2JfcHVzaChza2IsIEVUSF9ITEVOKTsKIAogCXRsdl9kYXRhID0gaWZlX2RlY29kZShza2IsICZhbXA7bWV0YWxlbik7CiAJaWYgKHVubGlrZWx5KCF0bHZfZGF0YSkpIHsKQEAgLTc5NSw3ICYjNDM7Nzk2LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLAogCSAgIHdoZXJlIE9SSUdEQVRBID0gb3JpZ2luYWwgZXRoZXJuZXQgaGVhZGVyIC4uLgogCSAqLwogCXUxNiBtZXRhbGVuID0gaWZlX2dldF9zeihza2IsIHApOwotCWludCBoZHJtID0gbWV0YWxlbiAmIzQzOyBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuICYjNDM7IElGRV9NRVRBSERSTEVOOwomIzQzOwlpbnQgaGRybSA9IG1ldGFsZW4gJiM0MzsgRVRIX0hMRU4gJiM0MzsgSUZFX01FVEFIRFJMRU47CiAJdW5zaWduZWQgaW50IHNrYm9mZiA9IDA7CiAJaW50IG5ld19sZW4gPSBza2ItJmd0O2xlbiAmIzQzOyBoZHJtOwogCWJvb2wgZXhjZWVkX210dSA9IGZhbHNlOwpAQCAtODI2LDcgJiM0Mzs4MjcsNyBAQCBzdGF0aWMgaW50IHRjZl9pZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsCiAJfQogCiAJaWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpCi0JCXNrYl9wdXNoKHNrYiwgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CQlza2JfcHVzaChza2IsIEVUSF9ITEVOKTsKIAogCWlmZV9tZXRhID0gaWZlX2VuY29kZShza2IsIG1ldGFsZW4pOwogCWlmICghaWZlX21ldGEpCkBAIC04NTYsMTEgJiM0Mzs4NTcsMjcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLAogCW9ldGhoLSZndDtoX3Byb3RvID0gaHRvbnMocC0mZ3Q7ZXRoX3R5cGUpOwogCiAJaWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpCi0JCXNrYl9wdWxsKHNrYiwgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CQlza2JfcHVsbChza2IsIEVUSF9ITEVOKTsKIAogCXJldHVybiBhY3Rpb247CiB9CiAKJiM0MzsvKiBJRkUgZW5jYXBzdWxhdGVzIHRoZSBvcmlnaW5hbCBFdGhlcm5ldCBoZWFkZXIgYW5kLCBvbiBkZWNvZGUsIGV4cGVjdHMgdG8KJiM0MzsgKiBmaW5kIG9uZSwgc28gaXQgY2FuIG9ubHkgZXZlciB3b3JrIG9uIHNrYnMgdGhhdCBjYXJyeSBvbmUuIExvb3BiYWNrIGNhcnJpZXMKJiM0MzsgKiBFdGhlcm5ldCBoZWFkZXIgYXMgd2VsbCwgc28gaXQgcXVhbGlmaWVzIGhlcmUuCiYjNDM7ICogQXQgaW5ncmVzcywgYWxzbyB2ZXJpZnkgdGhhdCB0aGUgTDIgaGVhZGVyIGFib3V0IHRvIGJlIHB1c2hlZCBiYWNrIHJlYWxseQomIzQzOyAqIGlzIGFuIEV0aGVybmV0IGhlYWRlciBiZWNhdXNlIHRoZSBza2IgY291bGQmIzM5O3ZlIGJlZW4gcmVkaXJlY3RlZCB3aXRoIG1pcnJlZAomIzQzOyAqIGZyb20gYSBub24tRXRoZXJuZXQgZGV2aWNlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIHRjZl9pZmVfaXNfZXRoX3NrYihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJaWYgKHNrYi0mZ3Q7ZGV2LSZndDt0eXBlICE9IEFSUEhSRF9FVEhFUiAmYW1wOyZhbXA7CiYjNDM7CSAgICBza2ItJmd0O2Rldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfTE9PUEJBQ0spCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiAhc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSB8fCBza2ItJmd0O21hY19sZW4gPT0gRVRIX0hMRU47CiYjNDM7fQomIzQzOwogVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9pZmVfYWN0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLAogCQkJCSAgc3RydWN0IHRjZl9yZXN1bHQgKnJlcykKQEAgLTg2OSw2ICYjNDM7ODg2LDEzIEBAIFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2ZfaWZlX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXN0cnVjdCB0Y2ZfaWZlX3BhcmFtcyAqcDsKIAlpbnQgcmV0OwogCiYjNDM7CWlmICh1bmxpa2VseSghdGNmX2lmZV9pc19ldGhfc2tiKHNrYikpKSB7CiYjNDM7CQlic3RhdHNfdXBkYXRlKHRoaXNfY3B1X3B0cihpZmUtJmd0O2NvbW1vbi5jcHVfYnN0YXRzKSwgc2tiKTsKJiM0MzsJCXRjZl9sYXN0dXNlX3VwZGF0ZSgmYW1wO2lmZS0mZ3Q7dGNmX3RtKTsKJiM0MzsJCXFzdGF0c19jcHVfZHJvcF9pbmMoaWZlLSZndDtjb21tb24uY3B1X3FzdGF0cyk7CiYjNDM7CQlyZXR1cm4gVENfQUNUX1NIT1Q7CiYjNDM7CX0KJiM0MzsKIAlwID0gcmN1X2RlcmVmZXJlbmNlX2JoKGlmZS0mZ3Q7cGFyYW1zKTsKIAlpZiAocC0mZ3Q7ZmxhZ3MgJmFtcDsgSUZFX0VOQ09ERSkgewogCQlyZXQgPSB0Y2ZfaWZlX2VuY29kZShza2IsIGEsIHJlcywgcCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NTMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSUZFIEFjdGlvbiBQYXRjaCBBbmFseXNpcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvaWZlL2lmZS5jYCBhbmQgYG5ldC9zY2hlZC9hY3RfaWZlLmNgLiBMb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZm9yIHRoZSBUQyBJRkUgKEludGVyLUZFKSBhY3Rpb24uIEl0JiMzOTtzIHN1YnN0aXR1dGluZyBgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbmAgd2l0aCBgRVRIX0hMRU5gIGluIGBpZmVfZW5jb2RlYCwgYGlmZV9kZWNvZGVgLCBgdGNmX2lmZV9kZWNvZGVgLCBhbmQgYHRjZl9pZmVfZW5jb2RlYC4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBzbyBmYXIg4oCTIGxpa2VseSBmaXhpbmcgYW4gaW5jb3JyZWN0IGhhcmQgaGVhZGVyIGxlbmd0aCBhc3N1bXB0aW9uLiBJdCYjMzk7cyBhbHNvIGFkZGluZyBhIGNoZWNrIGluIGB0Y2ZfaWZlX2FjdGAgd2l0aCBgdGNmX2lmZV9pc19ldGhfc2tiYCB0byBzcGVjaWZpY2FsbHkgZHJvcCBub24tRXRoZXJuZXQgcGFja2V0cyAoZXhjbHVkaW5nIGxvb3BiYWNrLCBvZiBjb3Vyc2UpLiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBhZGRpdGlvbiB0byBtYWtlIHRoZSBhY3Rpb24gbW9yZSByb2J1c3QuCgpUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIFRDIGFjdGlvbnMsIHNvIHdlIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMgYW5kIGZvY3VzIG9uIHRoZSBhc3NvY2lhdGVkIHN5bWJvbHMuIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCB0aGUgc291cmNlIGRpcmVjdGx5IHdpbGwgdGVsbC4gCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ3JlcCBmb3IgdGhlIGNvbmZpZy4gRm9yIGBuZXQvaWZlL2lmZS5jYCwgYSBxdWljayBgZ3JlcCAtciAmIzM0O2lmZS5vJiMzNDsgbmV0L2lmZS9gIHR1cm5zIHVwIGBvYmotJChDT05GSUdfTkVUX0lGRSkgJiM0Mzs9IGlmZS5vYCwgY29uZmlybWluZyBgQ09ORklHX05FVF9JRkVgIGlzIHRoZSBjb250cm9sLiBBbmQgZm9yIGBuZXQvc2NoZWQvYWN0X2lmZS5jYCwgYGdyZXAgLXIgJiMzNDthY3RfaWZlLm8mIzM0OyBuZXQvc2NoZWQvYCByZXZlYWxzIGBvYmotJChDT05GSUdfTkVUX0FDVF9JRkUpICYjNDM7PSBhY3RfaWZlLm9gLCB3aGljaCBtZWFucyBgQ09ORklHX05FVF9BQ1RfSUZFYCBnb3Zlcm5zIGl0LiBOb3csIHRoYXQgYWxsIHNlZW1zIHJpZ2h0OyB3ZSBzaG91bGQgdmVyaWZ5IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWZlXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pZmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pZmUvTWFrZWZpbGUtNS1cbm5ldC9pZmUvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTkVUX0lGRSkgJiM0Mzs9IGlmZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU3MAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBhY3RfaWZlLmNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gYGFjdF9pZmUuY2AuIE15IGluaXRpYWwgZm9jdXMsIGFzIGFsd2F5cywgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHRoaXMgcGllY2Ugb2YgY29kZSBkZWxpdmVycy4gSnVkZ2luZyBieSB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIGl0JiMzOTtzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgaW50ZXJwcmV0aW5nIGFuZCBleGVjdXRpbmcgSUZFIGFjdGlvbnMgd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGludGVyYWN0aW9uIHBvaW50czogd2hhdCB0cmlnZ2VycyB0aGVzZSBJRkUgYWN0aW9ucywgYW5kIHdoYXQgb3RoZXIgbW9kdWxlcyByZWx5IG9uIGl0cyBvdXRwdXQgb3Igc2VydmljZXM/CgpJJiMzOTttIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIGtleSBmdW5jdGlvbiBjYWxsczogRG9lcyBpdCB1dGlsaXplIHN0YW5kYXJkIGxpYnJhcnkgZnVuY3Rpb25zIGZvciBwYXJzaW5nIG9yIHN0cmluZyBtYW5pcHVsYXRpb24/IEFyZSB0aGVyZSBhbnkgY3VzdG9tIGRhdGEgc3RydWN0dXJlcyBkZWZpbmVkIGZvciBJRkUgYWN0aW9ucz8gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBhIHN0YXRlIG1hY2hpbmUgb3IgYSBkZWNpc2lvbi1tYWtpbmcgcHJvY2VzcyBiYXNlZCBvbiB0aGUgaW5wdXQgcGFyYW1ldGVycy4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBzdGF0ZW1lbnRzIHRoYXQgYWZmZWN0IHRoZSBmbG93IGRlcGVuZGluZyBvbiBleHRlcm5hbCBmYWN0b3JzPwoKTmV4dCwgSSB3aWxsIHRyeSB0byBkZXRlcm1pbmUgdGhlIGlucHV0cyBhbmQgb3V0cHV0cy4gV2hhdCBraW5kIG9mIGRhdGEgaXMgZmVkIGludG8gdGhlc2UgSUZFIGZ1bmN0aW9ucz8gQXJlIHRoZXJlIGRhdGEgc3RydWN0dXJlcyB0aGF0IHRoZXkgcmVjZWl2ZSwgb3IgZG8gdGhleSByZWFkIGZyb20gZ2xvYmFsIHZhcmlhYmxlcz8gQW5kIHdoYXQgaXMgdGhlIG91dHB1dD8gQXJlIHRoZSByZXN1bHRzIHN0b3JlZD8gQW5kIHdoYXQgcGFydHMgb2YgdGhlIHNvZnR3YXJlIHVzZSB0aGUgcmVzdWx0cz8KCk9uY2UgSSBoYXZlIHRoZSBsYXkgb2YgdGhlIGxhbmQsIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gZXJyb3IgaGFuZGxpbmcgYW5kIGJvdW5kYXJ5IGNvbmRpdGlvbnMuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgc2VhcmNoIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIEhvdyByb2J1c3QgaXMgdGhlIGVycm9yIGRldGVjdGlvbj8gSXMgaXQgZ3JhY2VmdWxseSBoYW5kbGVkIG9yIGRvZXMgaXQgbGVhZCB0byBzeXN0ZW0gY3Jhc2hlcz8KCk15IGZvY3VzIHRoZW4gc2hpZnRzIHRvIHRoZSBpbnRlcm5hbCBsb2dpYy4gSSYjMzk7bGwgYXR0ZW1wdCB0byBjb25zdHJ1Y3QgYSBtZW50YWwgbW9kZWwgb2YgdGhlIGV4ZWN1dGlvbiBmbG93LiBJIG5lZWQgdG8gZGlzY2VybiB0aGUgbWFpbiBhbGdvcml0aG1zIHVzZWQuIFdoYXQgc3BlY2lmaWMgSUZFIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ/IEFyZSB0aGVyZSBhbnkgY29tcGxleCBjYWxjdWxhdGlvbnMsIG9yIG9wdGltaXphdGlvbnMgdGhhdCBhcmUgd29ydGggbm90aW5nPyBJJiMzOTttIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNvbmN1cnJlbmN5IG9yIG11bHRpLXRocmVhZGluZyBhc3BlY3RzLCBhc3N1bWluZyB0aGlzIGlzIGEgcmVhbC10aW1lIHN5c3RlbTsgYW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIGRhdGEgY29ycnVwdGlvbiBpcyBhIGhpZ2ggcHJpb3JpdHkuCgpVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgZWZmaWNpZW50bHkgYW5kIGVmZmVjdGl2ZWx5IHRoaXMgY29kZSBmdWxmaWxscyBpdHMgcm9sZS4gSXMgaXQgd2VsbC1kb2N1bWVudGVkPyBBcmUgdGhlIGNvZGluZyBwcmFjdGljZXMgY29uc2lzdGVudCB3aXRoIHRoZSBvdmVyYWxsIHN0eWxlIGd1aWRlPyBBbnkgcG90ZW50aWFsIGZvciByZWZhY3RvcmluZz8gRG9lcyBpdCBoYXZlIHJvb20gZm9yIGltcHJvdmVtZW50LCBvciBkb2VzIGl0IGRlbGl2ZXIgYSB2ZXJ5IGVsZWdhbnQgc29sdXRpb24/IEl0IGFsbCBjb21lcyBkb3duIHRvIHVuZGVyc3RhbmRpbmcgdGhlICYjMzQ7d2h5JiMzNDsgYXMgbXVjaCBhcyB0aGUgJiMzNDtob3cuJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthY3RfaWZlXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL01ha2VmaWxlPTI2PW9iai0kKENPTkZJR19ORVRfQUNUX1NLQk1PRClcdCYjNDM7PSBhY3Rfc2tibW9kLm9cbm5ldC9zY2hlZC9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfTkVUX0FDVF9JRkUpXHQmIzQzOz0gYWN0X2lmZS5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtMjgtb2JqLSQoQ09ORklHX05FVF9JRkVfU0tCTUFSSylcdCYjNDM7PSBhY3RfbWV0YV9tYXJrLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTc4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBORVRfSUZFYCBhbmQgYE5FVF9BQ1RfSUZFYCBjb25maWd1cmF0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGRyaWxsIGRvd24gaW50byB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORVRfQUNUX0lGRWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgY29tcGxleGl0eSB1c3VhbGx5IGxpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBmZWF0dXJlcyB0aGlzIGNvbmZpZ3VyYXRpb24gcmVsaWVzIG9uLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBpbmZvcm0gbXkgZGVidWdnaW5nIGFuZCBjdXN0b21pemF0aW9uIGdvaW5nIGZvcndhcmQuIEl0IHNlZW1zIGxpa2UgYSBjb25maWd1cmF0aW9uIGl0ZW0uIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIGNvbnRpbnVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfQUNUX0lGRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9ODgyPWNvbmZpZyBORVRfQUNUX1NLQk1PRFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTg5Mi1cbm5ldC9zY2hlZC9LY29uZmlnOjg5Mzpjb25maWcgTkVUX0FDVF9JRkVcbm5ldC9zY2hlZC9LY29uZmlnLTg5NC1cdHRyaXN0YXRlIFwmIzM0O0ludGVyLUZFIGFjdGlvbiBiYXNlZCBvbiBJRVRGIEZvckNFUyBJbnRlckZFIExGQlwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBUcmFmZmljIENvbnRyb2wgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhcnRpY3VsYXIgYXNwZWN0IG9mIHRoZSB0cmFmZmljIGNvbnRyb2wgY29uZmlndXJhdGlvbi4gTXkgaW5zdGluY3RzIGFyZSB0ZWxsaW5nIG1lIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBzZWUuLi4gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZSBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIEl0JiMzOTtzIHVzdWFsbHkgdGhlIGF1dGhvcml0YXRpdmUgc291cmNlIGZvciB0aGUgY29uZmlndXJhYmxlIG9wdGlvbnMgcmVsYXRlZCB0byBuZXR3b3JraW5nIHNjaGVkdWxlcnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhcm91bmQgbGluZSA4OTMuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgaGlnaC1sZXZlbCBvcHRpb25zIGFyZSwgd2hlcmUgdGhlIGNvcmUgZGVmaW5pdGlvbnMgb3IgbWF5YmUgYSBtb2R1bGUgb3IgZmVhdHVyZSBpcyBkZWNsYXJlZCwgb3IgcGVyaGFwcyBhIHNlY3Rpb24gSSYjMzk7bSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggaXMgZGVmaW5lZC4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSByZWxldmFudCBvcHRpb25zIGFyZSBzdHJ1Y3R1cmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBhcmUgaW4gcGxhY2UuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJdCB3aWxsIGxpa2VseSBoaWdobGlnaHQgdGhlIHNwZWNpZmljIGZlYXR1cmVzIEkgbmVlZCB0byB1bmRlcnN0YW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4ODU6XHRcdGhlbHBcbiA4ODY6XHRcdCBTYXkgWSBoZXJlIHRvIGFsbG93IG1vZGlmaWNhdGlvbiBvZiBza2IgZGF0YVxuIDg4NzpcdFxuIDg4ODpcdFx0IElmIHVuc3VyZSwgc2F5IE4uXG4gODg5Olx0XG4gODkwOlx0XHQgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDg5MTpcdFx0IG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3Rfc2tibW9kLlxuIDg5MjpcdFxuIDg5MzpcdGNvbmZpZyBORVRfQUNUX0lGRVxuIDg5NDpcdFx0dHJpc3RhdGUgXCYjMzQ7SW50ZXItRkUgYWN0aW9uIGJhc2VkIG9uIElFVEYgRm9yQ0VTIEludGVyRkUgTEZCXCYjMzQ7XG4gODk1Olx0XHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXG4gODk2Olx0XHRzZWxlY3QgTkVUX0lGRVxuIDg5NzpcdFx0aGVscFxuIDg5ODpcdFx0ICBTYXkgWSBoZXJlIHRvIGFsbG93IGZvciBzb3VyY2luZyBhbmQgdGVybWluYXRpbmcgbWV0YWRhdGFcbiA4OTk6XHRcdCAgRm9yIGRldGFpbHMgcmVmZXIgdG8gbmV0ZGV2MDEgcGFwZXI6XG4gOTAwOlx0XHQgIFwmIzM0O0Rpc3RyaWJ1dGluZyBMaW51eCBUcmFmZmljIENvbnRyb2wgQ2xhc3NpZmllci1BY3Rpb24gU3Vic3lzdGVtXCYjMzQ7XG4gOTAxOlx0XHQgICBBdXRob3JzOiBKYW1hbCBIYWRpIFNhbGltIGFuZCBEYW1hc2NlbmUgTS4gSm9hY2hpbXBpbGxhaVxuIDkwMjpcdFxuIDkwMzpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gOTA0Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfaWZlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDA3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBJRkUgQ29uZmlndXJhdGlvbiBhbmQgRW50cnkgUG9pbnRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGN1cnJlbnQgZm9jdXMgaXMgb24gdGhlIGBORVRfQUNUX0lGRWAgYW5kIGBORVRfQ0xTX0FDVGAgY29uZmlndXJhdGlvbnMsIGVzcGVjaWFsbHkgdGhlaXIgaW50ZXJhY3Rpb24sIHdoaWNoIGlzIHR5cGljYWwgZm9yIFRyYWZmaWMgQ29udHJvbCBzY2VuYXJpb3MuIEkmIzM5O20gaG9taW5nIGluIG9uIHRoZSBzeW1ib2xzOiBgdGNmX2lmZV9hY3RgLCBgdGNmX2lmZV9lbmNvZGVgLCBgdGNmX2lmZV9kZWNvZGVgLCBgaWZlX2VuY29kZWAsIGFuZCBgaWZlX2RlY29kZWAuCgpGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgdGNmX2lmZV9lbmNvZGVgIGFuZCBgdGNmX2lmZV9kZWNvZGVgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhleSBhcmUgaW5kZWVkIGRlY2xhcmVkIGFzIHN0YXRpYywgYW5kIHRoZXkmIzM5O3JlIGRlZmluZWQgd2l0aGluIGBuZXQvc2NoZWQvYWN0X2lmZS5jYC4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlaXIgc2NvcGUgYW5kIHBvdGVudGlhbCBmb3IgbW9kaWZpY2F0aW9uLgoKYHRjZl9pZmVfYWN0YCwgaXQgc2VlbXMsIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGlzIG1vZHVsZS4gTm93LCByZWdhcmRpbmcgdGhlIGZ1bmN0aW9ucyBgaWZlX2VuY29kZWAgYW5kIGBpZmVfZGVjb2RlYCwgdGhlc2UgYXJlIG5vdCBzdGF0aWMsIGFuZCBJIGZpbmQgdGhleSYjMzk7cmUgZXhwb3J0ZWQgZnJvbSBgbmV0L2lmZS9pZmUuY2AuIFRoaXMgaW1wbGllcyB0aGV5IGFyZSBpbnRlbmRlZCBmb3IgYnJvYWRlciB1c2Ugd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBUaGlzIGFyY2hpdGVjdHVyZSBtYWtlcyBzZW5zZTsgYHRjZl9pZmVfYWN0YCBoYW5kbGVzIHRoZSBUcmFmZmljIENvbnRyb2wgKFRDKSBpbnRlcmFjdGlvbiwgcG90ZW50aWFsbHkgdXNpbmcgdGhlIHNoYXJlZCBgaWZlX2VuY29kZWAgYW5kIGBpZmVfZGVjb2RlYCBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0xfR1BMXFwoaWZlX2VuY29kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pZmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pZmUvaWZlLmM9MzQ9dm9pZCAqaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbWV0YWxlbilcbi0tXG5uZXQvaWZlL2lmZS5jLTYzLX1cbm5ldC9pZmUvaWZlLmM6NjQ6RVhQT1JUX1NZTUJPTF9HUEwoaWZlX2VuY29kZSk7XG5uZXQvaWZlL2lmZS5jLTY1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTYwCgkJCQkJCQlvdXRwdXQ6IDEzOAoJCQkJCQkJdGhvdWdodHM6IDMwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUQyBJRkUgQWN0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIHRha2VuIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgaWZlX2VuY29kZWAsIGBpZmVfZGVjb2RlYCwgYW5kIGB0Y2ZfaWZlX2FjdGAgYXJlIGRlZmluaXRlbHkgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24uIFRoZXkgc2VlbSBjZW50cmFsIHRvIHRoZSBjaGFuZ2VzLgoKSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgZm9yIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgaGVyZSwgYW5kIGl0IGxvb2tzIGxpa2UgYE5FVF9DTFNfQUNUYCBpcyByZXF1aXJlZC4gSSYjMzk7dmUgYWxzbyBub3RlZCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zOiBgTkVUX0FDVF9JRkVgIGFuZCwgYWdhaW4sIGBORVRfQ0xTX0FDVGAuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgbW9kaWZ5aW5nIGhvdyB0aGUgaGVhZGVyIGxlbmd0aCBpcyBoYW5kbGVkIOKAkyBnb2luZyBmcm9tIGBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuYCB0byBgRVRIX0hMRU5gLCB3aGljaCBpcyBhIGdvb2QgbW92ZSB0byBwcmV2ZW50IHBvdGVudGlhbCBlcnJvcnMuIEFkZGl0aW9uYWxseSwgYSBuZXcgY2hlY2ssIGB0Y2ZfaWZlX2lzX2V0aF9za2JgLCBpcyBhZGRlZC4gVGhpcyBpcyBncmVhdCwgYXMgaXQgZXhwbGljaXRseSBlbnN1cmVzIHRoZSBwYWNrZXQgaXMgRXRoZXJuZXQsIHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgaW5jb3JyZWN0IHBhcnNpbmcgaWYgdGhlIGRldmljZSBpc24mIzM5O3QgRXRoZXJuZXQtYmFzZWQuIFRoZXNlIGFyZSBpbXBvcnRhbnQgZGVmZW5zaXZlIGNoYW5nZXMgdGhhdCB3aWxsIHByZXZlbnQgYSB3aG9sZSBjbGFzcyBvZiBidWdzLgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgd2Ugc2hvdWxkIGJlIGZ1enppbmcgdGhpcyBjaGFuZ2UuIEl0IGZpeGVzIGEgY3JpdGljYWwgYnVnIGluIGhvdyBUQyBJRkUgaGFuZGxlcyBlbmNhcHN1bGF0aW9uIGFuZCBkZWNhcHN1bGF0aW9uLCBhbmQgaW50cm9kdWNlcyBhIGNyaXRpY2FsIGNoZWNrIGZvciBwYWNrZXQgdHlwZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JrIHByb2Nlc3NpbmcgcGF0aCBhbmQsIHRoZXJlZm9yZSwgdmVyeSBmdXp6LXdvcnRoeS4KClRoZSByZXN1bHRzIGFyZToKCiogICAqKldvcnRoRnV6emluZzogdHJ1ZSoqCiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgYnVnIGluIHRoZSBUQyBJRkUgYWN0aW9uIHJlZ2FyZGluZyBoZWFkZXIgbGVuZ3RoLCB1c2luZyBgRVRIX0hMRU5gIGluc3RlYWQgb2YgYHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW5gIGFuZCBhZGRzIGEgY2hlY2sgZm9yIGV0aGVybmV0IHBhY2tldHMuIEl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgcGF0aC4KKiAgICoqRm9jdXNTeW1ib2xzOioqIGB0Y2ZfaWZlX2FjdGAsIGBpZmVfZW5jb2RlYCwgYGlmZV9kZWNvZGVgCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYE5FVF9BQ1RfSUZFYCwgYE5FVF9DTFNfQUNUYAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0FDVF9JRkUmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y2ZfaWZlX2FjdCYjMzQ7LAogICAgJiMzNDtpZmVfZW5jb2RlJiMzNDssCiAgICAmIzM0O2lmZV9kZWNvZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gdGhlIFRDIElGRSBhY3Rpb24gd2hlcmUgaXQgaW5jb3JyZWN0bHkgdXNlZCBgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGluc3RlYWQgb2YgYEVUSF9ITEVOYCBmb3IgZW5jYXBzdWxhdGlvbi9kZWNhcHN1bGF0aW9uLCBhbmQgYWRkcyBhIGNoZWNrIHRvIGRyb3Agbm9uLUV0aGVybmV0IHBhY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0FDVF9JRkUmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y2ZfaWZlX2FjdCYjMzQ7LAogICAgJiMzNDtpZmVfZW5jb2RlJiMzNDssCiAgICAmIzM0O2lmZV9kZWNvZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gdGhlIFRDIElGRSBhY3Rpb24gd2hlcmUgaXQgaW5jb3JyZWN0bHkgdXNlZCBgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGluc3RlYWQgb2YgYEVUSF9ITEVOYCBmb3IgZW5jYXBzdWxhdGlvbi9kZWNhcHN1bGF0aW9uLCBhbmQgYWRkcyBhIGNoZWNrIHRvIGRyb3Agbm9uLUV0aGVybmV0IHBhY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiB0aGUgSUZFIHBhY2tldCBhY3Rpb24gd2hlcmUgYHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCB3YXMgdXNlZCBpbnN0ZWFkIG9mIGBFVEhfSExFTmAgdG8gcHVzaC9wdWxsIGhlYWRlcnMgYW5kIGNvcHkgZGF0YS4gSWYgYSBwYWNrZXQgaXMgcmVkaXJlY3RlZCBmcm9tIGEgbm9uLUV0aGVybmV0IGRldmljZSAoZS5nLiwgdmlhIG1pcnJlZCksIGBoYXJkX2hlYWRlcl9sZW5gIG1heSBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIEV0aGVybmV0IGhlYWRlciBzaXplLiBUaGlzIG1pc21hdGNoIGNhbiBsZWFkIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzIHdpdGhpbiB0aGUgc29ja2V0IGJ1ZmZlciAoc2tiKSBpZiBgaGFyZF9oZWFkZXJfbGVuYCBpcyBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIHBhY2tldCBkYXRhLCBvciBwYWNrZXQgY29ycnVwdGlvbiBpZiBpdCBpcyBzbWFsbGVyLlxuXG5PdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGluIHNrYiBkYXRhIGJ1ZmZlcnMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLCBhcyB0aGUga2VybmVsJiMzOTtzIHNrYiBhbGxvY2F0aW9uIGFuZCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIGFyZSBleHBsaWNpdGx5IGFubm90YXRlZCB0byBwb2lzb24gdGhlIGhlYWRyb29tIGFuZCB0YWlscm9vbS4gVGhlIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIG5vciBkb2VzIGl0IGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBmdWxseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGlzIGNsYXNzIG9mIGJ1Z3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDU3Yzk2Njg1NDIwYmI0MmIzNWNlMDM3OWZiN2VhNjg2ZDIxZTY0MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDE3OjQxOjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lmZS9pZmUuYyBiL25ldC9pZmUvaWZlLmMKaW5kZXggN2E3NTk0N2EzMWUzMS4uMmRkZjcyNWQzMzg5ZSAxMDA2NDQKLS0tIGEvbmV0L2lmZS9pZmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaWZlL2lmZS5jCkBAIC0zNyw3ICYjNDM7MzcsNyBAQCB2b2lkICppZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiBtZXRhbGVuKQogCSAqIHdoZXJlIE9SSUdEQVRBID0gb3JpZ2luYWwgZXRoZXJuZXQgaGVhZGVyIC4uLgogCSAqLwogCWludCBoZHJtID0gbWV0YWxlbiAmIzQzOyBJRkVfTUVUQUhEUkxFTjsKLQlpbnQgdG90YWxfcHVzaCA9IGhkcm0gJiM0Mzsgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbjsKJiM0MzsJaW50IHRvdGFsX3B1c2ggPSBoZHJtICYjNDM7IEVUSF9ITEVOOwogCXN0cnVjdCBpZmVoZWFkciAqaWZlaGRyOwogCXN0cnVjdCBldGhoZHIgKmlldGhoOwkvKiBpbm5lciBldGhlciBoZWFkZXIgKi8KIAlpbnQgc2tib2ZmID0gMDsKQEAgLTUwLDkgJiM0Mzs1MCw5IEBAIHZvaWQgKmlmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IG1ldGFsZW4pCiAJaWV0aGggPSAoc3RydWN0IGV0aGhkciAqKSBza2ItJmd0O2RhdGE7CiAKIAlfX3NrYl9wdXNoKHNrYiwgdG90YWxfcHVzaCk7Ci0JbWVtY3B5KHNrYi0mZ3Q7ZGF0YSwgaWV0aGgsIHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4pOwomIzQzOwltZW1jcHkoc2tiLSZndDtkYXRhLCBpZXRoaCwgRVRIX0hMRU4pOwogCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7Ci0Jc2tib2ZmICYjNDM7PSBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuOwomIzQzOwlza2JvZmYgJiM0Mzs9IEVUSF9ITEVOOwogCiAJLyogdG90YWwgbWV0YWRhdGEgbGVuZ3RoICovCiAJaWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKSAoc2tiLSZndDtkYXRhICYjNDM7IHNrYm9mZik7CkBAIC02OSwxMiAmIzQzOzY5LDEyIEBAIHZvaWQgKmlmZV9kZWNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2ICptZXRhbGVuKQogCWludCB0b3RhbF9wdWxsOwogCXUxNiBpZmVoZHJsbjsKIAotCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gJiM0MzsgSUZFX01FVEFIRFJMRU4pKQomIzQzOwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBFVEhfSExFTiAmIzQzOyBJRkVfTUVUQUhEUkxFTikpCiAJCXJldHVybiBOVUxMOwogCi0JaWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKSAoc2tiLSZndDtkYXRhICYjNDM7IHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4pOwomIzQzOwlpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBFVEhfSExFTik7CiAJaWZlaGRybG4gPSBudG9ocyhpZmVoZHItJmd0O21ldGFsZW4pOwotCXRvdGFsX3B1bGwgPSBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuICYjNDM7IGlmZWhkcmxuOwomIzQzOwl0b3RhbF9wdWxsID0gRVRIX0hMRU4gJiM0MzsgaWZlaGRybG47CiAKIAlpZiAodW5saWtlbHkoaWZlaGRybG4gJmx0OyAyKSkKIAkJcmV0dXJuIE5VTEw7CkBAIC04Miw3ICYjNDM7ODIsNyBAQCB2b2lkICppZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqbWV0YWxlbikKIAlpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCB0b3RhbF9wdWxsICYjNDM7IEVUSF9ITEVOKSkpCiAJCXJldHVybiBOVUxMOwogCi0JaWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItJmd0O2RhdGEgJiM0Mzsgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CWlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IEVUSF9ITEVOKTsKIAlza2Jfc2V0X21hY19oZWFkZXIoc2tiLCB0b3RhbF9wdWxsKTsKIAlfX3NrYl9wdWxsKHNrYiwgdG90YWxfcHVsbCk7CiAJKm1ldGFsZW4gPSBpZmVoZHJsbiAtIElGRV9NRVRBSERSTEVOOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9pZmUuYyBiL25ldC9zY2hlZC9hY3RfaWZlLmMKaW5kZXggZmYyYjE2ZTM1YjliMC4uOWNlYTcxZmMxZGIzZCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9pZmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X2lmZS5jCkBAIC0yOCw2ICYjNDM7MjgsNyBAQAogI2luY2x1ZGUgJmx0O3VhcGkvbGludXgvdGNfYWN0L3RjX2lmZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC90Y19hY3QvdGNfaWZlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXRoZXJkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWZfYXJwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lmZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC90Y193cmFwcGVyLmgmZ3Q7CiAKQEAgLTcyMyw3ICYjNDM7NzI0LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2RlY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLAogCXRjZl9sYXN0dXNlX3VwZGF0ZSgmYW1wO2lmZS0mZ3Q7dGNmX3RtKTsKIAogCWlmIChza2JfYXRfdGNfaW5ncmVzcyhza2IpKQotCQlza2JfcHVzaChza2IsIHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4pOwomIzQzOwkJc2tiX3B1c2goc2tiLCBFVEhfSExFTik7CiAKIAl0bHZfZGF0YSA9IGlmZV9kZWNvZGUoc2tiLCAmYW1wO21ldGFsZW4pOwogCWlmICh1bmxpa2VseSghdGx2X2RhdGEpKSB7CkBAIC03OTUsNyAmIzQzOzc5Niw3IEBAIHN0YXRpYyBpbnQgdGNmX2lmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSwKIAkgICB3aGVyZSBPUklHREFUQSA9IG9yaWdpbmFsIGV0aGVybmV0IGhlYWRlciAuLi4KIAkgKi8KIAl1MTYgbWV0YWxlbiA9IGlmZV9nZXRfc3ooc2tiLCBwKTsKLQlpbnQgaGRybSA9IG1ldGFsZW4gJiM0Mzsgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiAmIzQzOyBJRkVfTUVUQUhEUkxFTjsKJiM0MzsJaW50IGhkcm0gPSBtZXRhbGVuICYjNDM7IEVUSF9ITEVOICYjNDM7IElGRV9NRVRBSERSTEVOOwogCXVuc2lnbmVkIGludCBza2JvZmYgPSAwOwogCWludCBuZXdfbGVuID0gc2tiLSZndDtsZW4gJiM0MzsgaGRybTsKIAlib29sIGV4Y2VlZF9tdHUgPSBmYWxzZTsKQEAgLTgyNiw3ICYjNDM7ODI3LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLAogCX0KIAogCWlmIChza2JfYXRfdGNfaW5ncmVzcyhza2IpKQotCQlza2JfcHVzaChza2IsIHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4pOwomIzQzOwkJc2tiX3B1c2goc2tiLCBFVEhfSExFTik7CiAKIAlpZmVfbWV0YSA9IGlmZV9lbmNvZGUoc2tiLCBtZXRhbGVuKTsKIAlpZiAoIWlmZV9tZXRhKQpAQCAtODU2LDExICYjNDM7ODU3LDI3IEBAIHN0YXRpYyBpbnQgdGNmX2lmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSwKIAlvZXRoaC0mZ3Q7aF9wcm90byA9IGh0b25zKHAtJmd0O2V0aF90eXBlKTsKIAogCWlmIChza2JfYXRfdGNfaW5ncmVzcyhza2IpKQotCQlza2JfcHVsbChza2IsIHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4pOwomIzQzOwkJc2tiX3B1bGwoc2tiLCBFVEhfSExFTik7CiAKIAlyZXR1cm4gYWN0aW9uOwogfQogCiYjNDM7LyogSUZFIGVuY2Fwc3VsYXRlcyB0aGUgb3JpZ2luYWwgRXRoZXJuZXQgaGVhZGVyIGFuZCwgb24gZGVjb2RlLCBleHBlY3RzIHRvCiYjNDM7ICogZmluZCBvbmUsIHNvIGl0IGNhbiBvbmx5IGV2ZXIgd29yayBvbiBza2JzIHRoYXQgY2Fycnkgb25lLiBMb29wYmFjayBjYXJyaWVzCiYjNDM7ICogRXRoZXJuZXQgaGVhZGVyIGFzIHdlbGwsIHNvIGl0IHF1YWxpZmllcyBoZXJlLgomIzQzOyAqIEF0IGluZ3Jlc3MsIGFsc28gdmVyaWZ5IHRoYXQgdGhlIEwyIGhlYWRlciBhYm91dCB0byBiZSBwdXNoZWQgYmFjayByZWFsbHkKJiM0MzsgKiBpcyBhbiBFdGhlcm5ldCBoZWFkZXIgYmVjYXVzZSB0aGUgc2tiIGNvdWxkJiMzOTt2ZSBiZWVuIHJlZGlyZWN0ZWQgd2l0aCBtaXJyZWQKJiM0MzsgKiBmcm9tIGEgbm9uLUV0aGVybmV0IGRldmljZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCB0Y2ZfaWZlX2lzX2V0aF9za2IoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CWlmIChza2ItJmd0O2Rldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfRVRIRVIgJmFtcDsmYW1wOwomIzQzOwkgICAgc2tiLSZndDtkZXYtJmd0O3R5cGUgIT0gQVJQSFJEX0xPT1BCQUNLKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gIXNrYl9hdF90Y19pbmdyZXNzKHNrYikgfHwgc2tiLSZndDttYWNfbGVuID09IEVUSF9ITEVOOwomIzQzO30KJiM0MzsKIFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2ZfaWZlX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSwKIAkJCQkgIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpCkBAIC04NjksNiAmIzQzOzg4NiwxMyBAQCBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2lmZV9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3QgdGNmX2lmZV9wYXJhbXMgKnA7CiAJaW50IHJldDsKIAomIzQzOwlpZiAodW5saWtlbHkoIXRjZl9pZmVfaXNfZXRoX3NrYihza2IpKSkgewomIzQzOwkJYnN0YXRzX3VwZGF0ZSh0aGlzX2NwdV9wdHIoaWZlLSZndDtjb21tb24uY3B1X2JzdGF0cyksIHNrYik7CiYjNDM7CQl0Y2ZfbGFzdHVzZV91cGRhdGUoJmFtcDtpZmUtJmd0O3RjZl90bSk7CiYjNDM7CQlxc3RhdHNfY3B1X2Ryb3BfaW5jKGlmZS0mZ3Q7Y29tbW9uLmNwdV9xc3RhdHMpOwomIzQzOwkJcmV0dXJuIFRDX0FDVF9TSE9UOwomIzQzOwl9CiYjNDM7CiAJcCA9IHJjdV9kZXJlZmVyZW5jZV9iaChpZmUtJmd0O3BhcmFtcyk7CiAJaWYgKHAtJmd0O2ZsYWdzICZhbXA7IElGRV9FTkNPREUpIHsKIAkJcmV0ID0gdGNmX2lmZV9lbmNvZGUoc2tiLCBhLCByZXMsIHApOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg1MAoJCQkJCQkJb3V0cHV0OiAyNDUKCQkJCQkJCXRob3VnaHRzOiAxNTk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKklGRSBQYXRjaCBBbmFseXNpczogS0FTQU4gdnMuIEtNU0FOKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIGBuZXQvaWZlL2lmZS5jYCBhbmQgYG5ldC9zY2hlZC9hY3RfaWZlLmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgcmVwbGFjaW5nIGBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuYCB3aXRoIGBFVEhfSExFTmAgaW4gYSBmZXcgY3JpdGljYWwgc3BvdHMsIGFuZCBhZGRpbmcgYSBjaGVjayB3aXRoIGB0Y2ZfaWZlX2lzX2V0aF9za2Ioc2tiKWAgdG8gZW5zdXJlIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBFdGhlcm5ldCBvciBsb29wYmFjayBza2JzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8KClRoZSBpc3N1ZSBzZWVtcyB0byBzdGVtIGZyb20gYSBtaXNtYXRjaC4gYHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW5gIG1pZ2h0IGJlIGluY29ycmVjdCBpZiB0aGUgcGFja2V0IG9yaWdpbmF0ZXMgZnJvbSBhIG5vbi1FdGhlcm5ldCBkZXZpY2UsIG9yIGlmIHRoZSBkZXZpY2UmIzM5O3MgaGVhZGVyIGxlbmd0aCBpcyBtaXNjb25maWd1cmVkLiBVc2luZyB0aGUgd3JvbmcgbGVuZ3RoIHdoZW4gcHVzaGluZyBvciBwdWxsaW5nIGhlYWRlcnMgaXMgdGhlIHByb2JsZW0uIEl0IGNvdWxkIGxlYWQgdG8gcmVhZHMvd3JpdGVzIHRoYXQgZ28gb3V0IG9mIGJvdW5kcyBvZiB0aGUgc29ja2V0IGJ1ZmZlciAoYHNrYmApIG9yIGluY29ycmVjdCBvZmZzZXRzLgoKTXkgY29uY2VybiB3YXM6IElmIGBoYXJkX2hlYWRlcl9sZW5gIHdhcyBsYXJnZXIsIHdvdWxkbiYjMzk7dCBgc2tiX3B1c2hgIHBvdGVudGlhbGx5IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGE/IEJ1dCB0aGVuIEkgcmVhbGl6ZWQgYHNrYl9wdXNoYCBqdXN0IG1vdmVzIHRoZSBkYXRhIHBvaW50ZXIgYW5kIGNoYW5nZXMgYGxlbmAuIEl0JiMzOTtzIHRoZSBgbWVtY3B5YCB0aGF0JiMzOTtzIHRoZSBrZXkuIElmIGBoYXJkX2hlYWRlcl9sZW5gIGlzIHRvbyBsYXJnZSwgdGhhdCBgbWVtY3B5YCB3b3VsZCB0cnkgdG8gcmVhZCBiZXlvbmQgdGhlIHBhY2tldCYjMzk7cyBhY3R1YWwgZGF0YS4gSWYgaXQmIzM5O3MgdG9vIHNtYWxsLCB0aGUgRXRoZXJuZXQgaGVhZGVyIHdvdWxkIGJlIGluY29tcGxldGUuIFRoaXMgd291bGQgdGhlbiBsZWFkIHRvIGRhdGEgY29ycnVwdGlvbiBpbiB0aGUgcGFja2V0LCBlaXRoZXIgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIGFuIGluY29ycmVjdCBoZWFkZXIsIHJlc3BlY3RpdmVseS4KClRoZSBrZXkgaXMgdGhhdCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBkZXNpZ25lZCB0byBjYXRjaCB0aGVzZSBvdXQtb2YtYm91bmRzIHJlYWRzIGJlY2F1c2Ugc2tiIGRhdGEgYXJlYXMgaGF2ZSBLQVNBTiBhbm5vdGF0aW9ucy4gS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpcyBmb2N1c2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgS0FTQU4gYWxyZWFkeSBjYXRjaGVzIHRoZSBPT0IgYWNjZXNzZXMuCgpJIHJldmlzaXRlZCB0aGUgY29kZSBhZ2FpbiwgZXNwZWNpYWxseSB0aGlzOgoKYGBgYwotCWludCB0b3RhbF9wdXNoID0gaGRybSAmIzQzOyBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuOwomIzQzOwlpbnQgdG90YWxfcHVzaCA9IGhkcm0gJiM0MzsgRVRIX0hMRU47CmBgYAphbmQKYGBgYwotCW1lbWNweShza2ItJmd0O2RhdGEsIGlldGhoLCBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKTsKJiM0MzsJbWVtY3B5KHNrYi0mZ3Q7ZGF0YSwgaWV0aGgsIEVUSF9ITEVOKTsKYGBgCgpNeSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBpcyBwcmltYXJpbHkgYSBwYWNrZXQgYm91bmRhcnkvaGVhZGVyIGxlbmd0aCBidWcuIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnksIEtBU0FOIGhhbmRsZXMgdGhlIE9PQiBpc3N1ZXMuIFRoZSBwYXRjaCBjb3JyZWN0cyB0aGUgaGVhZGVyIGxlbmd0aC4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyB0byB1c2VyIHNwYWNlIG9yIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLiBJdCBjb3JyZWN0bHkgZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYnVnLCBhbmQgSSYjMzk7bGwgY29uZmlybSB0aGF0IEtBU0FOJiMzOTtzIGFscmVhZHkgY2FwYWJsZSBvZiBjYXRjaGluZyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gdGhlIElGRSBwYWNrZXQgYWN0aW9uIHdoZXJlIGBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgd2FzIHVzZWQgaW5zdGVhZCBvZiBgRVRIX0hMRU5gIHRvIHB1c2gvcHVsbCBoZWFkZXJzIGFuZCBjb3B5IGRhdGEuIElmIGEgcGFja2V0IGlzIHJlZGlyZWN0ZWQgZnJvbSBhIG5vbi1FdGhlcm5ldCBkZXZpY2UgKGUuZy4sIHZpYSBtaXJyZWQpLCBgaGFyZF9oZWFkZXJfbGVuYCBtYXkgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBFdGhlcm5ldCBoZWFkZXIgc2l6ZS4gVGhpcyBtaXNtYXRjaCBjYW4gbGVhZCB0byBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcyB3aXRoaW4gdGhlIHNvY2tldCBidWZmZXIgKHNrYikgaWYgYGhhcmRfaGVhZGVyX2xlbmAgaXMgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBwYWNrZXQgZGF0YSwgb3IgcGFja2V0IGNvcnJ1cHRpb24gaWYgaXQgaXMgc21hbGxlci5cblxuT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiBza2IgZGF0YSBidWZmZXJzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTiwgYXMgdGhlIGtlcm5lbCYjMzk7cyBza2IgYWxsb2NhdGlvbiBhbmQgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyBhcmUgZXhwbGljaXRseSBhbm5vdGF0ZWQgdG8gcG9pc29uIHRoZSBoZWFkcm9vbSBhbmQgdGFpbHJvb20uIFRoZSBidWcgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLCBub3IgZG9lcyBpdCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgZnVsbHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhpcyBjbGFzcyBvZiBidWdzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiB0aGUgSUZFIHBhY2tldCBhY3Rpb24gd2hlcmUgYHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCB3YXMgdXNlZCBpbnN0ZWFkIG9mIGBFVEhfSExFTmAgdG8gcHVzaC9wdWxsIGhlYWRlcnMgYW5kIGNvcHkgZGF0YS4gSWYgYSBwYWNrZXQgaXMgcmVkaXJlY3RlZCBmcm9tIGEgbm9uLUV0aGVybmV0IGRldmljZSAoZS5nLiwgdmlhIG1pcnJlZCksIGBoYXJkX2hlYWRlcl9sZW5gIG1heSBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIEV0aGVybmV0IGhlYWRlciBzaXplLiBUaGlzIG1pc21hdGNoIGNhbiBsZWFkIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzIHdpdGhpbiB0aGUgc29ja2V0IGJ1ZmZlciAoc2tiKSBpZiBgaGFyZF9oZWFkZXJfbGVuYCBpcyBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIHBhY2tldCBkYXRhLCBvciBwYWNrZXQgY29ycnVwdGlvbiBpZiBpdCBpcyBzbWFsbGVyLlxuXG5PdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGluIHNrYiBkYXRhIGJ1ZmZlcnMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLCBhcyB0aGUga2VybmVsJiMzOTtzIHNrYiBhbGxvY2F0aW9uIGFuZCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIGFyZSBleHBsaWNpdGx5IGFubm90YXRlZCB0byBwb2lzb24gdGhlIGhlYWRyb29tIGFuZCB0YWlscm9vbS4gVGhlIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIG5vciBkb2VzIGl0IGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBmdWxseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGlzIGNsYXNzIG9mIGJ1Z3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDE6MzUuNTYwMjAzMDIxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk1ODk2MTkwMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0FDVF9JRkVcIixcbiAgICBcIk5FVF9DTFNfQUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNmX2lmZV9hY3RcIixcbiAgICBcImlmZV9lbmNvZGVcIixcbiAgICBcImlmZV9kZWNvZGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIGluIHRoZSBJRkUgcGFja2V0IGFjdGlvbiB3aGVyZSBgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgd2FzIHVzZWQgaW5zdGVhZCBvZiBgRVRIX0hMRU5gIHRvIHB1c2gvcHVsbCBoZWFkZXJzIGFuZCBjb3B5IGRhdGEuIElmIGEgcGFja2V0IGlzIHJlZGlyZWN0ZWQgZnJvbSBhIG5vbi1FdGhlcm5ldCBkZXZpY2UgKGUuZy4sIHZpYSBtaXJyZWQpLCBgaGFyZF9oZWFkZXJfbGVuYCBtYXkgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBFdGhlcm5ldCBoZWFkZXIgc2l6ZS4gVGhpcyBtaXNtYXRjaCBjYW4gbGVhZCB0byBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcyB3aXRoaW4gdGhlIHNvY2tldCBidWZmZXIgKHNrYikgaWYgYGhhcmRfaGVhZGVyX2xlbmAgaXMgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBwYWNrZXQgZGF0YSwgb3IgcGFja2V0IGNvcnJ1cHRpb24gaWYgaXQgaXMgc21hbGxlci5cXG5cXG5PdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGluIHNrYiBkYXRhIGJ1ZmZlcnMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLCBhcyB0aGUga2VybmVsJ3Mgc2tiIGFsbG9jYXRpb24gYW5kIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgYXJlIGV4cGxpY2l0bHkgYW5ub3RhdGVkIHRvIHBvaXNvbiB0aGUgaGVhZHJvb20gYW5kIHRhaWxyb29tLiBUaGUgYnVnIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcywgbm9yIGRvZXMgaXQgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIGZ1bGx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIHRoaXMgY2xhc3Mgb2YgYnVncywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIGluIHRoZSBUQyBJRkUgYWN0aW9uIHdoZXJlIGl0IGluY29ycmVjdGx5IHVzZWQgYHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGluc3RlYWQgb2YgYEVUSF9ITEVOYCBmb3IgZW5jYXBzdWxhdGlvbi9kZWNhcHN1bGF0aW9uLCBhbmQgYWRkcyBhIGNoZWNrIHRvIGRyb3Agbm9uLUV0aGVybmV0IHBhY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDE6MzUuNTYwMjA4NDcxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDEwMjY2NzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDU3Yzk2Njg1NDIwYmI0MmIzNWNlMDM3OWZiN2VhNjg2ZDIxZTY0MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxNzo0MTozMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaWZlL2lmZS5jIGIvbmV0L2lmZS9pZmUuY1xcbmluZGV4IDdhNzU5NDdhMzFlMzEuLjJkZGY3MjVkMzM4OWUgMTAwNjQ0XFxuLS0tIGEvbmV0L2lmZS9pZmUuY1xcbisrKyBiL25ldC9pZmUvaWZlLmNcXG5AQCAtMzcsNyArMzcsNyBAQCB2b2lkICppZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiBtZXRhbGVuKVxcbiBcXHQgKiB3aGVyZSBPUklHREFUQSA9IG9yaWdpbmFsIGV0aGVybmV0IGhlYWRlciAuLi5cXG4gXFx0ICovXFxuIFxcdGludCBoZHJtID0gbWV0YWxlbiArIElGRV9NRVRBSERSTEVOO1xcbi1cXHRpbnQgdG90YWxfcHVzaCA9IGhkcm0gKyBza2ItXFx1MDAzZWRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xcbitcXHRpbnQgdG90YWxfcHVzaCA9IGhkcm0gKyBFVEhfSExFTjtcXG4gXFx0c3RydWN0IGlmZWhlYWRyICppZmVoZHI7XFxuIFxcdHN0cnVjdCBldGhoZHIgKmlldGhoO1xcdC8qIGlubmVyIGV0aGVyIGhlYWRlciAqL1xcbiBcXHRpbnQgc2tib2ZmID0gMDtcXG5AQCAtNTAsOSArNTAsOSBAQCB2b2lkICppZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiBtZXRhbGVuKVxcbiBcXHRpZXRoaCA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYi1cXHUwMDNlZGF0YTtcXG4gXFxuIFxcdF9fc2tiX3B1c2goc2tiLCB0b3RhbF9wdXNoKTtcXG4tXFx0bWVtY3B5KHNrYi1cXHUwMDNlZGF0YSwgaWV0aGgsIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xcbitcXHRtZW1jcHkoc2tiLVxcdTAwM2VkYXRhLCBpZXRoaCwgRVRIX0hMRU4pO1xcbiBcXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcbi1cXHRza2JvZmYgKz0gc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcXG4rXFx0c2tib2ZmICs9IEVUSF9ITEVOO1xcbiBcXG4gXFx0LyogdG90YWwgbWV0YWRhdGEgbGVuZ3RoICovXFxuIFxcdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikgKHNrYi1cXHUwMDNlZGF0YSArIHNrYm9mZik7XFxuQEAgLTY5LDEyICs2OSwxMiBAQCB2b2lkICppZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqbWV0YWxlbilcXG4gXFx0aW50IHRvdGFsX3B1bGw7XFxuIFxcdHUxNiBpZmVoZHJsbjtcXG4gXFxuLVxcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyBJRkVfTUVUQUhEUkxFTikpXFxuK1xcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIEVUSF9ITEVOICsgSUZFX01FVEFIRFJMRU4pKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikgKHNrYi1cXHUwMDNlZGF0YSArIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xcbitcXHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopKHNrYi1cXHUwMDNlZGF0YSArIEVUSF9ITEVOKTtcXG4gXFx0aWZlaGRybG4gPSBudG9ocyhpZmVoZHItXFx1MDAzZW1ldGFsZW4pO1xcbi1cXHR0b3RhbF9wdWxsID0gc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiArIGlmZWhkcmxuO1xcbitcXHR0b3RhbF9wdWxsID0gRVRIX0hMRU4gKyBpZmVoZHJsbjtcXG4gXFxuIFxcdGlmICh1bmxpa2VseShpZmVoZHJsbiBcXHUwMDNjIDIpKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG5AQCAtODIsNyArODIsNyBAQCB2b2lkICppZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqbWV0YWxlbilcXG4gXFx0aWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgdG90YWxfcHVsbCArIEVUSF9ITEVOKSkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4tXFx0aWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItXFx1MDAzZWRhdGEgKyBza2ItXFx1MDAzZWRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcXG4rXFx0aWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItXFx1MDAzZWRhdGEgKyBFVEhfSExFTik7XFxuIFxcdHNrYl9zZXRfbWFjX2hlYWRlcihza2IsIHRvdGFsX3B1bGwpO1xcbiBcXHRfX3NrYl9wdWxsKHNrYiwgdG90YWxfcHVsbCk7XFxuIFxcdCptZXRhbGVuID0gaWZlaGRybG4gLSBJRkVfTUVUQUhEUkxFTjtcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9pZmUuYyBiL25ldC9zY2hlZC9hY3RfaWZlLmNcXG5pbmRleCBmZjJiMTZlMzViOWIwLi45Y2VhNzFmYzFkYjNkIDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9hY3RfaWZlLmNcXG4rKysgYi9uZXQvc2NoZWQvYWN0X2lmZS5jXFxuQEAgLTI4LDYgKzI4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvdGNfYWN0L3RjX2lmZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3RjX2FjdC90Y19pZmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9hcnAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pZmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC90Y193cmFwcGVyLmhcXHUwMDNlXFxuIFxcbkBAIC03MjMsNyArNzI0LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2RlY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxcbiBcXHR0Y2ZfbGFzdHVzZV91cGRhdGUoXFx1MDAyNmlmZS1cXHUwMDNldGNmX3RtKTtcXG4gXFxuIFxcdGlmIChza2JfYXRfdGNfaW5ncmVzcyhza2IpKVxcbi1cXHRcXHRza2JfcHVzaChza2IsIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xcbitcXHRcXHRza2JfcHVzaChza2IsIEVUSF9ITEVOKTtcXG4gXFxuIFxcdHRsdl9kYXRhID0gaWZlX2RlY29kZShza2IsIFxcdTAwMjZtZXRhbGVuKTtcXG4gXFx0aWYgKHVubGlrZWx5KCF0bHZfZGF0YSkpIHtcXG5AQCAtNzk1LDcgKzc5Niw3IEBAIHN0YXRpYyBpbnQgdGNmX2lmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcXG4gXFx0ICAgd2hlcmUgT1JJR0RBVEEgPSBvcmlnaW5hbCBldGhlcm5ldCBoZWFkZXIgLi4uXFxuIFxcdCAqL1xcbiBcXHR1MTYgbWV0YWxlbiA9IGlmZV9nZXRfc3ooc2tiLCBwKTtcXG4tXFx0aW50IGhkcm0gPSBtZXRhbGVuICsgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiArIElGRV9NRVRBSERSTEVOO1xcbitcXHRpbnQgaGRybSA9IG1ldGFsZW4gKyBFVEhfSExFTiArIElGRV9NRVRBSERSTEVOO1xcbiBcXHR1bnNpZ25lZCBpbnQgc2tib2ZmID0gMDtcXG4gXFx0aW50IG5ld19sZW4gPSBza2ItXFx1MDAzZWxlbiArIGhkcm07XFxuIFxcdGJvb2wgZXhjZWVkX210dSA9IGZhbHNlO1xcbkBAIC04MjYsNyArODI3LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSlcXG4tXFx0XFx0c2tiX3B1c2goc2tiLCBza2ItXFx1MDAzZWRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcXG4rXFx0XFx0c2tiX3B1c2goc2tiLCBFVEhfSExFTik7XFxuIFxcbiBcXHRpZmVfbWV0YSA9IGlmZV9lbmNvZGUoc2tiLCBtZXRhbGVuKTtcXG4gXFx0aWYgKCFpZmVfbWV0YSlcXG5AQCAtODU2LDExICs4NTcsMjcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxcbiBcXHRvZXRoaC1cXHUwMDNlaF9wcm90byA9IGh0b25zKHAtXFx1MDAzZWV0aF90eXBlKTtcXG4gXFxuIFxcdGlmIChza2JfYXRfdGNfaW5ncmVzcyhza2IpKVxcbi1cXHRcXHRza2JfcHVsbChza2IsIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xcbitcXHRcXHRza2JfcHVsbChza2IsIEVUSF9ITEVOKTtcXG4gXFxuIFxcdHJldHVybiBhY3Rpb247XFxuIH1cXG4gXFxuKy8qIElGRSBlbmNhcHN1bGF0ZXMgdGhlIG9yaWdpbmFsIEV0aGVybmV0IGhlYWRlciBhbmQsIG9uIGRlY29kZSwgZXhwZWN0cyB0b1xcbisgKiBmaW5kIG9uZSwgc28gaXQgY2FuIG9ubHkgZXZlciB3b3JrIG9uIHNrYnMgdGhhdCBjYXJyeSBvbmUuIExvb3BiYWNrIGNhcnJpZXNcXG4rICogRXRoZXJuZXQgaGVhZGVyIGFzIHdlbGwsIHNvIGl0IHF1YWxpZmllcyBoZXJlLlxcbisgKiBBdCBpbmdyZXNzLCBhbHNvIHZlcmlmeSB0aGF0IHRoZSBMMiBoZWFkZXIgYWJvdXQgdG8gYmUgcHVzaGVkIGJhY2sgcmVhbGx5XFxuKyAqIGlzIGFuIEV0aGVybmV0IGhlYWRlciBiZWNhdXNlIHRoZSBza2IgY291bGQndmUgYmVlbiByZWRpcmVjdGVkIHdpdGggbWlycmVkXFxuKyAqIGZyb20gYSBub24tRXRoZXJuZXQgZGV2aWNlLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgdGNmX2lmZV9pc19ldGhfc2tiKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0aWYgKHNrYi1cXHUwMDNlZGV2LVxcdTAwM2V0eXBlICE9IEFSUEhSRF9FVEhFUiBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUgIT0gQVJQSFJEX0xPT1BCQUNLKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gIXNrYl9hdF90Y19pbmdyZXNzKHNrYikgfHwgc2tiLVxcdTAwM2VtYWNfbGVuID09IEVUSF9ITEVOO1xcbit9XFxuK1xcbiBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2lmZV9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpXFxuQEAgLTg2OSw2ICs4ODYsMTMgQEAgVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9pZmVfYWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHN0cnVjdCB0Y2ZfaWZlX3BhcmFtcyAqcDtcXG4gXFx0aW50IHJldDtcXG4gXFxuK1xcdGlmICh1bmxpa2VseSghdGNmX2lmZV9pc19ldGhfc2tiKHNrYikpKSB7XFxuK1xcdFxcdGJzdGF0c191cGRhdGUodGhpc19jcHVfcHRyKGlmZS1cXHUwMDNlY29tbW9uLmNwdV9ic3RhdHMpLCBza2IpO1xcbitcXHRcXHR0Y2ZfbGFzdHVzZV91cGRhdGUoXFx1MDAyNmlmZS1cXHUwMDNldGNmX3RtKTtcXG4rXFx0XFx0cXN0YXRzX2NwdV9kcm9wX2luYyhpZmUtXFx1MDAzZWNvbW1vbi5jcHVfcXN0YXRzKTtcXG4rXFx0XFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xcbitcXHR9XFxuK1xcbiBcXHRwID0gcmN1X2RlcmVmZXJlbmNlX2JoKGlmZS1cXHUwMDNlcGFyYW1zKTtcXG4gXFx0aWYgKHAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZFX0VOQ09ERSkge1xcbiBcXHRcXHRyZXQgPSB0Y2ZfaWZlX2VuY29kZShza2IsIGEsIHJlcywgcCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjQxOjM2Ljk3MTA4NjI5NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU2NTU0MTc1MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9BQ1RfSUZFXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjZl9pZmVfYWN0XCIsXG4gICAgXCJpZmVfZW5jb2RlXCIsXG4gICAgXCJpZmVfZGVjb2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gdGhlIFRDIElGRSBhY3Rpb24gd2hlcmUgaXQgaW5jb3JyZWN0bHkgdXNlZCBgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgaW5zdGVhZCBvZiBgRVRIX0hMRU5gIGZvciBlbmNhcHN1bGF0aW9uL2RlY2Fwc3VsYXRpb24sIGFuZCBhZGRzIGEgY2hlY2sgdG8gZHJvcCBub24tRXRoZXJuZXQgcGFja2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIHBhdGggdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNTdjOTY2ODU0MjBiYjQyYjM1Y2UwMzc5ZmI3ZWE2ODZkMjFlNjQxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTc6NDE6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaWZlL2lmZS5jIGIvbmV0L2lmZS9pZmUuY1xuaW5kZXggN2E3NTk0N2EzMWUzMS4uMmRkZjcyNWQzMzg5ZSAxMDA2NDRcbi0tLSBhL25ldC9pZmUvaWZlLmNcbisrKyBiL25ldC9pZmUvaWZlLmNcbkBAIC0zNyw3ICszNyw3IEBAIHZvaWQgKmlmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IG1ldGFsZW4pXG4gXHQgKiB3aGVyZSBPUklHREFUQSA9IG9yaWdpbmFsIGV0aGVybmV0IGhlYWRlciAuLi5cbiBcdCAqL1xuIFx0aW50IGhkcm0gPSBtZXRhbGVuICsgSUZFX01FVEFIRFJMRU47XG4tXHRpbnQgdG90YWxfcHVzaCA9IGhkcm0gKyBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbitcdGludCB0b3RhbF9wdXNoID0gaGRybSArIEVUSF9ITEVOO1xuIFx0c3RydWN0IGlmZWhlYWRyICppZmVoZHI7XG4gXHRzdHJ1Y3QgZXRoaGRyICppZXRoaDtcdC8qIGlubmVyIGV0aGVyIGhlYWRlciAqL1xuIFx0aW50IHNrYm9mZiA9IDA7XG5AQCAtNTAsOSArNTAsOSBAQCB2b2lkICppZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiBtZXRhbGVuKVxuIFx0aWV0aGggPSAoc3RydWN0IGV0aGhkciAqKSBza2ItXHUwMDNlZGF0YTtcbiBcbiBcdF9fc2tiX3B1c2goc2tiLCB0b3RhbF9wdXNoKTtcbi1cdG1lbWNweShza2ItXHUwMDNlZGF0YSwgaWV0aGgsIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbitcdG1lbWNweShza2ItXHUwMDNlZGF0YSwgaWV0aGgsIEVUSF9ITEVOKTtcbiBcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4tXHRza2JvZmYgKz0gc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4rXHRza2JvZmYgKz0gRVRIX0hMRU47XG4gXG4gXHQvKiB0b3RhbCBtZXRhZGF0YSBsZW5ndGggKi9cbiBcdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikgKHNrYi1cdTAwM2VkYXRhICsgc2tib2ZmKTtcbkBAIC02OSwxMiArNjksMTIgQEAgdm9pZCAqaWZlX2RlY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKm1ldGFsZW4pXG4gXHRpbnQgdG90YWxfcHVsbDtcbiBcdHUxNiBpZmVoZHJsbjtcbiBcbi1cdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgSUZFX01FVEFIRFJMRU4pKVxuK1x0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgRVRIX0hMRU4gKyBJRkVfTUVUQUhEUkxFTikpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0aWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKSAoc2tiLVx1MDAzZWRhdGEgKyBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4rXHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopKHNrYi1cdTAwM2VkYXRhICsgRVRIX0hMRU4pO1xuIFx0aWZlaGRybG4gPSBudG9ocyhpZmVoZHItXHUwMDNlbWV0YWxlbik7XG4tXHR0b3RhbF9wdWxsID0gc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyBpZmVoZHJsbjtcbitcdHRvdGFsX3B1bGwgPSBFVEhfSExFTiArIGlmZWhkcmxuO1xuIFxuIFx0aWYgKHVubGlrZWx5KGlmZWhkcmxuIFx1MDAzYyAyKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtODIsNyArODIsNyBAQCB2b2lkICppZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqbWV0YWxlbilcbiBcdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIHRvdGFsX3B1bGwgKyBFVEhfSExFTikpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikoc2tiLVx1MDAzZWRhdGEgKyBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4rXHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopKHNrYi1cdTAwM2VkYXRhICsgRVRIX0hMRU4pO1xuIFx0c2tiX3NldF9tYWNfaGVhZGVyKHNrYiwgdG90YWxfcHVsbCk7XG4gXHRfX3NrYl9wdWxsKHNrYiwgdG90YWxfcHVsbCk7XG4gXHQqbWV0YWxlbiA9IGlmZWhkcmxuIC0gSUZFX01FVEFIRFJMRU47XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9pZmUuYyBiL25ldC9zY2hlZC9hY3RfaWZlLmNcbmluZGV4IGZmMmIxNmUzNWI5YjAuLjljZWE3MWZjMWRiM2QgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X2lmZS5jXG4rKysgYi9uZXQvc2NoZWQvYWN0X2lmZS5jXG5AQCAtMjgsNiArMjgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvdGNfYWN0L3RjX2lmZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y19pZmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9hcnAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pZmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y193cmFwcGVyLmhcdTAwM2VcbiBcbkBAIC03MjMsNyArNzI0LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2RlY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIFx0dGNmX2xhc3R1c2VfdXBkYXRlKFx1MDAyNmlmZS1cdTAwM2V0Y2ZfdG0pO1xuIFxuIFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpXG4tXHRcdHNrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuK1x0XHRza2JfcHVzaChza2IsIEVUSF9ITEVOKTtcbiBcbiBcdHRsdl9kYXRhID0gaWZlX2RlY29kZShza2IsIFx1MDAyNm1ldGFsZW4pO1xuIFx0aWYgKHVubGlrZWx5KCF0bHZfZGF0YSkpIHtcbkBAIC03OTUsNyArNzk2LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIFx0ICAgd2hlcmUgT1JJR0RBVEEgPSBvcmlnaW5hbCBldGhlcm5ldCBoZWFkZXIgLi4uXG4gXHQgKi9cbiBcdHUxNiBtZXRhbGVuID0gaWZlX2dldF9zeihza2IsIHApO1xuLVx0aW50IGhkcm0gPSBtZXRhbGVuICsgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyBJRkVfTUVUQUhEUkxFTjtcbitcdGludCBoZHJtID0gbWV0YWxlbiArIEVUSF9ITEVOICsgSUZFX01FVEFIRFJMRU47XG4gXHR1bnNpZ25lZCBpbnQgc2tib2ZmID0gMDtcbiBcdGludCBuZXdfbGVuID0gc2tiLVx1MDAzZWxlbiArIGhkcm07XG4gXHRib29sIGV4Y2VlZF9tdHUgPSBmYWxzZTtcbkBAIC04MjYsNyArODI3LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIFx0fVxuIFxuIFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpXG4tXHRcdHNrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuK1x0XHRza2JfcHVzaChza2IsIEVUSF9ITEVOKTtcbiBcbiBcdGlmZV9tZXRhID0gaWZlX2VuY29kZShza2IsIG1ldGFsZW4pO1xuIFx0aWYgKCFpZmVfbWV0YSlcbkBAIC04NTYsMTEgKzg1NywyNyBAQCBzdGF0aWMgaW50IHRjZl9pZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXG4gXHRvZXRoaC1cdTAwM2VoX3Byb3RvID0gaHRvbnMocC1cdTAwM2VldGhfdHlwZSk7XG4gXG4gXHRpZiAoc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSlcbi1cdFx0c2tiX3B1bGwoc2tiLCBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4rXHRcdHNrYl9wdWxsKHNrYiwgRVRIX0hMRU4pO1xuIFxuIFx0cmV0dXJuIGFjdGlvbjtcbiB9XG4gXG4rLyogSUZFIGVuY2Fwc3VsYXRlcyB0aGUgb3JpZ2luYWwgRXRoZXJuZXQgaGVhZGVyIGFuZCwgb24gZGVjb2RlLCBleHBlY3RzIHRvXG4rICogZmluZCBvbmUsIHNvIGl0IGNhbiBvbmx5IGV2ZXIgd29yayBvbiBza2JzIHRoYXQgY2Fycnkgb25lLiBMb29wYmFjayBjYXJyaWVzXG4rICogRXRoZXJuZXQgaGVhZGVyIGFzIHdlbGwsIHNvIGl0IHF1YWxpZmllcyBoZXJlLlxuKyAqIEF0IGluZ3Jlc3MsIGFsc28gdmVyaWZ5IHRoYXQgdGhlIEwyIGhlYWRlciBhYm91dCB0byBiZSBwdXNoZWQgYmFjayByZWFsbHlcbisgKiBpcyBhbiBFdGhlcm5ldCBoZWFkZXIgYmVjYXVzZSB0aGUgc2tiIGNvdWxkJ3ZlIGJlZW4gcmVkaXJlY3RlZCB3aXRoIG1pcnJlZFxuKyAqIGZyb20gYSBub24tRXRoZXJuZXQgZGV2aWNlLlxuKyAqL1xuK3N0YXRpYyBib29sIHRjZl9pZmVfaXNfZXRoX3NrYihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdGlmIChza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0VUSEVSIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrYi1cdTAwM2VkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfTE9PUEJBQ0spXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiAhc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSB8fCBza2ItXHUwMDNlbWFjX2xlbiA9PSBFVEhfSExFTjtcbit9XG4rXG4gVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9pZmVfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXG4gXHRcdFx0XHQgIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpXG5AQCAtODY5LDYgKzg4NiwxMyBAQCBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2lmZV9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCB0Y2ZfaWZlX3BhcmFtcyAqcDtcbiBcdGludCByZXQ7XG4gXG4rXHRpZiAodW5saWtlbHkoIXRjZl9pZmVfaXNfZXRoX3NrYihza2IpKSkge1xuK1x0XHRic3RhdHNfdXBkYXRlKHRoaXNfY3B1X3B0cihpZmUtXHUwMDNlY29tbW9uLmNwdV9ic3RhdHMpLCBza2IpO1xuK1x0XHR0Y2ZfbGFzdHVzZV91cGRhdGUoXHUwMDI2aWZlLVx1MDAzZXRjZl90bSk7XG4rXHRcdHFzdGF0c19jcHVfZHJvcF9pbmMoaWZlLVx1MDAzZWNvbW1vbi5jcHVfcXN0YXRzKTtcbitcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1x0fVxuK1xuIFx0cCA9IHJjdV9kZXJlZmVyZW5jZV9iaChpZmUtXHUwMDNlcGFyYW1zKTtcbiBcdGlmIChwLVx1MDAzZWZsYWdzIFx1MDAyNiBJRkVfRU5DT0RFKSB7XG4gXHRcdHJldCA9IHRjZl9pZmVfZW5jb2RlKHNrYiwgYSwgcmVzLCBwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjQxOjM2Ljk3MTA4NzY1NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1Mzg1MjMxMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSUZFIEFjdGlvbiBQYXRjaCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9pZmUvaWZlLmNgIGFuZCBgbmV0L3NjaGVkL2FjdF9pZmUuY2AuIExvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSBmb3IgdGhlIFRDIElGRSAoSW50ZXItRkUpIGFjdGlvbi4gSXQncyBzdWJzdGl0dXRpbmcgYHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCB3aXRoIGBFVEhfSExFTmAgaW4gYGlmZV9lbmNvZGVgLCBgaWZlX2RlY29kZWAsIGB0Y2ZfaWZlX2RlY29kZWAsIGFuZCBgdGNmX2lmZV9lbmNvZGVgLiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHNvIGZhciDigJMgbGlrZWx5IGZpeGluZyBhbiBpbmNvcnJlY3QgaGFyZCBoZWFkZXIgbGVuZ3RoIGFzc3VtcHRpb24uIEl0J3MgYWxzbyBhZGRpbmcgYSBjaGVjayBpbiBgdGNmX2lmZV9hY3RgIHdpdGggYHRjZl9pZmVfaXNfZXRoX3NrYmAgdG8gc3BlY2lmaWNhbGx5IGRyb3Agbm9uLUV0aGVybmV0IHBhY2tldHMgKGV4Y2x1ZGluZyBsb29wYmFjaywgb2YgY291cnNlKS4gVGhhdCdzIGEgcmVhc29uYWJsZSBhZGRpdGlvbiB0byBtYWtlIHRoZSBhY3Rpb24gbW9yZSByb2J1c3QuXG5cblRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgVEMgYWN0aW9ucywgc28gd2UgbmVlZCB0byB0cmFjayBkb3duIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBhbmQgZm9jdXMgb24gdGhlIGFzc29jaWF0ZWQgc3ltYm9scy4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIHNvdXJjZSBkaXJlY3RseSB3aWxsIHRlbGwuIFxuXG5BbHJpZ2h0LCBsZXQncyBncmVwIGZvciB0aGUgY29uZmlnLiBGb3IgYG5ldC9pZmUvaWZlLmNgLCBhIHF1aWNrIGBncmVwIC1yIFwiaWZlLm9cIiBuZXQvaWZlL2AgdHVybnMgdXAgYG9iai0kKENPTkZJR19ORVRfSUZFKSArPSBpZmUub2AsIGNvbmZpcm1pbmcgYENPTkZJR19ORVRfSUZFYCBpcyB0aGUgY29udHJvbC4gQW5kIGZvciBgbmV0L3NjaGVkL2FjdF9pZmUuY2AsIGBncmVwIC1yIFwiYWN0X2lmZS5vXCIgbmV0L3NjaGVkL2AgcmV2ZWFscyBgb2JqLSQoQ09ORklHX05FVF9BQ1RfSUZFKSArPSBhY3RfaWZlLm9gLCB3aGljaCBtZWFucyBgQ09ORklHX05FVF9BQ1RfSUZFYCBnb3Zlcm5zIGl0LiBOb3csIHRoYXQgYWxsIHNlZW1zIHJpZ2h0OyB3ZSBzaG91bGQgdmVyaWZ5IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NTMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzo0MTo0NC41MDk2MTI3MThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI3ODM4ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWZlXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pZmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pZmUvTWFrZWZpbGUtNS1cXG5uZXQvaWZlL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX05FVF9JRkUpICs9IGlmZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjQxOjQ0LjU1MjQwMjUwNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0NjY5MTc4MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBgYWN0X2lmZS5jYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byBgYWN0X2lmZS5jYC4gTXkgaW5pdGlhbCBmb2N1cywgYXMgYWx3YXlzLCBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgdGhpcyBwaWVjZSBvZiBjb2RlIGRlbGl2ZXJzLiBKdWRnaW5nIGJ5IHRoZSBuYW1pbmcgY29udmVudGlvbiwgaXQncyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGludGVycHJldGluZyBhbmQgZXhlY3V0aW5nIElGRSBhY3Rpb25zIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRoZSBpbnRlcmFjdGlvbiBwb2ludHM6IHdoYXQgdHJpZ2dlcnMgdGhlc2UgSUZFIGFjdGlvbnMsIGFuZCB3aGF0IG90aGVyIG1vZHVsZXMgcmVseSBvbiBpdHMgb3V0cHV0IG9yIHNlcnZpY2VzP1xuXG5JJ20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3Iga2V5IGZ1bmN0aW9uIGNhbGxzOiBEb2VzIGl0IHV0aWxpemUgc3RhbmRhcmQgbGlicmFyeSBmdW5jdGlvbnMgZm9yIHBhcnNpbmcgb3Igc3RyaW5nIG1hbmlwdWxhdGlvbj8gQXJlIHRoZXJlIGFueSBjdXN0b20gZGF0YSBzdHJ1Y3R1cmVzIGRlZmluZWQgZm9yIElGRSBhY3Rpb25zPyBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSBzdGF0ZSBtYWNoaW5lIG9yIGEgZGVjaXNpb24tbWFraW5nIHByb2Nlc3MgYmFzZWQgb24gdGhlIGlucHV0IHBhcmFtZXRlcnMuIEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgc3RhdGVtZW50cyB0aGF0IGFmZmVjdCB0aGUgZmxvdyBkZXBlbmRpbmcgb24gZXh0ZXJuYWwgZmFjdG9ycz9cblxuTmV4dCwgSSB3aWxsIHRyeSB0byBkZXRlcm1pbmUgdGhlIGlucHV0cyBhbmQgb3V0cHV0cy4gV2hhdCBraW5kIG9mIGRhdGEgaXMgZmVkIGludG8gdGhlc2UgSUZFIGZ1bmN0aW9ucz8gQXJlIHRoZXJlIGRhdGEgc3RydWN0dXJlcyB0aGF0IHRoZXkgcmVjZWl2ZSwgb3IgZG8gdGhleSByZWFkIGZyb20gZ2xvYmFsIHZhcmlhYmxlcz8gQW5kIHdoYXQgaXMgdGhlIG91dHB1dD8gQXJlIHRoZSByZXN1bHRzIHN0b3JlZD8gQW5kIHdoYXQgcGFydHMgb2YgdGhlIHNvZnR3YXJlIHVzZSB0aGUgcmVzdWx0cz9cblxuT25jZSBJIGhhdmUgdGhlIGxheSBvZiB0aGUgbGFuZCwgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGVycm9yIGhhbmRsaW5nIGFuZCBib3VuZGFyeSBjb25kaXRpb25zLiBUaGlzIGlzIHdoZXJlIEknbGwgc2VhcmNoIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIEhvdyByb2J1c3QgaXMgdGhlIGVycm9yIGRldGVjdGlvbj8gSXMgaXQgZ3JhY2VmdWxseSBoYW5kbGVkIG9yIGRvZXMgaXQgbGVhZCB0byBzeXN0ZW0gY3Jhc2hlcz9cblxuTXkgZm9jdXMgdGhlbiBzaGlmdHMgdG8gdGhlIGludGVybmFsIGxvZ2ljLiBJJ2xsIGF0dGVtcHQgdG8gY29uc3RydWN0IGEgbWVudGFsIG1vZGVsIG9mIHRoZSBleGVjdXRpb24gZmxvdy4gSSBuZWVkIHRvIGRpc2Nlcm4gdGhlIG1haW4gYWxnb3JpdGhtcyB1c2VkLiBXaGF0IHNwZWNpZmljIElGRSBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkPyBBcmUgdGhlcmUgYW55IGNvbXBsZXggY2FsY3VsYXRpb25zLCBvciBvcHRpbWl6YXRpb25zIHRoYXQgYXJlIHdvcnRoIG5vdGluZz8gSSdtIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNvbmN1cnJlbmN5IG9yIG11bHRpLXRocmVhZGluZyBhc3BlY3RzLCBhc3N1bWluZyB0aGlzIGlzIGEgcmVhbC10aW1lIHN5c3RlbTsgYW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIGRhdGEgY29ycnVwdGlvbiBpcyBhIGhpZ2ggcHJpb3JpdHkuXG5cblVsdGltYXRlbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBlZmZpY2llbnRseSBhbmQgZWZmZWN0aXZlbHkgdGhpcyBjb2RlIGZ1bGZpbGxzIGl0cyByb2xlLiBJcyBpdCB3ZWxsLWRvY3VtZW50ZWQ/IEFyZSB0aGUgY29kaW5nIHByYWN0aWNlcyBjb25zaXN0ZW50IHdpdGggdGhlIG92ZXJhbGwgc3R5bGUgZ3VpZGU/IEFueSBwb3RlbnRpYWwgZm9yIHJlZmFjdG9yaW5nPyBEb2VzIGl0IGhhdmUgcm9vbSBmb3IgaW1wcm92ZW1lbnQsIG9yIGRvZXMgaXQgZGVsaXZlciBhIHZlcnkgZWxlZ2FudCBzb2x1dGlvbj8gSXQgYWxsIGNvbWVzIGRvd24gdG8gdW5kZXJzdGFuZGluZyB0aGUgXCJ3aHlcIiBhcyBtdWNoIGFzIHRoZSBcImhvdy5cIlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTcwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzo0MTo1Mi4wMTkzMjI3ODZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyMjYzNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWN0X2lmZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9NYWtlZmlsZT0yNj1vYmotJChDT05GSUdfTkVUX0FDVF9TS0JNT0QpXFx0Kz0gYWN0X3NrYm1vZC5vXFxubmV0L3NjaGVkL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19ORVRfQUNUX0lGRSlcXHQrPSBhY3RfaWZlLm9cXG5uZXQvc2NoZWQvTWFrZWZpbGUtMjgtb2JqLSQoQ09ORklHX05FVF9JRkVfU0tCTUFSSylcXHQrPSBhY3RfbWV0YV9tYXJrLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDE6NTIuMDY0NTUzMTczWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzEzNjgyMDQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBgTkVUX0lGRWAgYW5kIGBORVRfQUNUX0lGRWAgY29uZmlndXJhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBkcmlsbCBkb3duIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBgTkVUX0FDVF9JRkVgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgY29tcGxleGl0eSB1c3VhbGx5IGxpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBmZWF0dXJlcyB0aGlzIGNvbmZpZ3VyYXRpb24gcmVsaWVzIG9uLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBpbmZvcm0gbXkgZGVidWdnaW5nIGFuZCBjdXN0b21pemF0aW9uIGdvaW5nIGZvcndhcmQuIEl0IHNlZW1zIGxpa2UgYSBjb25maWd1cmF0aW9uIGl0ZW0uIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIGNvbnRpbnVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTc4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDE6NTkuMjAxMzc2NTgxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NTQ5MTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQUNUX0lGRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTg4Mj1jb25maWcgTkVUX0FDVF9TS0JNT0RcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTg5Mi1cXG5uZXQvc2NoZWQvS2NvbmZpZzo4OTM6Y29uZmlnIE5FVF9BQ1RfSUZFXFxubmV0L3NjaGVkL0tjb25maWctODk0LVxcdHRyaXN0YXRlIFxcXCJJbnRlci1GRSBhY3Rpb24gYmFzZWQgb24gSUVURiBGb3JDRVMgSW50ZXJGRSBMRkJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjQxOjU5LjI3MDkyOTc3M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NTkyNjcyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFRyYWZmaWMgQ29udHJvbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXJ0aWN1bGFyIGFzcGVjdCBvZiB0aGUgdHJhZmZpYyBjb250cm9sIGNvbmZpZ3VyYXRpb24uIE15IGluc3RpbmN0cyBhcmUgdGVsbGluZyBtZSB0byBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlLiBMZXQncyBzZWUuLi4gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZSBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIEl0J3MgdXN1YWxseSB0aGUgYXV0aG9yaXRhdGl2ZSBzb3VyY2UgZm9yIHRoZSBjb25maWd1cmFibGUgb3B0aW9ucyByZWxhdGVkIHRvIG5ldHdvcmtpbmcgc2NoZWR1bGVycy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYXJvdW5kIGxpbmUgODkzLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgaGlnaC1sZXZlbCBvcHRpb25zIGFyZSwgd2hlcmUgdGhlIGNvcmUgZGVmaW5pdGlvbnMgb3IgbWF5YmUgYSBtb2R1bGUgb3IgZmVhdHVyZSBpcyBkZWNsYXJlZCwgb3IgcGVyaGFwcyBhIHNlY3Rpb24gSSdtIGFscmVhZHkgZmFtaWxpYXIgd2l0aCBpcyBkZWZpbmVkLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgcmVsZXZhbnQgb3B0aW9ucyBhcmUgc3RydWN0dXJlZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgYXJlIGluIHBsYWNlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSXQgd2lsbCBsaWtlbHkgaGlnaGxpZ2h0IHRoZSBzcGVjaWZpYyBmZWF0dXJlcyBJIG5lZWQgdG8gdW5kZXJzdGFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ1OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjQyOjA2LjgzMDE5OTg3OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODg1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODg1OlxcdFxcdGhlbHBcXG4gODg2OlxcdFxcdCBTYXkgWSBoZXJlIHRvIGFsbG93IG1vZGlmaWNhdGlvbiBvZiBza2IgZGF0YVxcbiA4ODc6XFx0XFxuIDg4ODpcXHRcXHQgSWYgdW5zdXJlLCBzYXkgTi5cXG4gODg5OlxcdFxcbiA4OTA6XFx0XFx0IFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gODkxOlxcdFxcdCBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X3NrYm1vZC5cXG4gODkyOlxcdFxcbiA4OTM6XFx0Y29uZmlnIE5FVF9BQ1RfSUZFXFxuIDg5NDpcXHRcXHR0cmlzdGF0ZSBcXFwiSW50ZXItRkUgYWN0aW9uIGJhc2VkIG9uIElFVEYgRm9yQ0VTIEludGVyRkUgTEZCXFxcIlxcbiA4OTU6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxcbiA4OTY6XFx0XFx0c2VsZWN0IE5FVF9JRkVcXG4gODk3OlxcdFxcdGhlbHBcXG4gODk4OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBhbGxvdyBmb3Igc291cmNpbmcgYW5kIHRlcm1pbmF0aW5nIG1ldGFkYXRhXFxuIDg5OTpcXHRcXHQgIEZvciBkZXRhaWxzIHJlZmVyIHRvIG5ldGRldjAxIHBhcGVyOlxcbiA5MDA6XFx0XFx0ICBcXFwiRGlzdHJpYnV0aW5nIExpbnV4IFRyYWZmaWMgQ29udHJvbCBDbGFzc2lmaWVyLUFjdGlvbiBTdWJzeXN0ZW1cXFwiXFxuIDkwMTpcXHRcXHQgICBBdXRob3JzOiBKYW1hbCBIYWRpIFNhbGltIGFuZCBEYW1hc2NlbmUgTS4gSm9hY2hpbXBpbGxhaVxcbiA5MDI6XFx0XFxuIDkwMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gOTA0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9pZmUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjQyOjA2LjgzMDMyMDgwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODUyMTExNjY4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgSUZFIENvbmZpZ3VyYXRpb24gYW5kIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgY3VycmVudCBmb2N1cyBpcyBvbiB0aGUgYE5FVF9BQ1RfSUZFYCBhbmQgYE5FVF9DTFNfQUNUYCBjb25maWd1cmF0aW9ucywgZXNwZWNpYWxseSB0aGVpciBpbnRlcmFjdGlvbiwgd2hpY2ggaXMgdHlwaWNhbCBmb3IgVHJhZmZpYyBDb250cm9sIHNjZW5hcmlvcy4gSSdtIGhvbWluZyBpbiBvbiB0aGUgc3ltYm9sczogYHRjZl9pZmVfYWN0YCwgYHRjZl9pZmVfZW5jb2RlYCwgYHRjZl9pZmVfZGVjb2RlYCwgYGlmZV9lbmNvZGVgLCBhbmQgYGlmZV9kZWNvZGVgLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgdGNmX2lmZV9lbmNvZGVgIGFuZCBgdGNmX2lmZV9kZWNvZGVgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhleSBhcmUgaW5kZWVkIGRlY2xhcmVkIGFzIHN0YXRpYywgYW5kIHRoZXkncmUgZGVmaW5lZCB3aXRoaW4gYG5ldC9zY2hlZC9hY3RfaWZlLmNgLiBUaGlzIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGVpciBzY29wZSBhbmQgcG90ZW50aWFsIGZvciBtb2RpZmljYXRpb24uXG5cbmB0Y2ZfaWZlX2FjdGAsIGl0IHNlZW1zLCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhpcyBtb2R1bGUuIE5vdywgcmVnYXJkaW5nIHRoZSBmdW5jdGlvbnMgYGlmZV9lbmNvZGVgIGFuZCBgaWZlX2RlY29kZWAsIHRoZXNlIGFyZSBub3Qgc3RhdGljLCBhbmQgSSBmaW5kIHRoZXkncmUgZXhwb3J0ZWQgZnJvbSBgbmV0L2lmZS9pZmUuY2AuIFRoaXMgaW1wbGllcyB0aGV5IGFyZSBpbnRlbmRlZCBmb3IgYnJvYWRlciB1c2Ugd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBUaGlzIGFyY2hpdGVjdHVyZSBtYWtlcyBzZW5zZTsgYHRjZl9pZmVfYWN0YCBoYW5kbGVzIHRoZSBUcmFmZmljIENvbnRyb2wgKFRDKSBpbnRlcmFjdGlvbiwgcG90ZW50aWFsbHkgdXNpbmcgdGhlIHNoYXJlZCBgaWZlX2VuY29kZWAgYW5kIGBpZmVfZGVjb2RlYCBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzo0MjoyNS4zNTE0Mzk0NTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2ODcwNDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xfR1BMXFxcXChpZmVfZW5jb2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pZmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pZmUvaWZlLmM9MzQ9dm9pZCAqaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbWV0YWxlbilcXG4tLVxcbm5ldC9pZmUvaWZlLmMtNjMtfVxcbm5ldC9pZmUvaWZlLmM6NjQ6RVhQT1JUX1NZTUJPTF9HUEwoaWZlX2VuY29kZSk7XFxubmV0L2lmZS9pZmUuYy02NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDI6MjUuNDA4MzE0NjMxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5NjY0Nzk3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVEMgSUZFIEFjdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgdGFrZW4gYSBsb29rIGF0IHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBpZmVfZW5jb2RlYCwgYGlmZV9kZWNvZGVgLCBhbmQgYHRjZl9pZmVfYWN0YCBhcmUgZGVmaW5pdGVseSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gVGhleSBzZWVtIGNlbnRyYWwgdG8gdGhlIGNoYW5nZXMuXG5cbkknbSBkb3VibGUtY2hlY2tpbmcgZm9yIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgaGVyZSwgYW5kIGl0IGxvb2tzIGxpa2UgYE5FVF9DTFNfQUNUYCBpcyByZXF1aXJlZC4gSSd2ZSBhbHNvIG5vdGVkIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnM6IGBORVRfQUNUX0lGRWAgYW5kLCBhZ2FpbiwgYE5FVF9DTFNfQUNUYC5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIG1vZGlmeWluZyBob3cgdGhlIGhlYWRlciBsZW5ndGggaXMgaGFuZGxlZCDigJMgZ29pbmcgZnJvbSBgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIHRvIGBFVEhfSExFTmAsIHdoaWNoIGlzIGEgZ29vZCBtb3ZlIHRvIHByZXZlbnQgcG90ZW50aWFsIGVycm9ycy4gQWRkaXRpb25hbGx5LCBhIG5ldyBjaGVjaywgYHRjZl9pZmVfaXNfZXRoX3NrYmAsIGlzIGFkZGVkLiBUaGlzIGlzIGdyZWF0LCBhcyBpdCBleHBsaWNpdGx5IGVuc3VyZXMgdGhlIHBhY2tldCBpcyBFdGhlcm5ldCwgcHJldmVudGluZyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBpbmNvcnJlY3QgcGFyc2luZyBpZiB0aGUgZGV2aWNlIGlzbid0IEV0aGVybmV0LWJhc2VkLiBUaGVzZSBhcmUgaW1wb3J0YW50IGRlZmVuc2l2ZSBjaGFuZ2VzIHRoYXQgd2lsbCBwcmV2ZW50IGEgd2hvbGUgY2xhc3Mgb2YgYnVncy5cblxuQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSdtIGNvbmZpZGVudCB3ZSBzaG91bGQgYmUgZnV6emluZyB0aGlzIGNoYW5nZS4gSXQgZml4ZXMgYSBjcml0aWNhbCBidWcgaW4gaG93IFRDIElGRSBoYW5kbGVzIGVuY2Fwc3VsYXRpb24gYW5kIGRlY2Fwc3VsYXRpb24sIGFuZCBpbnRyb2R1Y2VzIGEgY3JpdGljYWwgY2hlY2sgZm9yIHBhY2tldCB0eXBlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmsgcHJvY2Vzc2luZyBwYXRoIGFuZCwgdGhlcmVmb3JlLCB2ZXJ5IGZ1enotd29ydGh5LlxuXG5UaGUgcmVzdWx0cyBhcmU6XG5cbiogICAqKldvcnRoRnV6emluZzogdHJ1ZSoqXG4qICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyBpbiB0aGUgVEMgSUZFIGFjdGlvbiByZWdhcmRpbmcgaGVhZGVyIGxlbmd0aCwgdXNpbmcgYEVUSF9ITEVOYCBpbnN0ZWFkIG9mIGBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgYW5kIGFkZHMgYSBjaGVjayBmb3IgZXRoZXJuZXQgcGFja2V0cy4gSXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoLlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGB0Y2ZfaWZlX2FjdGAsIGBpZmVfZW5jb2RlYCwgYGlmZV9kZWNvZGVgXG4qICAgKipFbmFibGVDb25maWdzOioqIGBORVRfQUNUX0lGRWAsIGBORVRfQ0xTX0FDVGBcblxuXG4iLCJJbnB1dFRva2VucyI6NjU2MCwiT3V0cHV0VG9rZW5zIjoxMzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDI6MzMuMzc0Nzk2NTIyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNDYxMDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQUNUX0lGRVwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2ZfaWZlX2FjdFwiLFxuICAgIFwiaWZlX2VuY29kZVwiLFxuICAgIFwiaWZlX2RlY29kZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIGluIHRoZSBUQyBJRkUgYWN0aW9uIHdoZXJlIGl0IGluY29ycmVjdGx5IHVzZWQgYHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGluc3RlYWQgb2YgYEVUSF9ITEVOYCBmb3IgZW5jYXBzdWxhdGlvbi9kZWNhcHN1bGF0aW9uLCBhbmQgYWRkcyBhIGNoZWNrIHRvIGRyb3Agbm9uLUV0aGVybmV0IHBhY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQUNUX0lGRVwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2ZfaWZlX2FjdFwiLFxuICAgIFwiaWZlX2VuY29kZVwiLFxuICAgIFwiaWZlX2RlY29kZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIGluIHRoZSBUQyBJRkUgYWN0aW9uIHdoZXJlIGl0IGluY29ycmVjdGx5IHVzZWQgYHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGluc3RlYWQgb2YgYEVUSF9ITEVOYCBmb3IgZW5jYXBzdWxhdGlvbi9kZWNhcHN1bGF0aW9uLCBhbmQgYWRkcyBhIGNoZWNrIHRvIGRyb3Agbm9uLUV0aGVybmV0IHBhY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDI6MzMuNTI1MjY2ODI2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTYyNDU0NTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjQyOjMzLjUyNjA4NDIyN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMTYyMzcyNDgwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gdGhlIElGRSBwYWNrZXQgYWN0aW9uIHdoZXJlIGBza2ItXFx1MDAzZWRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCB3YXMgdXNlZCBpbnN0ZWFkIG9mIGBFVEhfSExFTmAgdG8gcHVzaC9wdWxsIGhlYWRlcnMgYW5kIGNvcHkgZGF0YS4gSWYgYSBwYWNrZXQgaXMgcmVkaXJlY3RlZCBmcm9tIGEgbm9uLUV0aGVybmV0IGRldmljZSAoZS5nLiwgdmlhIG1pcnJlZCksIGBoYXJkX2hlYWRlcl9sZW5gIG1heSBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIEV0aGVybmV0IGhlYWRlciBzaXplLiBUaGlzIG1pc21hdGNoIGNhbiBsZWFkIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzIHdpdGhpbiB0aGUgc29ja2V0IGJ1ZmZlciAoc2tiKSBpZiBgaGFyZF9oZWFkZXJfbGVuYCBpcyBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIHBhY2tldCBkYXRhLCBvciBwYWNrZXQgY29ycnVwdGlvbiBpZiBpdCBpcyBzbWFsbGVyLlxcblxcbk91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW4gc2tiIGRhdGEgYnVmZmVycyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIGFzIHRoZSBrZXJuZWwncyBza2IgYWxsb2NhdGlvbiBhbmQgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyBhcmUgZXhwbGljaXRseSBhbm5vdGF0ZWQgdG8gcG9pc29uIHRoZSBoZWFkcm9vbSBhbmQgdGFpbHJvb20uIFRoZSBidWcgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLCBub3IgZG9lcyBpdCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgZnVsbHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhpcyBjbGFzcyBvZiBidWdzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDU3Yzk2Njg1NDIwYmI0MmIzNWNlMDM3OWZiN2VhNjg2ZDIxZTY0MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDE3OjQxOjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lmZS9pZmUuYyBiL25ldC9pZmUvaWZlLmNcbmluZGV4IDdhNzU5NDdhMzFlMzEuLjJkZGY3MjVkMzM4OWUgMTAwNjQ0XG4tLS0gYS9uZXQvaWZlL2lmZS5jXG4rKysgYi9uZXQvaWZlL2lmZS5jXG5AQCAtMzcsNyArMzcsNyBAQCB2b2lkICppZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiBtZXRhbGVuKVxuIFx0ICogd2hlcmUgT1JJR0RBVEEgPSBvcmlnaW5hbCBldGhlcm5ldCBoZWFkZXIgLi4uXG4gXHQgKi9cbiBcdGludCBoZHJtID0gbWV0YWxlbiArIElGRV9NRVRBSERSTEVOO1xuLVx0aW50IHRvdGFsX3B1c2ggPSBoZHJtICsgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4rXHRpbnQgdG90YWxfcHVzaCA9IGhkcm0gKyBFVEhfSExFTjtcbiBcdHN0cnVjdCBpZmVoZWFkciAqaWZlaGRyO1xuIFx0c3RydWN0IGV0aGhkciAqaWV0aGg7XHQvKiBpbm5lciBldGhlciBoZWFkZXIgKi9cbiBcdGludCBza2JvZmYgPSAwO1xuQEAgLTUwLDkgKzUwLDkgQEAgdm9pZCAqaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbWV0YWxlbilcbiBcdGlldGhoID0gKHN0cnVjdCBldGhoZHIgKikgc2tiLVx1MDAzZWRhdGE7XG4gXG4gXHRfX3NrYl9wdXNoKHNrYiwgdG90YWxfcHVzaCk7XG4tXHRtZW1jcHkoc2tiLVx1MDAzZWRhdGEsIGlldGhoLCBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4rXHRtZW1jcHkoc2tiLVx1MDAzZWRhdGEsIGlldGhoLCBFVEhfSExFTik7XG4gXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuLVx0c2tib2ZmICs9IHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuK1x0c2tib2ZmICs9IEVUSF9ITEVOO1xuIFxuIFx0LyogdG90YWwgbWV0YWRhdGEgbGVuZ3RoICovXG4gXHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopIChza2ItXHUwMDNlZGF0YSArIHNrYm9mZik7XG5AQCAtNjksMTIgKzY5LDEyIEBAIHZvaWQgKmlmZV9kZWNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2ICptZXRhbGVuKVxuIFx0aW50IHRvdGFsX3B1bGw7XG4gXHR1MTYgaWZlaGRybG47XG4gXG4tXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiArIElGRV9NRVRBSERSTEVOKSlcbitcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIEVUSF9ITEVOICsgSUZFX01FVEFIRFJMRU4pKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikgKHNrYi1cdTAwM2VkYXRhICsgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuK1x0aWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItXHUwMDNlZGF0YSArIEVUSF9ITEVOKTtcbiBcdGlmZWhkcmxuID0gbnRvaHMoaWZlaGRyLVx1MDAzZW1ldGFsZW4pO1xuLVx0dG90YWxfcHVsbCA9IHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgaWZlaGRybG47XG4rXHR0b3RhbF9wdWxsID0gRVRIX0hMRU4gKyBpZmVoZHJsbjtcbiBcbiBcdGlmICh1bmxpa2VseShpZmVoZHJsbiBcdTAwM2MgMikpXG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCAqaWZlX2RlY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKm1ldGFsZW4pXG4gXHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCB0b3RhbF9wdWxsICsgRVRIX0hMRU4pKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopKHNrYi1cdTAwM2VkYXRhICsgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuK1x0aWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItXHUwMDNlZGF0YSArIEVUSF9ITEVOKTtcbiBcdHNrYl9zZXRfbWFjX2hlYWRlcihza2IsIHRvdGFsX3B1bGwpO1xuIFx0X19za2JfcHVsbChza2IsIHRvdGFsX3B1bGwpO1xuIFx0Km1ldGFsZW4gPSBpZmVoZHJsbiAtIElGRV9NRVRBSERSTEVOO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfaWZlLmMgYi9uZXQvc2NoZWQvYWN0X2lmZS5jXG5pbmRleCBmZjJiMTZlMzViOWIwLi45Y2VhNzFmYzFkYjNkIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9pZmUuY1xuKysrIGIvbmV0L3NjaGVkL2FjdF9pZmUuY1xuQEAgLTI4LDYgKzI4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L3RjX2FjdC90Y19pZmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfaWZlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYXJwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaWZlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNfd3JhcHBlci5oXHUwMDNlXG4gXG5AQCAtNzIzLDcgKzcyNCw3IEBAIHN0YXRpYyBpbnQgdGNmX2lmZV9kZWNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcbiBcdHRjZl9sYXN0dXNlX3VwZGF0ZShcdTAwMjZpZmUtXHUwMDNldGNmX3RtKTtcbiBcbiBcdGlmIChza2JfYXRfdGNfaW5ncmVzcyhza2IpKVxuLVx0XHRza2JfcHVzaChza2IsIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbitcdFx0c2tiX3B1c2goc2tiLCBFVEhfSExFTik7XG4gXG4gXHR0bHZfZGF0YSA9IGlmZV9kZWNvZGUoc2tiLCBcdTAwMjZtZXRhbGVuKTtcbiBcdGlmICh1bmxpa2VseSghdGx2X2RhdGEpKSB7XG5AQCAtNzk1LDcgKzc5Niw3IEBAIHN0YXRpYyBpbnQgdGNmX2lmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcbiBcdCAgIHdoZXJlIE9SSUdEQVRBID0gb3JpZ2luYWwgZXRoZXJuZXQgaGVhZGVyIC4uLlxuIFx0ICovXG4gXHR1MTYgbWV0YWxlbiA9IGlmZV9nZXRfc3ooc2tiLCBwKTtcbi1cdGludCBoZHJtID0gbWV0YWxlbiArIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgSUZFX01FVEFIRFJMRU47XG4rXHRpbnQgaGRybSA9IG1ldGFsZW4gKyBFVEhfSExFTiArIElGRV9NRVRBSERSTEVOO1xuIFx0dW5zaWduZWQgaW50IHNrYm9mZiA9IDA7XG4gXHRpbnQgbmV3X2xlbiA9IHNrYi1cdTAwM2VsZW4gKyBoZHJtO1xuIFx0Ym9vbCBleGNlZWRfbXR1ID0gZmFsc2U7XG5AQCAtODI2LDcgKzgyNyw3IEBAIHN0YXRpYyBpbnQgdGNmX2lmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcbiBcdH1cbiBcbiBcdGlmIChza2JfYXRfdGNfaW5ncmVzcyhza2IpKVxuLVx0XHRza2JfcHVzaChza2IsIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbitcdFx0c2tiX3B1c2goc2tiLCBFVEhfSExFTik7XG4gXG4gXHRpZmVfbWV0YSA9IGlmZV9lbmNvZGUoc2tiLCBtZXRhbGVuKTtcbiBcdGlmICghaWZlX21ldGEpXG5AQCAtODU2LDExICs4NTcsMjcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIFx0b2V0aGgtXHUwMDNlaF9wcm90byA9IGh0b25zKHAtXHUwMDNlZXRoX3R5cGUpO1xuIFxuIFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpXG4tXHRcdHNrYl9wdWxsKHNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuK1x0XHRza2JfcHVsbChza2IsIEVUSF9ITEVOKTtcbiBcbiBcdHJldHVybiBhY3Rpb247XG4gfVxuIFxuKy8qIElGRSBlbmNhcHN1bGF0ZXMgdGhlIG9yaWdpbmFsIEV0aGVybmV0IGhlYWRlciBhbmQsIG9uIGRlY29kZSwgZXhwZWN0cyB0b1xuKyAqIGZpbmQgb25lLCBzbyBpdCBjYW4gb25seSBldmVyIHdvcmsgb24gc2ticyB0aGF0IGNhcnJ5IG9uZS4gTG9vcGJhY2sgY2Fycmllc1xuKyAqIEV0aGVybmV0IGhlYWRlciBhcyB3ZWxsLCBzbyBpdCBxdWFsaWZpZXMgaGVyZS5cbisgKiBBdCBpbmdyZXNzLCBhbHNvIHZlcmlmeSB0aGF0IHRoZSBMMiBoZWFkZXIgYWJvdXQgdG8gYmUgcHVzaGVkIGJhY2sgcmVhbGx5XG4rICogaXMgYW4gRXRoZXJuZXQgaGVhZGVyIGJlY2F1c2UgdGhlIHNrYiBjb3VsZCd2ZSBiZWVuIHJlZGlyZWN0ZWQgd2l0aCBtaXJyZWRcbisgKiBmcm9tIGEgbm9uLUV0aGVybmV0IGRldmljZS5cbisgKi9cbitzdGF0aWMgYm9vbCB0Y2ZfaWZlX2lzX2V0aF9za2IoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRpZiAoc2tiLVx1MDAzZWRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9FVEhFUiBcdTAwMjZcdTAwMjZcbitcdCAgICBza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0xPT1BCQUNLKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gIXNrYl9hdF90Y19pbmdyZXNzKHNrYikgfHwgc2tiLVx1MDAzZW1hY19sZW4gPT0gRVRIX0hMRU47XG4rfVxuK1xuIFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2ZfaWZlX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgdGNmX3Jlc3VsdCAqcmVzKVxuQEAgLTg2OSw2ICs4ODYsMTMgQEAgVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9pZmVfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgdGNmX2lmZV9wYXJhbXMgKnA7XG4gXHRpbnQgcmV0O1xuIFxuK1x0aWYgKHVubGlrZWx5KCF0Y2ZfaWZlX2lzX2V0aF9za2Ioc2tiKSkpIHtcbitcdFx0YnN0YXRzX3VwZGF0ZSh0aGlzX2NwdV9wdHIoaWZlLVx1MDAzZWNvbW1vbi5jcHVfYnN0YXRzKSwgc2tiKTtcbitcdFx0dGNmX2xhc3R1c2VfdXBkYXRlKFx1MDAyNmlmZS1cdTAwM2V0Y2ZfdG0pO1xuK1x0XHRxc3RhdHNfY3B1X2Ryb3BfaW5jKGlmZS1cdTAwM2Vjb21tb24uY3B1X3FzdGF0cyk7XG4rXHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbitcdH1cbitcbiBcdHAgPSByY3VfZGVyZWZlcmVuY2VfYmgoaWZlLVx1MDAzZXBhcmFtcyk7XG4gXHRpZiAocC1cdTAwM2VmbGFncyBcdTAwMjYgSUZFX0VOQ09ERSkge1xuIFx0XHRyZXQgPSB0Y2ZfaWZlX2VuY29kZShza2IsIGEsIHJlcywgcCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzo0MjozMy41MjYwODc1ODdaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE2MjM3MDE1MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSUZFIFBhdGNoIEFuYWx5c2lzOiBLQVNBTiB2cy4gS01TQU4qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIGBuZXQvaWZlL2lmZS5jYCBhbmQgYG5ldC9zY2hlZC9hY3RfaWZlLmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgcmVwbGFjaW5nIGBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgd2l0aCBgRVRIX0hMRU5gIGluIGEgZmV3IGNyaXRpY2FsIHNwb3RzLCBhbmQgYWRkaW5nIGEgY2hlY2sgd2l0aCBgdGNmX2lmZV9pc19ldGhfc2tiKHNrYilgIHRvIGVuc3VyZSBpdCdzIGRlYWxpbmcgd2l0aCBFdGhlcm5ldCBvciBsb29wYmFjayBza2JzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz9cblxuVGhlIGlzc3VlIHNlZW1zIHRvIHN0ZW0gZnJvbSBhIG1pc21hdGNoLiBgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIG1pZ2h0IGJlIGluY29ycmVjdCBpZiB0aGUgcGFja2V0IG9yaWdpbmF0ZXMgZnJvbSBhIG5vbi1FdGhlcm5ldCBkZXZpY2UsIG9yIGlmIHRoZSBkZXZpY2UncyBoZWFkZXIgbGVuZ3RoIGlzIG1pc2NvbmZpZ3VyZWQuIFVzaW5nIHRoZSB3cm9uZyBsZW5ndGggd2hlbiBwdXNoaW5nIG9yIHB1bGxpbmcgaGVhZGVycyBpcyB0aGUgcHJvYmxlbS4gSXQgY291bGQgbGVhZCB0byByZWFkcy93cml0ZXMgdGhhdCBnbyBvdXQgb2YgYm91bmRzIG9mIHRoZSBzb2NrZXQgYnVmZmVyIChgc2tiYCkgb3IgaW5jb3JyZWN0IG9mZnNldHMuXG5cbk15IGNvbmNlcm4gd2FzOiBJZiBgaGFyZF9oZWFkZXJfbGVuYCB3YXMgbGFyZ2VyLCB3b3VsZG4ndCBgc2tiX3B1c2hgIHBvdGVudGlhbGx5IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGE/IEJ1dCB0aGVuIEkgcmVhbGl6ZWQgYHNrYl9wdXNoYCBqdXN0IG1vdmVzIHRoZSBkYXRhIHBvaW50ZXIgYW5kIGNoYW5nZXMgYGxlbmAuIEl0J3MgdGhlIGBtZW1jcHlgIHRoYXQncyB0aGUga2V5LiBJZiBgaGFyZF9oZWFkZXJfbGVuYCBpcyB0b28gbGFyZ2UsIHRoYXQgYG1lbWNweWAgd291bGQgdHJ5IHRvIHJlYWQgYmV5b25kIHRoZSBwYWNrZXQncyBhY3R1YWwgZGF0YS4gSWYgaXQncyB0b28gc21hbGwsIHRoZSBFdGhlcm5ldCBoZWFkZXIgd291bGQgYmUgaW5jb21wbGV0ZS4gVGhpcyB3b3VsZCB0aGVuIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uIGluIHRoZSBwYWNrZXQsIGVpdGhlciBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb3IgYW4gaW5jb3JyZWN0IGhlYWRlciwgcmVzcGVjdGl2ZWx5LlxuXG5UaGUga2V5IGlzIHRoYXQgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgaXMgZGVzaWduZWQgdG8gY2F0Y2ggdGhlc2Ugb3V0LW9mLWJvdW5kcyByZWFkcyBiZWNhdXNlIHNrYiBkYXRhIGFyZWFzIGhhdmUgS0FTQU4gYW5ub3RhdGlvbnMuIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXMgZm9jdXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnV0IEtBU0FOIGFscmVhZHkgY2F0Y2hlcyB0aGUgT09CIGFjY2Vzc2VzLlxuXG5JIHJldmlzaXRlZCB0aGUgY29kZSBhZ2FpbiwgZXNwZWNpYWxseSB0aGlzOlxuXG5gYGBjXG4tXHRpbnQgdG90YWxfcHVzaCA9IGhkcm0gKyBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbitcdGludCB0b3RhbF9wdXNoID0gaGRybSArIEVUSF9ITEVOO1xuYGBgXG5hbmRcbmBgYGNcbi1cdG1lbWNweShza2ItXHUwMDNlZGF0YSwgaWV0aGgsIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbitcdG1lbWNweShza2ItXHUwMDNlZGF0YSwgaWV0aGgsIEVUSF9ITEVOKTtcbmBgYFxuXG5NeSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBpcyBwcmltYXJpbHkgYSBwYWNrZXQgYm91bmRhcnkvaGVhZGVyIGxlbmd0aCBidWcuIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnksIEtBU0FOIGhhbmRsZXMgdGhlIE9PQiBpc3N1ZXMuIFRoZSBwYXRjaCBjb3JyZWN0cyB0aGUgaGVhZGVyIGxlbmd0aC4gSXQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2Ugb3IgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMuIEl0IGNvcnJlY3RseSBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBidWcsIGFuZCBJJ2xsIGNvbmZpcm0gdGhhdCBLQVNBTidzIGFscmVhZHkgY2FwYWJsZSBvZiBjYXRjaGluZyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg1MCwiT3V0cHV0VG9rZW5zIjoyNDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTk3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDI6NTUuMTQ5NzkyOTc2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiB0aGUgSUZFIHBhY2tldCBhY3Rpb24gd2hlcmUgYHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW5gIHdhcyB1c2VkIGluc3RlYWQgb2YgYEVUSF9ITEVOYCB0byBwdXNoL3B1bGwgaGVhZGVycyBhbmQgY29weSBkYXRhLiBJZiBhIHBhY2tldCBpcyByZWRpcmVjdGVkIGZyb20gYSBub24tRXRoZXJuZXQgZGV2aWNlIChlLmcuLCB2aWEgbWlycmVkKSwgYGhhcmRfaGVhZGVyX2xlbmAgbWF5IG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgRXRoZXJuZXQgaGVhZGVyIHNpemUuIFRoaXMgbWlzbWF0Y2ggY2FuIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyByZWFkcyBvciB3cml0ZXMgd2l0aGluIHRoZSBzb2NrZXQgYnVmZmVyIChza2IpIGlmIGBoYXJkX2hlYWRlcl9sZW5gIGlzIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgcGFja2V0IGRhdGEsIG9yIHBhY2tldCBjb3JydXB0aW9uIGlmIGl0IGlzIHNtYWxsZXIuXFxuXFxuT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiBza2IgZGF0YSBidWZmZXJzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTiwgYXMgdGhlIGtlcm5lbCdzIHNrYiBhbGxvY2F0aW9uIGFuZCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIGFyZSBleHBsaWNpdGx5IGFubm90YXRlZCB0byBwb2lzb24gdGhlIGhlYWRyb29tIGFuZCB0YWlscm9vbS4gVGhlIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIG5vciBkb2VzIGl0IGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBmdWxseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGlzIGNsYXNzIG9mIGJ1Z3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiB0aGUgSUZFIHBhY2tldCBhY3Rpb24gd2hlcmUgYHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW5gIHdhcyB1c2VkIGluc3RlYWQgb2YgYEVUSF9ITEVOYCB0byBwdXNoL3B1bGwgaGVhZGVycyBhbmQgY29weSBkYXRhLiBJZiBhIHBhY2tldCBpcyByZWRpcmVjdGVkIGZyb20gYSBub24tRXRoZXJuZXQgZGV2aWNlIChlLmcuLCB2aWEgbWlycmVkKSwgYGhhcmRfaGVhZGVyX2xlbmAgbWF5IG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgRXRoZXJuZXQgaGVhZGVyIHNpemUuIFRoaXMgbWlzbWF0Y2ggY2FuIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyByZWFkcyBvciB3cml0ZXMgd2l0aGluIHRoZSBzb2NrZXQgYnVmZmVyIChza2IpIGlmIGBoYXJkX2hlYWRlcl9sZW5gIGlzIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgcGFja2V0IGRhdGEsIG9yIHBhY2tldCBjb3JydXB0aW9uIGlmIGl0IGlzIHNtYWxsZXIuXFxuXFxuT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiBza2IgZGF0YSBidWZmZXJzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTiwgYXMgdGhlIGtlcm5lbCdzIHNrYiBhbGxvY2F0aW9uIGFuZCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIGFyZSBleHBsaWNpdGx5IGFubm90YXRlZCB0byBwb2lzb24gdGhlIGhlYWRyb29tIGFuZCB0YWlscm9vbS4gVGhlIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIG5vciBkb2VzIGl0IGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBmdWxseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGlzIGNsYXNzIG9mIGJ1Z3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowzzmxd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-21 16:54:34 +0000 UTC FinishedAt: 2026-08-21 17:42:56 +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": "746fc0787f616da418ffc04a110296fe95d53491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_ACT_IFE", "NET_CLS_ACT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "746fc0787f616da418ffc04a110296fe95d53491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_ACT_IFE", "NET_CLS_ACT" ], "series_id": "3c920d4c-a37c-44f5-8f82-4717f914ea4e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcf_ife_act", "ife_encode", "ife_decode" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9BQ1RfSUZFJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNmX2lmZV9hY3QmIzM0OywKICAgICYjMzQ7aWZlX2VuY29kZSYjMzQ7LAogICAgJiMzNDtpZmVfZGVjb2RlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gdGhlIElGRSBwYWNrZXQgYWN0aW9uIHdoZXJlIGBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgd2FzIHVzZWQgaW5zdGVhZCBvZiBgRVRIX0hMRU5gIHRvIHB1c2gvcHVsbCBoZWFkZXJzIGFuZCBjb3B5IGRhdGEuIElmIGEgcGFja2V0IGlzIHJlZGlyZWN0ZWQgZnJvbSBhIG5vbi1FdGhlcm5ldCBkZXZpY2UgKGUuZy4sIHZpYSBtaXJyZWQpLCBgaGFyZF9oZWFkZXJfbGVuYCBtYXkgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBFdGhlcm5ldCBoZWFkZXIgc2l6ZS4gVGhpcyBtaXNtYXRjaCBjYW4gbGVhZCB0byBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcyB3aXRoaW4gdGhlIHNvY2tldCBidWZmZXIgKHNrYikgaWYgYGhhcmRfaGVhZGVyX2xlbmAgaXMgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBwYWNrZXQgZGF0YSwgb3IgcGFja2V0IGNvcnJ1cHRpb24gaWYgaXQgaXMgc21hbGxlci5cblxuT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiBza2IgZGF0YSBidWZmZXJzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTiwgYXMgdGhlIGtlcm5lbCYjMzk7cyBza2IgYWxsb2NhdGlvbiBhbmQgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyBhcmUgZXhwbGljaXRseSBhbm5vdGF0ZWQgdG8gcG9pc29uIHRoZSBoZWFkcm9vbSBhbmQgdGFpbHJvb20uIFRoZSBidWcgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLCBub3IgZG9lcyBpdCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgZnVsbHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhpcyBjbGFzcyBvZiBidWdzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIGluIHRoZSBUQyBJRkUgYWN0aW9uIHdoZXJlIGl0IGluY29ycmVjdGx5IHVzZWQgYHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCBpbnN0ZWFkIG9mIGBFVEhfSExFTmAgZm9yIGVuY2Fwc3VsYXRpb24vZGVjYXBzdWxhdGlvbiwgYW5kIGFkZHMgYSBjaGVjayB0byBkcm9wIG5vbi1FdGhlcm5ldCBwYWNrZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgcGF0aCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwNTdjOTY2ODU0MjBiYjQyYjM1Y2UwMzc5ZmI3ZWE2ODZkMjFlNjQxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTc6NDE6MzMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lmZS9pZmUuYyBiL25ldC9pZmUvaWZlLmNcbmluZGV4IDdhNzU5NDdhMzFlMzEuLjJkZGY3MjVkMzM4OWUgMTAwNjQ0XG4tLS0gYS9uZXQvaWZlL2lmZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaWZlL2lmZS5jXG5AQCAtMzcsNyAmIzQzOzM3LDcgQEAgdm9pZCAqaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbWV0YWxlbilcbiBcdCAqIHdoZXJlIE9SSUdEQVRBID0gb3JpZ2luYWwgZXRoZXJuZXQgaGVhZGVyIC4uLlxuIFx0ICovXG4gXHRpbnQgaGRybSA9IG1ldGFsZW4gJiM0MzsgSUZFX01FVEFIRFJMRU47XG4tXHRpbnQgdG90YWxfcHVzaCA9IGhkcm0gJiM0Mzsgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4mIzQzO1x0aW50IHRvdGFsX3B1c2ggPSBoZHJtICYjNDM7IEVUSF9ITEVOO1xuIFx0c3RydWN0IGlmZWhlYWRyICppZmVoZHI7XG4gXHRzdHJ1Y3QgZXRoaGRyICppZXRoaDtcdC8qIGlubmVyIGV0aGVyIGhlYWRlciAqL1xuIFx0aW50IHNrYm9mZiA9IDA7XG5AQCAtNTAsOSAmIzQzOzUwLDkgQEAgdm9pZCAqaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbWV0YWxlbilcbiBcdGlldGhoID0gKHN0cnVjdCBldGhoZHIgKikgc2tiLVx1MDAzZWRhdGE7XG4gXG4gXHRfX3NrYl9wdXNoKHNrYiwgdG90YWxfcHVzaCk7XG4tXHRtZW1jcHkoc2tiLVx1MDAzZWRhdGEsIGlldGhoLCBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4mIzQzO1x0bWVtY3B5KHNrYi1cdTAwM2VkYXRhLCBpZXRoaCwgRVRIX0hMRU4pO1xuIFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbi1cdHNrYm9mZiAmIzQzOz0gc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4mIzQzO1x0c2tib2ZmICYjNDM7PSBFVEhfSExFTjtcbiBcbiBcdC8qIHRvdGFsIG1ldGFkYXRhIGxlbmd0aCAqL1xuIFx0aWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKSAoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgc2tib2ZmKTtcbkBAIC02OSwxMiAmIzQzOzY5LDEyIEBAIHZvaWQgKmlmZV9kZWNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2ICptZXRhbGVuKVxuIFx0aW50IHRvdGFsX3B1bGw7XG4gXHR1MTYgaWZlaGRybG47XG4gXG4tXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAmIzQzOyBJRkVfTUVUQUhEUkxFTikpXG4mIzQzO1x0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgRVRIX0hMRU4gJiM0MzsgSUZFX01FVEFIRFJMRU4pKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikgKHNrYi1cdTAwM2VkYXRhICYjNDM7IHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbiYjNDM7XHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IEVUSF9ITEVOKTtcbiBcdGlmZWhkcmxuID0gbnRvaHMoaWZlaGRyLVx1MDAzZW1ldGFsZW4pO1xuLVx0dG90YWxfcHVsbCA9IHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICYjNDM7IGlmZWhkcmxuO1xuJiM0MztcdHRvdGFsX3B1bGwgPSBFVEhfSExFTiAmIzQzOyBpZmVoZHJsbjtcbiBcbiBcdGlmICh1bmxpa2VseShpZmVoZHJsbiBcdTAwM2MgMikpXG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTgyLDcgJiM0Mzs4Miw3IEBAIHZvaWQgKmlmZV9kZWNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2ICptZXRhbGVuKVxuIFx0aWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgdG90YWxfcHVsbCAmIzQzOyBFVEhfSExFTikpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuJiM0MztcdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgRVRIX0hMRU4pO1xuIFx0c2tiX3NldF9tYWNfaGVhZGVyKHNrYiwgdG90YWxfcHVsbCk7XG4gXHRfX3NrYl9wdWxsKHNrYiwgdG90YWxfcHVsbCk7XG4gXHQqbWV0YWxlbiA9IGlmZWhkcmxuIC0gSUZFX01FVEFIRFJMRU47XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9pZmUuYyBiL25ldC9zY2hlZC9hY3RfaWZlLmNcbmluZGV4IGZmMmIxNmUzNWI5YjAuLjljZWE3MWZjMWRiM2QgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X2lmZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X2lmZS5jXG5AQCAtMjgsNiAmIzQzOzI4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L3RjX2FjdC90Y19pZmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfaWZlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2FycC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lmZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX3dyYXBwZXIuaFx1MDAzZVxuIFxuQEAgLTcyMyw3ICYjNDM7NzI0LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2RlY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIFx0dGNmX2xhc3R1c2VfdXBkYXRlKFx1MDAyNmlmZS1cdTAwM2V0Y2ZfdG0pO1xuIFxuIFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpXG4tXHRcdHNrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuJiM0MztcdFx0c2tiX3B1c2goc2tiLCBFVEhfSExFTik7XG4gXG4gXHR0bHZfZGF0YSA9IGlmZV9kZWNvZGUoc2tiLCBcdTAwMjZtZXRhbGVuKTtcbiBcdGlmICh1bmxpa2VseSghdGx2X2RhdGEpKSB7XG5AQCAtNzk1LDcgJiM0Mzs3OTYsNyBAQCBzdGF0aWMgaW50IHRjZl9pZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXG4gXHQgICB3aGVyZSBPUklHREFUQSA9IG9yaWdpbmFsIGV0aGVybmV0IGhlYWRlciAuLi5cbiBcdCAqL1xuIFx0dTE2IG1ldGFsZW4gPSBpZmVfZ2V0X3N6KHNrYiwgcCk7XG4tXHRpbnQgaGRybSA9IG1ldGFsZW4gJiM0Mzsgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gJiM0MzsgSUZFX01FVEFIRFJMRU47XG4mIzQzO1x0aW50IGhkcm0gPSBtZXRhbGVuICYjNDM7IEVUSF9ITEVOICYjNDM7IElGRV9NRVRBSERSTEVOO1xuIFx0dW5zaWduZWQgaW50IHNrYm9mZiA9IDA7XG4gXHRpbnQgbmV3X2xlbiA9IHNrYi1cdTAwM2VsZW4gJiM0MzsgaGRybTtcbiBcdGJvb2wgZXhjZWVkX210dSA9IGZhbHNlO1xuQEAgLTgyNiw3ICYjNDM7ODI3LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIFx0fVxuIFxuIFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpXG4tXHRcdHNrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuJiM0MztcdFx0c2tiX3B1c2goc2tiLCBFVEhfSExFTik7XG4gXG4gXHRpZmVfbWV0YSA9IGlmZV9lbmNvZGUoc2tiLCBtZXRhbGVuKTtcbiBcdGlmICghaWZlX21ldGEpXG5AQCAtODU2LDExICYjNDM7ODU3LDI3IEBAIHN0YXRpYyBpbnQgdGNmX2lmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcbiBcdG9ldGhoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhwLVx1MDAzZWV0aF90eXBlKTtcbiBcbiBcdGlmIChza2JfYXRfdGNfaW5ncmVzcyhza2IpKVxuLVx0XHRza2JfcHVsbChza2IsIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbiYjNDM7XHRcdHNrYl9wdWxsKHNrYiwgRVRIX0hMRU4pO1xuIFxuIFx0cmV0dXJuIGFjdGlvbjtcbiB9XG4gXG4mIzQzOy8qIElGRSBlbmNhcHN1bGF0ZXMgdGhlIG9yaWdpbmFsIEV0aGVybmV0IGhlYWRlciBhbmQsIG9uIGRlY29kZSwgZXhwZWN0cyB0b1xuJiM0MzsgKiBmaW5kIG9uZSwgc28gaXQgY2FuIG9ubHkgZXZlciB3b3JrIG9uIHNrYnMgdGhhdCBjYXJyeSBvbmUuIExvb3BiYWNrIGNhcnJpZXNcbiYjNDM7ICogRXRoZXJuZXQgaGVhZGVyIGFzIHdlbGwsIHNvIGl0IHF1YWxpZmllcyBoZXJlLlxuJiM0MzsgKiBBdCBpbmdyZXNzLCBhbHNvIHZlcmlmeSB0aGF0IHRoZSBMMiBoZWFkZXIgYWJvdXQgdG8gYmUgcHVzaGVkIGJhY2sgcmVhbGx5XG4mIzQzOyAqIGlzIGFuIEV0aGVybmV0IGhlYWRlciBiZWNhdXNlIHRoZSBza2IgY291bGQmIzM5O3ZlIGJlZW4gcmVkaXJlY3RlZCB3aXRoIG1pcnJlZFxuJiM0MzsgKiBmcm9tIGEgbm9uLUV0aGVybmV0IGRldmljZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIHRjZl9pZmVfaXNfZXRoX3NrYihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNrYi1cdTAwM2VkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfRVRIRVIgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNrYi1cdTAwM2VkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfTE9PUEJBQ0spXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiAhc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSB8fCBza2ItXHUwMDNlbWFjX2xlbiA9PSBFVEhfSExFTjtcbiYjNDM7fVxuJiM0MztcbiBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2lmZV9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcbiBcdFx0XHRcdCAgc3RydWN0IHRjZl9yZXN1bHQgKnJlcylcbkBAIC04NjksNiAmIzQzOzg4NiwxMyBAQCBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2lmZV9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCB0Y2ZfaWZlX3BhcmFtcyAqcDtcbiBcdGludCByZXQ7XG4gXG4mIzQzO1x0aWYgKHVubGlrZWx5KCF0Y2ZfaWZlX2lzX2V0aF9za2Ioc2tiKSkpIHtcbiYjNDM7XHRcdGJzdGF0c191cGRhdGUodGhpc19jcHVfcHRyKGlmZS1cdTAwM2Vjb21tb24uY3B1X2JzdGF0cyksIHNrYik7XG4mIzQzO1x0XHR0Y2ZfbGFzdHVzZV91cGRhdGUoXHUwMDI2aWZlLVx1MDAzZXRjZl90bSk7XG4mIzQzO1x0XHRxc3RhdHNfY3B1X2Ryb3BfaW5jKGlmZS1cdTAwM2Vjb21tb24uY3B1X3FzdGF0cyk7XG4mIzQzO1x0XHRyZXR1cm4gVENfQUNUX1NIT1Q7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHAgPSByY3VfZGVyZWZlcmVuY2VfYmgoaWZlLVx1MDAzZXBhcmFtcyk7XG4gXHRpZiAocC1cdTAwM2VmbGFncyBcdTAwMjYgSUZFX0VOQ09ERSkge1xuIFx0XHRyZXQgPSB0Y2ZfaWZlX2VuY29kZShza2IsIGEsIHJlcywgcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9BQ1RfSUZFJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNmX2lmZV9hY3QmIzM0OywKICAgICYjMzQ7aWZlX2VuY29kZSYjMzQ7LAogICAgJiMzNDtpZmVfZGVjb2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIGluIHRoZSBUQyBJRkUgYWN0aW9uIHdoZXJlIGl0IGluY29ycmVjdGx5IHVzZWQgYHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCBpbnN0ZWFkIG9mIGBFVEhfSExFTmAgZm9yIGVuY2Fwc3VsYXRpb24vZGVjYXBzdWxhdGlvbiwgYW5kIGFkZHMgYSBjaGVjayB0byBkcm9wIG5vbi1FdGhlcm5ldCBwYWNrZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgcGF0aCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNTdjOTY2ODU0MjBiYjQyYjM1Y2UwMzc5ZmI3ZWE2ODZkMjFlNjQxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMTc6NDE6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaWZlL2lmZS5jIGIvbmV0L2lmZS9pZmUuYwppbmRleCA3YTc1OTQ3YTMxZTMxLi4yZGRmNzI1ZDMzODllIDEwMDY0NAotLS0gYS9uZXQvaWZlL2lmZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pZmUvaWZlLmMKQEAgLTM3LDcgJiM0MzszNyw3IEBAIHZvaWQgKmlmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IG1ldGFsZW4pCiAJICogd2hlcmUgT1JJR0RBVEEgPSBvcmlnaW5hbCBldGhlcm5ldCBoZWFkZXIgLi4uCiAJICovCiAJaW50IGhkcm0gPSBtZXRhbGVuICYjNDM7IElGRV9NRVRBSERSTEVOOwotCWludCB0b3RhbF9wdXNoID0gaGRybSAmIzQzOyBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuOwomIzQzOwlpbnQgdG90YWxfcHVzaCA9IGhkcm0gJiM0MzsgRVRIX0hMRU47CiAJc3RydWN0IGlmZWhlYWRyICppZmVoZHI7CiAJc3RydWN0IGV0aGhkciAqaWV0aGg7CS8qIGlubmVyIGV0aGVyIGhlYWRlciAqLwogCWludCBza2JvZmYgPSAwOwpAQCAtNTAsOSAmIzQzOzUwLDkgQEAgdm9pZCAqaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbWV0YWxlbikKIAlpZXRoaCA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYi0mZ3Q7ZGF0YTsKIAogCV9fc2tiX3B1c2goc2tiLCB0b3RhbF9wdXNoKTsKLQltZW1jcHkoc2tiLSZndDtkYXRhLCBpZXRoaCwgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CW1lbWNweShza2ItJmd0O2RhdGEsIGlldGhoLCBFVEhfSExFTik7CiAJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKLQlza2JvZmYgJiM0Mzs9IHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW47CiYjNDM7CXNrYm9mZiAmIzQzOz0gRVRIX0hMRU47CiAKIAkvKiB0b3RhbCBtZXRhZGF0YSBsZW5ndGggKi8KIAlpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopIChza2ItJmd0O2RhdGEgJiM0Mzsgc2tib2ZmKTsKQEAgLTY5LDEyICYjNDM7NjksMTIgQEAgdm9pZCAqaWZlX2RlY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKm1ldGFsZW4pCiAJaW50IHRvdGFsX3B1bGw7CiAJdTE2IGlmZWhkcmxuOwogCi0JaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiAmIzQzOyBJRkVfTUVUQUhEUkxFTikpCiYjNDM7CWlmICghcHNrYl9tYXlfcHVsbChza2IsIEVUSF9ITEVOICYjNDM7IElGRV9NRVRBSERSTEVOKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopIChza2ItJmd0O2RhdGEgJiM0Mzsgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CWlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IEVUSF9ITEVOKTsKIAlpZmVoZHJsbiA9IG50b2hzKGlmZWhkci0mZ3Q7bWV0YWxlbik7Ci0JdG90YWxfcHVsbCA9IHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gJiM0MzsgaWZlaGRybG47CiYjNDM7CXRvdGFsX3B1bGwgPSBFVEhfSExFTiAmIzQzOyBpZmVoZHJsbjsKIAogCWlmICh1bmxpa2VseShpZmVoZHJsbiAmbHQ7IDIpKQogCQlyZXR1cm4gTlVMTDsKQEAgLTgyLDcgJiM0Mzs4Miw3IEBAIHZvaWQgKmlmZV9kZWNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2ICptZXRhbGVuKQogCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIHRvdGFsX3B1bGwgJiM0MzsgRVRIX0hMRU4pKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKTsKJiM0MzsJaWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItJmd0O2RhdGEgJiM0MzsgRVRIX0hMRU4pOwogCXNrYl9zZXRfbWFjX2hlYWRlcihza2IsIHRvdGFsX3B1bGwpOwogCV9fc2tiX3B1bGwoc2tiLCB0b3RhbF9wdWxsKTsKIAkqbWV0YWxlbiA9IGlmZWhkcmxuIC0gSUZFX01FVEFIRFJMRU47CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2lmZS5jIGIvbmV0L3NjaGVkL2FjdF9pZmUuYwppbmRleCBmZjJiMTZlMzViOWIwLi45Y2VhNzFmYzFkYjNkIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2lmZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfaWZlLmMKQEAgLTI4LDYgJiM0MzsyOCw3IEBACiAjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC90Y19hY3QvdGNfaWZlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3RjX2FjdC90Y19pZmUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ldGhlcmRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pZl9hcnAuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaWZlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3RjX3dyYXBwZXIuaCZndDsKIApAQCAtNzIzLDcgJiM0Mzs3MjQsNyBAQCBzdGF0aWMgaW50IHRjZl9pZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsCiAJdGNmX2xhc3R1c2VfdXBkYXRlKCZhbXA7aWZlLSZndDt0Y2ZfdG0pOwogCiAJaWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpCi0JCXNrYl9wdXNoKHNrYiwgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CQlza2JfcHVzaChza2IsIEVUSF9ITEVOKTsKIAogCXRsdl9kYXRhID0gaWZlX2RlY29kZShza2IsICZhbXA7bWV0YWxlbik7CiAJaWYgKHVubGlrZWx5KCF0bHZfZGF0YSkpIHsKQEAgLTc5NSw3ICYjNDM7Nzk2LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLAogCSAgIHdoZXJlIE9SSUdEQVRBID0gb3JpZ2luYWwgZXRoZXJuZXQgaGVhZGVyIC4uLgogCSAqLwogCXUxNiBtZXRhbGVuID0gaWZlX2dldF9zeihza2IsIHApOwotCWludCBoZHJtID0gbWV0YWxlbiAmIzQzOyBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuICYjNDM7IElGRV9NRVRBSERSTEVOOwomIzQzOwlpbnQgaGRybSA9IG1ldGFsZW4gJiM0MzsgRVRIX0hMRU4gJiM0MzsgSUZFX01FVEFIRFJMRU47CiAJdW5zaWduZWQgaW50IHNrYm9mZiA9IDA7CiAJaW50IG5ld19sZW4gPSBza2ItJmd0O2xlbiAmIzQzOyBoZHJtOwogCWJvb2wgZXhjZWVkX210dSA9IGZhbHNlOwpAQCAtODI2LDcgJiM0Mzs4MjcsNyBAQCBzdGF0aWMgaW50IHRjZl9pZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsCiAJfQogCiAJaWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpCi0JCXNrYl9wdXNoKHNrYiwgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CQlza2JfcHVzaChza2IsIEVUSF9ITEVOKTsKIAogCWlmZV9tZXRhID0gaWZlX2VuY29kZShza2IsIG1ldGFsZW4pOwogCWlmICghaWZlX21ldGEpCkBAIC04NTYsMTEgJiM0Mzs4NTcsMjcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLAogCW9ldGhoLSZndDtoX3Byb3RvID0gaHRvbnMocC0mZ3Q7ZXRoX3R5cGUpOwogCiAJaWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpCi0JCXNrYl9wdWxsKHNrYiwgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CQlza2JfcHVsbChza2IsIEVUSF9ITEVOKTsKIAogCXJldHVybiBhY3Rpb247CiB9CiAKJiM0MzsvKiBJRkUgZW5jYXBzdWxhdGVzIHRoZSBvcmlnaW5hbCBFdGhlcm5ldCBoZWFkZXIgYW5kLCBvbiBkZWNvZGUsIGV4cGVjdHMgdG8KJiM0MzsgKiBmaW5kIG9uZSwgc28gaXQgY2FuIG9ubHkgZXZlciB3b3JrIG9uIHNrYnMgdGhhdCBjYXJyeSBvbmUuIExvb3BiYWNrIGNhcnJpZXMKJiM0MzsgKiBFdGhlcm5ldCBoZWFkZXIgYXMgd2VsbCwgc28gaXQgcXVhbGlmaWVzIGhlcmUuCiYjNDM7ICogQXQgaW5ncmVzcywgYWxzbyB2ZXJpZnkgdGhhdCB0aGUgTDIgaGVhZGVyIGFib3V0IHRvIGJlIHB1c2hlZCBiYWNrIHJlYWxseQomIzQzOyAqIGlzIGFuIEV0aGVybmV0IGhlYWRlciBiZWNhdXNlIHRoZSBza2IgY291bGQmIzM5O3ZlIGJlZW4gcmVkaXJlY3RlZCB3aXRoIG1pcnJlZAomIzQzOyAqIGZyb20gYSBub24tRXRoZXJuZXQgZGV2aWNlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIHRjZl9pZmVfaXNfZXRoX3NrYihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJaWYgKHNrYi0mZ3Q7ZGV2LSZndDt0eXBlICE9IEFSUEhSRF9FVEhFUiAmYW1wOyZhbXA7CiYjNDM7CSAgICBza2ItJmd0O2Rldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfTE9PUEJBQ0spCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiAhc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSB8fCBza2ItJmd0O21hY19sZW4gPT0gRVRIX0hMRU47CiYjNDM7fQomIzQzOwogVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9pZmVfYWN0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLAogCQkJCSAgc3RydWN0IHRjZl9yZXN1bHQgKnJlcykKQEAgLTg2OSw2ICYjNDM7ODg2LDEzIEBAIFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2ZfaWZlX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXN0cnVjdCB0Y2ZfaWZlX3BhcmFtcyAqcDsKIAlpbnQgcmV0OwogCiYjNDM7CWlmICh1bmxpa2VseSghdGNmX2lmZV9pc19ldGhfc2tiKHNrYikpKSB7CiYjNDM7CQlic3RhdHNfdXBkYXRlKHRoaXNfY3B1X3B0cihpZmUtJmd0O2NvbW1vbi5jcHVfYnN0YXRzKSwgc2tiKTsKJiM0MzsJCXRjZl9sYXN0dXNlX3VwZGF0ZSgmYW1wO2lmZS0mZ3Q7dGNmX3RtKTsKJiM0MzsJCXFzdGF0c19jcHVfZHJvcF9pbmMoaWZlLSZndDtjb21tb24uY3B1X3FzdGF0cyk7CiYjNDM7CQlyZXR1cm4gVENfQUNUX1NIT1Q7CiYjNDM7CX0KJiM0MzsKIAlwID0gcmN1X2RlcmVmZXJlbmNlX2JoKGlmZS0mZ3Q7cGFyYW1zKTsKIAlpZiAocC0mZ3Q7ZmxhZ3MgJmFtcDsgSUZFX0VOQ09ERSkgewogCQlyZXQgPSB0Y2ZfaWZlX2VuY29kZShza2IsIGEsIHJlcywgcCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NTMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSUZFIEFjdGlvbiBQYXRjaCBBbmFseXNpcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvaWZlL2lmZS5jYCBhbmQgYG5ldC9zY2hlZC9hY3RfaWZlLmNgLiBMb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZm9yIHRoZSBUQyBJRkUgKEludGVyLUZFKSBhY3Rpb24uIEl0JiMzOTtzIHN1YnN0aXR1dGluZyBgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbmAgd2l0aCBgRVRIX0hMRU5gIGluIGBpZmVfZW5jb2RlYCwgYGlmZV9kZWNvZGVgLCBgdGNmX2lmZV9kZWNvZGVgLCBhbmQgYHRjZl9pZmVfZW5jb2RlYC4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBzbyBmYXIg4oCTIGxpa2VseSBmaXhpbmcgYW4gaW5jb3JyZWN0IGhhcmQgaGVhZGVyIGxlbmd0aCBhc3N1bXB0aW9uLiBJdCYjMzk7cyBhbHNvIGFkZGluZyBhIGNoZWNrIGluIGB0Y2ZfaWZlX2FjdGAgd2l0aCBgdGNmX2lmZV9pc19ldGhfc2tiYCB0byBzcGVjaWZpY2FsbHkgZHJvcCBub24tRXRoZXJuZXQgcGFja2V0cyAoZXhjbHVkaW5nIGxvb3BiYWNrLCBvZiBjb3Vyc2UpLiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBhZGRpdGlvbiB0byBtYWtlIHRoZSBhY3Rpb24gbW9yZSByb2J1c3QuCgpUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIFRDIGFjdGlvbnMsIHNvIHdlIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMgYW5kIGZvY3VzIG9uIHRoZSBhc3NvY2lhdGVkIHN5bWJvbHMuIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCB0aGUgc291cmNlIGRpcmVjdGx5IHdpbGwgdGVsbC4gCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ3JlcCBmb3IgdGhlIGNvbmZpZy4gRm9yIGBuZXQvaWZlL2lmZS5jYCwgYSBxdWljayBgZ3JlcCAtciAmIzM0O2lmZS5vJiMzNDsgbmV0L2lmZS9gIHR1cm5zIHVwIGBvYmotJChDT05GSUdfTkVUX0lGRSkgJiM0Mzs9IGlmZS5vYCwgY29uZmlybWluZyBgQ09ORklHX05FVF9JRkVgIGlzIHRoZSBjb250cm9sLiBBbmQgZm9yIGBuZXQvc2NoZWQvYWN0X2lmZS5jYCwgYGdyZXAgLXIgJiMzNDthY3RfaWZlLm8mIzM0OyBuZXQvc2NoZWQvYCByZXZlYWxzIGBvYmotJChDT05GSUdfTkVUX0FDVF9JRkUpICYjNDM7PSBhY3RfaWZlLm9gLCB3aGljaCBtZWFucyBgQ09ORklHX05FVF9BQ1RfSUZFYCBnb3Zlcm5zIGl0LiBOb3csIHRoYXQgYWxsIHNlZW1zIHJpZ2h0OyB3ZSBzaG91bGQgdmVyaWZ5IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWZlXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pZmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pZmUvTWFrZWZpbGUtNS1cbm5ldC9pZmUvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTkVUX0lGRSkgJiM0Mzs9IGlmZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU3MAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBhY3RfaWZlLmNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gYGFjdF9pZmUuY2AuIE15IGluaXRpYWwgZm9jdXMsIGFzIGFsd2F5cywgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHRoaXMgcGllY2Ugb2YgY29kZSBkZWxpdmVycy4gSnVkZ2luZyBieSB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIGl0JiMzOTtzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgaW50ZXJwcmV0aW5nIGFuZCBleGVjdXRpbmcgSUZFIGFjdGlvbnMgd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGludGVyYWN0aW9uIHBvaW50czogd2hhdCB0cmlnZ2VycyB0aGVzZSBJRkUgYWN0aW9ucywgYW5kIHdoYXQgb3RoZXIgbW9kdWxlcyByZWx5IG9uIGl0cyBvdXRwdXQgb3Igc2VydmljZXM/CgpJJiMzOTttIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIGtleSBmdW5jdGlvbiBjYWxsczogRG9lcyBpdCB1dGlsaXplIHN0YW5kYXJkIGxpYnJhcnkgZnVuY3Rpb25zIGZvciBwYXJzaW5nIG9yIHN0cmluZyBtYW5pcHVsYXRpb24/IEFyZSB0aGVyZSBhbnkgY3VzdG9tIGRhdGEgc3RydWN0dXJlcyBkZWZpbmVkIGZvciBJRkUgYWN0aW9ucz8gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBhIHN0YXRlIG1hY2hpbmUgb3IgYSBkZWNpc2lvbi1tYWtpbmcgcHJvY2VzcyBiYXNlZCBvbiB0aGUgaW5wdXQgcGFyYW1ldGVycy4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBzdGF0ZW1lbnRzIHRoYXQgYWZmZWN0IHRoZSBmbG93IGRlcGVuZGluZyBvbiBleHRlcm5hbCBmYWN0b3JzPwoKTmV4dCwgSSB3aWxsIHRyeSB0byBkZXRlcm1pbmUgdGhlIGlucHV0cyBhbmQgb3V0cHV0cy4gV2hhdCBraW5kIG9mIGRhdGEgaXMgZmVkIGludG8gdGhlc2UgSUZFIGZ1bmN0aW9ucz8gQXJlIHRoZXJlIGRhdGEgc3RydWN0dXJlcyB0aGF0IHRoZXkgcmVjZWl2ZSwgb3IgZG8gdGhleSByZWFkIGZyb20gZ2xvYmFsIHZhcmlhYmxlcz8gQW5kIHdoYXQgaXMgdGhlIG91dHB1dD8gQXJlIHRoZSByZXN1bHRzIHN0b3JlZD8gQW5kIHdoYXQgcGFydHMgb2YgdGhlIHNvZnR3YXJlIHVzZSB0aGUgcmVzdWx0cz8KCk9uY2UgSSBoYXZlIHRoZSBsYXkgb2YgdGhlIGxhbmQsIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gZXJyb3IgaGFuZGxpbmcgYW5kIGJvdW5kYXJ5IGNvbmRpdGlvbnMuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgc2VhcmNoIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIEhvdyByb2J1c3QgaXMgdGhlIGVycm9yIGRldGVjdGlvbj8gSXMgaXQgZ3JhY2VmdWxseSBoYW5kbGVkIG9yIGRvZXMgaXQgbGVhZCB0byBzeXN0ZW0gY3Jhc2hlcz8KCk15IGZvY3VzIHRoZW4gc2hpZnRzIHRvIHRoZSBpbnRlcm5hbCBsb2dpYy4gSSYjMzk7bGwgYXR0ZW1wdCB0byBjb25zdHJ1Y3QgYSBtZW50YWwgbW9kZWwgb2YgdGhlIGV4ZWN1dGlvbiBmbG93LiBJIG5lZWQgdG8gZGlzY2VybiB0aGUgbWFpbiBhbGdvcml0aG1zIHVzZWQuIFdoYXQgc3BlY2lmaWMgSUZFIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ/IEFyZSB0aGVyZSBhbnkgY29tcGxleCBjYWxjdWxhdGlvbnMsIG9yIG9wdGltaXphdGlvbnMgdGhhdCBhcmUgd29ydGggbm90aW5nPyBJJiMzOTttIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNvbmN1cnJlbmN5IG9yIG11bHRpLXRocmVhZGluZyBhc3BlY3RzLCBhc3N1bWluZyB0aGlzIGlzIGEgcmVhbC10aW1lIHN5c3RlbTsgYW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIGRhdGEgY29ycnVwdGlvbiBpcyBhIGhpZ2ggcHJpb3JpdHkuCgpVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgZWZmaWNpZW50bHkgYW5kIGVmZmVjdGl2ZWx5IHRoaXMgY29kZSBmdWxmaWxscyBpdHMgcm9sZS4gSXMgaXQgd2VsbC1kb2N1bWVudGVkPyBBcmUgdGhlIGNvZGluZyBwcmFjdGljZXMgY29uc2lzdGVudCB3aXRoIHRoZSBvdmVyYWxsIHN0eWxlIGd1aWRlPyBBbnkgcG90ZW50aWFsIGZvciByZWZhY3RvcmluZz8gRG9lcyBpdCBoYXZlIHJvb20gZm9yIGltcHJvdmVtZW50LCBvciBkb2VzIGl0IGRlbGl2ZXIgYSB2ZXJ5IGVsZWdhbnQgc29sdXRpb24/IEl0IGFsbCBjb21lcyBkb3duIHRvIHVuZGVyc3RhbmRpbmcgdGhlICYjMzQ7d2h5JiMzNDsgYXMgbXVjaCBhcyB0aGUgJiMzNDtob3cuJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthY3RfaWZlXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL01ha2VmaWxlPTI2PW9iai0kKENPTkZJR19ORVRfQUNUX1NLQk1PRClcdCYjNDM7PSBhY3Rfc2tibW9kLm9cbm5ldC9zY2hlZC9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfTkVUX0FDVF9JRkUpXHQmIzQzOz0gYWN0X2lmZS5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtMjgtb2JqLSQoQ09ORklHX05FVF9JRkVfU0tCTUFSSylcdCYjNDM7PSBhY3RfbWV0YV9tYXJrLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTc4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBORVRfSUZFYCBhbmQgYE5FVF9BQ1RfSUZFYCBjb25maWd1cmF0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGRyaWxsIGRvd24gaW50byB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORVRfQUNUX0lGRWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgY29tcGxleGl0eSB1c3VhbGx5IGxpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBmZWF0dXJlcyB0aGlzIGNvbmZpZ3VyYXRpb24gcmVsaWVzIG9uLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBpbmZvcm0gbXkgZGVidWdnaW5nIGFuZCBjdXN0b21pemF0aW9uIGdvaW5nIGZvcndhcmQuIEl0IHNlZW1zIGxpa2UgYSBjb25maWd1cmF0aW9uIGl0ZW0uIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIGNvbnRpbnVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfQUNUX0lGRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9ODgyPWNvbmZpZyBORVRfQUNUX1NLQk1PRFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTg5Mi1cbm5ldC9zY2hlZC9LY29uZmlnOjg5Mzpjb25maWcgTkVUX0FDVF9JRkVcbm5ldC9zY2hlZC9LY29uZmlnLTg5NC1cdHRyaXN0YXRlIFwmIzM0O0ludGVyLUZFIGFjdGlvbiBiYXNlZCBvbiBJRVRGIEZvckNFUyBJbnRlckZFIExGQlwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBUcmFmZmljIENvbnRyb2wgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhcnRpY3VsYXIgYXNwZWN0IG9mIHRoZSB0cmFmZmljIGNvbnRyb2wgY29uZmlndXJhdGlvbi4gTXkgaW5zdGluY3RzIGFyZSB0ZWxsaW5nIG1lIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBzZWUuLi4gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZSBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIEl0JiMzOTtzIHVzdWFsbHkgdGhlIGF1dGhvcml0YXRpdmUgc291cmNlIGZvciB0aGUgY29uZmlndXJhYmxlIG9wdGlvbnMgcmVsYXRlZCB0byBuZXR3b3JraW5nIHNjaGVkdWxlcnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhcm91bmQgbGluZSA4OTMuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgaGlnaC1sZXZlbCBvcHRpb25zIGFyZSwgd2hlcmUgdGhlIGNvcmUgZGVmaW5pdGlvbnMgb3IgbWF5YmUgYSBtb2R1bGUgb3IgZmVhdHVyZSBpcyBkZWNsYXJlZCwgb3IgcGVyaGFwcyBhIHNlY3Rpb24gSSYjMzk7bSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggaXMgZGVmaW5lZC4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSByZWxldmFudCBvcHRpb25zIGFyZSBzdHJ1Y3R1cmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBhcmUgaW4gcGxhY2UuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJdCB3aWxsIGxpa2VseSBoaWdobGlnaHQgdGhlIHNwZWNpZmljIGZlYXR1cmVzIEkgbmVlZCB0byB1bmRlcnN0YW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4ODU6XHRcdGhlbHBcbiA4ODY6XHRcdCBTYXkgWSBoZXJlIHRvIGFsbG93IG1vZGlmaWNhdGlvbiBvZiBza2IgZGF0YVxuIDg4NzpcdFxuIDg4ODpcdFx0IElmIHVuc3VyZSwgc2F5IE4uXG4gODg5Olx0XG4gODkwOlx0XHQgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDg5MTpcdFx0IG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3Rfc2tibW9kLlxuIDg5MjpcdFxuIDg5MzpcdGNvbmZpZyBORVRfQUNUX0lGRVxuIDg5NDpcdFx0dHJpc3RhdGUgXCYjMzQ7SW50ZXItRkUgYWN0aW9uIGJhc2VkIG9uIElFVEYgRm9yQ0VTIEludGVyRkUgTEZCXCYjMzQ7XG4gODk1Olx0XHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXG4gODk2Olx0XHRzZWxlY3QgTkVUX0lGRVxuIDg5NzpcdFx0aGVscFxuIDg5ODpcdFx0ICBTYXkgWSBoZXJlIHRvIGFsbG93IGZvciBzb3VyY2luZyBhbmQgdGVybWluYXRpbmcgbWV0YWRhdGFcbiA4OTk6XHRcdCAgRm9yIGRldGFpbHMgcmVmZXIgdG8gbmV0ZGV2MDEgcGFwZXI6XG4gOTAwOlx0XHQgIFwmIzM0O0Rpc3RyaWJ1dGluZyBMaW51eCBUcmFmZmljIENvbnRyb2wgQ2xhc3NpZmllci1BY3Rpb24gU3Vic3lzdGVtXCYjMzQ7XG4gOTAxOlx0XHQgICBBdXRob3JzOiBKYW1hbCBIYWRpIFNhbGltIGFuZCBEYW1hc2NlbmUgTS4gSm9hY2hpbXBpbGxhaVxuIDkwMjpcdFxuIDkwMzpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gOTA0Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfaWZlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDA3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBJRkUgQ29uZmlndXJhdGlvbiBhbmQgRW50cnkgUG9pbnRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGN1cnJlbnQgZm9jdXMgaXMgb24gdGhlIGBORVRfQUNUX0lGRWAgYW5kIGBORVRfQ0xTX0FDVGAgY29uZmlndXJhdGlvbnMsIGVzcGVjaWFsbHkgdGhlaXIgaW50ZXJhY3Rpb24sIHdoaWNoIGlzIHR5cGljYWwgZm9yIFRyYWZmaWMgQ29udHJvbCBzY2VuYXJpb3MuIEkmIzM5O20gaG9taW5nIGluIG9uIHRoZSBzeW1ib2xzOiBgdGNmX2lmZV9hY3RgLCBgdGNmX2lmZV9lbmNvZGVgLCBgdGNmX2lmZV9kZWNvZGVgLCBgaWZlX2VuY29kZWAsIGFuZCBgaWZlX2RlY29kZWAuCgpGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgdGNmX2lmZV9lbmNvZGVgIGFuZCBgdGNmX2lmZV9kZWNvZGVgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhleSBhcmUgaW5kZWVkIGRlY2xhcmVkIGFzIHN0YXRpYywgYW5kIHRoZXkmIzM5O3JlIGRlZmluZWQgd2l0aGluIGBuZXQvc2NoZWQvYWN0X2lmZS5jYC4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlaXIgc2NvcGUgYW5kIHBvdGVudGlhbCBmb3IgbW9kaWZpY2F0aW9uLgoKYHRjZl9pZmVfYWN0YCwgaXQgc2VlbXMsIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGlzIG1vZHVsZS4gTm93LCByZWdhcmRpbmcgdGhlIGZ1bmN0aW9ucyBgaWZlX2VuY29kZWAgYW5kIGBpZmVfZGVjb2RlYCwgdGhlc2UgYXJlIG5vdCBzdGF0aWMsIGFuZCBJIGZpbmQgdGhleSYjMzk7cmUgZXhwb3J0ZWQgZnJvbSBgbmV0L2lmZS9pZmUuY2AuIFRoaXMgaW1wbGllcyB0aGV5IGFyZSBpbnRlbmRlZCBmb3IgYnJvYWRlciB1c2Ugd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBUaGlzIGFyY2hpdGVjdHVyZSBtYWtlcyBzZW5zZTsgYHRjZl9pZmVfYWN0YCBoYW5kbGVzIHRoZSBUcmFmZmljIENvbnRyb2wgKFRDKSBpbnRlcmFjdGlvbiwgcG90ZW50aWFsbHkgdXNpbmcgdGhlIHNoYXJlZCBgaWZlX2VuY29kZWAgYW5kIGBpZmVfZGVjb2RlYCBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0xfR1BMXFwoaWZlX2VuY29kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pZmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pZmUvaWZlLmM9MzQ9dm9pZCAqaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbWV0YWxlbilcbi0tXG5uZXQvaWZlL2lmZS5jLTYzLX1cbm5ldC9pZmUvaWZlLmM6NjQ6RVhQT1JUX1NZTUJPTF9HUEwoaWZlX2VuY29kZSk7XG5uZXQvaWZlL2lmZS5jLTY1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTYwCgkJCQkJCQlvdXRwdXQ6IDEzOAoJCQkJCQkJdGhvdWdodHM6IDMwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUQyBJRkUgQWN0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIHRha2VuIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgaWZlX2VuY29kZWAsIGBpZmVfZGVjb2RlYCwgYW5kIGB0Y2ZfaWZlX2FjdGAgYXJlIGRlZmluaXRlbHkgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24uIFRoZXkgc2VlbSBjZW50cmFsIHRvIHRoZSBjaGFuZ2VzLgoKSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgZm9yIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgaGVyZSwgYW5kIGl0IGxvb2tzIGxpa2UgYE5FVF9DTFNfQUNUYCBpcyByZXF1aXJlZC4gSSYjMzk7dmUgYWxzbyBub3RlZCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zOiBgTkVUX0FDVF9JRkVgIGFuZCwgYWdhaW4sIGBORVRfQ0xTX0FDVGAuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgbW9kaWZ5aW5nIGhvdyB0aGUgaGVhZGVyIGxlbmd0aCBpcyBoYW5kbGVkIOKAkyBnb2luZyBmcm9tIGBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuYCB0byBgRVRIX0hMRU5gLCB3aGljaCBpcyBhIGdvb2QgbW92ZSB0byBwcmV2ZW50IHBvdGVudGlhbCBlcnJvcnMuIEFkZGl0aW9uYWxseSwgYSBuZXcgY2hlY2ssIGB0Y2ZfaWZlX2lzX2V0aF9za2JgLCBpcyBhZGRlZC4gVGhpcyBpcyBncmVhdCwgYXMgaXQgZXhwbGljaXRseSBlbnN1cmVzIHRoZSBwYWNrZXQgaXMgRXRoZXJuZXQsIHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgaW5jb3JyZWN0IHBhcnNpbmcgaWYgdGhlIGRldmljZSBpc24mIzM5O3QgRXRoZXJuZXQtYmFzZWQuIFRoZXNlIGFyZSBpbXBvcnRhbnQgZGVmZW5zaXZlIGNoYW5nZXMgdGhhdCB3aWxsIHByZXZlbnQgYSB3aG9sZSBjbGFzcyBvZiBidWdzLgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgd2Ugc2hvdWxkIGJlIGZ1enppbmcgdGhpcyBjaGFuZ2UuIEl0IGZpeGVzIGEgY3JpdGljYWwgYnVnIGluIGhvdyBUQyBJRkUgaGFuZGxlcyBlbmNhcHN1bGF0aW9uIGFuZCBkZWNhcHN1bGF0aW9uLCBhbmQgaW50cm9kdWNlcyBhIGNyaXRpY2FsIGNoZWNrIGZvciBwYWNrZXQgdHlwZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JrIHByb2Nlc3NpbmcgcGF0aCBhbmQsIHRoZXJlZm9yZSwgdmVyeSBmdXp6LXdvcnRoeS4KClRoZSByZXN1bHRzIGFyZToKCiogICAqKldvcnRoRnV6emluZzogdHJ1ZSoqCiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgYnVnIGluIHRoZSBUQyBJRkUgYWN0aW9uIHJlZ2FyZGluZyBoZWFkZXIgbGVuZ3RoLCB1c2luZyBgRVRIX0hMRU5gIGluc3RlYWQgb2YgYHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW5gIGFuZCBhZGRzIGEgY2hlY2sgZm9yIGV0aGVybmV0IHBhY2tldHMuIEl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgcGF0aC4KKiAgICoqRm9jdXNTeW1ib2xzOioqIGB0Y2ZfaWZlX2FjdGAsIGBpZmVfZW5jb2RlYCwgYGlmZV9kZWNvZGVgCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYE5FVF9BQ1RfSUZFYCwgYE5FVF9DTFNfQUNUYAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0FDVF9JRkUmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y2ZfaWZlX2FjdCYjMzQ7LAogICAgJiMzNDtpZmVfZW5jb2RlJiMzNDssCiAgICAmIzM0O2lmZV9kZWNvZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gdGhlIFRDIElGRSBhY3Rpb24gd2hlcmUgaXQgaW5jb3JyZWN0bHkgdXNlZCBgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGluc3RlYWQgb2YgYEVUSF9ITEVOYCBmb3IgZW5jYXBzdWxhdGlvbi9kZWNhcHN1bGF0aW9uLCBhbmQgYWRkcyBhIGNoZWNrIHRvIGRyb3Agbm9uLUV0aGVybmV0IHBhY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0FDVF9JRkUmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y2ZfaWZlX2FjdCYjMzQ7LAogICAgJiMzNDtpZmVfZW5jb2RlJiMzNDssCiAgICAmIzM0O2lmZV9kZWNvZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gdGhlIFRDIElGRSBhY3Rpb24gd2hlcmUgaXQgaW5jb3JyZWN0bHkgdXNlZCBgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGluc3RlYWQgb2YgYEVUSF9ITEVOYCBmb3IgZW5jYXBzdWxhdGlvbi9kZWNhcHN1bGF0aW9uLCBhbmQgYWRkcyBhIGNoZWNrIHRvIGRyb3Agbm9uLUV0aGVybmV0IHBhY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiB0aGUgSUZFIHBhY2tldCBhY3Rpb24gd2hlcmUgYHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCB3YXMgdXNlZCBpbnN0ZWFkIG9mIGBFVEhfSExFTmAgdG8gcHVzaC9wdWxsIGhlYWRlcnMgYW5kIGNvcHkgZGF0YS4gSWYgYSBwYWNrZXQgaXMgcmVkaXJlY3RlZCBmcm9tIGEgbm9uLUV0aGVybmV0IGRldmljZSAoZS5nLiwgdmlhIG1pcnJlZCksIGBoYXJkX2hlYWRlcl9sZW5gIG1heSBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIEV0aGVybmV0IGhlYWRlciBzaXplLiBUaGlzIG1pc21hdGNoIGNhbiBsZWFkIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzIHdpdGhpbiB0aGUgc29ja2V0IGJ1ZmZlciAoc2tiKSBpZiBgaGFyZF9oZWFkZXJfbGVuYCBpcyBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIHBhY2tldCBkYXRhLCBvciBwYWNrZXQgY29ycnVwdGlvbiBpZiBpdCBpcyBzbWFsbGVyLlxuXG5PdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGluIHNrYiBkYXRhIGJ1ZmZlcnMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLCBhcyB0aGUga2VybmVsJiMzOTtzIHNrYiBhbGxvY2F0aW9uIGFuZCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIGFyZSBleHBsaWNpdGx5IGFubm90YXRlZCB0byBwb2lzb24gdGhlIGhlYWRyb29tIGFuZCB0YWlscm9vbS4gVGhlIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIG5vciBkb2VzIGl0IGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBmdWxseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGlzIGNsYXNzIG9mIGJ1Z3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDU3Yzk2Njg1NDIwYmI0MmIzNWNlMDM3OWZiN2VhNjg2ZDIxZTY0MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDE3OjQxOjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lmZS9pZmUuYyBiL25ldC9pZmUvaWZlLmMKaW5kZXggN2E3NTk0N2EzMWUzMS4uMmRkZjcyNWQzMzg5ZSAxMDA2NDQKLS0tIGEvbmV0L2lmZS9pZmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaWZlL2lmZS5jCkBAIC0zNyw3ICYjNDM7MzcsNyBAQCB2b2lkICppZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiBtZXRhbGVuKQogCSAqIHdoZXJlIE9SSUdEQVRBID0gb3JpZ2luYWwgZXRoZXJuZXQgaGVhZGVyIC4uLgogCSAqLwogCWludCBoZHJtID0gbWV0YWxlbiAmIzQzOyBJRkVfTUVUQUhEUkxFTjsKLQlpbnQgdG90YWxfcHVzaCA9IGhkcm0gJiM0Mzsgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbjsKJiM0MzsJaW50IHRvdGFsX3B1c2ggPSBoZHJtICYjNDM7IEVUSF9ITEVOOwogCXN0cnVjdCBpZmVoZWFkciAqaWZlaGRyOwogCXN0cnVjdCBldGhoZHIgKmlldGhoOwkvKiBpbm5lciBldGhlciBoZWFkZXIgKi8KIAlpbnQgc2tib2ZmID0gMDsKQEAgLTUwLDkgJiM0Mzs1MCw5IEBAIHZvaWQgKmlmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IG1ldGFsZW4pCiAJaWV0aGggPSAoc3RydWN0IGV0aGhkciAqKSBza2ItJmd0O2RhdGE7CiAKIAlfX3NrYl9wdXNoKHNrYiwgdG90YWxfcHVzaCk7Ci0JbWVtY3B5KHNrYi0mZ3Q7ZGF0YSwgaWV0aGgsIHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4pOwomIzQzOwltZW1jcHkoc2tiLSZndDtkYXRhLCBpZXRoaCwgRVRIX0hMRU4pOwogCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7Ci0Jc2tib2ZmICYjNDM7PSBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuOwomIzQzOwlza2JvZmYgJiM0Mzs9IEVUSF9ITEVOOwogCiAJLyogdG90YWwgbWV0YWRhdGEgbGVuZ3RoICovCiAJaWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKSAoc2tiLSZndDtkYXRhICYjNDM7IHNrYm9mZik7CkBAIC02OSwxMiAmIzQzOzY5LDEyIEBAIHZvaWQgKmlmZV9kZWNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2ICptZXRhbGVuKQogCWludCB0b3RhbF9wdWxsOwogCXUxNiBpZmVoZHJsbjsKIAotCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gJiM0MzsgSUZFX01FVEFIRFJMRU4pKQomIzQzOwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBFVEhfSExFTiAmIzQzOyBJRkVfTUVUQUhEUkxFTikpCiAJCXJldHVybiBOVUxMOwogCi0JaWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKSAoc2tiLSZndDtkYXRhICYjNDM7IHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4pOwomIzQzOwlpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBFVEhfSExFTik7CiAJaWZlaGRybG4gPSBudG9ocyhpZmVoZHItJmd0O21ldGFsZW4pOwotCXRvdGFsX3B1bGwgPSBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuICYjNDM7IGlmZWhkcmxuOwomIzQzOwl0b3RhbF9wdWxsID0gRVRIX0hMRU4gJiM0MzsgaWZlaGRybG47CiAKIAlpZiAodW5saWtlbHkoaWZlaGRybG4gJmx0OyAyKSkKIAkJcmV0dXJuIE5VTEw7CkBAIC04Miw3ICYjNDM7ODIsNyBAQCB2b2lkICppZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqbWV0YWxlbikKIAlpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCB0b3RhbF9wdWxsICYjNDM7IEVUSF9ITEVOKSkpCiAJCXJldHVybiBOVUxMOwogCi0JaWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItJmd0O2RhdGEgJiM0Mzsgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CWlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IEVUSF9ITEVOKTsKIAlza2Jfc2V0X21hY19oZWFkZXIoc2tiLCB0b3RhbF9wdWxsKTsKIAlfX3NrYl9wdWxsKHNrYiwgdG90YWxfcHVsbCk7CiAJKm1ldGFsZW4gPSBpZmVoZHJsbiAtIElGRV9NRVRBSERSTEVOOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9pZmUuYyBiL25ldC9zY2hlZC9hY3RfaWZlLmMKaW5kZXggZmYyYjE2ZTM1YjliMC4uOWNlYTcxZmMxZGIzZCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9pZmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X2lmZS5jCkBAIC0yOCw2ICYjNDM7MjgsNyBAQAogI2luY2x1ZGUgJmx0O3VhcGkvbGludXgvdGNfYWN0L3RjX2lmZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC90Y19hY3QvdGNfaWZlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXRoZXJkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWZfYXJwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lmZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC90Y193cmFwcGVyLmgmZ3Q7CiAKQEAgLTcyMyw3ICYjNDM7NzI0LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2RlY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLAogCXRjZl9sYXN0dXNlX3VwZGF0ZSgmYW1wO2lmZS0mZ3Q7dGNmX3RtKTsKIAogCWlmIChza2JfYXRfdGNfaW5ncmVzcyhza2IpKQotCQlza2JfcHVzaChza2IsIHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4pOwomIzQzOwkJc2tiX3B1c2goc2tiLCBFVEhfSExFTik7CiAKIAl0bHZfZGF0YSA9IGlmZV9kZWNvZGUoc2tiLCAmYW1wO21ldGFsZW4pOwogCWlmICh1bmxpa2VseSghdGx2X2RhdGEpKSB7CkBAIC03OTUsNyAmIzQzOzc5Niw3IEBAIHN0YXRpYyBpbnQgdGNmX2lmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSwKIAkgICB3aGVyZSBPUklHREFUQSA9IG9yaWdpbmFsIGV0aGVybmV0IGhlYWRlciAuLi4KIAkgKi8KIAl1MTYgbWV0YWxlbiA9IGlmZV9nZXRfc3ooc2tiLCBwKTsKLQlpbnQgaGRybSA9IG1ldGFsZW4gJiM0Mzsgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiAmIzQzOyBJRkVfTUVUQUhEUkxFTjsKJiM0MzsJaW50IGhkcm0gPSBtZXRhbGVuICYjNDM7IEVUSF9ITEVOICYjNDM7IElGRV9NRVRBSERSTEVOOwogCXVuc2lnbmVkIGludCBza2JvZmYgPSAwOwogCWludCBuZXdfbGVuID0gc2tiLSZndDtsZW4gJiM0MzsgaGRybTsKIAlib29sIGV4Y2VlZF9tdHUgPSBmYWxzZTsKQEAgLTgyNiw3ICYjNDM7ODI3LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLAogCX0KIAogCWlmIChza2JfYXRfdGNfaW5ncmVzcyhza2IpKQotCQlza2JfcHVzaChza2IsIHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4pOwomIzQzOwkJc2tiX3B1c2goc2tiLCBFVEhfSExFTik7CiAKIAlpZmVfbWV0YSA9IGlmZV9lbmNvZGUoc2tiLCBtZXRhbGVuKTsKIAlpZiAoIWlmZV9tZXRhKQpAQCAtODU2LDExICYjNDM7ODU3LDI3IEBAIHN0YXRpYyBpbnQgdGNmX2lmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSwKIAlvZXRoaC0mZ3Q7aF9wcm90byA9IGh0b25zKHAtJmd0O2V0aF90eXBlKTsKIAogCWlmIChza2JfYXRfdGNfaW5ncmVzcyhza2IpKQotCQlza2JfcHVsbChza2IsIHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4pOwomIzQzOwkJc2tiX3B1bGwoc2tiLCBFVEhfSExFTik7CiAKIAlyZXR1cm4gYWN0aW9uOwogfQogCiYjNDM7LyogSUZFIGVuY2Fwc3VsYXRlcyB0aGUgb3JpZ2luYWwgRXRoZXJuZXQgaGVhZGVyIGFuZCwgb24gZGVjb2RlLCBleHBlY3RzIHRvCiYjNDM7ICogZmluZCBvbmUsIHNvIGl0IGNhbiBvbmx5IGV2ZXIgd29yayBvbiBza2JzIHRoYXQgY2Fycnkgb25lLiBMb29wYmFjayBjYXJyaWVzCiYjNDM7ICogRXRoZXJuZXQgaGVhZGVyIGFzIHdlbGwsIHNvIGl0IHF1YWxpZmllcyBoZXJlLgomIzQzOyAqIEF0IGluZ3Jlc3MsIGFsc28gdmVyaWZ5IHRoYXQgdGhlIEwyIGhlYWRlciBhYm91dCB0byBiZSBwdXNoZWQgYmFjayByZWFsbHkKJiM0MzsgKiBpcyBhbiBFdGhlcm5ldCBoZWFkZXIgYmVjYXVzZSB0aGUgc2tiIGNvdWxkJiMzOTt2ZSBiZWVuIHJlZGlyZWN0ZWQgd2l0aCBtaXJyZWQKJiM0MzsgKiBmcm9tIGEgbm9uLUV0aGVybmV0IGRldmljZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCB0Y2ZfaWZlX2lzX2V0aF9za2IoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CWlmIChza2ItJmd0O2Rldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfRVRIRVIgJmFtcDsmYW1wOwomIzQzOwkgICAgc2tiLSZndDtkZXYtJmd0O3R5cGUgIT0gQVJQSFJEX0xPT1BCQUNLKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gIXNrYl9hdF90Y19pbmdyZXNzKHNrYikgfHwgc2tiLSZndDttYWNfbGVuID09IEVUSF9ITEVOOwomIzQzO30KJiM0MzsKIFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2ZfaWZlX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSwKIAkJCQkgIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpCkBAIC04NjksNiAmIzQzOzg4NiwxMyBAQCBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2lmZV9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3QgdGNmX2lmZV9wYXJhbXMgKnA7CiAJaW50IHJldDsKIAomIzQzOwlpZiAodW5saWtlbHkoIXRjZl9pZmVfaXNfZXRoX3NrYihza2IpKSkgewomIzQzOwkJYnN0YXRzX3VwZGF0ZSh0aGlzX2NwdV9wdHIoaWZlLSZndDtjb21tb24uY3B1X2JzdGF0cyksIHNrYik7CiYjNDM7CQl0Y2ZfbGFzdHVzZV91cGRhdGUoJmFtcDtpZmUtJmd0O3RjZl90bSk7CiYjNDM7CQlxc3RhdHNfY3B1X2Ryb3BfaW5jKGlmZS0mZ3Q7Y29tbW9uLmNwdV9xc3RhdHMpOwomIzQzOwkJcmV0dXJuIFRDX0FDVF9TSE9UOwomIzQzOwl9CiYjNDM7CiAJcCA9IHJjdV9kZXJlZmVyZW5jZV9iaChpZmUtJmd0O3BhcmFtcyk7CiAJaWYgKHAtJmd0O2ZsYWdzICZhbXA7IElGRV9FTkNPREUpIHsKIAkJcmV0ID0gdGNmX2lmZV9lbmNvZGUoc2tiLCBhLCByZXMsIHApOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg1MAoJCQkJCQkJb3V0cHV0OiAyNDUKCQkJCQkJCXRob3VnaHRzOiAxNTk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKklGRSBQYXRjaCBBbmFseXNpczogS0FTQU4gdnMuIEtNU0FOKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIGBuZXQvaWZlL2lmZS5jYCBhbmQgYG5ldC9zY2hlZC9hY3RfaWZlLmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgcmVwbGFjaW5nIGBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuYCB3aXRoIGBFVEhfSExFTmAgaW4gYSBmZXcgY3JpdGljYWwgc3BvdHMsIGFuZCBhZGRpbmcgYSBjaGVjayB3aXRoIGB0Y2ZfaWZlX2lzX2V0aF9za2Ioc2tiKWAgdG8gZW5zdXJlIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBFdGhlcm5ldCBvciBsb29wYmFjayBza2JzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8KClRoZSBpc3N1ZSBzZWVtcyB0byBzdGVtIGZyb20gYSBtaXNtYXRjaC4gYHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW5gIG1pZ2h0IGJlIGluY29ycmVjdCBpZiB0aGUgcGFja2V0IG9yaWdpbmF0ZXMgZnJvbSBhIG5vbi1FdGhlcm5ldCBkZXZpY2UsIG9yIGlmIHRoZSBkZXZpY2UmIzM5O3MgaGVhZGVyIGxlbmd0aCBpcyBtaXNjb25maWd1cmVkLiBVc2luZyB0aGUgd3JvbmcgbGVuZ3RoIHdoZW4gcHVzaGluZyBvciBwdWxsaW5nIGhlYWRlcnMgaXMgdGhlIHByb2JsZW0uIEl0IGNvdWxkIGxlYWQgdG8gcmVhZHMvd3JpdGVzIHRoYXQgZ28gb3V0IG9mIGJvdW5kcyBvZiB0aGUgc29ja2V0IGJ1ZmZlciAoYHNrYmApIG9yIGluY29ycmVjdCBvZmZzZXRzLgoKTXkgY29uY2VybiB3YXM6IElmIGBoYXJkX2hlYWRlcl9sZW5gIHdhcyBsYXJnZXIsIHdvdWxkbiYjMzk7dCBgc2tiX3B1c2hgIHBvdGVudGlhbGx5IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGE/IEJ1dCB0aGVuIEkgcmVhbGl6ZWQgYHNrYl9wdXNoYCBqdXN0IG1vdmVzIHRoZSBkYXRhIHBvaW50ZXIgYW5kIGNoYW5nZXMgYGxlbmAuIEl0JiMzOTtzIHRoZSBgbWVtY3B5YCB0aGF0JiMzOTtzIHRoZSBrZXkuIElmIGBoYXJkX2hlYWRlcl9sZW5gIGlzIHRvbyBsYXJnZSwgdGhhdCBgbWVtY3B5YCB3b3VsZCB0cnkgdG8gcmVhZCBiZXlvbmQgdGhlIHBhY2tldCYjMzk7cyBhY3R1YWwgZGF0YS4gSWYgaXQmIzM5O3MgdG9vIHNtYWxsLCB0aGUgRXRoZXJuZXQgaGVhZGVyIHdvdWxkIGJlIGluY29tcGxldGUuIFRoaXMgd291bGQgdGhlbiBsZWFkIHRvIGRhdGEgY29ycnVwdGlvbiBpbiB0aGUgcGFja2V0LCBlaXRoZXIgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIGFuIGluY29ycmVjdCBoZWFkZXIsIHJlc3BlY3RpdmVseS4KClRoZSBrZXkgaXMgdGhhdCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBkZXNpZ25lZCB0byBjYXRjaCB0aGVzZSBvdXQtb2YtYm91bmRzIHJlYWRzIGJlY2F1c2Ugc2tiIGRhdGEgYXJlYXMgaGF2ZSBLQVNBTiBhbm5vdGF0aW9ucy4gS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpcyBmb2N1c2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgS0FTQU4gYWxyZWFkeSBjYXRjaGVzIHRoZSBPT0IgYWNjZXNzZXMuCgpJIHJldmlzaXRlZCB0aGUgY29kZSBhZ2FpbiwgZXNwZWNpYWxseSB0aGlzOgoKYGBgYwotCWludCB0b3RhbF9wdXNoID0gaGRybSAmIzQzOyBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuOwomIzQzOwlpbnQgdG90YWxfcHVzaCA9IGhkcm0gJiM0MzsgRVRIX0hMRU47CmBgYAphbmQKYGBgYwotCW1lbWNweShza2ItJmd0O2RhdGEsIGlldGhoLCBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKTsKJiM0MzsJbWVtY3B5KHNrYi0mZ3Q7ZGF0YSwgaWV0aGgsIEVUSF9ITEVOKTsKYGBgCgpNeSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBpcyBwcmltYXJpbHkgYSBwYWNrZXQgYm91bmRhcnkvaGVhZGVyIGxlbmd0aCBidWcuIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnksIEtBU0FOIGhhbmRsZXMgdGhlIE9PQiBpc3N1ZXMuIFRoZSBwYXRjaCBjb3JyZWN0cyB0aGUgaGVhZGVyIGxlbmd0aC4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyB0byB1c2VyIHNwYWNlIG9yIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLiBJdCBjb3JyZWN0bHkgZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYnVnLCBhbmQgSSYjMzk7bGwgY29uZmlybSB0aGF0IEtBU0FOJiMzOTtzIGFscmVhZHkgY2FwYWJsZSBvZiBjYXRjaGluZyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gdGhlIElGRSBwYWNrZXQgYWN0aW9uIHdoZXJlIGBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgd2FzIHVzZWQgaW5zdGVhZCBvZiBgRVRIX0hMRU5gIHRvIHB1c2gvcHVsbCBoZWFkZXJzIGFuZCBjb3B5IGRhdGEuIElmIGEgcGFja2V0IGlzIHJlZGlyZWN0ZWQgZnJvbSBhIG5vbi1FdGhlcm5ldCBkZXZpY2UgKGUuZy4sIHZpYSBtaXJyZWQpLCBgaGFyZF9oZWFkZXJfbGVuYCBtYXkgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBFdGhlcm5ldCBoZWFkZXIgc2l6ZS4gVGhpcyBtaXNtYXRjaCBjYW4gbGVhZCB0byBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcyB3aXRoaW4gdGhlIHNvY2tldCBidWZmZXIgKHNrYikgaWYgYGhhcmRfaGVhZGVyX2xlbmAgaXMgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBwYWNrZXQgZGF0YSwgb3IgcGFja2V0IGNvcnJ1cHRpb24gaWYgaXQgaXMgc21hbGxlci5cblxuT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiBza2IgZGF0YSBidWZmZXJzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTiwgYXMgdGhlIGtlcm5lbCYjMzk7cyBza2IgYWxsb2NhdGlvbiBhbmQgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyBhcmUgZXhwbGljaXRseSBhbm5vdGF0ZWQgdG8gcG9pc29uIHRoZSBoZWFkcm9vbSBhbmQgdGFpbHJvb20uIFRoZSBidWcgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLCBub3IgZG9lcyBpdCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgZnVsbHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhpcyBjbGFzcyBvZiBidWdzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiB0aGUgSUZFIHBhY2tldCBhY3Rpb24gd2hlcmUgYHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCB3YXMgdXNlZCBpbnN0ZWFkIG9mIGBFVEhfSExFTmAgdG8gcHVzaC9wdWxsIGhlYWRlcnMgYW5kIGNvcHkgZGF0YS4gSWYgYSBwYWNrZXQgaXMgcmVkaXJlY3RlZCBmcm9tIGEgbm9uLUV0aGVybmV0IGRldmljZSAoZS5nLiwgdmlhIG1pcnJlZCksIGBoYXJkX2hlYWRlcl9sZW5gIG1heSBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIEV0aGVybmV0IGhlYWRlciBzaXplLiBUaGlzIG1pc21hdGNoIGNhbiBsZWFkIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzIHdpdGhpbiB0aGUgc29ja2V0IGJ1ZmZlciAoc2tiKSBpZiBgaGFyZF9oZWFkZXJfbGVuYCBpcyBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIHBhY2tldCBkYXRhLCBvciBwYWNrZXQgY29ycnVwdGlvbiBpZiBpdCBpcyBzbWFsbGVyLlxuXG5PdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGluIHNrYiBkYXRhIGJ1ZmZlcnMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLCBhcyB0aGUga2VybmVsJiMzOTtzIHNrYiBhbGxvY2F0aW9uIGFuZCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIGFyZSBleHBsaWNpdGx5IGFubm90YXRlZCB0byBwb2lzb24gdGhlIGhlYWRyb29tIGFuZCB0YWlscm9vbS4gVGhlIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIG5vciBkb2VzIGl0IGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBmdWxseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGlzIGNsYXNzIG9mIGJ1Z3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDE6MzUuNTYwMjAzMDIxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk1ODk2MTkwMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0FDVF9JRkVcIixcbiAgICBcIk5FVF9DTFNfQUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNmX2lmZV9hY3RcIixcbiAgICBcImlmZV9lbmNvZGVcIixcbiAgICBcImlmZV9kZWNvZGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIGluIHRoZSBJRkUgcGFja2V0IGFjdGlvbiB3aGVyZSBgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgd2FzIHVzZWQgaW5zdGVhZCBvZiBgRVRIX0hMRU5gIHRvIHB1c2gvcHVsbCBoZWFkZXJzIGFuZCBjb3B5IGRhdGEuIElmIGEgcGFja2V0IGlzIHJlZGlyZWN0ZWQgZnJvbSBhIG5vbi1FdGhlcm5ldCBkZXZpY2UgKGUuZy4sIHZpYSBtaXJyZWQpLCBgaGFyZF9oZWFkZXJfbGVuYCBtYXkgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBFdGhlcm5ldCBoZWFkZXIgc2l6ZS4gVGhpcyBtaXNtYXRjaCBjYW4gbGVhZCB0byBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcyB3aXRoaW4gdGhlIHNvY2tldCBidWZmZXIgKHNrYikgaWYgYGhhcmRfaGVhZGVyX2xlbmAgaXMgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBwYWNrZXQgZGF0YSwgb3IgcGFja2V0IGNvcnJ1cHRpb24gaWYgaXQgaXMgc21hbGxlci5cXG5cXG5PdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGluIHNrYiBkYXRhIGJ1ZmZlcnMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLCBhcyB0aGUga2VybmVsJ3Mgc2tiIGFsbG9jYXRpb24gYW5kIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgYXJlIGV4cGxpY2l0bHkgYW5ub3RhdGVkIHRvIHBvaXNvbiB0aGUgaGVhZHJvb20gYW5kIHRhaWxyb29tLiBUaGUgYnVnIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcywgbm9yIGRvZXMgaXQgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIGZ1bGx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIHRoaXMgY2xhc3Mgb2YgYnVncywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIGluIHRoZSBUQyBJRkUgYWN0aW9uIHdoZXJlIGl0IGluY29ycmVjdGx5IHVzZWQgYHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGluc3RlYWQgb2YgYEVUSF9ITEVOYCBmb3IgZW5jYXBzdWxhdGlvbi9kZWNhcHN1bGF0aW9uLCBhbmQgYWRkcyBhIGNoZWNrIHRvIGRyb3Agbm9uLUV0aGVybmV0IHBhY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDE6MzUuNTYwMjA4NDcxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDEwMjY2NzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDU3Yzk2Njg1NDIwYmI0MmIzNWNlMDM3OWZiN2VhNjg2ZDIxZTY0MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxNzo0MTozMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaWZlL2lmZS5jIGIvbmV0L2lmZS9pZmUuY1xcbmluZGV4IDdhNzU5NDdhMzFlMzEuLjJkZGY3MjVkMzM4OWUgMTAwNjQ0XFxuLS0tIGEvbmV0L2lmZS9pZmUuY1xcbisrKyBiL25ldC9pZmUvaWZlLmNcXG5AQCAtMzcsNyArMzcsNyBAQCB2b2lkICppZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiBtZXRhbGVuKVxcbiBcXHQgKiB3aGVyZSBPUklHREFUQSA9IG9yaWdpbmFsIGV0aGVybmV0IGhlYWRlciAuLi5cXG4gXFx0ICovXFxuIFxcdGludCBoZHJtID0gbWV0YWxlbiArIElGRV9NRVRBSERSTEVOO1xcbi1cXHRpbnQgdG90YWxfcHVzaCA9IGhkcm0gKyBza2ItXFx1MDAzZWRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xcbitcXHRpbnQgdG90YWxfcHVzaCA9IGhkcm0gKyBFVEhfSExFTjtcXG4gXFx0c3RydWN0IGlmZWhlYWRyICppZmVoZHI7XFxuIFxcdHN0cnVjdCBldGhoZHIgKmlldGhoO1xcdC8qIGlubmVyIGV0aGVyIGhlYWRlciAqL1xcbiBcXHRpbnQgc2tib2ZmID0gMDtcXG5AQCAtNTAsOSArNTAsOSBAQCB2b2lkICppZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiBtZXRhbGVuKVxcbiBcXHRpZXRoaCA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYi1cXHUwMDNlZGF0YTtcXG4gXFxuIFxcdF9fc2tiX3B1c2goc2tiLCB0b3RhbF9wdXNoKTtcXG4tXFx0bWVtY3B5KHNrYi1cXHUwMDNlZGF0YSwgaWV0aGgsIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xcbitcXHRtZW1jcHkoc2tiLVxcdTAwM2VkYXRhLCBpZXRoaCwgRVRIX0hMRU4pO1xcbiBcXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcbi1cXHRza2JvZmYgKz0gc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcXG4rXFx0c2tib2ZmICs9IEVUSF9ITEVOO1xcbiBcXG4gXFx0LyogdG90YWwgbWV0YWRhdGEgbGVuZ3RoICovXFxuIFxcdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikgKHNrYi1cXHUwMDNlZGF0YSArIHNrYm9mZik7XFxuQEAgLTY5LDEyICs2OSwxMiBAQCB2b2lkICppZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqbWV0YWxlbilcXG4gXFx0aW50IHRvdGFsX3B1bGw7XFxuIFxcdHUxNiBpZmVoZHJsbjtcXG4gXFxuLVxcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyBJRkVfTUVUQUhEUkxFTikpXFxuK1xcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIEVUSF9ITEVOICsgSUZFX01FVEFIRFJMRU4pKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikgKHNrYi1cXHUwMDNlZGF0YSArIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xcbitcXHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopKHNrYi1cXHUwMDNlZGF0YSArIEVUSF9ITEVOKTtcXG4gXFx0aWZlaGRybG4gPSBudG9ocyhpZmVoZHItXFx1MDAzZW1ldGFsZW4pO1xcbi1cXHR0b3RhbF9wdWxsID0gc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiArIGlmZWhkcmxuO1xcbitcXHR0b3RhbF9wdWxsID0gRVRIX0hMRU4gKyBpZmVoZHJsbjtcXG4gXFxuIFxcdGlmICh1bmxpa2VseShpZmVoZHJsbiBcXHUwMDNjIDIpKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG5AQCAtODIsNyArODIsNyBAQCB2b2lkICppZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqbWV0YWxlbilcXG4gXFx0aWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgdG90YWxfcHVsbCArIEVUSF9ITEVOKSkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4tXFx0aWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItXFx1MDAzZWRhdGEgKyBza2ItXFx1MDAzZWRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcXG4rXFx0aWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItXFx1MDAzZWRhdGEgKyBFVEhfSExFTik7XFxuIFxcdHNrYl9zZXRfbWFjX2hlYWRlcihza2IsIHRvdGFsX3B1bGwpO1xcbiBcXHRfX3NrYl9wdWxsKHNrYiwgdG90YWxfcHVsbCk7XFxuIFxcdCptZXRhbGVuID0gaWZlaGRybG4gLSBJRkVfTUVUQUhEUkxFTjtcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9pZmUuYyBiL25ldC9zY2hlZC9hY3RfaWZlLmNcXG5pbmRleCBmZjJiMTZlMzViOWIwLi45Y2VhNzFmYzFkYjNkIDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9hY3RfaWZlLmNcXG4rKysgYi9uZXQvc2NoZWQvYWN0X2lmZS5jXFxuQEAgLTI4LDYgKzI4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvdGNfYWN0L3RjX2lmZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3RjX2FjdC90Y19pZmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9hcnAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pZmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC90Y193cmFwcGVyLmhcXHUwMDNlXFxuIFxcbkBAIC03MjMsNyArNzI0LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2RlY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxcbiBcXHR0Y2ZfbGFzdHVzZV91cGRhdGUoXFx1MDAyNmlmZS1cXHUwMDNldGNmX3RtKTtcXG4gXFxuIFxcdGlmIChza2JfYXRfdGNfaW5ncmVzcyhza2IpKVxcbi1cXHRcXHRza2JfcHVzaChza2IsIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xcbitcXHRcXHRza2JfcHVzaChza2IsIEVUSF9ITEVOKTtcXG4gXFxuIFxcdHRsdl9kYXRhID0gaWZlX2RlY29kZShza2IsIFxcdTAwMjZtZXRhbGVuKTtcXG4gXFx0aWYgKHVubGlrZWx5KCF0bHZfZGF0YSkpIHtcXG5AQCAtNzk1LDcgKzc5Niw3IEBAIHN0YXRpYyBpbnQgdGNmX2lmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcXG4gXFx0ICAgd2hlcmUgT1JJR0RBVEEgPSBvcmlnaW5hbCBldGhlcm5ldCBoZWFkZXIgLi4uXFxuIFxcdCAqL1xcbiBcXHR1MTYgbWV0YWxlbiA9IGlmZV9nZXRfc3ooc2tiLCBwKTtcXG4tXFx0aW50IGhkcm0gPSBtZXRhbGVuICsgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiArIElGRV9NRVRBSERSTEVOO1xcbitcXHRpbnQgaGRybSA9IG1ldGFsZW4gKyBFVEhfSExFTiArIElGRV9NRVRBSERSTEVOO1xcbiBcXHR1bnNpZ25lZCBpbnQgc2tib2ZmID0gMDtcXG4gXFx0aW50IG5ld19sZW4gPSBza2ItXFx1MDAzZWxlbiArIGhkcm07XFxuIFxcdGJvb2wgZXhjZWVkX210dSA9IGZhbHNlO1xcbkBAIC04MjYsNyArODI3LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSlcXG4tXFx0XFx0c2tiX3B1c2goc2tiLCBza2ItXFx1MDAzZWRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcXG4rXFx0XFx0c2tiX3B1c2goc2tiLCBFVEhfSExFTik7XFxuIFxcbiBcXHRpZmVfbWV0YSA9IGlmZV9lbmNvZGUoc2tiLCBtZXRhbGVuKTtcXG4gXFx0aWYgKCFpZmVfbWV0YSlcXG5AQCAtODU2LDExICs4NTcsMjcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxcbiBcXHRvZXRoaC1cXHUwMDNlaF9wcm90byA9IGh0b25zKHAtXFx1MDAzZWV0aF90eXBlKTtcXG4gXFxuIFxcdGlmIChza2JfYXRfdGNfaW5ncmVzcyhza2IpKVxcbi1cXHRcXHRza2JfcHVsbChza2IsIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xcbitcXHRcXHRza2JfcHVsbChza2IsIEVUSF9ITEVOKTtcXG4gXFxuIFxcdHJldHVybiBhY3Rpb247XFxuIH1cXG4gXFxuKy8qIElGRSBlbmNhcHN1bGF0ZXMgdGhlIG9yaWdpbmFsIEV0aGVybmV0IGhlYWRlciBhbmQsIG9uIGRlY29kZSwgZXhwZWN0cyB0b1xcbisgKiBmaW5kIG9uZSwgc28gaXQgY2FuIG9ubHkgZXZlciB3b3JrIG9uIHNrYnMgdGhhdCBjYXJyeSBvbmUuIExvb3BiYWNrIGNhcnJpZXNcXG4rICogRXRoZXJuZXQgaGVhZGVyIGFzIHdlbGwsIHNvIGl0IHF1YWxpZmllcyBoZXJlLlxcbisgKiBBdCBpbmdyZXNzLCBhbHNvIHZlcmlmeSB0aGF0IHRoZSBMMiBoZWFkZXIgYWJvdXQgdG8gYmUgcHVzaGVkIGJhY2sgcmVhbGx5XFxuKyAqIGlzIGFuIEV0aGVybmV0IGhlYWRlciBiZWNhdXNlIHRoZSBza2IgY291bGQndmUgYmVlbiByZWRpcmVjdGVkIHdpdGggbWlycmVkXFxuKyAqIGZyb20gYSBub24tRXRoZXJuZXQgZGV2aWNlLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgdGNmX2lmZV9pc19ldGhfc2tiKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0aWYgKHNrYi1cXHUwMDNlZGV2LVxcdTAwM2V0eXBlICE9IEFSUEhSRF9FVEhFUiBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUgIT0gQVJQSFJEX0xPT1BCQUNLKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gIXNrYl9hdF90Y19pbmdyZXNzKHNrYikgfHwgc2tiLVxcdTAwM2VtYWNfbGVuID09IEVUSF9ITEVOO1xcbit9XFxuK1xcbiBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2lmZV9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpXFxuQEAgLTg2OSw2ICs4ODYsMTMgQEAgVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9pZmVfYWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHN0cnVjdCB0Y2ZfaWZlX3BhcmFtcyAqcDtcXG4gXFx0aW50IHJldDtcXG4gXFxuK1xcdGlmICh1bmxpa2VseSghdGNmX2lmZV9pc19ldGhfc2tiKHNrYikpKSB7XFxuK1xcdFxcdGJzdGF0c191cGRhdGUodGhpc19jcHVfcHRyKGlmZS1cXHUwMDNlY29tbW9uLmNwdV9ic3RhdHMpLCBza2IpO1xcbitcXHRcXHR0Y2ZfbGFzdHVzZV91cGRhdGUoXFx1MDAyNmlmZS1cXHUwMDNldGNmX3RtKTtcXG4rXFx0XFx0cXN0YXRzX2NwdV9kcm9wX2luYyhpZmUtXFx1MDAzZWNvbW1vbi5jcHVfcXN0YXRzKTtcXG4rXFx0XFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xcbitcXHR9XFxuK1xcbiBcXHRwID0gcmN1X2RlcmVmZXJlbmNlX2JoKGlmZS1cXHUwMDNlcGFyYW1zKTtcXG4gXFx0aWYgKHAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZFX0VOQ09ERSkge1xcbiBcXHRcXHRyZXQgPSB0Y2ZfaWZlX2VuY29kZShza2IsIGEsIHJlcywgcCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjQxOjM2Ljk3MTA4NjI5NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU2NTU0MTc1MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9BQ1RfSUZFXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjZl9pZmVfYWN0XCIsXG4gICAgXCJpZmVfZW5jb2RlXCIsXG4gICAgXCJpZmVfZGVjb2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gdGhlIFRDIElGRSBhY3Rpb24gd2hlcmUgaXQgaW5jb3JyZWN0bHkgdXNlZCBgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgaW5zdGVhZCBvZiBgRVRIX0hMRU5gIGZvciBlbmNhcHN1bGF0aW9uL2RlY2Fwc3VsYXRpb24sIGFuZCBhZGRzIGEgY2hlY2sgdG8gZHJvcCBub24tRXRoZXJuZXQgcGFja2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIHBhdGggdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNTdjOTY2ODU0MjBiYjQyYjM1Y2UwMzc5ZmI3ZWE2ODZkMjFlNjQxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTc6NDE6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaWZlL2lmZS5jIGIvbmV0L2lmZS9pZmUuY1xuaW5kZXggN2E3NTk0N2EzMWUzMS4uMmRkZjcyNWQzMzg5ZSAxMDA2NDRcbi0tLSBhL25ldC9pZmUvaWZlLmNcbisrKyBiL25ldC9pZmUvaWZlLmNcbkBAIC0zNyw3ICszNyw3IEBAIHZvaWQgKmlmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IG1ldGFsZW4pXG4gXHQgKiB3aGVyZSBPUklHREFUQSA9IG9yaWdpbmFsIGV0aGVybmV0IGhlYWRlciAuLi5cbiBcdCAqL1xuIFx0aW50IGhkcm0gPSBtZXRhbGVuICsgSUZFX01FVEFIRFJMRU47XG4tXHRpbnQgdG90YWxfcHVzaCA9IGhkcm0gKyBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbitcdGludCB0b3RhbF9wdXNoID0gaGRybSArIEVUSF9ITEVOO1xuIFx0c3RydWN0IGlmZWhlYWRyICppZmVoZHI7XG4gXHRzdHJ1Y3QgZXRoaGRyICppZXRoaDtcdC8qIGlubmVyIGV0aGVyIGhlYWRlciAqL1xuIFx0aW50IHNrYm9mZiA9IDA7XG5AQCAtNTAsOSArNTAsOSBAQCB2b2lkICppZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiBtZXRhbGVuKVxuIFx0aWV0aGggPSAoc3RydWN0IGV0aGhkciAqKSBza2ItXHUwMDNlZGF0YTtcbiBcbiBcdF9fc2tiX3B1c2goc2tiLCB0b3RhbF9wdXNoKTtcbi1cdG1lbWNweShza2ItXHUwMDNlZGF0YSwgaWV0aGgsIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbitcdG1lbWNweShza2ItXHUwMDNlZGF0YSwgaWV0aGgsIEVUSF9ITEVOKTtcbiBcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4tXHRza2JvZmYgKz0gc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4rXHRza2JvZmYgKz0gRVRIX0hMRU47XG4gXG4gXHQvKiB0b3RhbCBtZXRhZGF0YSBsZW5ndGggKi9cbiBcdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikgKHNrYi1cdTAwM2VkYXRhICsgc2tib2ZmKTtcbkBAIC02OSwxMiArNjksMTIgQEAgdm9pZCAqaWZlX2RlY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKm1ldGFsZW4pXG4gXHRpbnQgdG90YWxfcHVsbDtcbiBcdHUxNiBpZmVoZHJsbjtcbiBcbi1cdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgSUZFX01FVEFIRFJMRU4pKVxuK1x0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgRVRIX0hMRU4gKyBJRkVfTUVUQUhEUkxFTikpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0aWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKSAoc2tiLVx1MDAzZWRhdGEgKyBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4rXHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopKHNrYi1cdTAwM2VkYXRhICsgRVRIX0hMRU4pO1xuIFx0aWZlaGRybG4gPSBudG9ocyhpZmVoZHItXHUwMDNlbWV0YWxlbik7XG4tXHR0b3RhbF9wdWxsID0gc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyBpZmVoZHJsbjtcbitcdHRvdGFsX3B1bGwgPSBFVEhfSExFTiArIGlmZWhkcmxuO1xuIFxuIFx0aWYgKHVubGlrZWx5KGlmZWhkcmxuIFx1MDAzYyAyKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtODIsNyArODIsNyBAQCB2b2lkICppZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqbWV0YWxlbilcbiBcdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIHRvdGFsX3B1bGwgKyBFVEhfSExFTikpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikoc2tiLVx1MDAzZWRhdGEgKyBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4rXHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopKHNrYi1cdTAwM2VkYXRhICsgRVRIX0hMRU4pO1xuIFx0c2tiX3NldF9tYWNfaGVhZGVyKHNrYiwgdG90YWxfcHVsbCk7XG4gXHRfX3NrYl9wdWxsKHNrYiwgdG90YWxfcHVsbCk7XG4gXHQqbWV0YWxlbiA9IGlmZWhkcmxuIC0gSUZFX01FVEFIRFJMRU47XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9pZmUuYyBiL25ldC9zY2hlZC9hY3RfaWZlLmNcbmluZGV4IGZmMmIxNmUzNWI5YjAuLjljZWE3MWZjMWRiM2QgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X2lmZS5jXG4rKysgYi9uZXQvc2NoZWQvYWN0X2lmZS5jXG5AQCAtMjgsNiArMjgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvdGNfYWN0L3RjX2lmZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y19pZmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9hcnAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pZmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y193cmFwcGVyLmhcdTAwM2VcbiBcbkBAIC03MjMsNyArNzI0LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2RlY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIFx0dGNmX2xhc3R1c2VfdXBkYXRlKFx1MDAyNmlmZS1cdTAwM2V0Y2ZfdG0pO1xuIFxuIFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpXG4tXHRcdHNrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuK1x0XHRza2JfcHVzaChza2IsIEVUSF9ITEVOKTtcbiBcbiBcdHRsdl9kYXRhID0gaWZlX2RlY29kZShza2IsIFx1MDAyNm1ldGFsZW4pO1xuIFx0aWYgKHVubGlrZWx5KCF0bHZfZGF0YSkpIHtcbkBAIC03OTUsNyArNzk2LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIFx0ICAgd2hlcmUgT1JJR0RBVEEgPSBvcmlnaW5hbCBldGhlcm5ldCBoZWFkZXIgLi4uXG4gXHQgKi9cbiBcdHUxNiBtZXRhbGVuID0gaWZlX2dldF9zeihza2IsIHApO1xuLVx0aW50IGhkcm0gPSBtZXRhbGVuICsgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyBJRkVfTUVUQUhEUkxFTjtcbitcdGludCBoZHJtID0gbWV0YWxlbiArIEVUSF9ITEVOICsgSUZFX01FVEFIRFJMRU47XG4gXHR1bnNpZ25lZCBpbnQgc2tib2ZmID0gMDtcbiBcdGludCBuZXdfbGVuID0gc2tiLVx1MDAzZWxlbiArIGhkcm07XG4gXHRib29sIGV4Y2VlZF9tdHUgPSBmYWxzZTtcbkBAIC04MjYsNyArODI3LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIFx0fVxuIFxuIFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpXG4tXHRcdHNrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuK1x0XHRza2JfcHVzaChza2IsIEVUSF9ITEVOKTtcbiBcbiBcdGlmZV9tZXRhID0gaWZlX2VuY29kZShza2IsIG1ldGFsZW4pO1xuIFx0aWYgKCFpZmVfbWV0YSlcbkBAIC04NTYsMTEgKzg1NywyNyBAQCBzdGF0aWMgaW50IHRjZl9pZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXG4gXHRvZXRoaC1cdTAwM2VoX3Byb3RvID0gaHRvbnMocC1cdTAwM2VldGhfdHlwZSk7XG4gXG4gXHRpZiAoc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSlcbi1cdFx0c2tiX3B1bGwoc2tiLCBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4rXHRcdHNrYl9wdWxsKHNrYiwgRVRIX0hMRU4pO1xuIFxuIFx0cmV0dXJuIGFjdGlvbjtcbiB9XG4gXG4rLyogSUZFIGVuY2Fwc3VsYXRlcyB0aGUgb3JpZ2luYWwgRXRoZXJuZXQgaGVhZGVyIGFuZCwgb24gZGVjb2RlLCBleHBlY3RzIHRvXG4rICogZmluZCBvbmUsIHNvIGl0IGNhbiBvbmx5IGV2ZXIgd29yayBvbiBza2JzIHRoYXQgY2Fycnkgb25lLiBMb29wYmFjayBjYXJyaWVzXG4rICogRXRoZXJuZXQgaGVhZGVyIGFzIHdlbGwsIHNvIGl0IHF1YWxpZmllcyBoZXJlLlxuKyAqIEF0IGluZ3Jlc3MsIGFsc28gdmVyaWZ5IHRoYXQgdGhlIEwyIGhlYWRlciBhYm91dCB0byBiZSBwdXNoZWQgYmFjayByZWFsbHlcbisgKiBpcyBhbiBFdGhlcm5ldCBoZWFkZXIgYmVjYXVzZSB0aGUgc2tiIGNvdWxkJ3ZlIGJlZW4gcmVkaXJlY3RlZCB3aXRoIG1pcnJlZFxuKyAqIGZyb20gYSBub24tRXRoZXJuZXQgZGV2aWNlLlxuKyAqL1xuK3N0YXRpYyBib29sIHRjZl9pZmVfaXNfZXRoX3NrYihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdGlmIChza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0VUSEVSIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrYi1cdTAwM2VkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfTE9PUEJBQ0spXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiAhc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSB8fCBza2ItXHUwMDNlbWFjX2xlbiA9PSBFVEhfSExFTjtcbit9XG4rXG4gVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9pZmVfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXG4gXHRcdFx0XHQgIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpXG5AQCAtODY5LDYgKzg4NiwxMyBAQCBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2lmZV9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCB0Y2ZfaWZlX3BhcmFtcyAqcDtcbiBcdGludCByZXQ7XG4gXG4rXHRpZiAodW5saWtlbHkoIXRjZl9pZmVfaXNfZXRoX3NrYihza2IpKSkge1xuK1x0XHRic3RhdHNfdXBkYXRlKHRoaXNfY3B1X3B0cihpZmUtXHUwMDNlY29tbW9uLmNwdV9ic3RhdHMpLCBza2IpO1xuK1x0XHR0Y2ZfbGFzdHVzZV91cGRhdGUoXHUwMDI2aWZlLVx1MDAzZXRjZl90bSk7XG4rXHRcdHFzdGF0c19jcHVfZHJvcF9pbmMoaWZlLVx1MDAzZWNvbW1vbi5jcHVfcXN0YXRzKTtcbitcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1x0fVxuK1xuIFx0cCA9IHJjdV9kZXJlZmVyZW5jZV9iaChpZmUtXHUwMDNlcGFyYW1zKTtcbiBcdGlmIChwLVx1MDAzZWZsYWdzIFx1MDAyNiBJRkVfRU5DT0RFKSB7XG4gXHRcdHJldCA9IHRjZl9pZmVfZW5jb2RlKHNrYiwgYSwgcmVzLCBwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjQxOjM2Ljk3MTA4NzY1NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1Mzg1MjMxMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSUZFIEFjdGlvbiBQYXRjaCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9pZmUvaWZlLmNgIGFuZCBgbmV0L3NjaGVkL2FjdF9pZmUuY2AuIExvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSBmb3IgdGhlIFRDIElGRSAoSW50ZXItRkUpIGFjdGlvbi4gSXQncyBzdWJzdGl0dXRpbmcgYHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCB3aXRoIGBFVEhfSExFTmAgaW4gYGlmZV9lbmNvZGVgLCBgaWZlX2RlY29kZWAsIGB0Y2ZfaWZlX2RlY29kZWAsIGFuZCBgdGNmX2lmZV9lbmNvZGVgLiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHNvIGZhciDigJMgbGlrZWx5IGZpeGluZyBhbiBpbmNvcnJlY3QgaGFyZCBoZWFkZXIgbGVuZ3RoIGFzc3VtcHRpb24uIEl0J3MgYWxzbyBhZGRpbmcgYSBjaGVjayBpbiBgdGNmX2lmZV9hY3RgIHdpdGggYHRjZl9pZmVfaXNfZXRoX3NrYmAgdG8gc3BlY2lmaWNhbGx5IGRyb3Agbm9uLUV0aGVybmV0IHBhY2tldHMgKGV4Y2x1ZGluZyBsb29wYmFjaywgb2YgY291cnNlKS4gVGhhdCdzIGEgcmVhc29uYWJsZSBhZGRpdGlvbiB0byBtYWtlIHRoZSBhY3Rpb24gbW9yZSByb2J1c3QuXG5cblRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgVEMgYWN0aW9ucywgc28gd2UgbmVlZCB0byB0cmFjayBkb3duIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBhbmQgZm9jdXMgb24gdGhlIGFzc29jaWF0ZWQgc3ltYm9scy4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIHNvdXJjZSBkaXJlY3RseSB3aWxsIHRlbGwuIFxuXG5BbHJpZ2h0LCBsZXQncyBncmVwIGZvciB0aGUgY29uZmlnLiBGb3IgYG5ldC9pZmUvaWZlLmNgLCBhIHF1aWNrIGBncmVwIC1yIFwiaWZlLm9cIiBuZXQvaWZlL2AgdHVybnMgdXAgYG9iai0kKENPTkZJR19ORVRfSUZFKSArPSBpZmUub2AsIGNvbmZpcm1pbmcgYENPTkZJR19ORVRfSUZFYCBpcyB0aGUgY29udHJvbC4gQW5kIGZvciBgbmV0L3NjaGVkL2FjdF9pZmUuY2AsIGBncmVwIC1yIFwiYWN0X2lmZS5vXCIgbmV0L3NjaGVkL2AgcmV2ZWFscyBgb2JqLSQoQ09ORklHX05FVF9BQ1RfSUZFKSArPSBhY3RfaWZlLm9gLCB3aGljaCBtZWFucyBgQ09ORklHX05FVF9BQ1RfSUZFYCBnb3Zlcm5zIGl0LiBOb3csIHRoYXQgYWxsIHNlZW1zIHJpZ2h0OyB3ZSBzaG91bGQgdmVyaWZ5IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NTMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzo0MTo0NC41MDk2MTI3MThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI3ODM4ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWZlXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pZmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pZmUvTWFrZWZpbGUtNS1cXG5uZXQvaWZlL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX05FVF9JRkUpICs9IGlmZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjQxOjQ0LjU1MjQwMjUwNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0NjY5MTc4MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBgYWN0X2lmZS5jYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byBgYWN0X2lmZS5jYC4gTXkgaW5pdGlhbCBmb2N1cywgYXMgYWx3YXlzLCBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgdGhpcyBwaWVjZSBvZiBjb2RlIGRlbGl2ZXJzLiBKdWRnaW5nIGJ5IHRoZSBuYW1pbmcgY29udmVudGlvbiwgaXQncyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGludGVycHJldGluZyBhbmQgZXhlY3V0aW5nIElGRSBhY3Rpb25zIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRoZSBpbnRlcmFjdGlvbiBwb2ludHM6IHdoYXQgdHJpZ2dlcnMgdGhlc2UgSUZFIGFjdGlvbnMsIGFuZCB3aGF0IG90aGVyIG1vZHVsZXMgcmVseSBvbiBpdHMgb3V0cHV0IG9yIHNlcnZpY2VzP1xuXG5JJ20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3Iga2V5IGZ1bmN0aW9uIGNhbGxzOiBEb2VzIGl0IHV0aWxpemUgc3RhbmRhcmQgbGlicmFyeSBmdW5jdGlvbnMgZm9yIHBhcnNpbmcgb3Igc3RyaW5nIG1hbmlwdWxhdGlvbj8gQXJlIHRoZXJlIGFueSBjdXN0b20gZGF0YSBzdHJ1Y3R1cmVzIGRlZmluZWQgZm9yIElGRSBhY3Rpb25zPyBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSBzdGF0ZSBtYWNoaW5lIG9yIGEgZGVjaXNpb24tbWFraW5nIHByb2Nlc3MgYmFzZWQgb24gdGhlIGlucHV0IHBhcmFtZXRlcnMuIEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgc3RhdGVtZW50cyB0aGF0IGFmZmVjdCB0aGUgZmxvdyBkZXBlbmRpbmcgb24gZXh0ZXJuYWwgZmFjdG9ycz9cblxuTmV4dCwgSSB3aWxsIHRyeSB0byBkZXRlcm1pbmUgdGhlIGlucHV0cyBhbmQgb3V0cHV0cy4gV2hhdCBraW5kIG9mIGRhdGEgaXMgZmVkIGludG8gdGhlc2UgSUZFIGZ1bmN0aW9ucz8gQXJlIHRoZXJlIGRhdGEgc3RydWN0dXJlcyB0aGF0IHRoZXkgcmVjZWl2ZSwgb3IgZG8gdGhleSByZWFkIGZyb20gZ2xvYmFsIHZhcmlhYmxlcz8gQW5kIHdoYXQgaXMgdGhlIG91dHB1dD8gQXJlIHRoZSByZXN1bHRzIHN0b3JlZD8gQW5kIHdoYXQgcGFydHMgb2YgdGhlIHNvZnR3YXJlIHVzZSB0aGUgcmVzdWx0cz9cblxuT25jZSBJIGhhdmUgdGhlIGxheSBvZiB0aGUgbGFuZCwgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGVycm9yIGhhbmRsaW5nIGFuZCBib3VuZGFyeSBjb25kaXRpb25zLiBUaGlzIGlzIHdoZXJlIEknbGwgc2VhcmNoIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIEhvdyByb2J1c3QgaXMgdGhlIGVycm9yIGRldGVjdGlvbj8gSXMgaXQgZ3JhY2VmdWxseSBoYW5kbGVkIG9yIGRvZXMgaXQgbGVhZCB0byBzeXN0ZW0gY3Jhc2hlcz9cblxuTXkgZm9jdXMgdGhlbiBzaGlmdHMgdG8gdGhlIGludGVybmFsIGxvZ2ljLiBJJ2xsIGF0dGVtcHQgdG8gY29uc3RydWN0IGEgbWVudGFsIG1vZGVsIG9mIHRoZSBleGVjdXRpb24gZmxvdy4gSSBuZWVkIHRvIGRpc2Nlcm4gdGhlIG1haW4gYWxnb3JpdGhtcyB1c2VkLiBXaGF0IHNwZWNpZmljIElGRSBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkPyBBcmUgdGhlcmUgYW55IGNvbXBsZXggY2FsY3VsYXRpb25zLCBvciBvcHRpbWl6YXRpb25zIHRoYXQgYXJlIHdvcnRoIG5vdGluZz8gSSdtIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNvbmN1cnJlbmN5IG9yIG11bHRpLXRocmVhZGluZyBhc3BlY3RzLCBhc3N1bWluZyB0aGlzIGlzIGEgcmVhbC10aW1lIHN5c3RlbTsgYW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIGRhdGEgY29ycnVwdGlvbiBpcyBhIGhpZ2ggcHJpb3JpdHkuXG5cblVsdGltYXRlbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBlZmZpY2llbnRseSBhbmQgZWZmZWN0aXZlbHkgdGhpcyBjb2RlIGZ1bGZpbGxzIGl0cyByb2xlLiBJcyBpdCB3ZWxsLWRvY3VtZW50ZWQ/IEFyZSB0aGUgY29kaW5nIHByYWN0aWNlcyBjb25zaXN0ZW50IHdpdGggdGhlIG92ZXJhbGwgc3R5bGUgZ3VpZGU/IEFueSBwb3RlbnRpYWwgZm9yIHJlZmFjdG9yaW5nPyBEb2VzIGl0IGhhdmUgcm9vbSBmb3IgaW1wcm92ZW1lbnQsIG9yIGRvZXMgaXQgZGVsaXZlciBhIHZlcnkgZWxlZ2FudCBzb2x1dGlvbj8gSXQgYWxsIGNvbWVzIGRvd24gdG8gdW5kZXJzdGFuZGluZyB0aGUgXCJ3aHlcIiBhcyBtdWNoIGFzIHRoZSBcImhvdy5cIlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTcwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzo0MTo1Mi4wMTkzMjI3ODZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyMjYzNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWN0X2lmZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9NYWtlZmlsZT0yNj1vYmotJChDT05GSUdfTkVUX0FDVF9TS0JNT0QpXFx0Kz0gYWN0X3NrYm1vZC5vXFxubmV0L3NjaGVkL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19ORVRfQUNUX0lGRSlcXHQrPSBhY3RfaWZlLm9cXG5uZXQvc2NoZWQvTWFrZWZpbGUtMjgtb2JqLSQoQ09ORklHX05FVF9JRkVfU0tCTUFSSylcXHQrPSBhY3RfbWV0YV9tYXJrLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDE6NTIuMDY0NTUzMTczWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzEzNjgyMDQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBgTkVUX0lGRWAgYW5kIGBORVRfQUNUX0lGRWAgY29uZmlndXJhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBkcmlsbCBkb3duIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBgTkVUX0FDVF9JRkVgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgY29tcGxleGl0eSB1c3VhbGx5IGxpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBmZWF0dXJlcyB0aGlzIGNvbmZpZ3VyYXRpb24gcmVsaWVzIG9uLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBpbmZvcm0gbXkgZGVidWdnaW5nIGFuZCBjdXN0b21pemF0aW9uIGdvaW5nIGZvcndhcmQuIEl0IHNlZW1zIGxpa2UgYSBjb25maWd1cmF0aW9uIGl0ZW0uIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIGNvbnRpbnVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTc4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDE6NTkuMjAxMzc2NTgxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NTQ5MTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQUNUX0lGRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTg4Mj1jb25maWcgTkVUX0FDVF9TS0JNT0RcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTg5Mi1cXG5uZXQvc2NoZWQvS2NvbmZpZzo4OTM6Y29uZmlnIE5FVF9BQ1RfSUZFXFxubmV0L3NjaGVkL0tjb25maWctODk0LVxcdHRyaXN0YXRlIFxcXCJJbnRlci1GRSBhY3Rpb24gYmFzZWQgb24gSUVURiBGb3JDRVMgSW50ZXJGRSBMRkJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjQxOjU5LjI3MDkyOTc3M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NTkyNjcyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFRyYWZmaWMgQ29udHJvbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXJ0aWN1bGFyIGFzcGVjdCBvZiB0aGUgdHJhZmZpYyBjb250cm9sIGNvbmZpZ3VyYXRpb24uIE15IGluc3RpbmN0cyBhcmUgdGVsbGluZyBtZSB0byBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlLiBMZXQncyBzZWUuLi4gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZSBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIEl0J3MgdXN1YWxseSB0aGUgYXV0aG9yaXRhdGl2ZSBzb3VyY2UgZm9yIHRoZSBjb25maWd1cmFibGUgb3B0aW9ucyByZWxhdGVkIHRvIG5ldHdvcmtpbmcgc2NoZWR1bGVycy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYXJvdW5kIGxpbmUgODkzLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgaGlnaC1sZXZlbCBvcHRpb25zIGFyZSwgd2hlcmUgdGhlIGNvcmUgZGVmaW5pdGlvbnMgb3IgbWF5YmUgYSBtb2R1bGUgb3IgZmVhdHVyZSBpcyBkZWNsYXJlZCwgb3IgcGVyaGFwcyBhIHNlY3Rpb24gSSdtIGFscmVhZHkgZmFtaWxpYXIgd2l0aCBpcyBkZWZpbmVkLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgcmVsZXZhbnQgb3B0aW9ucyBhcmUgc3RydWN0dXJlZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgYXJlIGluIHBsYWNlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSXQgd2lsbCBsaWtlbHkgaGlnaGxpZ2h0IHRoZSBzcGVjaWZpYyBmZWF0dXJlcyBJIG5lZWQgdG8gdW5kZXJzdGFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ1OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjQyOjA2LjgzMDE5OTg3OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODg1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODg1OlxcdFxcdGhlbHBcXG4gODg2OlxcdFxcdCBTYXkgWSBoZXJlIHRvIGFsbG93IG1vZGlmaWNhdGlvbiBvZiBza2IgZGF0YVxcbiA4ODc6XFx0XFxuIDg4ODpcXHRcXHQgSWYgdW5zdXJlLCBzYXkgTi5cXG4gODg5OlxcdFxcbiA4OTA6XFx0XFx0IFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gODkxOlxcdFxcdCBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X3NrYm1vZC5cXG4gODkyOlxcdFxcbiA4OTM6XFx0Y29uZmlnIE5FVF9BQ1RfSUZFXFxuIDg5NDpcXHRcXHR0cmlzdGF0ZSBcXFwiSW50ZXItRkUgYWN0aW9uIGJhc2VkIG9uIElFVEYgRm9yQ0VTIEludGVyRkUgTEZCXFxcIlxcbiA4OTU6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxcbiA4OTY6XFx0XFx0c2VsZWN0IE5FVF9JRkVcXG4gODk3OlxcdFxcdGhlbHBcXG4gODk4OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBhbGxvdyBmb3Igc291cmNpbmcgYW5kIHRlcm1pbmF0aW5nIG1ldGFkYXRhXFxuIDg5OTpcXHRcXHQgIEZvciBkZXRhaWxzIHJlZmVyIHRvIG5ldGRldjAxIHBhcGVyOlxcbiA5MDA6XFx0XFx0ICBcXFwiRGlzdHJpYnV0aW5nIExpbnV4IFRyYWZmaWMgQ29udHJvbCBDbGFzc2lmaWVyLUFjdGlvbiBTdWJzeXN0ZW1cXFwiXFxuIDkwMTpcXHRcXHQgICBBdXRob3JzOiBKYW1hbCBIYWRpIFNhbGltIGFuZCBEYW1hc2NlbmUgTS4gSm9hY2hpbXBpbGxhaVxcbiA5MDI6XFx0XFxuIDkwMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gOTA0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9pZmUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjQyOjA2LjgzMDMyMDgwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODUyMTExNjY4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgSUZFIENvbmZpZ3VyYXRpb24gYW5kIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgY3VycmVudCBmb2N1cyBpcyBvbiB0aGUgYE5FVF9BQ1RfSUZFYCBhbmQgYE5FVF9DTFNfQUNUYCBjb25maWd1cmF0aW9ucywgZXNwZWNpYWxseSB0aGVpciBpbnRlcmFjdGlvbiwgd2hpY2ggaXMgdHlwaWNhbCBmb3IgVHJhZmZpYyBDb250cm9sIHNjZW5hcmlvcy4gSSdtIGhvbWluZyBpbiBvbiB0aGUgc3ltYm9sczogYHRjZl9pZmVfYWN0YCwgYHRjZl9pZmVfZW5jb2RlYCwgYHRjZl9pZmVfZGVjb2RlYCwgYGlmZV9lbmNvZGVgLCBhbmQgYGlmZV9kZWNvZGVgLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgdGNmX2lmZV9lbmNvZGVgIGFuZCBgdGNmX2lmZV9kZWNvZGVgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhleSBhcmUgaW5kZWVkIGRlY2xhcmVkIGFzIHN0YXRpYywgYW5kIHRoZXkncmUgZGVmaW5lZCB3aXRoaW4gYG5ldC9zY2hlZC9hY3RfaWZlLmNgLiBUaGlzIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGVpciBzY29wZSBhbmQgcG90ZW50aWFsIGZvciBtb2RpZmljYXRpb24uXG5cbmB0Y2ZfaWZlX2FjdGAsIGl0IHNlZW1zLCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhpcyBtb2R1bGUuIE5vdywgcmVnYXJkaW5nIHRoZSBmdW5jdGlvbnMgYGlmZV9lbmNvZGVgIGFuZCBgaWZlX2RlY29kZWAsIHRoZXNlIGFyZSBub3Qgc3RhdGljLCBhbmQgSSBmaW5kIHRoZXkncmUgZXhwb3J0ZWQgZnJvbSBgbmV0L2lmZS9pZmUuY2AuIFRoaXMgaW1wbGllcyB0aGV5IGFyZSBpbnRlbmRlZCBmb3IgYnJvYWRlciB1c2Ugd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBUaGlzIGFyY2hpdGVjdHVyZSBtYWtlcyBzZW5zZTsgYHRjZl9pZmVfYWN0YCBoYW5kbGVzIHRoZSBUcmFmZmljIENvbnRyb2wgKFRDKSBpbnRlcmFjdGlvbiwgcG90ZW50aWFsbHkgdXNpbmcgdGhlIHNoYXJlZCBgaWZlX2VuY29kZWAgYW5kIGBpZmVfZGVjb2RlYCBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzo0MjoyNS4zNTE0Mzk0NTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2ODcwNDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xfR1BMXFxcXChpZmVfZW5jb2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pZmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pZmUvaWZlLmM9MzQ9dm9pZCAqaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbWV0YWxlbilcXG4tLVxcbm5ldC9pZmUvaWZlLmMtNjMtfVxcbm5ldC9pZmUvaWZlLmM6NjQ6RVhQT1JUX1NZTUJPTF9HUEwoaWZlX2VuY29kZSk7XFxubmV0L2lmZS9pZmUuYy02NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDI6MjUuNDA4MzE0NjMxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5NjY0Nzk3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVEMgSUZFIEFjdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgdGFrZW4gYSBsb29rIGF0IHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBpZmVfZW5jb2RlYCwgYGlmZV9kZWNvZGVgLCBhbmQgYHRjZl9pZmVfYWN0YCBhcmUgZGVmaW5pdGVseSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gVGhleSBzZWVtIGNlbnRyYWwgdG8gdGhlIGNoYW5nZXMuXG5cbkknbSBkb3VibGUtY2hlY2tpbmcgZm9yIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgaGVyZSwgYW5kIGl0IGxvb2tzIGxpa2UgYE5FVF9DTFNfQUNUYCBpcyByZXF1aXJlZC4gSSd2ZSBhbHNvIG5vdGVkIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnM6IGBORVRfQUNUX0lGRWAgYW5kLCBhZ2FpbiwgYE5FVF9DTFNfQUNUYC5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIG1vZGlmeWluZyBob3cgdGhlIGhlYWRlciBsZW5ndGggaXMgaGFuZGxlZCDigJMgZ29pbmcgZnJvbSBgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIHRvIGBFVEhfSExFTmAsIHdoaWNoIGlzIGEgZ29vZCBtb3ZlIHRvIHByZXZlbnQgcG90ZW50aWFsIGVycm9ycy4gQWRkaXRpb25hbGx5LCBhIG5ldyBjaGVjaywgYHRjZl9pZmVfaXNfZXRoX3NrYmAsIGlzIGFkZGVkLiBUaGlzIGlzIGdyZWF0LCBhcyBpdCBleHBsaWNpdGx5IGVuc3VyZXMgdGhlIHBhY2tldCBpcyBFdGhlcm5ldCwgcHJldmVudGluZyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBpbmNvcnJlY3QgcGFyc2luZyBpZiB0aGUgZGV2aWNlIGlzbid0IEV0aGVybmV0LWJhc2VkLiBUaGVzZSBhcmUgaW1wb3J0YW50IGRlZmVuc2l2ZSBjaGFuZ2VzIHRoYXQgd2lsbCBwcmV2ZW50IGEgd2hvbGUgY2xhc3Mgb2YgYnVncy5cblxuQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSdtIGNvbmZpZGVudCB3ZSBzaG91bGQgYmUgZnV6emluZyB0aGlzIGNoYW5nZS4gSXQgZml4ZXMgYSBjcml0aWNhbCBidWcgaW4gaG93IFRDIElGRSBoYW5kbGVzIGVuY2Fwc3VsYXRpb24gYW5kIGRlY2Fwc3VsYXRpb24sIGFuZCBpbnRyb2R1Y2VzIGEgY3JpdGljYWwgY2hlY2sgZm9yIHBhY2tldCB0eXBlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmsgcHJvY2Vzc2luZyBwYXRoIGFuZCwgdGhlcmVmb3JlLCB2ZXJ5IGZ1enotd29ydGh5LlxuXG5UaGUgcmVzdWx0cyBhcmU6XG5cbiogICAqKldvcnRoRnV6emluZzogdHJ1ZSoqXG4qICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyBpbiB0aGUgVEMgSUZFIGFjdGlvbiByZWdhcmRpbmcgaGVhZGVyIGxlbmd0aCwgdXNpbmcgYEVUSF9ITEVOYCBpbnN0ZWFkIG9mIGBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgYW5kIGFkZHMgYSBjaGVjayBmb3IgZXRoZXJuZXQgcGFja2V0cy4gSXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoLlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGB0Y2ZfaWZlX2FjdGAsIGBpZmVfZW5jb2RlYCwgYGlmZV9kZWNvZGVgXG4qICAgKipFbmFibGVDb25maWdzOioqIGBORVRfQUNUX0lGRWAsIGBORVRfQ0xTX0FDVGBcblxuXG4iLCJJbnB1dFRva2VucyI6NjU2MCwiT3V0cHV0VG9rZW5zIjoxMzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDI6MzMuMzc0Nzk2NTIyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNDYxMDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQUNUX0lGRVwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2ZfaWZlX2FjdFwiLFxuICAgIFwiaWZlX2VuY29kZVwiLFxuICAgIFwiaWZlX2RlY29kZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIGluIHRoZSBUQyBJRkUgYWN0aW9uIHdoZXJlIGl0IGluY29ycmVjdGx5IHVzZWQgYHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGluc3RlYWQgb2YgYEVUSF9ITEVOYCBmb3IgZW5jYXBzdWxhdGlvbi9kZWNhcHN1bGF0aW9uLCBhbmQgYWRkcyBhIGNoZWNrIHRvIGRyb3Agbm9uLUV0aGVybmV0IHBhY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQUNUX0lGRVwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2ZfaWZlX2FjdFwiLFxuICAgIFwiaWZlX2VuY29kZVwiLFxuICAgIFwiaWZlX2RlY29kZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIGluIHRoZSBUQyBJRkUgYWN0aW9uIHdoZXJlIGl0IGluY29ycmVjdGx5IHVzZWQgYHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGluc3RlYWQgb2YgYEVUSF9ITEVOYCBmb3IgZW5jYXBzdWxhdGlvbi9kZWNhcHN1bGF0aW9uLCBhbmQgYWRkcyBhIGNoZWNrIHRvIGRyb3Agbm9uLUV0aGVybmV0IHBhY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDI6MzMuNTI1MjY2ODI2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTYyNDU0NTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjQyOjMzLjUyNjA4NDIyN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMTYyMzcyNDgwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gdGhlIElGRSBwYWNrZXQgYWN0aW9uIHdoZXJlIGBza2ItXFx1MDAzZWRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCB3YXMgdXNlZCBpbnN0ZWFkIG9mIGBFVEhfSExFTmAgdG8gcHVzaC9wdWxsIGhlYWRlcnMgYW5kIGNvcHkgZGF0YS4gSWYgYSBwYWNrZXQgaXMgcmVkaXJlY3RlZCBmcm9tIGEgbm9uLUV0aGVybmV0IGRldmljZSAoZS5nLiwgdmlhIG1pcnJlZCksIGBoYXJkX2hlYWRlcl9sZW5gIG1heSBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIEV0aGVybmV0IGhlYWRlciBzaXplLiBUaGlzIG1pc21hdGNoIGNhbiBsZWFkIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzIHdpdGhpbiB0aGUgc29ja2V0IGJ1ZmZlciAoc2tiKSBpZiBgaGFyZF9oZWFkZXJfbGVuYCBpcyBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIHBhY2tldCBkYXRhLCBvciBwYWNrZXQgY29ycnVwdGlvbiBpZiBpdCBpcyBzbWFsbGVyLlxcblxcbk91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW4gc2tiIGRhdGEgYnVmZmVycyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIGFzIHRoZSBrZXJuZWwncyBza2IgYWxsb2NhdGlvbiBhbmQgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyBhcmUgZXhwbGljaXRseSBhbm5vdGF0ZWQgdG8gcG9pc29uIHRoZSBoZWFkcm9vbSBhbmQgdGFpbHJvb20uIFRoZSBidWcgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLCBub3IgZG9lcyBpdCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgZnVsbHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhpcyBjbGFzcyBvZiBidWdzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDU3Yzk2Njg1NDIwYmI0MmIzNWNlMDM3OWZiN2VhNjg2ZDIxZTY0MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDE3OjQxOjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lmZS9pZmUuYyBiL25ldC9pZmUvaWZlLmNcbmluZGV4IDdhNzU5NDdhMzFlMzEuLjJkZGY3MjVkMzM4OWUgMTAwNjQ0XG4tLS0gYS9uZXQvaWZlL2lmZS5jXG4rKysgYi9uZXQvaWZlL2lmZS5jXG5AQCAtMzcsNyArMzcsNyBAQCB2b2lkICppZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiBtZXRhbGVuKVxuIFx0ICogd2hlcmUgT1JJR0RBVEEgPSBvcmlnaW5hbCBldGhlcm5ldCBoZWFkZXIgLi4uXG4gXHQgKi9cbiBcdGludCBoZHJtID0gbWV0YWxlbiArIElGRV9NRVRBSERSTEVOO1xuLVx0aW50IHRvdGFsX3B1c2ggPSBoZHJtICsgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4rXHRpbnQgdG90YWxfcHVzaCA9IGhkcm0gKyBFVEhfSExFTjtcbiBcdHN0cnVjdCBpZmVoZWFkciAqaWZlaGRyO1xuIFx0c3RydWN0IGV0aGhkciAqaWV0aGg7XHQvKiBpbm5lciBldGhlciBoZWFkZXIgKi9cbiBcdGludCBza2JvZmYgPSAwO1xuQEAgLTUwLDkgKzUwLDkgQEAgdm9pZCAqaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbWV0YWxlbilcbiBcdGlldGhoID0gKHN0cnVjdCBldGhoZHIgKikgc2tiLVx1MDAzZWRhdGE7XG4gXG4gXHRfX3NrYl9wdXNoKHNrYiwgdG90YWxfcHVzaCk7XG4tXHRtZW1jcHkoc2tiLVx1MDAzZWRhdGEsIGlldGhoLCBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4rXHRtZW1jcHkoc2tiLVx1MDAzZWRhdGEsIGlldGhoLCBFVEhfSExFTik7XG4gXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuLVx0c2tib2ZmICs9IHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuK1x0c2tib2ZmICs9IEVUSF9ITEVOO1xuIFxuIFx0LyogdG90YWwgbWV0YWRhdGEgbGVuZ3RoICovXG4gXHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopIChza2ItXHUwMDNlZGF0YSArIHNrYm9mZik7XG5AQCAtNjksMTIgKzY5LDEyIEBAIHZvaWQgKmlmZV9kZWNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2ICptZXRhbGVuKVxuIFx0aW50IHRvdGFsX3B1bGw7XG4gXHR1MTYgaWZlaGRybG47XG4gXG4tXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiArIElGRV9NRVRBSERSTEVOKSlcbitcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIEVUSF9ITEVOICsgSUZFX01FVEFIRFJMRU4pKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikgKHNrYi1cdTAwM2VkYXRhICsgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuK1x0aWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItXHUwMDNlZGF0YSArIEVUSF9ITEVOKTtcbiBcdGlmZWhkcmxuID0gbnRvaHMoaWZlaGRyLVx1MDAzZW1ldGFsZW4pO1xuLVx0dG90YWxfcHVsbCA9IHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgaWZlaGRybG47XG4rXHR0b3RhbF9wdWxsID0gRVRIX0hMRU4gKyBpZmVoZHJsbjtcbiBcbiBcdGlmICh1bmxpa2VseShpZmVoZHJsbiBcdTAwM2MgMikpXG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCAqaWZlX2RlY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKm1ldGFsZW4pXG4gXHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCB0b3RhbF9wdWxsICsgRVRIX0hMRU4pKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopKHNrYi1cdTAwM2VkYXRhICsgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuK1x0aWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItXHUwMDNlZGF0YSArIEVUSF9ITEVOKTtcbiBcdHNrYl9zZXRfbWFjX2hlYWRlcihza2IsIHRvdGFsX3B1bGwpO1xuIFx0X19za2JfcHVsbChza2IsIHRvdGFsX3B1bGwpO1xuIFx0Km1ldGFsZW4gPSBpZmVoZHJsbiAtIElGRV9NRVRBSERSTEVOO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfaWZlLmMgYi9uZXQvc2NoZWQvYWN0X2lmZS5jXG5pbmRleCBmZjJiMTZlMzViOWIwLi45Y2VhNzFmYzFkYjNkIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9pZmUuY1xuKysrIGIvbmV0L3NjaGVkL2FjdF9pZmUuY1xuQEAgLTI4LDYgKzI4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L3RjX2FjdC90Y19pZmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfaWZlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYXJwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaWZlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNfd3JhcHBlci5oXHUwMDNlXG4gXG5AQCAtNzIzLDcgKzcyNCw3IEBAIHN0YXRpYyBpbnQgdGNmX2lmZV9kZWNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcbiBcdHRjZl9sYXN0dXNlX3VwZGF0ZShcdTAwMjZpZmUtXHUwMDNldGNmX3RtKTtcbiBcbiBcdGlmIChza2JfYXRfdGNfaW5ncmVzcyhza2IpKVxuLVx0XHRza2JfcHVzaChza2IsIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbitcdFx0c2tiX3B1c2goc2tiLCBFVEhfSExFTik7XG4gXG4gXHR0bHZfZGF0YSA9IGlmZV9kZWNvZGUoc2tiLCBcdTAwMjZtZXRhbGVuKTtcbiBcdGlmICh1bmxpa2VseSghdGx2X2RhdGEpKSB7XG5AQCAtNzk1LDcgKzc5Niw3IEBAIHN0YXRpYyBpbnQgdGNmX2lmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcbiBcdCAgIHdoZXJlIE9SSUdEQVRBID0gb3JpZ2luYWwgZXRoZXJuZXQgaGVhZGVyIC4uLlxuIFx0ICovXG4gXHR1MTYgbWV0YWxlbiA9IGlmZV9nZXRfc3ooc2tiLCBwKTtcbi1cdGludCBoZHJtID0gbWV0YWxlbiArIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgSUZFX01FVEFIRFJMRU47XG4rXHRpbnQgaGRybSA9IG1ldGFsZW4gKyBFVEhfSExFTiArIElGRV9NRVRBSERSTEVOO1xuIFx0dW5zaWduZWQgaW50IHNrYm9mZiA9IDA7XG4gXHRpbnQgbmV3X2xlbiA9IHNrYi1cdTAwM2VsZW4gKyBoZHJtO1xuIFx0Ym9vbCBleGNlZWRfbXR1ID0gZmFsc2U7XG5AQCAtODI2LDcgKzgyNyw3IEBAIHN0YXRpYyBpbnQgdGNmX2lmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcbiBcdH1cbiBcbiBcdGlmIChza2JfYXRfdGNfaW5ncmVzcyhza2IpKVxuLVx0XHRza2JfcHVzaChza2IsIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbitcdFx0c2tiX3B1c2goc2tiLCBFVEhfSExFTik7XG4gXG4gXHRpZmVfbWV0YSA9IGlmZV9lbmNvZGUoc2tiLCBtZXRhbGVuKTtcbiBcdGlmICghaWZlX21ldGEpXG5AQCAtODU2LDExICs4NTcsMjcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIFx0b2V0aGgtXHUwMDNlaF9wcm90byA9IGh0b25zKHAtXHUwMDNlZXRoX3R5cGUpO1xuIFxuIFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpXG4tXHRcdHNrYl9wdWxsKHNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuK1x0XHRza2JfcHVsbChza2IsIEVUSF9ITEVOKTtcbiBcbiBcdHJldHVybiBhY3Rpb247XG4gfVxuIFxuKy8qIElGRSBlbmNhcHN1bGF0ZXMgdGhlIG9yaWdpbmFsIEV0aGVybmV0IGhlYWRlciBhbmQsIG9uIGRlY29kZSwgZXhwZWN0cyB0b1xuKyAqIGZpbmQgb25lLCBzbyBpdCBjYW4gb25seSBldmVyIHdvcmsgb24gc2ticyB0aGF0IGNhcnJ5IG9uZS4gTG9vcGJhY2sgY2Fycmllc1xuKyAqIEV0aGVybmV0IGhlYWRlciBhcyB3ZWxsLCBzbyBpdCBxdWFsaWZpZXMgaGVyZS5cbisgKiBBdCBpbmdyZXNzLCBhbHNvIHZlcmlmeSB0aGF0IHRoZSBMMiBoZWFkZXIgYWJvdXQgdG8gYmUgcHVzaGVkIGJhY2sgcmVhbGx5XG4rICogaXMgYW4gRXRoZXJuZXQgaGVhZGVyIGJlY2F1c2UgdGhlIHNrYiBjb3VsZCd2ZSBiZWVuIHJlZGlyZWN0ZWQgd2l0aCBtaXJyZWRcbisgKiBmcm9tIGEgbm9uLUV0aGVybmV0IGRldmljZS5cbisgKi9cbitzdGF0aWMgYm9vbCB0Y2ZfaWZlX2lzX2V0aF9za2IoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRpZiAoc2tiLVx1MDAzZWRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9FVEhFUiBcdTAwMjZcdTAwMjZcbitcdCAgICBza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0xPT1BCQUNLKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gIXNrYl9hdF90Y19pbmdyZXNzKHNrYikgfHwgc2tiLVx1MDAzZW1hY19sZW4gPT0gRVRIX0hMRU47XG4rfVxuK1xuIFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2ZfaWZlX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgdGNmX3Jlc3VsdCAqcmVzKVxuQEAgLTg2OSw2ICs4ODYsMTMgQEAgVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9pZmVfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgdGNmX2lmZV9wYXJhbXMgKnA7XG4gXHRpbnQgcmV0O1xuIFxuK1x0aWYgKHVubGlrZWx5KCF0Y2ZfaWZlX2lzX2V0aF9za2Ioc2tiKSkpIHtcbitcdFx0YnN0YXRzX3VwZGF0ZSh0aGlzX2NwdV9wdHIoaWZlLVx1MDAzZWNvbW1vbi5jcHVfYnN0YXRzKSwgc2tiKTtcbitcdFx0dGNmX2xhc3R1c2VfdXBkYXRlKFx1MDAyNmlmZS1cdTAwM2V0Y2ZfdG0pO1xuK1x0XHRxc3RhdHNfY3B1X2Ryb3BfaW5jKGlmZS1cdTAwM2Vjb21tb24uY3B1X3FzdGF0cyk7XG4rXHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbitcdH1cbitcbiBcdHAgPSByY3VfZGVyZWZlcmVuY2VfYmgoaWZlLVx1MDAzZXBhcmFtcyk7XG4gXHRpZiAocC1cdTAwM2VmbGFncyBcdTAwMjYgSUZFX0VOQ09ERSkge1xuIFx0XHRyZXQgPSB0Y2ZfaWZlX2VuY29kZShza2IsIGEsIHJlcywgcCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzo0MjozMy41MjYwODc1ODdaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE2MjM3MDE1MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSUZFIFBhdGNoIEFuYWx5c2lzOiBLQVNBTiB2cy4gS01TQU4qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIGBuZXQvaWZlL2lmZS5jYCBhbmQgYG5ldC9zY2hlZC9hY3RfaWZlLmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgcmVwbGFjaW5nIGBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgd2l0aCBgRVRIX0hMRU5gIGluIGEgZmV3IGNyaXRpY2FsIHNwb3RzLCBhbmQgYWRkaW5nIGEgY2hlY2sgd2l0aCBgdGNmX2lmZV9pc19ldGhfc2tiKHNrYilgIHRvIGVuc3VyZSBpdCdzIGRlYWxpbmcgd2l0aCBFdGhlcm5ldCBvciBsb29wYmFjayBza2JzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz9cblxuVGhlIGlzc3VlIHNlZW1zIHRvIHN0ZW0gZnJvbSBhIG1pc21hdGNoLiBgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIG1pZ2h0IGJlIGluY29ycmVjdCBpZiB0aGUgcGFja2V0IG9yaWdpbmF0ZXMgZnJvbSBhIG5vbi1FdGhlcm5ldCBkZXZpY2UsIG9yIGlmIHRoZSBkZXZpY2UncyBoZWFkZXIgbGVuZ3RoIGlzIG1pc2NvbmZpZ3VyZWQuIFVzaW5nIHRoZSB3cm9uZyBsZW5ndGggd2hlbiBwdXNoaW5nIG9yIHB1bGxpbmcgaGVhZGVycyBpcyB0aGUgcHJvYmxlbS4gSXQgY291bGQgbGVhZCB0byByZWFkcy93cml0ZXMgdGhhdCBnbyBvdXQgb2YgYm91bmRzIG9mIHRoZSBzb2NrZXQgYnVmZmVyIChgc2tiYCkgb3IgaW5jb3JyZWN0IG9mZnNldHMuXG5cbk15IGNvbmNlcm4gd2FzOiBJZiBgaGFyZF9oZWFkZXJfbGVuYCB3YXMgbGFyZ2VyLCB3b3VsZG4ndCBgc2tiX3B1c2hgIHBvdGVudGlhbGx5IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGE/IEJ1dCB0aGVuIEkgcmVhbGl6ZWQgYHNrYl9wdXNoYCBqdXN0IG1vdmVzIHRoZSBkYXRhIHBvaW50ZXIgYW5kIGNoYW5nZXMgYGxlbmAuIEl0J3MgdGhlIGBtZW1jcHlgIHRoYXQncyB0aGUga2V5LiBJZiBgaGFyZF9oZWFkZXJfbGVuYCBpcyB0b28gbGFyZ2UsIHRoYXQgYG1lbWNweWAgd291bGQgdHJ5IHRvIHJlYWQgYmV5b25kIHRoZSBwYWNrZXQncyBhY3R1YWwgZGF0YS4gSWYgaXQncyB0b28gc21hbGwsIHRoZSBFdGhlcm5ldCBoZWFkZXIgd291bGQgYmUgaW5jb21wbGV0ZS4gVGhpcyB3b3VsZCB0aGVuIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uIGluIHRoZSBwYWNrZXQsIGVpdGhlciBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb3IgYW4gaW5jb3JyZWN0IGhlYWRlciwgcmVzcGVjdGl2ZWx5LlxuXG5UaGUga2V5IGlzIHRoYXQgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgaXMgZGVzaWduZWQgdG8gY2F0Y2ggdGhlc2Ugb3V0LW9mLWJvdW5kcyByZWFkcyBiZWNhdXNlIHNrYiBkYXRhIGFyZWFzIGhhdmUgS0FTQU4gYW5ub3RhdGlvbnMuIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXMgZm9jdXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnV0IEtBU0FOIGFscmVhZHkgY2F0Y2hlcyB0aGUgT09CIGFjY2Vzc2VzLlxuXG5JIHJldmlzaXRlZCB0aGUgY29kZSBhZ2FpbiwgZXNwZWNpYWxseSB0aGlzOlxuXG5gYGBjXG4tXHRpbnQgdG90YWxfcHVzaCA9IGhkcm0gKyBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbitcdGludCB0b3RhbF9wdXNoID0gaGRybSArIEVUSF9ITEVOO1xuYGBgXG5hbmRcbmBgYGNcbi1cdG1lbWNweShza2ItXHUwMDNlZGF0YSwgaWV0aGgsIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbitcdG1lbWNweShza2ItXHUwMDNlZGF0YSwgaWV0aGgsIEVUSF9ITEVOKTtcbmBgYFxuXG5NeSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBpcyBwcmltYXJpbHkgYSBwYWNrZXQgYm91bmRhcnkvaGVhZGVyIGxlbmd0aCBidWcuIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnksIEtBU0FOIGhhbmRsZXMgdGhlIE9PQiBpc3N1ZXMuIFRoZSBwYXRjaCBjb3JyZWN0cyB0aGUgaGVhZGVyIGxlbmd0aC4gSXQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2Ugb3IgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMuIEl0IGNvcnJlY3RseSBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBidWcsIGFuZCBJJ2xsIGNvbmZpcm0gdGhhdCBLQVNBTidzIGFscmVhZHkgY2FwYWJsZSBvZiBjYXRjaGluZyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg1MCwiT3V0cHV0VG9rZW5zIjoyNDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTk3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDI6NTUuMTQ5NzkyOTc2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiB0aGUgSUZFIHBhY2tldCBhY3Rpb24gd2hlcmUgYHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW5gIHdhcyB1c2VkIGluc3RlYWQgb2YgYEVUSF9ITEVOYCB0byBwdXNoL3B1bGwgaGVhZGVycyBhbmQgY29weSBkYXRhLiBJZiBhIHBhY2tldCBpcyByZWRpcmVjdGVkIGZyb20gYSBub24tRXRoZXJuZXQgZGV2aWNlIChlLmcuLCB2aWEgbWlycmVkKSwgYGhhcmRfaGVhZGVyX2xlbmAgbWF5IG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgRXRoZXJuZXQgaGVhZGVyIHNpemUuIFRoaXMgbWlzbWF0Y2ggY2FuIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyByZWFkcyBvciB3cml0ZXMgd2l0aGluIHRoZSBzb2NrZXQgYnVmZmVyIChza2IpIGlmIGBoYXJkX2hlYWRlcl9sZW5gIGlzIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgcGFja2V0IGRhdGEsIG9yIHBhY2tldCBjb3JydXB0aW9uIGlmIGl0IGlzIHNtYWxsZXIuXFxuXFxuT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiBza2IgZGF0YSBidWZmZXJzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTiwgYXMgdGhlIGtlcm5lbCdzIHNrYiBhbGxvY2F0aW9uIGFuZCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIGFyZSBleHBsaWNpdGx5IGFubm90YXRlZCB0byBwb2lzb24gdGhlIGhlYWRyb29tIGFuZCB0YWlscm9vbS4gVGhlIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIG5vciBkb2VzIGl0IGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBmdWxseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGlzIGNsYXNzIG9mIGJ1Z3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiB0aGUgSUZFIHBhY2tldCBhY3Rpb24gd2hlcmUgYHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW5gIHdhcyB1c2VkIGluc3RlYWQgb2YgYEVUSF9ITEVOYCB0byBwdXNoL3B1bGwgaGVhZGVycyBhbmQgY29weSBkYXRhLiBJZiBhIHBhY2tldCBpcyByZWRpcmVjdGVkIGZyb20gYSBub24tRXRoZXJuZXQgZGV2aWNlIChlLmcuLCB2aWEgbWlycmVkKSwgYGhhcmRfaGVhZGVyX2xlbmAgbWF5IG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgRXRoZXJuZXQgaGVhZGVyIHNpemUuIFRoaXMgbWlzbWF0Y2ggY2FuIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyByZWFkcyBvciB3cml0ZXMgd2l0aGluIHRoZSBzb2NrZXQgYnVmZmVyIChza2IpIGlmIGBoYXJkX2hlYWRlcl9sZW5gIGlzIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgcGFja2V0IGRhdGEsIG9yIHBhY2tldCBjb3JydXB0aW9uIGlmIGl0IGlzIHNtYWxsZXIuXFxuXFxuT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiBza2IgZGF0YSBidWZmZXJzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTiwgYXMgdGhlIGtlcm5lbCdzIHNrYiBhbGxvY2F0aW9uIGFuZCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIGFyZSBleHBsaWNpdGx5IGFubm90YXRlZCB0byBwb2lzb24gdGhlIGhlYWRyb29tIGFuZCB0YWlscm9vbS4gVGhlIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIG5vciBkb2VzIGl0IGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBmdWxseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGlzIGNsYXNzIG9mIGJ1Z3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowzzmxd[1] Phase: Succeeded StartedAt: 2026-08-21 17:43:06 +0000 UTC FinishedAt: 2026-08-21 17:43:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzmxd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-21 17:43:06 +0000 UTC FinishedAt: 2026-08-21 17:43:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzmxd[2] Phase: Succeeded StartedAt: 2026-08-21 17:43:06 +0000 UTC FinishedAt: 2026-08-21 21:24:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 17:43:06 +0000 UTC FinishedAt: 2026-08-21 21:24:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 17:43:06 +0000 UTC FinishedAt: 2026-08-21 17:43:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 17:43:06 +0000 UTC FinishedAt: 2026-08-21 17:43:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"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-workflowzzmxd/series-workflowzzmxd-convert-artifact-2230397686/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 17:43:16 +0000 UTC FinishedAt: 2026-08-21 18:00:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 17:43:16 +0000 UTC FinishedAt: 2026-08-21 18:00:08 +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:*0b4ecd33-7244-4031-bc25-c1fded98475e,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-workflowzzmxd/series-workflowzzmxd-convert-artifact-2230397686/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": "6fe90529-51bf-43a7-8ee5-fb7285ada4b7", "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-workflowzzmxd/series-workflowzzmxd-build-action-3092727308/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 17:43:16 +0000 UTC FinishedAt: 2026-08-21 17:59:58 +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:*0b4ecd33-7244-4031-bc25-c1fded98475e,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-workflowzzmxd/series-workflowzzmxd-convert-artifact-2230397686/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": "6fe90529-51bf-43a7-8ee5-fb7285ada4b7", "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-workflowzzmxd/series-workflowzzmxd-build-action-3092727308/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 18:00:08 +0000 UTC FinishedAt: 2026-08-21 18:00:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 18:00:08 +0000 UTC FinishedAt: 2026-08-21 18:00:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 18:00:08 +0000 UTC FinishedAt: 2026-08-21 18:00:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 18:00:08 +0000 UTC FinishedAt: 2026-08-21 18:00:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-workflowzzmxd/series-workflowzzmxd-convert-artifact-2348334729/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 18:00:18 +0000 UTC FinishedAt: 2026-08-21 18:02:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 18:00:18 +0000 UTC FinishedAt: 2026-08-21 18:01:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6fe90529-51bf-43a7-8ee5-fb7285ada4b7,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-workflowzzmxd/series-workflowzzmxd-build-action-3092727308/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-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 18:02:07 +0000 UTC FinishedAt: 2026-08-21 18:02:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 18:02:07 +0000 UTC FinishedAt: 2026-08-21 18:02:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 18:02:07 +0000 UTC FinishedAt: 2026-08-21 18:19:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 18:02:07 +0000 UTC FinishedAt: 2026-08-21 18:19:21 +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:*0b4ecd33-7244-4031-bc25-c1fded98475e,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-workflowzzmxd/series-workflowzzmxd-convert-artifact-2348334729/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": "8bd3783c-9855-43c2-b67a-ea4689de7ed2", "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-workflowzzmxd/series-workflowzzmxd-build-action-3787833445/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 18:02:07 +0000 UTC FinishedAt: 2026-08-21 18:19:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0b4ecd33-7244-4031-bc25-c1fded98475e,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-workflowzzmxd/series-workflowzzmxd-convert-artifact-2348334729/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": "8bd3783c-9855-43c2-b67a-ea4689de7ed2", "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-workflowzzmxd/series-workflowzzmxd-build-action-3787833445/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 18:19:21 +0000 UTC FinishedAt: 2026-08-21 18:19:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 18:19:21 +0000 UTC FinishedAt: 2026-08-21 18:19:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 18:19:21 +0000 UTC FinishedAt: 2026-08-21 18:21:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 18:19:21 +0000 UTC FinishedAt: 2026-08-21 18:20:56 +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:*8bd3783c-9855-43c2-b67a-ea4689de7ed2,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-workflowzzmxd/series-workflowzzmxd-build-action-3787833445/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-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 18:21:06 +0000 UTC FinishedAt: 2026-08-21 21:24:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 18:21:06 +0000 UTC FinishedAt: 2026-08-21 21:24:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"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:*6fe90529-51bf-43a7-8ee5-fb7285ada4b7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8bd3783c-9855-43c2-b67a-ea4689de7ed2,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-workflowzzmxd/series-workflowzzmxd-build-action-3092727308/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-workflowzzmxd/series-workflowzzmxd-build-action-3787833445/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 18:21:06 +0000 UTC FinishedAt: 2026-08-21 18:21:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 18:21:06 +0000 UTC FinishedAt: 2026-08-21 18:21:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"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-workflowzzmxd/series-workflowzzmxd-convert-artifact-1596090078/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 18:21:06 +0000 UTC FinishedAt: 2026-08-21 18:21:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 18:21:06 +0000 UTC FinishedAt: 2026-08-21 18:21:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 18:21:06 +0000 UTC FinishedAt: 2026-08-21 18:21:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 18:21:16 +0000 UTC FinishedAt: 2026-08-21 21:24:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzmxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ife_act","ife_encode","ife_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3c920d4c-a37c-44f5-8f82-4717f914ea4e","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-21 18:21:16 +0000 UTC FinishedAt: 2026-08-21 21:24:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6fe90529-51bf-43a7-8ee5-fb7285ada4b7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8bd3783c-9855-43c2-b67a-ea4689de7ed2,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-workflowzzmxd/series-workflowzzmxd-build-action-3092727308/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-workflowzzmxd/series-workflowzzmxd-build-action-3787833445/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-workflowzzmxd/series-workflowzzmxd-convert-artifact-1596090078/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,}