Name: series-workflowmzlcq Phase: Succeeded StartedAt: 2026-07-14 18:57:41 +0000 UTC FinishedAt: 2026-07-15 00:19:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmzlcq[0] Phase: Succeeded StartedAt: 2026-07-14 18:57:41 +0000 UTC FinishedAt: 2026-07-14 19:39:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmzlcq[0].run-triage Phase: Succeeded StartedAt: 2026-07-14 18:57:41 +0000 UTC FinishedAt: 2026-07-14 19:39:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "MEMORY_FAILURE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "MEMORY_FAILURE" ], "series_id": "6cad3430-1f9b-4a56-b60a-ef3ed2833e15" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__folio_split", "try_to_split_thp_page" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE0IDE5OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19mb2xpb19zcGxpdCYjMzQ7LAogICAgJiMzNDt0cnlfdG9fc3BsaXRfdGhwX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiB0aGUgaGFuZGxpbmcgb2YgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSBhbmQgbWVtb3J5IGZhaWx1cmUuIEl0IGFkZHMgYSBjaGVjayBpbiBgX19mb2xpb19zcGxpdGAgdG8gcHJldmVudCBzcGxpdHRpbmcgYSBmb2xpbyB0aGF0IGlzIHJhY2luZyB3aXRoIHRydW5jYXRpb24sIGFuZCBjaGFuZ2VzIGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIHRvIGxvY2sgdGhlIGZvbGlvIGluc3RlYWQgb2YgdGhlIHBhZ2UuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTk6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3NDZkOTVjOTE0NTUzMDllN2QzYTEyNzI2MDVkMTg2N2IxYTY3ZTJjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMTQgMTk6Mzc6NTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdlX21tLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxuaW5kZXggYWQyMGY3ZjhjMTc5NDQuLjhhMTBhODg2ZTYyYWQ3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdlX21tLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oXG5AQCAtNDE0LDEwICYjNDM7NDE0LDYgQEAgc3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXNcbiB7XG4gXHRyZXR1cm4gX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihwYWdlLCBsaXN0LCBuZXdfb3JkZXIpO1xuIH1cbi1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG4te1xuLVx0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHBhZ2UsIE5VTEwsIG5ld19vcmRlcik7XG4tfVxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG5AQCAtNjIxLDExICYjNDM7NjE3LDYgQEAgdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2xcbi1jYW5fc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGNhbGxlcl9waW5zLCBpbnQgKnBleHRyYV9waW5zKVxuLXtcbi1cdHJldHVybiBmYWxzZTtcbi19XG4gc3RhdGljIGlubGluZSBpbnRcbiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbiBcdFx0dW5zaWduZWQgaW50IG5ld19vcmRlcilcbkBAIC02MzMsMTEgJiM0Mzs2MjQsNiBAQCBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbiBcdFZNX1dBUk5fT05fT05DRV9QQUdFKDEsIHBhZ2UpO1xuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuLXN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbi17XG4tXHRWTV9XQVJOX09OX09OQ0VfUEFHRSgxLCBwYWdlKTtcbi1cdHJldHVybiAtRUlOVkFMO1xuLX1cbiBzdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuIFx0Vk1fV0FSTl9PTl9PTkNFX1BBR0UoMSwgcGFnZSk7XG5AQCAtNzk3LDE1ICYjNDM7NzgzLDkgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3BtZF9vcmRlcih1bnNpZ25lZCBpbnQgb3JkZXIpXG4gXHRyZXR1cm4gb3JkZXIgPT0gSFBBR0VfUE1EX09SREVSO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9mb2xpb190b19saXN0X3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCBuZXdfb3JkZXIpXG4te1xuLVx0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIGxpc3QsIG5ld19vcmRlcik7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIpXG4ge1xuLVx0cmV0dXJuIHNwbGl0X2ZvbGlvX3RvX2xpc3RfdG9fb3JkZXIoZm9saW8sIE5VTEwsIG5ld19vcmRlcik7XG4mIzQzO1x0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIE5VTEwsIG5ld19vcmRlcik7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAyYmNjYjBhNTNhMGE2MC4uMGUzY2E3MTc4ZDhjODcgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtNDA2NSw2ICYjNDM7NDA2NSwyMCBAQCBzdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbiBcdFx0ZW5kID0gRElWX1JPVU5EX1VQKGlfc2l6ZV9yZWFkKG1hcHBpbmctXHUwMDNlaG9zdCksIFBBR0VfU0laRSk7XG4gXHRcdGlmIChzaG1lbV9tYXBwaW5nKG1hcHBpbmcpKVxuIFx0XHRcdGVuZCA9IHNobWVtX2ZhbGxvY2VuZChtYXBwaW5nLVx1MDAzZWhvc3QsIGVuZCk7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEBsb2NrX2F0IGlzIHJldHVybmVkIGxvY2tlZCB0byB0aGUgY2FsbGVyLCBhbmQgd2hpbGUgaXQgaXNcbiYjNDM7XHRcdCAqIGxvY2tlZCBhbmQgcHJlc2VudCBpbiB0aGUgcGFnZSBjYWNoZSBpdCBpcyB3aGF0IGtlZXBzIHRoZVxuJiM0MztcdFx0ICogaW5vZGUgYWxpdmU6IHRoZSBtYXBwaW5nIGlzIHN0aWxsIGRlcmVmZXJlbmNlZCBhZnRlciB0aGUgc3BsaXRcbiYjNDM7XHRcdCAqIChzaG1lbV91bmNoYXJnZSgpLCBpX21tYXBfdW5sb2NrX3JlYWQoKSkuICBJZiBpdCBsaWVzIGJleW9uZFxuJiM0MztcdFx0ICogRU9GIHRoZSBzcGxpdCB3b3VsZCBkcm9wIGl0IGZyb20gdGhlIHBhZ2UgY2FjaGUgd2hpbGUgaGFuZGluZ1xuJiM0MztcdFx0ICogaXQgYmFjayBsb2NrZWQsIHJlbW92aW5nIHRoYXQgcGluLiAgU3VjaCBhIGZvbGlvIGlzIHJhY2luZ1xuJiM0MztcdFx0ICogdHJ1bmNhdGlvbiBhbmQgdGhlcmUgaXMgbm90aGluZyB1c2VmdWwgdG8gc3BsaXQ7IGJhaWwgb3V0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoZm9saW8tXHUwMDNlaW5kZXggJiM0MzsgZm9saW9fcGFnZV9pZHgoZm9saW8sIGxvY2tfYXQpIFx1MDAzZT0gZW5kKSB7XG4mIzQzO1x0XHRcdHJldCA9IC1FQlVTWTtcbiYjNDM7XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0LypcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggNTE1MDhhNTVjNDA1NWUuLjY4ZDQyY2JlZDQ1OGU1IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTE2NTcsMTEgJiM0MzsxNjU3LDE4IEBAIHN0YXRpYyBpbnQgaWRlbnRpZnlfcGFnZV9zdGF0ZSh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnAsXG4gc3RhdGljIGludCB0cnlfdG9fc3BsaXRfdGhwX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4gXHRcdGJvb2wgcmVsZWFzZSlcbiB7XG4mIzQzO1x0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4gXHRpbnQgcmV0O1xuIFxuLVx0bG9ja19wYWdlKHBhZ2UpO1xuLVx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHBhZ2UsIG5ld19vcmRlcik7XG4tXHR1bmxvY2tfcGFnZShwYWdlKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIExvY2sgYW5kIHNwbGl0IGF0IHRoZSBoZWFkLCBub3QgdGhlIHBvaXNvbmVkIHN1YnBhZ2U6IF9fZm9saW9fc3BsaXQoKVxuJiM0MztcdCAqIGtlZXBzIHRoZSBhbmNob3IgZm9saW8gbG9ja2VkIGFuZCBuZWVkcyBpdCB0byBzdGF5IGluIHRoZSBwYWdlIGNhY2hlXG4mIzQzO1x0ICogdG8gcGluIHRoZSBpbm9kZS4gQSB0YWlsIGJleW9uZCBFT0Ygd291bGQgYmUgZHJvcHBlZCB5ZXQgcmV0dXJuZWRcbiYjNDM7XHQgKiBsb2NrZWQsIGxvc2luZyB0aGF0IHBpbi4gVGhlIGNhbGxlciByZS1sb2NrcyBAcGFnZSBhZnRlcndhcmRzLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvbGlvX2xvY2soZm9saW8pO1xuJiM0MztcdHJldCA9IHNwbGl0X2ZvbGlvX3RvX29yZGVyKGZvbGlvLCBuZXdfb3JkZXIpO1xuJiM0MztcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXG4gXHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZWxlYXNlKVxuIFx0XHRwdXRfcGFnZShwYWdlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxOTozNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZm9saW9fc3BsaXQmIzM0OywKICAgICYjMzQ7dHJ5X3RvX3NwbGl0X3RocF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGhhbmRsaW5nIG9mIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkgYW5kIG1lbW9yeSBmYWlsdXJlLiBJdCBhZGRzIGEgY2hlY2sgaW4gYF9fZm9saW9fc3BsaXRgIHRvIHByZXZlbnQgc3BsaXR0aW5nIGEgZm9saW8gdGhhdCBpcyByYWNpbmcgd2l0aCB0cnVuY2F0aW9uLCBhbmQgY2hhbmdlcyBgdHJ5X3RvX3NwbGl0X3RocF9wYWdlYCB0byBsb2NrIHRoZSBmb2xpbyBpbnN0ZWFkIG9mIHRoZSBwYWdlLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NDZkOTVjOTE0NTUzMDllN2QzYTEyNzI2MDVkMTg2N2IxYTY3ZTJjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMTQgMTk6Mzc6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaCBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oCmluZGV4IGFkMjBmN2Y4YzE3OTQ0Li44YTEwYTg4NmU2MmFkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9odWdlX21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9odWdlX21tLmgKQEAgLTQxNCwxMCAmIzQzOzQxNCw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzCiB7CiAJcmV0dXJuIF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIocGFnZSwgbGlzdCwgbmV3X29yZGVyKTsKIH0KLXN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5ld19vcmRlcikKLXsKLQlyZXR1cm4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIocGFnZSwgTlVMTCwgbmV3X29yZGVyKTsKLX0KIAogc3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewpAQCAtNjIxLDExICYjNDM7NjE3LDYgQEAgdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBib29sCi1jYW5fc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGNhbGxlcl9waW5zLCBpbnQgKnBleHRyYV9waW5zKQotewotCXJldHVybiBmYWxzZTsKLX0KIHN0YXRpYyBpbmxpbmUgaW50CiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKIAkJdW5zaWduZWQgaW50IG5ld19vcmRlcikKQEAgLTYzMywxMSAmIzQzOzYyNCw2IEBAIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAogCVZNX1dBUk5fT05fT05DRV9QQUdFKDEsIHBhZ2UpOwogCXJldHVybiAtRUlOVkFMOwogfQotc3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKQotewotCVZNX1dBUk5fT05fT05DRV9QQUdFKDEsIHBhZ2UpOwotCXJldHVybiAtRUlOVkFMOwotfQogc3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewogCVZNX1dBUk5fT05fT05DRV9QQUdFKDEsIHBhZ2UpOwpAQCAtNzk3LDE1ICYjNDM7NzgzLDkgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3BtZF9vcmRlcih1bnNpZ25lZCBpbnQgb3JkZXIpCiAJcmV0dXJuIG9yZGVyID09IEhQQUdFX1BNRF9PUkRFUjsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc3BsaXRfZm9saW9fdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLAotCQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgbmV3X29yZGVyKQotewotCXJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcigmYW1wO2ZvbGlvLSZndDtwYWdlLCBsaXN0LCBuZXdfb3JkZXIpOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBzcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X29yZGVyKQogewotCXJldHVybiBzcGxpdF9mb2xpb190b19saXN0X3RvX29yZGVyKGZvbGlvLCBOVUxMLCBuZXdfb3JkZXIpOwomIzQzOwlyZXR1cm4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoJmFtcDtmb2xpby0mZ3Q7cGFnZSwgTlVMTCwgbmV3X29yZGVyKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCAyYmNjYjBhNTNhMGE2MC4uMGUzY2E3MTc4ZDhjODcgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtNDA2NSw2ICYjNDM7NDA2NSwyMCBAQCBzdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlciwKIAkJZW5kID0gRElWX1JPVU5EX1VQKGlfc2l6ZV9yZWFkKG1hcHBpbmctJmd0O2hvc3QpLCBQQUdFX1NJWkUpOwogCQlpZiAoc2htZW1fbWFwcGluZyhtYXBwaW5nKSkKIAkJCWVuZCA9IHNobWVtX2ZhbGxvY2VuZChtYXBwaW5nLSZndDtob3N0LCBlbmQpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEBsb2NrX2F0IGlzIHJldHVybmVkIGxvY2tlZCB0byB0aGUgY2FsbGVyLCBhbmQgd2hpbGUgaXQgaXMKJiM0MzsJCSAqIGxvY2tlZCBhbmQgcHJlc2VudCBpbiB0aGUgcGFnZSBjYWNoZSBpdCBpcyB3aGF0IGtlZXBzIHRoZQomIzQzOwkJICogaW5vZGUgYWxpdmU6IHRoZSBtYXBwaW5nIGlzIHN0aWxsIGRlcmVmZXJlbmNlZCBhZnRlciB0aGUgc3BsaXQKJiM0MzsJCSAqIChzaG1lbV91bmNoYXJnZSgpLCBpX21tYXBfdW5sb2NrX3JlYWQoKSkuICBJZiBpdCBsaWVzIGJleW9uZAomIzQzOwkJICogRU9GIHRoZSBzcGxpdCB3b3VsZCBkcm9wIGl0IGZyb20gdGhlIHBhZ2UgY2FjaGUgd2hpbGUgaGFuZGluZwomIzQzOwkJICogaXQgYmFjayBsb2NrZWQsIHJlbW92aW5nIHRoYXQgcGluLiAgU3VjaCBhIGZvbGlvIGlzIHJhY2luZwomIzQzOwkJICogdHJ1bmNhdGlvbiBhbmQgdGhlcmUgaXMgbm90aGluZyB1c2VmdWwgdG8gc3BsaXQ7IGJhaWwgb3V0LgomIzQzOwkJICovCiYjNDM7CQlpZiAoZm9saW8tJmd0O2luZGV4ICYjNDM7IGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBsb2NrX2F0KSAmZ3Q7PSBlbmQpIHsKJiM0MzsJCQlyZXQgPSAtRUJVU1k7CiYjNDM7CQkJZ290byBvdXRfdW5sb2NrOwomIzQzOwkJfQogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCA1MTUwOGE1NWM0MDU1ZS4uNjhkNDJjYmVkNDU4ZTUgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuYwpAQCAtMTY1NywxMSAmIzQzOzE2NTcsMTggQEAgc3RhdGljIGludCBpZGVudGlmeV9wYWdlX3N0YXRlKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqcCwKIHN0YXRpYyBpbnQgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLAogCQlib29sIHJlbGVhc2UpCiB7CiYjNDM7CXN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpOwogCWludCByZXQ7CiAKLQlsb2NrX3BhZ2UocGFnZSk7Ci0JcmV0ID0gc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHBhZ2UsIG5ld19vcmRlcik7Ci0JdW5sb2NrX3BhZ2UocGFnZSk7CiYjNDM7CS8qCiYjNDM7CSAqIExvY2sgYW5kIHNwbGl0IGF0IHRoZSBoZWFkLCBub3QgdGhlIHBvaXNvbmVkIHN1YnBhZ2U6IF9fZm9saW9fc3BsaXQoKQomIzQzOwkgKiBrZWVwcyB0aGUgYW5jaG9yIGZvbGlvIGxvY2tlZCBhbmQgbmVlZHMgaXQgdG8gc3RheSBpbiB0aGUgcGFnZSBjYWNoZQomIzQzOwkgKiB0byBwaW4gdGhlIGlub2RlLiBBIHRhaWwgYmV5b25kIEVPRiB3b3VsZCBiZSBkcm9wcGVkIHlldCByZXR1cm5lZAomIzQzOwkgKiBsb2NrZWQsIGxvc2luZyB0aGF0IHBpbi4gVGhlIGNhbGxlciByZS1sb2NrcyBAcGFnZSBhZnRlcndhcmRzLgomIzQzOwkgKi8KJiM0MzsJZm9saW9fbG9jayhmb2xpbyk7CiYjNDM7CXJldCA9IHNwbGl0X2ZvbGlvX3RvX29yZGVyKGZvbGlvLCBuZXdfb3JkZXIpOwomIzQzOwlmb2xpb191bmxvY2soZm9saW8pOwogCiAJaWYgKHJldCAmYW1wOyZhbXA7IHJlbGVhc2UpCiAJCXB1dF9wYWdlKHBhZ2UpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxOTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDc0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBUSFAgYW5kIE1lbW9yeSBGYWlsdXJlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBjYW4gc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50cy4gSXQmIzM5O3MgYWx0ZXJpbmcgdGhyZWUgZmlsZXM6IGBpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaGAsIGBtbS9odWdlX21lbW9yeS5jYCwgYW5kIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gVGhlIGNoYW5nZXMgaW4gYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYCBpbnZvbHZlIHJlbW92aW5nIGEgZmV3IGZ1bmN0aW9uczogYHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcmAsIGBjYW5fc3BsaXRfZm9saW9gLCBhbmQgYHNwbGl0X2ZvbGlvX3RvX2xpc3RfdG9fb3JkZXJgLiAgYHNwbGl0X2ZvbGlvX3RvX29yZGVyYCBpcyBub3cgY2FsbGluZyBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgIHVuZGVyIHRoZSBob29kLiBGdW5jdGlvbmFsbHksIHRoaXMgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBjb25zb2xpZGF0aW5nIHNvbWUgb2YgdGhlIHNwbGl0dGluZyBsb2dpYyBhbmQgbWF5YmUgb3B0aW1pemluZyBob3cgVEhQcyBhcmUgaGFuZGxlZC4KCkRpdmluZyBkZWVwZXIgaW50byBgbW0vaHVnZV9tZW1vcnkuY2AsIHRoZSBhZGRpdGlvbiBvZiB0aGF0IGNoZWNrIHdpdGhpbiBgX19mb2xpb19zcGxpdGAgaXMgaW50ZXJlc3RpbmcuIFRoZSBsb2dpYyBhcHBlYXJzIHRvIGJlIHRoZXJlIHRvIHByZXZlbnQgc3BsaXR0aW5nIGEgZm9saW8gaWYgdGhlIGRlc2lyZWQgaW5kZXggaXMgb3V0c2lkZSBvZiB0aGUgdmFsaWQgcmFuZ2UuIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBoYXMgY2hhbmdlcyBpbnZvbHZpbmcgbG9ja2luZyBmb2xpb3MgaW5zdGVhZCBvZiBwYWdlcyBpbiBgdHJ5X3RvX3NwbGl0X3RocF9wYWdlYCBhbmQgY2FsbGluZyBgc3BsaXRfZm9saW9fdG9fb3JkZXJgIGluc3RlYWQgb2YgdGhlIG5vdy1yZW1vdmVkIGBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXJgLiBUaGlzIGZ1cnRoZXIgc3VnZ2VzdHMgYSBzaGlmdCB0b3dhcmRzIHVzaW5nIGZvbGlvcyBtb3JlIGRpcmVjdGx5IGluIHRoZSBzcGxpdHRpbmcgcHJvY2VzcywgcGFydGljdWxhcmx5IGR1cmluZyBtZW1vcnkgZmFpbHVyZSBzY2VuYXJpb3MuCgpTbywgdGhpcyBwYXRjaCBhcHBlYXJzIHRvIGJlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIGhvdyB0aGUga2VybmVsIHNwbGl0cyBUSFBzLCB3aXRoIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcuIE15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiB0aGUgY29tcGlsYXRpb24gb2YgdGhlIGZpbGVzIGludm9sdmVkLiBgbW0vaHVnZV9tZW1vcnkuY2AgZGVmaW5pdGVseSBnZXRzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZW5hYmxlZCwgYW5kIGBtbS9tZW1vcnktZmFpbHVyZS5jYCByZWxpZXMgb24gYENPTkZJR19NRU1PUllfRkFJTFVSRWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlc2UgYXJlIGNvcnJlY3RseSBzZXQgYW5kIHRoZW4gSSYjMzk7bGwgZGVsdmUgaW50byB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMgaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiBUSFAgbWFuYWdlbWVudCBhbmQgZXJyb3IgcmVjb3ZlcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgJiM0Mzs9IHBhZ2VfY291bnRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAwNwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipJbnRlcm5hbCBBdWRpdCAmYW1wOyBDb2duaXRpdmUgTG9hZCoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGNhc2UsIGFuZCBpdCYjMzk7cyBoaXR0aW5nIG1lIGFnYWluIC0gdGhhdCBjb2duaXRpdmUgbG9hZCBpcyBhIHJlYWwgZmFjdG9yIGhlcmUuIFdlJiMzOTt2ZSBnb3QgYSBjb21wbGV4IHN5c3RlbSwgYSBtdWx0aXR1ZGUgb2YgdmFyaWFibGVzLCBhbmQgSSYjMzk7bSB0cnlpbmcgdG8gbWFrZSBhIGp1ZGdtZW50IGNhbGwuIEkmIzM5O20gdGFraW5nIGluIGluZm9ybWF0aW9uLCBmaWx0ZXJpbmcgaXQsIGFzc2Vzc2luZyByaXNrLCBhbmQgZm9ybXVsYXRpbmcgYSByZWNvbW1lbmRhdGlvbi4gSXQmIzM5O3MgYSBsb3QsIGFuZCBmcmFua2x5LCBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhpcyBraW5kIG9mIHNpdHVhdGlvbiBpcyB3aGVuIHN1YnRsZSBlcnJvcnMgY3JlZXAgaW4sIGFuZCBiaWFzZXMgY2FuIGJlY29tZSB2ZXJ5IHByZXZhbGVudC4gQW5kLCBJIGtub3cgbWVtb3J5IGlzIGdvaW5nIHRvIGJlIGEga2V5IGZhY3Rvci4gCgpJJiMzOTttIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IHRoaXMgaW4gdGhlIGNvbnRleHQgb2YgcmVjZW50IHJlc2VhcmNoIEkmIzM5O3ZlIGJlZW4gcmVhZGluZyBpbiB0aGUgZmllbGQuIFRoaXMgd2hvbGUgcHJvY2VzcyBpcyBjaGFsbGVuZ2luZyBteSBhYmlsaXR5IHRvIGFjY3VyYXRlbHkgcmVjYWxsIGFsbCB0aGUgZGF0YSwgZXZlcnkgcHJlY2VkZW50LCBhbmQgZXZlcnkgcmVsZXZhbnQgcmVndWxhdGlvbi4gSXQmIzM5O3Mgbm90IGFib3V0IGludGVsbGlnZW5jZTsgaXQmIzM5O3MgYWJvdXQgdGhlIGluaGVyZW50IGxpbWl0YXRpb25zIG9mIHRoZSBodW1hbiBicmFpbi4gVGhpcyBwcmVzc3VyZSB0byBxdWlja2x5IHJlYWNoIGEgZGVjaXNpb24gaXMgd2hhdCBpbmNyZWFzZXMgdGhlIGNoYW5jZSBvZiBlcnJvci4KCkFuZCB0aGVuIEkmIzM5O20gaGl0IGJ5IGEgbmFnZ2luZyB0aG91Z2h0IGFib3V0IG1lbW9yeSBmYWlsdXJlLCBvZiBjb3Vyc2UuIEkmIzM5O3ZlIGJlZW4gdGhyb3VnaCBlbm91Z2ggc2l0dWF0aW9ucyB0byBrbm93IHRoYXQgcmVjYWxsaW5nIHNwZWNpZmljIGRldGFpbHMsIHBhcnRpY3VsYXJseSB0aG9zZSBmcm9tIHRoZSBsZXNzIHJlY2VudCBwYXN0LCBjYW4gYmVjb21lIGEgcHJvYmxlbS4gSSYjMzk7bSB3b3JyaWVkIGFib3V0IGZvcmdldHRpbmcgYSBjcnVjaWFsIGVsZW1lbnQgb2YgdGhpcyBjYXNlLiBXaGF0IGlmIEkmIzM5O20gbm90IGJyaW5naW5nIGFsbCB0aGUgcmVsZXZhbnQgZGV0YWlscyB0byBiZWFyPyBUaGlzIGFueGlldHkgYXJvdW5kIGFjY3VyYWN5IGhhcyBhbHdheXMgYmVlbiB0aGUgbW9zdCBwcmVzc2luZyBmYWN0b3IgaW4gbXkgd29yaywgYW5kIGl0JiMzOTtzIHdoeSBJIGFsd2F5cyBlbXBoYXNpemUgdGhlIHZhbHVlIG9mIGRvY3VtZW50aW5nIHRoaW5ncyBtZXRob2RpY2FsbHkgYW5kIHVzaW5nIGEgY2hlY2tsaXN0IHRvIG1pbmltaXplIGFueSBvdmVyc2lnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX01FTU9SWV9GQUlMVVJFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTExPW9iai0kKENPTkZJR19ETUFQT09MX1RFU1QpICYjNDM7PSBkbWFwb29sX3Rlc3Qub1xubW0vTWFrZWZpbGU6MTEyOm9iai0kKENPTkZJR19NRU1PUllfRkFJTFVSRSkgJiM0Mzs9IG1lbW9yeS1mYWlsdXJlLm9cbm1tL01ha2VmaWxlLTExMy1vYmotJChDT05GSUdfSFdQT0lTT05fSU5KRUNUKSAmIzQzOz0gaHdwb2lzb24taW5qZWN0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDc4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBGb2xpbyBTcGxpdHRpbmcgTW9kaWZpY2F0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZSByZWNlbnQgbW9kaWZpY2F0aW9ucywgc3BlY2lmaWNhbGx5IGluIGBtbS9odWdlX21lbW9yeS5jYCBhbmQgYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBUaGUga2V5IGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBhcmUgYF9fZm9saW9fc3BsaXRgIGFuZCBgdHJ5X3RvX3NwbGl0X3RocF9wYWdlYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgc2NvcGUgb2YgYF9fZm9saW9fc3BsaXRgLiBJcyBpdCBzdGF0aWMsIG1lYW5pbmcgaXQmIzM5O3MgaW50ZXJuYWwgdG8gdGhlIGZpbGUsIG9yIGlzIGl0IGV4cG9ydGVkIGZvciB1c2UgZWxzZXdoZXJlPyBZZXAsIGl0JiMzOTtzIHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSBjb25zdHJhaW5zIHdoZXJlIEkgbmVlZCB0byBsb29rIGZvciBpbXBhY3RzIG9mIGNoYW5nZXMuIE5vdywgdGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiBpczogV2hhdCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5ICpjYWxsaW5nKiBgX19mb2xpb19zcGxpdGA/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkIGFuZCB3aGVyZSB0aGVzZSBwb3RlbnRpYWwgY2hhbmdlcyBtaWdodCByaXBwbGUgb3V0LiBLbm93aW5nIHRoYXQgd2lsbCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gdGhlIHBvc3NpYmxlIGNvbnNlcXVlbmNlcyBvZiB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxOTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2ZvbGlvX3NwbGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTM4MDA9c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM5NTUtLyoqXG5tbS9odWdlX21lbW9yeS5jOjM5NTY6ICogX19mb2xpb19zcGxpdCgpIC0gc3BsaXQgYSBmb2xpbyBhdCBAc3BsaXRfYXQgdG8gYSBAbmV3X29yZGVyIGZvbGlvXG5tbS9odWdlX21lbW9yeS5jLTM5NTctICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzk3NS0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6Mzk3NjpzdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbm1tL2h1Z2VfbWVtb3J5LmMtMzk3Ny1cdFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgcGFnZSAqbG9ja19hdCxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQyNDk9aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MjUzLVxubW0vaHVnZV9tZW1vcnkuYzo0MjU0Olx0cmV0dXJuIF9fZm9saW9fc3BsaXQoZm9saW8sIG5ld19vcmRlciwgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgcGFnZSwgbGlzdCxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI1NS1cdFx0XHQgICAgIFNQTElUX1RZUEVfVU5JRk9STSk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00MjgyPWludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDI4NC17XG5tbS9odWdlX21lbW9yeS5jOjQyODU6XHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgbGlzdCxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni1cdFx0XHQgICAgIFNQTElUX1RZUEVfTk9OX1VOSUZPUk0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMzUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyBUSFAgUGFnZSBTcGxpdHRpbmcqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdHJhbnNwYXJlbnQgaHVnZSBwYWdlIChUSFApIHNwbGl0dGluZy4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBzcGxpdHRpbmcgbG9naWMsIGBfX2ZvbGlvX3NwbGl0YCwgaXMgY2FsbGVkIGZyb20gYXQgbGVhc3QgdHdvIGtleSBwbGFjZXM6IGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCBhbmQgYGZvbGlvX3NwbGl0YC4gQm90aCBvZiB0aG9zZSBhcmUgcHJldHR5IGZ1bmRhbWVudGFsIHRvIHRoZSBUSFAgbWFuYWdlbWVudCB3b3JrZmxvdywgc28gdGhhdCBjb25maXJtcyBteSBpbml0aWFsIGludHVpdGlvbiB0aGF0IHRoZXkmIzM5O3JlIGltcG9ydGFudC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlIG92ZXJhbGwgc3BsaXQgaXMgaW5pdGlhdGVkLiBJIHJlbWVtYmVyIHNlZWluZyBhIGZ1bmN0aW9uIGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIGFuZCBrbm93IGl0JiMzOTtzIGxvY2F0ZWQgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBNZW1vcnkgZmFpbHVyZXMgY2FuIG9mdGVuIHRyaWdnZXIgVEhQIHNwbGl0dGluZywgc28gdGhhdCBzZWVtcyBsb2dpY2FsLgoKVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGFuYWx5emUgdGhlIGNhbGxlcnMgb2YgYHRyeV90b19zcGxpdF90aHBfcGFnZWAgdG8gc2VlIHRoZSBicm9hZGVyIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhvc2UgY2FsbCBwYXRocyBpcyBjcnVjaWFsIHRvIHByb3Blcmx5IG1hcCB0aGUgY29udHJvbCBmbG93LiBMZXQmIzM5O3MgdHJhY2UgdGhvc2UgY2FsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19zcGxpdF90aHBfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYz0xNjI5PXN0YXRpYyBpbnQgaWRlbnRpZnlfcGFnZV9zdGF0ZSh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnAsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNjU2LSAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoxNjU3OnN0YXRpYyBpbnQgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNjU4LVx0XHRib29sIHJlbGVhc2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMzM3PWludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ2Ni1cdFx0Zm9saW9fc2V0X2hhc19od3BvaXNvbmVkKGZvbGlvKTtcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjQ2NzpcdFx0ZXJyID0gdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHAsIG5ld19vcmRlciwgLyogcmVsZWFzZT0gKi8gZmFsc2UpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDY4LVx0XHQvKlxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjc4Nz1zdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4MTEtXHRcdCAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyODEyOlx0XHRpZiAobmV3X29yZGVyIHx8IHRyeV90b19zcGxpdF90aHBfcGFnZShwYWdlLCAvKiBuZXdfb3JkZXI9ICovIDAsXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4MTMtXHRcdFx0XHRcdFx0ICAgICAgIC8qIHJlbGVhc2U9ICovIHRydWUpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MTYKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHBvdGVudGlhbCBhcmVhcyB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMuIFRoaXMgaXMgdHJpZ2dlcmVkIGJ5IGJvdGggYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuIENsZWFybHksIHRoZXNlIGFyZSBib3RoIHRlc3RhYmxlIHNjZW5hcmlvczsgdGhhdCYjMzk7cyBwcm9taXNpbmcuIFNwZWNpZmljYWxseSwgYG1lbW9yeV9mYWlsdXJlYCBpcyByZWxhdGVkIHRvIG1lbW9yeSBlcnJvciBpbmplY3Rpb24g4oCTIHRoaW5ncyBsaWtlIHVzaW5nIGBtYWR2aXNlYCB3aXRoIGBNQURWX0hXUE9JU09OYCBvciBtZXNzaW5nIGFyb3VuZCB3aXRoIHN5c2ZzLiBgX19mb2xpb19zcGxpdGAsIG9uIHRoZSBvdGhlciBoYW5kLCBjb21lcyBpbnRvIHBsYXkgZHVyaW5nIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlKSBzcGxpdHRpbmcuIFRoaXMgY2FuIGhhcHBlbiBkdWUgdG8gdmFyaW91cyBgbWFkdmlzZWAgY2FsbHMgbGlrZSBgTUFEVl9QQUdFT1VUYCBvciBgTUFEVl9DT0xEYCwgbWVtb3J5IHByZXNzdXJlIGluIGdlbmVyYWwsIG9yIHdoZW4gaHVnZSBwYWdlcyBnZXQgc3BsaXQuCgpHaXZlbiB0aGUgdHJpZ2dlciBjb25kaXRpb25zLCB0aGlzIHNlZW1zIGxpa2UgYSBzb2xpZCB0YXJnZXQgZm9yIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gY29uY2VudHJhdGUgb24gc3BlY2lmaWMgc3ltYm9scyBkdXJpbmcgdGhlIGZ1enppbmc6IGBfX2ZvbGlvX3NwbGl0YCwgYHRyeV90b19zcGxpdF90aHBfcGFnZWAsIGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCwgYW5kIGBmb2xpb19zcGxpdGAuIFdhaXQsIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuLi4gYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgIGlzIGFuIGV4cG9ydGVkIGdsb2JhbCBmdW5jdGlvbi4gVGhhdCBhY3R1YWxseSBtYWtlcyB0aGluZ3MgYSBsaXR0bGUgZWFzaWVyIHRvIHRlc3QsIGRvZXNuJiMzOTt0IGl0PyBCZXR0ZXIgZ28gY2hlY2sgdGhhdCBvbmUgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxOTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTQxODI9aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MjQ4LSAqL1xubW0vaHVnZV9tZW1vcnkuYzo0MjQ5OmludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxubW0vaHVnZV9tZW1vcnkuYy00MjUwLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTcwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqQW5hbHl6aW5nIGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZ2V0IGEgZ29vZCBoYW5kbGUgb24gdGhpcyBgdHJ5X3RvX3NwbGl0X3RocF9wYWdlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UsIHdoYXQgaXRzIGlucHV0cyBhcmUsIGFuZCB3aGF0IGl0JiMzOTtzIHRyeWluZyB0byBhY2hpZXZlLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyBpdCYjMzk7cyB1c2VkIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykgbWFuYWdlbWVudC4gVGhpcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBjbHVlcyBhYm91dCBpdHMgcmVzcG9uc2liaWxpdGllcyBhbmQgcG90ZW50aWFsIGltcGFjdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNjZW5hcmlvcyB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgYW5kIHRoZSBwb3RlbnRpYWwgY29uc2VxdWVuY2VzIG9mIGEgc3VjY2Vzc2Z1bCBvciB1bnN1Y2Nlc3NmdWwgZXhlY3V0aW9uLiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGF0IHRoZSBmdW5jdGlvbiYjMzk7cyBkZWNsYXJhdGlvbiBhbmQgYW55IGFzc29jaWF0ZWQgY29tbWVudHMgdG8gZ2V0IGEgcHJlbGltaW5hcnkgZ3Jhc3Agb24gaXRzIGRlc2lnbiBpbnRlbnQuIEkga25vdyB0aGF0IFRIUCBoYW5kbGluZyBpcyBpbnRyaWNhdGUsIHNvIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X3RvX3NwbGl0X3RocF9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jPTE2Mjk9c3RhdGljIGludCBpZGVudGlmeV9wYWdlX3N0YXRlKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqcCxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2NTYtICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE2NTc6c3RhdGljIGludCB0cnlfdG9fc3BsaXRfdGhwX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2NTgtXHRcdGJvb2wgcmVsZWFzZSlcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIzMzc9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDY2LVx0XHRmb2xpb19zZXRfaGFzX2h3cG9pc29uZWQoZm9saW8pO1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDY3Olx0XHRlcnIgPSB0cnlfdG9fc3BsaXRfdGhwX3BhZ2UocCwgbmV3X29yZGVyLCAvKiByZWxlYXNlPSAqLyBmYWxzZSk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0NjgtXHRcdC8qXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNzg3PXN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjgxMS1cdFx0ICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI4MTI6XHRcdGlmIChuZXdfb3JkZXIgfHwgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHBhZ2UsIC8qIG5ld19vcmRlcj0gKi8gMCxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjgxMy1cdFx0XHRcdFx0XHQgICAgICAgLyogcmVsZWFzZT0gKi8gdHJ1ZSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE3NgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIHN5c3RlbSYjMzk7cyBtZW1vcnkgY29uZmlndXJhdGlvbi4gVGhlIGluaXRpYWwgY3VlcyBhcmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYE1FTU9SWV9GQUlMVVJFYC4gSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUsIHNvIEkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaW4gcGxheS4gSSYjMzk7bGwgbmVlZCB0byBrbm93IGFsbCB0aGUgbGV2ZXJzLiBBaCwgYE1FTU9SWV9GQUlMVVJFYCBzcGVjaWZpY2FsbHkuIEkga25vdyB0aGF0IG9uZSYjMzk7cyB1c3VhbGx5IGRlZmluZWQgaW4gYG1tL0tjb25maWdgLCB3aGljaCBjb25maXJtcyBteSB1bmRlcnN0YW5kaW5nLiBOb3cgdG8gZGlnIGRlZXBlciBhbmQgdW5kZXJzdGFuZCBob3cgYWxsIHRoZSBwaWVjZXMgaW50ZXJhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1PUllfRkFJTFVSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03NzQ9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9LY29uZmlnLTc3Ni1cbm1tL0tjb25maWc6Nzc3OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NzgtXHRkZXBlbmRzIG9uIE1NVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDY0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKk15IERlZXAgRGl2ZSBpbnRvIEh1Z2UgUGFnZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiAqVFJBTlNQQVJFTlRfSFVHRVBBR0UqLi4uIGFoLCB5ZXMsIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSwgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyAoVEhQKS4gTXkgbWVudGFsIG1hcCBpbW1lZGlhdGVseSBuYXZpZ2F0ZXMgbWUgdG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBUaGUgdmVyeSBmYWN0IHRoYXQgdGhpcyBpcyBpbiBgbW0vS2NvbmZpZ2AgY29uZmlybXMgbXkgaW5pdGlhbCB0aG91Z2h0LiBUaGF0JiMzOTtzICp0aGUqIHBsYWNlIHRvIGdvIGZvciBhbGwgdGhpbmdzIG1lbW9yeS1yZWxhdGVkIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0JiMzOTtzIHRoZSBjZW50cmFsIGh1YiBmb3IgZGVjaWRpbmcgaWYgVEhQIHN1cHBvcnQgaXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBUaGlzIGxvY2F0aW9uIHRlbGxzIG1lIHRoYXQmIzM5O3MgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHNldHRpbmcgY29udHJvbGxpbmcgVEhQLiBUaGF0IG1lYW5zIEkgY2FuIHR1bmUgb3IgZGlzYWJsZSB0aGUgc3VwcG9ydCBmb3IgdGhlbSBhdCBjb21waWxlIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04NDM9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy04NDUtXG5tbS9LY29uZmlnOjg0NjptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTg0Ny1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODY0PWNob2ljZVxuLS1cbm1tL0tjb25maWctODY5LVxubW0vS2NvbmZpZzo4NzA6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg3MS1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg3Ni1cbm1tL0tjb25maWc6ODc3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL0tjb25maWctODc4LVx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg4NS1cbm1tL0tjb25maWc6ODg2Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXG5tbS9LY29uZmlnLTg4Ny1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODkzPWNob2ljZVxuLS1cbm1tL0tjb25maWctOTAyLVxubW0vS2NvbmZpZzo5MDM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxubW0vS2NvbmZpZy05MDQtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkxMi1cbm1tL0tjb25maWc6OTEzOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTkxNC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkyMC1cbm1tL0tjb25maWc6OTIxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTIyLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MjgtXG5tbS9LY29uZmlnOjkyOTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05MzAtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz05Mzg9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05NDctXG5tbS9LY29uZmlnOjk0ODpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXG5tbS9LY29uZmlnLTk0OS1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTU2LVxubW0vS2NvbmZpZzo5NTc6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTU4LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTY0LVxubW0vS2NvbmZpZzo5NjU6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05NjYtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk3Mi1cbm1tL0tjb25maWc6OTczOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTk3NC1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTk6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM5NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgSHVnZSBQYWdlIEFsbG9jYXRpb24gRmFpbHVyZSoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIGh1Z2UgcGFnZSBhbGxvY2F0aW9uIGlzc3VlLCBhbmQgdGhlIGtleSBzdXNwZWN0cyBpbiB0aGUga2VybmVsIGNvbmZpZ3MgYXJlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kLCBxdWl0ZSBsaWtlbHksIGBNRU1PUllfRkFJTFVSRWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgY2F1c2luZyB0aGUgcHJvYmxlbS4gTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgX19mb2xpb19zcGxpdGAgZnVuY3Rpb24gd2l0aGluIGBtbS9odWdlX21lbW9yeS5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3Igc3BsaXR0aW5nIGZvbGlvcyAoYW5kIGNvbnNlcXVlbnRseSwgaHVnZSBwYWdlcykgcmVzaWRlcy4gVW5kZXJzdGFuZGluZyBob3cgYW5kIHdoZW4gYSBmb2xpbyBzcGxpdCBvY2N1cnMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBgTUVNT1JZX0ZBSUxVUkVgIG9yIG90aGVyIGFsbG9jYXRpb24tcmVsYXRlZCBlcnJvcnMsIHdpbGwgbGlrZWx5IHByb3ZpZGUgdmFsdWFibGUgaW5zaWdodHMgaW50byB0aGUgcm9vdCBjYXVzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTk6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19mb2xpb19zcGxpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0zODAwPXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zOTU1LS8qKlxubW0vaHVnZV9tZW1vcnkuYzozOTU2OiAqIF9fZm9saW9fc3BsaXQoKSAtIHNwbGl0IGEgZm9saW8gYXQgQHNwbGl0X2F0IHRvIGEgQG5ld19vcmRlciBmb2xpb1xubW0vaHVnZV9tZW1vcnkuYy0zOTU3LSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM5NzUtICovXG5tbS9odWdlX21lbW9yeS5jOjM5NzY6c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG5tbS9odWdlX21lbW9yeS5jLTM5NzctXHRcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IHBhZ2UgKmxvY2tfYXQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00MjQ5PWludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDI1My1cbm1tL2h1Z2VfbWVtb3J5LmM6NDI1NDpcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIHBhZ2UsIGxpc3QsXG5tbS9odWdlX21lbW9yeS5jLTQyNTUtXHRcdFx0ICAgICBTUExJVF9UWVBFX1VOSUZPUk0pO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDI4Mj1pbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyODQte1xubW0vaHVnZV9tZW1vcnkuYzo0Mjg1Olx0cmV0dXJuIF9fZm9saW9fc3BsaXQoZm9saW8sIG5ld19vcmRlciwgc3BsaXRfYXQsIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIGxpc3QsXG5tbS9odWdlX21lbW9yeS5jLTQyODYtXHRcdFx0ICAgICBTUExJVF9UWVBFX05PTl9VTklGT1JNKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTk6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA4MAoJCQkJCQkJb3V0cHV0OiAxNDYKCQkJCQkJCXRob3VnaHRzOiA0ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRm9saW8gU3BsaXR0aW5nIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGR1cmluZyBmb2xpbyBzcGxpdHRpbmcsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiB0cnVuY2F0aW9uLiBUaGUgYWRkaXRpb24gb2YgdGhlIGNoZWNrIHdpdGhpbiBgX19mb2xpb19zcGxpdGAgaXMgdGhlIGtleS4gVGhlIGNvZGUgbm93IHByZXZlbnRzIGEgZm9saW8gZnJvbSBiZWluZyBzcGxpdCBpZiBpdHMgaW5kZXgsIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgaW5kZXggb2YgdGhlIGxvY2tlZCBwb3J0aW9uLCBleGNlZWRzIHRoZSBlbmQgb2YgdGhlIGZpbGUuIFRoaXMgaXMgY3J1Y2lhbCBiZWNhdXNlLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHRoZSBsb2NrZWQgZm9saW8gc2VydmVzIGFzIGEgdml0YWwgcGluIG9uIHRoZSBpbm9kZS4gSWYgYSBmb2xpbyBpcyBzcGxpdCAqcGFzdCogdGhlIGVuZC1vZi1maWxlLCBpdCBjb3VsZCBiZSBkcm9wcGVkIGZyb20gdGhlIHBhZ2UgY2FjaGUgd2hpbGUgc3RpbGwgbG9ja2VkLCBsZWFkaW5nIHRvIHRoZSBpbm9kZSBiZWluZyBmcmVlZCBwcmVtYXR1cmVseS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gc2NlbmFyaW8gYW5kIGEgZGVmaW5pdGUgcHJvYmxlbS4gSXQgcHJldmVudHMgdGhlIG1hcHBpbmcgZnJvbSBiZWluZyBkZXJlZmVyZW5jZWQgYWZ0ZXIgdGhlIHNwbGl0LgoKVGhlbiB3ZSBoYXZlIGEgY2hhbmdlIHRvIGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gSXQmIzM5O3Mgbm93IGxvY2tpbmcgdGhlIGZvbGlvIGRpcmVjdGx5IGluc3RlYWQgb2YgdGhlIGluZGl2aWR1YWwgcGFnZS4gVGhlIGNvbW1lbnQgaGlnaGxpZ2h0cyB0aGF0IGBfX2ZvbGlvX3NwbGl0YCBuZWVkcyB0aGUgYW5jaG9yIGZvbGlvIGxvY2tlZCBhbmQgcHJlc2VudCBpbiB0aGUgcGFnZSBjYWNoZSB0byBjb3JyZWN0bHkgcGluIHRoZSBpbm9kZS4gVGhlIGNhbGxlciByZWxvY2tzIHRoZSBwYWdlIGFmdGVyd2FyZHMuIFRoaXMgc2VlbXMgc2Vuc2libGUsIGFzIGl0IGFsaWducyBiZXR0ZXIgd2l0aCB0aGUgZm9saW8tYmFzZWQgYXBwcm9hY2gsIGVuc3VyaW5nIHRoZSBlbnRpcmUgZm9saW8mIzM5O3Mgc3RhdGUgaXMgY29uc2lzdGVudCBkdXJpbmcgdGhlIHNwbGl0LgoKR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzLCBteSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRoaXMgYWJzb2x1dGVseSBuZWVkcyB0byBiZSBmdXp6ZWQuIFRoZSBmb2N1cyBoYXMgdG8gYmUgb24gYF9fZm9saW9fc3BsaXRgIGFuZCBgdHJ5X3RvX3NwbGl0X3RocF9wYWdlYCwgYmVjYXVzZSB0aG9zZSBhcmUgdGhlIG1vc3QgbW9kaWZpZWQgcGFydHMuIFRoZSBjb25maWdzIEkgd2FudCB0byBsb29rIGF0IGFyZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgTUVNT1JZX0ZBSUxVUkVgIGJlY2F1c2UgdGhleSYjMzk7cmUgcmVsZXZhbnQgZm9yIGhvdyB0aGUgZm9saW8gc3BsaXR0aW5nIGlzIHVzZWQsIGFuZCBpbiB0aGUgY2FzZSBvZiBgTUVNT1JZX0ZBSUxVUkVgIGl0JiMzOTtzIHJpZ2h0IGluIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbi4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgYmVjYXVzZSBJIHdhbnQgdG8gYmUgdGhvcm91Z2guIE9rYXksIHNvIGBNRU1PUllfRkFJTFVSRWAgZGVwZW5kcyBvbiBgTU1VYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgZGVwZW5kcyBvbiBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4gR29vZC4gSSYjMzk7bSBnb2luZyB0byBzZXQgdGhlc2UgcmVzdWx0cyBhbmQgZ2V0IGEgZnV6emluZyBjYW1wYWlnbiBzdGFydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxOTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2ZvbGlvX3NwbGl0JiMzNDssCiAgICAmIzM0O3RyeV90b19zcGxpdF90aHBfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGluIHRoZSBoYW5kbGluZyBvZiBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFuZCBtZW1vcnkgZmFpbHVyZS4gSXQgYWRkcyBhIGNoZWNrIGluIGBfX2ZvbGlvX3NwbGl0YCB0byBwcmV2ZW50IHNwbGl0dGluZyBhIGZvbGlvIHRoYXQgaXMgcmFjaW5nIHdpdGggdHJ1bmNhdGlvbiwgYW5kIGNoYW5nZXMgYHRyeV90b19zcGxpdF90aHBfcGFnZWAgdG8gbG9jayB0aGUgZm9saW8gaW5zdGVhZCBvZiB0aGUgcGFnZS4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2ZvbGlvX3NwbGl0JiMzNDssCiAgICAmIzM0O3RyeV90b19zcGxpdF90aHBfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGluIHRoZSBoYW5kbGluZyBvZiBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFuZCBtZW1vcnkgZmFpbHVyZS4gSXQgYWRkcyBhIGNoZWNrIGluIGBfX2ZvbGlvX3NwbGl0YCB0byBwcmV2ZW50IHNwbGl0dGluZyBhIGZvbGlvIHRoYXQgaXMgcmFjaW5nIHdpdGggdHJ1bmNhdGlvbiwgYW5kIGNoYW5nZXMgYHRyeV90b19zcGxpdF90aHBfcGFnZWAgdG8gbG9jayB0aGUgZm9saW8gaW5zdGVhZCBvZiB0aGUgcGFnZS4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE5OjM3OjU0LjUxMjU4NTIxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA5OTU0MTg1MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19mb2xpb19zcGxpdFwiLFxuICAgIFwidHJ5X3RvX3NwbGl0X3RocF9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiB0aGUgaGFuZGxpbmcgb2YgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSBhbmQgbWVtb3J5IGZhaWx1cmUuIEl0IGFkZHMgYSBjaGVjayBpbiBgX19mb2xpb19zcGxpdGAgdG8gcHJldmVudCBzcGxpdHRpbmcgYSBmb2xpbyB0aGF0IGlzIHJhY2luZyB3aXRoIHRydW5jYXRpb24sIGFuZCBjaGFuZ2VzIGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIHRvIGxvY2sgdGhlIGZvbGlvIGluc3RlYWQgb2YgdGhlIHBhZ2UuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE5OjM3OjU0LjUxMjU5NDE2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDEzMjM2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3NDZkOTVjOTE0NTUzMDllN2QzYTEyNzI2MDVkMTg2N2IxYTY3ZTJjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDE0IDE5OjM3OjUyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmhcXG5pbmRleCBhZDIwZjdmOGMxNzk0NC4uOGExMGE4ODZlNjJhZDcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdlX21tLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxcbkBAIC00MTQsMTAgKzQxNCw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzXFxuIHtcXG4gXFx0cmV0dXJuIF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIocGFnZSwgbGlzdCwgbmV3X29yZGVyKTtcXG4gfVxcbi1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuLXtcXG4tXFx0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHBhZ2UsIE5VTEwsIG5ld19vcmRlcik7XFxuLX1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbkBAIC02MjEsMTEgKzYxNyw2IEBAIHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2xcXG4tY2FuX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBjYWxsZXJfcGlucywgaW50ICpwZXh0cmFfcGlucylcXG4te1xcbi1cXHRyZXR1cm4gZmFsc2U7XFxuLX1cXG4gc3RhdGljIGlubGluZSBpbnRcXG4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuIFxcdFxcdHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuQEAgLTYzMywxMSArNjI0LDYgQEAgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuIFxcdFZNX1dBUk5fT05fT05DRV9QQUdFKDEsIHBhZ2UpO1xcbiBcXHRyZXR1cm4gLUVJTlZBTDtcXG4gfVxcbi1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuLXtcXG4tXFx0Vk1fV0FSTl9PTl9PTkNFX1BBR0UoMSwgcGFnZSk7XFxuLVxcdHJldHVybiAtRUlOVkFMO1xcbi19XFxuIHN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbiBcXHRWTV9XQVJOX09OX09OQ0VfUEFHRSgxLCBwYWdlKTtcXG5AQCAtNzk3LDE1ICs3ODMsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfcG1kX29yZGVyKHVuc2lnbmVkIGludCBvcmRlcilcXG4gXFx0cmV0dXJuIG9yZGVyID09IEhQQUdFX1BNRF9PUkRFUjtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgc3BsaXRfZm9saW9fdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi1cXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgbmV3X29yZGVyKVxcbi17XFxuLVxcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIGxpc3QsIG5ld19vcmRlcik7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIpXFxuIHtcXG4tXFx0cmV0dXJuIHNwbGl0X2ZvbGlvX3RvX2xpc3RfdG9fb3JkZXIoZm9saW8sIE5VTEwsIG5ld19vcmRlcik7XFxuK1xcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIE5VTEwsIG5ld19vcmRlcik7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IDJiY2NiMGE1M2EwYTYwLi4wZTNjYTcxNzhkOGM4NyAxMDA2NDRcXG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXFxuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xcbkBAIC00MDY1LDYgKzQwNjUsMjAgQEAgc3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuIFxcdFxcdGVuZCA9IERJVl9ST1VORF9VUChpX3NpemVfcmVhZChtYXBwaW5nLVxcdTAwM2Vob3N0KSwgUEFHRV9TSVpFKTtcXG4gXFx0XFx0aWYgKHNobWVtX21hcHBpbmcobWFwcGluZykpXFxuIFxcdFxcdFxcdGVuZCA9IHNobWVtX2ZhbGxvY2VuZChtYXBwaW5nLVxcdTAwM2Vob3N0LCBlbmQpO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQGxvY2tfYXQgaXMgcmV0dXJuZWQgbG9ja2VkIHRvIHRoZSBjYWxsZXIsIGFuZCB3aGlsZSBpdCBpc1xcbitcXHRcXHQgKiBsb2NrZWQgYW5kIHByZXNlbnQgaW4gdGhlIHBhZ2UgY2FjaGUgaXQgaXMgd2hhdCBrZWVwcyB0aGVcXG4rXFx0XFx0ICogaW5vZGUgYWxpdmU6IHRoZSBtYXBwaW5nIGlzIHN0aWxsIGRlcmVmZXJlbmNlZCBhZnRlciB0aGUgc3BsaXRcXG4rXFx0XFx0ICogKHNobWVtX3VuY2hhcmdlKCksIGlfbW1hcF91bmxvY2tfcmVhZCgpKS4gIElmIGl0IGxpZXMgYmV5b25kXFxuK1xcdFxcdCAqIEVPRiB0aGUgc3BsaXQgd291bGQgZHJvcCBpdCBmcm9tIHRoZSBwYWdlIGNhY2hlIHdoaWxlIGhhbmRpbmdcXG4rXFx0XFx0ICogaXQgYmFjayBsb2NrZWQsIHJlbW92aW5nIHRoYXQgcGluLiAgU3VjaCBhIGZvbGlvIGlzIHJhY2luZ1xcbitcXHRcXHQgKiB0cnVuY2F0aW9uIGFuZCB0aGVyZSBpcyBub3RoaW5nIHVzZWZ1bCB0byBzcGxpdDsgYmFpbCBvdXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoZm9saW8tXFx1MDAzZWluZGV4ICsgZm9saW9fcGFnZV9pZHgoZm9saW8sIGxvY2tfYXQpIFxcdTAwM2U9IGVuZCkge1xcbitcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHQvKlxcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbmluZGV4IDUxNTA4YTU1YzQwNTVlLi42OGQ0MmNiZWQ0NThlNSAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXFxuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbkBAIC0xNjU3LDExICsxNjU3LDE4IEBAIHN0YXRpYyBpbnQgaWRlbnRpZnlfcGFnZV9zdGF0ZSh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnAsXFxuIHN0YXRpYyBpbnQgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbiBcXHRcXHRib29sIHJlbGVhc2UpXFxuIHtcXG4rXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRsb2NrX3BhZ2UocGFnZSk7XFxuLVxcdHJldCA9IHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihwYWdlLCBuZXdfb3JkZXIpO1xcbi1cXHR1bmxvY2tfcGFnZShwYWdlKTtcXG4rXFx0LypcXG4rXFx0ICogTG9jayBhbmQgc3BsaXQgYXQgdGhlIGhlYWQsIG5vdCB0aGUgcG9pc29uZWQgc3VicGFnZTogX19mb2xpb19zcGxpdCgpXFxuK1xcdCAqIGtlZXBzIHRoZSBhbmNob3IgZm9saW8gbG9ja2VkIGFuZCBuZWVkcyBpdCB0byBzdGF5IGluIHRoZSBwYWdlIGNhY2hlXFxuK1xcdCAqIHRvIHBpbiB0aGUgaW5vZGUuIEEgdGFpbCBiZXlvbmQgRU9GIHdvdWxkIGJlIGRyb3BwZWQgeWV0IHJldHVybmVkXFxuK1xcdCAqIGxvY2tlZCwgbG9zaW5nIHRoYXQgcGluLiBUaGUgY2FsbGVyIHJlLWxvY2tzIEBwYWdlIGFmdGVyd2FyZHMuXFxuK1xcdCAqL1xcbitcXHRmb2xpb19sb2NrKGZvbGlvKTtcXG4rXFx0cmV0ID0gc3BsaXRfZm9saW9fdG9fb3JkZXIoZm9saW8sIG5ld19vcmRlcik7XFxuK1xcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuIFxcbiBcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJlbGVhc2UpXFxuIFxcdFxcdHB1dF9wYWdlKHBhZ2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxOTozNzo1NS4zNTQ4OTE0MTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMTUzMDk4ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZm9saW9fc3BsaXRcIixcbiAgICBcInRyeV90b19zcGxpdF90aHBfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGhhbmRsaW5nIG9mIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkgYW5kIG1lbW9yeSBmYWlsdXJlLiBJdCBhZGRzIGEgY2hlY2sgaW4gYF9fZm9saW9fc3BsaXRgIHRvIHByZXZlbnQgc3BsaXR0aW5nIGEgZm9saW8gdGhhdCBpcyByYWNpbmcgd2l0aCB0cnVuY2F0aW9uLCBhbmQgY2hhbmdlcyBgdHJ5X3RvX3NwbGl0X3RocF9wYWdlYCB0byBsb2NrIHRoZSBmb2xpbyBpbnN0ZWFkIG9mIHRoZSBwYWdlLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc0NmQ5NWM5MTQ1NTMwOWU3ZDNhMTI3MjYwNWQxODY3YjFhNjdlMmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAxNCAxOTozNzo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmhcbmluZGV4IGFkMjBmN2Y4YzE3OTQ0Li44YTEwYTg4NmU2MmFkNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxuQEAgLTQxNCwxMCArNDE0LDYgQEAgc3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXNcbiB7XG4gXHRyZXR1cm4gX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihwYWdlLCBsaXN0LCBuZXdfb3JkZXIpO1xuIH1cbi1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG4te1xuLVx0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHBhZ2UsIE5VTEwsIG5ld19vcmRlcik7XG4tfVxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG5AQCAtNjIxLDExICs2MTcsNiBAQCB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbFxuLWNhbl9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgY2FsbGVyX3BpbnMsIGludCAqcGV4dHJhX3BpbnMpXG4te1xuLVx0cmV0dXJuIGZhbHNlO1xuLX1cbiBzdGF0aWMgaW5saW5lIGludFxuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuIFx0XHR1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxuQEAgLTYzMywxMSArNjI0LDYgQEAgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4gXHRWTV9XQVJOX09OX09OQ0VfUEFHRSgxLCBwYWdlKTtcbiBcdHJldHVybiAtRUlOVkFMO1xuIH1cbi1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG4te1xuLVx0Vk1fV0FSTl9PTl9PTkNFX1BBR0UoMSwgcGFnZSk7XG4tXHRyZXR1cm4gLUVJTlZBTDtcbi19XG4gc3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbiBcdFZNX1dBUk5fT05fT05DRV9QQUdFKDEsIHBhZ2UpO1xuQEAgLTc5NywxNSArNzgzLDkgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3BtZF9vcmRlcih1bnNpZ25lZCBpbnQgb3JkZXIpXG4gXHRyZXR1cm4gb3JkZXIgPT0gSFBBR0VfUE1EX09SREVSO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9mb2xpb190b19saXN0X3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCBuZXdfb3JkZXIpXG4te1xuLVx0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIGxpc3QsIG5ld19vcmRlcik7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIpXG4ge1xuLVx0cmV0dXJuIHNwbGl0X2ZvbGlvX3RvX2xpc3RfdG9fb3JkZXIoZm9saW8sIE5VTEwsIG5ld19vcmRlcik7XG4rXHRyZXR1cm4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgTlVMTCwgbmV3X29yZGVyKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDJiY2NiMGE1M2EwYTYwLi4wZTNjYTcxNzhkOGM4NyAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC00MDY1LDYgKzQwNjUsMjAgQEAgc3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4gXHRcdGVuZCA9IERJVl9ST1VORF9VUChpX3NpemVfcmVhZChtYXBwaW5nLVx1MDAzZWhvc3QpLCBQQUdFX1NJWkUpO1xuIFx0XHRpZiAoc2htZW1fbWFwcGluZyhtYXBwaW5nKSlcbiBcdFx0XHRlbmQgPSBzaG1lbV9mYWxsb2NlbmQobWFwcGluZy1cdTAwM2Vob3N0LCBlbmQpO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBAbG9ja19hdCBpcyByZXR1cm5lZCBsb2NrZWQgdG8gdGhlIGNhbGxlciwgYW5kIHdoaWxlIGl0IGlzXG4rXHRcdCAqIGxvY2tlZCBhbmQgcHJlc2VudCBpbiB0aGUgcGFnZSBjYWNoZSBpdCBpcyB3aGF0IGtlZXBzIHRoZVxuK1x0XHQgKiBpbm9kZSBhbGl2ZTogdGhlIG1hcHBpbmcgaXMgc3RpbGwgZGVyZWZlcmVuY2VkIGFmdGVyIHRoZSBzcGxpdFxuK1x0XHQgKiAoc2htZW1fdW5jaGFyZ2UoKSwgaV9tbWFwX3VubG9ja19yZWFkKCkpLiAgSWYgaXQgbGllcyBiZXlvbmRcbitcdFx0ICogRU9GIHRoZSBzcGxpdCB3b3VsZCBkcm9wIGl0IGZyb20gdGhlIHBhZ2UgY2FjaGUgd2hpbGUgaGFuZGluZ1xuK1x0XHQgKiBpdCBiYWNrIGxvY2tlZCwgcmVtb3ZpbmcgdGhhdCBwaW4uICBTdWNoIGEgZm9saW8gaXMgcmFjaW5nXG4rXHRcdCAqIHRydW5jYXRpb24gYW5kIHRoZXJlIGlzIG5vdGhpbmcgdXNlZnVsIHRvIHNwbGl0OyBiYWlsIG91dC5cbitcdFx0ICovXG4rXHRcdGlmIChmb2xpby1cdTAwM2VpbmRleCArIGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBsb2NrX2F0KSBcdTAwM2U9IGVuZCkge1xuK1x0XHRcdHJldCA9IC1FQlVTWTtcbitcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IDUxNTA4YTU1YzQwNTVlLi42OGQ0MmNiZWQ0NThlNSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC0xNjU3LDExICsxNjU3LDE4IEBAIHN0YXRpYyBpbnQgaWRlbnRpZnlfcGFnZV9zdGF0ZSh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnAsXG4gc3RhdGljIGludCB0cnlfdG9fc3BsaXRfdGhwX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4gXHRcdGJvb2wgcmVsZWFzZSlcbiB7XG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiBcdGludCByZXQ7XG4gXG4tXHRsb2NrX3BhZ2UocGFnZSk7XG4tXHRyZXQgPSBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXIocGFnZSwgbmV3X29yZGVyKTtcbi1cdHVubG9ja19wYWdlKHBhZ2UpO1xuK1x0LypcbitcdCAqIExvY2sgYW5kIHNwbGl0IGF0IHRoZSBoZWFkLCBub3QgdGhlIHBvaXNvbmVkIHN1YnBhZ2U6IF9fZm9saW9fc3BsaXQoKVxuK1x0ICoga2VlcHMgdGhlIGFuY2hvciBmb2xpbyBsb2NrZWQgYW5kIG5lZWRzIGl0IHRvIHN0YXkgaW4gdGhlIHBhZ2UgY2FjaGVcbitcdCAqIHRvIHBpbiB0aGUgaW5vZGUuIEEgdGFpbCBiZXlvbmQgRU9GIHdvdWxkIGJlIGRyb3BwZWQgeWV0IHJldHVybmVkXG4rXHQgKiBsb2NrZWQsIGxvc2luZyB0aGF0IHBpbi4gVGhlIGNhbGxlciByZS1sb2NrcyBAcGFnZSBhZnRlcndhcmRzLlxuK1x0ICovXG4rXHRmb2xpb19sb2NrKGZvbGlvKTtcbitcdHJldCA9IHNwbGl0X2ZvbGlvX3RvX29yZGVyKGZvbGlvLCBuZXdfb3JkZXIpO1xuK1x0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcbiBcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJlbGVhc2UpXG4gXHRcdHB1dF9wYWdlKHBhZ2UpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTk6Mzc6NTUuMzU0ODkzNzAzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjEwOTY2MjY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWNlbnQgVEhQIGFuZCBNZW1vcnkgRmFpbHVyZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIGNhbiBzZWUgaXQncyB0b3VjaGluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMuIEl0J3MgYWx0ZXJpbmcgdGhyZWUgZmlsZXM6IGBpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaGAsIGBtbS9odWdlX21lbW9yeS5jYCwgYW5kIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gVGhlIGNoYW5nZXMgaW4gYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYCBpbnZvbHZlIHJlbW92aW5nIGEgZmV3IGZ1bmN0aW9uczogYHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcmAsIGBjYW5fc3BsaXRfZm9saW9gLCBhbmQgYHNwbGl0X2ZvbGlvX3RvX2xpc3RfdG9fb3JkZXJgLiAgYHNwbGl0X2ZvbGlvX3RvX29yZGVyYCBpcyBub3cgY2FsbGluZyBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgIHVuZGVyIHRoZSBob29kLiBGdW5jdGlvbmFsbHksIHRoaXMgbG9va3MgbGlrZSB0aGV5J3JlIGNvbnNvbGlkYXRpbmcgc29tZSBvZiB0aGUgc3BsaXR0aW5nIGxvZ2ljIGFuZCBtYXliZSBvcHRpbWl6aW5nIGhvdyBUSFBzIGFyZSBoYW5kbGVkLlxuXG5EaXZpbmcgZGVlcGVyIGludG8gYG1tL2h1Z2VfbWVtb3J5LmNgLCB0aGUgYWRkaXRpb24gb2YgdGhhdCBjaGVjayB3aXRoaW4gYF9fZm9saW9fc3BsaXRgIGlzIGludGVyZXN0aW5nLiBUaGUgbG9naWMgYXBwZWFycyB0byBiZSB0aGVyZSB0byBwcmV2ZW50IHNwbGl0dGluZyBhIGZvbGlvIGlmIHRoZSBkZXNpcmVkIGluZGV4IGlzIG91dHNpZGUgb2YgdGhlIHZhbGlkIHJhbmdlLiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgaGFzIGNoYW5nZXMgaW52b2x2aW5nIGxvY2tpbmcgZm9saW9zIGluc3RlYWQgb2YgcGFnZXMgaW4gYHRyeV90b19zcGxpdF90aHBfcGFnZWAgYW5kIGNhbGxpbmcgYHNwbGl0X2ZvbGlvX3RvX29yZGVyYCBpbnN0ZWFkIG9mIHRoZSBub3ctcmVtb3ZlZCBgc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyYC4gVGhpcyBmdXJ0aGVyIHN1Z2dlc3RzIGEgc2hpZnQgdG93YXJkcyB1c2luZyBmb2xpb3MgbW9yZSBkaXJlY3RseSBpbiB0aGUgc3BsaXR0aW5nIHByb2Nlc3MsIHBhcnRpY3VsYXJseSBkdXJpbmcgbWVtb3J5IGZhaWx1cmUgc2NlbmFyaW9zLlxuXG5TbywgdGhpcyBwYXRjaCBhcHBlYXJzIHRvIGJlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIGhvdyB0aGUga2VybmVsIHNwbGl0cyBUSFBzLCB3aXRoIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcuIE15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiB0aGUgY29tcGlsYXRpb24gb2YgdGhlIGZpbGVzIGludm9sdmVkLiBgbW0vaHVnZV9tZW1vcnkuY2AgZGVmaW5pdGVseSBnZXRzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZW5hYmxlZCwgYW5kIGBtbS9tZW1vcnktZmFpbHVyZS5jYCByZWxpZXMgb24gYENPTkZJR19NRU1PUllfRkFJTFVSRWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlc2UgYXJlIGNvcnJlY3RseSBzZXQgYW5kIHRoZW4gSSdsbCBkZWx2ZSBpbnRvIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIFRIUCBtYW5hZ2VtZW50IGFuZCBlcnJvciByZWNvdmVyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA3NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE5OjM4OjAxLjQ2NDU1ODUyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMDQwNzE4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgKz0gcGFnZV9jb3VudGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTk6Mzg6MDIuMTk0OTczMDI1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTczMjUxNTAyNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipJbnRlcm5hbCBBdWRpdCBcdTAwMjYgQ29nbml0aXZlIExvYWQqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgY2FzZSwgYW5kIGl0J3MgaGl0dGluZyBtZSBhZ2FpbiAtIHRoYXQgY29nbml0aXZlIGxvYWQgaXMgYSByZWFsIGZhY3RvciBoZXJlLiBXZSd2ZSBnb3QgYSBjb21wbGV4IHN5c3RlbSwgYSBtdWx0aXR1ZGUgb2YgdmFyaWFibGVzLCBhbmQgSSdtIHRyeWluZyB0byBtYWtlIGEganVkZ21lbnQgY2FsbC4gSSdtIHRha2luZyBpbiBpbmZvcm1hdGlvbiwgZmlsdGVyaW5nIGl0LCBhc3Nlc3NpbmcgcmlzaywgYW5kIGZvcm11bGF0aW5nIGEgcmVjb21tZW5kYXRpb24uIEl0J3MgYSBsb3QsIGFuZCBmcmFua2x5LCBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhpcyBraW5kIG9mIHNpdHVhdGlvbiBpcyB3aGVuIHN1YnRsZSBlcnJvcnMgY3JlZXAgaW4sIGFuZCBiaWFzZXMgY2FuIGJlY29tZSB2ZXJ5IHByZXZhbGVudC4gQW5kLCBJIGtub3cgbWVtb3J5IGlzIGdvaW5nIHRvIGJlIGEga2V5IGZhY3Rvci4gXG5cbkknbSBzdGFydGluZyB0byB0aGluayBhYm91dCB0aGlzIGluIHRoZSBjb250ZXh0IG9mIHJlY2VudCByZXNlYXJjaCBJJ3ZlIGJlZW4gcmVhZGluZyBpbiB0aGUgZmllbGQuIFRoaXMgd2hvbGUgcHJvY2VzcyBpcyBjaGFsbGVuZ2luZyBteSBhYmlsaXR5IHRvIGFjY3VyYXRlbHkgcmVjYWxsIGFsbCB0aGUgZGF0YSwgZXZlcnkgcHJlY2VkZW50LCBhbmQgZXZlcnkgcmVsZXZhbnQgcmVndWxhdGlvbi4gSXQncyBub3QgYWJvdXQgaW50ZWxsaWdlbmNlOyBpdCdzIGFib3V0IHRoZSBpbmhlcmVudCBsaW1pdGF0aW9ucyBvZiB0aGUgaHVtYW4gYnJhaW4uIFRoaXMgcHJlc3N1cmUgdG8gcXVpY2tseSByZWFjaCBhIGRlY2lzaW9uIGlzIHdoYXQgaW5jcmVhc2VzIHRoZSBjaGFuY2Ugb2YgZXJyb3IuXG5cbkFuZCB0aGVuIEknbSBoaXQgYnkgYSBuYWdnaW5nIHRob3VnaHQgYWJvdXQgbWVtb3J5IGZhaWx1cmUsIG9mIGNvdXJzZS4gSSd2ZSBiZWVuIHRocm91Z2ggZW5vdWdoIHNpdHVhdGlvbnMgdG8ga25vdyB0aGF0IHJlY2FsbGluZyBzcGVjaWZpYyBkZXRhaWxzLCBwYXJ0aWN1bGFybHkgdGhvc2UgZnJvbSB0aGUgbGVzcyByZWNlbnQgcGFzdCwgY2FuIGJlY29tZSBhIHByb2JsZW0uIEknbSB3b3JyaWVkIGFib3V0IGZvcmdldHRpbmcgYSBjcnVjaWFsIGVsZW1lbnQgb2YgdGhpcyBjYXNlLiBXaGF0IGlmIEknbSBub3QgYnJpbmdpbmcgYWxsIHRoZSByZWxldmFudCBkZXRhaWxzIHRvIGJlYXI/IFRoaXMgYW54aWV0eSBhcm91bmQgYWNjdXJhY3kgaGFzIGFsd2F5cyBiZWVuIHRoZSBtb3N0IHByZXNzaW5nIGZhY3RvciBpbiBteSB3b3JrLCBhbmQgaXQncyB3aHkgSSBhbHdheXMgZW1waGFzaXplIHRoZSB2YWx1ZSBvZiBkb2N1bWVudGluZyB0aGluZ3MgbWV0aG9kaWNhbGx5IGFuZCB1c2luZyBhIGNoZWNrbGlzdCB0byBtaW5pbWl6ZSBhbnkgb3ZlcnNpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDA3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxOTozODoxOS41MjAxMjU0ODZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk0NjE5NjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19NRU1PUllfRkFJTFVSRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMTE9b2JqLSQoQ09ORklHX0RNQVBPT0xfVEVTVCkgKz0gZG1hcG9vbF90ZXN0Lm9cXG5tbS9NYWtlZmlsZToxMTI6b2JqLSQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSArPSBtZW1vcnktZmFpbHVyZS5vXFxubW0vTWFrZWZpbGUtMTEzLW9iai0kKENPTkZJR19IV1BPSVNPTl9JTkpFQ1QpICs9IGh3cG9pc29uLWluamVjdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE5OjM4OjIwLjIxNDc1MDM1MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODgyODc1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCB3ZXJlIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gRm9saW8gU3BsaXR0aW5nIE1vZGlmaWNhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBzb21lIHJlY2VudCBtb2RpZmljYXRpb25zLCBzcGVjaWZpY2FsbHkgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFRoZSBrZXkgZnVuY3Rpb25zIG9mIGludGVyZXN0IGFyZSBgX19mb2xpb19zcGxpdGAgYW5kIGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBzY29wZSBvZiBgX19mb2xpb19zcGxpdGAuIElzIGl0IHN0YXRpYywgbWVhbmluZyBpdCdzIGludGVybmFsIHRvIHRoZSBmaWxlLCBvciBpcyBpdCBleHBvcnRlZCBmb3IgdXNlIGVsc2V3aGVyZT8gWWVwLCBpdCdzIHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSBjb25zdHJhaW5zIHdoZXJlIEkgbmVlZCB0byBsb29rIGZvciBpbXBhY3RzIG9mIGNoYW5nZXMuIE5vdywgdGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiBpczogV2hhdCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5ICpjYWxsaW5nKiBgX19mb2xpb19zcGxpdGA/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkIGFuZCB3aGVyZSB0aGVzZSBwb3RlbnRpYWwgY2hhbmdlcyBtaWdodCByaXBwbGUgb3V0LiBLbm93aW5nIHRoYXQgd2lsbCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gdGhlIHBvc3NpYmxlIGNvbnNlcXVlbmNlcyBvZiB0aGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ3OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE5OjM4OjIzLjUwMzA0MDQ2NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUzNDg1MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19mb2xpb19zcGxpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdlX21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9MzgwMD1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zOTU1LS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk1NjogKiBfX2ZvbGlvX3NwbGl0KCkgLSBzcGxpdCBhIGZvbGlvIGF0IEBzcGxpdF9hdCB0byBhIEBuZXdfb3JkZXIgZm9saW9cXG5tbS9odWdlX21lbW9yeS5jLTM5NTctICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zOTc1LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk3NjpzdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG5tbS9odWdlX21lbW9yeS5jLTM5NzctXFx0XFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgcGFnZSAqbG9ja19hdCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDI0OT1pbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI1My1cXG5tbS9odWdlX21lbW9yeS5jOjQyNTQ6XFx0cmV0dXJuIF9fZm9saW9fc3BsaXQoZm9saW8sIG5ld19vcmRlciwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBwYWdlLCBsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI1NS1cXHRcXHRcXHQgICAgIFNQTElUX1RZUEVfVU5JRk9STSk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQyODI9aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyODQte1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NTpcXHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni1cXHRcXHRcXHQgICAgIFNQTElUX1RZUEVfTk9OX1VOSUZPUk0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxOTozODoyMy42MzgzOTU5OTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTMxNTE2NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyBUSFAgUGFnZSBTcGxpdHRpbmcqKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHRyYW5zcGFyZW50IGh1Z2UgcGFnZSAoVEhQKSBzcGxpdHRpbmcuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgc3BsaXR0aW5nIGxvZ2ljLCBgX19mb2xpb19zcGxpdGAsIGlzIGNhbGxlZCBmcm9tIGF0IGxlYXN0IHR3byBrZXkgcGxhY2VzOiBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAgYW5kIGBmb2xpb19zcGxpdGAuIEJvdGggb2YgdGhvc2UgYXJlIHByZXR0eSBmdW5kYW1lbnRhbCB0byB0aGUgVEhQIG1hbmFnZW1lbnQgd29ya2Zsb3csIHNvIHRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCBpbnR1aXRpb24gdGhhdCB0aGV5J3JlIGltcG9ydGFudC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGUgb3ZlcmFsbCBzcGxpdCBpcyBpbml0aWF0ZWQuIEkgcmVtZW1iZXIgc2VlaW5nIGEgZnVuY3Rpb24gYHRyeV90b19zcGxpdF90aHBfcGFnZWAgYW5kIGtub3cgaXQncyBsb2NhdGVkIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gTWVtb3J5IGZhaWx1cmVzIGNhbiBvZnRlbiB0cmlnZ2VyIFRIUCBzcGxpdHRpbmcsIHNvIHRoYXQgc2VlbXMgbG9naWNhbC5cblxuVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGFuYWx5emUgdGhlIGNhbGxlcnMgb2YgYHRyeV90b19zcGxpdF90aHBfcGFnZWAgdG8gc2VlIHRoZSBicm9hZGVyIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhvc2UgY2FsbCBwYXRocyBpcyBjcnVjaWFsIHRvIHByb3Blcmx5IG1hcCB0aGUgY29udHJvbCBmbG93LiBMZXQncyB0cmFjZSB0aG9zZSBjYWxscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIzNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE5OjM4OjMwLjU2OTkyOTkwM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NTc0NTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19zcGxpdF90aHBfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmM9MTYyOT1zdGF0aWMgaW50IGlkZW50aWZ5X3BhZ2Vfc3RhdGUodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlICpwLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNjU2LSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTY1NzpzdGF0aWMgaW50IHRyeV90b19zcGxpdF90aHBfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2NTgtXFx0XFx0Ym9vbCByZWxlYXNlKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMzM3PWludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDY2LVxcdFxcdGZvbGlvX3NldF9oYXNfaHdwb2lzb25lZChmb2xpbyk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDY3OlxcdFxcdGVyciA9IHRyeV90b19zcGxpdF90aHBfcGFnZShwLCBuZXdfb3JkZXIsIC8qIHJlbGVhc2U9ICovIGZhbHNlKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0NjgtXFx0XFx0LypcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjc4Nz1zdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjgxMS1cXHRcXHQgKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI4MTI6XFx0XFx0aWYgKG5ld19vcmRlciB8fCB0cnlfdG9fc3BsaXRfdGhwX3BhZ2UocGFnZSwgLyogbmV3X29yZGVyPSAqLyAwLFxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjgxMy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgLyogcmVsZWFzZT0gKi8gdHJ1ZSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTk6Mzg6MzAuNzM1NTEwMjhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzcxOTIwNTQwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHBvdGVudGlhbCBhcmVhcyB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMuIFRoaXMgaXMgdHJpZ2dlcmVkIGJ5IGJvdGggYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuIENsZWFybHksIHRoZXNlIGFyZSBib3RoIHRlc3RhYmxlIHNjZW5hcmlvczsgdGhhdCdzIHByb21pc2luZy4gU3BlY2lmaWNhbGx5LCBgbWVtb3J5X2ZhaWx1cmVgIGlzIHJlbGF0ZWQgdG8gbWVtb3J5IGVycm9yIGluamVjdGlvbiDigJMgdGhpbmdzIGxpa2UgdXNpbmcgYG1hZHZpc2VgIHdpdGggYE1BRFZfSFdQT0lTT05gIG9yIG1lc3NpbmcgYXJvdW5kIHdpdGggc3lzZnMuIGBfX2ZvbGlvX3NwbGl0YCwgb24gdGhlIG90aGVyIGhhbmQsIGNvbWVzIGludG8gcGxheSBkdXJpbmcgVEhQIChUcmFuc3BhcmVudCBIdWdlIFBhZ2UpIHNwbGl0dGluZy4gVGhpcyBjYW4gaGFwcGVuIGR1ZSB0byB2YXJpb3VzIGBtYWR2aXNlYCBjYWxscyBsaWtlIGBNQURWX1BBR0VPVVRgIG9yIGBNQURWX0NPTERgLCBtZW1vcnkgcHJlc3N1cmUgaW4gZ2VuZXJhbCwgb3Igd2hlbiBodWdlIHBhZ2VzIGdldCBzcGxpdC5cblxuR2l2ZW4gdGhlIHRyaWdnZXIgY29uZGl0aW9ucywgdGhpcyBzZWVtcyBsaWtlIGEgc29saWQgdGFyZ2V0IGZvciBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gY29uY2VudHJhdGUgb24gc3BlY2lmaWMgc3ltYm9scyBkdXJpbmcgdGhlIGZ1enppbmc6IGBfX2ZvbGlvX3NwbGl0YCwgYHRyeV90b19zcGxpdF90aHBfcGFnZWAsIGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCwgYW5kIGBmb2xpb19zcGxpdGAuIFdhaXQsIHRoYXQncyBpbnRlcmVzdGluZy4uLiBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAgaXMgYW4gZXhwb3J0ZWQgZ2xvYmFsIGZ1bmN0aW9uLiBUaGF0IGFjdHVhbGx5IG1ha2VzIHRoaW5ncyBhIGxpdHRsZSBlYXNpZXIgdG8gdGVzdCwgZG9lc24ndCBpdD8gQmV0dGVyIGdvIGNoZWNrIHRoYXQgb25lIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkxNiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxOTozODozOC40NTQ3MTc1NzRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjMwODM2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz00MTgyPWludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MjQ4LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI0OTppbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG5tbS9odWdlX21lbW9yeS5jLTQyNTAtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxOTozODozOC41NjEwMzA4OTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2NTA4ODMzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczpcblxuKipBbmFseXppbmcgYHRyeV90b19zcGxpdF90aHBfcGFnZWAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGdldCBhIGdvb2QgaGFuZGxlIG9uIHRoaXMgYHRyeV90b19zcGxpdF90aHBfcGFnZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlLCB3aGF0IGl0cyBpbnB1dHMgYXJlLCBhbmQgd2hhdCBpdCdzIHRyeWluZyB0byBhY2hpZXZlLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IGl0J3MgdXNlZCB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpIG1hbmFnZW1lbnQuIFRoaXMgd2lsbCBnaXZlIG1lIGNydWNpYWwgY2x1ZXMgYWJvdXQgaXRzIHJlc3BvbnNpYmlsaXRpZXMgYW5kIHBvdGVudGlhbCBpbXBhY3QuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY2VuYXJpb3Mgd2hlcmUgaXQncyBjYWxsZWQgYW5kIHRoZSBwb3RlbnRpYWwgY29uc2VxdWVuY2VzIG9mIGEgc3VjY2Vzc2Z1bCBvciB1bnN1Y2Nlc3NmdWwgZXhlY3V0aW9uLiBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGZ1bmN0aW9uJ3MgZGVjbGFyYXRpb24gYW5kIGFueSBhc3NvY2lhdGVkIGNvbW1lbnRzIHRvIGdldCBhIHByZWxpbWluYXJ5IGdyYXNwIG9uIGl0cyBkZXNpZ24gaW50ZW50LiBJIGtub3cgdGhhdCBUSFAgaGFuZGxpbmcgaXMgaW50cmljYXRlLCBzbyBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU3MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE5OjM4OjQzLjYyNjEyMThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MDA4MzQ5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fc3BsaXRfdGhwX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jPTE2Mjk9c3RhdGljIGludCBpZGVudGlmeV9wYWdlX3N0YXRlKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqcCxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTY1Ni0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE2NTc6c3RhdGljIGludCB0cnlfdG9fc3BsaXRfdGhwX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNjU4LVxcdFxcdGJvb2wgcmVsZWFzZSlcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjMzNz1pbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ2Ni1cXHRcXHRmb2xpb19zZXRfaGFzX2h3cG9pc29uZWQoZm9saW8pO1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjQ2NzpcXHRcXHRlcnIgPSB0cnlfdG9fc3BsaXRfdGhwX3BhZ2UocCwgbmV3X29yZGVyLCAvKiByZWxlYXNlPSAqLyBmYWxzZSk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDY4LVxcdFxcdC8qXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI3ODc9c3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4MTEtXFx0XFx0ICovXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyODEyOlxcdFxcdGlmIChuZXdfb3JkZXIgfHwgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHBhZ2UsIC8qIG5ld19vcmRlcj0gKi8gMCxcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4MTMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIC8qIHJlbGVhc2U9ICovIHRydWUpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE5OjM4OjQ0LjI4NjIxMDQ1N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjc0MzEyMTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gSSdtIGxvb2tpbmcgYXQgdGhlIHN5c3RlbSdzIG1lbW9yeSBjb25maWd1cmF0aW9uLiBUaGUgaW5pdGlhbCBjdWVzIGFyZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgTUVNT1JZX0ZBSUxVUkVgLiBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSwgc28gSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyBpbiBwbGF5LiBJJ2xsIG5lZWQgdG8ga25vdyBhbGwgdGhlIGxldmVycy4gQWgsIGBNRU1PUllfRkFJTFVSRWAgc3BlY2lmaWNhbGx5LiBJIGtub3cgdGhhdCBvbmUncyB1c3VhbGx5IGRlZmluZWQgaW4gYG1tL0tjb25maWdgLCB3aGljaCBjb25maXJtcyBteSB1bmRlcnN0YW5kaW5nLiBOb3cgdG8gZGlnIGRlZXBlciBhbmQgdW5kZXJzdGFuZCBob3cgYWxsIHRoZSBwaWVjZXMgaW50ZXJhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNzYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxOTozODo0OC41NjA1MjQ5NDFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODQ3MjE4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0ZBSUxVUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTc3ND1jb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbi0tXFxubW0vS2NvbmZpZy03NzYtXFxubW0vS2NvbmZpZzo3Nzc6Y29uZmlnIE1FTU9SWV9GQUlMVVJFXFxubW0vS2NvbmZpZy03NzgtXFx0ZGVwZW5kcyBvbiBNTVVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTk6Mzg6NDguNzE5MDAyMjc3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NDQ0NDA1OTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipNeSBEZWVwIERpdmUgaW50byBIdWdlIFBhZ2VzKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uICpUUkFOU1BBUkVOVF9IVUdFUEFHRSouLi4gYWgsIHllcywgSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHksIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgKFRIUCkuIE15IG1lbnRhbCBtYXAgaW1tZWRpYXRlbHkgbmF2aWdhdGVzIG1lIHRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhlIHZlcnkgZmFjdCB0aGF0IHRoaXMgaXMgaW4gYG1tL0tjb25maWdgIGNvbmZpcm1zIG15IGluaXRpYWwgdGhvdWdodC4gVGhhdCdzICp0aGUqIHBsYWNlIHRvIGdvIGZvciBhbGwgdGhpbmdzIG1lbW9yeS1yZWxhdGVkIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0J3MgdGhlIGNlbnRyYWwgaHViIGZvciBkZWNpZGluZyBpZiBUSFAgc3VwcG9ydCBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgbG9jYXRpb24gdGVsbHMgbWUgdGhhdCdzIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzZXR0aW5nIGNvbnRyb2xsaW5nIFRIUC4gVGhhdCBtZWFucyBJIGNhbiB0dW5lIG9yIGRpc2FibGUgdGhlIHN1cHBvcnQgZm9yIHRoZW0gYXQgY29tcGlsZSB0aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDY0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTk6Mzk6MDQuMTYzNDEwOTk2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzY5MjU0MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04NDM9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTg0NS1cXG5tbS9LY29uZmlnOjg0NjptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04NDctXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODY0PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04NjktXFxubW0vS2NvbmZpZzo4NzA6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL0tjb25maWctODcxLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctODc2LVxcbm1tL0tjb25maWc6ODc3OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxubW0vS2NvbmZpZy04NzgtXFx0XFx0Ym9vbCBcXFwibWFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODg1LVxcbm1tL0tjb25maWc6ODg2OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxcbm1tL0tjb25maWctODg3LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZz04OTM9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTkwMi1cXG5tbS9LY29uZmlnOjkwMzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxcbm1tL0tjb25maWctOTA0LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MTItXFxubW0vS2NvbmZpZzo5MTM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05MTQtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MjAtXFxubW0vS2NvbmZpZzo5MjE6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTkyMi1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTI4LVxcbm1tL0tjb25maWc6OTI5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTMwLVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9OTM4PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05NDctXFxubW0vS2NvbmZpZzo5NDg6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTk0OS1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTU2LVxcbm1tL0tjb25maWc6OTU3OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTU4LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTY0LVxcbm1tL0tjb25maWc6OTY1OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05NjYtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk3Mi1cXG5tbS9LY29uZmlnOjk3MzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTk3NC1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE5OjM5OjA0LjQ0MDM2NDc0MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODc1NjMzMjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEh1Z2UgUGFnZSBBbGxvY2F0aW9uIEZhaWx1cmUqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGEgaHVnZSBwYWdlIGFsbG9jYXRpb24gaXNzdWUsIGFuZCB0aGUga2V5IHN1c3BlY3RzIGluIHRoZSBrZXJuZWwgY29uZmlncyBhcmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQsIHF1aXRlIGxpa2VseSwgYE1FTU9SWV9GQUlMVVJFYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGNhdXNpbmcgdGhlIHByb2JsZW0uIE15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgX19mb2xpb19zcGxpdGAgZnVuY3Rpb24gd2l0aGluIGBtbS9odWdlX21lbW9yeS5jYC4gVGhhdCdzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciBzcGxpdHRpbmcgZm9saW9zIChhbmQgY29uc2VxdWVudGx5LCBodWdlIHBhZ2VzKSByZXNpZGVzLiBVbmRlcnN0YW5kaW5nIGhvdyBhbmQgd2hlbiBhIGZvbGlvIHNwbGl0IG9jY3VycywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIGBNRU1PUllfRkFJTFVSRWAgb3Igb3RoZXIgYWxsb2NhdGlvbi1yZWxhdGVkIGVycm9ycywgd2lsbCBsaWtlbHkgcHJvdmlkZSB2YWx1YWJsZSBpbnNpZ2h0cyBpbnRvIHRoZSByb290IGNhdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mzk2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTk6Mzk6MDcuMzE2MDAwNjgzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjgyNjkwNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19mb2xpb19zcGxpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdlX21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9MzgwMD1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zOTU1LS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk1NjogKiBfX2ZvbGlvX3NwbGl0KCkgLSBzcGxpdCBhIGZvbGlvIGF0IEBzcGxpdF9hdCB0byBhIEBuZXdfb3JkZXIgZm9saW9cXG5tbS9odWdlX21lbW9yeS5jLTM5NTctICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zOTc1LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk3NjpzdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG5tbS9odWdlX21lbW9yeS5jLTM5NzctXFx0XFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgcGFnZSAqbG9ja19hdCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDI0OT1pbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI1My1cXG5tbS9odWdlX21lbW9yeS5jOjQyNTQ6XFx0cmV0dXJuIF9fZm9saW9fc3BsaXQoZm9saW8sIG5ld19vcmRlciwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBwYWdlLCBsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI1NS1cXHRcXHRcXHQgICAgIFNQTElUX1RZUEVfVU5JRk9STSk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQyODI9aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyODQte1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NTpcXHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni1cXHRcXHRcXHQgICAgIFNQTElUX1RZUEVfTk9OX1VOSUZPUk0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxOTozOTowNy40ODQyNzg4MjlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc1ODAyNDk2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBGb2xpbyBTcGxpdHRpbmcgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGR1cmluZyBmb2xpbyBzcGxpdHRpbmcsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiB0cnVuY2F0aW9uLiBUaGUgYWRkaXRpb24gb2YgdGhlIGNoZWNrIHdpdGhpbiBgX19mb2xpb19zcGxpdGAgaXMgdGhlIGtleS4gVGhlIGNvZGUgbm93IHByZXZlbnRzIGEgZm9saW8gZnJvbSBiZWluZyBzcGxpdCBpZiBpdHMgaW5kZXgsIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgaW5kZXggb2YgdGhlIGxvY2tlZCBwb3J0aW9uLCBleGNlZWRzIHRoZSBlbmQgb2YgdGhlIGZpbGUuIFRoaXMgaXMgY3J1Y2lhbCBiZWNhdXNlLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHRoZSBsb2NrZWQgZm9saW8gc2VydmVzIGFzIGEgdml0YWwgcGluIG9uIHRoZSBpbm9kZS4gSWYgYSBmb2xpbyBpcyBzcGxpdCAqcGFzdCogdGhlIGVuZC1vZi1maWxlLCBpdCBjb3VsZCBiZSBkcm9wcGVkIGZyb20gdGhlIHBhZ2UgY2FjaGUgd2hpbGUgc3RpbGwgbG9ja2VkLCBsZWFkaW5nIHRvIHRoZSBpbm9kZSBiZWluZyBmcmVlZCBwcmVtYXR1cmVseS4gVGhhdCdzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBzY2VuYXJpbyBhbmQgYSBkZWZpbml0ZSBwcm9ibGVtLiBJdCBwcmV2ZW50cyB0aGUgbWFwcGluZyBmcm9tIGJlaW5nIGRlcmVmZXJlbmNlZCBhZnRlciB0aGUgc3BsaXQuXG5cblRoZW4gd2UgaGF2ZSBhIGNoYW5nZSB0byBgdHJ5X3RvX3NwbGl0X3RocF9wYWdlYCBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIEl0J3Mgbm93IGxvY2tpbmcgdGhlIGZvbGlvIGRpcmVjdGx5IGluc3RlYWQgb2YgdGhlIGluZGl2aWR1YWwgcGFnZS4gVGhlIGNvbW1lbnQgaGlnaGxpZ2h0cyB0aGF0IGBfX2ZvbGlvX3NwbGl0YCBuZWVkcyB0aGUgYW5jaG9yIGZvbGlvIGxvY2tlZCBhbmQgcHJlc2VudCBpbiB0aGUgcGFnZSBjYWNoZSB0byBjb3JyZWN0bHkgcGluIHRoZSBpbm9kZS4gVGhlIGNhbGxlciByZWxvY2tzIHRoZSBwYWdlIGFmdGVyd2FyZHMuIFRoaXMgc2VlbXMgc2Vuc2libGUsIGFzIGl0IGFsaWducyBiZXR0ZXIgd2l0aCB0aGUgZm9saW8tYmFzZWQgYXBwcm9hY2gsIGVuc3VyaW5nIHRoZSBlbnRpcmUgZm9saW8ncyBzdGF0ZSBpcyBjb25zaXN0ZW50IGR1cmluZyB0aGUgc3BsaXQuXG5cbkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlcywgbXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGFic29sdXRlbHkgbmVlZHMgdG8gYmUgZnV6emVkLiBUaGUgZm9jdXMgaGFzIHRvIGJlIG9uIGBfX2ZvbGlvX3NwbGl0YCBhbmQgYHRyeV90b19zcGxpdF90aHBfcGFnZWAsIGJlY2F1c2UgdGhvc2UgYXJlIHRoZSBtb3N0IG1vZGlmaWVkIHBhcnRzLiBUaGUgY29uZmlncyBJIHdhbnQgdG8gbG9vayBhdCBhcmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYE1FTU9SWV9GQUlMVVJFYCBiZWNhdXNlIHRoZXkncmUgcmVsZXZhbnQgZm9yIGhvdyB0aGUgZm9saW8gc3BsaXR0aW5nIGlzIHVzZWQsIGFuZCBpbiB0aGUgY2FzZSBvZiBgTUVNT1JZX0ZBSUxVUkVgIGl0J3MgcmlnaHQgaW4gdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGJlY2F1c2UgSSB3YW50IHRvIGJlIHRob3JvdWdoLiBPa2F5LCBzbyBgTUVNT1JZX0ZBSUxVUkVgIGRlcGVuZHMgb24gYE1NVWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGRlcGVuZHMgb24gYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEdvb2QuIEknbSBnb2luZyB0byBzZXQgdGhlc2UgcmVzdWx0cyBhbmQgZ2V0IGEgZnV6emluZyBjYW1wYWlnbiBzdGFydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDgwLCJPdXRwdXRUb2tlbnMiOjE0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxOTozOToxNS4yNDIzMDcxMzNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjU2NzY5NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZm9saW9fc3BsaXRcIixcbiAgICBcInRyeV90b19zcGxpdF90aHBfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGhhbmRsaW5nIG9mIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkgYW5kIG1lbW9yeSBmYWlsdXJlLiBJdCBhZGRzIGEgY2hlY2sgaW4gYF9fZm9saW9fc3BsaXRgIHRvIHByZXZlbnQgc3BsaXR0aW5nIGEgZm9saW8gdGhhdCBpcyByYWNpbmcgd2l0aCB0cnVuY2F0aW9uLCBhbmQgY2hhbmdlcyBgdHJ5X3RvX3NwbGl0X3RocF9wYWdlYCB0byBsb2NrIHRoZSBmb2xpbyBpbnN0ZWFkIG9mIHRoZSBwYWdlLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZm9saW9fc3BsaXRcIixcbiAgICBcInRyeV90b19zcGxpdF90aHBfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGhhbmRsaW5nIG9mIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkgYW5kIG1lbW9yeSBmYWlsdXJlLiBJdCBhZGRzIGEgY2hlY2sgaW4gYF9fZm9saW9fc3BsaXRgIHRvIHByZXZlbnQgc3BsaXR0aW5nIGEgZm9saW8gdGhhdCBpcyByYWNpbmcgd2l0aCB0cnVuY2F0aW9uLCBhbmQgY2hhbmdlcyBgdHJ5X3RvX3NwbGl0X3RocF9wYWdlYCB0byBsb2NrIHRoZSBmb2xpbyBpbnN0ZWFkIG9mIHRoZSBwYWdlLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmzlcq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-14 18:57:41 +0000 UTC FinishedAt: 2026-07-14 19:39:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "MEMORY_FAILURE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "MEMORY_FAILURE" ], "series_id": "6cad3430-1f9b-4a56-b60a-ef3ed2833e15" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__folio_split", "try_to_split_thp_page" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE0IDE5OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19mb2xpb19zcGxpdCYjMzQ7LAogICAgJiMzNDt0cnlfdG9fc3BsaXRfdGhwX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiB0aGUgaGFuZGxpbmcgb2YgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSBhbmQgbWVtb3J5IGZhaWx1cmUuIEl0IGFkZHMgYSBjaGVjayBpbiBgX19mb2xpb19zcGxpdGAgdG8gcHJldmVudCBzcGxpdHRpbmcgYSBmb2xpbyB0aGF0IGlzIHJhY2luZyB3aXRoIHRydW5jYXRpb24sIGFuZCBjaGFuZ2VzIGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIHRvIGxvY2sgdGhlIGZvbGlvIGluc3RlYWQgb2YgdGhlIHBhZ2UuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTk6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3NDZkOTVjOTE0NTUzMDllN2QzYTEyNzI2MDVkMTg2N2IxYTY3ZTJjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMTQgMTk6Mzc6NTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdlX21tLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxuaW5kZXggYWQyMGY3ZjhjMTc5NDQuLjhhMTBhODg2ZTYyYWQ3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdlX21tLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oXG5AQCAtNDE0LDEwICYjNDM7NDE0LDYgQEAgc3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXNcbiB7XG4gXHRyZXR1cm4gX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihwYWdlLCBsaXN0LCBuZXdfb3JkZXIpO1xuIH1cbi1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG4te1xuLVx0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHBhZ2UsIE5VTEwsIG5ld19vcmRlcik7XG4tfVxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG5AQCAtNjIxLDExICYjNDM7NjE3LDYgQEAgdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2xcbi1jYW5fc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGNhbGxlcl9waW5zLCBpbnQgKnBleHRyYV9waW5zKVxuLXtcbi1cdHJldHVybiBmYWxzZTtcbi19XG4gc3RhdGljIGlubGluZSBpbnRcbiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbiBcdFx0dW5zaWduZWQgaW50IG5ld19vcmRlcilcbkBAIC02MzMsMTEgJiM0Mzs2MjQsNiBAQCBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbiBcdFZNX1dBUk5fT05fT05DRV9QQUdFKDEsIHBhZ2UpO1xuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuLXN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbi17XG4tXHRWTV9XQVJOX09OX09OQ0VfUEFHRSgxLCBwYWdlKTtcbi1cdHJldHVybiAtRUlOVkFMO1xuLX1cbiBzdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuIFx0Vk1fV0FSTl9PTl9PTkNFX1BBR0UoMSwgcGFnZSk7XG5AQCAtNzk3LDE1ICYjNDM7NzgzLDkgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3BtZF9vcmRlcih1bnNpZ25lZCBpbnQgb3JkZXIpXG4gXHRyZXR1cm4gb3JkZXIgPT0gSFBBR0VfUE1EX09SREVSO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9mb2xpb190b19saXN0X3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCBuZXdfb3JkZXIpXG4te1xuLVx0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIGxpc3QsIG5ld19vcmRlcik7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIpXG4ge1xuLVx0cmV0dXJuIHNwbGl0X2ZvbGlvX3RvX2xpc3RfdG9fb3JkZXIoZm9saW8sIE5VTEwsIG5ld19vcmRlcik7XG4mIzQzO1x0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIE5VTEwsIG5ld19vcmRlcik7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAyYmNjYjBhNTNhMGE2MC4uMGUzY2E3MTc4ZDhjODcgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtNDA2NSw2ICYjNDM7NDA2NSwyMCBAQCBzdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbiBcdFx0ZW5kID0gRElWX1JPVU5EX1VQKGlfc2l6ZV9yZWFkKG1hcHBpbmctXHUwMDNlaG9zdCksIFBBR0VfU0laRSk7XG4gXHRcdGlmIChzaG1lbV9tYXBwaW5nKG1hcHBpbmcpKVxuIFx0XHRcdGVuZCA9IHNobWVtX2ZhbGxvY2VuZChtYXBwaW5nLVx1MDAzZWhvc3QsIGVuZCk7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEBsb2NrX2F0IGlzIHJldHVybmVkIGxvY2tlZCB0byB0aGUgY2FsbGVyLCBhbmQgd2hpbGUgaXQgaXNcbiYjNDM7XHRcdCAqIGxvY2tlZCBhbmQgcHJlc2VudCBpbiB0aGUgcGFnZSBjYWNoZSBpdCBpcyB3aGF0IGtlZXBzIHRoZVxuJiM0MztcdFx0ICogaW5vZGUgYWxpdmU6IHRoZSBtYXBwaW5nIGlzIHN0aWxsIGRlcmVmZXJlbmNlZCBhZnRlciB0aGUgc3BsaXRcbiYjNDM7XHRcdCAqIChzaG1lbV91bmNoYXJnZSgpLCBpX21tYXBfdW5sb2NrX3JlYWQoKSkuICBJZiBpdCBsaWVzIGJleW9uZFxuJiM0MztcdFx0ICogRU9GIHRoZSBzcGxpdCB3b3VsZCBkcm9wIGl0IGZyb20gdGhlIHBhZ2UgY2FjaGUgd2hpbGUgaGFuZGluZ1xuJiM0MztcdFx0ICogaXQgYmFjayBsb2NrZWQsIHJlbW92aW5nIHRoYXQgcGluLiAgU3VjaCBhIGZvbGlvIGlzIHJhY2luZ1xuJiM0MztcdFx0ICogdHJ1bmNhdGlvbiBhbmQgdGhlcmUgaXMgbm90aGluZyB1c2VmdWwgdG8gc3BsaXQ7IGJhaWwgb3V0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoZm9saW8tXHUwMDNlaW5kZXggJiM0MzsgZm9saW9fcGFnZV9pZHgoZm9saW8sIGxvY2tfYXQpIFx1MDAzZT0gZW5kKSB7XG4mIzQzO1x0XHRcdHJldCA9IC1FQlVTWTtcbiYjNDM7XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0LypcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggNTE1MDhhNTVjNDA1NWUuLjY4ZDQyY2JlZDQ1OGU1IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTE2NTcsMTEgJiM0MzsxNjU3LDE4IEBAIHN0YXRpYyBpbnQgaWRlbnRpZnlfcGFnZV9zdGF0ZSh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnAsXG4gc3RhdGljIGludCB0cnlfdG9fc3BsaXRfdGhwX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4gXHRcdGJvb2wgcmVsZWFzZSlcbiB7XG4mIzQzO1x0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4gXHRpbnQgcmV0O1xuIFxuLVx0bG9ja19wYWdlKHBhZ2UpO1xuLVx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHBhZ2UsIG5ld19vcmRlcik7XG4tXHR1bmxvY2tfcGFnZShwYWdlKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIExvY2sgYW5kIHNwbGl0IGF0IHRoZSBoZWFkLCBub3QgdGhlIHBvaXNvbmVkIHN1YnBhZ2U6IF9fZm9saW9fc3BsaXQoKVxuJiM0MztcdCAqIGtlZXBzIHRoZSBhbmNob3IgZm9saW8gbG9ja2VkIGFuZCBuZWVkcyBpdCB0byBzdGF5IGluIHRoZSBwYWdlIGNhY2hlXG4mIzQzO1x0ICogdG8gcGluIHRoZSBpbm9kZS4gQSB0YWlsIGJleW9uZCBFT0Ygd291bGQgYmUgZHJvcHBlZCB5ZXQgcmV0dXJuZWRcbiYjNDM7XHQgKiBsb2NrZWQsIGxvc2luZyB0aGF0IHBpbi4gVGhlIGNhbGxlciByZS1sb2NrcyBAcGFnZSBhZnRlcndhcmRzLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvbGlvX2xvY2soZm9saW8pO1xuJiM0MztcdHJldCA9IHNwbGl0X2ZvbGlvX3RvX29yZGVyKGZvbGlvLCBuZXdfb3JkZXIpO1xuJiM0MztcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXG4gXHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZWxlYXNlKVxuIFx0XHRwdXRfcGFnZShwYWdlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxOTozNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZm9saW9fc3BsaXQmIzM0OywKICAgICYjMzQ7dHJ5X3RvX3NwbGl0X3RocF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGhhbmRsaW5nIG9mIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkgYW5kIG1lbW9yeSBmYWlsdXJlLiBJdCBhZGRzIGEgY2hlY2sgaW4gYF9fZm9saW9fc3BsaXRgIHRvIHByZXZlbnQgc3BsaXR0aW5nIGEgZm9saW8gdGhhdCBpcyByYWNpbmcgd2l0aCB0cnVuY2F0aW9uLCBhbmQgY2hhbmdlcyBgdHJ5X3RvX3NwbGl0X3RocF9wYWdlYCB0byBsb2NrIHRoZSBmb2xpbyBpbnN0ZWFkIG9mIHRoZSBwYWdlLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NDZkOTVjOTE0NTUzMDllN2QzYTEyNzI2MDVkMTg2N2IxYTY3ZTJjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMTQgMTk6Mzc6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaCBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oCmluZGV4IGFkMjBmN2Y4YzE3OTQ0Li44YTEwYTg4NmU2MmFkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9odWdlX21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9odWdlX21tLmgKQEAgLTQxNCwxMCAmIzQzOzQxNCw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzCiB7CiAJcmV0dXJuIF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIocGFnZSwgbGlzdCwgbmV3X29yZGVyKTsKIH0KLXN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5ld19vcmRlcikKLXsKLQlyZXR1cm4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIocGFnZSwgTlVMTCwgbmV3X29yZGVyKTsKLX0KIAogc3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewpAQCAtNjIxLDExICYjNDM7NjE3LDYgQEAgdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBib29sCi1jYW5fc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGNhbGxlcl9waW5zLCBpbnQgKnBleHRyYV9waW5zKQotewotCXJldHVybiBmYWxzZTsKLX0KIHN0YXRpYyBpbmxpbmUgaW50CiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKIAkJdW5zaWduZWQgaW50IG5ld19vcmRlcikKQEAgLTYzMywxMSAmIzQzOzYyNCw2IEBAIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAogCVZNX1dBUk5fT05fT05DRV9QQUdFKDEsIHBhZ2UpOwogCXJldHVybiAtRUlOVkFMOwogfQotc3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKQotewotCVZNX1dBUk5fT05fT05DRV9QQUdFKDEsIHBhZ2UpOwotCXJldHVybiAtRUlOVkFMOwotfQogc3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewogCVZNX1dBUk5fT05fT05DRV9QQUdFKDEsIHBhZ2UpOwpAQCAtNzk3LDE1ICYjNDM7NzgzLDkgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3BtZF9vcmRlcih1bnNpZ25lZCBpbnQgb3JkZXIpCiAJcmV0dXJuIG9yZGVyID09IEhQQUdFX1BNRF9PUkRFUjsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc3BsaXRfZm9saW9fdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLAotCQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgbmV3X29yZGVyKQotewotCXJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcigmYW1wO2ZvbGlvLSZndDtwYWdlLCBsaXN0LCBuZXdfb3JkZXIpOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBzcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X29yZGVyKQogewotCXJldHVybiBzcGxpdF9mb2xpb190b19saXN0X3RvX29yZGVyKGZvbGlvLCBOVUxMLCBuZXdfb3JkZXIpOwomIzQzOwlyZXR1cm4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoJmFtcDtmb2xpby0mZ3Q7cGFnZSwgTlVMTCwgbmV3X29yZGVyKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCAyYmNjYjBhNTNhMGE2MC4uMGUzY2E3MTc4ZDhjODcgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtNDA2NSw2ICYjNDM7NDA2NSwyMCBAQCBzdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlciwKIAkJZW5kID0gRElWX1JPVU5EX1VQKGlfc2l6ZV9yZWFkKG1hcHBpbmctJmd0O2hvc3QpLCBQQUdFX1NJWkUpOwogCQlpZiAoc2htZW1fbWFwcGluZyhtYXBwaW5nKSkKIAkJCWVuZCA9IHNobWVtX2ZhbGxvY2VuZChtYXBwaW5nLSZndDtob3N0LCBlbmQpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEBsb2NrX2F0IGlzIHJldHVybmVkIGxvY2tlZCB0byB0aGUgY2FsbGVyLCBhbmQgd2hpbGUgaXQgaXMKJiM0MzsJCSAqIGxvY2tlZCBhbmQgcHJlc2VudCBpbiB0aGUgcGFnZSBjYWNoZSBpdCBpcyB3aGF0IGtlZXBzIHRoZQomIzQzOwkJICogaW5vZGUgYWxpdmU6IHRoZSBtYXBwaW5nIGlzIHN0aWxsIGRlcmVmZXJlbmNlZCBhZnRlciB0aGUgc3BsaXQKJiM0MzsJCSAqIChzaG1lbV91bmNoYXJnZSgpLCBpX21tYXBfdW5sb2NrX3JlYWQoKSkuICBJZiBpdCBsaWVzIGJleW9uZAomIzQzOwkJICogRU9GIHRoZSBzcGxpdCB3b3VsZCBkcm9wIGl0IGZyb20gdGhlIHBhZ2UgY2FjaGUgd2hpbGUgaGFuZGluZwomIzQzOwkJICogaXQgYmFjayBsb2NrZWQsIHJlbW92aW5nIHRoYXQgcGluLiAgU3VjaCBhIGZvbGlvIGlzIHJhY2luZwomIzQzOwkJICogdHJ1bmNhdGlvbiBhbmQgdGhlcmUgaXMgbm90aGluZyB1c2VmdWwgdG8gc3BsaXQ7IGJhaWwgb3V0LgomIzQzOwkJICovCiYjNDM7CQlpZiAoZm9saW8tJmd0O2luZGV4ICYjNDM7IGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBsb2NrX2F0KSAmZ3Q7PSBlbmQpIHsKJiM0MzsJCQlyZXQgPSAtRUJVU1k7CiYjNDM7CQkJZ290byBvdXRfdW5sb2NrOwomIzQzOwkJfQogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCA1MTUwOGE1NWM0MDU1ZS4uNjhkNDJjYmVkNDU4ZTUgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuYwpAQCAtMTY1NywxMSAmIzQzOzE2NTcsMTggQEAgc3RhdGljIGludCBpZGVudGlmeV9wYWdlX3N0YXRlKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqcCwKIHN0YXRpYyBpbnQgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLAogCQlib29sIHJlbGVhc2UpCiB7CiYjNDM7CXN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpOwogCWludCByZXQ7CiAKLQlsb2NrX3BhZ2UocGFnZSk7Ci0JcmV0ID0gc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHBhZ2UsIG5ld19vcmRlcik7Ci0JdW5sb2NrX3BhZ2UocGFnZSk7CiYjNDM7CS8qCiYjNDM7CSAqIExvY2sgYW5kIHNwbGl0IGF0IHRoZSBoZWFkLCBub3QgdGhlIHBvaXNvbmVkIHN1YnBhZ2U6IF9fZm9saW9fc3BsaXQoKQomIzQzOwkgKiBrZWVwcyB0aGUgYW5jaG9yIGZvbGlvIGxvY2tlZCBhbmQgbmVlZHMgaXQgdG8gc3RheSBpbiB0aGUgcGFnZSBjYWNoZQomIzQzOwkgKiB0byBwaW4gdGhlIGlub2RlLiBBIHRhaWwgYmV5b25kIEVPRiB3b3VsZCBiZSBkcm9wcGVkIHlldCByZXR1cm5lZAomIzQzOwkgKiBsb2NrZWQsIGxvc2luZyB0aGF0IHBpbi4gVGhlIGNhbGxlciByZS1sb2NrcyBAcGFnZSBhZnRlcndhcmRzLgomIzQzOwkgKi8KJiM0MzsJZm9saW9fbG9jayhmb2xpbyk7CiYjNDM7CXJldCA9IHNwbGl0X2ZvbGlvX3RvX29yZGVyKGZvbGlvLCBuZXdfb3JkZXIpOwomIzQzOwlmb2xpb191bmxvY2soZm9saW8pOwogCiAJaWYgKHJldCAmYW1wOyZhbXA7IHJlbGVhc2UpCiAJCXB1dF9wYWdlKHBhZ2UpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxOTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDc0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBUSFAgYW5kIE1lbW9yeSBGYWlsdXJlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBjYW4gc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50cy4gSXQmIzM5O3MgYWx0ZXJpbmcgdGhyZWUgZmlsZXM6IGBpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaGAsIGBtbS9odWdlX21lbW9yeS5jYCwgYW5kIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gVGhlIGNoYW5nZXMgaW4gYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYCBpbnZvbHZlIHJlbW92aW5nIGEgZmV3IGZ1bmN0aW9uczogYHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcmAsIGBjYW5fc3BsaXRfZm9saW9gLCBhbmQgYHNwbGl0X2ZvbGlvX3RvX2xpc3RfdG9fb3JkZXJgLiAgYHNwbGl0X2ZvbGlvX3RvX29yZGVyYCBpcyBub3cgY2FsbGluZyBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgIHVuZGVyIHRoZSBob29kLiBGdW5jdGlvbmFsbHksIHRoaXMgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBjb25zb2xpZGF0aW5nIHNvbWUgb2YgdGhlIHNwbGl0dGluZyBsb2dpYyBhbmQgbWF5YmUgb3B0aW1pemluZyBob3cgVEhQcyBhcmUgaGFuZGxlZC4KCkRpdmluZyBkZWVwZXIgaW50byBgbW0vaHVnZV9tZW1vcnkuY2AsIHRoZSBhZGRpdGlvbiBvZiB0aGF0IGNoZWNrIHdpdGhpbiBgX19mb2xpb19zcGxpdGAgaXMgaW50ZXJlc3RpbmcuIFRoZSBsb2dpYyBhcHBlYXJzIHRvIGJlIHRoZXJlIHRvIHByZXZlbnQgc3BsaXR0aW5nIGEgZm9saW8gaWYgdGhlIGRlc2lyZWQgaW5kZXggaXMgb3V0c2lkZSBvZiB0aGUgdmFsaWQgcmFuZ2UuIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBoYXMgY2hhbmdlcyBpbnZvbHZpbmcgbG9ja2luZyBmb2xpb3MgaW5zdGVhZCBvZiBwYWdlcyBpbiBgdHJ5X3RvX3NwbGl0X3RocF9wYWdlYCBhbmQgY2FsbGluZyBgc3BsaXRfZm9saW9fdG9fb3JkZXJgIGluc3RlYWQgb2YgdGhlIG5vdy1yZW1vdmVkIGBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXJgLiBUaGlzIGZ1cnRoZXIgc3VnZ2VzdHMgYSBzaGlmdCB0b3dhcmRzIHVzaW5nIGZvbGlvcyBtb3JlIGRpcmVjdGx5IGluIHRoZSBzcGxpdHRpbmcgcHJvY2VzcywgcGFydGljdWxhcmx5IGR1cmluZyBtZW1vcnkgZmFpbHVyZSBzY2VuYXJpb3MuCgpTbywgdGhpcyBwYXRjaCBhcHBlYXJzIHRvIGJlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIGhvdyB0aGUga2VybmVsIHNwbGl0cyBUSFBzLCB3aXRoIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcuIE15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiB0aGUgY29tcGlsYXRpb24gb2YgdGhlIGZpbGVzIGludm9sdmVkLiBgbW0vaHVnZV9tZW1vcnkuY2AgZGVmaW5pdGVseSBnZXRzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZW5hYmxlZCwgYW5kIGBtbS9tZW1vcnktZmFpbHVyZS5jYCByZWxpZXMgb24gYENPTkZJR19NRU1PUllfRkFJTFVSRWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlc2UgYXJlIGNvcnJlY3RseSBzZXQgYW5kIHRoZW4gSSYjMzk7bGwgZGVsdmUgaW50byB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMgaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiBUSFAgbWFuYWdlbWVudCBhbmQgZXJyb3IgcmVjb3ZlcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgJiM0Mzs9IHBhZ2VfY291bnRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAwNwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipJbnRlcm5hbCBBdWRpdCAmYW1wOyBDb2duaXRpdmUgTG9hZCoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGNhc2UsIGFuZCBpdCYjMzk7cyBoaXR0aW5nIG1lIGFnYWluIC0gdGhhdCBjb2duaXRpdmUgbG9hZCBpcyBhIHJlYWwgZmFjdG9yIGhlcmUuIFdlJiMzOTt2ZSBnb3QgYSBjb21wbGV4IHN5c3RlbSwgYSBtdWx0aXR1ZGUgb2YgdmFyaWFibGVzLCBhbmQgSSYjMzk7bSB0cnlpbmcgdG8gbWFrZSBhIGp1ZGdtZW50IGNhbGwuIEkmIzM5O20gdGFraW5nIGluIGluZm9ybWF0aW9uLCBmaWx0ZXJpbmcgaXQsIGFzc2Vzc2luZyByaXNrLCBhbmQgZm9ybXVsYXRpbmcgYSByZWNvbW1lbmRhdGlvbi4gSXQmIzM5O3MgYSBsb3QsIGFuZCBmcmFua2x5LCBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhpcyBraW5kIG9mIHNpdHVhdGlvbiBpcyB3aGVuIHN1YnRsZSBlcnJvcnMgY3JlZXAgaW4sIGFuZCBiaWFzZXMgY2FuIGJlY29tZSB2ZXJ5IHByZXZhbGVudC4gQW5kLCBJIGtub3cgbWVtb3J5IGlzIGdvaW5nIHRvIGJlIGEga2V5IGZhY3Rvci4gCgpJJiMzOTttIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IHRoaXMgaW4gdGhlIGNvbnRleHQgb2YgcmVjZW50IHJlc2VhcmNoIEkmIzM5O3ZlIGJlZW4gcmVhZGluZyBpbiB0aGUgZmllbGQuIFRoaXMgd2hvbGUgcHJvY2VzcyBpcyBjaGFsbGVuZ2luZyBteSBhYmlsaXR5IHRvIGFjY3VyYXRlbHkgcmVjYWxsIGFsbCB0aGUgZGF0YSwgZXZlcnkgcHJlY2VkZW50LCBhbmQgZXZlcnkgcmVsZXZhbnQgcmVndWxhdGlvbi4gSXQmIzM5O3Mgbm90IGFib3V0IGludGVsbGlnZW5jZTsgaXQmIzM5O3MgYWJvdXQgdGhlIGluaGVyZW50IGxpbWl0YXRpb25zIG9mIHRoZSBodW1hbiBicmFpbi4gVGhpcyBwcmVzc3VyZSB0byBxdWlja2x5IHJlYWNoIGEgZGVjaXNpb24gaXMgd2hhdCBpbmNyZWFzZXMgdGhlIGNoYW5jZSBvZiBlcnJvci4KCkFuZCB0aGVuIEkmIzM5O20gaGl0IGJ5IGEgbmFnZ2luZyB0aG91Z2h0IGFib3V0IG1lbW9yeSBmYWlsdXJlLCBvZiBjb3Vyc2UuIEkmIzM5O3ZlIGJlZW4gdGhyb3VnaCBlbm91Z2ggc2l0dWF0aW9ucyB0byBrbm93IHRoYXQgcmVjYWxsaW5nIHNwZWNpZmljIGRldGFpbHMsIHBhcnRpY3VsYXJseSB0aG9zZSBmcm9tIHRoZSBsZXNzIHJlY2VudCBwYXN0LCBjYW4gYmVjb21lIGEgcHJvYmxlbS4gSSYjMzk7bSB3b3JyaWVkIGFib3V0IGZvcmdldHRpbmcgYSBjcnVjaWFsIGVsZW1lbnQgb2YgdGhpcyBjYXNlLiBXaGF0IGlmIEkmIzM5O20gbm90IGJyaW5naW5nIGFsbCB0aGUgcmVsZXZhbnQgZGV0YWlscyB0byBiZWFyPyBUaGlzIGFueGlldHkgYXJvdW5kIGFjY3VyYWN5IGhhcyBhbHdheXMgYmVlbiB0aGUgbW9zdCBwcmVzc2luZyBmYWN0b3IgaW4gbXkgd29yaywgYW5kIGl0JiMzOTtzIHdoeSBJIGFsd2F5cyBlbXBoYXNpemUgdGhlIHZhbHVlIG9mIGRvY3VtZW50aW5nIHRoaW5ncyBtZXRob2RpY2FsbHkgYW5kIHVzaW5nIGEgY2hlY2tsaXN0IHRvIG1pbmltaXplIGFueSBvdmVyc2lnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX01FTU9SWV9GQUlMVVJFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTExPW9iai0kKENPTkZJR19ETUFQT09MX1RFU1QpICYjNDM7PSBkbWFwb29sX3Rlc3Qub1xubW0vTWFrZWZpbGU6MTEyOm9iai0kKENPTkZJR19NRU1PUllfRkFJTFVSRSkgJiM0Mzs9IG1lbW9yeS1mYWlsdXJlLm9cbm1tL01ha2VmaWxlLTExMy1vYmotJChDT05GSUdfSFdQT0lTT05fSU5KRUNUKSAmIzQzOz0gaHdwb2lzb24taW5qZWN0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDc4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBGb2xpbyBTcGxpdHRpbmcgTW9kaWZpY2F0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZSByZWNlbnQgbW9kaWZpY2F0aW9ucywgc3BlY2lmaWNhbGx5IGluIGBtbS9odWdlX21lbW9yeS5jYCBhbmQgYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBUaGUga2V5IGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBhcmUgYF9fZm9saW9fc3BsaXRgIGFuZCBgdHJ5X3RvX3NwbGl0X3RocF9wYWdlYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgc2NvcGUgb2YgYF9fZm9saW9fc3BsaXRgLiBJcyBpdCBzdGF0aWMsIG1lYW5pbmcgaXQmIzM5O3MgaW50ZXJuYWwgdG8gdGhlIGZpbGUsIG9yIGlzIGl0IGV4cG9ydGVkIGZvciB1c2UgZWxzZXdoZXJlPyBZZXAsIGl0JiMzOTtzIHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSBjb25zdHJhaW5zIHdoZXJlIEkgbmVlZCB0byBsb29rIGZvciBpbXBhY3RzIG9mIGNoYW5nZXMuIE5vdywgdGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiBpczogV2hhdCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5ICpjYWxsaW5nKiBgX19mb2xpb19zcGxpdGA/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkIGFuZCB3aGVyZSB0aGVzZSBwb3RlbnRpYWwgY2hhbmdlcyBtaWdodCByaXBwbGUgb3V0LiBLbm93aW5nIHRoYXQgd2lsbCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gdGhlIHBvc3NpYmxlIGNvbnNlcXVlbmNlcyBvZiB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxOTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2ZvbGlvX3NwbGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTM4MDA9c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM5NTUtLyoqXG5tbS9odWdlX21lbW9yeS5jOjM5NTY6ICogX19mb2xpb19zcGxpdCgpIC0gc3BsaXQgYSBmb2xpbyBhdCBAc3BsaXRfYXQgdG8gYSBAbmV3X29yZGVyIGZvbGlvXG5tbS9odWdlX21lbW9yeS5jLTM5NTctICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzk3NS0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6Mzk3NjpzdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbm1tL2h1Z2VfbWVtb3J5LmMtMzk3Ny1cdFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgcGFnZSAqbG9ja19hdCxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQyNDk9aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MjUzLVxubW0vaHVnZV9tZW1vcnkuYzo0MjU0Olx0cmV0dXJuIF9fZm9saW9fc3BsaXQoZm9saW8sIG5ld19vcmRlciwgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgcGFnZSwgbGlzdCxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI1NS1cdFx0XHQgICAgIFNQTElUX1RZUEVfVU5JRk9STSk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00MjgyPWludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDI4NC17XG5tbS9odWdlX21lbW9yeS5jOjQyODU6XHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgbGlzdCxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni1cdFx0XHQgICAgIFNQTElUX1RZUEVfTk9OX1VOSUZPUk0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMzUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyBUSFAgUGFnZSBTcGxpdHRpbmcqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdHJhbnNwYXJlbnQgaHVnZSBwYWdlIChUSFApIHNwbGl0dGluZy4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBzcGxpdHRpbmcgbG9naWMsIGBfX2ZvbGlvX3NwbGl0YCwgaXMgY2FsbGVkIGZyb20gYXQgbGVhc3QgdHdvIGtleSBwbGFjZXM6IGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCBhbmQgYGZvbGlvX3NwbGl0YC4gQm90aCBvZiB0aG9zZSBhcmUgcHJldHR5IGZ1bmRhbWVudGFsIHRvIHRoZSBUSFAgbWFuYWdlbWVudCB3b3JrZmxvdywgc28gdGhhdCBjb25maXJtcyBteSBpbml0aWFsIGludHVpdGlvbiB0aGF0IHRoZXkmIzM5O3JlIGltcG9ydGFudC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlIG92ZXJhbGwgc3BsaXQgaXMgaW5pdGlhdGVkLiBJIHJlbWVtYmVyIHNlZWluZyBhIGZ1bmN0aW9uIGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIGFuZCBrbm93IGl0JiMzOTtzIGxvY2F0ZWQgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBNZW1vcnkgZmFpbHVyZXMgY2FuIG9mdGVuIHRyaWdnZXIgVEhQIHNwbGl0dGluZywgc28gdGhhdCBzZWVtcyBsb2dpY2FsLgoKVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGFuYWx5emUgdGhlIGNhbGxlcnMgb2YgYHRyeV90b19zcGxpdF90aHBfcGFnZWAgdG8gc2VlIHRoZSBicm9hZGVyIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhvc2UgY2FsbCBwYXRocyBpcyBjcnVjaWFsIHRvIHByb3Blcmx5IG1hcCB0aGUgY29udHJvbCBmbG93LiBMZXQmIzM5O3MgdHJhY2UgdGhvc2UgY2FsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19zcGxpdF90aHBfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYz0xNjI5PXN0YXRpYyBpbnQgaWRlbnRpZnlfcGFnZV9zdGF0ZSh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnAsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNjU2LSAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoxNjU3OnN0YXRpYyBpbnQgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNjU4LVx0XHRib29sIHJlbGVhc2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMzM3PWludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ2Ni1cdFx0Zm9saW9fc2V0X2hhc19od3BvaXNvbmVkKGZvbGlvKTtcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjQ2NzpcdFx0ZXJyID0gdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHAsIG5ld19vcmRlciwgLyogcmVsZWFzZT0gKi8gZmFsc2UpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDY4LVx0XHQvKlxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjc4Nz1zdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4MTEtXHRcdCAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyODEyOlx0XHRpZiAobmV3X29yZGVyIHx8IHRyeV90b19zcGxpdF90aHBfcGFnZShwYWdlLCAvKiBuZXdfb3JkZXI9ICovIDAsXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4MTMtXHRcdFx0XHRcdFx0ICAgICAgIC8qIHJlbGVhc2U9ICovIHRydWUpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MTYKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHBvdGVudGlhbCBhcmVhcyB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMuIFRoaXMgaXMgdHJpZ2dlcmVkIGJ5IGJvdGggYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuIENsZWFybHksIHRoZXNlIGFyZSBib3RoIHRlc3RhYmxlIHNjZW5hcmlvczsgdGhhdCYjMzk7cyBwcm9taXNpbmcuIFNwZWNpZmljYWxseSwgYG1lbW9yeV9mYWlsdXJlYCBpcyByZWxhdGVkIHRvIG1lbW9yeSBlcnJvciBpbmplY3Rpb24g4oCTIHRoaW5ncyBsaWtlIHVzaW5nIGBtYWR2aXNlYCB3aXRoIGBNQURWX0hXUE9JU09OYCBvciBtZXNzaW5nIGFyb3VuZCB3aXRoIHN5c2ZzLiBgX19mb2xpb19zcGxpdGAsIG9uIHRoZSBvdGhlciBoYW5kLCBjb21lcyBpbnRvIHBsYXkgZHVyaW5nIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlKSBzcGxpdHRpbmcuIFRoaXMgY2FuIGhhcHBlbiBkdWUgdG8gdmFyaW91cyBgbWFkdmlzZWAgY2FsbHMgbGlrZSBgTUFEVl9QQUdFT1VUYCBvciBgTUFEVl9DT0xEYCwgbWVtb3J5IHByZXNzdXJlIGluIGdlbmVyYWwsIG9yIHdoZW4gaHVnZSBwYWdlcyBnZXQgc3BsaXQuCgpHaXZlbiB0aGUgdHJpZ2dlciBjb25kaXRpb25zLCB0aGlzIHNlZW1zIGxpa2UgYSBzb2xpZCB0YXJnZXQgZm9yIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gY29uY2VudHJhdGUgb24gc3BlY2lmaWMgc3ltYm9scyBkdXJpbmcgdGhlIGZ1enppbmc6IGBfX2ZvbGlvX3NwbGl0YCwgYHRyeV90b19zcGxpdF90aHBfcGFnZWAsIGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCwgYW5kIGBmb2xpb19zcGxpdGAuIFdhaXQsIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuLi4gYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgIGlzIGFuIGV4cG9ydGVkIGdsb2JhbCBmdW5jdGlvbi4gVGhhdCBhY3R1YWxseSBtYWtlcyB0aGluZ3MgYSBsaXR0bGUgZWFzaWVyIHRvIHRlc3QsIGRvZXNuJiMzOTt0IGl0PyBCZXR0ZXIgZ28gY2hlY2sgdGhhdCBvbmUgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxOTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTQxODI9aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MjQ4LSAqL1xubW0vaHVnZV9tZW1vcnkuYzo0MjQ5OmludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxubW0vaHVnZV9tZW1vcnkuYy00MjUwLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTcwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqQW5hbHl6aW5nIGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZ2V0IGEgZ29vZCBoYW5kbGUgb24gdGhpcyBgdHJ5X3RvX3NwbGl0X3RocF9wYWdlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UsIHdoYXQgaXRzIGlucHV0cyBhcmUsIGFuZCB3aGF0IGl0JiMzOTtzIHRyeWluZyB0byBhY2hpZXZlLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyBpdCYjMzk7cyB1c2VkIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykgbWFuYWdlbWVudC4gVGhpcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBjbHVlcyBhYm91dCBpdHMgcmVzcG9uc2liaWxpdGllcyBhbmQgcG90ZW50aWFsIGltcGFjdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNjZW5hcmlvcyB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgYW5kIHRoZSBwb3RlbnRpYWwgY29uc2VxdWVuY2VzIG9mIGEgc3VjY2Vzc2Z1bCBvciB1bnN1Y2Nlc3NmdWwgZXhlY3V0aW9uLiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGF0IHRoZSBmdW5jdGlvbiYjMzk7cyBkZWNsYXJhdGlvbiBhbmQgYW55IGFzc29jaWF0ZWQgY29tbWVudHMgdG8gZ2V0IGEgcHJlbGltaW5hcnkgZ3Jhc3Agb24gaXRzIGRlc2lnbiBpbnRlbnQuIEkga25vdyB0aGF0IFRIUCBoYW5kbGluZyBpcyBpbnRyaWNhdGUsIHNvIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X3RvX3NwbGl0X3RocF9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jPTE2Mjk9c3RhdGljIGludCBpZGVudGlmeV9wYWdlX3N0YXRlKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqcCxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2NTYtICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE2NTc6c3RhdGljIGludCB0cnlfdG9fc3BsaXRfdGhwX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2NTgtXHRcdGJvb2wgcmVsZWFzZSlcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIzMzc9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDY2LVx0XHRmb2xpb19zZXRfaGFzX2h3cG9pc29uZWQoZm9saW8pO1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDY3Olx0XHRlcnIgPSB0cnlfdG9fc3BsaXRfdGhwX3BhZ2UocCwgbmV3X29yZGVyLCAvKiByZWxlYXNlPSAqLyBmYWxzZSk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0NjgtXHRcdC8qXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNzg3PXN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjgxMS1cdFx0ICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI4MTI6XHRcdGlmIChuZXdfb3JkZXIgfHwgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHBhZ2UsIC8qIG5ld19vcmRlcj0gKi8gMCxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjgxMy1cdFx0XHRcdFx0XHQgICAgICAgLyogcmVsZWFzZT0gKi8gdHJ1ZSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE3NgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIHN5c3RlbSYjMzk7cyBtZW1vcnkgY29uZmlndXJhdGlvbi4gVGhlIGluaXRpYWwgY3VlcyBhcmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYE1FTU9SWV9GQUlMVVJFYC4gSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUsIHNvIEkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaW4gcGxheS4gSSYjMzk7bGwgbmVlZCB0byBrbm93IGFsbCB0aGUgbGV2ZXJzLiBBaCwgYE1FTU9SWV9GQUlMVVJFYCBzcGVjaWZpY2FsbHkuIEkga25vdyB0aGF0IG9uZSYjMzk7cyB1c3VhbGx5IGRlZmluZWQgaW4gYG1tL0tjb25maWdgLCB3aGljaCBjb25maXJtcyBteSB1bmRlcnN0YW5kaW5nLiBOb3cgdG8gZGlnIGRlZXBlciBhbmQgdW5kZXJzdGFuZCBob3cgYWxsIHRoZSBwaWVjZXMgaW50ZXJhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1PUllfRkFJTFVSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03NzQ9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9LY29uZmlnLTc3Ni1cbm1tL0tjb25maWc6Nzc3OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NzgtXHRkZXBlbmRzIG9uIE1NVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDY0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKk15IERlZXAgRGl2ZSBpbnRvIEh1Z2UgUGFnZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiAqVFJBTlNQQVJFTlRfSFVHRVBBR0UqLi4uIGFoLCB5ZXMsIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSwgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyAoVEhQKS4gTXkgbWVudGFsIG1hcCBpbW1lZGlhdGVseSBuYXZpZ2F0ZXMgbWUgdG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBUaGUgdmVyeSBmYWN0IHRoYXQgdGhpcyBpcyBpbiBgbW0vS2NvbmZpZ2AgY29uZmlybXMgbXkgaW5pdGlhbCB0aG91Z2h0LiBUaGF0JiMzOTtzICp0aGUqIHBsYWNlIHRvIGdvIGZvciBhbGwgdGhpbmdzIG1lbW9yeS1yZWxhdGVkIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0JiMzOTtzIHRoZSBjZW50cmFsIGh1YiBmb3IgZGVjaWRpbmcgaWYgVEhQIHN1cHBvcnQgaXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBUaGlzIGxvY2F0aW9uIHRlbGxzIG1lIHRoYXQmIzM5O3MgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHNldHRpbmcgY29udHJvbGxpbmcgVEhQLiBUaGF0IG1lYW5zIEkgY2FuIHR1bmUgb3IgZGlzYWJsZSB0aGUgc3VwcG9ydCBmb3IgdGhlbSBhdCBjb21waWxlIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04NDM9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy04NDUtXG5tbS9LY29uZmlnOjg0NjptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTg0Ny1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODY0PWNob2ljZVxuLS1cbm1tL0tjb25maWctODY5LVxubW0vS2NvbmZpZzo4NzA6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg3MS1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg3Ni1cbm1tL0tjb25maWc6ODc3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL0tjb25maWctODc4LVx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg4NS1cbm1tL0tjb25maWc6ODg2Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXG5tbS9LY29uZmlnLTg4Ny1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODkzPWNob2ljZVxuLS1cbm1tL0tjb25maWctOTAyLVxubW0vS2NvbmZpZzo5MDM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxubW0vS2NvbmZpZy05MDQtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkxMi1cbm1tL0tjb25maWc6OTEzOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTkxNC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkyMC1cbm1tL0tjb25maWc6OTIxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTIyLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MjgtXG5tbS9LY29uZmlnOjkyOTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05MzAtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz05Mzg9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05NDctXG5tbS9LY29uZmlnOjk0ODpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXG5tbS9LY29uZmlnLTk0OS1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTU2LVxubW0vS2NvbmZpZzo5NTc6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTU4LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTY0LVxubW0vS2NvbmZpZzo5NjU6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05NjYtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk3Mi1cbm1tL0tjb25maWc6OTczOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTk3NC1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTk6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM5NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgSHVnZSBQYWdlIEFsbG9jYXRpb24gRmFpbHVyZSoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIGh1Z2UgcGFnZSBhbGxvY2F0aW9uIGlzc3VlLCBhbmQgdGhlIGtleSBzdXNwZWN0cyBpbiB0aGUga2VybmVsIGNvbmZpZ3MgYXJlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kLCBxdWl0ZSBsaWtlbHksIGBNRU1PUllfRkFJTFVSRWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgY2F1c2luZyB0aGUgcHJvYmxlbS4gTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgX19mb2xpb19zcGxpdGAgZnVuY3Rpb24gd2l0aGluIGBtbS9odWdlX21lbW9yeS5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3Igc3BsaXR0aW5nIGZvbGlvcyAoYW5kIGNvbnNlcXVlbnRseSwgaHVnZSBwYWdlcykgcmVzaWRlcy4gVW5kZXJzdGFuZGluZyBob3cgYW5kIHdoZW4gYSBmb2xpbyBzcGxpdCBvY2N1cnMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBgTUVNT1JZX0ZBSUxVUkVgIG9yIG90aGVyIGFsbG9jYXRpb24tcmVsYXRlZCBlcnJvcnMsIHdpbGwgbGlrZWx5IHByb3ZpZGUgdmFsdWFibGUgaW5zaWdodHMgaW50byB0aGUgcm9vdCBjYXVzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTk6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19mb2xpb19zcGxpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0zODAwPXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zOTU1LS8qKlxubW0vaHVnZV9tZW1vcnkuYzozOTU2OiAqIF9fZm9saW9fc3BsaXQoKSAtIHNwbGl0IGEgZm9saW8gYXQgQHNwbGl0X2F0IHRvIGEgQG5ld19vcmRlciBmb2xpb1xubW0vaHVnZV9tZW1vcnkuYy0zOTU3LSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM5NzUtICovXG5tbS9odWdlX21lbW9yeS5jOjM5NzY6c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG5tbS9odWdlX21lbW9yeS5jLTM5NzctXHRcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IHBhZ2UgKmxvY2tfYXQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00MjQ5PWludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDI1My1cbm1tL2h1Z2VfbWVtb3J5LmM6NDI1NDpcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIHBhZ2UsIGxpc3QsXG5tbS9odWdlX21lbW9yeS5jLTQyNTUtXHRcdFx0ICAgICBTUExJVF9UWVBFX1VOSUZPUk0pO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDI4Mj1pbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyODQte1xubW0vaHVnZV9tZW1vcnkuYzo0Mjg1Olx0cmV0dXJuIF9fZm9saW9fc3BsaXQoZm9saW8sIG5ld19vcmRlciwgc3BsaXRfYXQsIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIGxpc3QsXG5tbS9odWdlX21lbW9yeS5jLTQyODYtXHRcdFx0ICAgICBTUExJVF9UWVBFX05PTl9VTklGT1JNKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTk6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA4MAoJCQkJCQkJb3V0cHV0OiAxNDYKCQkJCQkJCXRob3VnaHRzOiA0ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRm9saW8gU3BsaXR0aW5nIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGR1cmluZyBmb2xpbyBzcGxpdHRpbmcsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiB0cnVuY2F0aW9uLiBUaGUgYWRkaXRpb24gb2YgdGhlIGNoZWNrIHdpdGhpbiBgX19mb2xpb19zcGxpdGAgaXMgdGhlIGtleS4gVGhlIGNvZGUgbm93IHByZXZlbnRzIGEgZm9saW8gZnJvbSBiZWluZyBzcGxpdCBpZiBpdHMgaW5kZXgsIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgaW5kZXggb2YgdGhlIGxvY2tlZCBwb3J0aW9uLCBleGNlZWRzIHRoZSBlbmQgb2YgdGhlIGZpbGUuIFRoaXMgaXMgY3J1Y2lhbCBiZWNhdXNlLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHRoZSBsb2NrZWQgZm9saW8gc2VydmVzIGFzIGEgdml0YWwgcGluIG9uIHRoZSBpbm9kZS4gSWYgYSBmb2xpbyBpcyBzcGxpdCAqcGFzdCogdGhlIGVuZC1vZi1maWxlLCBpdCBjb3VsZCBiZSBkcm9wcGVkIGZyb20gdGhlIHBhZ2UgY2FjaGUgd2hpbGUgc3RpbGwgbG9ja2VkLCBsZWFkaW5nIHRvIHRoZSBpbm9kZSBiZWluZyBmcmVlZCBwcmVtYXR1cmVseS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gc2NlbmFyaW8gYW5kIGEgZGVmaW5pdGUgcHJvYmxlbS4gSXQgcHJldmVudHMgdGhlIG1hcHBpbmcgZnJvbSBiZWluZyBkZXJlZmVyZW5jZWQgYWZ0ZXIgdGhlIHNwbGl0LgoKVGhlbiB3ZSBoYXZlIGEgY2hhbmdlIHRvIGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gSXQmIzM5O3Mgbm93IGxvY2tpbmcgdGhlIGZvbGlvIGRpcmVjdGx5IGluc3RlYWQgb2YgdGhlIGluZGl2aWR1YWwgcGFnZS4gVGhlIGNvbW1lbnQgaGlnaGxpZ2h0cyB0aGF0IGBfX2ZvbGlvX3NwbGl0YCBuZWVkcyB0aGUgYW5jaG9yIGZvbGlvIGxvY2tlZCBhbmQgcHJlc2VudCBpbiB0aGUgcGFnZSBjYWNoZSB0byBjb3JyZWN0bHkgcGluIHRoZSBpbm9kZS4gVGhlIGNhbGxlciByZWxvY2tzIHRoZSBwYWdlIGFmdGVyd2FyZHMuIFRoaXMgc2VlbXMgc2Vuc2libGUsIGFzIGl0IGFsaWducyBiZXR0ZXIgd2l0aCB0aGUgZm9saW8tYmFzZWQgYXBwcm9hY2gsIGVuc3VyaW5nIHRoZSBlbnRpcmUgZm9saW8mIzM5O3Mgc3RhdGUgaXMgY29uc2lzdGVudCBkdXJpbmcgdGhlIHNwbGl0LgoKR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzLCBteSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRoaXMgYWJzb2x1dGVseSBuZWVkcyB0byBiZSBmdXp6ZWQuIFRoZSBmb2N1cyBoYXMgdG8gYmUgb24gYF9fZm9saW9fc3BsaXRgIGFuZCBgdHJ5X3RvX3NwbGl0X3RocF9wYWdlYCwgYmVjYXVzZSB0aG9zZSBhcmUgdGhlIG1vc3QgbW9kaWZpZWQgcGFydHMuIFRoZSBjb25maWdzIEkgd2FudCB0byBsb29rIGF0IGFyZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgTUVNT1JZX0ZBSUxVUkVgIGJlY2F1c2UgdGhleSYjMzk7cmUgcmVsZXZhbnQgZm9yIGhvdyB0aGUgZm9saW8gc3BsaXR0aW5nIGlzIHVzZWQsIGFuZCBpbiB0aGUgY2FzZSBvZiBgTUVNT1JZX0ZBSUxVUkVgIGl0JiMzOTtzIHJpZ2h0IGluIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbi4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgYmVjYXVzZSBJIHdhbnQgdG8gYmUgdGhvcm91Z2guIE9rYXksIHNvIGBNRU1PUllfRkFJTFVSRWAgZGVwZW5kcyBvbiBgTU1VYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgZGVwZW5kcyBvbiBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4gR29vZC4gSSYjMzk7bSBnb2luZyB0byBzZXQgdGhlc2UgcmVzdWx0cyBhbmQgZ2V0IGEgZnV6emluZyBjYW1wYWlnbiBzdGFydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxOTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2ZvbGlvX3NwbGl0JiMzNDssCiAgICAmIzM0O3RyeV90b19zcGxpdF90aHBfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGluIHRoZSBoYW5kbGluZyBvZiBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFuZCBtZW1vcnkgZmFpbHVyZS4gSXQgYWRkcyBhIGNoZWNrIGluIGBfX2ZvbGlvX3NwbGl0YCB0byBwcmV2ZW50IHNwbGl0dGluZyBhIGZvbGlvIHRoYXQgaXMgcmFjaW5nIHdpdGggdHJ1bmNhdGlvbiwgYW5kIGNoYW5nZXMgYHRyeV90b19zcGxpdF90aHBfcGFnZWAgdG8gbG9jayB0aGUgZm9saW8gaW5zdGVhZCBvZiB0aGUgcGFnZS4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2ZvbGlvX3NwbGl0JiMzNDssCiAgICAmIzM0O3RyeV90b19zcGxpdF90aHBfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGluIHRoZSBoYW5kbGluZyBvZiBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFuZCBtZW1vcnkgZmFpbHVyZS4gSXQgYWRkcyBhIGNoZWNrIGluIGBfX2ZvbGlvX3NwbGl0YCB0byBwcmV2ZW50IHNwbGl0dGluZyBhIGZvbGlvIHRoYXQgaXMgcmFjaW5nIHdpdGggdHJ1bmNhdGlvbiwgYW5kIGNoYW5nZXMgYHRyeV90b19zcGxpdF90aHBfcGFnZWAgdG8gbG9jayB0aGUgZm9saW8gaW5zdGVhZCBvZiB0aGUgcGFnZS4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE5OjM3OjU0LjUxMjU4NTIxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA5OTU0MTg1MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19mb2xpb19zcGxpdFwiLFxuICAgIFwidHJ5X3RvX3NwbGl0X3RocF9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiB0aGUgaGFuZGxpbmcgb2YgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSBhbmQgbWVtb3J5IGZhaWx1cmUuIEl0IGFkZHMgYSBjaGVjayBpbiBgX19mb2xpb19zcGxpdGAgdG8gcHJldmVudCBzcGxpdHRpbmcgYSBmb2xpbyB0aGF0IGlzIHJhY2luZyB3aXRoIHRydW5jYXRpb24sIGFuZCBjaGFuZ2VzIGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIHRvIGxvY2sgdGhlIGZvbGlvIGluc3RlYWQgb2YgdGhlIHBhZ2UuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE5OjM3OjU0LjUxMjU5NDE2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDEzMjM2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3NDZkOTVjOTE0NTUzMDllN2QzYTEyNzI2MDVkMTg2N2IxYTY3ZTJjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDE0IDE5OjM3OjUyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmhcXG5pbmRleCBhZDIwZjdmOGMxNzk0NC4uOGExMGE4ODZlNjJhZDcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdlX21tLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxcbkBAIC00MTQsMTAgKzQxNCw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzXFxuIHtcXG4gXFx0cmV0dXJuIF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIocGFnZSwgbGlzdCwgbmV3X29yZGVyKTtcXG4gfVxcbi1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuLXtcXG4tXFx0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHBhZ2UsIE5VTEwsIG5ld19vcmRlcik7XFxuLX1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbkBAIC02MjEsMTEgKzYxNyw2IEBAIHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2xcXG4tY2FuX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBjYWxsZXJfcGlucywgaW50ICpwZXh0cmFfcGlucylcXG4te1xcbi1cXHRyZXR1cm4gZmFsc2U7XFxuLX1cXG4gc3RhdGljIGlubGluZSBpbnRcXG4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuIFxcdFxcdHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuQEAgLTYzMywxMSArNjI0LDYgQEAgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuIFxcdFZNX1dBUk5fT05fT05DRV9QQUdFKDEsIHBhZ2UpO1xcbiBcXHRyZXR1cm4gLUVJTlZBTDtcXG4gfVxcbi1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuLXtcXG4tXFx0Vk1fV0FSTl9PTl9PTkNFX1BBR0UoMSwgcGFnZSk7XFxuLVxcdHJldHVybiAtRUlOVkFMO1xcbi19XFxuIHN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbiBcXHRWTV9XQVJOX09OX09OQ0VfUEFHRSgxLCBwYWdlKTtcXG5AQCAtNzk3LDE1ICs3ODMsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfcG1kX29yZGVyKHVuc2lnbmVkIGludCBvcmRlcilcXG4gXFx0cmV0dXJuIG9yZGVyID09IEhQQUdFX1BNRF9PUkRFUjtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgc3BsaXRfZm9saW9fdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi1cXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgbmV3X29yZGVyKVxcbi17XFxuLVxcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIGxpc3QsIG5ld19vcmRlcik7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIpXFxuIHtcXG4tXFx0cmV0dXJuIHNwbGl0X2ZvbGlvX3RvX2xpc3RfdG9fb3JkZXIoZm9saW8sIE5VTEwsIG5ld19vcmRlcik7XFxuK1xcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIE5VTEwsIG5ld19vcmRlcik7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IDJiY2NiMGE1M2EwYTYwLi4wZTNjYTcxNzhkOGM4NyAxMDA2NDRcXG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXFxuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xcbkBAIC00MDY1LDYgKzQwNjUsMjAgQEAgc3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuIFxcdFxcdGVuZCA9IERJVl9ST1VORF9VUChpX3NpemVfcmVhZChtYXBwaW5nLVxcdTAwM2Vob3N0KSwgUEFHRV9TSVpFKTtcXG4gXFx0XFx0aWYgKHNobWVtX21hcHBpbmcobWFwcGluZykpXFxuIFxcdFxcdFxcdGVuZCA9IHNobWVtX2ZhbGxvY2VuZChtYXBwaW5nLVxcdTAwM2Vob3N0LCBlbmQpO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQGxvY2tfYXQgaXMgcmV0dXJuZWQgbG9ja2VkIHRvIHRoZSBjYWxsZXIsIGFuZCB3aGlsZSBpdCBpc1xcbitcXHRcXHQgKiBsb2NrZWQgYW5kIHByZXNlbnQgaW4gdGhlIHBhZ2UgY2FjaGUgaXQgaXMgd2hhdCBrZWVwcyB0aGVcXG4rXFx0XFx0ICogaW5vZGUgYWxpdmU6IHRoZSBtYXBwaW5nIGlzIHN0aWxsIGRlcmVmZXJlbmNlZCBhZnRlciB0aGUgc3BsaXRcXG4rXFx0XFx0ICogKHNobWVtX3VuY2hhcmdlKCksIGlfbW1hcF91bmxvY2tfcmVhZCgpKS4gIElmIGl0IGxpZXMgYmV5b25kXFxuK1xcdFxcdCAqIEVPRiB0aGUgc3BsaXQgd291bGQgZHJvcCBpdCBmcm9tIHRoZSBwYWdlIGNhY2hlIHdoaWxlIGhhbmRpbmdcXG4rXFx0XFx0ICogaXQgYmFjayBsb2NrZWQsIHJlbW92aW5nIHRoYXQgcGluLiAgU3VjaCBhIGZvbGlvIGlzIHJhY2luZ1xcbitcXHRcXHQgKiB0cnVuY2F0aW9uIGFuZCB0aGVyZSBpcyBub3RoaW5nIHVzZWZ1bCB0byBzcGxpdDsgYmFpbCBvdXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoZm9saW8tXFx1MDAzZWluZGV4ICsgZm9saW9fcGFnZV9pZHgoZm9saW8sIGxvY2tfYXQpIFxcdTAwM2U9IGVuZCkge1xcbitcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHQvKlxcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbmluZGV4IDUxNTA4YTU1YzQwNTVlLi42OGQ0MmNiZWQ0NThlNSAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXFxuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbkBAIC0xNjU3LDExICsxNjU3LDE4IEBAIHN0YXRpYyBpbnQgaWRlbnRpZnlfcGFnZV9zdGF0ZSh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnAsXFxuIHN0YXRpYyBpbnQgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbiBcXHRcXHRib29sIHJlbGVhc2UpXFxuIHtcXG4rXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRsb2NrX3BhZ2UocGFnZSk7XFxuLVxcdHJldCA9IHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihwYWdlLCBuZXdfb3JkZXIpO1xcbi1cXHR1bmxvY2tfcGFnZShwYWdlKTtcXG4rXFx0LypcXG4rXFx0ICogTG9jayBhbmQgc3BsaXQgYXQgdGhlIGhlYWQsIG5vdCB0aGUgcG9pc29uZWQgc3VicGFnZTogX19mb2xpb19zcGxpdCgpXFxuK1xcdCAqIGtlZXBzIHRoZSBhbmNob3IgZm9saW8gbG9ja2VkIGFuZCBuZWVkcyBpdCB0byBzdGF5IGluIHRoZSBwYWdlIGNhY2hlXFxuK1xcdCAqIHRvIHBpbiB0aGUgaW5vZGUuIEEgdGFpbCBiZXlvbmQgRU9GIHdvdWxkIGJlIGRyb3BwZWQgeWV0IHJldHVybmVkXFxuK1xcdCAqIGxvY2tlZCwgbG9zaW5nIHRoYXQgcGluLiBUaGUgY2FsbGVyIHJlLWxvY2tzIEBwYWdlIGFmdGVyd2FyZHMuXFxuK1xcdCAqL1xcbitcXHRmb2xpb19sb2NrKGZvbGlvKTtcXG4rXFx0cmV0ID0gc3BsaXRfZm9saW9fdG9fb3JkZXIoZm9saW8sIG5ld19vcmRlcik7XFxuK1xcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuIFxcbiBcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJlbGVhc2UpXFxuIFxcdFxcdHB1dF9wYWdlKHBhZ2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxOTozNzo1NS4zNTQ4OTE0MTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMTUzMDk4ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZm9saW9fc3BsaXRcIixcbiAgICBcInRyeV90b19zcGxpdF90aHBfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGhhbmRsaW5nIG9mIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkgYW5kIG1lbW9yeSBmYWlsdXJlLiBJdCBhZGRzIGEgY2hlY2sgaW4gYF9fZm9saW9fc3BsaXRgIHRvIHByZXZlbnQgc3BsaXR0aW5nIGEgZm9saW8gdGhhdCBpcyByYWNpbmcgd2l0aCB0cnVuY2F0aW9uLCBhbmQgY2hhbmdlcyBgdHJ5X3RvX3NwbGl0X3RocF9wYWdlYCB0byBsb2NrIHRoZSBmb2xpbyBpbnN0ZWFkIG9mIHRoZSBwYWdlLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc0NmQ5NWM5MTQ1NTMwOWU3ZDNhMTI3MjYwNWQxODY3YjFhNjdlMmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAxNCAxOTozNzo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmhcbmluZGV4IGFkMjBmN2Y4YzE3OTQ0Li44YTEwYTg4NmU2MmFkNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxuQEAgLTQxNCwxMCArNDE0LDYgQEAgc3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXNcbiB7XG4gXHRyZXR1cm4gX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihwYWdlLCBsaXN0LCBuZXdfb3JkZXIpO1xuIH1cbi1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG4te1xuLVx0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHBhZ2UsIE5VTEwsIG5ld19vcmRlcik7XG4tfVxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG5AQCAtNjIxLDExICs2MTcsNiBAQCB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbFxuLWNhbl9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgY2FsbGVyX3BpbnMsIGludCAqcGV4dHJhX3BpbnMpXG4te1xuLVx0cmV0dXJuIGZhbHNlO1xuLX1cbiBzdGF0aWMgaW5saW5lIGludFxuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuIFx0XHR1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxuQEAgLTYzMywxMSArNjI0LDYgQEAgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4gXHRWTV9XQVJOX09OX09OQ0VfUEFHRSgxLCBwYWdlKTtcbiBcdHJldHVybiAtRUlOVkFMO1xuIH1cbi1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG4te1xuLVx0Vk1fV0FSTl9PTl9PTkNFX1BBR0UoMSwgcGFnZSk7XG4tXHRyZXR1cm4gLUVJTlZBTDtcbi19XG4gc3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbiBcdFZNX1dBUk5fT05fT05DRV9QQUdFKDEsIHBhZ2UpO1xuQEAgLTc5NywxNSArNzgzLDkgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3BtZF9vcmRlcih1bnNpZ25lZCBpbnQgb3JkZXIpXG4gXHRyZXR1cm4gb3JkZXIgPT0gSFBBR0VfUE1EX09SREVSO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9mb2xpb190b19saXN0X3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCBuZXdfb3JkZXIpXG4te1xuLVx0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIGxpc3QsIG5ld19vcmRlcik7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIpXG4ge1xuLVx0cmV0dXJuIHNwbGl0X2ZvbGlvX3RvX2xpc3RfdG9fb3JkZXIoZm9saW8sIE5VTEwsIG5ld19vcmRlcik7XG4rXHRyZXR1cm4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgTlVMTCwgbmV3X29yZGVyKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDJiY2NiMGE1M2EwYTYwLi4wZTNjYTcxNzhkOGM4NyAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC00MDY1LDYgKzQwNjUsMjAgQEAgc3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4gXHRcdGVuZCA9IERJVl9ST1VORF9VUChpX3NpemVfcmVhZChtYXBwaW5nLVx1MDAzZWhvc3QpLCBQQUdFX1NJWkUpO1xuIFx0XHRpZiAoc2htZW1fbWFwcGluZyhtYXBwaW5nKSlcbiBcdFx0XHRlbmQgPSBzaG1lbV9mYWxsb2NlbmQobWFwcGluZy1cdTAwM2Vob3N0LCBlbmQpO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBAbG9ja19hdCBpcyByZXR1cm5lZCBsb2NrZWQgdG8gdGhlIGNhbGxlciwgYW5kIHdoaWxlIGl0IGlzXG4rXHRcdCAqIGxvY2tlZCBhbmQgcHJlc2VudCBpbiB0aGUgcGFnZSBjYWNoZSBpdCBpcyB3aGF0IGtlZXBzIHRoZVxuK1x0XHQgKiBpbm9kZSBhbGl2ZTogdGhlIG1hcHBpbmcgaXMgc3RpbGwgZGVyZWZlcmVuY2VkIGFmdGVyIHRoZSBzcGxpdFxuK1x0XHQgKiAoc2htZW1fdW5jaGFyZ2UoKSwgaV9tbWFwX3VubG9ja19yZWFkKCkpLiAgSWYgaXQgbGllcyBiZXlvbmRcbitcdFx0ICogRU9GIHRoZSBzcGxpdCB3b3VsZCBkcm9wIGl0IGZyb20gdGhlIHBhZ2UgY2FjaGUgd2hpbGUgaGFuZGluZ1xuK1x0XHQgKiBpdCBiYWNrIGxvY2tlZCwgcmVtb3ZpbmcgdGhhdCBwaW4uICBTdWNoIGEgZm9saW8gaXMgcmFjaW5nXG4rXHRcdCAqIHRydW5jYXRpb24gYW5kIHRoZXJlIGlzIG5vdGhpbmcgdXNlZnVsIHRvIHNwbGl0OyBiYWlsIG91dC5cbitcdFx0ICovXG4rXHRcdGlmIChmb2xpby1cdTAwM2VpbmRleCArIGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBsb2NrX2F0KSBcdTAwM2U9IGVuZCkge1xuK1x0XHRcdHJldCA9IC1FQlVTWTtcbitcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IDUxNTA4YTU1YzQwNTVlLi42OGQ0MmNiZWQ0NThlNSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC0xNjU3LDExICsxNjU3LDE4IEBAIHN0YXRpYyBpbnQgaWRlbnRpZnlfcGFnZV9zdGF0ZSh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnAsXG4gc3RhdGljIGludCB0cnlfdG9fc3BsaXRfdGhwX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4gXHRcdGJvb2wgcmVsZWFzZSlcbiB7XG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiBcdGludCByZXQ7XG4gXG4tXHRsb2NrX3BhZ2UocGFnZSk7XG4tXHRyZXQgPSBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXIocGFnZSwgbmV3X29yZGVyKTtcbi1cdHVubG9ja19wYWdlKHBhZ2UpO1xuK1x0LypcbitcdCAqIExvY2sgYW5kIHNwbGl0IGF0IHRoZSBoZWFkLCBub3QgdGhlIHBvaXNvbmVkIHN1YnBhZ2U6IF9fZm9saW9fc3BsaXQoKVxuK1x0ICoga2VlcHMgdGhlIGFuY2hvciBmb2xpbyBsb2NrZWQgYW5kIG5lZWRzIGl0IHRvIHN0YXkgaW4gdGhlIHBhZ2UgY2FjaGVcbitcdCAqIHRvIHBpbiB0aGUgaW5vZGUuIEEgdGFpbCBiZXlvbmQgRU9GIHdvdWxkIGJlIGRyb3BwZWQgeWV0IHJldHVybmVkXG4rXHQgKiBsb2NrZWQsIGxvc2luZyB0aGF0IHBpbi4gVGhlIGNhbGxlciByZS1sb2NrcyBAcGFnZSBhZnRlcndhcmRzLlxuK1x0ICovXG4rXHRmb2xpb19sb2NrKGZvbGlvKTtcbitcdHJldCA9IHNwbGl0X2ZvbGlvX3RvX29yZGVyKGZvbGlvLCBuZXdfb3JkZXIpO1xuK1x0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcbiBcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJlbGVhc2UpXG4gXHRcdHB1dF9wYWdlKHBhZ2UpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTk6Mzc6NTUuMzU0ODkzNzAzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjEwOTY2MjY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWNlbnQgVEhQIGFuZCBNZW1vcnkgRmFpbHVyZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIGNhbiBzZWUgaXQncyB0b3VjaGluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMuIEl0J3MgYWx0ZXJpbmcgdGhyZWUgZmlsZXM6IGBpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaGAsIGBtbS9odWdlX21lbW9yeS5jYCwgYW5kIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gVGhlIGNoYW5nZXMgaW4gYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYCBpbnZvbHZlIHJlbW92aW5nIGEgZmV3IGZ1bmN0aW9uczogYHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcmAsIGBjYW5fc3BsaXRfZm9saW9gLCBhbmQgYHNwbGl0X2ZvbGlvX3RvX2xpc3RfdG9fb3JkZXJgLiAgYHNwbGl0X2ZvbGlvX3RvX29yZGVyYCBpcyBub3cgY2FsbGluZyBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgIHVuZGVyIHRoZSBob29kLiBGdW5jdGlvbmFsbHksIHRoaXMgbG9va3MgbGlrZSB0aGV5J3JlIGNvbnNvbGlkYXRpbmcgc29tZSBvZiB0aGUgc3BsaXR0aW5nIGxvZ2ljIGFuZCBtYXliZSBvcHRpbWl6aW5nIGhvdyBUSFBzIGFyZSBoYW5kbGVkLlxuXG5EaXZpbmcgZGVlcGVyIGludG8gYG1tL2h1Z2VfbWVtb3J5LmNgLCB0aGUgYWRkaXRpb24gb2YgdGhhdCBjaGVjayB3aXRoaW4gYF9fZm9saW9fc3BsaXRgIGlzIGludGVyZXN0aW5nLiBUaGUgbG9naWMgYXBwZWFycyB0byBiZSB0aGVyZSB0byBwcmV2ZW50IHNwbGl0dGluZyBhIGZvbGlvIGlmIHRoZSBkZXNpcmVkIGluZGV4IGlzIG91dHNpZGUgb2YgdGhlIHZhbGlkIHJhbmdlLiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgaGFzIGNoYW5nZXMgaW52b2x2aW5nIGxvY2tpbmcgZm9saW9zIGluc3RlYWQgb2YgcGFnZXMgaW4gYHRyeV90b19zcGxpdF90aHBfcGFnZWAgYW5kIGNhbGxpbmcgYHNwbGl0X2ZvbGlvX3RvX29yZGVyYCBpbnN0ZWFkIG9mIHRoZSBub3ctcmVtb3ZlZCBgc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyYC4gVGhpcyBmdXJ0aGVyIHN1Z2dlc3RzIGEgc2hpZnQgdG93YXJkcyB1c2luZyBmb2xpb3MgbW9yZSBkaXJlY3RseSBpbiB0aGUgc3BsaXR0aW5nIHByb2Nlc3MsIHBhcnRpY3VsYXJseSBkdXJpbmcgbWVtb3J5IGZhaWx1cmUgc2NlbmFyaW9zLlxuXG5TbywgdGhpcyBwYXRjaCBhcHBlYXJzIHRvIGJlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIGhvdyB0aGUga2VybmVsIHNwbGl0cyBUSFBzLCB3aXRoIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcuIE15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiB0aGUgY29tcGlsYXRpb24gb2YgdGhlIGZpbGVzIGludm9sdmVkLiBgbW0vaHVnZV9tZW1vcnkuY2AgZGVmaW5pdGVseSBnZXRzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZW5hYmxlZCwgYW5kIGBtbS9tZW1vcnktZmFpbHVyZS5jYCByZWxpZXMgb24gYENPTkZJR19NRU1PUllfRkFJTFVSRWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlc2UgYXJlIGNvcnJlY3RseSBzZXQgYW5kIHRoZW4gSSdsbCBkZWx2ZSBpbnRvIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIFRIUCBtYW5hZ2VtZW50IGFuZCBlcnJvciByZWNvdmVyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA3NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE5OjM4OjAxLjQ2NDU1ODUyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMDQwNzE4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgKz0gcGFnZV9jb3VudGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTk6Mzg6MDIuMTk0OTczMDI1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTczMjUxNTAyNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipJbnRlcm5hbCBBdWRpdCBcdTAwMjYgQ29nbml0aXZlIExvYWQqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgY2FzZSwgYW5kIGl0J3MgaGl0dGluZyBtZSBhZ2FpbiAtIHRoYXQgY29nbml0aXZlIGxvYWQgaXMgYSByZWFsIGZhY3RvciBoZXJlLiBXZSd2ZSBnb3QgYSBjb21wbGV4IHN5c3RlbSwgYSBtdWx0aXR1ZGUgb2YgdmFyaWFibGVzLCBhbmQgSSdtIHRyeWluZyB0byBtYWtlIGEganVkZ21lbnQgY2FsbC4gSSdtIHRha2luZyBpbiBpbmZvcm1hdGlvbiwgZmlsdGVyaW5nIGl0LCBhc3Nlc3NpbmcgcmlzaywgYW5kIGZvcm11bGF0aW5nIGEgcmVjb21tZW5kYXRpb24uIEl0J3MgYSBsb3QsIGFuZCBmcmFua2x5LCBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhpcyBraW5kIG9mIHNpdHVhdGlvbiBpcyB3aGVuIHN1YnRsZSBlcnJvcnMgY3JlZXAgaW4sIGFuZCBiaWFzZXMgY2FuIGJlY29tZSB2ZXJ5IHByZXZhbGVudC4gQW5kLCBJIGtub3cgbWVtb3J5IGlzIGdvaW5nIHRvIGJlIGEga2V5IGZhY3Rvci4gXG5cbkknbSBzdGFydGluZyB0byB0aGluayBhYm91dCB0aGlzIGluIHRoZSBjb250ZXh0IG9mIHJlY2VudCByZXNlYXJjaCBJJ3ZlIGJlZW4gcmVhZGluZyBpbiB0aGUgZmllbGQuIFRoaXMgd2hvbGUgcHJvY2VzcyBpcyBjaGFsbGVuZ2luZyBteSBhYmlsaXR5IHRvIGFjY3VyYXRlbHkgcmVjYWxsIGFsbCB0aGUgZGF0YSwgZXZlcnkgcHJlY2VkZW50LCBhbmQgZXZlcnkgcmVsZXZhbnQgcmVndWxhdGlvbi4gSXQncyBub3QgYWJvdXQgaW50ZWxsaWdlbmNlOyBpdCdzIGFib3V0IHRoZSBpbmhlcmVudCBsaW1pdGF0aW9ucyBvZiB0aGUgaHVtYW4gYnJhaW4uIFRoaXMgcHJlc3N1cmUgdG8gcXVpY2tseSByZWFjaCBhIGRlY2lzaW9uIGlzIHdoYXQgaW5jcmVhc2VzIHRoZSBjaGFuY2Ugb2YgZXJyb3IuXG5cbkFuZCB0aGVuIEknbSBoaXQgYnkgYSBuYWdnaW5nIHRob3VnaHQgYWJvdXQgbWVtb3J5IGZhaWx1cmUsIG9mIGNvdXJzZS4gSSd2ZSBiZWVuIHRocm91Z2ggZW5vdWdoIHNpdHVhdGlvbnMgdG8ga25vdyB0aGF0IHJlY2FsbGluZyBzcGVjaWZpYyBkZXRhaWxzLCBwYXJ0aWN1bGFybHkgdGhvc2UgZnJvbSB0aGUgbGVzcyByZWNlbnQgcGFzdCwgY2FuIGJlY29tZSBhIHByb2JsZW0uIEknbSB3b3JyaWVkIGFib3V0IGZvcmdldHRpbmcgYSBjcnVjaWFsIGVsZW1lbnQgb2YgdGhpcyBjYXNlLiBXaGF0IGlmIEknbSBub3QgYnJpbmdpbmcgYWxsIHRoZSByZWxldmFudCBkZXRhaWxzIHRvIGJlYXI/IFRoaXMgYW54aWV0eSBhcm91bmQgYWNjdXJhY3kgaGFzIGFsd2F5cyBiZWVuIHRoZSBtb3N0IHByZXNzaW5nIGZhY3RvciBpbiBteSB3b3JrLCBhbmQgaXQncyB3aHkgSSBhbHdheXMgZW1waGFzaXplIHRoZSB2YWx1ZSBvZiBkb2N1bWVudGluZyB0aGluZ3MgbWV0aG9kaWNhbGx5IGFuZCB1c2luZyBhIGNoZWNrbGlzdCB0byBtaW5pbWl6ZSBhbnkgb3ZlcnNpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDA3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxOTozODoxOS41MjAxMjU0ODZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk0NjE5NjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19NRU1PUllfRkFJTFVSRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMTE9b2JqLSQoQ09ORklHX0RNQVBPT0xfVEVTVCkgKz0gZG1hcG9vbF90ZXN0Lm9cXG5tbS9NYWtlZmlsZToxMTI6b2JqLSQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSArPSBtZW1vcnktZmFpbHVyZS5vXFxubW0vTWFrZWZpbGUtMTEzLW9iai0kKENPTkZJR19IV1BPSVNPTl9JTkpFQ1QpICs9IGh3cG9pc29uLWluamVjdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE5OjM4OjIwLjIxNDc1MDM1MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODgyODc1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCB3ZXJlIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gRm9saW8gU3BsaXR0aW5nIE1vZGlmaWNhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBzb21lIHJlY2VudCBtb2RpZmljYXRpb25zLCBzcGVjaWZpY2FsbHkgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFRoZSBrZXkgZnVuY3Rpb25zIG9mIGludGVyZXN0IGFyZSBgX19mb2xpb19zcGxpdGAgYW5kIGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBzY29wZSBvZiBgX19mb2xpb19zcGxpdGAuIElzIGl0IHN0YXRpYywgbWVhbmluZyBpdCdzIGludGVybmFsIHRvIHRoZSBmaWxlLCBvciBpcyBpdCBleHBvcnRlZCBmb3IgdXNlIGVsc2V3aGVyZT8gWWVwLCBpdCdzIHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSBjb25zdHJhaW5zIHdoZXJlIEkgbmVlZCB0byBsb29rIGZvciBpbXBhY3RzIG9mIGNoYW5nZXMuIE5vdywgdGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiBpczogV2hhdCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5ICpjYWxsaW5nKiBgX19mb2xpb19zcGxpdGA/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkIGFuZCB3aGVyZSB0aGVzZSBwb3RlbnRpYWwgY2hhbmdlcyBtaWdodCByaXBwbGUgb3V0LiBLbm93aW5nIHRoYXQgd2lsbCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gdGhlIHBvc3NpYmxlIGNvbnNlcXVlbmNlcyBvZiB0aGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ3OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE5OjM4OjIzLjUwMzA0MDQ2NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUzNDg1MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19mb2xpb19zcGxpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdlX21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9MzgwMD1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zOTU1LS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk1NjogKiBfX2ZvbGlvX3NwbGl0KCkgLSBzcGxpdCBhIGZvbGlvIGF0IEBzcGxpdF9hdCB0byBhIEBuZXdfb3JkZXIgZm9saW9cXG5tbS9odWdlX21lbW9yeS5jLTM5NTctICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zOTc1LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk3NjpzdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG5tbS9odWdlX21lbW9yeS5jLTM5NzctXFx0XFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgcGFnZSAqbG9ja19hdCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDI0OT1pbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI1My1cXG5tbS9odWdlX21lbW9yeS5jOjQyNTQ6XFx0cmV0dXJuIF9fZm9saW9fc3BsaXQoZm9saW8sIG5ld19vcmRlciwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBwYWdlLCBsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI1NS1cXHRcXHRcXHQgICAgIFNQTElUX1RZUEVfVU5JRk9STSk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQyODI9aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyODQte1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NTpcXHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni1cXHRcXHRcXHQgICAgIFNQTElUX1RZUEVfTk9OX1VOSUZPUk0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxOTozODoyMy42MzgzOTU5OTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTMxNTE2NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyBUSFAgUGFnZSBTcGxpdHRpbmcqKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHRyYW5zcGFyZW50IGh1Z2UgcGFnZSAoVEhQKSBzcGxpdHRpbmcuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgc3BsaXR0aW5nIGxvZ2ljLCBgX19mb2xpb19zcGxpdGAsIGlzIGNhbGxlZCBmcm9tIGF0IGxlYXN0IHR3byBrZXkgcGxhY2VzOiBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAgYW5kIGBmb2xpb19zcGxpdGAuIEJvdGggb2YgdGhvc2UgYXJlIHByZXR0eSBmdW5kYW1lbnRhbCB0byB0aGUgVEhQIG1hbmFnZW1lbnQgd29ya2Zsb3csIHNvIHRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCBpbnR1aXRpb24gdGhhdCB0aGV5J3JlIGltcG9ydGFudC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGUgb3ZlcmFsbCBzcGxpdCBpcyBpbml0aWF0ZWQuIEkgcmVtZW1iZXIgc2VlaW5nIGEgZnVuY3Rpb24gYHRyeV90b19zcGxpdF90aHBfcGFnZWAgYW5kIGtub3cgaXQncyBsb2NhdGVkIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gTWVtb3J5IGZhaWx1cmVzIGNhbiBvZnRlbiB0cmlnZ2VyIFRIUCBzcGxpdHRpbmcsIHNvIHRoYXQgc2VlbXMgbG9naWNhbC5cblxuVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGFuYWx5emUgdGhlIGNhbGxlcnMgb2YgYHRyeV90b19zcGxpdF90aHBfcGFnZWAgdG8gc2VlIHRoZSBicm9hZGVyIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhvc2UgY2FsbCBwYXRocyBpcyBjcnVjaWFsIHRvIHByb3Blcmx5IG1hcCB0aGUgY29udHJvbCBmbG93LiBMZXQncyB0cmFjZSB0aG9zZSBjYWxscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIzNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE5OjM4OjMwLjU2OTkyOTkwM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NTc0NTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19zcGxpdF90aHBfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmM9MTYyOT1zdGF0aWMgaW50IGlkZW50aWZ5X3BhZ2Vfc3RhdGUodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlICpwLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNjU2LSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTY1NzpzdGF0aWMgaW50IHRyeV90b19zcGxpdF90aHBfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2NTgtXFx0XFx0Ym9vbCByZWxlYXNlKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMzM3PWludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDY2LVxcdFxcdGZvbGlvX3NldF9oYXNfaHdwb2lzb25lZChmb2xpbyk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDY3OlxcdFxcdGVyciA9IHRyeV90b19zcGxpdF90aHBfcGFnZShwLCBuZXdfb3JkZXIsIC8qIHJlbGVhc2U9ICovIGZhbHNlKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0NjgtXFx0XFx0LypcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjc4Nz1zdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjgxMS1cXHRcXHQgKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI4MTI6XFx0XFx0aWYgKG5ld19vcmRlciB8fCB0cnlfdG9fc3BsaXRfdGhwX3BhZ2UocGFnZSwgLyogbmV3X29yZGVyPSAqLyAwLFxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjgxMy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgLyogcmVsZWFzZT0gKi8gdHJ1ZSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTk6Mzg6MzAuNzM1NTEwMjhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzcxOTIwNTQwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHBvdGVudGlhbCBhcmVhcyB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMuIFRoaXMgaXMgdHJpZ2dlcmVkIGJ5IGJvdGggYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuIENsZWFybHksIHRoZXNlIGFyZSBib3RoIHRlc3RhYmxlIHNjZW5hcmlvczsgdGhhdCdzIHByb21pc2luZy4gU3BlY2lmaWNhbGx5LCBgbWVtb3J5X2ZhaWx1cmVgIGlzIHJlbGF0ZWQgdG8gbWVtb3J5IGVycm9yIGluamVjdGlvbiDigJMgdGhpbmdzIGxpa2UgdXNpbmcgYG1hZHZpc2VgIHdpdGggYE1BRFZfSFdQT0lTT05gIG9yIG1lc3NpbmcgYXJvdW5kIHdpdGggc3lzZnMuIGBfX2ZvbGlvX3NwbGl0YCwgb24gdGhlIG90aGVyIGhhbmQsIGNvbWVzIGludG8gcGxheSBkdXJpbmcgVEhQIChUcmFuc3BhcmVudCBIdWdlIFBhZ2UpIHNwbGl0dGluZy4gVGhpcyBjYW4gaGFwcGVuIGR1ZSB0byB2YXJpb3VzIGBtYWR2aXNlYCBjYWxscyBsaWtlIGBNQURWX1BBR0VPVVRgIG9yIGBNQURWX0NPTERgLCBtZW1vcnkgcHJlc3N1cmUgaW4gZ2VuZXJhbCwgb3Igd2hlbiBodWdlIHBhZ2VzIGdldCBzcGxpdC5cblxuR2l2ZW4gdGhlIHRyaWdnZXIgY29uZGl0aW9ucywgdGhpcyBzZWVtcyBsaWtlIGEgc29saWQgdGFyZ2V0IGZvciBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gY29uY2VudHJhdGUgb24gc3BlY2lmaWMgc3ltYm9scyBkdXJpbmcgdGhlIGZ1enppbmc6IGBfX2ZvbGlvX3NwbGl0YCwgYHRyeV90b19zcGxpdF90aHBfcGFnZWAsIGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCwgYW5kIGBmb2xpb19zcGxpdGAuIFdhaXQsIHRoYXQncyBpbnRlcmVzdGluZy4uLiBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAgaXMgYW4gZXhwb3J0ZWQgZ2xvYmFsIGZ1bmN0aW9uLiBUaGF0IGFjdHVhbGx5IG1ha2VzIHRoaW5ncyBhIGxpdHRsZSBlYXNpZXIgdG8gdGVzdCwgZG9lc24ndCBpdD8gQmV0dGVyIGdvIGNoZWNrIHRoYXQgb25lIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkxNiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxOTozODozOC40NTQ3MTc1NzRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjMwODM2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz00MTgyPWludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MjQ4LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI0OTppbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG5tbS9odWdlX21lbW9yeS5jLTQyNTAtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxOTozODozOC41NjEwMzA4OTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2NTA4ODMzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczpcblxuKipBbmFseXppbmcgYHRyeV90b19zcGxpdF90aHBfcGFnZWAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGdldCBhIGdvb2QgaGFuZGxlIG9uIHRoaXMgYHRyeV90b19zcGxpdF90aHBfcGFnZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlLCB3aGF0IGl0cyBpbnB1dHMgYXJlLCBhbmQgd2hhdCBpdCdzIHRyeWluZyB0byBhY2hpZXZlLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IGl0J3MgdXNlZCB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpIG1hbmFnZW1lbnQuIFRoaXMgd2lsbCBnaXZlIG1lIGNydWNpYWwgY2x1ZXMgYWJvdXQgaXRzIHJlc3BvbnNpYmlsaXRpZXMgYW5kIHBvdGVudGlhbCBpbXBhY3QuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY2VuYXJpb3Mgd2hlcmUgaXQncyBjYWxsZWQgYW5kIHRoZSBwb3RlbnRpYWwgY29uc2VxdWVuY2VzIG9mIGEgc3VjY2Vzc2Z1bCBvciB1bnN1Y2Nlc3NmdWwgZXhlY3V0aW9uLiBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGZ1bmN0aW9uJ3MgZGVjbGFyYXRpb24gYW5kIGFueSBhc3NvY2lhdGVkIGNvbW1lbnRzIHRvIGdldCBhIHByZWxpbWluYXJ5IGdyYXNwIG9uIGl0cyBkZXNpZ24gaW50ZW50LiBJIGtub3cgdGhhdCBUSFAgaGFuZGxpbmcgaXMgaW50cmljYXRlLCBzbyBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU3MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE5OjM4OjQzLjYyNjEyMThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MDA4MzQ5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fc3BsaXRfdGhwX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jPTE2Mjk9c3RhdGljIGludCBpZGVudGlmeV9wYWdlX3N0YXRlKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqcCxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTY1Ni0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE2NTc6c3RhdGljIGludCB0cnlfdG9fc3BsaXRfdGhwX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNjU4LVxcdFxcdGJvb2wgcmVsZWFzZSlcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjMzNz1pbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ2Ni1cXHRcXHRmb2xpb19zZXRfaGFzX2h3cG9pc29uZWQoZm9saW8pO1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjQ2NzpcXHRcXHRlcnIgPSB0cnlfdG9fc3BsaXRfdGhwX3BhZ2UocCwgbmV3X29yZGVyLCAvKiByZWxlYXNlPSAqLyBmYWxzZSk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDY4LVxcdFxcdC8qXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI3ODc9c3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4MTEtXFx0XFx0ICovXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyODEyOlxcdFxcdGlmIChuZXdfb3JkZXIgfHwgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHBhZ2UsIC8qIG5ld19vcmRlcj0gKi8gMCxcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4MTMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIC8qIHJlbGVhc2U9ICovIHRydWUpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE5OjM4OjQ0LjI4NjIxMDQ1N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjc0MzEyMTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gSSdtIGxvb2tpbmcgYXQgdGhlIHN5c3RlbSdzIG1lbW9yeSBjb25maWd1cmF0aW9uLiBUaGUgaW5pdGlhbCBjdWVzIGFyZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgTUVNT1JZX0ZBSUxVUkVgLiBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSwgc28gSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyBpbiBwbGF5LiBJJ2xsIG5lZWQgdG8ga25vdyBhbGwgdGhlIGxldmVycy4gQWgsIGBNRU1PUllfRkFJTFVSRWAgc3BlY2lmaWNhbGx5LiBJIGtub3cgdGhhdCBvbmUncyB1c3VhbGx5IGRlZmluZWQgaW4gYG1tL0tjb25maWdgLCB3aGljaCBjb25maXJtcyBteSB1bmRlcnN0YW5kaW5nLiBOb3cgdG8gZGlnIGRlZXBlciBhbmQgdW5kZXJzdGFuZCBob3cgYWxsIHRoZSBwaWVjZXMgaW50ZXJhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNzYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxOTozODo0OC41NjA1MjQ5NDFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODQ3MjE4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0ZBSUxVUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTc3ND1jb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbi0tXFxubW0vS2NvbmZpZy03NzYtXFxubW0vS2NvbmZpZzo3Nzc6Y29uZmlnIE1FTU9SWV9GQUlMVVJFXFxubW0vS2NvbmZpZy03NzgtXFx0ZGVwZW5kcyBvbiBNTVVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTk6Mzg6NDguNzE5MDAyMjc3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NDQ0NDA1OTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipNeSBEZWVwIERpdmUgaW50byBIdWdlIFBhZ2VzKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uICpUUkFOU1BBUkVOVF9IVUdFUEFHRSouLi4gYWgsIHllcywgSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHksIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgKFRIUCkuIE15IG1lbnRhbCBtYXAgaW1tZWRpYXRlbHkgbmF2aWdhdGVzIG1lIHRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhlIHZlcnkgZmFjdCB0aGF0IHRoaXMgaXMgaW4gYG1tL0tjb25maWdgIGNvbmZpcm1zIG15IGluaXRpYWwgdGhvdWdodC4gVGhhdCdzICp0aGUqIHBsYWNlIHRvIGdvIGZvciBhbGwgdGhpbmdzIG1lbW9yeS1yZWxhdGVkIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0J3MgdGhlIGNlbnRyYWwgaHViIGZvciBkZWNpZGluZyBpZiBUSFAgc3VwcG9ydCBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgbG9jYXRpb24gdGVsbHMgbWUgdGhhdCdzIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzZXR0aW5nIGNvbnRyb2xsaW5nIFRIUC4gVGhhdCBtZWFucyBJIGNhbiB0dW5lIG9yIGRpc2FibGUgdGhlIHN1cHBvcnQgZm9yIHRoZW0gYXQgY29tcGlsZSB0aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDY0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTk6Mzk6MDQuMTYzNDEwOTk2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzY5MjU0MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04NDM9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTg0NS1cXG5tbS9LY29uZmlnOjg0NjptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04NDctXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODY0PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04NjktXFxubW0vS2NvbmZpZzo4NzA6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL0tjb25maWctODcxLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctODc2LVxcbm1tL0tjb25maWc6ODc3OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxubW0vS2NvbmZpZy04NzgtXFx0XFx0Ym9vbCBcXFwibWFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODg1LVxcbm1tL0tjb25maWc6ODg2OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxcbm1tL0tjb25maWctODg3LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZz04OTM9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTkwMi1cXG5tbS9LY29uZmlnOjkwMzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxcbm1tL0tjb25maWctOTA0LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MTItXFxubW0vS2NvbmZpZzo5MTM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05MTQtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MjAtXFxubW0vS2NvbmZpZzo5MjE6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTkyMi1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTI4LVxcbm1tL0tjb25maWc6OTI5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTMwLVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9OTM4PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05NDctXFxubW0vS2NvbmZpZzo5NDg6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTk0OS1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTU2LVxcbm1tL0tjb25maWc6OTU3OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTU4LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTY0LVxcbm1tL0tjb25maWc6OTY1OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05NjYtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk3Mi1cXG5tbS9LY29uZmlnOjk3MzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTk3NC1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE5OjM5OjA0LjQ0MDM2NDc0MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODc1NjMzMjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEh1Z2UgUGFnZSBBbGxvY2F0aW9uIEZhaWx1cmUqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGEgaHVnZSBwYWdlIGFsbG9jYXRpb24gaXNzdWUsIGFuZCB0aGUga2V5IHN1c3BlY3RzIGluIHRoZSBrZXJuZWwgY29uZmlncyBhcmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQsIHF1aXRlIGxpa2VseSwgYE1FTU9SWV9GQUlMVVJFYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGNhdXNpbmcgdGhlIHByb2JsZW0uIE15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgX19mb2xpb19zcGxpdGAgZnVuY3Rpb24gd2l0aGluIGBtbS9odWdlX21lbW9yeS5jYC4gVGhhdCdzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciBzcGxpdHRpbmcgZm9saW9zIChhbmQgY29uc2VxdWVudGx5LCBodWdlIHBhZ2VzKSByZXNpZGVzLiBVbmRlcnN0YW5kaW5nIGhvdyBhbmQgd2hlbiBhIGZvbGlvIHNwbGl0IG9jY3VycywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIGBNRU1PUllfRkFJTFVSRWAgb3Igb3RoZXIgYWxsb2NhdGlvbi1yZWxhdGVkIGVycm9ycywgd2lsbCBsaWtlbHkgcHJvdmlkZSB2YWx1YWJsZSBpbnNpZ2h0cyBpbnRvIHRoZSByb290IGNhdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mzk2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTk6Mzk6MDcuMzE2MDAwNjgzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjgyNjkwNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19mb2xpb19zcGxpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdlX21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9MzgwMD1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zOTU1LS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk1NjogKiBfX2ZvbGlvX3NwbGl0KCkgLSBzcGxpdCBhIGZvbGlvIGF0IEBzcGxpdF9hdCB0byBhIEBuZXdfb3JkZXIgZm9saW9cXG5tbS9odWdlX21lbW9yeS5jLTM5NTctICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zOTc1LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk3NjpzdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG5tbS9odWdlX21lbW9yeS5jLTM5NzctXFx0XFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgcGFnZSAqbG9ja19hdCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDI0OT1pbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI1My1cXG5tbS9odWdlX21lbW9yeS5jOjQyNTQ6XFx0cmV0dXJuIF9fZm9saW9fc3BsaXQoZm9saW8sIG5ld19vcmRlciwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBwYWdlLCBsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI1NS1cXHRcXHRcXHQgICAgIFNQTElUX1RZUEVfVU5JRk9STSk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQyODI9aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyODQte1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NTpcXHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni1cXHRcXHRcXHQgICAgIFNQTElUX1RZUEVfTk9OX1VOSUZPUk0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxOTozOTowNy40ODQyNzg4MjlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc1ODAyNDk2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBGb2xpbyBTcGxpdHRpbmcgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGR1cmluZyBmb2xpbyBzcGxpdHRpbmcsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiB0cnVuY2F0aW9uLiBUaGUgYWRkaXRpb24gb2YgdGhlIGNoZWNrIHdpdGhpbiBgX19mb2xpb19zcGxpdGAgaXMgdGhlIGtleS4gVGhlIGNvZGUgbm93IHByZXZlbnRzIGEgZm9saW8gZnJvbSBiZWluZyBzcGxpdCBpZiBpdHMgaW5kZXgsIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgaW5kZXggb2YgdGhlIGxvY2tlZCBwb3J0aW9uLCBleGNlZWRzIHRoZSBlbmQgb2YgdGhlIGZpbGUuIFRoaXMgaXMgY3J1Y2lhbCBiZWNhdXNlLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHRoZSBsb2NrZWQgZm9saW8gc2VydmVzIGFzIGEgdml0YWwgcGluIG9uIHRoZSBpbm9kZS4gSWYgYSBmb2xpbyBpcyBzcGxpdCAqcGFzdCogdGhlIGVuZC1vZi1maWxlLCBpdCBjb3VsZCBiZSBkcm9wcGVkIGZyb20gdGhlIHBhZ2UgY2FjaGUgd2hpbGUgc3RpbGwgbG9ja2VkLCBsZWFkaW5nIHRvIHRoZSBpbm9kZSBiZWluZyBmcmVlZCBwcmVtYXR1cmVseS4gVGhhdCdzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBzY2VuYXJpbyBhbmQgYSBkZWZpbml0ZSBwcm9ibGVtLiBJdCBwcmV2ZW50cyB0aGUgbWFwcGluZyBmcm9tIGJlaW5nIGRlcmVmZXJlbmNlZCBhZnRlciB0aGUgc3BsaXQuXG5cblRoZW4gd2UgaGF2ZSBhIGNoYW5nZSB0byBgdHJ5X3RvX3NwbGl0X3RocF9wYWdlYCBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIEl0J3Mgbm93IGxvY2tpbmcgdGhlIGZvbGlvIGRpcmVjdGx5IGluc3RlYWQgb2YgdGhlIGluZGl2aWR1YWwgcGFnZS4gVGhlIGNvbW1lbnQgaGlnaGxpZ2h0cyB0aGF0IGBfX2ZvbGlvX3NwbGl0YCBuZWVkcyB0aGUgYW5jaG9yIGZvbGlvIGxvY2tlZCBhbmQgcHJlc2VudCBpbiB0aGUgcGFnZSBjYWNoZSB0byBjb3JyZWN0bHkgcGluIHRoZSBpbm9kZS4gVGhlIGNhbGxlciByZWxvY2tzIHRoZSBwYWdlIGFmdGVyd2FyZHMuIFRoaXMgc2VlbXMgc2Vuc2libGUsIGFzIGl0IGFsaWducyBiZXR0ZXIgd2l0aCB0aGUgZm9saW8tYmFzZWQgYXBwcm9hY2gsIGVuc3VyaW5nIHRoZSBlbnRpcmUgZm9saW8ncyBzdGF0ZSBpcyBjb25zaXN0ZW50IGR1cmluZyB0aGUgc3BsaXQuXG5cbkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlcywgbXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGFic29sdXRlbHkgbmVlZHMgdG8gYmUgZnV6emVkLiBUaGUgZm9jdXMgaGFzIHRvIGJlIG9uIGBfX2ZvbGlvX3NwbGl0YCBhbmQgYHRyeV90b19zcGxpdF90aHBfcGFnZWAsIGJlY2F1c2UgdGhvc2UgYXJlIHRoZSBtb3N0IG1vZGlmaWVkIHBhcnRzLiBUaGUgY29uZmlncyBJIHdhbnQgdG8gbG9vayBhdCBhcmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYE1FTU9SWV9GQUlMVVJFYCBiZWNhdXNlIHRoZXkncmUgcmVsZXZhbnQgZm9yIGhvdyB0aGUgZm9saW8gc3BsaXR0aW5nIGlzIHVzZWQsIGFuZCBpbiB0aGUgY2FzZSBvZiBgTUVNT1JZX0ZBSUxVUkVgIGl0J3MgcmlnaHQgaW4gdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGJlY2F1c2UgSSB3YW50IHRvIGJlIHRob3JvdWdoLiBPa2F5LCBzbyBgTUVNT1JZX0ZBSUxVUkVgIGRlcGVuZHMgb24gYE1NVWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGRlcGVuZHMgb24gYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEdvb2QuIEknbSBnb2luZyB0byBzZXQgdGhlc2UgcmVzdWx0cyBhbmQgZ2V0IGEgZnV6emluZyBjYW1wYWlnbiBzdGFydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDgwLCJPdXRwdXRUb2tlbnMiOjE0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxOTozOToxNS4yNDIzMDcxMzNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjU2NzY5NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZm9saW9fc3BsaXRcIixcbiAgICBcInRyeV90b19zcGxpdF90aHBfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGhhbmRsaW5nIG9mIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkgYW5kIG1lbW9yeSBmYWlsdXJlLiBJdCBhZGRzIGEgY2hlY2sgaW4gYF9fZm9saW9fc3BsaXRgIHRvIHByZXZlbnQgc3BsaXR0aW5nIGEgZm9saW8gdGhhdCBpcyByYWNpbmcgd2l0aCB0cnVuY2F0aW9uLCBhbmQgY2hhbmdlcyBgdHJ5X3RvX3NwbGl0X3RocF9wYWdlYCB0byBsb2NrIHRoZSBmb2xpbyBpbnN0ZWFkIG9mIHRoZSBwYWdlLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZm9saW9fc3BsaXRcIixcbiAgICBcInRyeV90b19zcGxpdF90aHBfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGhhbmRsaW5nIG9mIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkgYW5kIG1lbW9yeSBmYWlsdXJlLiBJdCBhZGRzIGEgY2hlY2sgaW4gYF9fZm9saW9fc3BsaXRgIHRvIHByZXZlbnQgc3BsaXR0aW5nIGEgZm9saW8gdGhhdCBpcyByYWNpbmcgd2l0aCB0cnVuY2F0aW9uLCBhbmQgY2hhbmdlcyBgdHJ5X3RvX3NwbGl0X3RocF9wYWdlYCB0byBsb2NrIHRoZSBmb2xpbyBpbnN0ZWFkIG9mIHRoZSBwYWdlLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmzlcq[1] Phase: Succeeded StartedAt: 2026-07-14 19:39:27 +0000 UTC FinishedAt: 2026-07-14 19:39:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmzlcq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-14 19:39:27 +0000 UTC FinishedAt: 2026-07-14 19:39:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmzlcq[2] Phase: Succeeded StartedAt: 2026-07-14 19:39:27 +0000 UTC FinishedAt: 2026-07-15 00:19:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-14 19:39:28 +0000 UTC FinishedAt: 2026-07-15 00:19:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-14 19:39:28 +0000 UTC FinishedAt: 2026-07-14 19:40:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-14 19:39:28 +0000 UTC FinishedAt: 2026-07-14 19:40:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowmzlcq/series-workflowmzlcq-convert-artifact-780869342/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-14 19:40:34 +0000 UTC FinishedAt: 2026-07-14 20:07:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-14 19:40:34 +0000 UTC FinishedAt: 2026-07-14 20:07:25 +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:*92eb775c-00f7-4e32-9818-6779941457fc,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-workflowmzlcq/series-workflowmzlcq-convert-artifact-780869342/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": "22ef1cee-cbd0-4003-a735-fcbc9c137488", "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-workflowmzlcq/series-workflowmzlcq-build-action-67583940/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-14 19:40:34 +0000 UTC FinishedAt: 2026-07-14 20:07:15 +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:*92eb775c-00f7-4e32-9818-6779941457fc,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-workflowmzlcq/series-workflowmzlcq-convert-artifact-780869342/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": "22ef1cee-cbd0-4003-a735-fcbc9c137488", "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-workflowmzlcq/series-workflowmzlcq-build-action-67583940/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-14 20:07:25 +0000 UTC FinishedAt: 2026-07-14 20:07:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-14 20:07:25 +0000 UTC FinishedAt: 2026-07-14 20:07:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-14 20:07:25 +0000 UTC FinishedAt: 2026-07-14 20:07:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-14 20:07:25 +0000 UTC FinishedAt: 2026-07-14 20:07:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowmzlcq/series-workflowmzlcq-convert-artifact-2689897617/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-14 20:07:46 +0000 UTC FinishedAt: 2026-07-14 20:09:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-14 20:07:46 +0000 UTC FinishedAt: 2026-07-14 20:09:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*22ef1cee-cbd0-4003-a735-fcbc9c137488,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-workflowmzlcq/series-workflowmzlcq-build-action-67583940/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-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-14 20:09:32 +0000 UTC FinishedAt: 2026-07-14 20:09:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-14 20:09:32 +0000 UTC FinishedAt: 2026-07-14 20:09:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-14 20:09:32 +0000 UTC FinishedAt: 2026-07-14 21:12:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-14 20:09:32 +0000 UTC FinishedAt: 2026-07-14 21:12:23 +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:*92eb775c-00f7-4e32-9818-6779941457fc,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-workflowmzlcq/series-workflowmzlcq-convert-artifact-2689897617/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": "8d6a621e-aae6-4f99-8e0e-d0e02ddbed71", "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-workflowmzlcq/series-workflowmzlcq-build-action-1449886813/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-14 20:09:32 +0000 UTC FinishedAt: 2026-07-14 21:12:13 +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:*92eb775c-00f7-4e32-9818-6779941457fc,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-workflowmzlcq/series-workflowmzlcq-convert-artifact-2689897617/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": "8d6a621e-aae6-4f99-8e0e-d0e02ddbed71", "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-workflowmzlcq/series-workflowmzlcq-build-action-1449886813/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-14 21:12:23 +0000 UTC FinishedAt: 2026-07-14 21:12:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-14 21:12:23 +0000 UTC FinishedAt: 2026-07-14 21:12:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-14 21:12:23 +0000 UTC FinishedAt: 2026-07-14 21:14:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-14 21:12:23 +0000 UTC FinishedAt: 2026-07-14 21:14:27 +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:*8d6a621e-aae6-4f99-8e0e-d0e02ddbed71,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-workflowmzlcq/series-workflowmzlcq-build-action-1449886813/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-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-14 21:14:37 +0000 UTC FinishedAt: 2026-07-15 00:19:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-14 21:14:37 +0000 UTC FinishedAt: 2026-07-15 00:19:52 +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":["__folio_split","try_to_split_thp_page"],"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:*22ef1cee-cbd0-4003-a735-fcbc9c137488,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8d6a621e-aae6-4f99-8e0e-d0e02ddbed71,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-workflowmzlcq/series-workflowmzlcq-build-action-67583940/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-workflowmzlcq/series-workflowmzlcq-build-action-1449886813/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-14 21:14:37 +0000 UTC FinishedAt: 2026-07-14 21:15:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-14 21:14:37 +0000 UTC FinishedAt: 2026-07-14 21:14:57 +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":["__folio_split","try_to_split_thp_page"],"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-workflowmzlcq/series-workflowmzlcq-convert-artifact-4071637446/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-14 21:14:37 +0000 UTC FinishedAt: 2026-07-14 21:14:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-14 21:14:37 +0000 UTC FinishedAt: 2026-07-14 21:14:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-14 21:14:37 +0000 UTC FinishedAt: 2026-07-14 21:14:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-14 21:15:01 +0000 UTC FinishedAt: 2026-07-15 00:19:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmzlcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_split","try_to_split_thp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE"],"series_id":"6cad3430-1f9b-4a56-b60a-ef3ed2833e15","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-14 21:15:01 +0000 UTC FinishedAt: 2026-07-15 00:19:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*22ef1cee-cbd0-4003-a735-fcbc9c137488,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8d6a621e-aae6-4f99-8e0e-d0e02ddbed71,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-workflowmzlcq/series-workflowmzlcq-build-action-67583940/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-workflowmzlcq/series-workflowmzlcq-build-action-1449886813/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-workflowmzlcq/series-workflowmzlcq-convert-artifact-4071637446/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,}