Name: series-workflowfckfq Phase: Succeeded StartedAt: 2026-07-24 08:58:49 +0000 UTC FinishedAt: 2026-07-24 13:56:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfckfq[0] Phase: Succeeded StartedAt: 2026-07-24 08:58:49 +0000 UTC FinishedAt: 2026-07-24 09:19:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfckfq[0].run-triage Phase: Succeeded StartedAt: 2026-07-24 08:58:49 +0000 UTC FinishedAt: 2026-07-24 09:19:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "b95f03f04d475aa6719d15a636ddf32222d55657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "NUMA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "b95f03f04d475aa6719d15a636ddf32222d55657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "NUMA" ], "series_id": "6a2b0582-e307-4a8f-8c97-2e21f56ba4ee" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "user_proactive_reclaim", "reclaim_store", "memory_reclaim", "get_scan_count", "get_swappiness", "get_nr_to_scan", "__node_reclaim" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA5OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgICAmIzM0O3JlY2xhaW1fc3RvcmUmIzM0OywKICAgICYjMzQ7bWVtb3J5X3JlY2xhaW0mIzM0OywKICAgICYjMzQ7Z2V0X3NjYW5fY291bnQmIzM0OywKICAgICYjMzQ7Z2V0X3N3YXBwaW5lc3MmIzM0OywKICAgICYjMzQ7Z2V0X25yX3RvX3NjYW4mIzM0OywKICAgICYjMzQ7X19ub2RlX3JlY2xhaW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIHdoZXJlIGFub255bW91cyBtZW1vcnkgb25seSByZWNsYWltIChzd2FwcGluZXNzPW1heCkgY291bGQgaW5jb3JyZWN0bHkgZmFsbCBiYWNrIHRvIGV2aWN0aW5nIGZpbGUgcGFnZXMgd2hlbiBhbm9ueW1vdXMgcGFnZXMgY2Fubm90IGJlIHJlY2xhaW1lZCAoZS5nLiBubyBzd2FwKS4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS92bXNjYW4uYyBhbmQgbW0vbWVtY29udHJvbC5jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBjZ3JvdXAgbWVtb3J5LnJlY2xhaW0gb3Igc3lzZnMgbm9kZSByZWNsYWltIGF0dHJpYnV0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDk6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5MGE0MTY2MjA1ZDAxZDIzMzI3NTZkN2YyMDk4ZjFjMjA5NWFhOTQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMjQgMDk6MTc6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YTMuLjIwY2I5M2ZkM2RhODI0IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtMjUwMSw2ICYjNDM7MjUwMSwyMyBAQCBzdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuIFx0ZW51bSBzY2FuX2JhbGFuY2Ugc2Nhbl9iYWxhbmNlO1xuIFx0ZW51bSBscnVfbGlzdCBscnU7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcm9hY3RpdmUgcmVjbGFpbSBpbml0aWF0ZWQgYnkgdXNlcnNwYWNlIGZvciBhbm9ueW1vdXMgbWVtb3J5IG9ubHkuXG4mIzQzO1x0ICogU1dBUFBJTkVTU19BTk9OX09OTFkgaXMgc2V0IG9ubHkgb24gdGhlIHByb2FjdGl2ZSByZWNsYWltIHBhdGgsIHNvXG4mIzQzO1x0ICogd2FybiBpZiBpdCBzaG93cyB1cCBlbHNld2hlcmUuIFdoZW4gYW5vbiBjYW5ub3QgYmUgcmVjbGFpbWVkIChlLmcuXG4mIzQzO1x0ICogbm8gc3dhcCksIGJhaWwgb3V0IGluc3RlYWQgb2YgZmFsbGluZyBiYWNrIHRvIGV2aWN0aW5nIGZpbGUgcGFnZXMsXG4mIzQzO1x0ICogd2hpY2ggd291bGQgdmlvbGF0ZSB0aGUgYW5vbi1vbmx5IHNlbWFudGljcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSkge1xuJiM0MztcdFx0V0FSTl9PTl9PTkNFKCFzYy1cdTAwM2Vwcm9hY3RpdmUpO1xuJiM0MztcdFx0aWYgKCFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYykpIHtcbiYjNDM7XHRcdFx0bWVtc2V0KG5yLCAwLCBzaXplb2YoKm5yKSAqIE5SX0xSVV9MSVNUUyk7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNjYW5fYmFsYW5jZSA9IFNDQU5fQU5PTjtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiBJZiB3ZSBoYXZlIG5vIHN3YXAgc3BhY2UsIGRvIG5vdCBib3RoZXIgc2Nhbm5pbmcgYW5vbiBmb2xpb3MuICovXG4gXHRpZiAoIXNjLVx1MDAzZW1heV9zd2FwIHx8ICFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYykpIHtcbiBcdFx0c2Nhbl9iYWxhbmNlID0gU0NBTl9GSUxFO1xuQEAgLTI1MTksMTMgJiM0MzsyNTM2LDYgQEAgc3RhdGljIHZvaWQgZ2V0X3NjYW5fY291bnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHQvKiBQcm9hY3RpdmUgcmVjbGFpbSBpbml0aWF0ZWQgYnkgdXNlcnNwYWNlIGZvciBhbm9ueW1vdXMgbWVtb3J5IG9ubHkgKi9cbi1cdGlmIChzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZKSB7XG4tXHRcdFdBUk5fT05fT05DRSghc2MtXHUwMDNlcHJvYWN0aXZlKTtcbi1cdFx0c2Nhbl9iYWxhbmNlID0gU0NBTl9BTk9OO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbiBcdC8qXG4gXHQgKiBEbyBub3QgYXBwbHkgYW55IHByZXNzdXJlIGJhbGFuY2luZyBjbGV2ZXJuZXNzIHdoZW4gdGhlXG4gXHQgKiBzeXN0ZW0gaXMgY2xvc2UgdG8gT09NLCBzY2FuIGJvdGggYW5vbiBhbmQgZmlsZSBlcXVhbGx5XG5AQCAtMjY5OCw2ICYjNDM7MjcwOCwxMCBAQCBzdGF0aWMgaW50IGdldF9zd2FwcGluZXNzKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG4mIzQzO1x0aW50IHN3YXBwaW5lc3MgPSBzY19zd2FwcGluZXNzKHNjLCBtZW1jZyk7XG4mIzQzO1xuJiM0MztcdGlmIChzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZKVxuJiM0MztcdFx0cmV0dXJuIHN3YXBwaW5lc3M7XG4gXG4gXHRpZiAoIXNjLVx1MDAzZW1heV9zd2FwKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0yNzA2LDcgJiM0MzsyNzIwLDcgQEAgc3RhdGljIGludCBnZXRfc3dhcHBpbmVzcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIFx0ICAgIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIFx1MDAzYyBNSU5fTFJVX0JBVENIKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldHVybiBzY19zd2FwcGluZXNzKHNjLCBtZW1jZyk7XG4mIzQzO1x0cmV0dXJuIHN3YXBwaW5lc3M7XG4gfVxuIFxuIHN0YXRpYyBpbnQgZ2V0X25yX2dlbnMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcbkBAIC00OTExLDYgJiM0Mzs0OTI1LDE5IEBAIHN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4gXHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgc3dhcHBpbmVzcylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIGV2aWN0YWJsZTtcbiYjNDM7XHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcm9hY3RpdmUgcmVjbGFpbSBpbml0aWF0ZWQgYnkgdXNlcnNwYWNlIGZvciBhbm9ueW1vdXMgbWVtb3J5IG9ubHkuXG4mIzQzO1x0ICogU1dBUFBJTkVTU19BTk9OX09OTFkgaXMgc2V0IG9ubHkgb24gdGhlIHByb2FjdGl2ZSByZWNsYWltIHBhdGgsIHNvXG4mIzQzO1x0ICogd2FybiBpZiBpdCBzaG93cyB1cCBlbHNld2hlcmUuIFdoZW4gYW5vbiBjYW5ub3QgYmUgcmVjbGFpbWVkIChlLmcuXG4mIzQzO1x0ICogbm8gc3dhcCksIHJldHVybiAwIGluc3RlYWQgb2YgZmFsbGluZyB0aHJvdWdoIGFuZCBldmljdGluZyBmaWxlXG4mIzQzO1x0ICogcGFnZXMsIHdoaWNoIHdvdWxkIHZpb2xhdGUgdGhlIGFub24tb25seSBzZW1hbnRpY3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYykpIHtcbiYjNDM7XHRcdFdBUk5fT05fT05DRSghc2MtXHUwMDNlcHJvYWN0aXZlKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiBcbiBcdGV2aWN0YWJsZSA9IGxydXZlY19ldmljdGFibGVfc2l6ZShscnV2ZWMsIHN3YXBwaW5lc3MpO1xuIFxuQEAgLTc3MzgsNyAmIzQzOzc3NjUsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuIC8qXG4gICogVHJ5IHRvIGZyZWUgdXAgc29tZSBwYWdlcyBmcm9tIHRoaXMgbm9kZSB0aHJvdWdoIHJlY2xhaW0uXG4gICovXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4gXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG5AQCAtNzgzMCw3ICYjNDM7Nzg1Nyw3IEBAIGludCBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcbiBcdGlmICh0ZXN0X2FuZF9zZXRfYml0X2xvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKSlcbiBcdFx0cmV0dXJuIE5PREVfUkVDTEFJTV9OT1NDQU47XG4gXG4tXHRyZXQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgZ2ZwX21hc2ssIG5yX3BhZ2VzLCBcdTAwMjZzYykgXHUwMDNlPSBucl9wYWdlcztcbiYjNDM7XHRyZXQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgbnJfcGFnZXMsIFx1MDAyNnNjKSBcdTAwM2U9IG5yX3BhZ2VzO1xuIFx0Y2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXHUwMDI2cGdkYXQtXHUwMDNlZmxhZ3MpO1xuIFxuIFx0aWYgKHJldClcbkBAIC03ODQzLDcgJiM0Mzs3ODcwLDcgQEAgaW50IG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxuIFxuICNlbHNlXG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4gXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG5AQCAtNzk0NSw4ICYjNDM7Nzk3Miw3IEBAIGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcbiBcdFx0XHRcdFx0XHQgIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKSlcbiBcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXG4tXHRcdFx0cmVjbGFpbWVkID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGdmcF9tYXNrLFxuLVx0XHRcdFx0XHRcdCAgIGJhdGNoX3NpemUsIFx1MDAyNnNjKTtcbiYjNDM7XHRcdFx0cmVjbGFpbWVkID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGJhdGNoX3NpemUsIFx1MDAyNnNjKTtcbiBcdFx0XHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcdTAwMjZwZ2RhdC1cdTAwM2VmbGFncyk7XG4gXHRcdH1cbiBcbkBAIC04MDEzLDcgJiM0Mzs4MDM5LDcgQEAgc3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRpbnQgcmV0LCBuaWQgPSBkZXYtXHUwMDNlaWQ7XG4gXG4gXHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XG4tXHRyZXR1cm4gcmV0ID8gLUVBR0FJTiA6IGNvdW50O1xuJiM0MztcdHJldHVybiByZXQgPyByZXQgOiBjb3VudDtcbiB9XG4gXG4gc3RhdGljIERFVklDRV9BVFRSX1dPKHJlY2xhaW0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA5OjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtOVU1BJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDtyZWNsYWltX3N0b3JlJiMzNDssCiAgICAmIzM0O21lbW9yeV9yZWNsYWltJiMzNDssCiAgICAmIzM0O2dldF9zY2FuX2NvdW50JiMzNDssCiAgICAmIzM0O2dldF9zd2FwcGluZXNzJiMzNDssCiAgICAmIzM0O2dldF9ucl90b19zY2FuJiMzNDssCiAgICAmIzM0O19fbm9kZV9yZWNsYWltJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSB3aGVyZSBhbm9ueW1vdXMgbWVtb3J5IG9ubHkgcmVjbGFpbSAoc3dhcHBpbmVzcz1tYXgpIGNvdWxkIGluY29ycmVjdGx5IGZhbGwgYmFjayB0byBldmljdGluZyBmaWxlIHBhZ2VzIHdoZW4gYW5vbnltb3VzIHBhZ2VzIGNhbm5vdCBiZSByZWNsYWltZWQgKGUuZy4gbm8gc3dhcCkuIEl0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vdm1zY2FuLmMgYW5kIG1tL21lbWNvbnRyb2wuYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgY2dyb3VwIG1lbW9yeS5yZWNsYWltIG9yIHN5c2ZzIG5vZGUgcmVjbGFpbSBhdHRyaWJ1dGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MGE0MTY2MjA1ZDAxZDIzMzI3NTZkN2YyMDk4ZjFjMjA5NWFhOTQyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMjQgMDk6MTc6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDM1YzNiYjE1YWU5NmEzLi4yMGNiOTNmZDNkYTgyNCAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTI1MDEsNiAmIzQzOzI1MDEsMjMgQEAgc3RhdGljIHZvaWQgZ2V0X3NjYW5fY291bnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywKIAllbnVtIHNjYW5fYmFsYW5jZSBzY2FuX2JhbGFuY2U7CiAJZW51bSBscnVfbGlzdCBscnU7CiAKJiM0MzsJLyoKJiM0MzsJICogUHJvYWN0aXZlIHJlY2xhaW0gaW5pdGlhdGVkIGJ5IHVzZXJzcGFjZSBmb3IgYW5vbnltb3VzIG1lbW9yeSBvbmx5LgomIzQzOwkgKiBTV0FQUElORVNTX0FOT05fT05MWSBpcyBzZXQgb25seSBvbiB0aGUgcHJvYWN0aXZlIHJlY2xhaW0gcGF0aCwgc28KJiM0MzsJICogd2FybiBpZiBpdCBzaG93cyB1cCBlbHNld2hlcmUuIFdoZW4gYW5vbiBjYW5ub3QgYmUgcmVjbGFpbWVkIChlLmcuCiYjNDM7CSAqIG5vIHN3YXApLCBiYWlsIG91dCBpbnN0ZWFkIG9mIGZhbGxpbmcgYmFjayB0byBldmljdGluZyBmaWxlIHBhZ2VzLAomIzQzOwkgKiB3aGljaCB3b3VsZCB2aW9sYXRlIHRoZSBhbm9uLW9ubHkgc2VtYW50aWNzLgomIzQzOwkgKi8KJiM0MzsJaWYgKHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFkpIHsKJiM0MzsJCVdBUk5fT05fT05DRSghc2MtJmd0O3Byb2FjdGl2ZSk7CiYjNDM7CQlpZiAoIWNhbl9yZWNsYWltX2Fub25fcGFnZXMobWVtY2csIHBnZGF0LSZndDtub2RlX2lkLCBzYykpIHsKJiM0MzsJCQltZW1zZXQobnIsIDAsIHNpemVvZigqbnIpICogTlJfTFJVX0xJU1RTKTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CQlzY2FuX2JhbGFuY2UgPSBTQ0FOX0FOT047CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwogCS8qIElmIHdlIGhhdmUgbm8gc3dhcCBzcGFjZSwgZG8gbm90IGJvdGhlciBzY2FubmluZyBhbm9uIGZvbGlvcy4gKi8KIAlpZiAoIXNjLSZndDttYXlfc3dhcCB8fCAhY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtJmd0O25vZGVfaWQsIHNjKSkgewogCQlzY2FuX2JhbGFuY2UgPSBTQ0FOX0ZJTEU7CkBAIC0yNTE5LDEzICYjNDM7MjUzNiw2IEBAIHN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsCiAJCWdvdG8gb3V0OwogCX0KIAotCS8qIFByb2FjdGl2ZSByZWNsYWltIGluaXRpYXRlZCBieSB1c2Vyc3BhY2UgZm9yIGFub255bW91cyBtZW1vcnkgb25seSAqLwotCWlmIChzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZKSB7Ci0JCVdBUk5fT05fT05DRSghc2MtJmd0O3Byb2FjdGl2ZSk7Ci0JCXNjYW5fYmFsYW5jZSA9IFNDQU5fQU5PTjsKLQkJZ290byBvdXQ7Ci0JfQotCiAJLyoKIAkgKiBEbyBub3QgYXBwbHkgYW55IHByZXNzdXJlIGJhbGFuY2luZyBjbGV2ZXJuZXNzIHdoZW4gdGhlCiAJICogc3lzdGVtIGlzIGNsb3NlIHRvIE9PTSwgc2NhbiBib3RoIGFub24gYW5kIGZpbGUgZXF1YWxseQpAQCAtMjY5OCw2ICYjNDM7MjcwOCwxMCBAQCBzdGF0aWMgaW50IGdldF9zd2FwcGluZXNzKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwomIzQzOwlpbnQgc3dhcHBpbmVzcyA9IHNjX3N3YXBwaW5lc3Moc2MsIG1lbWNnKTsKJiM0MzsKJiM0MzsJaWYgKHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFkpCiYjNDM7CQlyZXR1cm4gc3dhcHBpbmVzczsKIAogCWlmICghc2MtJmd0O21heV9zd2FwKQogCQlyZXR1cm4gMDsKQEAgLTI3MDYsNyAmIzQzOzI3MjAsNyBAQCBzdGF0aWMgaW50IGdldF9zd2FwcGluZXNzKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiAJICAgIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpICZsdDsgTUlOX0xSVV9CQVRDSCkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gc2Nfc3dhcHBpbmVzcyhzYywgbWVtY2cpOwomIzQzOwlyZXR1cm4gc3dhcHBpbmVzczsKIH0KIAogc3RhdGljIGludCBnZXRfbnJfZ2VucyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKQpAQCAtNDkxMSw2ICYjNDM7NDkyNSwxOSBAQCBzdGF0aWMgbG9uZyBnZXRfbnJfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLAogCQkJICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgc3dhcHBpbmVzcykKIHsKIAl1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIGV2aWN0YWJsZTsKJiM0MzsJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwomIzQzOwkvKgomIzQzOwkgKiBQcm9hY3RpdmUgcmVjbGFpbSBpbml0aWF0ZWQgYnkgdXNlcnNwYWNlIGZvciBhbm9ueW1vdXMgbWVtb3J5IG9ubHkuCiYjNDM7CSAqIFNXQVBQSU5FU1NfQU5PTl9PTkxZIGlzIHNldCBvbmx5IG9uIHRoZSBwcm9hY3RpdmUgcmVjbGFpbSBwYXRoLCBzbwomIzQzOwkgKiB3YXJuIGlmIGl0IHNob3dzIHVwIGVsc2V3aGVyZS4gV2hlbiBhbm9uIGNhbm5vdCBiZSByZWNsYWltZWQgKGUuZy4KJiM0MzsJICogbm8gc3dhcCksIHJldHVybiAwIGluc3RlYWQgb2YgZmFsbGluZyB0aHJvdWdoIGFuZCBldmljdGluZyBmaWxlCiYjNDM7CSAqIHBhZ2VzLCB3aGljaCB3b3VsZCB2aW9sYXRlIHRoZSBhbm9uLW9ubHkgc2VtYW50aWNzLgomIzQzOwkgKi8KJiM0MzsJaWYgKHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFkgJmFtcDsmYW1wOwomIzQzOwkgICAgIWNhbl9yZWNsYWltX2Fub25fcGFnZXMobWVtY2csIHBnZGF0LSZndDtub2RlX2lkLCBzYykpIHsKJiM0MzsJCVdBUk5fT05fT05DRSghc2MtJmd0O3Byb2FjdGl2ZSk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQogCiAJZXZpY3RhYmxlID0gbHJ1dmVjX2V2aWN0YWJsZV9zaXplKGxydXZlYywgc3dhcHBpbmVzcyk7CiAKQEAgLTc3MzgsNyAmIzQzOzc3NjUsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KQogLyoKICAqIFRyeSB0byBmcmVlIHVwIHNvbWUgcGFnZXMgZnJvbSB0aGlzIG5vZGUgdGhyb3VnaCByZWNsYWltLgogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAogCQkJCSAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAogCQkJCSAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIHsKQEAgLTc4MzAsNyAmIzQzOzc4NTcsNyBAQCBpbnQgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpCiAJaWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgJmFtcDtwZ2RhdC0mZ3Q7ZmxhZ3MpKQogCQlyZXR1cm4gTk9ERV9SRUNMQUlNX05PU0NBTjsKIAotCXJldCA9IF9fbm9kZV9yZWNsYWltKHBnZGF0LCBnZnBfbWFzaywgbnJfcGFnZXMsICZhbXA7c2MpICZndDs9IG5yX3BhZ2VzOwomIzQzOwlyZXQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgbnJfcGFnZXMsICZhbXA7c2MpICZndDs9IG5yX3BhZ2VzOwogCWNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsICZhbXA7cGdkYXQtJmd0O2ZsYWdzKTsKIAogCWlmIChyZXQpCkBAIC03ODQzLDcgJiM0Mzs3ODcwLDcgQEAgaW50IG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKQogCiAjZWxzZQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAogCQkJCSAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAogCQkJCSAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIHsKQEAgLTc5NDUsOCAmIzQzOzc5NzIsNyBAQCBpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsCiAJCQkJCQkgICZhbXA7cGdkYXQtJmd0O2ZsYWdzKSkKIAkJCQlyZXR1cm4gLUVCVVNZOwogCi0JCQlyZWNsYWltZWQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgZ2ZwX21hc2ssCi0JCQkJCQkgICBiYXRjaF9zaXplLCAmYW1wO3NjKTsKJiM0MzsJCQlyZWNsYWltZWQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgYmF0Y2hfc2l6ZSwgJmFtcDtzYyk7CiAJCQljbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCAmYW1wO3BnZGF0LSZndDtmbGFncyk7CiAJCX0KIApAQCAtODAxMyw3ICYjNDM7ODAzOSw3IEBAIHN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAogCWludCByZXQsIG5pZCA9IGRldi0mZ3Q7aWQ7CiAKIAlyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7Ci0JcmV0dXJuIHJldCA/IC1FQUdBSU4gOiBjb3VudDsKJiM0MzsJcmV0dXJuIHJldCA/IHJldCA6IGNvdW50OwogfQogCiBzdGF0aWMgREVWSUNFX0FUVFJfV08ocmVjbGFpbSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MzUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWTVNjYW4gUGF0Y2g6IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBtbS92bXNjYW4uY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGhlYXJ0IG9mIG1lbW9yeSBtYW5hZ2VtZW50IGluIHRoZSBrZXJuZWwg4oCTIHNwZWNpZmljYWxseSB0aGUgdmlydHVhbCBtZW1vcnkgc2Nhbm5lci4gVGhpcyBsb29rcyB0byBiZSBhZGRyZXNzaW5nIGEgbnVhbmNlZCBpc3N1ZSBhcm91bmQgcHJvYWN0aXZlIHJlY2xhaW0gYmVoYXZpb3Igd2l0aCBgU1dBUFBJTkVTU19BTk9OX09OTFlgLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCYjMzk7cyBmaXhpbmcgYSBzY2VuYXJpbyB3aGVyZSwgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9ucyAobGlrZSBhIGxhY2sgb2YgYXZhaWxhYmxlIHN3YXAgc3BhY2UpLCB0aGUgc3lzdGVtIG1pZ2h0IGluYXBwcm9wcmlhdGVseSBzdGFydCBldmljdGluZyBmaWxlIHBhZ2VzIHdoZW4gaXQmIzM5O3Mgc3VwcG9zZWQgdG8gKm9ubHkqIGZvY3VzIG9uIGFub255bW91cyAoYW5vbikgcGFnZXMuIFRoaXMgaXMgc29tZXRoaW5nIEkmIzM5O3ZlIHNlZW4gYmVmb3JlOyBpdCYjMzk7cyBhIGNsYXNzaWMgY2FzZSBvZiBzdWJ0bGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBkaWZmZXJlbnQgcmVjbGFpbSBzdHJhdGVnaWVzLgoKVGhlIHBhdGNoIHRvdWNoZXMgYSBjbHVzdGVyIG9mIGZ1bmN0aW9uczogYGdldF9zY2FuX2NvdW50YCwgYGdldF9zd2FwcGluZXNzYCwgYGdldF9ucl90b19zY2FuYCwgYF9fbm9kZV9yZWNsYWltYCwgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCBhbmQgYHJlY2xhaW1fc3RvcmVgLiBUaGUgbW9kaWZpY2F0aW9ucyB0byBgX19ub2RlX3JlY2xhaW1gIGxvb2sgc3RyYWlnaHRmb3J3YXJkOyByZW1vdmluZyBhbiB1bnVzZWQgYGdmcF9tYXNrYCBpcyBnZW5lcmFsbHkgYSBzaWduIG9mIGdvb2QgaHlnaWVuZSBhbmQgcmVkdWN0aW9uIG9mIGNvZGUgY2x1dHRlci4gTm90aGluZyBpbW1lZGlhdGVseSBhbGFybWluZyB0aGVyZS4KClRoZSB0d2VhayB0byBgcmVjbGFpbV9zdG9yZWAgdG8gcmV0dXJuIGByZXRgIGluc3RlYWQgb2YgYC1FQUdBSU5gIHdoZW4gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGZhaWxzIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gVGhpcyBzdWdnZXN0cyBhIGNoYW5nZSBpbiBlcnJvciBoYW5kbGluZyBvciBhIHNoaWZ0IGluIGhvdyBmYWlsdXJlIHN0YXRlcyBhcmUgY29tbXVuaWNhdGVkLiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucywgcGFydGljdWxhcmx5IGhvdyB0aGUgY2FsbGVyIHdpbGwgaW50ZXJwcmV0IHRoZSBjaGFuZ2UgaW4gcmV0dXJuIHZhbHVlLgoKTm93LCBsZXQmIzM5O3MgdHJhY2UgdGhlIGNhbGxzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgd2hlcmUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGFuZCBgcmVjbGFpbV9zdG9yZWAgYXJlIGFjdHVhbGx5IGludm9rZWQuIEkgcmVtZW1iZXIgdGhhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgY2FsbGVkIGZyb20gYm90aCBgcmVjbGFpbV9zdG9yZWAgYW5kIGBtZW1vcnlfcmVjbGFpbWAgLS0gZ29vZCB0byBrbm93LiBUaGUgZmFjdCB0aGF0IGByZWNsYWltX3N0b3JlYCBpcyBhIHN5c2ZzIGF0dHJpYnV0ZSBvbiBhIG5vZGUgZGV2aWNlIGlzIGltcG9ydGFudDsgdGhpcyB0ZWxscyBtZSBpdCYjMzk7cyBhIHVzZXItc3BhY2UgaW50ZXJmYWNlIGZvciB0cmlnZ2VyaW5nIHJlY2xhaW0gb24gYSBzcGVjaWZpYyBOVU1BIG5vZGUuIEFuZCBgbWVtb3J5X3JlY2xhaW1gIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgaXQmIzM5O3MgYSBjZ3JvdXAgYXR0cmlidXRlLiBCb3RoIGdpdmUgaW1wb3J0YW50IGhpbnRzLiBOb3cgSSYjMzk7bGwgc2NhbiB0aGUgc291cmNlIGNvZGUgZGlyZWN0bHkgdG8gY29uZmlybSB0aGlzIHVuZGVyc3RhbmRpbmcgYW5kIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGZpdCBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCByZWNsYWltIHByb2Nlc3MuIEkmIzM5O2xsIGZvY3VzIG9uIGhvdyB0aGUgY29udHJvbCBmbG93IGNoYW5nZXMgd2l0aCB0aGlzIGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9NjI0PWV4dGVybiB2b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKTtcbm1tL2ludGVybmFsLmg6NjI1OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbm1tL2ludGVybmFsLmgtNjI2LVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTQ5ODk9c3RhdGljIHNzaXplX3QgbWVtb3J5X3JlY2xhaW0oc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXG4tLVxubW0vbWVtY29udHJvbC5jLTQ5OTQtXG5tbS9tZW1jb250cm9sLmM6NDk5NTpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oYnVmLCBtZW1jZywgTlVMTCk7XG5tbS9tZW1jb250cm9sLmMtNDk5Ni1cdGlmIChyZXQpXG4tLVxubW0vdm1zY2FuLmM9Nzg4Nz1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG4tLVxubW0vdm1zY2FuLmMtNzg5Mi1cbm1tL3Ztc2Nhbi5jOjc4OTM6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vdm1zY2FuLmMtNzg5NC1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmM9ODAzNT1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5tbS92bXNjYW4uYy04MDQwLVxubW0vdm1zY2FuLmM6ODA0MTpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcbm1tL3Ztc2Nhbi5jLTgwNDItXHRyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcyMAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBuZXcgZnVuY3Rpb24sIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgYW5kIGl0JiMzOTtzIGxvb2tpbmcgbGlrZSBpdCBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgY2dyb3VwJiMzOTtzIGBtZW1vcnkucmVjbGFpbWAgaW50ZXJmYWNlIGFuZCB0aGUgYHJlY2xhaW1gIHN5c2ZzIG5vZGUuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGNvdWxkIGJlIGEgcG9pbnQgb2YgaW50ZXJlc3QgZm9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgZXNwZWNpYWxseSBzaW5jZSB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgd2l0aGluIGB2bXNjYW5gLiBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgdGhpcyBpcyBmdW5jdGlvbmFsIGFuZCBhYnNvbHV0ZWx5IHdvcnRoIGEgZGVkaWNhdGVkIGZ1enppbmcgY2FtcGFpZ24uCgpUbyBkaWcgZGVlcGVyLCB0aGUga2V5IHN5bWJvbHMgdGhhdCBpbW1lZGlhdGVseSBncmFiIG15IGF0dGVudGlvbiBhcmUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGl0c2VsZiwgb2YgY291cnNlLCBhbG9uZyB3aXRoIGByZWNsYWltX3N0b3JlYCwgd2hpY2ggbGlrZWx5IGhhbmRsZXMgdGhlIGludGVyZmFjZSBpbnRvIHRoYXQgZnVuY3Rpb24sIGFuZCBgbWVtb3J5X3JlY2xhaW1gIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGludGVycmVsYXRlLiBGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzY2FuIGxpbWl0cyBhcmUgaW1wb3NlZCBhbmQgY29uZmlndXJlZCwgc28gYGdldF9zY2FuX2NvdW50YCwgYGdldF9zd2FwcGluZXNzYCwgYW5kIGBnZXRfbnJfdG9fc2NhbmAgd2lsbCBuZWVkIHNjcnV0aW55IHRvIHVuZGVyc3RhbmQgdGhlIGxpbWl0cyBpbXBvc2VkLgoKSSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgdG8gY2hlY2sgaWYgYENPTkZJR19NRU1DR2AgaXMgcmVxdWlyZWQgZm9yIGBtZW1vcnlfcmVjbGFpbWAgdG8gZnVuY3Rpb24gcHJvcGVybHkuIFRoYXQgZGVwZW5kZW5jeSBjb3VsZCBkaWN0YXRlIGhvdyBicm9hZGx5IGFwcGxpY2FibGUgdGhpcyB2dWxuZXJhYmlsaXR5IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA5OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW9yeV9yZWNsYWltJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg9MTM1PUtWTV9YODZfT1BfT1BUSU9OQUwodm1fbW92ZV9lbmNfY29udGV4dF9mcm9tKVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxMzY6S1ZNX1g4Nl9PUF9PUFRJT05BTChndWVzdF9tZW1vcnlfcmVjbGFpbWVkKVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaC0xMzctS1ZNX1g4Nl9PUChnZXRfZmVhdHVyZV9tc3IpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0xNzg1PXN0cnVjdCBrdm1feDg2X29wcyB7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xOTg2LVx0aW50ICgqdm1fbW92ZV9lbmNfY29udGV4dF9mcm9tKShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBzb3VyY2VfZmQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDoxOTg3Olx0dm9pZCAoKmd1ZXN0X21lbW9yeV9yZWNsYWltZWQpKHN0cnVjdCBrdm0gKmt2bSk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTE5ODgtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0zMjU5PXN0YXRpYyB2b2lkIHNldl9mbHVzaF9lbmNyeXB0ZWRfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHZvaWQgKnZhKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzI5NC1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzI5NTp2b2lkIHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzI5Ni17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01MzMwPXN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQ1MS1cdC5tZW1fZW5jX3VucmVnaXN0ZXJfcmVnaW9uID0gc2V2X21lbV9lbmNfdW5yZWdpc3Rlcl9yZWdpb24sXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU0NTI6XHQuZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCA9IHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkLFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDUzLVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9OTg3PWludCBzZXZfdm1fbW92ZV9lbmNfY29udGV4dF9mcm9tKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IHNvdXJjZV9mZCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjk4ODp2b2lkIHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkKHN0cnVjdCBrdm0gKmt2bSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTk4OS1pbnQgc2V2X2hhbmRsZV92bWdleGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTExMDczPXN0YXRpYyB2b2lkIHZjcHVfbG9hZF9lb2lfZXhpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExMDkyLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjExMDkzOnZvaWQga3ZtX2FyY2hfZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTEwOTQte1xuYXJjaC94ODYva3ZtL3g4Ni5jOjExMDk1Olx0a3ZtX3g4Nl9jYWxsKGd1ZXN0X21lbW9yeV9yZWNsYWltZWQpKGt2bSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTEwOTYtfVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYz04MDA9c3RhdGljIGludCBmZmFfbWVtb3J5X29wcyh1MzIgZnVuY19pZCwgc3RydWN0IGZmYV9tZW1fb3BzX2FyZ3MgKmFyZ3MpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jLTgyNC1cbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYzo4MjU6c3RhdGljIGludCBmZmFfbWVtb3J5X3JlY2xhaW0odTY0IGdfaGFuZGxlLCB1MzIgZmxhZ3MpXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmMtODI2LXtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmM9MTYyMz1zdGF0aWMgY29uc3Qgc3RydWN0IGZmYV9tZW1fb3BzIGZmYV9kcnZfbWVtX29wcyA9IHtcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYzoxNjI0Olx0Lm1lbW9yeV9yZWNsYWltID0gZmZhX21lbW9yeV9yZWNsYWltLFxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jLTE2MjUtXHQubWVtb3J5X3NoYXJlID0gZmZhX21lbW9yeV9zaGFyZSxcbi0tXG5kcml2ZXJzL3RlZS9vcHRlZS9mZmFfYWJpLmM9MjcwPXN0YXRpYyBpbnQgb3B0ZWVfZmZhX3NobV9yZWdpc3RlcihzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwgc3RydWN0IHRlZV9zaG0gKnNobSxcbi0tXG5kcml2ZXJzL3RlZS9vcHRlZS9mZmFfYWJpLmMtMzA0LVx0aWYgKHJjKSB7XG5kcml2ZXJzL3RlZS9vcHRlZS9mZmFfYWJpLmM6MzA1Olx0XHRtZW1fb3BzLVx1MDAzZW1lbW9yeV9yZWNsYWltKGFyZ3MuZ19oYW5kbGUsIDApO1xuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jLTMwNi1cdFx0cmV0dXJuIHJjO1xuLS1cbmRyaXZlcnMvdGVlL29wdGVlL2ZmYV9hYmkuYz0zMTQ9c3RhdGljIGludCBvcHRlZV9mZmFfc2htX3VucmVnaXN0ZXIoc3RydWN0IHRlZV9jb250ZXh0ICpjdHgsXG4tLVxuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jLTMzNS1cbmRyaXZlcnMvdGVlL29wdGVlL2ZmYV9hYmkuYzozMzY6XHRyYyA9IG1lbV9vcHMtXHUwMDNlbWVtb3J5X3JlY2xhaW0oZ2xvYmFsX2hhbmRsZSwgMCk7XG5kcml2ZXJzL3RlZS9vcHRlZS9mZmFfYWJpLmMtMzM3LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvdGVlL29wdGVlL2ZmYV9hYmkuYz0zNDM9c3RhdGljIGludCBvcHRlZV9mZmFfc2htX3VucmVnaXN0ZXJfc3VwcChzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCxcbi0tXG5kcml2ZXJzL3RlZS9vcHRlZS9mZmFfYWJpLmMtMzU4LVx0bWVtX29wcyA9IG9wdGVlLVx1MDAzZWZmYS5mZmFfZGV2LVx1MDAzZW9wcy1cdTAwM2VtZW1fb3BzO1xuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jOjM1OTpcdHJjID0gbWVtX29wcy1cdTAwM2VtZW1vcnlfcmVjbGFpbShnbG9iYWxfaGFuZGxlLCAwKTtcbmRyaXZlcnMvdGVlL29wdGVlL2ZmYV9hYmkuYy0zNjAtXHRpZiAocmMpXG4tLVxuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jPTY4Mj1zdGF0aWMgaW50IG9wdGVlX2ZmYV9sZW5kX3Byb3RtZW0oc3RydWN0IG9wdGVlICpvcHRlZSwgc3RydWN0IHRlZV9zaG0gKnByb3RtZW0sXG4tLVxuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jLTczNy1lcnJfcmVjbGFpbTpcbmRyaXZlcnMvdGVlL29wdGVlL2ZmYV9hYmkuYzo3Mzg6XHRtZW1fb3BzLVx1MDAzZW1lbW9yeV9yZWNsYWltKGFyZ3MuZ19oYW5kbGUsIDApO1xuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jLTczOS1cdHJldHVybiByYztcbi0tXG5kcml2ZXJzL3RlZS9vcHRlZS9mZmFfYWJpLmM9NzQyPXN0YXRpYyBpbnQgb3B0ZWVfZmZhX3JlY2xhaW1fcHJvdG1lbShzdHJ1Y3Qgb3B0ZWUgKm9wdGVlLFxuLS1cbmRyaXZlcnMvdGVlL29wdGVlL2ZmYV9hYmkuYy03NjItXG5kcml2ZXJzL3RlZS9vcHRlZS9mZmFfYWJpLmM6NzYzOlx0cmMgPSBtZW1fb3BzLVx1MDAzZW1lbW9yeV9yZWNsYWltKGdsb2JhbF9oYW5kbGUsIDApO1xuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jLTc2NC1cdGlmIChyYylcbi0tXG5kcml2ZXJzL3RlZS90c3RlZS9jb3JlLmM9MjQyPXN0YXRpYyBpbnQgdHN0ZWVfc2htX3JlZ2lzdGVyKHN0cnVjdCB0ZWVfY29udGV4dCAqY3R4LCBzdHJ1Y3QgdGVlX3NobSAqc2htLFxuLS1cbmRyaXZlcnMvdGVlL3RzdGVlL2NvcmUuYy0yODktXHRpZiAocmMpIHtcbmRyaXZlcnMvdGVlL3RzdGVlL2NvcmUuYzoyOTA6XHRcdCh2b2lkKWZmYV9kZXYtXHUwMDNlb3BzLVx1MDAzZW1lbV9vcHMtXHUwMDNlbWVtb3J5X3JlY2xhaW0oc2htLVx1MDAzZXNlY193b3JsZF9pZCxcbmRyaXZlcnMvdGVlL3RzdGVlL2NvcmUuYy0yOTEtXHRcdFx0XHRcdFx0XHQgICAgMCk7XG4tLVxuZHJpdmVycy90ZWUvdHN0ZWUvY29yZS5jLTI5OS1cdFx0XHRmZmFfYXJnc1tUU19SUENfUkVUUklFVkVfTUVNX1JQQ19TVEFUVVNdKTtcbmRyaXZlcnMvdGVlL3RzdGVlL2NvcmUuYzozMDA6XHRcdGZmYV9kZXYtXHUwMDNlb3BzLVx1MDAzZW1lbV9vcHMtXHUwMDNlbWVtb3J5X3JlY2xhaW0oc2htLVx1MDAzZXNlY193b3JsZF9pZCwgMCk7XG5kcml2ZXJzL3RlZS90c3RlZS9jb3JlLmMtMzAxLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL3RlZS90c3RlZS9jb3JlLmM9MzA3PXN0YXRpYyBpbnQgdHN0ZWVfc2htX3VucmVnaXN0ZXIoc3RydWN0IHRlZV9jb250ZXh0ICpjdHgsIHN0cnVjdCB0ZWVfc2htICpzaG0pXG4tLVxuZHJpdmVycy90ZWUvdHN0ZWUvY29yZS5jLTMzNC1cbmRyaXZlcnMvdGVlL3RzdGVlL2NvcmUuYzozMzU6XHRyYyA9IGZmYV9kZXYtXHUwMDNlb3BzLVx1MDAzZW1lbV9vcHMtXHUwMDNlbWVtb3J5X3JlY2xhaW0oc2htLVx1MDAzZXNlY193b3JsZF9pZCwgMCk7XG5kcml2ZXJzL3RlZS90c3RlZS9jb3JlLmMtMzM2LVxuLS1cbmluY2x1ZGUvbGludXgvYXJtX2ZmYS5oPTQ4NT1zdHJ1Y3QgZmZhX21lbV9vcHMge1xuaW5jbHVkZS9saW51eC9hcm1fZmZhLmg6NDg2Olx0aW50ICgqbWVtb3J5X3JlY2xhaW0pKHU2NCBnX2hhbmRsZSwgdTMyIGZsYWdzKTtcbmluY2x1ZGUvbGludXgvYXJtX2ZmYS5oLTQ4Ny1cdGludCAoKm1lbW9yeV9zaGFyZSkoc3RydWN0IGZmYV9tZW1fb3BzX2FyZ3MgKmFyZ3MpO1xuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0yNDU0PXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fYXJjaF9ub19wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjQ1OS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNDYwOnZvaWQga3ZtX2FyY2hfZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZChzdHJ1Y3Qga3ZtICprdm0pO1xuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI0NjEtXG4tLVxubW0vbWVtY29udHJvbC5jPTQ5Njc9c3RhdGljIHNzaXplX3QgbWVtb3J5X29vbV9ncm91cF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4tLVxubW0vbWVtY29udHJvbC5jLTQ5ODgtXG5tbS9tZW1jb250cm9sLmM6NDk4OTpzdGF0aWMgc3NpemVfdCBtZW1vcnlfcmVjbGFpbShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Zixcbm1tL21lbWNvbnRyb2wuYy00OTkwLVx0XHRcdCAgICAgIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG4tLVxubW0vbWVtY29udHJvbC5jPTUwMDI9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTUwNzAtXHRcdC5mbGFncyA9IENGVFlQRV9OU19ERUxFR0FUQUJMRSxcbm1tL21lbWNvbnRyb2wuYzo1MDcxOlx0XHQud3JpdGUgPSBtZW1vcnlfcmVjbGFpbSxcbm1tL21lbWNvbnRyb2wuYy01MDcyLVx0fSxcbi0tXG5zb3VuZC9zb2MvaW50ZWwvYXZzL21lc3NhZ2VzLmM9MzkxPWludCBhdnNfaXBjX2dldF9md19jb25maWcoc3RydWN0IGF2c19kZXYgKmFkZXYsIHN0cnVjdCBhdnNfZndfY2ZnICpjZmcpXG4tLVxuc291bmQvc29jL2ludGVsL2F2cy9tZXNzYWdlcy5jLTQxOC1cdFx0Y2FzZSBBVlNfRldfQ0ZHX01FTU9SWV9SRUNMQUlNRUQ6XG5zb3VuZC9zb2MvaW50ZWwvYXZzL21lc3NhZ2VzLmM6NDE5Olx0XHRcdGNmZy1cdTAwM2VtZW1vcnlfcmVjbGFpbWVkID0gKnRsdi1cdTAwM2V2YWx1ZTtcbnNvdW5kL3NvYy9pbnRlbC9hdnMvbWVzc2FnZXMuYy00MjAtXHRcdFx0YnJlYWs7XG4tLVxuc291bmQvc29jL2ludGVsL2F2cy9tZXNzYWdlcy5oPTQ2MD1zdHJ1Y3QgYXZzX2Z3X2NmZyB7XG5zb3VuZC9zb2MvaW50ZWwvYXZzL21lc3NhZ2VzLmgtNDYxLVx0c3RydWN0IGF2c19md192ZXJzaW9uIGZ3X3ZlcnNpb247XG5zb3VuZC9zb2MvaW50ZWwvYXZzL21lc3NhZ2VzLmg6NDYyOlx0dTMyIG1lbW9yeV9yZWNsYWltZWQ7XG5zb3VuZC9zb2MvaW50ZWwvYXZzL21lc3NhZ2VzLmgtNDYzLVx0dTMyIHNsb3dfY2xvY2tfZnJlcV9oejtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTE1NT1zdGF0aWMgREVGSU5FX1BFUl9DUFUoY3B1bWFza192YXJfdCwgY3B1X2tpY2tfbWFzayk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE1Ni1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MTU3Ol9fd2VhayB2b2lkIGt2bV9hcmNoX2d1ZXN0X21lbW9yeV9yZWNsYWltZWQoc3RydWN0IGt2bSAqa3ZtKVxudmlydC9rdm0va3ZtX21haW4uYy0xNTgte1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9MzQxPXN0YXRpYyB2b2lkIGt2bV9mbHVzaF9zaGFkb3dfYWxsKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTM0My1cdGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19hbGwoa3ZtKTtcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzQ0Olx0a3ZtX2FyY2hfZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZChrdm0pO1xudmlydC9rdm0va3ZtX21haW4uYy0zNDUtfVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NzIxPXN0YXRpYyBpbnQga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNzY1LVx0aWYgKGt2bV9oYW5kbGVfaHZhX3JhbmdlKGt2bSwgXHUwMDI2aHZhX3JhbmdlKS5mb3VuZF9tZW1zbG90KVxudmlydC9rdm0va3ZtX21haW4uYzo3NjY6XHRcdGt2bV9hcmNoX2d1ZXN0X21lbW9yeV9yZWNsYWltZWQoa3ZtKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNzY3LVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9MTc5OD1zdGF0aWMgdm9pZCBrdm1faW52YWxpZGF0ZV9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE4MjQtXHRrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdChrdm0sIG9sZCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjE4MjU6XHRrdm1fYXJjaF9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkKGt2bSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE4MjYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDk6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ3MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk1lbW9yeSBSZWNsYWltIGFuZCBDb250cm9sIEdyb3VwczogQSBRdWljayBDaGVjayoqCgpBbHJpZ2h0LCAqbWVtb3J5X3JlY2xhaW0qLiBUaGF0JiMzOTtzIGEgY29yZSBmdW5jdGlvbiwgdXN1YWxseSB0dWNrZWQgYXdheSBpbiB0aGUgaGVhcnQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBkZWZpbmVkIGluIGBtbS9tZW1jb250cm9sLmNgLiBOb3csIG15IGluaXRpYWwgdGhvdWdodCBpczogd2hhdCYjMzk7cyB0aGUgY29ubmVjdGlvbiB0byBjb250cm9sIGdyb3VwcyAoY2dyb3Vwcyk/IGBtZW1vcnlfcmVjbGFpbWAgaXMgY3JpdGljYWwgZm9yIG1hbmFnaW5nIG1lbW9yeSBwcmVzc3VyZXMgYWNyb3NzIHRoZSBzeXN0ZW0sIGFuZCBjZ3JvdXBzLCBvZiBjb3Vyc2UsIHByb3ZpZGUgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciByZXNvdXJjZSBhbGxvY2F0aW9uLCBpbmNsdWRpbmcgbWVtb3J5LiBTbywgaXMgYENPTkZJR19NRU1DR2AgZGlyZWN0bHkgaW52b2x2ZWQgaGVyZT8gSSYjMzk7bSBiZXR0aW5nIHRoZXJlJiMzOTtzIGEgZGVwZW5kZW5jeSwgZ2l2ZW4gdGhlIGZpbGUgbG9jYXRpb24sIGJ1dCBsZXQmIzM5O3MgY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwOToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1vcnlfcmVjbGFpbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NDk2Nz1zdGF0aWMgc3NpemVfdCBtZW1vcnlfb29tX2dyb3VwX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbi0tXG5tbS9tZW1jb250cm9sLmMtNDk4OC1cbm1tL21lbWNvbnRyb2wuYzo0OTg5OnN0YXRpYyBzc2l6ZV90IG1lbW9yeV9yZWNsYWltKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxubW0vbWVtY29udHJvbC5jLTQ5OTAtXHRcdFx0ICAgICAgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcbi0tXG5tbS9tZW1jb250cm9sLmM9NTAwMj1zdGF0aWMgc3RydWN0IGNmdHlwZSBtZW1vcnlfZmlsZXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTA3MC1cdFx0LmZsYWdzID0gQ0ZUWVBFX05TX0RFTEVHQVRBQkxFLFxubW0vbWVtY29udHJvbC5jOjUwNzE6XHRcdC53cml0ZSA9IG1lbW9yeV9yZWNsYWltLFxubW0vbWVtY29udHJvbC5jLTUwNzItXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA5OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5MTEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBtbS9tZW1jb250cm9sLmNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGBtbS9tZW1jb250cm9sLmNgIGZpbGUgaXMgYmVpbmcgY29tcGlsZWQgY29uZGl0aW9uYWxseSB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIGtlcm5lbCBidWlsZC4gSSBrbm93IHRoZSBnZW5lcmFsIGxvY2F0aW9uLCBzbyBub3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUmIzM5O3MgYSBjb25maWd1cmF0aW9uIGZsYWcgb3IgYSBzcGVjaWZpYyBgaWZkZWZgIGJsb2NrIHRoYXQgY29udHJvbHMgaXRzIGluY2x1c2lvbi4gSSYjMzk7bGwgbmVlZCB0byByYXBpZGx5IGV4YW1pbmUgdGhlIHJlbGV2YW50IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZmlsZXMgb3IgcG90ZW50aWFsbHkgdGhlIEtidWlsZCBzeXN0ZW0gdG8gYXNzZXNzIGl0cyBkZXBlbmRlbmN5LiBFc3NlbnRpYWxseSwgaXMgdGhpcyBtb2R1bGUgYWx3YXlzIGNvbXBpbGVkLCBvciBkb2VzIGl0IGRlcGVuZCBvbiBjZXJ0YWluIGtlcm5lbCBmZWF0dXJlcyBiZWluZyBlbmFibGVkPyBNeSBnb2FsIGlzIHRvIGRldGVybWluZSB0aGUgY29tcGlsZS10aW1lIGJlaGF2aW91ciBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwOToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jb250cm9sLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cbm1tL01ha2VmaWxlLTI5LUtDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLXYxLm8gOj0gblxuLS1cbm1tL01ha2VmaWxlPTEwND1vYmotJChDT05GSUdfTUVNQ0dfVjEpICYjNDM7PSBtZW1jb250cm9sLXYxLm9cbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gYnBmX21lbWNvbnRyb2wub1xubW0vTWFrZWZpbGUtMTA4LWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA5OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyOTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50OgoKKipNZW1vcnkgQ29udHJvbCBHcm91cHMgYW5kIFJlY2xhaW0qKgoKUmlnaHQsIHNvLCBmaXJzdCBhbmQgZm9yZW1vc3QsIEkmIzM5O20gYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgYENPTkZJR19NRU1DR2AgbmVlZHMgdG8gYmUgZW5hYmxlZC4gTm8gcXVlc3Rpb24gYWJvdXQgaXQuIEl0JiMzOTtzIHRoZSBmb3VuZGF0aW9uIHdlJiMzOTtyZSB3b3JraW5nIGZyb20sIGFuZCB3aXRob3V0IGl0LCB3ZSYjMzk7cmUgbm90IGV2ZW4gaGF2aW5nIHRoaXMgY29udmVyc2F0aW9uLgoKQnV0IHRoYXQgYnJpbmdzIG1lIHRvIHRoZSBjb3JlIGNvbmNlcm4uIEkmIzM5O20gd29uZGVyaW5nIGFib3V0IGByZWNsYWltX3N0b3JlYCBpbiBgbW0vdm1zY2FuLmNgLiBIb3cmIzM5O3MgdGhhdCBpbnRlcmFjdGluZyB3aXRoIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCBzZXR1cD8gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgbWVtb3J5IHJlY2xhaW0gbG9naWMgaXMgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIGFuZCByZXNwZWN0aW5nIHRoZSBsaW1pdHMgZW5mb3JjZWQgYnkgdGhlIG1lbW9yeSBjZ3JvdXBzLiBJcyBpdCBwcm9wZXJseSBhc3NvY2lhdGluZyByZWNsYWltZWQgcGFnZXMgd2l0aCB0aGUgY29ycmVjdCBjZ3JvdXA/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGxlYWtzIG9yIGJ5cGFzc2VzPyBJdCYjMzk7cyB0aGF0IHN1YnRsZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHJlY2xhaW0gc3RyYXRlZ2llcyBhbmQgdGhlIGNncm91cCBhY2NvdW50aW5nIHRoYXQgYWx3YXlzIGtlZXBzIG1lIG9uIG15IHRvZXMuIEl04oCZcyB0aGUga2luZCBvZiBhcmVhIHdoZXJlIHNlZW1pbmdseSBtaW5vciBvdmVyc2lnaHRzIGNhbiBsZWFkIHRvIHByZXR0eSBzaWduaWZpY2FudCBwcm9ibGVtcyBkb3duIHRoZSBsaW5lLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IGluYWR2ZXJ0ZW50bHkgdW5kZXJtaW5pbmcgdGhlIHdob2xlIHBvaW50IG9mIGBtZW1jZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA5OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlY2xhaW1fc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz04MDMyPUVYUE9SVF9TWU1CT0xfR1BMKGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKTtcbi0tXG5tbS92bXNjYW4uYy04MDM0LSNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX05VTUEpXG5tbS92bXNjYW4uYzo4MDM1OnN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxubW0vdm1zY2FuLmMtODAzNi1cdFx0XHQgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwOToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzIzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYW5kIGl0JiMzOTtzIGNsZWFyOiB0aGlzIGZ1bmN0aW9uYWxpdHkgaGluZ2VzIG9uIGhhdmluZyBgQ09ORklHX1NZU0ZTYCBhbmQgYENPTkZJR19OVU1BYCBlbmFibGVkLiBUaGF0JiMzOTtzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpb24gYW5kIHBvdGVudGlhbCBkZXBsb3ltZW50LiBJJiMzOTtsbCBtYWtlIGEgbWVudGFsIG5vdGUgdGhhdCBlbmFibGluZyBgQ09ORklHX01FTUNHYCBhbG9uZyB3aXRoIGBDT05GSUdfTlVNQWAgd291bGQgYmUgYSBnb29kIHN0cmF0ZWd5IHRvIHB1cnN1ZS4gVGhleSBzZWVtIGxpa2UgbG9naWNhbCBjb21wYW5pb25zLgoKTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGltcGxlbWVudGF0aW9uLiBJJiMzOTtsbCBqdW1wIGludG8gYG1tL3Ztc2Nhbi5jYCBhbmQgc3BlY2lmaWNhbGx5IGNoZWNrIHRoZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHByZWNpc2VseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGNvbmZpZ3VyYXRpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwOToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9Nzg4Nz1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG4tLVxubW0vdm1zY2FuLmMtNzg5Mi1cbm1tL3Ztc2Nhbi5jOjc4OTM6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vdm1zY2FuLmMtNzg5NC1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmM9ODAzNT1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5tbS92bXNjYW4uYy04MDQwLVxubW0vdm1zY2FuLmM6ODA0MTpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcbm1tL3Ztc2Nhbi5jLTgwNDItXHRyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA5OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTcyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkNvbmRpdGlvbmFsIENvbXBpbGF0aW9uIENvbnVuZHJ1bXMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZnVuY3Rpb24sIGFuZCB0aGUgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXM6ICpJcyBpdCBjb21waWxlZCBjb25kaXRpb25hbGx5PyogSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBzb21ldGhpbmcgdGhhdOKAmXMgYWx3YXlzIHByZXNlbnQgaW4gdGhlIGJ1aWxkLCBvciBpZiBpdHMgaW5jbHVzaW9uIGlzIGRlcGVuZGVudCBvbiBzb21lIHByZXByb2Nlc3NvciBmbGFnLCBjb25maWd1cmF0aW9uIHNldHRpbmcsIG9yIGV2ZW4gYSBzcGVjaWZpYyB0YXJnZXQgcGxhdGZvcm0uCgpUaGUgaW1wbGljYXRpb25zIGFyZSBodWdlLCB5b3Uga25vdy4gSWYgaXQgKmlzKiBjb25kaXRpb25hbCwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbmRpdGlvbnMuIFRoYXQgd2lsbCBpbmZvcm0gd2hldGhlciBJIG5lZWQgdG8gd29ycnkgYWJvdXQgdGhlIHNpZGUgZWZmZWN0cyB3aGVuIGxvb2tpbmcgYXQgdGhlIHdob2xlIHN5c3RlbSBiZWhhdmlvci4gQSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGZ1bmN0aW9uIGltcGFjdHMgdGhlIHJhbmdlIG9mIGV4ZWN1dGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBjb25kaXRpb25hbCBjb21waWxhdGlvbiByZXNpZGVzLCBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQgY29tcGlsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA5OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9pbnRlcm5hbC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9NjI0PWV4dGVybiB2b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKTtcbm1tL2ludGVybmFsLmg6NjI1OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbm1tL2ludGVybmFsLmgtNjI2LVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA5OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTAzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGRlZXBseSBmYW1pbGlhciB3aXRoIGtlcm5lbCBkZXZlbG9wbWVudCBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIGZvY3VzaW5nIG9uIHRoZSBzcGVjaWZpYyB0aG91Z2h0IHByb2Nlc3MgcHJlc2VudGVkOgoKKipDaGVja2luZyBmb3IgUHJvYWN0aXZlIFJlY2xhaW0gR3VhcmRzKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7TGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBoYXZlbiYjMzk7dCBnb3QgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGd1YXJkaW5nIHRoZSAmIzM5O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM5OyBtZWNoYW5pc20gaW4gJiMzOTttbS92bXNjYW4uYyYjMzk7LiYjMzQ7IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IGAjaWZkZWZgIGRpcmVjdGl2ZXMgc3Vycm91bmRpbmcgdGhhdCBmZWF0dXJlLiBJdCYjMzk7cyBjcnVjaWFsLCBvYnZpb3VzbHksIGJlY2F1c2UgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHRoZXJlIHdvdWxkIHRvdGFsbHkgY2hhbmdlIGhvdyBpdCBiZWhhdmVzIGluIGRpZmZlcmVudCBidWlsZCBjb25maWd1cmF0aW9ucywgYW5kIEkgbmVlZCB0byBrZWVwIHRoYXQgYmVoYXZpb3IgaW4gbWluZC4gR290dGEgbWFrZSBzdXJlIGl0JiMzOTtzIGNvbnNpc3RlbnRseSBlbmFibGVkIG9yIGRpc2FibGVkIGFzIEkgZXhwZWN0LiBJdCYjMzk7cyBhIHF1aWNrIGNoZWNrIGJ1dCBhIGZ1bmRhbWVudGFsIG9uZSBiZWZvcmUgSSBkaWcgZGVlcGVyIGludG8gYW55dGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgcmVjbGFpbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDk6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc4ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzg4MDpcdCNlbmRpZlxuNzg4MTpcdFxuNzg4MjpcdGVudW0ge1xuNzg4MzpcdFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUyA9IDAsXG43ODg0Olx0XHRNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCxcbjc4ODU6XHRcdE1FTU9SWV9SRUNMQUlNX05VTEwsXG43ODg2Olx0fTtcbjc4ODc6XHRzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG43ODg4Olx0XHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MsIFwmIzM0O3N3YXBwaW5lc3M9JWRcJiMzNDt9LFxuNzg4OTpcdFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCwgXCYjMzQ7c3dhcHBpbmVzcz1tYXhcJiMzNDt9LFxuNzg5MDpcdFx0eyBNRU1PUllfUkVDTEFJTV9OVUxMLCBOVUxMIH0sXG43ODkxOlx0fTtcbjc4OTI6XHRcbjc4OTM6XHRpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG43ODk0Olx0XHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuNzg5NTpcdHtcbjc4OTY6XHRcdHVuc2lnbmVkIGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcbjc4OTc6XHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSwgbnJfcmVjbGFpbWVkID0gMDtcbjc4OTg6XHRcdGludCBzd2FwcGluZXNzID0gLTE7XG43ODk5Olx0XHRjaGFyICpvbGRfYnVmLCAqc3RhcnQ7XG43OTAwOlx0XHRzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107XG43OTAxOlx0XHRnZnBfdCBnZnBfbWFzayA9IEdGUF9LRVJORUw7XG43OTAyOlx0XG43OTAzOlx0XHRpZiAoIWJ1ZiB8fCAoIW1lbWNnIFx1MDAyNlx1MDAyNiAhcGdkYXQpIHx8IChtZW1jZyBcdTAwMjZcdTAwMjYgcGdkYXQpKVxuNzkwNDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjc5MDU6XHRcbjc5MDY6XHRcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XG43OTA3Olx0XG43OTA4Olx0XHRvbGRfYnVmID0gYnVmO1xuNzkwOTpcdFx0bnJfdG9fcmVjbGFpbSA9IG1lbXBhcnNlKGJ1ZiwgXHUwMDI2YnVmKSAvIFBBR0VfU0laRTtcbjc5MTA6XHRcdGlmIChidWYgPT0gb2xkX2J1Zilcbjc5MTE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43OTEyOlx0XG43OTEzOlx0XHRidWYgPSBzdHJzdHJpcChidWYpO1xuNzkxNDpcdFxuNzkxNTpcdFx0d2hpbGUgKChzdGFydCA9IHN0cnNlcChcdTAwMjZidWYsIFwmIzM0OyBcJiMzNDspKSAhPSBOVUxMKSB7XG43OTE2Olx0XHRcdGlmICghc3RybGVuKHN0YXJ0KSlcbjc5MTc6XHRcdFx0XHRjb250aW51ZTtcbjc5MTg6XHRcdFx0c3dpdGNoIChtYXRjaF90b2tlbihzdGFydCwgdG9rZW5zLCBhcmdzKSkge1xuNzkxOTpcdFx0XHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1M6XG43OTIwOlx0XHRcdFx0aWYgKG1hdGNoX2ludChcdTAwMjZhcmdzWzBdLCBcdTAwMjZzd2FwcGluZXNzKSlcbjc5MjE6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzkyMjpcdFx0XHRcdGlmIChzd2FwcGluZXNzIFx1MDAzYyBNSU5fU1dBUFBJTkVTUyB8fFxuNzkyMzpcdFx0XHRcdCAgICBzd2FwcGluZXNzIFx1MDAzZSBNQVhfU1dBUFBJTkVTUylcbjc5MjQ6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzkyNTpcdFx0XHRcdGJyZWFrO1xuNzkyNjpcdFx0XHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYOlxuNzkyNzpcdFx0XHRcdHN3YXBwaW5lc3MgPSBTV0FQUElORVNTX0FOT05fT05MWTtcbjc5Mjg6XHRcdFx0XHRicmVhaztcbjc5Mjk6XHRcdFx0ZGVmYXVsdDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDk6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1MTYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBSZWNsYWltIE1lY2hhbmlzbXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgSSYjMzk7bSBkZWFsaW5nIHdpdGggc2V2ZXJhbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBtZW1vcnkgcmVjbGFpbS4gVGhlIGNyaXRpY2FsIGZpcnN0IG9ic2VydmF0aW9uIGlzIHRoYXQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzbiYjMzk7dCBndWFyZGVkIGJ5IGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBiZWNhdXNlIGl0IHN1Z2dlc3RzIGEgbW9yZSBkaXJlY3QgY29udHJvbCBvciBpbXBhY3QuIENvbnZlcnNlbHksIGByZWNsYWltX3N0b3JlYCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHVuZGVyIHRoZSBgQ09ORklHX1NZU0ZTYCBhbmQgYENPTkZJR19OVU1BYCBmbGFncy4gVGhpcyBpbmRpY2F0ZXMgaXRzIGZ1bmN0aW9uYWxpdHkgaXMgdGllZCB0byB0aGUgcHJlc2VuY2Ugb2YgYSBzeXNmcyBpbnRlcmZhY2UgYW5kIE5VTUEgYXJjaGl0ZWN0dXJlLCB3aGljaCBzdWdnZXN0cyB0aGlzIGlzIHNvbWVob3cgaW52b2x2ZWQgd2l0aCB0aGUgcHJlc2VudGF0aW9uIG9mIG1lbW9yeSByZWNsYWltIHN0YXRpc3RpY3MsIG9yIHBlcmhhcHMgZXZlbiBzb21lIGNvbnRyb2wgbWVjaGFuaXNtLiBBbmQgZmluYWxseSwgYG1lbW9yeV9yZWNsYWltYCBpcyBsb2NhdGVkIGluIGBtbS9tZW1jb250cm9sLmNgIGFuZCBpcyBjb25kaXRpb25hbGl6ZWQgYnkgYENPTkZJR19NRU1DR2AuIFNvLCB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQgaGVyZSBhcmUgYE1FTUNHYCAoZm9yIGNvbnRyb2wgZ3JvdXBzLCB3aGljaCBJJiMzOTttIGZhbWlsaWFyIHdpdGgpIGFuZCBgTlVNQWAgKE5vbi1Vbmlmb3JtIE1lbW9yeSBBY2Nlc3MpLgoKTm93LCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzY29wZSwgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBmb2N1czogYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCBgcmVjbGFpbV9zdG9yZWAsIGBtZW1vcnlfcmVjbGFpbWAsIGBnZXRfc2Nhbl9jb3VudGAsIGBnZXRfc3dhcHBpbmVzc2AsIGFuZCBgZ2V0X25yX3RvX3NjYW5gLiBUaGVzZSBhcmUgY2xlYXJseSB0aGUgY29yZSBjb21wb25lbnRzIG9mIGludGVyZXN0LiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgcmVsYXRpb25zaGlwcyBhbmQgaG93IHRoZXkgaW50ZXJhY3QgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNoYW5nZXMgYWZmZWN0IHRoZSBzeXN0ZW0uCgpCZWZvcmUgSSBnbyBmdXJ0aGVyLCB0aG91Z2gsIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBtaWdodCBoYXZlIGJlZW4gbW9kaWZpZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgcHJpbWFyeSBvbmVzLiBBaCwgeWVzLCBgX19ub2RlX3JlY2xhaW1gIGhhcyBhbHNvIGJlZW4gbW9kaWZpZWQuIFRoaXMgaW1wbGllcyB0aGF0IHRoZSBjaGFuZ2VzIG1pZ2h0IGFmZmVjdCB0aGUgbm9kZS1sZXZlbCByZWNsYWltIGFzIHdlbGwuIFRoaXMgYWRkaXRpb25hbCBkYXRhIHBvaW50IGlzIGV4dHJlbWVseSBpbXBvcnRhbnQuIEl0IG1lYW5zIEkgaGF2ZSB0byBsb29rIGJleW9uZCBhIHNpbmdsZSBmdW5jdGlvbiwgdGhlIG1vZGlmaWNhdGlvbnMgbWlnaHQgYmUgc3lzdGVtLXdpZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA5OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbm9kZV9yZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NzczNj1zdGF0aWMgdW5zaWduZWQgbG9uZyBub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTc3NjctICovXG5tbS92bXNjYW4uYzo3NzY4OnN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG5tbS92bXNjYW4uYy03NzY5LVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vdm1zY2FuLmM9NzgxMT1pbnQgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vdm1zY2FuLmMtNzg1OS1cbm1tL3Ztc2Nhbi5jOjc4NjA6XHRyZXQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgbnJfcGFnZXMsIFx1MDAyNnNjKSBcdTAwM2U9IG5yX3BhZ2VzO1xubW0vdm1zY2FuLmMtNzg2MS1cdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKTtcbi0tXG5tbS92bXNjYW4uYy03ODcyLVxubW0vdm1zY2FuLmM6Nzg3MzpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxubW0vdm1zY2FuLmMtNzg3NC1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL3Ztc2Nhbi5jPTc4OTM9aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxuLS1cbm1tL3Ztc2Nhbi5jLTc5NzQtXG5tbS92bXNjYW4uYzo3OTc1Olx0XHRcdHJlY2xhaW1lZCA9IF9fbm9kZV9yZWNsYWltKHBnZGF0LCBiYXRjaF9zaXplLCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy03OTc2LVx0XHRcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDk6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MzcKCQkJCQkJCW91dHB1dDogMTg5CgkJCQkJCQl0aG91Z2h0czogMjk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgYSBNZW1vcnkgUmVjbGFpbSBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgY29kZSBkZWZpbml0ZWx5IHRvdWNoZXMgYF9fbm9kZV9yZWNsYWltYC4gVGhhdCYjMzk7cyBhIGtleSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW1wbGljYXRpb25zLgoKTG9va2luZyBhdCB0aGUgZm9jdXMgc3ltYm9scywgSSBzZWU6CgoqICAgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gCiogICBgcmVjbGFpbV9zdG9yZWAKKiAgIGBtZW1vcnlfcmVjbGFpbWAKKiAgIGBnZXRfc2Nhbl9jb3VudGAKKiAgIGBnZXRfc3dhcHBpbmVzc2AKKiAgIGBnZXRfbnJfdG9fc2NhbmAKKiAgIGBfX25vZGVfcmVjbGFpbWAKCldhaXQgYSBtaW51dGUsIGBnZXRfc2Nhbl9jb3VudGAsIGBnZXRfc3dhcHBpbmVzc2AsIGFuZCBgZ2V0X25yX3RvX3NjYW5gLi4uIHRob3NlIGFyZSBzdGF0aWMgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIGBtbS92bXNjYW4uY2AuIFRoZXkmIzM5O3JlIGludGVncmFsIHBhcnRzIG9mIHRoZSBwYWdlIHJlY2xhaW0gbG9naWMsIHdoaWNoIG1lYW5zIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBkZWVwIGludG8gdGhlIGNvcmUgc2Nhbm5pbmcgZnVuY3Rpb25hbGl0eS4gQW5kLCBvZiBjb3Vyc2UsIGBfX25vZGVfcmVjbGFpbWAgaXRzZWxmIGlzIGFsc28gc3RhdGljLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcuCgpPa2F5LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIGBtZW1vcnlfcmVjbGFpbWAuIEFoLCB5ZXMsIGl0JiMzOTtzIHN0YXRpYyB0b28sIGJ1dCBmb3VuZCBpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhpcyBzdWdnZXN0cyBhIGJyb2FkZXIgaW1wYWN0LCBsaWtlbHkgaW52b2x2aW5nIG1lbW9yeSBjb250cm9sIGdyb3Vwcywgd2hpY2ggSSBzdXNwZWN0ZWQgYW55d2F5LgoKVGhpcyBwYXRjaCBpcyB0aWVkIHRvIHRoZSBgTUVNQ0dgIGFuZCBgTlVNQWAgY29uZmlndXJhdGlvbnMsIHdoaWNoIHJlaW5mb3JjZXMgdGhhdCBpdOKAmXMgbW9kaWZ5aW5nIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgTlVNQSBhcmNoaXRlY3R1cmVzLgoKVGhlIGNvcmUgaXNzdWUgc2VlbXMgdG8gYmUgYSBidWcgaW4gcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltOiB1bmRlciBzcGVjaWZpYyBzY2VuYXJpb3MgKHN3YXBwaW5lc3Mgc2V0IHRvIG1heCB3aXRoIG5vIHN3YXAgYXZhaWxhYmxlKSwgaXQgd2FzIHdyb25nbHkgZXZpY3RpbmcgZmlsZSBwYWdlcyB3aGVuIGl0IHNob3VsZCBoYXZlIGJlZW4gc29sZWx5IGZvY3VzaW5nIG9uIGFub255bW91cyBwYWdlcy4gSXQmIzM5O3MgdG91Y2hpbmcgc29tZSBtYWpvciBjb2RlIHBhdGhzIGluIGBtbS92bXNjYW4uY2AgYW5kIGBtbS9tZW1jb250cm9sLmNgLCBtZWFuaW5nIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGNhbiBldmVuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB1c2luZyBjZ3JvdXAgYG1lbW9yeS5yZWNsYWltYCBvciBzeXNmcyBub2RlIGByZWNsYWltYCBhdHRyaWJ1dGVzLgoKSSB0aGluayBJJiMzOTt2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIHNjb3BlLiBUaW1lIHRvIHJ1biBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwOToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAgICYjMzQ7cmVjbGFpbV9zdG9yZSYjMzQ7LAogICAgJiMzNDttZW1vcnlfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDtnZXRfc2Nhbl9jb3VudCYjMzQ7LAogICAgJiMzNDtnZXRfc3dhcHBpbmVzcyYjMzQ7LAogICAgJiMzNDtnZXRfbnJfdG9fc2NhbiYjMzQ7LAogICAgJiMzNDtfX25vZGVfcmVjbGFpbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBwcm9hY3RpdmUgbWVtb3J5IHJlY2xhaW0gd2hlcmUgYW5vbnltb3VzIG1lbW9yeSBvbmx5IHJlY2xhaW0gKHN3YXBwaW5lc3M9bWF4KSBjb3VsZCBpbmNvcnJlY3RseSBmYWxsIGJhY2sgdG8gZXZpY3RpbmcgZmlsZSBwYWdlcyB3aGVuIGFub255bW91cyBwYWdlcyBjYW5ub3QgYmUgcmVjbGFpbWVkIChlLmcuIG5vIHN3YXApLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGFuZCBtbS9tZW1jb250cm9sLmMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGNncm91cCBtZW1vcnkucmVjbGFpbSBvciBzeXNmcyBub2RlIHJlY2xhaW0gYXR0cmlidXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAgICYjMzQ7cmVjbGFpbV9zdG9yZSYjMzQ7LAogICAgJiMzNDttZW1vcnlfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDtnZXRfc2Nhbl9jb3VudCYjMzQ7LAogICAgJiMzNDtnZXRfc3dhcHBpbmVzcyYjMzQ7LAogICAgJiMzNDtnZXRfbnJfdG9fc2NhbiYjMzQ7LAogICAgJiMzNDtfX25vZGVfcmVjbGFpbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBwcm9hY3RpdmUgbWVtb3J5IHJlY2xhaW0gd2hlcmUgYW5vbnltb3VzIG1lbW9yeSBvbmx5IHJlY2xhaW0gKHN3YXBwaW5lc3M9bWF4KSBjb3VsZCBpbmNvcnJlY3RseSBmYWxsIGJhY2sgdG8gZXZpY3RpbmcgZmlsZSBwYWdlcyB3aGVuIGFub255bW91cyBwYWdlcyBjYW5ub3QgYmUgcmVjbGFpbWVkIChlLmcuIG5vIHN3YXApLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGFuZCBtbS9tZW1jb250cm9sLmMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGNncm91cCBtZW1vcnkucmVjbGFpbSBvciBzeXNmcyBub2RlIHJlY2xhaW0gYXR0cmlidXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA5OjE3OjQ3Ljg3NjgwMDY3NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNzA1ODY0MTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJOVU1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICAgIFwicmVjbGFpbV9zdG9yZVwiLFxuICAgIFwibWVtb3J5X3JlY2xhaW1cIixcbiAgICBcImdldF9zY2FuX2NvdW50XCIsXG4gICAgXCJnZXRfc3dhcHBpbmVzc1wiLFxuICAgIFwiZ2V0X25yX3RvX3NjYW5cIixcbiAgICBcIl9fbm9kZV9yZWNsYWltXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIHdoZXJlIGFub255bW91cyBtZW1vcnkgb25seSByZWNsYWltIChzd2FwcGluZXNzPW1heCkgY291bGQgaW5jb3JyZWN0bHkgZmFsbCBiYWNrIHRvIGV2aWN0aW5nIGZpbGUgcGFnZXMgd2hlbiBhbm9ueW1vdXMgcGFnZXMgY2Fubm90IGJlIHJlY2xhaW1lZCAoZS5nLiBubyBzd2FwKS4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS92bXNjYW4uYyBhbmQgbW0vbWVtY29udHJvbC5jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBjZ3JvdXAgbWVtb3J5LnJlY2xhaW0gb3Igc3lzZnMgbm9kZSByZWNsYWltIGF0dHJpYnV0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA5OjE3OjQ3Ljg3NjgwOTUxNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY2NjQ3NDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTBhNDE2NjIwNWQwMWQyMzMyNzU2ZDdmMjA5OGYxYzIwOTVhYTk0MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAyNCAwOToxNzo0NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggMzVjM2JiMTVhZTk2YTMuLjIwY2I5M2ZkM2RhODI0IDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtMjUwMSw2ICsyNTAxLDIzIEBAIHN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuIFxcdGVudW0gc2Nhbl9iYWxhbmNlIHNjYW5fYmFsYW5jZTtcXG4gXFx0ZW51bSBscnVfbGlzdCBscnU7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBQcm9hY3RpdmUgcmVjbGFpbSBpbml0aWF0ZWQgYnkgdXNlcnNwYWNlIGZvciBhbm9ueW1vdXMgbWVtb3J5IG9ubHkuXFxuK1xcdCAqIFNXQVBQSU5FU1NfQU5PTl9PTkxZIGlzIHNldCBvbmx5IG9uIHRoZSBwcm9hY3RpdmUgcmVjbGFpbSBwYXRoLCBzb1xcbitcXHQgKiB3YXJuIGlmIGl0IHNob3dzIHVwIGVsc2V3aGVyZS4gV2hlbiBhbm9uIGNhbm5vdCBiZSByZWNsYWltZWQgKGUuZy5cXG4rXFx0ICogbm8gc3dhcCksIGJhaWwgb3V0IGluc3RlYWQgb2YgZmFsbGluZyBiYWNrIHRvIGV2aWN0aW5nIGZpbGUgcGFnZXMsXFxuK1xcdCAqIHdoaWNoIHdvdWxkIHZpb2xhdGUgdGhlIGFub24tb25seSBzZW1hbnRpY3MuXFxuK1xcdCAqL1xcbitcXHRpZiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSkge1xcbitcXHRcXHRXQVJOX09OX09OQ0UoIXNjLVxcdTAwM2Vwcm9hY3RpdmUpO1xcbitcXHRcXHRpZiAoIWNhbl9yZWNsYWltX2Fub25fcGFnZXMobWVtY2csIHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBzYykpIHtcXG4rXFx0XFx0XFx0bWVtc2V0KG5yLCAwLCBzaXplb2YoKm5yKSAqIE5SX0xSVV9MSVNUUyk7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXHRcXHRzY2FuX2JhbGFuY2UgPSBTQ0FOX0FOT047XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbiBcXHQvKiBJZiB3ZSBoYXZlIG5vIHN3YXAgc3BhY2UsIGRvIG5vdCBib3RoZXIgc2Nhbm5pbmcgYW5vbiBmb2xpb3MuICovXFxuIFxcdGlmICghc2MtXFx1MDAzZW1heV9zd2FwIHx8ICFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgc2MpKSB7XFxuIFxcdFxcdHNjYW5fYmFsYW5jZSA9IFNDQU5fRklMRTtcXG5AQCAtMjUxOSwxMyArMjUzNiw2IEBAIHN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbi1cXHQvKiBQcm9hY3RpdmUgcmVjbGFpbSBpbml0aWF0ZWQgYnkgdXNlcnNwYWNlIGZvciBhbm9ueW1vdXMgbWVtb3J5IG9ubHkgKi9cXG4tXFx0aWYgKHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFkpIHtcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKCFzYy1cXHUwMDNlcHJvYWN0aXZlKTtcXG4tXFx0XFx0c2Nhbl9iYWxhbmNlID0gU0NBTl9BTk9OO1xcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFx0fVxcbi1cXG4gXFx0LypcXG4gXFx0ICogRG8gbm90IGFwcGx5IGFueSBwcmVzc3VyZSBiYWxhbmNpbmcgY2xldmVybmVzcyB3aGVuIHRoZVxcbiBcXHQgKiBzeXN0ZW0gaXMgY2xvc2UgdG8gT09NLCBzY2FuIGJvdGggYW5vbiBhbmQgZmlsZSBlcXVhbGx5XFxuQEAgLTI2OTgsNiArMjcwOCwxMCBAQCBzdGF0aWMgaW50IGdldF9zd2FwcGluZXNzKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XFxuIFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcXG4rXFx0aW50IHN3YXBwaW5lc3MgPSBzY19zd2FwcGluZXNzKHNjLCBtZW1jZyk7XFxuK1xcbitcXHRpZiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSlcXG4rXFx0XFx0cmV0dXJuIHN3YXBwaW5lc3M7XFxuIFxcbiBcXHRpZiAoIXNjLVxcdTAwM2VtYXlfc3dhcClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTI3MDYsNyArMjcyMCw3IEBAIHN0YXRpYyBpbnQgZ2V0X3N3YXBwaW5lc3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4gXFx0ICAgIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIFxcdTAwM2MgTUlOX0xSVV9CQVRDSClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRyZXR1cm4gc2Nfc3dhcHBpbmVzcyhzYywgbWVtY2cpO1xcbitcXHRyZXR1cm4gc3dhcHBpbmVzcztcXG4gfVxcbiBcXG4gc3RhdGljIGludCBnZXRfbnJfZ2VucyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxcbkBAIC00OTExLDYgKzQ5MjUsMTkgQEAgc3RhdGljIGxvbmcgZ2V0X25yX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4gXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgc3dhcHBpbmVzcylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIGV2aWN0YWJsZTtcXG4rXFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xcbitcXHQvKlxcbitcXHQgKiBQcm9hY3RpdmUgcmVjbGFpbSBpbml0aWF0ZWQgYnkgdXNlcnNwYWNlIGZvciBhbm9ueW1vdXMgbWVtb3J5IG9ubHkuXFxuK1xcdCAqIFNXQVBQSU5FU1NfQU5PTl9PTkxZIGlzIHNldCBvbmx5IG9uIHRoZSBwcm9hY3RpdmUgcmVjbGFpbSBwYXRoLCBzb1xcbitcXHQgKiB3YXJuIGlmIGl0IHNob3dzIHVwIGVsc2V3aGVyZS4gV2hlbiBhbm9uIGNhbm5vdCBiZSByZWNsYWltZWQgKGUuZy5cXG4rXFx0ICogbm8gc3dhcCksIHJldHVybiAwIGluc3RlYWQgb2YgZmFsbGluZyB0aHJvdWdoIGFuZCBldmljdGluZyBmaWxlXFxuK1xcdCAqIHBhZ2VzLCB3aGljaCB3b3VsZCB2aW9sYXRlIHRoZSBhbm9uLW9ubHkgc2VtYW50aWNzLlxcbitcXHQgKi9cXG4rXFx0aWYgKHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgc2MpKSB7XFxuK1xcdFxcdFdBUk5fT05fT05DRSghc2MtXFx1MDAzZXByb2FjdGl2ZSk7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuIFxcbiBcXHRldmljdGFibGUgPSBscnV2ZWNfZXZpY3RhYmxlX3NpemUobHJ1dmVjLCBzd2FwcGluZXNzKTtcXG4gXFxuQEAgLTc3MzgsNyArNzc2NSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuIC8qXFxuICAqIFRyeSB0byBmcmVlIHVwIHNvbWUgcGFnZXMgZnJvbSB0aGlzIG5vZGUgdGhyb3VnaCByZWNsYWltLlxcbiAgKi9cXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuIFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuIHtcXG5AQCAtNzgzMCw3ICs3ODU3LDcgQEAgaW50IG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxcbiBcXHRpZiAodGVzdF9hbmRfc2V0X2JpdF9sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcXHUwMDI2cGdkYXQtXFx1MDAzZWZsYWdzKSlcXG4gXFx0XFx0cmV0dXJuIE5PREVfUkVDTEFJTV9OT1NDQU47XFxuIFxcbi1cXHRyZXQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgZ2ZwX21hc2ssIG5yX3BhZ2VzLCBcXHUwMDI2c2MpIFxcdTAwM2U9IG5yX3BhZ2VzO1xcbitcXHRyZXQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgbnJfcGFnZXMsIFxcdTAwMjZzYykgXFx1MDAzZT0gbnJfcGFnZXM7XFxuIFxcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFxcdTAwMjZwZ2RhdC1cXHUwMDNlZmxhZ3MpO1xcbiBcXG4gXFx0aWYgKHJldClcXG5AQCAtNzg0Myw3ICs3ODcwLDcgQEAgaW50IG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxcbiBcXG4gI2Vsc2VcXG4gXFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLFxcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbiBcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbiB7XFxuQEAgLTc5NDUsOCArNzk3Miw3IEBAIGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2cGdkYXQtXFx1MDAzZWZsYWdzKSlcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFxuLVxcdFxcdFxcdHJlY2xhaW1lZCA9IF9fbm9kZV9yZWNsYWltKHBnZGF0LCBnZnBfbWFzayxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgYmF0Y2hfc2l6ZSwgXFx1MDAyNnNjKTtcXG4rXFx0XFx0XFx0cmVjbGFpbWVkID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGJhdGNoX3NpemUsIFxcdTAwMjZzYyk7XFxuIFxcdFxcdFxcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFxcdTAwMjZwZ2RhdC1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC04MDEzLDcgKzgwMzksNyBAQCBzdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4gXFx0aW50IHJldCwgbmlkID0gZGV2LVxcdTAwM2VpZDtcXG4gXFxuIFxcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcXG4tXFx0cmV0dXJuIHJldCA/IC1FQUdBSU4gOiBjb3VudDtcXG4rXFx0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xcbiB9XFxuIFxcbiBzdGF0aWMgREVWSUNFX0FUVFJfV08ocmVjbGFpbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA5OjE3OjQ4LjQ0NDQyOTE4N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYwMTM4MjE0NjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJOVU1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICAgIFwicmVjbGFpbV9zdG9yZVwiLFxuICAgIFwibWVtb3J5X3JlY2xhaW1cIixcbiAgICBcImdldF9zY2FuX2NvdW50XCIsXG4gICAgXCJnZXRfc3dhcHBpbmVzc1wiLFxuICAgIFwiZ2V0X25yX3RvX3NjYW5cIixcbiAgICBcIl9fbm9kZV9yZWNsYWltXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIHdoZXJlIGFub255bW91cyBtZW1vcnkgb25seSByZWNsYWltIChzd2FwcGluZXNzPW1heCkgY291bGQgaW5jb3JyZWN0bHkgZmFsbCBiYWNrIHRvIGV2aWN0aW5nIGZpbGUgcGFnZXMgd2hlbiBhbm9ueW1vdXMgcGFnZXMgY2Fubm90IGJlIHJlY2xhaW1lZCAoZS5nLiBubyBzd2FwKS4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS92bXNjYW4uYyBhbmQgbW0vbWVtY29udHJvbC5jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBjZ3JvdXAgbWVtb3J5LnJlY2xhaW0gb3Igc3lzZnMgbm9kZSByZWNsYWltIGF0dHJpYnV0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTBhNDE2NjIwNWQwMWQyMzMyNzU2ZDdmMjA5OGYxYzIwOTVhYTk0MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDA5OjE3OjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YTMuLjIwY2I5M2ZkM2RhODI0IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtMjUwMSw2ICsyNTAxLDIzIEBAIHN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4gXHRlbnVtIHNjYW5fYmFsYW5jZSBzY2FuX2JhbGFuY2U7XG4gXHRlbnVtIGxydV9saXN0IGxydTtcbiBcbitcdC8qXG4rXHQgKiBQcm9hY3RpdmUgcmVjbGFpbSBpbml0aWF0ZWQgYnkgdXNlcnNwYWNlIGZvciBhbm9ueW1vdXMgbWVtb3J5IG9ubHkuXG4rXHQgKiBTV0FQUElORVNTX0FOT05fT05MWSBpcyBzZXQgb25seSBvbiB0aGUgcHJvYWN0aXZlIHJlY2xhaW0gcGF0aCwgc29cbitcdCAqIHdhcm4gaWYgaXQgc2hvd3MgdXAgZWxzZXdoZXJlLiBXaGVuIGFub24gY2Fubm90IGJlIHJlY2xhaW1lZCAoZS5nLlxuK1x0ICogbm8gc3dhcCksIGJhaWwgb3V0IGluc3RlYWQgb2YgZmFsbGluZyBiYWNrIHRvIGV2aWN0aW5nIGZpbGUgcGFnZXMsXG4rXHQgKiB3aGljaCB3b3VsZCB2aW9sYXRlIHRoZSBhbm9uLW9ubHkgc2VtYW50aWNzLlxuK1x0ICovXG4rXHRpZiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSkge1xuK1x0XHRXQVJOX09OX09OQ0UoIXNjLVx1MDAzZXByb2FjdGl2ZSk7XG4rXHRcdGlmICghY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MpKSB7XG4rXHRcdFx0bWVtc2V0KG5yLCAwLCBzaXplb2YoKm5yKSAqIE5SX0xSVV9MSVNUUyk7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXHRcdHNjYW5fYmFsYW5jZSA9IFNDQU5fQU5PTjtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4gXHQvKiBJZiB3ZSBoYXZlIG5vIHN3YXAgc3BhY2UsIGRvIG5vdCBib3RoZXIgc2Nhbm5pbmcgYW5vbiBmb2xpb3MuICovXG4gXHRpZiAoIXNjLVx1MDAzZW1heV9zd2FwIHx8ICFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYykpIHtcbiBcdFx0c2Nhbl9iYWxhbmNlID0gU0NBTl9GSUxFO1xuQEAgLTI1MTksMTMgKzI1MzYsNiBAQCBzdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdC8qIFByb2FjdGl2ZSByZWNsYWltIGluaXRpYXRlZCBieSB1c2Vyc3BhY2UgZm9yIGFub255bW91cyBtZW1vcnkgb25seSAqL1xuLVx0aWYgKHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFkpIHtcbi1cdFx0V0FSTl9PTl9PTkNFKCFzYy1cdTAwM2Vwcm9hY3RpdmUpO1xuLVx0XHRzY2FuX2JhbGFuY2UgPSBTQ0FOX0FOT047XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuIFx0LypcbiBcdCAqIERvIG5vdCBhcHBseSBhbnkgcHJlc3N1cmUgYmFsYW5jaW5nIGNsZXZlcm5lc3Mgd2hlbiB0aGVcbiBcdCAqIHN5c3RlbSBpcyBjbG9zZSB0byBPT00sIHNjYW4gYm90aCBhbm9uIGFuZCBmaWxlIGVxdWFsbHlcbkBAIC0yNjk4LDYgKzI3MDgsMTAgQEAgc3RhdGljIGludCBnZXRfc3dhcHBpbmVzcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuK1x0aW50IHN3YXBwaW5lc3MgPSBzY19zd2FwcGluZXNzKHNjLCBtZW1jZyk7XG4rXG4rXHRpZiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSlcbitcdFx0cmV0dXJuIHN3YXBwaW5lc3M7XG4gXG4gXHRpZiAoIXNjLVx1MDAzZW1heV9zd2FwKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0yNzA2LDcgKzI3MjAsNyBAQCBzdGF0aWMgaW50IGdldF9zd2FwcGluZXNzKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXHQgICAgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhtZW1jZykgXHUwMDNjIE1JTl9MUlVfQkFUQ0gpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cmV0dXJuIHNjX3N3YXBwaW5lc3Moc2MsIG1lbWNnKTtcbitcdHJldHVybiBzd2FwcGluZXNzO1xuIH1cbiBcbiBzdGF0aWMgaW50IGdldF9ucl9nZW5zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpXG5AQCAtNDkxMSw2ICs0OTI1LDE5IEBAIHN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4gXHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgc3dhcHBpbmVzcylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIGV2aWN0YWJsZTtcbitcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbitcdC8qXG4rXHQgKiBQcm9hY3RpdmUgcmVjbGFpbSBpbml0aWF0ZWQgYnkgdXNlcnNwYWNlIGZvciBhbm9ueW1vdXMgbWVtb3J5IG9ubHkuXG4rXHQgKiBTV0FQUElORVNTX0FOT05fT05MWSBpcyBzZXQgb25seSBvbiB0aGUgcHJvYWN0aXZlIHJlY2xhaW0gcGF0aCwgc29cbitcdCAqIHdhcm4gaWYgaXQgc2hvd3MgdXAgZWxzZXdoZXJlLiBXaGVuIGFub24gY2Fubm90IGJlIHJlY2xhaW1lZCAoZS5nLlxuK1x0ICogbm8gc3dhcCksIHJldHVybiAwIGluc3RlYWQgb2YgZmFsbGluZyB0aHJvdWdoIGFuZCBldmljdGluZyBmaWxlXG4rXHQgKiBwYWdlcywgd2hpY2ggd291bGQgdmlvbGF0ZSB0aGUgYW5vbi1vbmx5IHNlbWFudGljcy5cbitcdCAqL1xuK1x0aWYgKHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWNhbl9yZWNsYWltX2Fub25fcGFnZXMobWVtY2csIHBnZGF0LVx1MDAzZW5vZGVfaWQsIHNjKSkge1xuK1x0XHRXQVJOX09OX09OQ0UoIXNjLVx1MDAzZXByb2FjdGl2ZSk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuIFxuIFx0ZXZpY3RhYmxlID0gbHJ1dmVjX2V2aWN0YWJsZV9zaXplKGxydXZlYywgc3dhcHBpbmVzcyk7XG4gXG5AQCAtNzczOCw3ICs3NzY1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlY2FjaGVfcmVjbGFpbWFibGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbiAvKlxuICAqIFRyeSB0byBmcmVlIHVwIHNvbWUgcGFnZXMgZnJvbSB0aGlzIG5vZGUgdGhyb3VnaCByZWNsYWltLlxuICAqL1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4gXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG5AQCAtNzgzMCw3ICs3ODU3LDcgQEAgaW50IG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxuIFx0aWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXHUwMDI2cGdkYXQtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm4gTk9ERV9SRUNMQUlNX05PU0NBTjtcbiBcbi1cdHJldCA9IF9fbm9kZV9yZWNsYWltKHBnZGF0LCBnZnBfbWFzaywgbnJfcGFnZXMsIFx1MDAyNnNjKSBcdTAwM2U9IG5yX3BhZ2VzO1xuK1x0cmV0ID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIG5yX3BhZ2VzLCBcdTAwMjZzYykgXHUwMDNlPSBucl9wYWdlcztcbiBcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKTtcbiBcbiBcdGlmIChyZXQpXG5AQCAtNzg0Myw3ICs3ODcwLDcgQEAgaW50IG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxuIFxuICNlbHNlXG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbiBcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIHtcbkBAIC03OTQ1LDggKzc5NzIsNyBAQCBpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG4gXHRcdFx0XHRcdFx0ICBcdTAwMjZwZ2RhdC1cdTAwM2VmbGFncykpXG4gXHRcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuLVx0XHRcdHJlY2xhaW1lZCA9IF9fbm9kZV9yZWNsYWltKHBnZGF0LCBnZnBfbWFzayxcbi1cdFx0XHRcdFx0XHQgICBiYXRjaF9zaXplLCBcdTAwMjZzYyk7XG4rXHRcdFx0cmVjbGFpbWVkID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGJhdGNoX3NpemUsIFx1MDAyNnNjKTtcbiBcdFx0XHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcdTAwMjZwZ2RhdC1cdTAwM2VmbGFncyk7XG4gXHRcdH1cbiBcbkBAIC04MDEzLDcgKzgwMzksNyBAQCBzdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdGludCByZXQsIG5pZCA9IGRldi1cdTAwM2VpZDtcbiBcbiBcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcbi1cdHJldHVybiByZXQgPyAtRUFHQUlOIDogY291bnQ7XG4rXHRyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7XG4gfVxuIFxuIHN0YXRpYyBERVZJQ0VfQVRUUl9XTyhyZWNsYWltKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA5OjE3OjQ4LjQ0NDQzMTMxN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MjIzMzAzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWTVNjYW4gUGF0Y2g6IEEgRGVlcCBEaXZlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG1tL3Ztc2Nhbi5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBoZWFydCBvZiBtZW1vcnkgbWFuYWdlbWVudCBpbiB0aGUga2VybmVsIOKAkyBzcGVjaWZpY2FsbHkgdGhlIHZpcnR1YWwgbWVtb3J5IHNjYW5uZXIuIFRoaXMgbG9va3MgdG8gYmUgYWRkcmVzc2luZyBhIG51YW5jZWQgaXNzdWUgYXJvdW5kIHByb2FjdGl2ZSByZWNsYWltIGJlaGF2aW9yIHdpdGggYFNXQVBQSU5FU1NfQU5PTl9PTkxZYC4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgaXQncyBmaXhpbmcgYSBzY2VuYXJpbyB3aGVyZSwgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9ucyAobGlrZSBhIGxhY2sgb2YgYXZhaWxhYmxlIHN3YXAgc3BhY2UpLCB0aGUgc3lzdGVtIG1pZ2h0IGluYXBwcm9wcmlhdGVseSBzdGFydCBldmljdGluZyBmaWxlIHBhZ2VzIHdoZW4gaXQncyBzdXBwb3NlZCB0byAqb25seSogZm9jdXMgb24gYW5vbnltb3VzIChhbm9uKSBwYWdlcy4gVGhpcyBpcyBzb21ldGhpbmcgSSd2ZSBzZWVuIGJlZm9yZTsgaXQncyBhIGNsYXNzaWMgY2FzZSBvZiBzdWJ0bGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBkaWZmZXJlbnQgcmVjbGFpbSBzdHJhdGVnaWVzLlxuXG5UaGUgcGF0Y2ggdG91Y2hlcyBhIGNsdXN0ZXIgb2YgZnVuY3Rpb25zOiBgZ2V0X3NjYW5fY291bnRgLCBgZ2V0X3N3YXBwaW5lc3NgLCBgZ2V0X25yX3RvX3NjYW5gLCBgX19ub2RlX3JlY2xhaW1gLCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIGFuZCBgcmVjbGFpbV9zdG9yZWAuIFRoZSBtb2RpZmljYXRpb25zIHRvIGBfX25vZGVfcmVjbGFpbWAgbG9vayBzdHJhaWdodGZvcndhcmQ7IHJlbW92aW5nIGFuIHVudXNlZCBgZ2ZwX21hc2tgIGlzIGdlbmVyYWxseSBhIHNpZ24gb2YgZ29vZCBoeWdpZW5lIGFuZCByZWR1Y3Rpb24gb2YgY29kZSBjbHV0dGVyLiBOb3RoaW5nIGltbWVkaWF0ZWx5IGFsYXJtaW5nIHRoZXJlLlxuXG5UaGUgdHdlYWsgdG8gYHJlY2xhaW1fc3RvcmVgIHRvIHJldHVybiBgcmV0YCBpbnN0ZWFkIG9mIGAtRUFHQUlOYCB3aGVuIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBmYWlscyB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIFRoaXMgc3VnZ2VzdHMgYSBjaGFuZ2UgaW4gZXJyb3IgaGFuZGxpbmcgb3IgYSBzaGlmdCBpbiBob3cgZmFpbHVyZSBzdGF0ZXMgYXJlIGNvbW11bmljYXRlZC4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMsIHBhcnRpY3VsYXJseSBob3cgdGhlIGNhbGxlciB3aWxsIGludGVycHJldCB0aGUgY2hhbmdlIGluIHJldHVybiB2YWx1ZS5cblxuTm93LCBsZXQncyB0cmFjZSB0aGUgY2FsbHMuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHdoZXJlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBhbmQgYHJlY2xhaW1fc3RvcmVgIGFyZSBhY3R1YWxseSBpbnZva2VkLiBJIHJlbWVtYmVyIHRoYXQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGNhbGxlZCBmcm9tIGJvdGggYHJlY2xhaW1fc3RvcmVgIGFuZCBgbWVtb3J5X3JlY2xhaW1gIC0tIGdvb2QgdG8ga25vdy4gVGhlIGZhY3QgdGhhdCBgcmVjbGFpbV9zdG9yZWAgaXMgYSBzeXNmcyBhdHRyaWJ1dGUgb24gYSBub2RlIGRldmljZSBpcyBpbXBvcnRhbnQ7IHRoaXMgdGVsbHMgbWUgaXQncyBhIHVzZXItc3BhY2UgaW50ZXJmYWNlIGZvciB0cmlnZ2VyaW5nIHJlY2xhaW0gb24gYSBzcGVjaWZpYyBOVU1BIG5vZGUuIEFuZCBgbWVtb3J5X3JlY2xhaW1gIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgaXQncyBhIGNncm91cCBhdHRyaWJ1dGUuIEJvdGggZ2l2ZSBpbXBvcnRhbnQgaGludHMuIE5vdyBJJ2xsIHNjYW4gdGhlIHNvdXJjZSBjb2RlIGRpcmVjdGx5IHRvIGNvbmZpcm0gdGhpcyB1bmRlcnN0YW5kaW5nIGFuZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBlbGVtZW50cyBmaXQgaW50byB0aGUgYnJvYWRlciBrZXJuZWwgcmVjbGFpbSBwcm9jZXNzLiBJJ2xsIGZvY3VzIG9uIGhvdyB0aGUgY29udHJvbCBmbG93IGNoYW5nZXMgd2l0aCB0aGlzIGZpeC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUzNSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA5OjE3OjU1LjI2Njc2NTA4NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTkyMjQ4NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaW50ZXJuYWwuaD02MjQ9ZXh0ZXJuIHZvaWQgcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBlbnVtIHZtc2Nhbl90aHJvdHRsZV9zdGF0ZSByZWFzb24pO1xcbm1tL2ludGVybmFsLmg6NjI1OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG5tbS9pbnRlcm5hbC5oLTYyNi1cXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ5ODk9c3RhdGljIHNzaXplX3QgbWVtb3J5X3JlY2xhaW0oc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDk5NC1cXG5tbS9tZW1jb250cm9sLmM6NDk5NTpcXHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGJ1ZiwgbWVtY2csIE5VTEwpO1xcbm1tL21lbWNvbnRyb2wuYy00OTk2LVxcdGlmIChyZXQpXFxuLS1cXG5tbS92bXNjYW4uYz03ODg3PXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc4OTItXFxubW0vdm1zY2FuLmM6Nzg5MzppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxubW0vdm1zY2FuLmMtNzg5NC1cXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYz04MDM1PXN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxubW0vdm1zY2FuLmMtODA0MC1cXG5tbS92bXNjYW4uYzo4MDQxOlxcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcXG5tbS92bXNjYW4uYy04MDQyLVxcdHJldHVybiByZXQgPyByZXQgOiBjb3VudDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDk6MTc6NTguMjU5MDE4ODM4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAxMjA1MjYyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgbmV3IGZ1bmN0aW9uLCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIGFuZCBpdCdzIGxvb2tpbmcgbGlrZSBpdCBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgY2dyb3VwJ3MgYG1lbW9yeS5yZWNsYWltYCBpbnRlcmZhY2UgYW5kIHRoZSBgcmVjbGFpbWAgc3lzZnMgbm9kZS4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgY291bGQgYmUgYSBwb2ludCBvZiBpbnRlcmVzdCBmb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IHNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB3aXRoaW4gYHZtc2NhbmAuIEknbSBhbHJlYWR5IHRoaW5raW5nIHRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgYWJzb2x1dGVseSB3b3J0aCBhIGRlZGljYXRlZCBmdXp6aW5nIGNhbXBhaWduLlxuXG5UbyBkaWcgZGVlcGVyLCB0aGUga2V5IHN5bWJvbHMgdGhhdCBpbW1lZGlhdGVseSBncmFiIG15IGF0dGVudGlvbiBhcmUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGl0c2VsZiwgb2YgY291cnNlLCBhbG9uZyB3aXRoIGByZWNsYWltX3N0b3JlYCwgd2hpY2ggbGlrZWx5IGhhbmRsZXMgdGhlIGludGVyZmFjZSBpbnRvIHRoYXQgZnVuY3Rpb24sIGFuZCBgbWVtb3J5X3JlY2xhaW1gIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGludGVycmVsYXRlLiBGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzY2FuIGxpbWl0cyBhcmUgaW1wb3NlZCBhbmQgY29uZmlndXJlZCwgc28gYGdldF9zY2FuX2NvdW50YCwgYGdldF9zd2FwcGluZXNzYCwgYW5kIGBnZXRfbnJfdG9fc2NhbmAgd2lsbCBuZWVkIHNjcnV0aW55IHRvIHVuZGVyc3RhbmQgdGhlIGxpbWl0cyBpbXBvc2VkLlxuXG5JIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayBpZiBgQ09ORklHX01FTUNHYCBpcyByZXF1aXJlZCBmb3IgYG1lbW9yeV9yZWNsYWltYCB0byBmdW5jdGlvbiBwcm9wZXJseS4gVGhhdCBkZXBlbmRlbmN5IGNvdWxkIGRpY3RhdGUgaG93IGJyb2FkbHkgYXBwbGljYWJsZSB0aGlzIHZ1bG5lcmFiaWxpdHkgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MjAsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDk6MTg6MDMuMjcxMDc1NzQxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTYxNzk4MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtb3J5X3JlY2xhaW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaD0xMzU9S1ZNX1g4Nl9PUF9PUFRJT05BTCh2bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20pXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxMzY6S1ZNX1g4Nl9PUF9PUFRJT05BTChndWVzdF9tZW1vcnlfcmVjbGFpbWVkKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgtMTM3LUtWTV9YODZfT1AoZ2V0X2ZlYXR1cmVfbXNyKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0xNzg1PXN0cnVjdCBrdm1feDg2X29wcyB7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTE5ODYtXFx0aW50ICgqdm1fbW92ZV9lbmNfY29udGV4dF9mcm9tKShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBzb3VyY2VfZmQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MTk4NzpcXHR2b2lkICgqZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCkoc3RydWN0IGt2bSAqa3ZtKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTE5ODgtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMyNTk9c3RhdGljIHZvaWQgc2V2X2ZsdXNoX2VuY3J5cHRlZF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCAqdmEpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyOTQtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjk1OnZvaWQgc2V2X2d1ZXN0X21lbW9yeV9yZWNsYWltZWQoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzI5Ni17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTUzMzA9c3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0NTEtXFx0Lm1lbV9lbmNfdW5yZWdpc3Rlcl9yZWdpb24gPSBzZXZfbWVtX2VuY191bnJlZ2lzdGVyX3JlZ2lvbixcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU0NTI6XFx0Lmd1ZXN0X21lbW9yeV9yZWNsYWltZWQgPSBzZXZfZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0NTMtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTk4Nz1pbnQgc2V2X3ZtX21vdmVfZW5jX2NvbnRleHRfZnJvbShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBzb3VyY2VfZmQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6OTg4OnZvaWQgc2V2X2d1ZXN0X21lbW9yeV9yZWNsYWltZWQoc3RydWN0IGt2bSAqa3ZtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTk4OS1pbnQgc2V2X2hhbmRsZV92bWdleGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTEwNzM9c3RhdGljIHZvaWQgdmNwdV9sb2FkX2VvaV9leGl0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTA5Mi1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTEwOTM6dm9pZCBrdm1fYXJjaF9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTEwOTQte1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMTA5NTpcXHRrdm1feDg2X2NhbGwoZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCkoa3ZtKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTEwOTYtfVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jPTgwMD1zdGF0aWMgaW50IGZmYV9tZW1vcnlfb3BzKHUzMiBmdW5jX2lkLCBzdHJ1Y3QgZmZhX21lbV9vcHNfYXJncyAqYXJncylcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYy04MjQtXFxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jOjgyNTpzdGF0aWMgaW50IGZmYV9tZW1vcnlfcmVjbGFpbSh1NjQgZ19oYW5kbGUsIHUzMiBmbGFncylcXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmMtODI2LXtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYz0xNjIzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmZhX21lbV9vcHMgZmZhX2Rydl9tZW1fb3BzID0ge1xcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYzoxNjI0OlxcdC5tZW1vcnlfcmVjbGFpbSA9IGZmYV9tZW1vcnlfcmVjbGFpbSxcXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmMtMTYyNS1cXHQubWVtb3J5X3NoYXJlID0gZmZhX21lbW9yeV9zaGFyZSxcXG4tLVxcbmRyaXZlcnMvdGVlL29wdGVlL2ZmYV9hYmkuYz0yNzA9c3RhdGljIGludCBvcHRlZV9mZmFfc2htX3JlZ2lzdGVyKHN0cnVjdCB0ZWVfY29udGV4dCAqY3R4LCBzdHJ1Y3QgdGVlX3NobSAqc2htLFxcbi0tXFxuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jLTMwNC1cXHRpZiAocmMpIHtcXG5kcml2ZXJzL3RlZS9vcHRlZS9mZmFfYWJpLmM6MzA1OlxcdFxcdG1lbV9vcHMtXFx1MDAzZW1lbW9yeV9yZWNsYWltKGFyZ3MuZ19oYW5kbGUsIDApO1xcbmRyaXZlcnMvdGVlL29wdGVlL2ZmYV9hYmkuYy0zMDYtXFx0XFx0cmV0dXJuIHJjO1xcbi0tXFxuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jPTMxND1zdGF0aWMgaW50IG9wdGVlX2ZmYV9zaG1fdW5yZWdpc3RlcihzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCxcXG4tLVxcbmRyaXZlcnMvdGVlL29wdGVlL2ZmYV9hYmkuYy0zMzUtXFxuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jOjMzNjpcXHRyYyA9IG1lbV9vcHMtXFx1MDAzZW1lbW9yeV9yZWNsYWltKGdsb2JhbF9oYW5kbGUsIDApO1xcbmRyaXZlcnMvdGVlL29wdGVlL2ZmYV9hYmkuYy0zMzctXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jPTM0Mz1zdGF0aWMgaW50IG9wdGVlX2ZmYV9zaG1fdW5yZWdpc3Rlcl9zdXBwKHN0cnVjdCB0ZWVfY29udGV4dCAqY3R4LFxcbi0tXFxuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jLTM1OC1cXHRtZW1fb3BzID0gb3B0ZWUtXFx1MDAzZWZmYS5mZmFfZGV2LVxcdTAwM2VvcHMtXFx1MDAzZW1lbV9vcHM7XFxuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jOjM1OTpcXHRyYyA9IG1lbV9vcHMtXFx1MDAzZW1lbW9yeV9yZWNsYWltKGdsb2JhbF9oYW5kbGUsIDApO1xcbmRyaXZlcnMvdGVlL29wdGVlL2ZmYV9hYmkuYy0zNjAtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jPTY4Mj1zdGF0aWMgaW50IG9wdGVlX2ZmYV9sZW5kX3Byb3RtZW0oc3RydWN0IG9wdGVlICpvcHRlZSwgc3RydWN0IHRlZV9zaG0gKnByb3RtZW0sXFxuLS1cXG5kcml2ZXJzL3RlZS9vcHRlZS9mZmFfYWJpLmMtNzM3LWVycl9yZWNsYWltOlxcbmRyaXZlcnMvdGVlL29wdGVlL2ZmYV9hYmkuYzo3Mzg6XFx0bWVtX29wcy1cXHUwMDNlbWVtb3J5X3JlY2xhaW0oYXJncy5nX2hhbmRsZSwgMCk7XFxuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jLTczOS1cXHRyZXR1cm4gcmM7XFxuLS1cXG5kcml2ZXJzL3RlZS9vcHRlZS9mZmFfYWJpLmM9NzQyPXN0YXRpYyBpbnQgb3B0ZWVfZmZhX3JlY2xhaW1fcHJvdG1lbShzdHJ1Y3Qgb3B0ZWUgKm9wdGVlLFxcbi0tXFxuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jLTc2Mi1cXG5kcml2ZXJzL3RlZS9vcHRlZS9mZmFfYWJpLmM6NzYzOlxcdHJjID0gbWVtX29wcy1cXHUwMDNlbWVtb3J5X3JlY2xhaW0oZ2xvYmFsX2hhbmRsZSwgMCk7XFxuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jLTc2NC1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL3RlZS90c3RlZS9jb3JlLmM9MjQyPXN0YXRpYyBpbnQgdHN0ZWVfc2htX3JlZ2lzdGVyKHN0cnVjdCB0ZWVfY29udGV4dCAqY3R4LCBzdHJ1Y3QgdGVlX3NobSAqc2htLFxcbi0tXFxuZHJpdmVycy90ZWUvdHN0ZWUvY29yZS5jLTI4OS1cXHRpZiAocmMpIHtcXG5kcml2ZXJzL3RlZS90c3RlZS9jb3JlLmM6MjkwOlxcdFxcdCh2b2lkKWZmYV9kZXYtXFx1MDAzZW9wcy1cXHUwMDNlbWVtX29wcy1cXHUwMDNlbWVtb3J5X3JlY2xhaW0oc2htLVxcdTAwM2VzZWNfd29ybGRfaWQsXFxuZHJpdmVycy90ZWUvdHN0ZWUvY29yZS5jLTI5MS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgMCk7XFxuLS1cXG5kcml2ZXJzL3RlZS90c3RlZS9jb3JlLmMtMjk5LVxcdFxcdFxcdGZmYV9hcmdzW1RTX1JQQ19SRVRSSUVWRV9NRU1fUlBDX1NUQVRVU10pO1xcbmRyaXZlcnMvdGVlL3RzdGVlL2NvcmUuYzozMDA6XFx0XFx0ZmZhX2Rldi1cXHUwMDNlb3BzLVxcdTAwM2VtZW1fb3BzLVxcdTAwM2VtZW1vcnlfcmVjbGFpbShzaG0tXFx1MDAzZXNlY193b3JsZF9pZCwgMCk7XFxuZHJpdmVycy90ZWUvdHN0ZWUvY29yZS5jLTMwMS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvdGVlL3RzdGVlL2NvcmUuYz0zMDc9c3RhdGljIGludCB0c3RlZV9zaG1fdW5yZWdpc3RlcihzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwgc3RydWN0IHRlZV9zaG0gKnNobSlcXG4tLVxcbmRyaXZlcnMvdGVlL3RzdGVlL2NvcmUuYy0zMzQtXFxuZHJpdmVycy90ZWUvdHN0ZWUvY29yZS5jOjMzNTpcXHRyYyA9IGZmYV9kZXYtXFx1MDAzZW9wcy1cXHUwMDNlbWVtX29wcy1cXHUwMDNlbWVtb3J5X3JlY2xhaW0oc2htLVxcdTAwM2VzZWNfd29ybGRfaWQsIDApO1xcbmRyaXZlcnMvdGVlL3RzdGVlL2NvcmUuYy0zMzYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2FybV9mZmEuaD00ODU9c3RydWN0IGZmYV9tZW1fb3BzIHtcXG5pbmNsdWRlL2xpbnV4L2FybV9mZmEuaDo0ODY6XFx0aW50ICgqbWVtb3J5X3JlY2xhaW0pKHU2NCBnX2hhbmRsZSwgdTMyIGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L2FybV9mZmEuaC00ODctXFx0aW50ICgqbWVtb3J5X3NoYXJlKShzdHJ1Y3QgZmZhX21lbV9vcHNfYXJncyAqYXJncyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjQ1ND1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2FyY2hfbm9fcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjQ1OS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjQ2MDp2b2lkIGt2bV9hcmNoX2d1ZXN0X21lbW9yeV9yZWNsYWltZWQoc3RydWN0IGt2bSAqa3ZtKTtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjQ2MS1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00OTY3PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9vb21fZ3JvdXBfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ5ODgtXFxubW0vbWVtY29udHJvbC5jOjQ5ODk6c3RhdGljIHNzaXplX3QgbWVtb3J5X3JlY2xhaW0oc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXFxubW0vbWVtY29udHJvbC5jLTQ5OTAtXFx0XFx0XFx0ICAgICAgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MDAyPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIG1lbW9yeV9maWxlc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTUwNzAtXFx0XFx0LmZsYWdzID0gQ0ZUWVBFX05TX0RFTEVHQVRBQkxFLFxcbm1tL21lbWNvbnRyb2wuYzo1MDcxOlxcdFxcdC53cml0ZSA9IG1lbW9yeV9yZWNsYWltLFxcbm1tL21lbWNvbnRyb2wuYy01MDcyLVxcdH0sXFxuLS1cXG5zb3VuZC9zb2MvaW50ZWwvYXZzL21lc3NhZ2VzLmM9MzkxPWludCBhdnNfaXBjX2dldF9md19jb25maWcoc3RydWN0IGF2c19kZXYgKmFkZXYsIHN0cnVjdCBhdnNfZndfY2ZnICpjZmcpXFxuLS1cXG5zb3VuZC9zb2MvaW50ZWwvYXZzL21lc3NhZ2VzLmMtNDE4LVxcdFxcdGNhc2UgQVZTX0ZXX0NGR19NRU1PUllfUkVDTEFJTUVEOlxcbnNvdW5kL3NvYy9pbnRlbC9hdnMvbWVzc2FnZXMuYzo0MTk6XFx0XFx0XFx0Y2ZnLVxcdTAwM2VtZW1vcnlfcmVjbGFpbWVkID0gKnRsdi1cXHUwMDNldmFsdWU7XFxuc291bmQvc29jL2ludGVsL2F2cy9tZXNzYWdlcy5jLTQyMC1cXHRcXHRcXHRicmVhaztcXG4tLVxcbnNvdW5kL3NvYy9pbnRlbC9hdnMvbWVzc2FnZXMuaD00NjA9c3RydWN0IGF2c19md19jZmcge1xcbnNvdW5kL3NvYy9pbnRlbC9hdnMvbWVzc2FnZXMuaC00NjEtXFx0c3RydWN0IGF2c19md192ZXJzaW9uIGZ3X3ZlcnNpb247XFxuc291bmQvc29jL2ludGVsL2F2cy9tZXNzYWdlcy5oOjQ2MjpcXHR1MzIgbWVtb3J5X3JlY2xhaW1lZDtcXG5zb3VuZC9zb2MvaW50ZWwvYXZzL21lc3NhZ2VzLmgtNDYzLVxcdHUzMiBzbG93X2Nsb2NrX2ZyZXFfaHo7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTE1NT1zdGF0aWMgREVGSU5FX1BFUl9DUFUoY3B1bWFza192YXJfdCwgY3B1X2tpY2tfbWFzayk7XFxudmlydC9rdm0va3ZtX21haW4uYy0xNTYtXFxudmlydC9rdm0va3ZtX21haW4uYzoxNTc6X193ZWFrIHZvaWQga3ZtX2FyY2hfZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZChzdHJ1Y3Qga3ZtICprdm0pXFxudmlydC9rdm0va3ZtX21haW4uYy0xNTgte1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0zNDE9c3RhdGljIHZvaWQga3ZtX2ZsdXNoX3NoYWRvd19hbGwoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0zNDMtXFx0a3ZtX2FyY2hfZmx1c2hfc2hhZG93X2FsbChrdm0pO1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzQ0OlxcdGt2bV9hcmNoX2d1ZXN0X21lbW9yeV9yZWNsYWltZWQoa3ZtKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTM0NS19XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTcyMT1zdGF0aWMgaW50IGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW11X25vdGlmaWVyICptbixcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNzY1LVxcdGlmIChrdm1faGFuZGxlX2h2YV9yYW5nZShrdm0sIFxcdTAwMjZodmFfcmFuZ2UpLmZvdW5kX21lbXNsb3QpXFxudmlydC9rdm0va3ZtX21haW4uYzo3NjY6XFx0XFx0a3ZtX2FyY2hfZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZChrdm0pO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNzY3LVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0xNzk4PXN0YXRpYyB2b2lkIGt2bV9pbnZhbGlkYXRlX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0xODI0LVxcdGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KGt2bSwgb2xkKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjE4MjU6XFx0a3ZtX2FyY2hfZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZChrdm0pO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTgyNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDk6MTg6MDUuODI3MjY3MTY2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0ODg4OTUxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTWVtb3J5IFJlY2xhaW0gYW5kIENvbnRyb2wgR3JvdXBzOiBBIFF1aWNrIENoZWNrKipcblxuQWxyaWdodCwgKm1lbW9yeV9yZWNsYWltKi4gVGhhdCdzIGEgY29yZSBmdW5jdGlvbiwgdXN1YWxseSB0dWNrZWQgYXdheSBpbiB0aGUgaGVhcnQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCdzIGRlZmluZWQgaW4gYG1tL21lbWNvbnRyb2wuY2AuIE5vdywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzOiB3aGF0J3MgdGhlIGNvbm5lY3Rpb24gdG8gY29udHJvbCBncm91cHMgKGNncm91cHMpPyBgbWVtb3J5X3JlY2xhaW1gIGlzIGNyaXRpY2FsIGZvciBtYW5hZ2luZyBtZW1vcnkgcHJlc3N1cmVzIGFjcm9zcyB0aGUgc3lzdGVtLCBhbmQgY2dyb3Vwcywgb2YgY291cnNlLCBwcm92aWRlIGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgcmVzb3VyY2UgYWxsb2NhdGlvbiwgaW5jbHVkaW5nIG1lbW9yeS4gU28sIGlzIGBDT05GSUdfTUVNQ0dgIGRpcmVjdGx5IGludm9sdmVkIGhlcmU/IEknbSBiZXR0aW5nIHRoZXJlJ3MgYSBkZXBlbmRlbmN5LCBnaXZlbiB0aGUgZmlsZSBsb2NhdGlvbiwgYnV0IGxldCdzIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NzAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwOToxODowOS4yNzYxNjAwNTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyNzg5NTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbW9yeV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NDk2Nz1zdGF0aWMgc3NpemVfdCBtZW1vcnlfb29tX2dyb3VwX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00OTg4LVxcbm1tL21lbWNvbnRyb2wuYzo0OTg5OnN0YXRpYyBzc2l6ZV90IG1lbW9yeV9yZWNsYWltKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxcbm1tL21lbWNvbnRyb2wuYy00OTkwLVxcdFxcdFxcdCAgICAgIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTAwMj1zdGF0aWMgc3RydWN0IGNmdHlwZSBtZW1vcnlfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MDcwLVxcdFxcdC5mbGFncyA9IENGVFlQRV9OU19ERUxFR0FUQUJMRSxcXG5tbS9tZW1jb250cm9sLmM6NTA3MTpcXHRcXHQud3JpdGUgPSBtZW1vcnlfcmVjbGFpbSxcXG5tbS9tZW1jb250cm9sLmMtNTA3Mi1cXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwOToxODowOS4zOTg5NTM5MzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzkzMjgzNjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBtbS9tZW1jb250cm9sLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIHRoZSBgbW0vbWVtY29udHJvbC5jYCBmaWxlIGlzIGJlaW5nIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHkgd2l0aGluIHRoaXMgcGFydGljdWxhciBrZXJuZWwgYnVpbGQuIEkga25vdyB0aGUgZ2VuZXJhbCBsb2NhdGlvbiwgc28gbm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYSBjb25maWd1cmF0aW9uIGZsYWcgb3IgYSBzcGVjaWZpYyBgaWZkZWZgIGJsb2NrIHRoYXQgY29udHJvbHMgaXRzIGluY2x1c2lvbi4gSSdsbCBuZWVkIHRvIHJhcGlkbHkgZXhhbWluZSB0aGUgcmVsZXZhbnQgYnVpbGQgY29uZmlndXJhdGlvbiBmaWxlcyBvciBwb3RlbnRpYWxseSB0aGUgS2J1aWxkIHN5c3RlbSB0byBhc3Nlc3MgaXRzIGRlcGVuZGVuY3kuIEVzc2VudGlhbGx5LCBpcyB0aGlzIG1vZHVsZSBhbHdheXMgY29tcGlsZWQsIG9yIGRvZXMgaXQgZGVwZW5kIG9uIGNlcnRhaW4ga2VybmVsIGZlYXR1cmVzIGJlaW5nIGVuYWJsZWQ/IE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHRoZSBjb21waWxlLXRpbWUgYmVoYXZpb3VyIHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MTEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwOToxODoxMy4xOTIyNDAzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NDgwNjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNvbnRyb2wub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXFxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXFxubW0vTWFrZWZpbGUtMjktS0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wtdjEubyA6PSBuXFxuLS1cXG5tbS9NYWtlZmlsZT0xMDQ9b2JqLSQoQ09ORklHX01FTUNHX1YxKSArPSBtZW1jb250cm9sLXYxLm9cXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSArPSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXFxubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm1tL01ha2VmaWxlOjEwNzpvYmotJChDT05GSUdfTUVNQ0cpICs9IGJwZl9tZW1jb250cm9sLm9cXG5tbS9NYWtlZmlsZS0xMDgtZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDk6MTg6MTMuMjk5NzI3Njg3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwOTQyMDA5MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50OlxuXG4qKk1lbW9yeSBDb250cm9sIEdyb3VwcyBhbmQgUmVjbGFpbSoqXG5cblJpZ2h0LCBzbywgZmlyc3QgYW5kIGZvcmVtb3N0LCBJJ20gYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgYENPTkZJR19NRU1DR2AgbmVlZHMgdG8gYmUgZW5hYmxlZC4gTm8gcXVlc3Rpb24gYWJvdXQgaXQuIEl0J3MgdGhlIGZvdW5kYXRpb24gd2UncmUgd29ya2luZyBmcm9tLCBhbmQgd2l0aG91dCBpdCwgd2UncmUgbm90IGV2ZW4gaGF2aW5nIHRoaXMgY29udmVyc2F0aW9uLlxuXG5CdXQgdGhhdCBicmluZ3MgbWUgdG8gdGhlIGNvcmUgY29uY2Vybi4gSSdtIHdvbmRlcmluZyBhYm91dCBgcmVjbGFpbV9zdG9yZWAgaW4gYG1tL3Ztc2Nhbi5jYC4gSG93J3MgdGhhdCBpbnRlcmFjdGluZyB3aXRoIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCBzZXR1cD8gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgbWVtb3J5IHJlY2xhaW0gbG9naWMgaXMgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIGFuZCByZXNwZWN0aW5nIHRoZSBsaW1pdHMgZW5mb3JjZWQgYnkgdGhlIG1lbW9yeSBjZ3JvdXBzLiBJcyBpdCBwcm9wZXJseSBhc3NvY2lhdGluZyByZWNsYWltZWQgcGFnZXMgd2l0aCB0aGUgY29ycmVjdCBjZ3JvdXA/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGxlYWtzIG9yIGJ5cGFzc2VzPyBJdCdzIHRoYXQgc3VidGxlIGludGVyc2VjdGlvbiBvZiB0aGUgcmVjbGFpbSBzdHJhdGVnaWVzIGFuZCB0aGUgY2dyb3VwIGFjY291bnRpbmcgdGhhdCBhbHdheXMga2VlcHMgbWUgb24gbXkgdG9lcy4gSXTigJlzIHRoZSBraW5kIG9mIGFyZWEgd2hlcmUgc2VlbWluZ2x5IG1pbm9yIG92ZXJzaWdodHMgY2FuIGxlYWQgdG8gcHJldHR5IHNpZ25pZmljYW50IHByb2JsZW1zIGRvd24gdGhlIGxpbmUsIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBpbmFkdmVydGVudGx5IHVuZGVybWluaW5nIHRoZSB3aG9sZSBwb2ludCBvZiBgbWVtY2dgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mjk3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDk6MTg6MTkuMzkzOTMxNTQ4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTA4MjY3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWNsYWltX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTgwMzI9RVhQT1JUX1NZTUJPTF9HUEwoY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3MpO1xcbi0tXFxubW0vdm1zY2FuLmMtODAzNC0jaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX05VTUEpXFxubW0vdm1zY2FuLmM6ODAzNTpzdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5tbS92bXNjYW4uYy04MDM2LVxcdFxcdFxcdCAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA5OjE4OjE5LjQ4NTAxODM3NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzU2NjcyNjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gVmVyaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBhbmQgaXQncyBjbGVhcjogdGhpcyBmdW5jdGlvbmFsaXR5IGhpbmdlcyBvbiBoYXZpbmcgYENPTkZJR19TWVNGU2AgYW5kIGBDT05GSUdfTlVNQWAgZW5hYmxlZC4gVGhhdCdzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpb24gYW5kIHBvdGVudGlhbCBkZXBsb3ltZW50LiBJJ2xsIG1ha2UgYSBtZW50YWwgbm90ZSB0aGF0IGVuYWJsaW5nIGBDT05GSUdfTUVNQ0dgIGFsb25nIHdpdGggYENPTkZJR19OVU1BYCB3b3VsZCBiZSBhIGdvb2Qgc3RyYXRlZ3kgdG8gcHVyc3VlLiBUaGV5IHNlZW0gbGlrZSBsb2dpY2FsIGNvbXBhbmlvbnMuXG5cbk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSdsbCBqdW1wIGludG8gYG1tL3Ztc2Nhbi5jYCBhbmQgc3BlY2lmaWNhbGx5IGNoZWNrIHRoZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZnVuY3Rpb24uIEknbGwgbmVlZCB0byBzZWUgcHJlY2lzZWx5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY29uZmlndXJhdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MjMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwOToxODoyMy44NDE2OTU1NDhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDgwODI5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTc4ODc9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNzg5Mi1cXG5tbS92bXNjYW4uYzo3ODkzOmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG5tbS92bXNjYW4uYy03ODk0LVxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTgwMzU9c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5tbS92bXNjYW4uYy04MDQwLVxcbm1tL3Ztc2Nhbi5jOjgwNDE6XFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xcbm1tL3Ztc2Nhbi5jLTgwNDItXFx0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwOToxODoyMy45ODY1MDg0NjRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4MTc1NDcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkNvbmRpdGlvbmFsIENvbXBpbGF0aW9uIENvbnVuZHJ1bXMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGZ1bmN0aW9uLCBhbmQgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzOiAqSXMgaXQgY29tcGlsZWQgY29uZGl0aW9uYWxseT8qIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgc29tZXRoaW5nIHRoYXTigJlzIGFsd2F5cyBwcmVzZW50IGluIHRoZSBidWlsZCwgb3IgaWYgaXRzIGluY2x1c2lvbiBpcyBkZXBlbmRlbnQgb24gc29tZSBwcmVwcm9jZXNzb3IgZmxhZywgY29uZmlndXJhdGlvbiBzZXR0aW5nLCBvciBldmVuIGEgc3BlY2lmaWMgdGFyZ2V0IHBsYXRmb3JtLlxuXG5UaGUgaW1wbGljYXRpb25zIGFyZSBodWdlLCB5b3Uga25vdy4gSWYgaXQgKmlzKiBjb25kaXRpb25hbCwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbmRpdGlvbnMuIFRoYXQgd2lsbCBpbmZvcm0gd2hldGhlciBJIG5lZWQgdG8gd29ycnkgYWJvdXQgdGhlIHNpZGUgZWZmZWN0cyB3aGVuIGxvb2tpbmcgYXQgdGhlIHdob2xlIHN5c3RlbSBiZWhhdmlvci4gQSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGZ1bmN0aW9uIGltcGFjdHMgdGhlIHJhbmdlIG9mIGV4ZWN1dGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBjb25kaXRpb25hbCBjb21waWxhdGlvbiByZXNpZGVzLCBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQgY29tcGlsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTcyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDk6MTg6MjguMjY4MjY2MjY4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDI3ODc0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2ludGVybmFsLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaW50ZXJuYWwuaD02MjQ9ZXh0ZXJuIHZvaWQgcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBlbnVtIHZtc2Nhbl90aHJvdHRsZV9zdGF0ZSByZWFzb24pO1xcbm1tL2ludGVybmFsLmg6NjI1OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG5tbS9pbnRlcm5hbC5oLTYyNi1cXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwOToxODoyOC4zNDg1NTA3NDZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM5ODU4MjAxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcGVyc3BlY3RpdmUgb2Ygc29tZW9uZSBkZWVwbHkgZmFtaWxpYXIgd2l0aCBrZXJuZWwgZGV2ZWxvcG1lbnQgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBmb2N1c2luZyBvbiB0aGUgc3BlY2lmaWMgdGhvdWdodCBwcm9jZXNzIHByZXNlbnRlZDpcblxuKipDaGVja2luZyBmb3IgUHJvYWN0aXZlIFJlY2xhaW0gR3VhcmRzKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGhpbmtpbmcsIFwiTGV0J3MgbWFrZSBzdXJlIHdlIGhhdmVuJ3QgZ290IGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBndWFyZGluZyB0aGUgJ3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0nIG1lY2hhbmlzbSBpbiAnbW0vdm1zY2FuLmMnLlwiIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IGAjaWZkZWZgIGRpcmVjdGl2ZXMgc3Vycm91bmRpbmcgdGhhdCBmZWF0dXJlLiBJdCdzIGNydWNpYWwsIG9idmlvdXNseSwgYmVjYXVzZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gdGhlcmUgd291bGQgdG90YWxseSBjaGFuZ2UgaG93IGl0IGJlaGF2ZXMgaW4gZGlmZmVyZW50IGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCBhbmQgSSBuZWVkIHRvIGtlZXAgdGhhdCBiZWhhdmlvciBpbiBtaW5kLiBHb3R0YSBtYWtlIHN1cmUgaXQncyBjb25zaXN0ZW50bHkgZW5hYmxlZCBvciBkaXNhYmxlZCBhcyBJIGV4cGVjdC4gSXQncyBhIHF1aWNrIGNoZWNrIGJ1dCBhIGZ1bmRhbWVudGFsIG9uZSBiZWZvcmUgSSBkaWcgZGVlcGVyIGludG8gYW55dGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgcmVjbGFpbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MDMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwOToxODozMi43NDcxMzU1MjZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEzMzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc4ODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc4ODA6XFx0I2VuZGlmXFxuNzg4MTpcXHRcXG43ODgyOlxcdGVudW0ge1xcbjc4ODM6XFx0XFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUyA9IDAsXFxuNzg4NDpcXHRcXHRNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCxcXG43ODg1OlxcdFxcdE1FTU9SWV9SRUNMQUlNX05VTEwsXFxuNzg4NjpcXHR9O1xcbjc4ODc6XFx0c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xcbjc4ODg6XFx0XFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTLCBcXFwic3dhcHBpbmVzcz0lZFxcXCJ9LFxcbjc4ODk6XFx0XFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCwgXFxcInN3YXBwaW5lc3M9bWF4XFxcIn0sXFxuNzg5MDpcXHRcXHR7IE1FTU9SWV9SRUNMQUlNX05VTEwsIE5VTEwgfSxcXG43ODkxOlxcdH07XFxuNzg5MjpcXHRcXG43ODkzOlxcdGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG43ODk0OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG43ODk1OlxcdHtcXG43ODk2OlxcdFxcdHVuc2lnbmVkIGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcXG43ODk3OlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSwgbnJfcmVjbGFpbWVkID0gMDtcXG43ODk4OlxcdFxcdGludCBzd2FwcGluZXNzID0gLTE7XFxuNzg5OTpcXHRcXHRjaGFyICpvbGRfYnVmLCAqc3RhcnQ7XFxuNzkwMDpcXHRcXHRzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107XFxuNzkwMTpcXHRcXHRnZnBfdCBnZnBfbWFzayA9IEdGUF9LRVJORUw7XFxuNzkwMjpcXHRcXG43OTAzOlxcdFxcdGlmICghYnVmIHx8ICghbWVtY2cgXFx1MDAyNlxcdTAwMjYgIXBnZGF0KSB8fCAobWVtY2cgXFx1MDAyNlxcdTAwMjYgcGdkYXQpKVxcbjc5MDQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzkwNTpcXHRcXG43OTA2OlxcdFxcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XFxuNzkwNzpcXHRcXG43OTA4OlxcdFxcdG9sZF9idWYgPSBidWY7XFxuNzkwOTpcXHRcXHRucl90b19yZWNsYWltID0gbWVtcGFyc2UoYnVmLCBcXHUwMDI2YnVmKSAvIFBBR0VfU0laRTtcXG43OTEwOlxcdFxcdGlmIChidWYgPT0gb2xkX2J1ZilcXG43OTExOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc5MTI6XFx0XFxuNzkxMzpcXHRcXHRidWYgPSBzdHJzdHJpcChidWYpO1xcbjc5MTQ6XFx0XFxuNzkxNTpcXHRcXHR3aGlsZSAoKHN0YXJ0ID0gc3Ryc2VwKFxcdTAwMjZidWYsIFxcXCIgXFxcIikpICE9IE5VTEwpIHtcXG43OTE2OlxcdFxcdFxcdGlmICghc3RybGVuKHN0YXJ0KSlcXG43OTE3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjc5MTg6XFx0XFx0XFx0c3dpdGNoIChtYXRjaF90b2tlbihzdGFydCwgdG9rZW5zLCBhcmdzKSkge1xcbjc5MTk6XFx0XFx0XFx0Y2FzZSBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTOlxcbjc5MjA6XFx0XFx0XFx0XFx0aWYgKG1hdGNoX2ludChcXHUwMDI2YXJnc1swXSwgXFx1MDAyNnN3YXBwaW5lc3MpKVxcbjc5MjE6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzkyMjpcXHRcXHRcXHRcXHRpZiAoc3dhcHBpbmVzcyBcXHUwMDNjIE1JTl9TV0FQUElORVNTIHx8XFxuNzkyMzpcXHRcXHRcXHRcXHQgICAgc3dhcHBpbmVzcyBcXHUwMDNlIE1BWF9TV0FQUElORVNTKVxcbjc5MjQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzkyNTpcXHRcXHRcXHRcXHRicmVhaztcXG43OTI2OlxcdFxcdFxcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVg6XFxuNzkyNzpcXHRcXHRcXHRcXHRzd2FwcGluZXNzID0gU1dBUFBJTkVTU19BTk9OX09OTFk7XFxuNzkyODpcXHRcXHRcXHRcXHRicmVhaztcXG43OTI5OlxcdFxcdFxcdGRlZmF1bHQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA5OjE4OjMyLjc0ODA1MjgyNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTQyNzk5MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgUmVjbGFpbSBNZWNoYW5pc21zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyBJJ20gZGVhbGluZyB3aXRoIHNldmVyYWwgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IHJlY2xhaW0uIFRoZSBjcml0aWNhbCBmaXJzdCBvYnNlcnZhdGlvbiBpcyB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpc24ndCBndWFyZGVkIGJ5IGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQgc3VnZ2VzdHMgYSBtb3JlIGRpcmVjdCBjb250cm9sIG9yIGltcGFjdC4gQ29udmVyc2VseSwgYHJlY2xhaW1fc3RvcmVgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgdGhlIGBDT05GSUdfU1lTRlNgIGFuZCBgQ09ORklHX05VTUFgIGZsYWdzLiBUaGlzIGluZGljYXRlcyBpdHMgZnVuY3Rpb25hbGl0eSBpcyB0aWVkIHRvIHRoZSBwcmVzZW5jZSBvZiBhIHN5c2ZzIGludGVyZmFjZSBhbmQgTlVNQSBhcmNoaXRlY3R1cmUsIHdoaWNoIHN1Z2dlc3RzIHRoaXMgaXMgc29tZWhvdyBpbnZvbHZlZCB3aXRoIHRoZSBwcmVzZW50YXRpb24gb2YgbWVtb3J5IHJlY2xhaW0gc3RhdGlzdGljcywgb3IgcGVyaGFwcyBldmVuIHNvbWUgY29udHJvbCBtZWNoYW5pc20uIEFuZCBmaW5hbGx5LCBgbWVtb3J5X3JlY2xhaW1gIGlzIGxvY2F0ZWQgaW4gYG1tL21lbWNvbnRyb2wuY2AgYW5kIGlzIGNvbmRpdGlvbmFsaXplZCBieSBgQ09ORklHX01FTUNHYC4gU28sIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSByZWxldmFudCBoZXJlIGFyZSBgTUVNQ0dgIChmb3IgY29udHJvbCBncm91cHMsIHdoaWNoIEknbSBmYW1pbGlhciB3aXRoKSBhbmQgYE5VTUFgIChOb24tVW5pZm9ybSBNZW1vcnkgQWNjZXNzKS5cblxuTm93LCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzY29wZSwgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBmb2N1czogYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCBgcmVjbGFpbV9zdG9yZWAsIGBtZW1vcnlfcmVjbGFpbWAsIGBnZXRfc2Nhbl9jb3VudGAsIGBnZXRfc3dhcHBpbmVzc2AsIGFuZCBgZ2V0X25yX3RvX3NjYW5gLiBUaGVzZSBhcmUgY2xlYXJseSB0aGUgY29yZSBjb21wb25lbnRzIG9mIGludGVyZXN0LiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIGFuZCBob3cgdGhleSBpbnRlcmFjdCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIHN5c3RlbS5cblxuQmVmb3JlIEkgZ28gZnVydGhlciwgdGhvdWdoLCBJJ2xsIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBtaWdodCBoYXZlIGJlZW4gbW9kaWZpZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgcHJpbWFyeSBvbmVzLiBBaCwgeWVzLCBgX19ub2RlX3JlY2xhaW1gIGhhcyBhbHNvIGJlZW4gbW9kaWZpZWQuIFRoaXMgaW1wbGllcyB0aGF0IHRoZSBjaGFuZ2VzIG1pZ2h0IGFmZmVjdCB0aGUgbm9kZS1sZXZlbCByZWNsYWltIGFzIHdlbGwuIFRoaXMgYWRkaXRpb25hbCBkYXRhIHBvaW50IGlzIGV4dHJlbWVseSBpbXBvcnRhbnQuIEl0IG1lYW5zIEkgaGF2ZSB0byBsb29rIGJleW9uZCBhIHNpbmdsZSBmdW5jdGlvbiwgdGhlIG1vZGlmaWNhdGlvbnMgbWlnaHQgYmUgc3lzdGVtLXdpZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTE2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDk6MTg6MzkuNjkwODU0NDgyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Njk1NzE4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX25vZGVfcmVjbGFpbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz03NzM2PXN0YXRpYyB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy03NzY3LSAqL1xcbm1tL3Ztc2Nhbi5jOjc3Njg6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03NzY5LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmM9NzgxMT1pbnQgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS92bXNjYW4uYy03ODU5LVxcbm1tL3Ztc2Nhbi5jOjc4NjA6XFx0cmV0ID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIG5yX3BhZ2VzLCBcXHUwMDI2c2MpIFxcdTAwM2U9IG5yX3BhZ2VzO1xcbm1tL3Ztc2Nhbi5jLTc4NjEtXFx0Y2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXFx1MDAyNnBnZGF0LVxcdTAwM2VmbGFncyk7XFxuLS1cXG5tbS92bXNjYW4uYy03ODcyLVxcbm1tL3Ztc2Nhbi5jOjc4NzM6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03ODc0LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmM9Nzg5Mz1pbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuLS1cXG5tbS92bXNjYW4uYy03OTc0LVxcbm1tL3Ztc2Nhbi5jOjc5NzU6XFx0XFx0XFx0cmVjbGFpbWVkID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGJhdGNoX3NpemUsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNzk3Ni1cXHRcXHRcXHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcXHUwMDI2cGdkYXQtXFx1MDAzZWZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDk6MTg6MzkuNzg3ODE4MDU5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2Mzk1OTYwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiBhIE1lbW9yeSBSZWNsYWltIFBhdGNoKipcblxuT2theSwgc28gdGhlIGNvZGUgZGVmaW5pdGVseSB0b3VjaGVzIGBfX25vZGVfcmVjbGFpbWAuIFRoYXQncyBhIGtleSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW1wbGljYXRpb25zLlxuXG5Mb29raW5nIGF0IHRoZSBmb2N1cyBzeW1ib2xzLCBJIHNlZTpcblxuKiAgIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYFxuKiAgIGByZWNsYWltX3N0b3JlYFxuKiAgIGBtZW1vcnlfcmVjbGFpbWBcbiogICBgZ2V0X3NjYW5fY291bnRgXG4qICAgYGdldF9zd2FwcGluZXNzYFxuKiAgIGBnZXRfbnJfdG9fc2NhbmBcbiogICBgX19ub2RlX3JlY2xhaW1gXG5cbldhaXQgYSBtaW51dGUsIGBnZXRfc2Nhbl9jb3VudGAsIGBnZXRfc3dhcHBpbmVzc2AsIGFuZCBgZ2V0X25yX3RvX3NjYW5gLi4uIHRob3NlIGFyZSBzdGF0aWMgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIGBtbS92bXNjYW4uY2AuIFRoZXkncmUgaW50ZWdyYWwgcGFydHMgb2YgdGhlIHBhZ2UgcmVjbGFpbSBsb2dpYywgd2hpY2ggbWVhbnMgdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGRlZXAgaW50byB0aGUgY29yZSBzY2FubmluZyBmdW5jdGlvbmFsaXR5LiBBbmQsIG9mIGNvdXJzZSwgYF9fbm9kZV9yZWNsYWltYCBpdHNlbGYgaXMgYWxzbyBzdGF0aWMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nLlxuXG5Pa2F5LCBsZXQncyBkb3VibGUtY2hlY2sgYG1lbW9yeV9yZWNsYWltYC4gQWgsIHllcywgaXQncyBzdGF0aWMgdG9vLCBidXQgZm91bmQgaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRoaXMgc3VnZ2VzdHMgYSBicm9hZGVyIGltcGFjdCwgbGlrZWx5IGludm9sdmluZyBtZW1vcnkgY29udHJvbCBncm91cHMsIHdoaWNoIEkgc3VzcGVjdGVkIGFueXdheS5cblxuVGhpcyBwYXRjaCBpcyB0aWVkIHRvIHRoZSBgTUVNQ0dgIGFuZCBgTlVNQWAgY29uZmlndXJhdGlvbnMsIHdoaWNoIHJlaW5mb3JjZXMgdGhhdCBpdOKAmXMgbW9kaWZ5aW5nIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgTlVNQSBhcmNoaXRlY3R1cmVzLlxuXG5UaGUgY29yZSBpc3N1ZSBzZWVtcyB0byBiZSBhIGJ1ZyBpbiBwcm9hY3RpdmUgbWVtb3J5IHJlY2xhaW06IHVuZGVyIHNwZWNpZmljIHNjZW5hcmlvcyAoc3dhcHBpbmVzcyBzZXQgdG8gbWF4IHdpdGggbm8gc3dhcCBhdmFpbGFibGUpLCBpdCB3YXMgd3JvbmdseSBldmljdGluZyBmaWxlIHBhZ2VzIHdoZW4gaXQgc2hvdWxkIGhhdmUgYmVlbiBzb2xlbHkgZm9jdXNpbmcgb24gYW5vbnltb3VzIHBhZ2VzLiBJdCdzIHRvdWNoaW5nIHNvbWUgbWFqb3IgY29kZSBwYXRocyBpbiBgbW0vdm1zY2FuLmNgIGFuZCBgbW0vbWVtY29udHJvbC5jYCwgbWVhbmluZyB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBjYW4gZXZlbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdXNpbmcgY2dyb3VwIGBtZW1vcnkucmVjbGFpbWAgb3Igc3lzZnMgbm9kZSBgcmVjbGFpbWAgYXR0cmlidXRlcy5cblxuSSB0aGluayBJJ3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGUgc2NvcGUuIFRpbWUgdG8gcnVuIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTM3LCJPdXRwdXRUb2tlbnMiOjE4OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwOToxODo0OC40Mjc0MTc2NDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUyMjIwMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJOVU1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICAgIFwicmVjbGFpbV9zdG9yZVwiLFxuICAgIFwibWVtb3J5X3JlY2xhaW1cIixcbiAgICBcImdldF9zY2FuX2NvdW50XCIsXG4gICAgXCJnZXRfc3dhcHBpbmVzc1wiLFxuICAgIFwiZ2V0X25yX3RvX3NjYW5cIixcbiAgICBcIl9fbm9kZV9yZWNsYWltXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIHdoZXJlIGFub255bW91cyBtZW1vcnkgb25seSByZWNsYWltIChzd2FwcGluZXNzPW1heCkgY291bGQgaW5jb3JyZWN0bHkgZmFsbCBiYWNrIHRvIGV2aWN0aW5nIGZpbGUgcGFnZXMgd2hlbiBhbm9ueW1vdXMgcGFnZXMgY2Fubm90IGJlIHJlY2xhaW1lZCAoZS5nLiBubyBzd2FwKS4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS92bXNjYW4uYyBhbmQgbW0vbWVtY29udHJvbC5jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBjZ3JvdXAgbWVtb3J5LnJlY2xhaW0gb3Igc3lzZnMgbm9kZSByZWNsYWltIGF0dHJpYnV0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gICAgXCJyZWNsYWltX3N0b3JlXCIsXG4gICAgXCJtZW1vcnlfcmVjbGFpbVwiLFxuICAgIFwiZ2V0X3NjYW5fY291bnRcIixcbiAgICBcImdldF9zd2FwcGluZXNzXCIsXG4gICAgXCJnZXRfbnJfdG9fc2NhblwiLFxuICAgIFwiX19ub2RlX3JlY2xhaW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBwcm9hY3RpdmUgbWVtb3J5IHJlY2xhaW0gd2hlcmUgYW5vbnltb3VzIG1lbW9yeSBvbmx5IHJlY2xhaW0gKHN3YXBwaW5lc3M9bWF4KSBjb3VsZCBpbmNvcnJlY3RseSBmYWxsIGJhY2sgdG8gZXZpY3RpbmcgZmlsZSBwYWdlcyB3aGVuIGFub255bW91cyBwYWdlcyBjYW5ub3QgYmUgcmVjbGFpbWVkIChlLmcuIG5vIHN3YXApLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGFuZCBtbS9tZW1jb250cm9sLmMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGNncm91cCBtZW1vcnkucmVjbGFpbSBvciBzeXNmcyBub2RlIHJlY2xhaW0gYXR0cmlidXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfckfq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-24 08:58:49 +0000 UTC FinishedAt: 2026-07-24 09:18:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "b95f03f04d475aa6719d15a636ddf32222d55657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "NUMA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "b95f03f04d475aa6719d15a636ddf32222d55657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "NUMA" ], "series_id": "6a2b0582-e307-4a8f-8c97-2e21f56ba4ee" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "user_proactive_reclaim", "reclaim_store", "memory_reclaim", "get_scan_count", "get_swappiness", "get_nr_to_scan", "__node_reclaim" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA5OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgICAmIzM0O3JlY2xhaW1fc3RvcmUmIzM0OywKICAgICYjMzQ7bWVtb3J5X3JlY2xhaW0mIzM0OywKICAgICYjMzQ7Z2V0X3NjYW5fY291bnQmIzM0OywKICAgICYjMzQ7Z2V0X3N3YXBwaW5lc3MmIzM0OywKICAgICYjMzQ7Z2V0X25yX3RvX3NjYW4mIzM0OywKICAgICYjMzQ7X19ub2RlX3JlY2xhaW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIHdoZXJlIGFub255bW91cyBtZW1vcnkgb25seSByZWNsYWltIChzd2FwcGluZXNzPW1heCkgY291bGQgaW5jb3JyZWN0bHkgZmFsbCBiYWNrIHRvIGV2aWN0aW5nIGZpbGUgcGFnZXMgd2hlbiBhbm9ueW1vdXMgcGFnZXMgY2Fubm90IGJlIHJlY2xhaW1lZCAoZS5nLiBubyBzd2FwKS4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS92bXNjYW4uYyBhbmQgbW0vbWVtY29udHJvbC5jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBjZ3JvdXAgbWVtb3J5LnJlY2xhaW0gb3Igc3lzZnMgbm9kZSByZWNsYWltIGF0dHJpYnV0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDk6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5MGE0MTY2MjA1ZDAxZDIzMzI3NTZkN2YyMDk4ZjFjMjA5NWFhOTQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMjQgMDk6MTc6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YTMuLjIwY2I5M2ZkM2RhODI0IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtMjUwMSw2ICYjNDM7MjUwMSwyMyBAQCBzdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuIFx0ZW51bSBzY2FuX2JhbGFuY2Ugc2Nhbl9iYWxhbmNlO1xuIFx0ZW51bSBscnVfbGlzdCBscnU7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcm9hY3RpdmUgcmVjbGFpbSBpbml0aWF0ZWQgYnkgdXNlcnNwYWNlIGZvciBhbm9ueW1vdXMgbWVtb3J5IG9ubHkuXG4mIzQzO1x0ICogU1dBUFBJTkVTU19BTk9OX09OTFkgaXMgc2V0IG9ubHkgb24gdGhlIHByb2FjdGl2ZSByZWNsYWltIHBhdGgsIHNvXG4mIzQzO1x0ICogd2FybiBpZiBpdCBzaG93cyB1cCBlbHNld2hlcmUuIFdoZW4gYW5vbiBjYW5ub3QgYmUgcmVjbGFpbWVkIChlLmcuXG4mIzQzO1x0ICogbm8gc3dhcCksIGJhaWwgb3V0IGluc3RlYWQgb2YgZmFsbGluZyBiYWNrIHRvIGV2aWN0aW5nIGZpbGUgcGFnZXMsXG4mIzQzO1x0ICogd2hpY2ggd291bGQgdmlvbGF0ZSB0aGUgYW5vbi1vbmx5IHNlbWFudGljcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSkge1xuJiM0MztcdFx0V0FSTl9PTl9PTkNFKCFzYy1cdTAwM2Vwcm9hY3RpdmUpO1xuJiM0MztcdFx0aWYgKCFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYykpIHtcbiYjNDM7XHRcdFx0bWVtc2V0KG5yLCAwLCBzaXplb2YoKm5yKSAqIE5SX0xSVV9MSVNUUyk7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNjYW5fYmFsYW5jZSA9IFNDQU5fQU5PTjtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiBJZiB3ZSBoYXZlIG5vIHN3YXAgc3BhY2UsIGRvIG5vdCBib3RoZXIgc2Nhbm5pbmcgYW5vbiBmb2xpb3MuICovXG4gXHRpZiAoIXNjLVx1MDAzZW1heV9zd2FwIHx8ICFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYykpIHtcbiBcdFx0c2Nhbl9iYWxhbmNlID0gU0NBTl9GSUxFO1xuQEAgLTI1MTksMTMgJiM0MzsyNTM2LDYgQEAgc3RhdGljIHZvaWQgZ2V0X3NjYW5fY291bnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHQvKiBQcm9hY3RpdmUgcmVjbGFpbSBpbml0aWF0ZWQgYnkgdXNlcnNwYWNlIGZvciBhbm9ueW1vdXMgbWVtb3J5IG9ubHkgKi9cbi1cdGlmIChzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZKSB7XG4tXHRcdFdBUk5fT05fT05DRSghc2MtXHUwMDNlcHJvYWN0aXZlKTtcbi1cdFx0c2Nhbl9iYWxhbmNlID0gU0NBTl9BTk9OO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbiBcdC8qXG4gXHQgKiBEbyBub3QgYXBwbHkgYW55IHByZXNzdXJlIGJhbGFuY2luZyBjbGV2ZXJuZXNzIHdoZW4gdGhlXG4gXHQgKiBzeXN0ZW0gaXMgY2xvc2UgdG8gT09NLCBzY2FuIGJvdGggYW5vbiBhbmQgZmlsZSBlcXVhbGx5XG5AQCAtMjY5OCw2ICYjNDM7MjcwOCwxMCBAQCBzdGF0aWMgaW50IGdldF9zd2FwcGluZXNzKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG4mIzQzO1x0aW50IHN3YXBwaW5lc3MgPSBzY19zd2FwcGluZXNzKHNjLCBtZW1jZyk7XG4mIzQzO1xuJiM0MztcdGlmIChzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZKVxuJiM0MztcdFx0cmV0dXJuIHN3YXBwaW5lc3M7XG4gXG4gXHRpZiAoIXNjLVx1MDAzZW1heV9zd2FwKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0yNzA2LDcgJiM0MzsyNzIwLDcgQEAgc3RhdGljIGludCBnZXRfc3dhcHBpbmVzcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIFx0ICAgIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIFx1MDAzYyBNSU5fTFJVX0JBVENIKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldHVybiBzY19zd2FwcGluZXNzKHNjLCBtZW1jZyk7XG4mIzQzO1x0cmV0dXJuIHN3YXBwaW5lc3M7XG4gfVxuIFxuIHN0YXRpYyBpbnQgZ2V0X25yX2dlbnMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcbkBAIC00OTExLDYgJiM0Mzs0OTI1LDE5IEBAIHN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4gXHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgc3dhcHBpbmVzcylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIGV2aWN0YWJsZTtcbiYjNDM7XHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcm9hY3RpdmUgcmVjbGFpbSBpbml0aWF0ZWQgYnkgdXNlcnNwYWNlIGZvciBhbm9ueW1vdXMgbWVtb3J5IG9ubHkuXG4mIzQzO1x0ICogU1dBUFBJTkVTU19BTk9OX09OTFkgaXMgc2V0IG9ubHkgb24gdGhlIHByb2FjdGl2ZSByZWNsYWltIHBhdGgsIHNvXG4mIzQzO1x0ICogd2FybiBpZiBpdCBzaG93cyB1cCBlbHNld2hlcmUuIFdoZW4gYW5vbiBjYW5ub3QgYmUgcmVjbGFpbWVkIChlLmcuXG4mIzQzO1x0ICogbm8gc3dhcCksIHJldHVybiAwIGluc3RlYWQgb2YgZmFsbGluZyB0aHJvdWdoIGFuZCBldmljdGluZyBmaWxlXG4mIzQzO1x0ICogcGFnZXMsIHdoaWNoIHdvdWxkIHZpb2xhdGUgdGhlIGFub24tb25seSBzZW1hbnRpY3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYykpIHtcbiYjNDM7XHRcdFdBUk5fT05fT05DRSghc2MtXHUwMDNlcHJvYWN0aXZlKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiBcbiBcdGV2aWN0YWJsZSA9IGxydXZlY19ldmljdGFibGVfc2l6ZShscnV2ZWMsIHN3YXBwaW5lc3MpO1xuIFxuQEAgLTc3MzgsNyAmIzQzOzc3NjUsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuIC8qXG4gICogVHJ5IHRvIGZyZWUgdXAgc29tZSBwYWdlcyBmcm9tIHRoaXMgbm9kZSB0aHJvdWdoIHJlY2xhaW0uXG4gICovXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4gXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG5AQCAtNzgzMCw3ICYjNDM7Nzg1Nyw3IEBAIGludCBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcbiBcdGlmICh0ZXN0X2FuZF9zZXRfYml0X2xvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKSlcbiBcdFx0cmV0dXJuIE5PREVfUkVDTEFJTV9OT1NDQU47XG4gXG4tXHRyZXQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgZ2ZwX21hc2ssIG5yX3BhZ2VzLCBcdTAwMjZzYykgXHUwMDNlPSBucl9wYWdlcztcbiYjNDM7XHRyZXQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgbnJfcGFnZXMsIFx1MDAyNnNjKSBcdTAwM2U9IG5yX3BhZ2VzO1xuIFx0Y2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXHUwMDI2cGdkYXQtXHUwMDNlZmxhZ3MpO1xuIFxuIFx0aWYgKHJldClcbkBAIC03ODQzLDcgJiM0Mzs3ODcwLDcgQEAgaW50IG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxuIFxuICNlbHNlXG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4gXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG5AQCAtNzk0NSw4ICYjNDM7Nzk3Miw3IEBAIGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcbiBcdFx0XHRcdFx0XHQgIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKSlcbiBcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXG4tXHRcdFx0cmVjbGFpbWVkID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGdmcF9tYXNrLFxuLVx0XHRcdFx0XHRcdCAgIGJhdGNoX3NpemUsIFx1MDAyNnNjKTtcbiYjNDM7XHRcdFx0cmVjbGFpbWVkID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGJhdGNoX3NpemUsIFx1MDAyNnNjKTtcbiBcdFx0XHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcdTAwMjZwZ2RhdC1cdTAwM2VmbGFncyk7XG4gXHRcdH1cbiBcbkBAIC04MDEzLDcgJiM0Mzs4MDM5LDcgQEAgc3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRpbnQgcmV0LCBuaWQgPSBkZXYtXHUwMDNlaWQ7XG4gXG4gXHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XG4tXHRyZXR1cm4gcmV0ID8gLUVBR0FJTiA6IGNvdW50O1xuJiM0MztcdHJldHVybiByZXQgPyByZXQgOiBjb3VudDtcbiB9XG4gXG4gc3RhdGljIERFVklDRV9BVFRSX1dPKHJlY2xhaW0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA5OjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtOVU1BJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDtyZWNsYWltX3N0b3JlJiMzNDssCiAgICAmIzM0O21lbW9yeV9yZWNsYWltJiMzNDssCiAgICAmIzM0O2dldF9zY2FuX2NvdW50JiMzNDssCiAgICAmIzM0O2dldF9zd2FwcGluZXNzJiMzNDssCiAgICAmIzM0O2dldF9ucl90b19zY2FuJiMzNDssCiAgICAmIzM0O19fbm9kZV9yZWNsYWltJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSB3aGVyZSBhbm9ueW1vdXMgbWVtb3J5IG9ubHkgcmVjbGFpbSAoc3dhcHBpbmVzcz1tYXgpIGNvdWxkIGluY29ycmVjdGx5IGZhbGwgYmFjayB0byBldmljdGluZyBmaWxlIHBhZ2VzIHdoZW4gYW5vbnltb3VzIHBhZ2VzIGNhbm5vdCBiZSByZWNsYWltZWQgKGUuZy4gbm8gc3dhcCkuIEl0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vdm1zY2FuLmMgYW5kIG1tL21lbWNvbnRyb2wuYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgY2dyb3VwIG1lbW9yeS5yZWNsYWltIG9yIHN5c2ZzIG5vZGUgcmVjbGFpbSBhdHRyaWJ1dGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MGE0MTY2MjA1ZDAxZDIzMzI3NTZkN2YyMDk4ZjFjMjA5NWFhOTQyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMjQgMDk6MTc6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDM1YzNiYjE1YWU5NmEzLi4yMGNiOTNmZDNkYTgyNCAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTI1MDEsNiAmIzQzOzI1MDEsMjMgQEAgc3RhdGljIHZvaWQgZ2V0X3NjYW5fY291bnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywKIAllbnVtIHNjYW5fYmFsYW5jZSBzY2FuX2JhbGFuY2U7CiAJZW51bSBscnVfbGlzdCBscnU7CiAKJiM0MzsJLyoKJiM0MzsJICogUHJvYWN0aXZlIHJlY2xhaW0gaW5pdGlhdGVkIGJ5IHVzZXJzcGFjZSBmb3IgYW5vbnltb3VzIG1lbW9yeSBvbmx5LgomIzQzOwkgKiBTV0FQUElORVNTX0FOT05fT05MWSBpcyBzZXQgb25seSBvbiB0aGUgcHJvYWN0aXZlIHJlY2xhaW0gcGF0aCwgc28KJiM0MzsJICogd2FybiBpZiBpdCBzaG93cyB1cCBlbHNld2hlcmUuIFdoZW4gYW5vbiBjYW5ub3QgYmUgcmVjbGFpbWVkIChlLmcuCiYjNDM7CSAqIG5vIHN3YXApLCBiYWlsIG91dCBpbnN0ZWFkIG9mIGZhbGxpbmcgYmFjayB0byBldmljdGluZyBmaWxlIHBhZ2VzLAomIzQzOwkgKiB3aGljaCB3b3VsZCB2aW9sYXRlIHRoZSBhbm9uLW9ubHkgc2VtYW50aWNzLgomIzQzOwkgKi8KJiM0MzsJaWYgKHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFkpIHsKJiM0MzsJCVdBUk5fT05fT05DRSghc2MtJmd0O3Byb2FjdGl2ZSk7CiYjNDM7CQlpZiAoIWNhbl9yZWNsYWltX2Fub25fcGFnZXMobWVtY2csIHBnZGF0LSZndDtub2RlX2lkLCBzYykpIHsKJiM0MzsJCQltZW1zZXQobnIsIDAsIHNpemVvZigqbnIpICogTlJfTFJVX0xJU1RTKTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CQlzY2FuX2JhbGFuY2UgPSBTQ0FOX0FOT047CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwogCS8qIElmIHdlIGhhdmUgbm8gc3dhcCBzcGFjZSwgZG8gbm90IGJvdGhlciBzY2FubmluZyBhbm9uIGZvbGlvcy4gKi8KIAlpZiAoIXNjLSZndDttYXlfc3dhcCB8fCAhY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtJmd0O25vZGVfaWQsIHNjKSkgewogCQlzY2FuX2JhbGFuY2UgPSBTQ0FOX0ZJTEU7CkBAIC0yNTE5LDEzICYjNDM7MjUzNiw2IEBAIHN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsCiAJCWdvdG8gb3V0OwogCX0KIAotCS8qIFByb2FjdGl2ZSByZWNsYWltIGluaXRpYXRlZCBieSB1c2Vyc3BhY2UgZm9yIGFub255bW91cyBtZW1vcnkgb25seSAqLwotCWlmIChzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZKSB7Ci0JCVdBUk5fT05fT05DRSghc2MtJmd0O3Byb2FjdGl2ZSk7Ci0JCXNjYW5fYmFsYW5jZSA9IFNDQU5fQU5PTjsKLQkJZ290byBvdXQ7Ci0JfQotCiAJLyoKIAkgKiBEbyBub3QgYXBwbHkgYW55IHByZXNzdXJlIGJhbGFuY2luZyBjbGV2ZXJuZXNzIHdoZW4gdGhlCiAJICogc3lzdGVtIGlzIGNsb3NlIHRvIE9PTSwgc2NhbiBib3RoIGFub24gYW5kIGZpbGUgZXF1YWxseQpAQCAtMjY5OCw2ICYjNDM7MjcwOCwxMCBAQCBzdGF0aWMgaW50IGdldF9zd2FwcGluZXNzKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwomIzQzOwlpbnQgc3dhcHBpbmVzcyA9IHNjX3N3YXBwaW5lc3Moc2MsIG1lbWNnKTsKJiM0MzsKJiM0MzsJaWYgKHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFkpCiYjNDM7CQlyZXR1cm4gc3dhcHBpbmVzczsKIAogCWlmICghc2MtJmd0O21heV9zd2FwKQogCQlyZXR1cm4gMDsKQEAgLTI3MDYsNyAmIzQzOzI3MjAsNyBAQCBzdGF0aWMgaW50IGdldF9zd2FwcGluZXNzKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiAJICAgIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpICZsdDsgTUlOX0xSVV9CQVRDSCkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gc2Nfc3dhcHBpbmVzcyhzYywgbWVtY2cpOwomIzQzOwlyZXR1cm4gc3dhcHBpbmVzczsKIH0KIAogc3RhdGljIGludCBnZXRfbnJfZ2VucyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKQpAQCAtNDkxMSw2ICYjNDM7NDkyNSwxOSBAQCBzdGF0aWMgbG9uZyBnZXRfbnJfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLAogCQkJICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgc3dhcHBpbmVzcykKIHsKIAl1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIGV2aWN0YWJsZTsKJiM0MzsJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwomIzQzOwkvKgomIzQzOwkgKiBQcm9hY3RpdmUgcmVjbGFpbSBpbml0aWF0ZWQgYnkgdXNlcnNwYWNlIGZvciBhbm9ueW1vdXMgbWVtb3J5IG9ubHkuCiYjNDM7CSAqIFNXQVBQSU5FU1NfQU5PTl9PTkxZIGlzIHNldCBvbmx5IG9uIHRoZSBwcm9hY3RpdmUgcmVjbGFpbSBwYXRoLCBzbwomIzQzOwkgKiB3YXJuIGlmIGl0IHNob3dzIHVwIGVsc2V3aGVyZS4gV2hlbiBhbm9uIGNhbm5vdCBiZSByZWNsYWltZWQgKGUuZy4KJiM0MzsJICogbm8gc3dhcCksIHJldHVybiAwIGluc3RlYWQgb2YgZmFsbGluZyB0aHJvdWdoIGFuZCBldmljdGluZyBmaWxlCiYjNDM7CSAqIHBhZ2VzLCB3aGljaCB3b3VsZCB2aW9sYXRlIHRoZSBhbm9uLW9ubHkgc2VtYW50aWNzLgomIzQzOwkgKi8KJiM0MzsJaWYgKHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFkgJmFtcDsmYW1wOwomIzQzOwkgICAgIWNhbl9yZWNsYWltX2Fub25fcGFnZXMobWVtY2csIHBnZGF0LSZndDtub2RlX2lkLCBzYykpIHsKJiM0MzsJCVdBUk5fT05fT05DRSghc2MtJmd0O3Byb2FjdGl2ZSk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQogCiAJZXZpY3RhYmxlID0gbHJ1dmVjX2V2aWN0YWJsZV9zaXplKGxydXZlYywgc3dhcHBpbmVzcyk7CiAKQEAgLTc3MzgsNyAmIzQzOzc3NjUsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KQogLyoKICAqIFRyeSB0byBmcmVlIHVwIHNvbWUgcGFnZXMgZnJvbSB0aGlzIG5vZGUgdGhyb3VnaCByZWNsYWltLgogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAogCQkJCSAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAogCQkJCSAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIHsKQEAgLTc4MzAsNyAmIzQzOzc4NTcsNyBAQCBpbnQgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpCiAJaWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgJmFtcDtwZ2RhdC0mZ3Q7ZmxhZ3MpKQogCQlyZXR1cm4gTk9ERV9SRUNMQUlNX05PU0NBTjsKIAotCXJldCA9IF9fbm9kZV9yZWNsYWltKHBnZGF0LCBnZnBfbWFzaywgbnJfcGFnZXMsICZhbXA7c2MpICZndDs9IG5yX3BhZ2VzOwomIzQzOwlyZXQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgbnJfcGFnZXMsICZhbXA7c2MpICZndDs9IG5yX3BhZ2VzOwogCWNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsICZhbXA7cGdkYXQtJmd0O2ZsYWdzKTsKIAogCWlmIChyZXQpCkBAIC03ODQzLDcgJiM0Mzs3ODcwLDcgQEAgaW50IG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKQogCiAjZWxzZQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAogCQkJCSAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAogCQkJCSAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIHsKQEAgLTc5NDUsOCAmIzQzOzc5NzIsNyBAQCBpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsCiAJCQkJCQkgICZhbXA7cGdkYXQtJmd0O2ZsYWdzKSkKIAkJCQlyZXR1cm4gLUVCVVNZOwogCi0JCQlyZWNsYWltZWQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgZ2ZwX21hc2ssCi0JCQkJCQkgICBiYXRjaF9zaXplLCAmYW1wO3NjKTsKJiM0MzsJCQlyZWNsYWltZWQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgYmF0Y2hfc2l6ZSwgJmFtcDtzYyk7CiAJCQljbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCAmYW1wO3BnZGF0LSZndDtmbGFncyk7CiAJCX0KIApAQCAtODAxMyw3ICYjNDM7ODAzOSw3IEBAIHN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAogCWludCByZXQsIG5pZCA9IGRldi0mZ3Q7aWQ7CiAKIAlyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7Ci0JcmV0dXJuIHJldCA/IC1FQUdBSU4gOiBjb3VudDsKJiM0MzsJcmV0dXJuIHJldCA/IHJldCA6IGNvdW50OwogfQogCiBzdGF0aWMgREVWSUNFX0FUVFJfV08ocmVjbGFpbSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MzUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWTVNjYW4gUGF0Y2g6IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBtbS92bXNjYW4uY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGhlYXJ0IG9mIG1lbW9yeSBtYW5hZ2VtZW50IGluIHRoZSBrZXJuZWwg4oCTIHNwZWNpZmljYWxseSB0aGUgdmlydHVhbCBtZW1vcnkgc2Nhbm5lci4gVGhpcyBsb29rcyB0byBiZSBhZGRyZXNzaW5nIGEgbnVhbmNlZCBpc3N1ZSBhcm91bmQgcHJvYWN0aXZlIHJlY2xhaW0gYmVoYXZpb3Igd2l0aCBgU1dBUFBJTkVTU19BTk9OX09OTFlgLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCYjMzk7cyBmaXhpbmcgYSBzY2VuYXJpbyB3aGVyZSwgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9ucyAobGlrZSBhIGxhY2sgb2YgYXZhaWxhYmxlIHN3YXAgc3BhY2UpLCB0aGUgc3lzdGVtIG1pZ2h0IGluYXBwcm9wcmlhdGVseSBzdGFydCBldmljdGluZyBmaWxlIHBhZ2VzIHdoZW4gaXQmIzM5O3Mgc3VwcG9zZWQgdG8gKm9ubHkqIGZvY3VzIG9uIGFub255bW91cyAoYW5vbikgcGFnZXMuIFRoaXMgaXMgc29tZXRoaW5nIEkmIzM5O3ZlIHNlZW4gYmVmb3JlOyBpdCYjMzk7cyBhIGNsYXNzaWMgY2FzZSBvZiBzdWJ0bGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBkaWZmZXJlbnQgcmVjbGFpbSBzdHJhdGVnaWVzLgoKVGhlIHBhdGNoIHRvdWNoZXMgYSBjbHVzdGVyIG9mIGZ1bmN0aW9uczogYGdldF9zY2FuX2NvdW50YCwgYGdldF9zd2FwcGluZXNzYCwgYGdldF9ucl90b19zY2FuYCwgYF9fbm9kZV9yZWNsYWltYCwgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCBhbmQgYHJlY2xhaW1fc3RvcmVgLiBUaGUgbW9kaWZpY2F0aW9ucyB0byBgX19ub2RlX3JlY2xhaW1gIGxvb2sgc3RyYWlnaHRmb3J3YXJkOyByZW1vdmluZyBhbiB1bnVzZWQgYGdmcF9tYXNrYCBpcyBnZW5lcmFsbHkgYSBzaWduIG9mIGdvb2QgaHlnaWVuZSBhbmQgcmVkdWN0aW9uIG9mIGNvZGUgY2x1dHRlci4gTm90aGluZyBpbW1lZGlhdGVseSBhbGFybWluZyB0aGVyZS4KClRoZSB0d2VhayB0byBgcmVjbGFpbV9zdG9yZWAgdG8gcmV0dXJuIGByZXRgIGluc3RlYWQgb2YgYC1FQUdBSU5gIHdoZW4gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGZhaWxzIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gVGhpcyBzdWdnZXN0cyBhIGNoYW5nZSBpbiBlcnJvciBoYW5kbGluZyBvciBhIHNoaWZ0IGluIGhvdyBmYWlsdXJlIHN0YXRlcyBhcmUgY29tbXVuaWNhdGVkLiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucywgcGFydGljdWxhcmx5IGhvdyB0aGUgY2FsbGVyIHdpbGwgaW50ZXJwcmV0IHRoZSBjaGFuZ2UgaW4gcmV0dXJuIHZhbHVlLgoKTm93LCBsZXQmIzM5O3MgdHJhY2UgdGhlIGNhbGxzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgd2hlcmUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGFuZCBgcmVjbGFpbV9zdG9yZWAgYXJlIGFjdHVhbGx5IGludm9rZWQuIEkgcmVtZW1iZXIgdGhhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgY2FsbGVkIGZyb20gYm90aCBgcmVjbGFpbV9zdG9yZWAgYW5kIGBtZW1vcnlfcmVjbGFpbWAgLS0gZ29vZCB0byBrbm93LiBUaGUgZmFjdCB0aGF0IGByZWNsYWltX3N0b3JlYCBpcyBhIHN5c2ZzIGF0dHJpYnV0ZSBvbiBhIG5vZGUgZGV2aWNlIGlzIGltcG9ydGFudDsgdGhpcyB0ZWxscyBtZSBpdCYjMzk7cyBhIHVzZXItc3BhY2UgaW50ZXJmYWNlIGZvciB0cmlnZ2VyaW5nIHJlY2xhaW0gb24gYSBzcGVjaWZpYyBOVU1BIG5vZGUuIEFuZCBgbWVtb3J5X3JlY2xhaW1gIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgaXQmIzM5O3MgYSBjZ3JvdXAgYXR0cmlidXRlLiBCb3RoIGdpdmUgaW1wb3J0YW50IGhpbnRzLiBOb3cgSSYjMzk7bGwgc2NhbiB0aGUgc291cmNlIGNvZGUgZGlyZWN0bHkgdG8gY29uZmlybSB0aGlzIHVuZGVyc3RhbmRpbmcgYW5kIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGZpdCBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCByZWNsYWltIHByb2Nlc3MuIEkmIzM5O2xsIGZvY3VzIG9uIGhvdyB0aGUgY29udHJvbCBmbG93IGNoYW5nZXMgd2l0aCB0aGlzIGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9NjI0PWV4dGVybiB2b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKTtcbm1tL2ludGVybmFsLmg6NjI1OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbm1tL2ludGVybmFsLmgtNjI2LVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTQ5ODk9c3RhdGljIHNzaXplX3QgbWVtb3J5X3JlY2xhaW0oc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXG4tLVxubW0vbWVtY29udHJvbC5jLTQ5OTQtXG5tbS9tZW1jb250cm9sLmM6NDk5NTpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oYnVmLCBtZW1jZywgTlVMTCk7XG5tbS9tZW1jb250cm9sLmMtNDk5Ni1cdGlmIChyZXQpXG4tLVxubW0vdm1zY2FuLmM9Nzg4Nz1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG4tLVxubW0vdm1zY2FuLmMtNzg5Mi1cbm1tL3Ztc2Nhbi5jOjc4OTM6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vdm1zY2FuLmMtNzg5NC1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmM9ODAzNT1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5tbS92bXNjYW4uYy04MDQwLVxubW0vdm1zY2FuLmM6ODA0MTpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcbm1tL3Ztc2Nhbi5jLTgwNDItXHRyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcyMAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBuZXcgZnVuY3Rpb24sIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgYW5kIGl0JiMzOTtzIGxvb2tpbmcgbGlrZSBpdCBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgY2dyb3VwJiMzOTtzIGBtZW1vcnkucmVjbGFpbWAgaW50ZXJmYWNlIGFuZCB0aGUgYHJlY2xhaW1gIHN5c2ZzIG5vZGUuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGNvdWxkIGJlIGEgcG9pbnQgb2YgaW50ZXJlc3QgZm9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgZXNwZWNpYWxseSBzaW5jZSB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgd2l0aGluIGB2bXNjYW5gLiBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgdGhpcyBpcyBmdW5jdGlvbmFsIGFuZCBhYnNvbHV0ZWx5IHdvcnRoIGEgZGVkaWNhdGVkIGZ1enppbmcgY2FtcGFpZ24uCgpUbyBkaWcgZGVlcGVyLCB0aGUga2V5IHN5bWJvbHMgdGhhdCBpbW1lZGlhdGVseSBncmFiIG15IGF0dGVudGlvbiBhcmUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGl0c2VsZiwgb2YgY291cnNlLCBhbG9uZyB3aXRoIGByZWNsYWltX3N0b3JlYCwgd2hpY2ggbGlrZWx5IGhhbmRsZXMgdGhlIGludGVyZmFjZSBpbnRvIHRoYXQgZnVuY3Rpb24sIGFuZCBgbWVtb3J5X3JlY2xhaW1gIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGludGVycmVsYXRlLiBGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzY2FuIGxpbWl0cyBhcmUgaW1wb3NlZCBhbmQgY29uZmlndXJlZCwgc28gYGdldF9zY2FuX2NvdW50YCwgYGdldF9zd2FwcGluZXNzYCwgYW5kIGBnZXRfbnJfdG9fc2NhbmAgd2lsbCBuZWVkIHNjcnV0aW55IHRvIHVuZGVyc3RhbmQgdGhlIGxpbWl0cyBpbXBvc2VkLgoKSSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgdG8gY2hlY2sgaWYgYENPTkZJR19NRU1DR2AgaXMgcmVxdWlyZWQgZm9yIGBtZW1vcnlfcmVjbGFpbWAgdG8gZnVuY3Rpb24gcHJvcGVybHkuIFRoYXQgZGVwZW5kZW5jeSBjb3VsZCBkaWN0YXRlIGhvdyBicm9hZGx5IGFwcGxpY2FibGUgdGhpcyB2dWxuZXJhYmlsaXR5IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA5OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW9yeV9yZWNsYWltJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg9MTM1PUtWTV9YODZfT1BfT1BUSU9OQUwodm1fbW92ZV9lbmNfY29udGV4dF9mcm9tKVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxMzY6S1ZNX1g4Nl9PUF9PUFRJT05BTChndWVzdF9tZW1vcnlfcmVjbGFpbWVkKVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaC0xMzctS1ZNX1g4Nl9PUChnZXRfZmVhdHVyZV9tc3IpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0xNzg1PXN0cnVjdCBrdm1feDg2X29wcyB7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xOTg2LVx0aW50ICgqdm1fbW92ZV9lbmNfY29udGV4dF9mcm9tKShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBzb3VyY2VfZmQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDoxOTg3Olx0dm9pZCAoKmd1ZXN0X21lbW9yeV9yZWNsYWltZWQpKHN0cnVjdCBrdm0gKmt2bSk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTE5ODgtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0zMjU5PXN0YXRpYyB2b2lkIHNldl9mbHVzaF9lbmNyeXB0ZWRfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHZvaWQgKnZhKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzI5NC1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzI5NTp2b2lkIHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzI5Ni17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01MzMwPXN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQ1MS1cdC5tZW1fZW5jX3VucmVnaXN0ZXJfcmVnaW9uID0gc2V2X21lbV9lbmNfdW5yZWdpc3Rlcl9yZWdpb24sXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU0NTI6XHQuZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCA9IHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkLFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDUzLVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9OTg3PWludCBzZXZfdm1fbW92ZV9lbmNfY29udGV4dF9mcm9tKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IHNvdXJjZV9mZCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjk4ODp2b2lkIHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkKHN0cnVjdCBrdm0gKmt2bSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTk4OS1pbnQgc2V2X2hhbmRsZV92bWdleGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTExMDczPXN0YXRpYyB2b2lkIHZjcHVfbG9hZF9lb2lfZXhpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExMDkyLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjExMDkzOnZvaWQga3ZtX2FyY2hfZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTEwOTQte1xuYXJjaC94ODYva3ZtL3g4Ni5jOjExMDk1Olx0a3ZtX3g4Nl9jYWxsKGd1ZXN0X21lbW9yeV9yZWNsYWltZWQpKGt2bSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTEwOTYtfVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYz04MDA9c3RhdGljIGludCBmZmFfbWVtb3J5X29wcyh1MzIgZnVuY19pZCwgc3RydWN0IGZmYV9tZW1fb3BzX2FyZ3MgKmFyZ3MpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jLTgyNC1cbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYzo4MjU6c3RhdGljIGludCBmZmFfbWVtb3J5X3JlY2xhaW0odTY0IGdfaGFuZGxlLCB1MzIgZmxhZ3MpXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmMtODI2LXtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmM9MTYyMz1zdGF0aWMgY29uc3Qgc3RydWN0IGZmYV9tZW1fb3BzIGZmYV9kcnZfbWVtX29wcyA9IHtcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYzoxNjI0Olx0Lm1lbW9yeV9yZWNsYWltID0gZmZhX21lbW9yeV9yZWNsYWltLFxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jLTE2MjUtXHQubWVtb3J5X3NoYXJlID0gZmZhX21lbW9yeV9zaGFyZSxcbi0tXG5kcml2ZXJzL3RlZS9vcHRlZS9mZmFfYWJpLmM9MjcwPXN0YXRpYyBpbnQgb3B0ZWVfZmZhX3NobV9yZWdpc3RlcihzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwgc3RydWN0IHRlZV9zaG0gKnNobSxcbi0tXG5kcml2ZXJzL3RlZS9vcHRlZS9mZmFfYWJpLmMtMzA0LVx0aWYgKHJjKSB7XG5kcml2ZXJzL3RlZS9vcHRlZS9mZmFfYWJpLmM6MzA1Olx0XHRtZW1fb3BzLVx1MDAzZW1lbW9yeV9yZWNsYWltKGFyZ3MuZ19oYW5kbGUsIDApO1xuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jLTMwNi1cdFx0cmV0dXJuIHJjO1xuLS1cbmRyaXZlcnMvdGVlL29wdGVlL2ZmYV9hYmkuYz0zMTQ9c3RhdGljIGludCBvcHRlZV9mZmFfc2htX3VucmVnaXN0ZXIoc3RydWN0IHRlZV9jb250ZXh0ICpjdHgsXG4tLVxuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jLTMzNS1cbmRyaXZlcnMvdGVlL29wdGVlL2ZmYV9hYmkuYzozMzY6XHRyYyA9IG1lbV9vcHMtXHUwMDNlbWVtb3J5X3JlY2xhaW0oZ2xvYmFsX2hhbmRsZSwgMCk7XG5kcml2ZXJzL3RlZS9vcHRlZS9mZmFfYWJpLmMtMzM3LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvdGVlL29wdGVlL2ZmYV9hYmkuYz0zNDM9c3RhdGljIGludCBvcHRlZV9mZmFfc2htX3VucmVnaXN0ZXJfc3VwcChzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCxcbi0tXG5kcml2ZXJzL3RlZS9vcHRlZS9mZmFfYWJpLmMtMzU4LVx0bWVtX29wcyA9IG9wdGVlLVx1MDAzZWZmYS5mZmFfZGV2LVx1MDAzZW9wcy1cdTAwM2VtZW1fb3BzO1xuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jOjM1OTpcdHJjID0gbWVtX29wcy1cdTAwM2VtZW1vcnlfcmVjbGFpbShnbG9iYWxfaGFuZGxlLCAwKTtcbmRyaXZlcnMvdGVlL29wdGVlL2ZmYV9hYmkuYy0zNjAtXHRpZiAocmMpXG4tLVxuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jPTY4Mj1zdGF0aWMgaW50IG9wdGVlX2ZmYV9sZW5kX3Byb3RtZW0oc3RydWN0IG9wdGVlICpvcHRlZSwgc3RydWN0IHRlZV9zaG0gKnByb3RtZW0sXG4tLVxuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jLTczNy1lcnJfcmVjbGFpbTpcbmRyaXZlcnMvdGVlL29wdGVlL2ZmYV9hYmkuYzo3Mzg6XHRtZW1fb3BzLVx1MDAzZW1lbW9yeV9yZWNsYWltKGFyZ3MuZ19oYW5kbGUsIDApO1xuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jLTczOS1cdHJldHVybiByYztcbi0tXG5kcml2ZXJzL3RlZS9vcHRlZS9mZmFfYWJpLmM9NzQyPXN0YXRpYyBpbnQgb3B0ZWVfZmZhX3JlY2xhaW1fcHJvdG1lbShzdHJ1Y3Qgb3B0ZWUgKm9wdGVlLFxuLS1cbmRyaXZlcnMvdGVlL29wdGVlL2ZmYV9hYmkuYy03NjItXG5kcml2ZXJzL3RlZS9vcHRlZS9mZmFfYWJpLmM6NzYzOlx0cmMgPSBtZW1fb3BzLVx1MDAzZW1lbW9yeV9yZWNsYWltKGdsb2JhbF9oYW5kbGUsIDApO1xuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jLTc2NC1cdGlmIChyYylcbi0tXG5kcml2ZXJzL3RlZS90c3RlZS9jb3JlLmM9MjQyPXN0YXRpYyBpbnQgdHN0ZWVfc2htX3JlZ2lzdGVyKHN0cnVjdCB0ZWVfY29udGV4dCAqY3R4LCBzdHJ1Y3QgdGVlX3NobSAqc2htLFxuLS1cbmRyaXZlcnMvdGVlL3RzdGVlL2NvcmUuYy0yODktXHRpZiAocmMpIHtcbmRyaXZlcnMvdGVlL3RzdGVlL2NvcmUuYzoyOTA6XHRcdCh2b2lkKWZmYV9kZXYtXHUwMDNlb3BzLVx1MDAzZW1lbV9vcHMtXHUwMDNlbWVtb3J5X3JlY2xhaW0oc2htLVx1MDAzZXNlY193b3JsZF9pZCxcbmRyaXZlcnMvdGVlL3RzdGVlL2NvcmUuYy0yOTEtXHRcdFx0XHRcdFx0XHQgICAgMCk7XG4tLVxuZHJpdmVycy90ZWUvdHN0ZWUvY29yZS5jLTI5OS1cdFx0XHRmZmFfYXJnc1tUU19SUENfUkVUUklFVkVfTUVNX1JQQ19TVEFUVVNdKTtcbmRyaXZlcnMvdGVlL3RzdGVlL2NvcmUuYzozMDA6XHRcdGZmYV9kZXYtXHUwMDNlb3BzLVx1MDAzZW1lbV9vcHMtXHUwMDNlbWVtb3J5X3JlY2xhaW0oc2htLVx1MDAzZXNlY193b3JsZF9pZCwgMCk7XG5kcml2ZXJzL3RlZS90c3RlZS9jb3JlLmMtMzAxLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL3RlZS90c3RlZS9jb3JlLmM9MzA3PXN0YXRpYyBpbnQgdHN0ZWVfc2htX3VucmVnaXN0ZXIoc3RydWN0IHRlZV9jb250ZXh0ICpjdHgsIHN0cnVjdCB0ZWVfc2htICpzaG0pXG4tLVxuZHJpdmVycy90ZWUvdHN0ZWUvY29yZS5jLTMzNC1cbmRyaXZlcnMvdGVlL3RzdGVlL2NvcmUuYzozMzU6XHRyYyA9IGZmYV9kZXYtXHUwMDNlb3BzLVx1MDAzZW1lbV9vcHMtXHUwMDNlbWVtb3J5X3JlY2xhaW0oc2htLVx1MDAzZXNlY193b3JsZF9pZCwgMCk7XG5kcml2ZXJzL3RlZS90c3RlZS9jb3JlLmMtMzM2LVxuLS1cbmluY2x1ZGUvbGludXgvYXJtX2ZmYS5oPTQ4NT1zdHJ1Y3QgZmZhX21lbV9vcHMge1xuaW5jbHVkZS9saW51eC9hcm1fZmZhLmg6NDg2Olx0aW50ICgqbWVtb3J5X3JlY2xhaW0pKHU2NCBnX2hhbmRsZSwgdTMyIGZsYWdzKTtcbmluY2x1ZGUvbGludXgvYXJtX2ZmYS5oLTQ4Ny1cdGludCAoKm1lbW9yeV9zaGFyZSkoc3RydWN0IGZmYV9tZW1fb3BzX2FyZ3MgKmFyZ3MpO1xuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0yNDU0PXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fYXJjaF9ub19wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjQ1OS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNDYwOnZvaWQga3ZtX2FyY2hfZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZChzdHJ1Y3Qga3ZtICprdm0pO1xuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI0NjEtXG4tLVxubW0vbWVtY29udHJvbC5jPTQ5Njc9c3RhdGljIHNzaXplX3QgbWVtb3J5X29vbV9ncm91cF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4tLVxubW0vbWVtY29udHJvbC5jLTQ5ODgtXG5tbS9tZW1jb250cm9sLmM6NDk4OTpzdGF0aWMgc3NpemVfdCBtZW1vcnlfcmVjbGFpbShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Zixcbm1tL21lbWNvbnRyb2wuYy00OTkwLVx0XHRcdCAgICAgIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG4tLVxubW0vbWVtY29udHJvbC5jPTUwMDI9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTUwNzAtXHRcdC5mbGFncyA9IENGVFlQRV9OU19ERUxFR0FUQUJMRSxcbm1tL21lbWNvbnRyb2wuYzo1MDcxOlx0XHQud3JpdGUgPSBtZW1vcnlfcmVjbGFpbSxcbm1tL21lbWNvbnRyb2wuYy01MDcyLVx0fSxcbi0tXG5zb3VuZC9zb2MvaW50ZWwvYXZzL21lc3NhZ2VzLmM9MzkxPWludCBhdnNfaXBjX2dldF9md19jb25maWcoc3RydWN0IGF2c19kZXYgKmFkZXYsIHN0cnVjdCBhdnNfZndfY2ZnICpjZmcpXG4tLVxuc291bmQvc29jL2ludGVsL2F2cy9tZXNzYWdlcy5jLTQxOC1cdFx0Y2FzZSBBVlNfRldfQ0ZHX01FTU9SWV9SRUNMQUlNRUQ6XG5zb3VuZC9zb2MvaW50ZWwvYXZzL21lc3NhZ2VzLmM6NDE5Olx0XHRcdGNmZy1cdTAwM2VtZW1vcnlfcmVjbGFpbWVkID0gKnRsdi1cdTAwM2V2YWx1ZTtcbnNvdW5kL3NvYy9pbnRlbC9hdnMvbWVzc2FnZXMuYy00MjAtXHRcdFx0YnJlYWs7XG4tLVxuc291bmQvc29jL2ludGVsL2F2cy9tZXNzYWdlcy5oPTQ2MD1zdHJ1Y3QgYXZzX2Z3X2NmZyB7XG5zb3VuZC9zb2MvaW50ZWwvYXZzL21lc3NhZ2VzLmgtNDYxLVx0c3RydWN0IGF2c19md192ZXJzaW9uIGZ3X3ZlcnNpb247XG5zb3VuZC9zb2MvaW50ZWwvYXZzL21lc3NhZ2VzLmg6NDYyOlx0dTMyIG1lbW9yeV9yZWNsYWltZWQ7XG5zb3VuZC9zb2MvaW50ZWwvYXZzL21lc3NhZ2VzLmgtNDYzLVx0dTMyIHNsb3dfY2xvY2tfZnJlcV9oejtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTE1NT1zdGF0aWMgREVGSU5FX1BFUl9DUFUoY3B1bWFza192YXJfdCwgY3B1X2tpY2tfbWFzayk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE1Ni1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MTU3Ol9fd2VhayB2b2lkIGt2bV9hcmNoX2d1ZXN0X21lbW9yeV9yZWNsYWltZWQoc3RydWN0IGt2bSAqa3ZtKVxudmlydC9rdm0va3ZtX21haW4uYy0xNTgte1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9MzQxPXN0YXRpYyB2b2lkIGt2bV9mbHVzaF9zaGFkb3dfYWxsKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTM0My1cdGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19hbGwoa3ZtKTtcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzQ0Olx0a3ZtX2FyY2hfZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZChrdm0pO1xudmlydC9rdm0va3ZtX21haW4uYy0zNDUtfVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NzIxPXN0YXRpYyBpbnQga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNzY1LVx0aWYgKGt2bV9oYW5kbGVfaHZhX3JhbmdlKGt2bSwgXHUwMDI2aHZhX3JhbmdlKS5mb3VuZF9tZW1zbG90KVxudmlydC9rdm0va3ZtX21haW4uYzo3NjY6XHRcdGt2bV9hcmNoX2d1ZXN0X21lbW9yeV9yZWNsYWltZWQoa3ZtKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNzY3LVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9MTc5OD1zdGF0aWMgdm9pZCBrdm1faW52YWxpZGF0ZV9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE4MjQtXHRrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdChrdm0sIG9sZCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjE4MjU6XHRrdm1fYXJjaF9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkKGt2bSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE4MjYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDk6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ3MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk1lbW9yeSBSZWNsYWltIGFuZCBDb250cm9sIEdyb3VwczogQSBRdWljayBDaGVjayoqCgpBbHJpZ2h0LCAqbWVtb3J5X3JlY2xhaW0qLiBUaGF0JiMzOTtzIGEgY29yZSBmdW5jdGlvbiwgdXN1YWxseSB0dWNrZWQgYXdheSBpbiB0aGUgaGVhcnQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBkZWZpbmVkIGluIGBtbS9tZW1jb250cm9sLmNgLiBOb3csIG15IGluaXRpYWwgdGhvdWdodCBpczogd2hhdCYjMzk7cyB0aGUgY29ubmVjdGlvbiB0byBjb250cm9sIGdyb3VwcyAoY2dyb3Vwcyk/IGBtZW1vcnlfcmVjbGFpbWAgaXMgY3JpdGljYWwgZm9yIG1hbmFnaW5nIG1lbW9yeSBwcmVzc3VyZXMgYWNyb3NzIHRoZSBzeXN0ZW0sIGFuZCBjZ3JvdXBzLCBvZiBjb3Vyc2UsIHByb3ZpZGUgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciByZXNvdXJjZSBhbGxvY2F0aW9uLCBpbmNsdWRpbmcgbWVtb3J5LiBTbywgaXMgYENPTkZJR19NRU1DR2AgZGlyZWN0bHkgaW52b2x2ZWQgaGVyZT8gSSYjMzk7bSBiZXR0aW5nIHRoZXJlJiMzOTtzIGEgZGVwZW5kZW5jeSwgZ2l2ZW4gdGhlIGZpbGUgbG9jYXRpb24sIGJ1dCBsZXQmIzM5O3MgY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwOToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1vcnlfcmVjbGFpbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NDk2Nz1zdGF0aWMgc3NpemVfdCBtZW1vcnlfb29tX2dyb3VwX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbi0tXG5tbS9tZW1jb250cm9sLmMtNDk4OC1cbm1tL21lbWNvbnRyb2wuYzo0OTg5OnN0YXRpYyBzc2l6ZV90IG1lbW9yeV9yZWNsYWltKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxubW0vbWVtY29udHJvbC5jLTQ5OTAtXHRcdFx0ICAgICAgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcbi0tXG5tbS9tZW1jb250cm9sLmM9NTAwMj1zdGF0aWMgc3RydWN0IGNmdHlwZSBtZW1vcnlfZmlsZXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTA3MC1cdFx0LmZsYWdzID0gQ0ZUWVBFX05TX0RFTEVHQVRBQkxFLFxubW0vbWVtY29udHJvbC5jOjUwNzE6XHRcdC53cml0ZSA9IG1lbW9yeV9yZWNsYWltLFxubW0vbWVtY29udHJvbC5jLTUwNzItXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA5OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5MTEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBtbS9tZW1jb250cm9sLmNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGBtbS9tZW1jb250cm9sLmNgIGZpbGUgaXMgYmVpbmcgY29tcGlsZWQgY29uZGl0aW9uYWxseSB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIGtlcm5lbCBidWlsZC4gSSBrbm93IHRoZSBnZW5lcmFsIGxvY2F0aW9uLCBzbyBub3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUmIzM5O3MgYSBjb25maWd1cmF0aW9uIGZsYWcgb3IgYSBzcGVjaWZpYyBgaWZkZWZgIGJsb2NrIHRoYXQgY29udHJvbHMgaXRzIGluY2x1c2lvbi4gSSYjMzk7bGwgbmVlZCB0byByYXBpZGx5IGV4YW1pbmUgdGhlIHJlbGV2YW50IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZmlsZXMgb3IgcG90ZW50aWFsbHkgdGhlIEtidWlsZCBzeXN0ZW0gdG8gYXNzZXNzIGl0cyBkZXBlbmRlbmN5LiBFc3NlbnRpYWxseSwgaXMgdGhpcyBtb2R1bGUgYWx3YXlzIGNvbXBpbGVkLCBvciBkb2VzIGl0IGRlcGVuZCBvbiBjZXJ0YWluIGtlcm5lbCBmZWF0dXJlcyBiZWluZyBlbmFibGVkPyBNeSBnb2FsIGlzIHRvIGRldGVybWluZSB0aGUgY29tcGlsZS10aW1lIGJlaGF2aW91ciBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwOToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jb250cm9sLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cbm1tL01ha2VmaWxlLTI5LUtDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLXYxLm8gOj0gblxuLS1cbm1tL01ha2VmaWxlPTEwND1vYmotJChDT05GSUdfTUVNQ0dfVjEpICYjNDM7PSBtZW1jb250cm9sLXYxLm9cbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gYnBmX21lbWNvbnRyb2wub1xubW0vTWFrZWZpbGUtMTA4LWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA5OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyOTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50OgoKKipNZW1vcnkgQ29udHJvbCBHcm91cHMgYW5kIFJlY2xhaW0qKgoKUmlnaHQsIHNvLCBmaXJzdCBhbmQgZm9yZW1vc3QsIEkmIzM5O20gYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgYENPTkZJR19NRU1DR2AgbmVlZHMgdG8gYmUgZW5hYmxlZC4gTm8gcXVlc3Rpb24gYWJvdXQgaXQuIEl0JiMzOTtzIHRoZSBmb3VuZGF0aW9uIHdlJiMzOTtyZSB3b3JraW5nIGZyb20sIGFuZCB3aXRob3V0IGl0LCB3ZSYjMzk7cmUgbm90IGV2ZW4gaGF2aW5nIHRoaXMgY29udmVyc2F0aW9uLgoKQnV0IHRoYXQgYnJpbmdzIG1lIHRvIHRoZSBjb3JlIGNvbmNlcm4uIEkmIzM5O20gd29uZGVyaW5nIGFib3V0IGByZWNsYWltX3N0b3JlYCBpbiBgbW0vdm1zY2FuLmNgLiBIb3cmIzM5O3MgdGhhdCBpbnRlcmFjdGluZyB3aXRoIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCBzZXR1cD8gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgbWVtb3J5IHJlY2xhaW0gbG9naWMgaXMgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIGFuZCByZXNwZWN0aW5nIHRoZSBsaW1pdHMgZW5mb3JjZWQgYnkgdGhlIG1lbW9yeSBjZ3JvdXBzLiBJcyBpdCBwcm9wZXJseSBhc3NvY2lhdGluZyByZWNsYWltZWQgcGFnZXMgd2l0aCB0aGUgY29ycmVjdCBjZ3JvdXA/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGxlYWtzIG9yIGJ5cGFzc2VzPyBJdCYjMzk7cyB0aGF0IHN1YnRsZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHJlY2xhaW0gc3RyYXRlZ2llcyBhbmQgdGhlIGNncm91cCBhY2NvdW50aW5nIHRoYXQgYWx3YXlzIGtlZXBzIG1lIG9uIG15IHRvZXMuIEl04oCZcyB0aGUga2luZCBvZiBhcmVhIHdoZXJlIHNlZW1pbmdseSBtaW5vciBvdmVyc2lnaHRzIGNhbiBsZWFkIHRvIHByZXR0eSBzaWduaWZpY2FudCBwcm9ibGVtcyBkb3duIHRoZSBsaW5lLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IGluYWR2ZXJ0ZW50bHkgdW5kZXJtaW5pbmcgdGhlIHdob2xlIHBvaW50IG9mIGBtZW1jZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA5OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlY2xhaW1fc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz04MDMyPUVYUE9SVF9TWU1CT0xfR1BMKGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKTtcbi0tXG5tbS92bXNjYW4uYy04MDM0LSNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX05VTUEpXG5tbS92bXNjYW4uYzo4MDM1OnN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxubW0vdm1zY2FuLmMtODAzNi1cdFx0XHQgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwOToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzIzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYW5kIGl0JiMzOTtzIGNsZWFyOiB0aGlzIGZ1bmN0aW9uYWxpdHkgaGluZ2VzIG9uIGhhdmluZyBgQ09ORklHX1NZU0ZTYCBhbmQgYENPTkZJR19OVU1BYCBlbmFibGVkLiBUaGF0JiMzOTtzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpb24gYW5kIHBvdGVudGlhbCBkZXBsb3ltZW50LiBJJiMzOTtsbCBtYWtlIGEgbWVudGFsIG5vdGUgdGhhdCBlbmFibGluZyBgQ09ORklHX01FTUNHYCBhbG9uZyB3aXRoIGBDT05GSUdfTlVNQWAgd291bGQgYmUgYSBnb29kIHN0cmF0ZWd5IHRvIHB1cnN1ZS4gVGhleSBzZWVtIGxpa2UgbG9naWNhbCBjb21wYW5pb25zLgoKTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGltcGxlbWVudGF0aW9uLiBJJiMzOTtsbCBqdW1wIGludG8gYG1tL3Ztc2Nhbi5jYCBhbmQgc3BlY2lmaWNhbGx5IGNoZWNrIHRoZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHByZWNpc2VseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGNvbmZpZ3VyYXRpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwOToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9Nzg4Nz1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG4tLVxubW0vdm1zY2FuLmMtNzg5Mi1cbm1tL3Ztc2Nhbi5jOjc4OTM6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vdm1zY2FuLmMtNzg5NC1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmM9ODAzNT1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5tbS92bXNjYW4uYy04MDQwLVxubW0vdm1zY2FuLmM6ODA0MTpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcbm1tL3Ztc2Nhbi5jLTgwNDItXHRyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA5OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTcyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkNvbmRpdGlvbmFsIENvbXBpbGF0aW9uIENvbnVuZHJ1bXMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZnVuY3Rpb24sIGFuZCB0aGUgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXM6ICpJcyBpdCBjb21waWxlZCBjb25kaXRpb25hbGx5PyogSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBzb21ldGhpbmcgdGhhdOKAmXMgYWx3YXlzIHByZXNlbnQgaW4gdGhlIGJ1aWxkLCBvciBpZiBpdHMgaW5jbHVzaW9uIGlzIGRlcGVuZGVudCBvbiBzb21lIHByZXByb2Nlc3NvciBmbGFnLCBjb25maWd1cmF0aW9uIHNldHRpbmcsIG9yIGV2ZW4gYSBzcGVjaWZpYyB0YXJnZXQgcGxhdGZvcm0uCgpUaGUgaW1wbGljYXRpb25zIGFyZSBodWdlLCB5b3Uga25vdy4gSWYgaXQgKmlzKiBjb25kaXRpb25hbCwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbmRpdGlvbnMuIFRoYXQgd2lsbCBpbmZvcm0gd2hldGhlciBJIG5lZWQgdG8gd29ycnkgYWJvdXQgdGhlIHNpZGUgZWZmZWN0cyB3aGVuIGxvb2tpbmcgYXQgdGhlIHdob2xlIHN5c3RlbSBiZWhhdmlvci4gQSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGZ1bmN0aW9uIGltcGFjdHMgdGhlIHJhbmdlIG9mIGV4ZWN1dGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBjb25kaXRpb25hbCBjb21waWxhdGlvbiByZXNpZGVzLCBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQgY29tcGlsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA5OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9pbnRlcm5hbC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9NjI0PWV4dGVybiB2b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKTtcbm1tL2ludGVybmFsLmg6NjI1OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbm1tL2ludGVybmFsLmgtNjI2LVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA5OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTAzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGRlZXBseSBmYW1pbGlhciB3aXRoIGtlcm5lbCBkZXZlbG9wbWVudCBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIGZvY3VzaW5nIG9uIHRoZSBzcGVjaWZpYyB0aG91Z2h0IHByb2Nlc3MgcHJlc2VudGVkOgoKKipDaGVja2luZyBmb3IgUHJvYWN0aXZlIFJlY2xhaW0gR3VhcmRzKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7TGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBoYXZlbiYjMzk7dCBnb3QgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGd1YXJkaW5nIHRoZSAmIzM5O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM5OyBtZWNoYW5pc20gaW4gJiMzOTttbS92bXNjYW4uYyYjMzk7LiYjMzQ7IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IGAjaWZkZWZgIGRpcmVjdGl2ZXMgc3Vycm91bmRpbmcgdGhhdCBmZWF0dXJlLiBJdCYjMzk7cyBjcnVjaWFsLCBvYnZpb3VzbHksIGJlY2F1c2UgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHRoZXJlIHdvdWxkIHRvdGFsbHkgY2hhbmdlIGhvdyBpdCBiZWhhdmVzIGluIGRpZmZlcmVudCBidWlsZCBjb25maWd1cmF0aW9ucywgYW5kIEkgbmVlZCB0byBrZWVwIHRoYXQgYmVoYXZpb3IgaW4gbWluZC4gR290dGEgbWFrZSBzdXJlIGl0JiMzOTtzIGNvbnNpc3RlbnRseSBlbmFibGVkIG9yIGRpc2FibGVkIGFzIEkgZXhwZWN0LiBJdCYjMzk7cyBhIHF1aWNrIGNoZWNrIGJ1dCBhIGZ1bmRhbWVudGFsIG9uZSBiZWZvcmUgSSBkaWcgZGVlcGVyIGludG8gYW55dGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgcmVjbGFpbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDk6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc4ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzg4MDpcdCNlbmRpZlxuNzg4MTpcdFxuNzg4MjpcdGVudW0ge1xuNzg4MzpcdFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUyA9IDAsXG43ODg0Olx0XHRNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCxcbjc4ODU6XHRcdE1FTU9SWV9SRUNMQUlNX05VTEwsXG43ODg2Olx0fTtcbjc4ODc6XHRzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG43ODg4Olx0XHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MsIFwmIzM0O3N3YXBwaW5lc3M9JWRcJiMzNDt9LFxuNzg4OTpcdFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCwgXCYjMzQ7c3dhcHBpbmVzcz1tYXhcJiMzNDt9LFxuNzg5MDpcdFx0eyBNRU1PUllfUkVDTEFJTV9OVUxMLCBOVUxMIH0sXG43ODkxOlx0fTtcbjc4OTI6XHRcbjc4OTM6XHRpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG43ODk0Olx0XHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuNzg5NTpcdHtcbjc4OTY6XHRcdHVuc2lnbmVkIGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcbjc4OTc6XHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSwgbnJfcmVjbGFpbWVkID0gMDtcbjc4OTg6XHRcdGludCBzd2FwcGluZXNzID0gLTE7XG43ODk5Olx0XHRjaGFyICpvbGRfYnVmLCAqc3RhcnQ7XG43OTAwOlx0XHRzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107XG43OTAxOlx0XHRnZnBfdCBnZnBfbWFzayA9IEdGUF9LRVJORUw7XG43OTAyOlx0XG43OTAzOlx0XHRpZiAoIWJ1ZiB8fCAoIW1lbWNnIFx1MDAyNlx1MDAyNiAhcGdkYXQpIHx8IChtZW1jZyBcdTAwMjZcdTAwMjYgcGdkYXQpKVxuNzkwNDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjc5MDU6XHRcbjc5MDY6XHRcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XG43OTA3Olx0XG43OTA4Olx0XHRvbGRfYnVmID0gYnVmO1xuNzkwOTpcdFx0bnJfdG9fcmVjbGFpbSA9IG1lbXBhcnNlKGJ1ZiwgXHUwMDI2YnVmKSAvIFBBR0VfU0laRTtcbjc5MTA6XHRcdGlmIChidWYgPT0gb2xkX2J1Zilcbjc5MTE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43OTEyOlx0XG43OTEzOlx0XHRidWYgPSBzdHJzdHJpcChidWYpO1xuNzkxNDpcdFxuNzkxNTpcdFx0d2hpbGUgKChzdGFydCA9IHN0cnNlcChcdTAwMjZidWYsIFwmIzM0OyBcJiMzNDspKSAhPSBOVUxMKSB7XG43OTE2Olx0XHRcdGlmICghc3RybGVuKHN0YXJ0KSlcbjc5MTc6XHRcdFx0XHRjb250aW51ZTtcbjc5MTg6XHRcdFx0c3dpdGNoIChtYXRjaF90b2tlbihzdGFydCwgdG9rZW5zLCBhcmdzKSkge1xuNzkxOTpcdFx0XHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1M6XG43OTIwOlx0XHRcdFx0aWYgKG1hdGNoX2ludChcdTAwMjZhcmdzWzBdLCBcdTAwMjZzd2FwcGluZXNzKSlcbjc5MjE6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzkyMjpcdFx0XHRcdGlmIChzd2FwcGluZXNzIFx1MDAzYyBNSU5fU1dBUFBJTkVTUyB8fFxuNzkyMzpcdFx0XHRcdCAgICBzd2FwcGluZXNzIFx1MDAzZSBNQVhfU1dBUFBJTkVTUylcbjc5MjQ6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzkyNTpcdFx0XHRcdGJyZWFrO1xuNzkyNjpcdFx0XHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYOlxuNzkyNzpcdFx0XHRcdHN3YXBwaW5lc3MgPSBTV0FQUElORVNTX0FOT05fT05MWTtcbjc5Mjg6XHRcdFx0XHRicmVhaztcbjc5Mjk6XHRcdFx0ZGVmYXVsdDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDk6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1MTYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBSZWNsYWltIE1lY2hhbmlzbXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgSSYjMzk7bSBkZWFsaW5nIHdpdGggc2V2ZXJhbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBtZW1vcnkgcmVjbGFpbS4gVGhlIGNyaXRpY2FsIGZpcnN0IG9ic2VydmF0aW9uIGlzIHRoYXQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzbiYjMzk7dCBndWFyZGVkIGJ5IGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBiZWNhdXNlIGl0IHN1Z2dlc3RzIGEgbW9yZSBkaXJlY3QgY29udHJvbCBvciBpbXBhY3QuIENvbnZlcnNlbHksIGByZWNsYWltX3N0b3JlYCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHVuZGVyIHRoZSBgQ09ORklHX1NZU0ZTYCBhbmQgYENPTkZJR19OVU1BYCBmbGFncy4gVGhpcyBpbmRpY2F0ZXMgaXRzIGZ1bmN0aW9uYWxpdHkgaXMgdGllZCB0byB0aGUgcHJlc2VuY2Ugb2YgYSBzeXNmcyBpbnRlcmZhY2UgYW5kIE5VTUEgYXJjaGl0ZWN0dXJlLCB3aGljaCBzdWdnZXN0cyB0aGlzIGlzIHNvbWVob3cgaW52b2x2ZWQgd2l0aCB0aGUgcHJlc2VudGF0aW9uIG9mIG1lbW9yeSByZWNsYWltIHN0YXRpc3RpY3MsIG9yIHBlcmhhcHMgZXZlbiBzb21lIGNvbnRyb2wgbWVjaGFuaXNtLiBBbmQgZmluYWxseSwgYG1lbW9yeV9yZWNsYWltYCBpcyBsb2NhdGVkIGluIGBtbS9tZW1jb250cm9sLmNgIGFuZCBpcyBjb25kaXRpb25hbGl6ZWQgYnkgYENPTkZJR19NRU1DR2AuIFNvLCB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQgaGVyZSBhcmUgYE1FTUNHYCAoZm9yIGNvbnRyb2wgZ3JvdXBzLCB3aGljaCBJJiMzOTttIGZhbWlsaWFyIHdpdGgpIGFuZCBgTlVNQWAgKE5vbi1Vbmlmb3JtIE1lbW9yeSBBY2Nlc3MpLgoKTm93LCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzY29wZSwgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBmb2N1czogYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCBgcmVjbGFpbV9zdG9yZWAsIGBtZW1vcnlfcmVjbGFpbWAsIGBnZXRfc2Nhbl9jb3VudGAsIGBnZXRfc3dhcHBpbmVzc2AsIGFuZCBgZ2V0X25yX3RvX3NjYW5gLiBUaGVzZSBhcmUgY2xlYXJseSB0aGUgY29yZSBjb21wb25lbnRzIG9mIGludGVyZXN0LiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgcmVsYXRpb25zaGlwcyBhbmQgaG93IHRoZXkgaW50ZXJhY3QgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNoYW5nZXMgYWZmZWN0IHRoZSBzeXN0ZW0uCgpCZWZvcmUgSSBnbyBmdXJ0aGVyLCB0aG91Z2gsIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBtaWdodCBoYXZlIGJlZW4gbW9kaWZpZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgcHJpbWFyeSBvbmVzLiBBaCwgeWVzLCBgX19ub2RlX3JlY2xhaW1gIGhhcyBhbHNvIGJlZW4gbW9kaWZpZWQuIFRoaXMgaW1wbGllcyB0aGF0IHRoZSBjaGFuZ2VzIG1pZ2h0IGFmZmVjdCB0aGUgbm9kZS1sZXZlbCByZWNsYWltIGFzIHdlbGwuIFRoaXMgYWRkaXRpb25hbCBkYXRhIHBvaW50IGlzIGV4dHJlbWVseSBpbXBvcnRhbnQuIEl0IG1lYW5zIEkgaGF2ZSB0byBsb29rIGJleW9uZCBhIHNpbmdsZSBmdW5jdGlvbiwgdGhlIG1vZGlmaWNhdGlvbnMgbWlnaHQgYmUgc3lzdGVtLXdpZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA5OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbm9kZV9yZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NzczNj1zdGF0aWMgdW5zaWduZWQgbG9uZyBub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTc3NjctICovXG5tbS92bXNjYW4uYzo3NzY4OnN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG5tbS92bXNjYW4uYy03NzY5LVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vdm1zY2FuLmM9NzgxMT1pbnQgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vdm1zY2FuLmMtNzg1OS1cbm1tL3Ztc2Nhbi5jOjc4NjA6XHRyZXQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgbnJfcGFnZXMsIFx1MDAyNnNjKSBcdTAwM2U9IG5yX3BhZ2VzO1xubW0vdm1zY2FuLmMtNzg2MS1cdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKTtcbi0tXG5tbS92bXNjYW4uYy03ODcyLVxubW0vdm1zY2FuLmM6Nzg3MzpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxubW0vdm1zY2FuLmMtNzg3NC1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL3Ztc2Nhbi5jPTc4OTM9aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxuLS1cbm1tL3Ztc2Nhbi5jLTc5NzQtXG5tbS92bXNjYW4uYzo3OTc1Olx0XHRcdHJlY2xhaW1lZCA9IF9fbm9kZV9yZWNsYWltKHBnZGF0LCBiYXRjaF9zaXplLCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy03OTc2LVx0XHRcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDk6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MzcKCQkJCQkJCW91dHB1dDogMTg5CgkJCQkJCQl0aG91Z2h0czogMjk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgYSBNZW1vcnkgUmVjbGFpbSBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgY29kZSBkZWZpbml0ZWx5IHRvdWNoZXMgYF9fbm9kZV9yZWNsYWltYC4gVGhhdCYjMzk7cyBhIGtleSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW1wbGljYXRpb25zLgoKTG9va2luZyBhdCB0aGUgZm9jdXMgc3ltYm9scywgSSBzZWU6CgoqICAgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gCiogICBgcmVjbGFpbV9zdG9yZWAKKiAgIGBtZW1vcnlfcmVjbGFpbWAKKiAgIGBnZXRfc2Nhbl9jb3VudGAKKiAgIGBnZXRfc3dhcHBpbmVzc2AKKiAgIGBnZXRfbnJfdG9fc2NhbmAKKiAgIGBfX25vZGVfcmVjbGFpbWAKCldhaXQgYSBtaW51dGUsIGBnZXRfc2Nhbl9jb3VudGAsIGBnZXRfc3dhcHBpbmVzc2AsIGFuZCBgZ2V0X25yX3RvX3NjYW5gLi4uIHRob3NlIGFyZSBzdGF0aWMgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIGBtbS92bXNjYW4uY2AuIFRoZXkmIzM5O3JlIGludGVncmFsIHBhcnRzIG9mIHRoZSBwYWdlIHJlY2xhaW0gbG9naWMsIHdoaWNoIG1lYW5zIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBkZWVwIGludG8gdGhlIGNvcmUgc2Nhbm5pbmcgZnVuY3Rpb25hbGl0eS4gQW5kLCBvZiBjb3Vyc2UsIGBfX25vZGVfcmVjbGFpbWAgaXRzZWxmIGlzIGFsc28gc3RhdGljLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcuCgpPa2F5LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIGBtZW1vcnlfcmVjbGFpbWAuIEFoLCB5ZXMsIGl0JiMzOTtzIHN0YXRpYyB0b28sIGJ1dCBmb3VuZCBpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhpcyBzdWdnZXN0cyBhIGJyb2FkZXIgaW1wYWN0LCBsaWtlbHkgaW52b2x2aW5nIG1lbW9yeSBjb250cm9sIGdyb3Vwcywgd2hpY2ggSSBzdXNwZWN0ZWQgYW55d2F5LgoKVGhpcyBwYXRjaCBpcyB0aWVkIHRvIHRoZSBgTUVNQ0dgIGFuZCBgTlVNQWAgY29uZmlndXJhdGlvbnMsIHdoaWNoIHJlaW5mb3JjZXMgdGhhdCBpdOKAmXMgbW9kaWZ5aW5nIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgTlVNQSBhcmNoaXRlY3R1cmVzLgoKVGhlIGNvcmUgaXNzdWUgc2VlbXMgdG8gYmUgYSBidWcgaW4gcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltOiB1bmRlciBzcGVjaWZpYyBzY2VuYXJpb3MgKHN3YXBwaW5lc3Mgc2V0IHRvIG1heCB3aXRoIG5vIHN3YXAgYXZhaWxhYmxlKSwgaXQgd2FzIHdyb25nbHkgZXZpY3RpbmcgZmlsZSBwYWdlcyB3aGVuIGl0IHNob3VsZCBoYXZlIGJlZW4gc29sZWx5IGZvY3VzaW5nIG9uIGFub255bW91cyBwYWdlcy4gSXQmIzM5O3MgdG91Y2hpbmcgc29tZSBtYWpvciBjb2RlIHBhdGhzIGluIGBtbS92bXNjYW4uY2AgYW5kIGBtbS9tZW1jb250cm9sLmNgLCBtZWFuaW5nIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGNhbiBldmVuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB1c2luZyBjZ3JvdXAgYG1lbW9yeS5yZWNsYWltYCBvciBzeXNmcyBub2RlIGByZWNsYWltYCBhdHRyaWJ1dGVzLgoKSSB0aGluayBJJiMzOTt2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIHNjb3BlLiBUaW1lIHRvIHJ1biBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwOToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAgICYjMzQ7cmVjbGFpbV9zdG9yZSYjMzQ7LAogICAgJiMzNDttZW1vcnlfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDtnZXRfc2Nhbl9jb3VudCYjMzQ7LAogICAgJiMzNDtnZXRfc3dhcHBpbmVzcyYjMzQ7LAogICAgJiMzNDtnZXRfbnJfdG9fc2NhbiYjMzQ7LAogICAgJiMzNDtfX25vZGVfcmVjbGFpbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBwcm9hY3RpdmUgbWVtb3J5IHJlY2xhaW0gd2hlcmUgYW5vbnltb3VzIG1lbW9yeSBvbmx5IHJlY2xhaW0gKHN3YXBwaW5lc3M9bWF4KSBjb3VsZCBpbmNvcnJlY3RseSBmYWxsIGJhY2sgdG8gZXZpY3RpbmcgZmlsZSBwYWdlcyB3aGVuIGFub255bW91cyBwYWdlcyBjYW5ub3QgYmUgcmVjbGFpbWVkIChlLmcuIG5vIHN3YXApLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGFuZCBtbS9tZW1jb250cm9sLmMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGNncm91cCBtZW1vcnkucmVjbGFpbSBvciBzeXNmcyBub2RlIHJlY2xhaW0gYXR0cmlidXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAgICYjMzQ7cmVjbGFpbV9zdG9yZSYjMzQ7LAogICAgJiMzNDttZW1vcnlfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDtnZXRfc2Nhbl9jb3VudCYjMzQ7LAogICAgJiMzNDtnZXRfc3dhcHBpbmVzcyYjMzQ7LAogICAgJiMzNDtnZXRfbnJfdG9fc2NhbiYjMzQ7LAogICAgJiMzNDtfX25vZGVfcmVjbGFpbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBwcm9hY3RpdmUgbWVtb3J5IHJlY2xhaW0gd2hlcmUgYW5vbnltb3VzIG1lbW9yeSBvbmx5IHJlY2xhaW0gKHN3YXBwaW5lc3M9bWF4KSBjb3VsZCBpbmNvcnJlY3RseSBmYWxsIGJhY2sgdG8gZXZpY3RpbmcgZmlsZSBwYWdlcyB3aGVuIGFub255bW91cyBwYWdlcyBjYW5ub3QgYmUgcmVjbGFpbWVkIChlLmcuIG5vIHN3YXApLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGFuZCBtbS9tZW1jb250cm9sLmMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGNncm91cCBtZW1vcnkucmVjbGFpbSBvciBzeXNmcyBub2RlIHJlY2xhaW0gYXR0cmlidXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA5OjE3OjQ3Ljg3NjgwMDY3NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNzA1ODY0MTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJOVU1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICAgIFwicmVjbGFpbV9zdG9yZVwiLFxuICAgIFwibWVtb3J5X3JlY2xhaW1cIixcbiAgICBcImdldF9zY2FuX2NvdW50XCIsXG4gICAgXCJnZXRfc3dhcHBpbmVzc1wiLFxuICAgIFwiZ2V0X25yX3RvX3NjYW5cIixcbiAgICBcIl9fbm9kZV9yZWNsYWltXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIHdoZXJlIGFub255bW91cyBtZW1vcnkgb25seSByZWNsYWltIChzd2FwcGluZXNzPW1heCkgY291bGQgaW5jb3JyZWN0bHkgZmFsbCBiYWNrIHRvIGV2aWN0aW5nIGZpbGUgcGFnZXMgd2hlbiBhbm9ueW1vdXMgcGFnZXMgY2Fubm90IGJlIHJlY2xhaW1lZCAoZS5nLiBubyBzd2FwKS4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS92bXNjYW4uYyBhbmQgbW0vbWVtY29udHJvbC5jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBjZ3JvdXAgbWVtb3J5LnJlY2xhaW0gb3Igc3lzZnMgbm9kZSByZWNsYWltIGF0dHJpYnV0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA5OjE3OjQ3Ljg3NjgwOTUxNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY2NjQ3NDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTBhNDE2NjIwNWQwMWQyMzMyNzU2ZDdmMjA5OGYxYzIwOTVhYTk0MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAyNCAwOToxNzo0NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggMzVjM2JiMTVhZTk2YTMuLjIwY2I5M2ZkM2RhODI0IDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtMjUwMSw2ICsyNTAxLDIzIEBAIHN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuIFxcdGVudW0gc2Nhbl9iYWxhbmNlIHNjYW5fYmFsYW5jZTtcXG4gXFx0ZW51bSBscnVfbGlzdCBscnU7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBQcm9hY3RpdmUgcmVjbGFpbSBpbml0aWF0ZWQgYnkgdXNlcnNwYWNlIGZvciBhbm9ueW1vdXMgbWVtb3J5IG9ubHkuXFxuK1xcdCAqIFNXQVBQSU5FU1NfQU5PTl9PTkxZIGlzIHNldCBvbmx5IG9uIHRoZSBwcm9hY3RpdmUgcmVjbGFpbSBwYXRoLCBzb1xcbitcXHQgKiB3YXJuIGlmIGl0IHNob3dzIHVwIGVsc2V3aGVyZS4gV2hlbiBhbm9uIGNhbm5vdCBiZSByZWNsYWltZWQgKGUuZy5cXG4rXFx0ICogbm8gc3dhcCksIGJhaWwgb3V0IGluc3RlYWQgb2YgZmFsbGluZyBiYWNrIHRvIGV2aWN0aW5nIGZpbGUgcGFnZXMsXFxuK1xcdCAqIHdoaWNoIHdvdWxkIHZpb2xhdGUgdGhlIGFub24tb25seSBzZW1hbnRpY3MuXFxuK1xcdCAqL1xcbitcXHRpZiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSkge1xcbitcXHRcXHRXQVJOX09OX09OQ0UoIXNjLVxcdTAwM2Vwcm9hY3RpdmUpO1xcbitcXHRcXHRpZiAoIWNhbl9yZWNsYWltX2Fub25fcGFnZXMobWVtY2csIHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBzYykpIHtcXG4rXFx0XFx0XFx0bWVtc2V0KG5yLCAwLCBzaXplb2YoKm5yKSAqIE5SX0xSVV9MSVNUUyk7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXHRcXHRzY2FuX2JhbGFuY2UgPSBTQ0FOX0FOT047XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbiBcXHQvKiBJZiB3ZSBoYXZlIG5vIHN3YXAgc3BhY2UsIGRvIG5vdCBib3RoZXIgc2Nhbm5pbmcgYW5vbiBmb2xpb3MuICovXFxuIFxcdGlmICghc2MtXFx1MDAzZW1heV9zd2FwIHx8ICFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgc2MpKSB7XFxuIFxcdFxcdHNjYW5fYmFsYW5jZSA9IFNDQU5fRklMRTtcXG5AQCAtMjUxOSwxMyArMjUzNiw2IEBAIHN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbi1cXHQvKiBQcm9hY3RpdmUgcmVjbGFpbSBpbml0aWF0ZWQgYnkgdXNlcnNwYWNlIGZvciBhbm9ueW1vdXMgbWVtb3J5IG9ubHkgKi9cXG4tXFx0aWYgKHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFkpIHtcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKCFzYy1cXHUwMDNlcHJvYWN0aXZlKTtcXG4tXFx0XFx0c2Nhbl9iYWxhbmNlID0gU0NBTl9BTk9OO1xcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFx0fVxcbi1cXG4gXFx0LypcXG4gXFx0ICogRG8gbm90IGFwcGx5IGFueSBwcmVzc3VyZSBiYWxhbmNpbmcgY2xldmVybmVzcyB3aGVuIHRoZVxcbiBcXHQgKiBzeXN0ZW0gaXMgY2xvc2UgdG8gT09NLCBzY2FuIGJvdGggYW5vbiBhbmQgZmlsZSBlcXVhbGx5XFxuQEAgLTI2OTgsNiArMjcwOCwxMCBAQCBzdGF0aWMgaW50IGdldF9zd2FwcGluZXNzKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XFxuIFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcXG4rXFx0aW50IHN3YXBwaW5lc3MgPSBzY19zd2FwcGluZXNzKHNjLCBtZW1jZyk7XFxuK1xcbitcXHRpZiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSlcXG4rXFx0XFx0cmV0dXJuIHN3YXBwaW5lc3M7XFxuIFxcbiBcXHRpZiAoIXNjLVxcdTAwM2VtYXlfc3dhcClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTI3MDYsNyArMjcyMCw3IEBAIHN0YXRpYyBpbnQgZ2V0X3N3YXBwaW5lc3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4gXFx0ICAgIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIFxcdTAwM2MgTUlOX0xSVV9CQVRDSClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRyZXR1cm4gc2Nfc3dhcHBpbmVzcyhzYywgbWVtY2cpO1xcbitcXHRyZXR1cm4gc3dhcHBpbmVzcztcXG4gfVxcbiBcXG4gc3RhdGljIGludCBnZXRfbnJfZ2VucyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxcbkBAIC00OTExLDYgKzQ5MjUsMTkgQEAgc3RhdGljIGxvbmcgZ2V0X25yX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4gXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgc3dhcHBpbmVzcylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIGV2aWN0YWJsZTtcXG4rXFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xcbitcXHQvKlxcbitcXHQgKiBQcm9hY3RpdmUgcmVjbGFpbSBpbml0aWF0ZWQgYnkgdXNlcnNwYWNlIGZvciBhbm9ueW1vdXMgbWVtb3J5IG9ubHkuXFxuK1xcdCAqIFNXQVBQSU5FU1NfQU5PTl9PTkxZIGlzIHNldCBvbmx5IG9uIHRoZSBwcm9hY3RpdmUgcmVjbGFpbSBwYXRoLCBzb1xcbitcXHQgKiB3YXJuIGlmIGl0IHNob3dzIHVwIGVsc2V3aGVyZS4gV2hlbiBhbm9uIGNhbm5vdCBiZSByZWNsYWltZWQgKGUuZy5cXG4rXFx0ICogbm8gc3dhcCksIHJldHVybiAwIGluc3RlYWQgb2YgZmFsbGluZyB0aHJvdWdoIGFuZCBldmljdGluZyBmaWxlXFxuK1xcdCAqIHBhZ2VzLCB3aGljaCB3b3VsZCB2aW9sYXRlIHRoZSBhbm9uLW9ubHkgc2VtYW50aWNzLlxcbitcXHQgKi9cXG4rXFx0aWYgKHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgc2MpKSB7XFxuK1xcdFxcdFdBUk5fT05fT05DRSghc2MtXFx1MDAzZXByb2FjdGl2ZSk7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuIFxcbiBcXHRldmljdGFibGUgPSBscnV2ZWNfZXZpY3RhYmxlX3NpemUobHJ1dmVjLCBzd2FwcGluZXNzKTtcXG4gXFxuQEAgLTc3MzgsNyArNzc2NSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuIC8qXFxuICAqIFRyeSB0byBmcmVlIHVwIHNvbWUgcGFnZXMgZnJvbSB0aGlzIG5vZGUgdGhyb3VnaCByZWNsYWltLlxcbiAgKi9cXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuIFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuIHtcXG5AQCAtNzgzMCw3ICs3ODU3LDcgQEAgaW50IG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxcbiBcXHRpZiAodGVzdF9hbmRfc2V0X2JpdF9sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcXHUwMDI2cGdkYXQtXFx1MDAzZWZsYWdzKSlcXG4gXFx0XFx0cmV0dXJuIE5PREVfUkVDTEFJTV9OT1NDQU47XFxuIFxcbi1cXHRyZXQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgZ2ZwX21hc2ssIG5yX3BhZ2VzLCBcXHUwMDI2c2MpIFxcdTAwM2U9IG5yX3BhZ2VzO1xcbitcXHRyZXQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgbnJfcGFnZXMsIFxcdTAwMjZzYykgXFx1MDAzZT0gbnJfcGFnZXM7XFxuIFxcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFxcdTAwMjZwZ2RhdC1cXHUwMDNlZmxhZ3MpO1xcbiBcXG4gXFx0aWYgKHJldClcXG5AQCAtNzg0Myw3ICs3ODcwLDcgQEAgaW50IG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxcbiBcXG4gI2Vsc2VcXG4gXFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLFxcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbiBcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbiB7XFxuQEAgLTc5NDUsOCArNzk3Miw3IEBAIGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2cGdkYXQtXFx1MDAzZWZsYWdzKSlcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFxuLVxcdFxcdFxcdHJlY2xhaW1lZCA9IF9fbm9kZV9yZWNsYWltKHBnZGF0LCBnZnBfbWFzayxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgYmF0Y2hfc2l6ZSwgXFx1MDAyNnNjKTtcXG4rXFx0XFx0XFx0cmVjbGFpbWVkID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGJhdGNoX3NpemUsIFxcdTAwMjZzYyk7XFxuIFxcdFxcdFxcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFxcdTAwMjZwZ2RhdC1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC04MDEzLDcgKzgwMzksNyBAQCBzdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4gXFx0aW50IHJldCwgbmlkID0gZGV2LVxcdTAwM2VpZDtcXG4gXFxuIFxcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcXG4tXFx0cmV0dXJuIHJldCA/IC1FQUdBSU4gOiBjb3VudDtcXG4rXFx0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xcbiB9XFxuIFxcbiBzdGF0aWMgREVWSUNFX0FUVFJfV08ocmVjbGFpbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA5OjE3OjQ4LjQ0NDQyOTE4N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYwMTM4MjE0NjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJOVU1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICAgIFwicmVjbGFpbV9zdG9yZVwiLFxuICAgIFwibWVtb3J5X3JlY2xhaW1cIixcbiAgICBcImdldF9zY2FuX2NvdW50XCIsXG4gICAgXCJnZXRfc3dhcHBpbmVzc1wiLFxuICAgIFwiZ2V0X25yX3RvX3NjYW5cIixcbiAgICBcIl9fbm9kZV9yZWNsYWltXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIHdoZXJlIGFub255bW91cyBtZW1vcnkgb25seSByZWNsYWltIChzd2FwcGluZXNzPW1heCkgY291bGQgaW5jb3JyZWN0bHkgZmFsbCBiYWNrIHRvIGV2aWN0aW5nIGZpbGUgcGFnZXMgd2hlbiBhbm9ueW1vdXMgcGFnZXMgY2Fubm90IGJlIHJlY2xhaW1lZCAoZS5nLiBubyBzd2FwKS4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS92bXNjYW4uYyBhbmQgbW0vbWVtY29udHJvbC5jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBjZ3JvdXAgbWVtb3J5LnJlY2xhaW0gb3Igc3lzZnMgbm9kZSByZWNsYWltIGF0dHJpYnV0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTBhNDE2NjIwNWQwMWQyMzMyNzU2ZDdmMjA5OGYxYzIwOTVhYTk0MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDA5OjE3OjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YTMuLjIwY2I5M2ZkM2RhODI0IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtMjUwMSw2ICsyNTAxLDIzIEBAIHN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4gXHRlbnVtIHNjYW5fYmFsYW5jZSBzY2FuX2JhbGFuY2U7XG4gXHRlbnVtIGxydV9saXN0IGxydTtcbiBcbitcdC8qXG4rXHQgKiBQcm9hY3RpdmUgcmVjbGFpbSBpbml0aWF0ZWQgYnkgdXNlcnNwYWNlIGZvciBhbm9ueW1vdXMgbWVtb3J5IG9ubHkuXG4rXHQgKiBTV0FQUElORVNTX0FOT05fT05MWSBpcyBzZXQgb25seSBvbiB0aGUgcHJvYWN0aXZlIHJlY2xhaW0gcGF0aCwgc29cbitcdCAqIHdhcm4gaWYgaXQgc2hvd3MgdXAgZWxzZXdoZXJlLiBXaGVuIGFub24gY2Fubm90IGJlIHJlY2xhaW1lZCAoZS5nLlxuK1x0ICogbm8gc3dhcCksIGJhaWwgb3V0IGluc3RlYWQgb2YgZmFsbGluZyBiYWNrIHRvIGV2aWN0aW5nIGZpbGUgcGFnZXMsXG4rXHQgKiB3aGljaCB3b3VsZCB2aW9sYXRlIHRoZSBhbm9uLW9ubHkgc2VtYW50aWNzLlxuK1x0ICovXG4rXHRpZiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSkge1xuK1x0XHRXQVJOX09OX09OQ0UoIXNjLVx1MDAzZXByb2FjdGl2ZSk7XG4rXHRcdGlmICghY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MpKSB7XG4rXHRcdFx0bWVtc2V0KG5yLCAwLCBzaXplb2YoKm5yKSAqIE5SX0xSVV9MSVNUUyk7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXHRcdHNjYW5fYmFsYW5jZSA9IFNDQU5fQU5PTjtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4gXHQvKiBJZiB3ZSBoYXZlIG5vIHN3YXAgc3BhY2UsIGRvIG5vdCBib3RoZXIgc2Nhbm5pbmcgYW5vbiBmb2xpb3MuICovXG4gXHRpZiAoIXNjLVx1MDAzZW1heV9zd2FwIHx8ICFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYykpIHtcbiBcdFx0c2Nhbl9iYWxhbmNlID0gU0NBTl9GSUxFO1xuQEAgLTI1MTksMTMgKzI1MzYsNiBAQCBzdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdC8qIFByb2FjdGl2ZSByZWNsYWltIGluaXRpYXRlZCBieSB1c2Vyc3BhY2UgZm9yIGFub255bW91cyBtZW1vcnkgb25seSAqL1xuLVx0aWYgKHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFkpIHtcbi1cdFx0V0FSTl9PTl9PTkNFKCFzYy1cdTAwM2Vwcm9hY3RpdmUpO1xuLVx0XHRzY2FuX2JhbGFuY2UgPSBTQ0FOX0FOT047XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuIFx0LypcbiBcdCAqIERvIG5vdCBhcHBseSBhbnkgcHJlc3N1cmUgYmFsYW5jaW5nIGNsZXZlcm5lc3Mgd2hlbiB0aGVcbiBcdCAqIHN5c3RlbSBpcyBjbG9zZSB0byBPT00sIHNjYW4gYm90aCBhbm9uIGFuZCBmaWxlIGVxdWFsbHlcbkBAIC0yNjk4LDYgKzI3MDgsMTAgQEAgc3RhdGljIGludCBnZXRfc3dhcHBpbmVzcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuK1x0aW50IHN3YXBwaW5lc3MgPSBzY19zd2FwcGluZXNzKHNjLCBtZW1jZyk7XG4rXG4rXHRpZiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSlcbitcdFx0cmV0dXJuIHN3YXBwaW5lc3M7XG4gXG4gXHRpZiAoIXNjLVx1MDAzZW1heV9zd2FwKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0yNzA2LDcgKzI3MjAsNyBAQCBzdGF0aWMgaW50IGdldF9zd2FwcGluZXNzKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXHQgICAgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhtZW1jZykgXHUwMDNjIE1JTl9MUlVfQkFUQ0gpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cmV0dXJuIHNjX3N3YXBwaW5lc3Moc2MsIG1lbWNnKTtcbitcdHJldHVybiBzd2FwcGluZXNzO1xuIH1cbiBcbiBzdGF0aWMgaW50IGdldF9ucl9nZW5zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpXG5AQCAtNDkxMSw2ICs0OTI1LDE5IEBAIHN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4gXHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgc3dhcHBpbmVzcylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIGV2aWN0YWJsZTtcbitcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbitcdC8qXG4rXHQgKiBQcm9hY3RpdmUgcmVjbGFpbSBpbml0aWF0ZWQgYnkgdXNlcnNwYWNlIGZvciBhbm9ueW1vdXMgbWVtb3J5IG9ubHkuXG4rXHQgKiBTV0FQUElORVNTX0FOT05fT05MWSBpcyBzZXQgb25seSBvbiB0aGUgcHJvYWN0aXZlIHJlY2xhaW0gcGF0aCwgc29cbitcdCAqIHdhcm4gaWYgaXQgc2hvd3MgdXAgZWxzZXdoZXJlLiBXaGVuIGFub24gY2Fubm90IGJlIHJlY2xhaW1lZCAoZS5nLlxuK1x0ICogbm8gc3dhcCksIHJldHVybiAwIGluc3RlYWQgb2YgZmFsbGluZyB0aHJvdWdoIGFuZCBldmljdGluZyBmaWxlXG4rXHQgKiBwYWdlcywgd2hpY2ggd291bGQgdmlvbGF0ZSB0aGUgYW5vbi1vbmx5IHNlbWFudGljcy5cbitcdCAqL1xuK1x0aWYgKHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWNhbl9yZWNsYWltX2Fub25fcGFnZXMobWVtY2csIHBnZGF0LVx1MDAzZW5vZGVfaWQsIHNjKSkge1xuK1x0XHRXQVJOX09OX09OQ0UoIXNjLVx1MDAzZXByb2FjdGl2ZSk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuIFxuIFx0ZXZpY3RhYmxlID0gbHJ1dmVjX2V2aWN0YWJsZV9zaXplKGxydXZlYywgc3dhcHBpbmVzcyk7XG4gXG5AQCAtNzczOCw3ICs3NzY1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlY2FjaGVfcmVjbGFpbWFibGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbiAvKlxuICAqIFRyeSB0byBmcmVlIHVwIHNvbWUgcGFnZXMgZnJvbSB0aGlzIG5vZGUgdGhyb3VnaCByZWNsYWltLlxuICAqL1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4gXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG5AQCAtNzgzMCw3ICs3ODU3LDcgQEAgaW50IG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxuIFx0aWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXHUwMDI2cGdkYXQtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm4gTk9ERV9SRUNMQUlNX05PU0NBTjtcbiBcbi1cdHJldCA9IF9fbm9kZV9yZWNsYWltKHBnZGF0LCBnZnBfbWFzaywgbnJfcGFnZXMsIFx1MDAyNnNjKSBcdTAwM2U9IG5yX3BhZ2VzO1xuK1x0cmV0ID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIG5yX3BhZ2VzLCBcdTAwMjZzYykgXHUwMDNlPSBucl9wYWdlcztcbiBcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKTtcbiBcbiBcdGlmIChyZXQpXG5AQCAtNzg0Myw3ICs3ODcwLDcgQEAgaW50IG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxuIFxuICNlbHNlXG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbiBcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIHtcbkBAIC03OTQ1LDggKzc5NzIsNyBAQCBpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG4gXHRcdFx0XHRcdFx0ICBcdTAwMjZwZ2RhdC1cdTAwM2VmbGFncykpXG4gXHRcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuLVx0XHRcdHJlY2xhaW1lZCA9IF9fbm9kZV9yZWNsYWltKHBnZGF0LCBnZnBfbWFzayxcbi1cdFx0XHRcdFx0XHQgICBiYXRjaF9zaXplLCBcdTAwMjZzYyk7XG4rXHRcdFx0cmVjbGFpbWVkID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGJhdGNoX3NpemUsIFx1MDAyNnNjKTtcbiBcdFx0XHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcdTAwMjZwZ2RhdC1cdTAwM2VmbGFncyk7XG4gXHRcdH1cbiBcbkBAIC04MDEzLDcgKzgwMzksNyBAQCBzdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdGludCByZXQsIG5pZCA9IGRldi1cdTAwM2VpZDtcbiBcbiBcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcbi1cdHJldHVybiByZXQgPyAtRUFHQUlOIDogY291bnQ7XG4rXHRyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7XG4gfVxuIFxuIHN0YXRpYyBERVZJQ0VfQVRUUl9XTyhyZWNsYWltKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA5OjE3OjQ4LjQ0NDQzMTMxN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MjIzMzAzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWTVNjYW4gUGF0Y2g6IEEgRGVlcCBEaXZlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG1tL3Ztc2Nhbi5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBoZWFydCBvZiBtZW1vcnkgbWFuYWdlbWVudCBpbiB0aGUga2VybmVsIOKAkyBzcGVjaWZpY2FsbHkgdGhlIHZpcnR1YWwgbWVtb3J5IHNjYW5uZXIuIFRoaXMgbG9va3MgdG8gYmUgYWRkcmVzc2luZyBhIG51YW5jZWQgaXNzdWUgYXJvdW5kIHByb2FjdGl2ZSByZWNsYWltIGJlaGF2aW9yIHdpdGggYFNXQVBQSU5FU1NfQU5PTl9PTkxZYC4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgaXQncyBmaXhpbmcgYSBzY2VuYXJpbyB3aGVyZSwgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9ucyAobGlrZSBhIGxhY2sgb2YgYXZhaWxhYmxlIHN3YXAgc3BhY2UpLCB0aGUgc3lzdGVtIG1pZ2h0IGluYXBwcm9wcmlhdGVseSBzdGFydCBldmljdGluZyBmaWxlIHBhZ2VzIHdoZW4gaXQncyBzdXBwb3NlZCB0byAqb25seSogZm9jdXMgb24gYW5vbnltb3VzIChhbm9uKSBwYWdlcy4gVGhpcyBpcyBzb21ldGhpbmcgSSd2ZSBzZWVuIGJlZm9yZTsgaXQncyBhIGNsYXNzaWMgY2FzZSBvZiBzdWJ0bGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBkaWZmZXJlbnQgcmVjbGFpbSBzdHJhdGVnaWVzLlxuXG5UaGUgcGF0Y2ggdG91Y2hlcyBhIGNsdXN0ZXIgb2YgZnVuY3Rpb25zOiBgZ2V0X3NjYW5fY291bnRgLCBgZ2V0X3N3YXBwaW5lc3NgLCBgZ2V0X25yX3RvX3NjYW5gLCBgX19ub2RlX3JlY2xhaW1gLCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIGFuZCBgcmVjbGFpbV9zdG9yZWAuIFRoZSBtb2RpZmljYXRpb25zIHRvIGBfX25vZGVfcmVjbGFpbWAgbG9vayBzdHJhaWdodGZvcndhcmQ7IHJlbW92aW5nIGFuIHVudXNlZCBgZ2ZwX21hc2tgIGlzIGdlbmVyYWxseSBhIHNpZ24gb2YgZ29vZCBoeWdpZW5lIGFuZCByZWR1Y3Rpb24gb2YgY29kZSBjbHV0dGVyLiBOb3RoaW5nIGltbWVkaWF0ZWx5IGFsYXJtaW5nIHRoZXJlLlxuXG5UaGUgdHdlYWsgdG8gYHJlY2xhaW1fc3RvcmVgIHRvIHJldHVybiBgcmV0YCBpbnN0ZWFkIG9mIGAtRUFHQUlOYCB3aGVuIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBmYWlscyB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIFRoaXMgc3VnZ2VzdHMgYSBjaGFuZ2UgaW4gZXJyb3IgaGFuZGxpbmcgb3IgYSBzaGlmdCBpbiBob3cgZmFpbHVyZSBzdGF0ZXMgYXJlIGNvbW11bmljYXRlZC4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMsIHBhcnRpY3VsYXJseSBob3cgdGhlIGNhbGxlciB3aWxsIGludGVycHJldCB0aGUgY2hhbmdlIGluIHJldHVybiB2YWx1ZS5cblxuTm93LCBsZXQncyB0cmFjZSB0aGUgY2FsbHMuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHdoZXJlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBhbmQgYHJlY2xhaW1fc3RvcmVgIGFyZSBhY3R1YWxseSBpbnZva2VkLiBJIHJlbWVtYmVyIHRoYXQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGNhbGxlZCBmcm9tIGJvdGggYHJlY2xhaW1fc3RvcmVgIGFuZCBgbWVtb3J5X3JlY2xhaW1gIC0tIGdvb2QgdG8ga25vdy4gVGhlIGZhY3QgdGhhdCBgcmVjbGFpbV9zdG9yZWAgaXMgYSBzeXNmcyBhdHRyaWJ1dGUgb24gYSBub2RlIGRldmljZSBpcyBpbXBvcnRhbnQ7IHRoaXMgdGVsbHMgbWUgaXQncyBhIHVzZXItc3BhY2UgaW50ZXJmYWNlIGZvciB0cmlnZ2VyaW5nIHJlY2xhaW0gb24gYSBzcGVjaWZpYyBOVU1BIG5vZGUuIEFuZCBgbWVtb3J5X3JlY2xhaW1gIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgaXQncyBhIGNncm91cCBhdHRyaWJ1dGUuIEJvdGggZ2l2ZSBpbXBvcnRhbnQgaGludHMuIE5vdyBJJ2xsIHNjYW4gdGhlIHNvdXJjZSBjb2RlIGRpcmVjdGx5IHRvIGNvbmZpcm0gdGhpcyB1bmRlcnN0YW5kaW5nIGFuZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBlbGVtZW50cyBmaXQgaW50byB0aGUgYnJvYWRlciBrZXJuZWwgcmVjbGFpbSBwcm9jZXNzLiBJJ2xsIGZvY3VzIG9uIGhvdyB0aGUgY29udHJvbCBmbG93IGNoYW5nZXMgd2l0aCB0aGlzIGZpeC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUzNSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA5OjE3OjU1LjI2Njc2NTA4NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTkyMjQ4NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaW50ZXJuYWwuaD02MjQ9ZXh0ZXJuIHZvaWQgcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBlbnVtIHZtc2Nhbl90aHJvdHRsZV9zdGF0ZSByZWFzb24pO1xcbm1tL2ludGVybmFsLmg6NjI1OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG5tbS9pbnRlcm5hbC5oLTYyNi1cXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ5ODk9c3RhdGljIHNzaXplX3QgbWVtb3J5X3JlY2xhaW0oc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDk5NC1cXG5tbS9tZW1jb250cm9sLmM6NDk5NTpcXHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGJ1ZiwgbWVtY2csIE5VTEwpO1xcbm1tL21lbWNvbnRyb2wuYy00OTk2LVxcdGlmIChyZXQpXFxuLS1cXG5tbS92bXNjYW4uYz03ODg3PXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc4OTItXFxubW0vdm1zY2FuLmM6Nzg5MzppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxubW0vdm1zY2FuLmMtNzg5NC1cXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYz04MDM1PXN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxubW0vdm1zY2FuLmMtODA0MC1cXG5tbS92bXNjYW4uYzo4MDQxOlxcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcXG5tbS92bXNjYW4uYy04MDQyLVxcdHJldHVybiByZXQgPyByZXQgOiBjb3VudDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDk6MTc6NTguMjU5MDE4ODM4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAxMjA1MjYyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgbmV3IGZ1bmN0aW9uLCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIGFuZCBpdCdzIGxvb2tpbmcgbGlrZSBpdCBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgY2dyb3VwJ3MgYG1lbW9yeS5yZWNsYWltYCBpbnRlcmZhY2UgYW5kIHRoZSBgcmVjbGFpbWAgc3lzZnMgbm9kZS4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgY291bGQgYmUgYSBwb2ludCBvZiBpbnRlcmVzdCBmb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IHNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB3aXRoaW4gYHZtc2NhbmAuIEknbSBhbHJlYWR5IHRoaW5raW5nIHRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgYWJzb2x1dGVseSB3b3J0aCBhIGRlZGljYXRlZCBmdXp6aW5nIGNhbXBhaWduLlxuXG5UbyBkaWcgZGVlcGVyLCB0aGUga2V5IHN5bWJvbHMgdGhhdCBpbW1lZGlhdGVseSBncmFiIG15IGF0dGVudGlvbiBhcmUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGl0c2VsZiwgb2YgY291cnNlLCBhbG9uZyB3aXRoIGByZWNsYWltX3N0b3JlYCwgd2hpY2ggbGlrZWx5IGhhbmRsZXMgdGhlIGludGVyZmFjZSBpbnRvIHRoYXQgZnVuY3Rpb24sIGFuZCBgbWVtb3J5X3JlY2xhaW1gIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGludGVycmVsYXRlLiBGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzY2FuIGxpbWl0cyBhcmUgaW1wb3NlZCBhbmQgY29uZmlndXJlZCwgc28gYGdldF9zY2FuX2NvdW50YCwgYGdldF9zd2FwcGluZXNzYCwgYW5kIGBnZXRfbnJfdG9fc2NhbmAgd2lsbCBuZWVkIHNjcnV0aW55IHRvIHVuZGVyc3RhbmQgdGhlIGxpbWl0cyBpbXBvc2VkLlxuXG5JIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayBpZiBgQ09ORklHX01FTUNHYCBpcyByZXF1aXJlZCBmb3IgYG1lbW9yeV9yZWNsYWltYCB0byBmdW5jdGlvbiBwcm9wZXJseS4gVGhhdCBkZXBlbmRlbmN5IGNvdWxkIGRpY3RhdGUgaG93IGJyb2FkbHkgYXBwbGljYWJsZSB0aGlzIHZ1bG5lcmFiaWxpdHkgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MjAsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDk6MTg6MDMuMjcxMDc1NzQxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTYxNzk4MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtb3J5X3JlY2xhaW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaD0xMzU9S1ZNX1g4Nl9PUF9PUFRJT05BTCh2bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20pXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxMzY6S1ZNX1g4Nl9PUF9PUFRJT05BTChndWVzdF9tZW1vcnlfcmVjbGFpbWVkKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgtMTM3LUtWTV9YODZfT1AoZ2V0X2ZlYXR1cmVfbXNyKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0xNzg1PXN0cnVjdCBrdm1feDg2X29wcyB7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTE5ODYtXFx0aW50ICgqdm1fbW92ZV9lbmNfY29udGV4dF9mcm9tKShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBzb3VyY2VfZmQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MTk4NzpcXHR2b2lkICgqZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCkoc3RydWN0IGt2bSAqa3ZtKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTE5ODgtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMyNTk9c3RhdGljIHZvaWQgc2V2X2ZsdXNoX2VuY3J5cHRlZF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCAqdmEpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyOTQtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjk1OnZvaWQgc2V2X2d1ZXN0X21lbW9yeV9yZWNsYWltZWQoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzI5Ni17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTUzMzA9c3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0NTEtXFx0Lm1lbV9lbmNfdW5yZWdpc3Rlcl9yZWdpb24gPSBzZXZfbWVtX2VuY191bnJlZ2lzdGVyX3JlZ2lvbixcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU0NTI6XFx0Lmd1ZXN0X21lbW9yeV9yZWNsYWltZWQgPSBzZXZfZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0NTMtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTk4Nz1pbnQgc2V2X3ZtX21vdmVfZW5jX2NvbnRleHRfZnJvbShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBzb3VyY2VfZmQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6OTg4OnZvaWQgc2V2X2d1ZXN0X21lbW9yeV9yZWNsYWltZWQoc3RydWN0IGt2bSAqa3ZtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTk4OS1pbnQgc2V2X2hhbmRsZV92bWdleGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTEwNzM9c3RhdGljIHZvaWQgdmNwdV9sb2FkX2VvaV9leGl0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTA5Mi1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTEwOTM6dm9pZCBrdm1fYXJjaF9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTEwOTQte1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMTA5NTpcXHRrdm1feDg2X2NhbGwoZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCkoa3ZtKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTEwOTYtfVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jPTgwMD1zdGF0aWMgaW50IGZmYV9tZW1vcnlfb3BzKHUzMiBmdW5jX2lkLCBzdHJ1Y3QgZmZhX21lbV9vcHNfYXJncyAqYXJncylcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYy04MjQtXFxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jOjgyNTpzdGF0aWMgaW50IGZmYV9tZW1vcnlfcmVjbGFpbSh1NjQgZ19oYW5kbGUsIHUzMiBmbGFncylcXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmMtODI2LXtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYz0xNjIzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmZhX21lbV9vcHMgZmZhX2Rydl9tZW1fb3BzID0ge1xcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYzoxNjI0OlxcdC5tZW1vcnlfcmVjbGFpbSA9IGZmYV9tZW1vcnlfcmVjbGFpbSxcXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmMtMTYyNS1cXHQubWVtb3J5X3NoYXJlID0gZmZhX21lbW9yeV9zaGFyZSxcXG4tLVxcbmRyaXZlcnMvdGVlL29wdGVlL2ZmYV9hYmkuYz0yNzA9c3RhdGljIGludCBvcHRlZV9mZmFfc2htX3JlZ2lzdGVyKHN0cnVjdCB0ZWVfY29udGV4dCAqY3R4LCBzdHJ1Y3QgdGVlX3NobSAqc2htLFxcbi0tXFxuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jLTMwNC1cXHRpZiAocmMpIHtcXG5kcml2ZXJzL3RlZS9vcHRlZS9mZmFfYWJpLmM6MzA1OlxcdFxcdG1lbV9vcHMtXFx1MDAzZW1lbW9yeV9yZWNsYWltKGFyZ3MuZ19oYW5kbGUsIDApO1xcbmRyaXZlcnMvdGVlL29wdGVlL2ZmYV9hYmkuYy0zMDYtXFx0XFx0cmV0dXJuIHJjO1xcbi0tXFxuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jPTMxND1zdGF0aWMgaW50IG9wdGVlX2ZmYV9zaG1fdW5yZWdpc3RlcihzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCxcXG4tLVxcbmRyaXZlcnMvdGVlL29wdGVlL2ZmYV9hYmkuYy0zMzUtXFxuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jOjMzNjpcXHRyYyA9IG1lbV9vcHMtXFx1MDAzZW1lbW9yeV9yZWNsYWltKGdsb2JhbF9oYW5kbGUsIDApO1xcbmRyaXZlcnMvdGVlL29wdGVlL2ZmYV9hYmkuYy0zMzctXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jPTM0Mz1zdGF0aWMgaW50IG9wdGVlX2ZmYV9zaG1fdW5yZWdpc3Rlcl9zdXBwKHN0cnVjdCB0ZWVfY29udGV4dCAqY3R4LFxcbi0tXFxuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jLTM1OC1cXHRtZW1fb3BzID0gb3B0ZWUtXFx1MDAzZWZmYS5mZmFfZGV2LVxcdTAwM2VvcHMtXFx1MDAzZW1lbV9vcHM7XFxuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jOjM1OTpcXHRyYyA9IG1lbV9vcHMtXFx1MDAzZW1lbW9yeV9yZWNsYWltKGdsb2JhbF9oYW5kbGUsIDApO1xcbmRyaXZlcnMvdGVlL29wdGVlL2ZmYV9hYmkuYy0zNjAtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jPTY4Mj1zdGF0aWMgaW50IG9wdGVlX2ZmYV9sZW5kX3Byb3RtZW0oc3RydWN0IG9wdGVlICpvcHRlZSwgc3RydWN0IHRlZV9zaG0gKnByb3RtZW0sXFxuLS1cXG5kcml2ZXJzL3RlZS9vcHRlZS9mZmFfYWJpLmMtNzM3LWVycl9yZWNsYWltOlxcbmRyaXZlcnMvdGVlL29wdGVlL2ZmYV9hYmkuYzo3Mzg6XFx0bWVtX29wcy1cXHUwMDNlbWVtb3J5X3JlY2xhaW0oYXJncy5nX2hhbmRsZSwgMCk7XFxuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jLTczOS1cXHRyZXR1cm4gcmM7XFxuLS1cXG5kcml2ZXJzL3RlZS9vcHRlZS9mZmFfYWJpLmM9NzQyPXN0YXRpYyBpbnQgb3B0ZWVfZmZhX3JlY2xhaW1fcHJvdG1lbShzdHJ1Y3Qgb3B0ZWUgKm9wdGVlLFxcbi0tXFxuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jLTc2Mi1cXG5kcml2ZXJzL3RlZS9vcHRlZS9mZmFfYWJpLmM6NzYzOlxcdHJjID0gbWVtX29wcy1cXHUwMDNlbWVtb3J5X3JlY2xhaW0oZ2xvYmFsX2hhbmRsZSwgMCk7XFxuZHJpdmVycy90ZWUvb3B0ZWUvZmZhX2FiaS5jLTc2NC1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL3RlZS90c3RlZS9jb3JlLmM9MjQyPXN0YXRpYyBpbnQgdHN0ZWVfc2htX3JlZ2lzdGVyKHN0cnVjdCB0ZWVfY29udGV4dCAqY3R4LCBzdHJ1Y3QgdGVlX3NobSAqc2htLFxcbi0tXFxuZHJpdmVycy90ZWUvdHN0ZWUvY29yZS5jLTI4OS1cXHRpZiAocmMpIHtcXG5kcml2ZXJzL3RlZS90c3RlZS9jb3JlLmM6MjkwOlxcdFxcdCh2b2lkKWZmYV9kZXYtXFx1MDAzZW9wcy1cXHUwMDNlbWVtX29wcy1cXHUwMDNlbWVtb3J5X3JlY2xhaW0oc2htLVxcdTAwM2VzZWNfd29ybGRfaWQsXFxuZHJpdmVycy90ZWUvdHN0ZWUvY29yZS5jLTI5MS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgMCk7XFxuLS1cXG5kcml2ZXJzL3RlZS90c3RlZS9jb3JlLmMtMjk5LVxcdFxcdFxcdGZmYV9hcmdzW1RTX1JQQ19SRVRSSUVWRV9NRU1fUlBDX1NUQVRVU10pO1xcbmRyaXZlcnMvdGVlL3RzdGVlL2NvcmUuYzozMDA6XFx0XFx0ZmZhX2Rldi1cXHUwMDNlb3BzLVxcdTAwM2VtZW1fb3BzLVxcdTAwM2VtZW1vcnlfcmVjbGFpbShzaG0tXFx1MDAzZXNlY193b3JsZF9pZCwgMCk7XFxuZHJpdmVycy90ZWUvdHN0ZWUvY29yZS5jLTMwMS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvdGVlL3RzdGVlL2NvcmUuYz0zMDc9c3RhdGljIGludCB0c3RlZV9zaG1fdW5yZWdpc3RlcihzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwgc3RydWN0IHRlZV9zaG0gKnNobSlcXG4tLVxcbmRyaXZlcnMvdGVlL3RzdGVlL2NvcmUuYy0zMzQtXFxuZHJpdmVycy90ZWUvdHN0ZWUvY29yZS5jOjMzNTpcXHRyYyA9IGZmYV9kZXYtXFx1MDAzZW9wcy1cXHUwMDNlbWVtX29wcy1cXHUwMDNlbWVtb3J5X3JlY2xhaW0oc2htLVxcdTAwM2VzZWNfd29ybGRfaWQsIDApO1xcbmRyaXZlcnMvdGVlL3RzdGVlL2NvcmUuYy0zMzYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2FybV9mZmEuaD00ODU9c3RydWN0IGZmYV9tZW1fb3BzIHtcXG5pbmNsdWRlL2xpbnV4L2FybV9mZmEuaDo0ODY6XFx0aW50ICgqbWVtb3J5X3JlY2xhaW0pKHU2NCBnX2hhbmRsZSwgdTMyIGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L2FybV9mZmEuaC00ODctXFx0aW50ICgqbWVtb3J5X3NoYXJlKShzdHJ1Y3QgZmZhX21lbV9vcHNfYXJncyAqYXJncyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjQ1ND1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2FyY2hfbm9fcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjQ1OS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjQ2MDp2b2lkIGt2bV9hcmNoX2d1ZXN0X21lbW9yeV9yZWNsYWltZWQoc3RydWN0IGt2bSAqa3ZtKTtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjQ2MS1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00OTY3PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9vb21fZ3JvdXBfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ5ODgtXFxubW0vbWVtY29udHJvbC5jOjQ5ODk6c3RhdGljIHNzaXplX3QgbWVtb3J5X3JlY2xhaW0oc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXFxubW0vbWVtY29udHJvbC5jLTQ5OTAtXFx0XFx0XFx0ICAgICAgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MDAyPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIG1lbW9yeV9maWxlc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTUwNzAtXFx0XFx0LmZsYWdzID0gQ0ZUWVBFX05TX0RFTEVHQVRBQkxFLFxcbm1tL21lbWNvbnRyb2wuYzo1MDcxOlxcdFxcdC53cml0ZSA9IG1lbW9yeV9yZWNsYWltLFxcbm1tL21lbWNvbnRyb2wuYy01MDcyLVxcdH0sXFxuLS1cXG5zb3VuZC9zb2MvaW50ZWwvYXZzL21lc3NhZ2VzLmM9MzkxPWludCBhdnNfaXBjX2dldF9md19jb25maWcoc3RydWN0IGF2c19kZXYgKmFkZXYsIHN0cnVjdCBhdnNfZndfY2ZnICpjZmcpXFxuLS1cXG5zb3VuZC9zb2MvaW50ZWwvYXZzL21lc3NhZ2VzLmMtNDE4LVxcdFxcdGNhc2UgQVZTX0ZXX0NGR19NRU1PUllfUkVDTEFJTUVEOlxcbnNvdW5kL3NvYy9pbnRlbC9hdnMvbWVzc2FnZXMuYzo0MTk6XFx0XFx0XFx0Y2ZnLVxcdTAwM2VtZW1vcnlfcmVjbGFpbWVkID0gKnRsdi1cXHUwMDNldmFsdWU7XFxuc291bmQvc29jL2ludGVsL2F2cy9tZXNzYWdlcy5jLTQyMC1cXHRcXHRcXHRicmVhaztcXG4tLVxcbnNvdW5kL3NvYy9pbnRlbC9hdnMvbWVzc2FnZXMuaD00NjA9c3RydWN0IGF2c19md19jZmcge1xcbnNvdW5kL3NvYy9pbnRlbC9hdnMvbWVzc2FnZXMuaC00NjEtXFx0c3RydWN0IGF2c19md192ZXJzaW9uIGZ3X3ZlcnNpb247XFxuc291bmQvc29jL2ludGVsL2F2cy9tZXNzYWdlcy5oOjQ2MjpcXHR1MzIgbWVtb3J5X3JlY2xhaW1lZDtcXG5zb3VuZC9zb2MvaW50ZWwvYXZzL21lc3NhZ2VzLmgtNDYzLVxcdHUzMiBzbG93X2Nsb2NrX2ZyZXFfaHo7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTE1NT1zdGF0aWMgREVGSU5FX1BFUl9DUFUoY3B1bWFza192YXJfdCwgY3B1X2tpY2tfbWFzayk7XFxudmlydC9rdm0va3ZtX21haW4uYy0xNTYtXFxudmlydC9rdm0va3ZtX21haW4uYzoxNTc6X193ZWFrIHZvaWQga3ZtX2FyY2hfZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZChzdHJ1Y3Qga3ZtICprdm0pXFxudmlydC9rdm0va3ZtX21haW4uYy0xNTgte1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0zNDE9c3RhdGljIHZvaWQga3ZtX2ZsdXNoX3NoYWRvd19hbGwoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0zNDMtXFx0a3ZtX2FyY2hfZmx1c2hfc2hhZG93X2FsbChrdm0pO1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzQ0OlxcdGt2bV9hcmNoX2d1ZXN0X21lbW9yeV9yZWNsYWltZWQoa3ZtKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTM0NS19XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTcyMT1zdGF0aWMgaW50IGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW11X25vdGlmaWVyICptbixcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNzY1LVxcdGlmIChrdm1faGFuZGxlX2h2YV9yYW5nZShrdm0sIFxcdTAwMjZodmFfcmFuZ2UpLmZvdW5kX21lbXNsb3QpXFxudmlydC9rdm0va3ZtX21haW4uYzo3NjY6XFx0XFx0a3ZtX2FyY2hfZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZChrdm0pO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNzY3LVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0xNzk4PXN0YXRpYyB2b2lkIGt2bV9pbnZhbGlkYXRlX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0xODI0LVxcdGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KGt2bSwgb2xkKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjE4MjU6XFx0a3ZtX2FyY2hfZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZChrdm0pO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTgyNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDk6MTg6MDUuODI3MjY3MTY2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0ODg4OTUxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTWVtb3J5IFJlY2xhaW0gYW5kIENvbnRyb2wgR3JvdXBzOiBBIFF1aWNrIENoZWNrKipcblxuQWxyaWdodCwgKm1lbW9yeV9yZWNsYWltKi4gVGhhdCdzIGEgY29yZSBmdW5jdGlvbiwgdXN1YWxseSB0dWNrZWQgYXdheSBpbiB0aGUgaGVhcnQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCdzIGRlZmluZWQgaW4gYG1tL21lbWNvbnRyb2wuY2AuIE5vdywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzOiB3aGF0J3MgdGhlIGNvbm5lY3Rpb24gdG8gY29udHJvbCBncm91cHMgKGNncm91cHMpPyBgbWVtb3J5X3JlY2xhaW1gIGlzIGNyaXRpY2FsIGZvciBtYW5hZ2luZyBtZW1vcnkgcHJlc3N1cmVzIGFjcm9zcyB0aGUgc3lzdGVtLCBhbmQgY2dyb3Vwcywgb2YgY291cnNlLCBwcm92aWRlIGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgcmVzb3VyY2UgYWxsb2NhdGlvbiwgaW5jbHVkaW5nIG1lbW9yeS4gU28sIGlzIGBDT05GSUdfTUVNQ0dgIGRpcmVjdGx5IGludm9sdmVkIGhlcmU/IEknbSBiZXR0aW5nIHRoZXJlJ3MgYSBkZXBlbmRlbmN5LCBnaXZlbiB0aGUgZmlsZSBsb2NhdGlvbiwgYnV0IGxldCdzIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NzAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwOToxODowOS4yNzYxNjAwNTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyNzg5NTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbW9yeV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NDk2Nz1zdGF0aWMgc3NpemVfdCBtZW1vcnlfb29tX2dyb3VwX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00OTg4LVxcbm1tL21lbWNvbnRyb2wuYzo0OTg5OnN0YXRpYyBzc2l6ZV90IG1lbW9yeV9yZWNsYWltKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxcbm1tL21lbWNvbnRyb2wuYy00OTkwLVxcdFxcdFxcdCAgICAgIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTAwMj1zdGF0aWMgc3RydWN0IGNmdHlwZSBtZW1vcnlfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MDcwLVxcdFxcdC5mbGFncyA9IENGVFlQRV9OU19ERUxFR0FUQUJMRSxcXG5tbS9tZW1jb250cm9sLmM6NTA3MTpcXHRcXHQud3JpdGUgPSBtZW1vcnlfcmVjbGFpbSxcXG5tbS9tZW1jb250cm9sLmMtNTA3Mi1cXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwOToxODowOS4zOTg5NTM5MzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzkzMjgzNjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBtbS9tZW1jb250cm9sLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIHRoZSBgbW0vbWVtY29udHJvbC5jYCBmaWxlIGlzIGJlaW5nIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHkgd2l0aGluIHRoaXMgcGFydGljdWxhciBrZXJuZWwgYnVpbGQuIEkga25vdyB0aGUgZ2VuZXJhbCBsb2NhdGlvbiwgc28gbm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYSBjb25maWd1cmF0aW9uIGZsYWcgb3IgYSBzcGVjaWZpYyBgaWZkZWZgIGJsb2NrIHRoYXQgY29udHJvbHMgaXRzIGluY2x1c2lvbi4gSSdsbCBuZWVkIHRvIHJhcGlkbHkgZXhhbWluZSB0aGUgcmVsZXZhbnQgYnVpbGQgY29uZmlndXJhdGlvbiBmaWxlcyBvciBwb3RlbnRpYWxseSB0aGUgS2J1aWxkIHN5c3RlbSB0byBhc3Nlc3MgaXRzIGRlcGVuZGVuY3kuIEVzc2VudGlhbGx5LCBpcyB0aGlzIG1vZHVsZSBhbHdheXMgY29tcGlsZWQsIG9yIGRvZXMgaXQgZGVwZW5kIG9uIGNlcnRhaW4ga2VybmVsIGZlYXR1cmVzIGJlaW5nIGVuYWJsZWQ/IE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHRoZSBjb21waWxlLXRpbWUgYmVoYXZpb3VyIHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MTEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwOToxODoxMy4xOTIyNDAzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NDgwNjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNvbnRyb2wub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXFxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXFxubW0vTWFrZWZpbGUtMjktS0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wtdjEubyA6PSBuXFxuLS1cXG5tbS9NYWtlZmlsZT0xMDQ9b2JqLSQoQ09ORklHX01FTUNHX1YxKSArPSBtZW1jb250cm9sLXYxLm9cXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSArPSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXFxubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm1tL01ha2VmaWxlOjEwNzpvYmotJChDT05GSUdfTUVNQ0cpICs9IGJwZl9tZW1jb250cm9sLm9cXG5tbS9NYWtlZmlsZS0xMDgtZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDk6MTg6MTMuMjk5NzI3Njg3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwOTQyMDA5MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50OlxuXG4qKk1lbW9yeSBDb250cm9sIEdyb3VwcyBhbmQgUmVjbGFpbSoqXG5cblJpZ2h0LCBzbywgZmlyc3QgYW5kIGZvcmVtb3N0LCBJJ20gYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgYENPTkZJR19NRU1DR2AgbmVlZHMgdG8gYmUgZW5hYmxlZC4gTm8gcXVlc3Rpb24gYWJvdXQgaXQuIEl0J3MgdGhlIGZvdW5kYXRpb24gd2UncmUgd29ya2luZyBmcm9tLCBhbmQgd2l0aG91dCBpdCwgd2UncmUgbm90IGV2ZW4gaGF2aW5nIHRoaXMgY29udmVyc2F0aW9uLlxuXG5CdXQgdGhhdCBicmluZ3MgbWUgdG8gdGhlIGNvcmUgY29uY2Vybi4gSSdtIHdvbmRlcmluZyBhYm91dCBgcmVjbGFpbV9zdG9yZWAgaW4gYG1tL3Ztc2Nhbi5jYC4gSG93J3MgdGhhdCBpbnRlcmFjdGluZyB3aXRoIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCBzZXR1cD8gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgbWVtb3J5IHJlY2xhaW0gbG9naWMgaXMgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIGFuZCByZXNwZWN0aW5nIHRoZSBsaW1pdHMgZW5mb3JjZWQgYnkgdGhlIG1lbW9yeSBjZ3JvdXBzLiBJcyBpdCBwcm9wZXJseSBhc3NvY2lhdGluZyByZWNsYWltZWQgcGFnZXMgd2l0aCB0aGUgY29ycmVjdCBjZ3JvdXA/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGxlYWtzIG9yIGJ5cGFzc2VzPyBJdCdzIHRoYXQgc3VidGxlIGludGVyc2VjdGlvbiBvZiB0aGUgcmVjbGFpbSBzdHJhdGVnaWVzIGFuZCB0aGUgY2dyb3VwIGFjY291bnRpbmcgdGhhdCBhbHdheXMga2VlcHMgbWUgb24gbXkgdG9lcy4gSXTigJlzIHRoZSBraW5kIG9mIGFyZWEgd2hlcmUgc2VlbWluZ2x5IG1pbm9yIG92ZXJzaWdodHMgY2FuIGxlYWQgdG8gcHJldHR5IHNpZ25pZmljYW50IHByb2JsZW1zIGRvd24gdGhlIGxpbmUsIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBpbmFkdmVydGVudGx5IHVuZGVybWluaW5nIHRoZSB3aG9sZSBwb2ludCBvZiBgbWVtY2dgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mjk3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDk6MTg6MTkuMzkzOTMxNTQ4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTA4MjY3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWNsYWltX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTgwMzI9RVhQT1JUX1NZTUJPTF9HUEwoY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3MpO1xcbi0tXFxubW0vdm1zY2FuLmMtODAzNC0jaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX05VTUEpXFxubW0vdm1zY2FuLmM6ODAzNTpzdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5tbS92bXNjYW4uYy04MDM2LVxcdFxcdFxcdCAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA5OjE4OjE5LjQ4NTAxODM3NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzU2NjcyNjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gVmVyaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBhbmQgaXQncyBjbGVhcjogdGhpcyBmdW5jdGlvbmFsaXR5IGhpbmdlcyBvbiBoYXZpbmcgYENPTkZJR19TWVNGU2AgYW5kIGBDT05GSUdfTlVNQWAgZW5hYmxlZC4gVGhhdCdzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpb24gYW5kIHBvdGVudGlhbCBkZXBsb3ltZW50LiBJJ2xsIG1ha2UgYSBtZW50YWwgbm90ZSB0aGF0IGVuYWJsaW5nIGBDT05GSUdfTUVNQ0dgIGFsb25nIHdpdGggYENPTkZJR19OVU1BYCB3b3VsZCBiZSBhIGdvb2Qgc3RyYXRlZ3kgdG8gcHVyc3VlLiBUaGV5IHNlZW0gbGlrZSBsb2dpY2FsIGNvbXBhbmlvbnMuXG5cbk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSdsbCBqdW1wIGludG8gYG1tL3Ztc2Nhbi5jYCBhbmQgc3BlY2lmaWNhbGx5IGNoZWNrIHRoZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZnVuY3Rpb24uIEknbGwgbmVlZCB0byBzZWUgcHJlY2lzZWx5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY29uZmlndXJhdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MjMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwOToxODoyMy44NDE2OTU1NDhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDgwODI5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTc4ODc9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNzg5Mi1cXG5tbS92bXNjYW4uYzo3ODkzOmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG5tbS92bXNjYW4uYy03ODk0LVxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTgwMzU9c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5tbS92bXNjYW4uYy04MDQwLVxcbm1tL3Ztc2Nhbi5jOjgwNDE6XFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xcbm1tL3Ztc2Nhbi5jLTgwNDItXFx0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwOToxODoyMy45ODY1MDg0NjRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4MTc1NDcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkNvbmRpdGlvbmFsIENvbXBpbGF0aW9uIENvbnVuZHJ1bXMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGZ1bmN0aW9uLCBhbmQgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzOiAqSXMgaXQgY29tcGlsZWQgY29uZGl0aW9uYWxseT8qIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgc29tZXRoaW5nIHRoYXTigJlzIGFsd2F5cyBwcmVzZW50IGluIHRoZSBidWlsZCwgb3IgaWYgaXRzIGluY2x1c2lvbiBpcyBkZXBlbmRlbnQgb24gc29tZSBwcmVwcm9jZXNzb3IgZmxhZywgY29uZmlndXJhdGlvbiBzZXR0aW5nLCBvciBldmVuIGEgc3BlY2lmaWMgdGFyZ2V0IHBsYXRmb3JtLlxuXG5UaGUgaW1wbGljYXRpb25zIGFyZSBodWdlLCB5b3Uga25vdy4gSWYgaXQgKmlzKiBjb25kaXRpb25hbCwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbmRpdGlvbnMuIFRoYXQgd2lsbCBpbmZvcm0gd2hldGhlciBJIG5lZWQgdG8gd29ycnkgYWJvdXQgdGhlIHNpZGUgZWZmZWN0cyB3aGVuIGxvb2tpbmcgYXQgdGhlIHdob2xlIHN5c3RlbSBiZWhhdmlvci4gQSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGZ1bmN0aW9uIGltcGFjdHMgdGhlIHJhbmdlIG9mIGV4ZWN1dGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBjb25kaXRpb25hbCBjb21waWxhdGlvbiByZXNpZGVzLCBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQgY29tcGlsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTcyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDk6MTg6MjguMjY4MjY2MjY4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDI3ODc0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2ludGVybmFsLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaW50ZXJuYWwuaD02MjQ9ZXh0ZXJuIHZvaWQgcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBlbnVtIHZtc2Nhbl90aHJvdHRsZV9zdGF0ZSByZWFzb24pO1xcbm1tL2ludGVybmFsLmg6NjI1OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG5tbS9pbnRlcm5hbC5oLTYyNi1cXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwOToxODoyOC4zNDg1NTA3NDZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM5ODU4MjAxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcGVyc3BlY3RpdmUgb2Ygc29tZW9uZSBkZWVwbHkgZmFtaWxpYXIgd2l0aCBrZXJuZWwgZGV2ZWxvcG1lbnQgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBmb2N1c2luZyBvbiB0aGUgc3BlY2lmaWMgdGhvdWdodCBwcm9jZXNzIHByZXNlbnRlZDpcblxuKipDaGVja2luZyBmb3IgUHJvYWN0aXZlIFJlY2xhaW0gR3VhcmRzKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGhpbmtpbmcsIFwiTGV0J3MgbWFrZSBzdXJlIHdlIGhhdmVuJ3QgZ290IGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBndWFyZGluZyB0aGUgJ3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0nIG1lY2hhbmlzbSBpbiAnbW0vdm1zY2FuLmMnLlwiIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IGAjaWZkZWZgIGRpcmVjdGl2ZXMgc3Vycm91bmRpbmcgdGhhdCBmZWF0dXJlLiBJdCdzIGNydWNpYWwsIG9idmlvdXNseSwgYmVjYXVzZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gdGhlcmUgd291bGQgdG90YWxseSBjaGFuZ2UgaG93IGl0IGJlaGF2ZXMgaW4gZGlmZmVyZW50IGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCBhbmQgSSBuZWVkIHRvIGtlZXAgdGhhdCBiZWhhdmlvciBpbiBtaW5kLiBHb3R0YSBtYWtlIHN1cmUgaXQncyBjb25zaXN0ZW50bHkgZW5hYmxlZCBvciBkaXNhYmxlZCBhcyBJIGV4cGVjdC4gSXQncyBhIHF1aWNrIGNoZWNrIGJ1dCBhIGZ1bmRhbWVudGFsIG9uZSBiZWZvcmUgSSBkaWcgZGVlcGVyIGludG8gYW55dGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgcmVjbGFpbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MDMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwOToxODozMi43NDcxMzU1MjZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEzMzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc4ODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc4ODA6XFx0I2VuZGlmXFxuNzg4MTpcXHRcXG43ODgyOlxcdGVudW0ge1xcbjc4ODM6XFx0XFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUyA9IDAsXFxuNzg4NDpcXHRcXHRNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCxcXG43ODg1OlxcdFxcdE1FTU9SWV9SRUNMQUlNX05VTEwsXFxuNzg4NjpcXHR9O1xcbjc4ODc6XFx0c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xcbjc4ODg6XFx0XFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTLCBcXFwic3dhcHBpbmVzcz0lZFxcXCJ9LFxcbjc4ODk6XFx0XFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCwgXFxcInN3YXBwaW5lc3M9bWF4XFxcIn0sXFxuNzg5MDpcXHRcXHR7IE1FTU9SWV9SRUNMQUlNX05VTEwsIE5VTEwgfSxcXG43ODkxOlxcdH07XFxuNzg5MjpcXHRcXG43ODkzOlxcdGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG43ODk0OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG43ODk1OlxcdHtcXG43ODk2OlxcdFxcdHVuc2lnbmVkIGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcXG43ODk3OlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSwgbnJfcmVjbGFpbWVkID0gMDtcXG43ODk4OlxcdFxcdGludCBzd2FwcGluZXNzID0gLTE7XFxuNzg5OTpcXHRcXHRjaGFyICpvbGRfYnVmLCAqc3RhcnQ7XFxuNzkwMDpcXHRcXHRzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107XFxuNzkwMTpcXHRcXHRnZnBfdCBnZnBfbWFzayA9IEdGUF9LRVJORUw7XFxuNzkwMjpcXHRcXG43OTAzOlxcdFxcdGlmICghYnVmIHx8ICghbWVtY2cgXFx1MDAyNlxcdTAwMjYgIXBnZGF0KSB8fCAobWVtY2cgXFx1MDAyNlxcdTAwMjYgcGdkYXQpKVxcbjc5MDQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzkwNTpcXHRcXG43OTA2OlxcdFxcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XFxuNzkwNzpcXHRcXG43OTA4OlxcdFxcdG9sZF9idWYgPSBidWY7XFxuNzkwOTpcXHRcXHRucl90b19yZWNsYWltID0gbWVtcGFyc2UoYnVmLCBcXHUwMDI2YnVmKSAvIFBBR0VfU0laRTtcXG43OTEwOlxcdFxcdGlmIChidWYgPT0gb2xkX2J1ZilcXG43OTExOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc5MTI6XFx0XFxuNzkxMzpcXHRcXHRidWYgPSBzdHJzdHJpcChidWYpO1xcbjc5MTQ6XFx0XFxuNzkxNTpcXHRcXHR3aGlsZSAoKHN0YXJ0ID0gc3Ryc2VwKFxcdTAwMjZidWYsIFxcXCIgXFxcIikpICE9IE5VTEwpIHtcXG43OTE2OlxcdFxcdFxcdGlmICghc3RybGVuKHN0YXJ0KSlcXG43OTE3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjc5MTg6XFx0XFx0XFx0c3dpdGNoIChtYXRjaF90b2tlbihzdGFydCwgdG9rZW5zLCBhcmdzKSkge1xcbjc5MTk6XFx0XFx0XFx0Y2FzZSBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTOlxcbjc5MjA6XFx0XFx0XFx0XFx0aWYgKG1hdGNoX2ludChcXHUwMDI2YXJnc1swXSwgXFx1MDAyNnN3YXBwaW5lc3MpKVxcbjc5MjE6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzkyMjpcXHRcXHRcXHRcXHRpZiAoc3dhcHBpbmVzcyBcXHUwMDNjIE1JTl9TV0FQUElORVNTIHx8XFxuNzkyMzpcXHRcXHRcXHRcXHQgICAgc3dhcHBpbmVzcyBcXHUwMDNlIE1BWF9TV0FQUElORVNTKVxcbjc5MjQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzkyNTpcXHRcXHRcXHRcXHRicmVhaztcXG43OTI2OlxcdFxcdFxcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVg6XFxuNzkyNzpcXHRcXHRcXHRcXHRzd2FwcGluZXNzID0gU1dBUFBJTkVTU19BTk9OX09OTFk7XFxuNzkyODpcXHRcXHRcXHRcXHRicmVhaztcXG43OTI5OlxcdFxcdFxcdGRlZmF1bHQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA5OjE4OjMyLjc0ODA1MjgyNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTQyNzk5MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgUmVjbGFpbSBNZWNoYW5pc21zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyBJJ20gZGVhbGluZyB3aXRoIHNldmVyYWwgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IHJlY2xhaW0uIFRoZSBjcml0aWNhbCBmaXJzdCBvYnNlcnZhdGlvbiBpcyB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpc24ndCBndWFyZGVkIGJ5IGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQgc3VnZ2VzdHMgYSBtb3JlIGRpcmVjdCBjb250cm9sIG9yIGltcGFjdC4gQ29udmVyc2VseSwgYHJlY2xhaW1fc3RvcmVgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgdGhlIGBDT05GSUdfU1lTRlNgIGFuZCBgQ09ORklHX05VTUFgIGZsYWdzLiBUaGlzIGluZGljYXRlcyBpdHMgZnVuY3Rpb25hbGl0eSBpcyB0aWVkIHRvIHRoZSBwcmVzZW5jZSBvZiBhIHN5c2ZzIGludGVyZmFjZSBhbmQgTlVNQSBhcmNoaXRlY3R1cmUsIHdoaWNoIHN1Z2dlc3RzIHRoaXMgaXMgc29tZWhvdyBpbnZvbHZlZCB3aXRoIHRoZSBwcmVzZW50YXRpb24gb2YgbWVtb3J5IHJlY2xhaW0gc3RhdGlzdGljcywgb3IgcGVyaGFwcyBldmVuIHNvbWUgY29udHJvbCBtZWNoYW5pc20uIEFuZCBmaW5hbGx5LCBgbWVtb3J5X3JlY2xhaW1gIGlzIGxvY2F0ZWQgaW4gYG1tL21lbWNvbnRyb2wuY2AgYW5kIGlzIGNvbmRpdGlvbmFsaXplZCBieSBgQ09ORklHX01FTUNHYC4gU28sIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSByZWxldmFudCBoZXJlIGFyZSBgTUVNQ0dgIChmb3IgY29udHJvbCBncm91cHMsIHdoaWNoIEknbSBmYW1pbGlhciB3aXRoKSBhbmQgYE5VTUFgIChOb24tVW5pZm9ybSBNZW1vcnkgQWNjZXNzKS5cblxuTm93LCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzY29wZSwgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBmb2N1czogYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCBgcmVjbGFpbV9zdG9yZWAsIGBtZW1vcnlfcmVjbGFpbWAsIGBnZXRfc2Nhbl9jb3VudGAsIGBnZXRfc3dhcHBpbmVzc2AsIGFuZCBgZ2V0X25yX3RvX3NjYW5gLiBUaGVzZSBhcmUgY2xlYXJseSB0aGUgY29yZSBjb21wb25lbnRzIG9mIGludGVyZXN0LiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIGFuZCBob3cgdGhleSBpbnRlcmFjdCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIHN5c3RlbS5cblxuQmVmb3JlIEkgZ28gZnVydGhlciwgdGhvdWdoLCBJJ2xsIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBtaWdodCBoYXZlIGJlZW4gbW9kaWZpZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgcHJpbWFyeSBvbmVzLiBBaCwgeWVzLCBgX19ub2RlX3JlY2xhaW1gIGhhcyBhbHNvIGJlZW4gbW9kaWZpZWQuIFRoaXMgaW1wbGllcyB0aGF0IHRoZSBjaGFuZ2VzIG1pZ2h0IGFmZmVjdCB0aGUgbm9kZS1sZXZlbCByZWNsYWltIGFzIHdlbGwuIFRoaXMgYWRkaXRpb25hbCBkYXRhIHBvaW50IGlzIGV4dHJlbWVseSBpbXBvcnRhbnQuIEl0IG1lYW5zIEkgaGF2ZSB0byBsb29rIGJleW9uZCBhIHNpbmdsZSBmdW5jdGlvbiwgdGhlIG1vZGlmaWNhdGlvbnMgbWlnaHQgYmUgc3lzdGVtLXdpZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTE2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDk6MTg6MzkuNjkwODU0NDgyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Njk1NzE4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX25vZGVfcmVjbGFpbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz03NzM2PXN0YXRpYyB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy03NzY3LSAqL1xcbm1tL3Ztc2Nhbi5jOjc3Njg6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03NzY5LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmM9NzgxMT1pbnQgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS92bXNjYW4uYy03ODU5LVxcbm1tL3Ztc2Nhbi5jOjc4NjA6XFx0cmV0ID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIG5yX3BhZ2VzLCBcXHUwMDI2c2MpIFxcdTAwM2U9IG5yX3BhZ2VzO1xcbm1tL3Ztc2Nhbi5jLTc4NjEtXFx0Y2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXFx1MDAyNnBnZGF0LVxcdTAwM2VmbGFncyk7XFxuLS1cXG5tbS92bXNjYW4uYy03ODcyLVxcbm1tL3Ztc2Nhbi5jOjc4NzM6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03ODc0LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmM9Nzg5Mz1pbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuLS1cXG5tbS92bXNjYW4uYy03OTc0LVxcbm1tL3Ztc2Nhbi5jOjc5NzU6XFx0XFx0XFx0cmVjbGFpbWVkID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGJhdGNoX3NpemUsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNzk3Ni1cXHRcXHRcXHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcXHUwMDI2cGdkYXQtXFx1MDAzZWZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDk6MTg6MzkuNzg3ODE4MDU5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2Mzk1OTYwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiBhIE1lbW9yeSBSZWNsYWltIFBhdGNoKipcblxuT2theSwgc28gdGhlIGNvZGUgZGVmaW5pdGVseSB0b3VjaGVzIGBfX25vZGVfcmVjbGFpbWAuIFRoYXQncyBhIGtleSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW1wbGljYXRpb25zLlxuXG5Mb29raW5nIGF0IHRoZSBmb2N1cyBzeW1ib2xzLCBJIHNlZTpcblxuKiAgIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYFxuKiAgIGByZWNsYWltX3N0b3JlYFxuKiAgIGBtZW1vcnlfcmVjbGFpbWBcbiogICBgZ2V0X3NjYW5fY291bnRgXG4qICAgYGdldF9zd2FwcGluZXNzYFxuKiAgIGBnZXRfbnJfdG9fc2NhbmBcbiogICBgX19ub2RlX3JlY2xhaW1gXG5cbldhaXQgYSBtaW51dGUsIGBnZXRfc2Nhbl9jb3VudGAsIGBnZXRfc3dhcHBpbmVzc2AsIGFuZCBgZ2V0X25yX3RvX3NjYW5gLi4uIHRob3NlIGFyZSBzdGF0aWMgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIGBtbS92bXNjYW4uY2AuIFRoZXkncmUgaW50ZWdyYWwgcGFydHMgb2YgdGhlIHBhZ2UgcmVjbGFpbSBsb2dpYywgd2hpY2ggbWVhbnMgdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGRlZXAgaW50byB0aGUgY29yZSBzY2FubmluZyBmdW5jdGlvbmFsaXR5LiBBbmQsIG9mIGNvdXJzZSwgYF9fbm9kZV9yZWNsYWltYCBpdHNlbGYgaXMgYWxzbyBzdGF0aWMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nLlxuXG5Pa2F5LCBsZXQncyBkb3VibGUtY2hlY2sgYG1lbW9yeV9yZWNsYWltYC4gQWgsIHllcywgaXQncyBzdGF0aWMgdG9vLCBidXQgZm91bmQgaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRoaXMgc3VnZ2VzdHMgYSBicm9hZGVyIGltcGFjdCwgbGlrZWx5IGludm9sdmluZyBtZW1vcnkgY29udHJvbCBncm91cHMsIHdoaWNoIEkgc3VzcGVjdGVkIGFueXdheS5cblxuVGhpcyBwYXRjaCBpcyB0aWVkIHRvIHRoZSBgTUVNQ0dgIGFuZCBgTlVNQWAgY29uZmlndXJhdGlvbnMsIHdoaWNoIHJlaW5mb3JjZXMgdGhhdCBpdOKAmXMgbW9kaWZ5aW5nIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgTlVNQSBhcmNoaXRlY3R1cmVzLlxuXG5UaGUgY29yZSBpc3N1ZSBzZWVtcyB0byBiZSBhIGJ1ZyBpbiBwcm9hY3RpdmUgbWVtb3J5IHJlY2xhaW06IHVuZGVyIHNwZWNpZmljIHNjZW5hcmlvcyAoc3dhcHBpbmVzcyBzZXQgdG8gbWF4IHdpdGggbm8gc3dhcCBhdmFpbGFibGUpLCBpdCB3YXMgd3JvbmdseSBldmljdGluZyBmaWxlIHBhZ2VzIHdoZW4gaXQgc2hvdWxkIGhhdmUgYmVlbiBzb2xlbHkgZm9jdXNpbmcgb24gYW5vbnltb3VzIHBhZ2VzLiBJdCdzIHRvdWNoaW5nIHNvbWUgbWFqb3IgY29kZSBwYXRocyBpbiBgbW0vdm1zY2FuLmNgIGFuZCBgbW0vbWVtY29udHJvbC5jYCwgbWVhbmluZyB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBjYW4gZXZlbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdXNpbmcgY2dyb3VwIGBtZW1vcnkucmVjbGFpbWAgb3Igc3lzZnMgbm9kZSBgcmVjbGFpbWAgYXR0cmlidXRlcy5cblxuSSB0aGluayBJJ3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGUgc2NvcGUuIFRpbWUgdG8gcnVuIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTM3LCJPdXRwdXRUb2tlbnMiOjE4OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwOToxODo0OC40Mjc0MTc2NDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUyMjIwMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJOVU1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICAgIFwicmVjbGFpbV9zdG9yZVwiLFxuICAgIFwibWVtb3J5X3JlY2xhaW1cIixcbiAgICBcImdldF9zY2FuX2NvdW50XCIsXG4gICAgXCJnZXRfc3dhcHBpbmVzc1wiLFxuICAgIFwiZ2V0X25yX3RvX3NjYW5cIixcbiAgICBcIl9fbm9kZV9yZWNsYWltXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIHdoZXJlIGFub255bW91cyBtZW1vcnkgb25seSByZWNsYWltIChzd2FwcGluZXNzPW1heCkgY291bGQgaW5jb3JyZWN0bHkgZmFsbCBiYWNrIHRvIGV2aWN0aW5nIGZpbGUgcGFnZXMgd2hlbiBhbm9ueW1vdXMgcGFnZXMgY2Fubm90IGJlIHJlY2xhaW1lZCAoZS5nLiBubyBzd2FwKS4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS92bXNjYW4uYyBhbmQgbW0vbWVtY29udHJvbC5jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBjZ3JvdXAgbWVtb3J5LnJlY2xhaW0gb3Igc3lzZnMgbm9kZSByZWNsYWltIGF0dHJpYnV0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gICAgXCJyZWNsYWltX3N0b3JlXCIsXG4gICAgXCJtZW1vcnlfcmVjbGFpbVwiLFxuICAgIFwiZ2V0X3NjYW5fY291bnRcIixcbiAgICBcImdldF9zd2FwcGluZXNzXCIsXG4gICAgXCJnZXRfbnJfdG9fc2NhblwiLFxuICAgIFwiX19ub2RlX3JlY2xhaW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBwcm9hY3RpdmUgbWVtb3J5IHJlY2xhaW0gd2hlcmUgYW5vbnltb3VzIG1lbW9yeSBvbmx5IHJlY2xhaW0gKHN3YXBwaW5lc3M9bWF4KSBjb3VsZCBpbmNvcnJlY3RseSBmYWxsIGJhY2sgdG8gZXZpY3RpbmcgZmlsZSBwYWdlcyB3aGVuIGFub255bW91cyBwYWdlcyBjYW5ub3QgYmUgcmVjbGFpbWVkIChlLmcuIG5vIHN3YXApLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGFuZCBtbS9tZW1jb250cm9sLmMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGNncm91cCBtZW1vcnkucmVjbGFpbSBvciBzeXNmcyBub2RlIHJlY2xhaW0gYXR0cmlidXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfckfq[1] Phase: Succeeded StartedAt: 2026-07-24 09:19:00 +0000 UTC FinishedAt: 2026-07-24 09:19:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfckfq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-24 09:19:01 +0000 UTC FinishedAt: 2026-07-24 09:19:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfckfq[2] Phase: Succeeded StartedAt: 2026-07-24 09:19:01 +0000 UTC FinishedAt: 2026-07-24 13:56:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-24 09:19:01 +0000 UTC FinishedAt: 2026-07-24 13:56:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-24 09:19:01 +0000 UTC FinishedAt: 2026-07-24 09:19:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-24 09:19:01 +0000 UTC FinishedAt: 2026-07-24 09:19:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowfckfq/series-workflowfckfq-convert-artifact-1541020661/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-24 09:19:14 +0000 UTC FinishedAt: 2026-07-24 09:53:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-24 09:19:14 +0000 UTC FinishedAt: 2026-07-24 09:53:52 +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:*37a30546-2302-437d-bb83-a9b9bfca7b40,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-workflowfckfq/series-workflowfckfq-convert-artifact-1541020661/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": "4173f3c4-ac9c-4ce2-bd07-c103833c1077", "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-workflowfckfq/series-workflowfckfq-build-action-2684188123/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-24 09:19:15 +0000 UTC FinishedAt: 2026-07-24 09:53:41 +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:*37a30546-2302-437d-bb83-a9b9bfca7b40,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-workflowfckfq/series-workflowfckfq-convert-artifact-1541020661/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": "4173f3c4-ac9c-4ce2-bd07-c103833c1077", "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-workflowfckfq/series-workflowfckfq-build-action-2684188123/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-24 09:53:52 +0000 UTC FinishedAt: 2026-07-24 09:53:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-24 09:53:52 +0000 UTC FinishedAt: 2026-07-24 09:53:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-24 09:53:52 +0000 UTC FinishedAt: 2026-07-24 09:54:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-24 09:53:52 +0000 UTC FinishedAt: 2026-07-24 09:54:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowfckfq/series-workflowfckfq-convert-artifact-2356129104/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-24 09:54:03 +0000 UTC FinishedAt: 2026-07-24 09:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-24 09:54:03 +0000 UTC FinishedAt: 2026-07-24 09:56:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4173f3c4-ac9c-4ce2-bd07-c103833c1077,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-workflowfckfq/series-workflowfckfq-build-action-2684188123/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-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-24 09:56:14 +0000 UTC FinishedAt: 2026-07-24 09:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-24 09:56:14 +0000 UTC FinishedAt: 2026-07-24 09:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-24 09:56:14 +0000 UTC FinishedAt: 2026-07-24 10:53:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-24 09:56:14 +0000 UTC FinishedAt: 2026-07-24 10:53:00 +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:*37a30546-2302-437d-bb83-a9b9bfca7b40,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-workflowfckfq/series-workflowfckfq-convert-artifact-2356129104/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": "07419c82-f73a-4c01-914f-ea94fe5cf402", "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-workflowfckfq/series-workflowfckfq-build-action-3558107852/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-24 09:56:14 +0000 UTC FinishedAt: 2026-07-24 10:52:50 +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:*37a30546-2302-437d-bb83-a9b9bfca7b40,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-workflowfckfq/series-workflowfckfq-convert-artifact-2356129104/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": "07419c82-f73a-4c01-914f-ea94fe5cf402", "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-workflowfckfq/series-workflowfckfq-build-action-3558107852/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-24 10:53:00 +0000 UTC FinishedAt: 2026-07-24 10:53:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-24 10:53:00 +0000 UTC FinishedAt: 2026-07-24 10:53:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-24 10:53:00 +0000 UTC FinishedAt: 2026-07-24 10:54:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-24 10:53:00 +0000 UTC FinishedAt: 2026-07-24 10:54:32 +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:*07419c82-f73a-4c01-914f-ea94fe5cf402,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-workflowfckfq/series-workflowfckfq-build-action-3558107852/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-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-24 10:54:42 +0000 UTC FinishedAt: 2026-07-24 13:56:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-24 10:54:42 +0000 UTC FinishedAt: 2026-07-24 13:56:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},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:*4173f3c4-ac9c-4ce2-bd07-c103833c1077,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*07419c82-f73a-4c01-914f-ea94fe5cf402,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-workflowfckfq/series-workflowfckfq-build-action-2684188123/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-workflowfckfq/series-workflowfckfq-build-action-3558107852/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-24 10:54:42 +0000 UTC FinishedAt: 2026-07-24 10:54:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-24 10:54:42 +0000 UTC FinishedAt: 2026-07-24 10:54:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},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-workflowfckfq/series-workflowfckfq-convert-artifact-511830857/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-24 10:54:42 +0000 UTC FinishedAt: 2026-07-24 10:54:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-24 10:54:42 +0000 UTC FinishedAt: 2026-07-24 10:54:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-24 10:54:42 +0000 UTC FinishedAt: 2026-07-24 10:54:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-24 10:54:52 +0000 UTC FinishedAt: 2026-07-24 13:56:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfckfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","reclaim_store","memory_reclaim","get_scan_count","get_swappiness","get_nr_to_scan","__node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","NUMA"],"series_id":"6a2b0582-e307-4a8f-8c97-2e21f56ba4ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-24 10:54:52 +0000 UTC FinishedAt: 2026-07-24 13:56:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4173f3c4-ac9c-4ce2-bd07-c103833c1077,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*07419c82-f73a-4c01-914f-ea94fe5cf402,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-workflowfckfq/series-workflowfckfq-build-action-2684188123/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-workflowfckfq/series-workflowfckfq-build-action-3558107852/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-workflowfckfq/series-workflowfckfq-convert-artifact-511830857/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,}